From ca3a6f8da3bd8667d11316aca6565fa873ffaf42 Mon Sep 17 00:00:00 2001 From: Reini Urban Date: Wed, 11 Dec 2024 21:08:26 +0100 Subject: [PATCH] new benchmarks: i7 and epyc, redo missing hashes new numbers from i7-6820HQ 3.5GHz (Lenovo P50 from 2024) and AMD EPYC 9554P 64-Core Processor (Server from 2024) --- README.md | 387 +- doc/BadHash.txt | 88 +- doc/City128.txt | 88 +- doc/City32.txt | 88 +- doc/City64.txt | 88 +- doc/City64low.txt | 88 +- doc/City64noSeed.txt | 86 +- doc/CityCrc128.txt | 88 +- doc/CityCrc256.txt | 1991 ++++ doc/Crap8.txt | 78 +- doc/FNV128.txt | 88 +- doc/FNV1A_Pippip_Yurii.txt | 66 +- doc/FNV1A_Totenschiff.txt | 74 +- doc/FNV1a.txt | 80 +- doc/FNV1a_YT.txt | 42 +- doc/FNV2.txt | 52 +- doc/FNV64.txt | 68 +- doc/FarmHash128.txt | 88 +- doc/FarmHash32.txt | 88 +- doc/FarmHash64.txt | 84 +- doc/GoodOAAT.txt | 72 +- doc/HalfSipHash.txt | 82 +- doc/JenkinsOOAT.txt | 88 +- doc/JenkinsOOAT_perl.txt | 88 +- doc/MUM.txt | 66 +- doc/MUMlow.txt | 70 +- doc/MeowHash.txt | 86 +- doc/MeowHash32low.txt | 88 +- doc/MeowHash64low.txt | 88 +- doc/MicroOAAT.txt | 72 +- doc/Murmur1.txt | 68 +- doc/Murmur2.txt | 60 +- doc/Murmur2A.txt | 86 +- doc/Murmur2B.txt | 64 +- doc/Murmur2C.txt | 70 +- doc/Murmur3A.txt | 84 +- doc/Murmur3C.txt | 70 +- doc/Murmur3F.txt | 78 +- doc/MurmurOAAT.txt | 86 +- doc/NOP_OAAT_read64.txt | 84 +- doc/PMPML_32.txt | 88 +- doc/PMPML_64.txt | 88 +- doc/PMurHash32.txt | 78 +- doc/SipHash.txt | 88 +- doc/SipHash13.txt | 88 +- doc/Spooky128.txt | 88 +- doc/Spooky32.txt | 88 +- doc/Spooky64.txt | 74 +- doc/SpookyV2_128.txt | 86 +- doc/SpookyV2_32.txt | 80 +- doc/SpookyV2_64.txt | 88 +- doc/TSip.txt | 88 +- doc/VHASH_32.txt | 88 +- doc/VHASH_64.txt | 88 +- doc/aesni-low.txt | 48 +- doc/aesni.txt | 58 +- doc/aesnihash.txt | 88 +- doc/air.html | 180 +- doc/asconhashv12.txt | 88 +- doc/asconhashv12_64.txt | 88 +- doc/beamsplitter.txt | 88 +- doc/bernstein.txt | 88 +- doc/blake2b-160.txt | 88 +- doc/blake2b-224.txt | 88 +- doc/blake2b-256.txt | 88 +- doc/blake2b-256_64.txt | 88 +- doc/blake2s-128.txt | 88 +- doc/blake2s-160.txt | 88 +- doc/blake2s-224.txt | 88 +- doc/blake2s-256.txt | 88 +- doc/blake2s-256_64.txt | 88 +- doc/blake3_c.txt | 88 +- doc/chaskey.txt | 88 +- doc/clhash.txt | 88 +- doc/cmetrohash64_1.txt | 88 +- doc/cmetrohash64_1o.txt | 88 +- doc/cmetrohash64_2.txt | 80 +- doc/crc32.txt | 88 +- doc/crc32_hw.txt | 88 +- doc/crc32_hw1.txt | 88 +- doc/crc32_pclmul.txt | 88 +- doc/crc64_hw.txt | 86 +- doc/crc64_jones.txt | 2079 ++++ doc/crc64_jones1.txt | 2079 ++++ doc/crc64_jones2.txt | 2073 ++++ doc/crc64_jones3.txt | 2079 ++++ doc/discoNONG.txt | 88 +- doc/discohash1-128.txt | 88 +- doc/discohash1.txt | 88 +- doc/discohash2-128.txt | 88 +- doc/discohash2.txt | 88 +- doc/donothing128.txt | 88 +- doc/donothing32.txt | 88 +- doc/donothing64.txt | 88 +- doc/edonr224.txt | 84 +- doc/edonr256.txt | 88 +- doc/epyc.html | 1927 ++++ doc/falkhash.txt | 88 +- doc/farmhash128_c.txt | 88 +- doc/farmhash32_c.txt | 88 +- doc/farmhash64_c.txt | 88 +- doc/farsh128.txt | 88 +- doc/farsh256.txt | 88 +- doc/farsh32.txt | 88 +- doc/farsh64.txt | 88 +- doc/fasthash32.txt | 66 +- doc/fasthash64.txt | 82 +- doc/fibonacci.txt | 64 +- doc/fletcher2.txt | 54 +- doc/fletcher4.txt | 76 +- doc/floppsyhash.txt | 88 +- doc/gcc.txt | 76 +- doc/gxhash64.txt | 88 +- doc/halftime_hash128.txt | 88 +- doc/halftime_hash256.txt | 88 +- doc/halftime_hash512.txt | 88 +- doc/halftime_hash64.txt | 86 +- doc/hasshe2.txt | 88 +- doc/i686.html | 18 + doc/i7.html | 1926 ++++ doc/intel.html | 90 + doc/jodyhash32.txt | 78 +- doc/jodyhash64.txt | 88 +- doc/k-hash32.txt | 62 +- doc/k-hash64.txt | 88 +- doc/k-hashv32.txt | 88 +- doc/k-hashv64.txt | 88 +- doc/komihash.txt | 66 +- doc/libiberty.txt | 86 +- doc/lookup3.txt | 62 +- doc/md5-128.txt | 88 +- doc/md5_32.txt | 88 +- doc/md5_64.txt | 88 +- doc/metrohash128.txt | 88 +- doc/metrohash128_1.txt | 86 +- doc/metrohash128_2.txt | 88 +- doc/metrohash128crc_1.txt | 88 +- doc/metrohash128crc_2.txt | 88 +- doc/metrohash64.txt | 88 +- doc/metrohash64_1.txt | 62 +- doc/metrohash64_2.txt | 62 +- doc/metrohash64crc_1.txt | 88 +- doc/metrohash64crc_2.txt | 80 +- doc/mirhash.txt | 88 +- doc/mirhash32low.txt | 80 +- doc/mirhashstrict.txt | 80 +- doc/mirhashstrict32low.txt | 88 +- doc/multiply_shift.txt | 86 +- doc/mx3.txt | 88 +- doc/nmhash32.txt | 88 +- doc/nmhash32x.txt | 88 +- doc/o1hash.txt | 74 +- doc/pair_multiply_shift.txt | 86 +- doc/pearsonbhash128.txt | 88 +- doc/pearsonbhash256.txt | 88 +- doc/pearsonbhash64.txt | 88 +- doc/pearsonhash128.txt | 82 +- doc/pearsonhash256.txt | 88 +- doc/pearsonhash64.txt | 82 +- doc/pengyhash.txt | 88 +- doc/phone.html | 146 + doc/poly_1_mersenne.txt | 82 +- doc/poly_2_mersenne.txt | 88 +- doc/poly_3_mersenne.txt | 78 +- doc/poly_4_mersenne.txt | 88 +- doc/polymur.txt | 88 +- doc/prvhash64_128.txt | 84 +- doc/prvhash64_64.txt | 84 +- doc/prvhash64_64m.txt | 84 +- doc/prvhash64s_128.txt | 88 +- doc/prvhash64s_64.txt | 88 +- doc/rapidhash.txt | 88 +- doc/rapidhash_unrolled.txt | 88 +- doc/rmd128.txt | 88 +- doc/rmd160.txt | 88 +- doc/rmd256.txt | 88 +- doc/ryzen3.html | 954 +- doc/sdbm.txt | 78 +- doc/seahash.txt | 84 +- doc/seahash32low.txt | 85 +- doc/sha1-160.txt | 88 +- doc/sha1_32.txt | 88 +- doc/sha1_64.txt | 88 +- doc/sha1ni.txt | 88 +- doc/sha1ni_32.txt | 88 +- doc/sha2-224.txt | 88 +- doc/sha2-224_64.txt | 88 +- doc/sha2-256.txt | 88 +- doc/sha2-256_64.txt | 88 +- doc/sha2ni-256.txt | 88 +- doc/sha2ni-256_64.txt | 88 +- doc/sha3-256.txt | 88 +- doc/sha3-256_64.txt | 88 +- doc/sumhash.txt | 88 +- doc/sumhash32.txt | 86 +- doc/superfast.txt | 72 +- doc/t1ha0_32be.txt | 88 +- doc/t1ha0_32le.txt | 88 +- doc/t1ha0_aes_avx1.txt | 56 +- doc/t1ha0_aes_avx2.txt | 76 +- doc/t1ha0_aes_noavx.txt | 80 +- doc/t1ha1_64be.txt | 88 +- doc/t1ha1_64le.txt | 58 +- doc/t1ha2_atonce.txt | 88 +- doc/t1ha2_atonce128.txt | 74 +- doc/t1ha2_stream.txt | 88 +- doc/t1ha2_stream128.txt | 88 +- doc/table.html | 1318 +-- doc/tabulation.txt | 88 +- doc/tabulation32.txt | 80 +- doc/tifuhash_64.txt | 98 +- doc/umash128.txt | 88 +- doc/umash32.txt | 88 +- doc/umash32_hi.txt | 88 +- doc/umash64.txt | 88 +- doc/w1hash.txt | 1151 ++ doc/wyhash.txt | 24 +- doc/wyhash32low.txt | 68 +- doc/x17.txt | 72 +- doc/xmsx32.txt | 88 +- doc/xxHash32.txt | 88 +- doc/xxHash64.txt | 84 +- doc/xxh128.txt | 88 +- doc/xxh128low.txt | 88 +- doc/xxh3.txt | 80 +- doc/xxh3low.txt | 76 +- log.speed | 20371 +++++++++++++++++++--------------- testspeed-epyc.sh | 19 + testspeed-i7.sh | 19 + testspeed.sh | 9 + 230 files changed, 37605 insertions(+), 18702 deletions(-) create mode 100644 doc/CityCrc256.txt create mode 100644 doc/crc64_jones.txt create mode 100644 doc/crc64_jones1.txt create mode 100644 doc/crc64_jones2.txt create mode 100644 doc/crc64_jones3.txt create mode 100644 doc/epyc.html create mode 100644 doc/i7.html create mode 100644 doc/w1hash.txt create mode 100755 testspeed-epyc.sh create mode 100755 testspeed-i7.sh diff --git a/README.md b/README.md index 642eef2e..dc2052e4 100644 --- a/README.md +++ b/README.md @@ -5,20 +5,20 @@ SMhasher | Hash function | MiB/sec |cycl./hash|cycl./map | size| Quality problems | |:----------------------------------------------|-------------:|---------:|-----------:|----:|--------------------------------| -| [donothing32](doc/donothing32.txt) | 11149460.06 | 4.00 | -| 13 | bad seed 0, test NOP | -| [donothing64](doc/donothing64.txt) | 11787676.42 | 4.00 | -| 13 | bad seed 0, test NOP | -| [donothing128](doc/donothing128.txt) | 11745060.76 | 4.06 | -| 13 | bad seed 0, test NOP | -| [NOP_OAAT_read64](doc/NOP_OAAT_read64.txt) | 11372846.37 | 14.00 | -| 47 | test NOP | -| [BadHash](doc/BadHash.txt) | 769.94 | 73.97 | -| 47 | bad seed 0, test FAIL | -| [sumhash](doc/sumhash.txt) | 10699.57 | 29.53 | -| 363 | bad seed 0, test FAIL | -| [sumhash32](doc/sumhash32.txt) | 42877.79 | 23.12 | -| 863 | UB, test FAIL | -| [multiply_shift](doc/multiply_shift.txt) | 8026.77 | 26.05 | 226.80 (8) | 345 | bad seeds & 0xfffffff0, fails most tests | -| [pair_multiply_shift](doc/pair_multiply_shift)| 3716.95 | 40.22 | 186.34 (3) | 609 | fails most tests | +| [donothing32](doc/donothing32.txt) | 11536809.55 | 4.00 | -| 13 | bad seed 0, test NOP | +| [donothing64](doc/donothing64.txt) | 12269832.97 | 4.00 | -| 13 | bad seed 0, test NOP | +| [donothing128](doc/donothing128.txt) | 11961841.48 | 4.08 | -| 13 | bad seed 0, test NOP | +| [NOP_OAAT_read64](doc/NOP_OAAT_read64.txt) | 11652662.97 | 14.00 | -| 47 | test NOP | +| [BadHash](doc/BadHash.txt) | 794.68 | 72.80 | -| 47 | bad seed 0, test FAIL | +| [sumhash](doc/sumhash.txt) | 10184.67 | 29.40 | -| 363 | bad seed 0, test FAIL | +| [sumhash32](doc/sumhash32.txt) | 44755.87 | 23.46 | -| 863 | UB, test FAIL | +| [multiply_shift](doc/multiply_shift.txt) | 8286.63 | 25.39 | 209.06 (2) | 345 | bad seeds & 0xfffffff0, fails most tests | +| [pair_multiply_shift](doc/pair_multiply_shift.txt)| 5728.05 | 39.67 | 218.48 (12)| 609 | fails most tests | | -------------------------- | | | | | | -| [crc32](doc/crc32.txt) | 383.12 | 134.21 | 257.50 (11)| 422 | insecure, 8590x collisions, distrib, PerlinNoise | -| [md5_32](doc/md5_32.txt) | 350.53 | 644.31 | 894.12 (10)|4419 | | -| [md5_64](doc/md5_64.txt) | 351.01 | 656.67 | 897.43 (12)|4419 | | -| [md5-128](doc/md5-128.txt) | 350.89 | 681.88 | 894.03 (13)|4419 | | +| [crc32](doc/crc32.txt) | 369.88 | 142.33 | 396.81 (101)| 422 | insecure, 8590x collisions, distrib, PerlinNoise | +| [md5_32](doc/md5_32.txt) | 359.43 | 638.92 | 865.21 (6) |4419 | | +| [md5_64](doc/md5_64.txt) | 360.20 | 640.38 | 869.55 (6) |4419 | | +| [md5-128](doc/md5-128.txt) | 344.63 | 669.59 | 856.34 (5) |4419 | | | [sha1_32](doc/sha1_32.txt) | 353.03 | 1385.80 |1759.94 (5) |5126 | Sanity, Cyclic low32, 36.6% distrib | | [sha1_64](doc/sha1_64.txt) | 353.03 | 1385.80 |1759.94 (5) |5126 | Sanity, Cyclic low32, 36.6% distrib | | [sha1-160](doc/sha1-160.txt) | 364.95 | 1470.55 |1794.16 (13)|5126 | Comb/Cyclic low32 | @@ -26,16 +26,16 @@ SMhasher | [sha2-224_64](doc/sha2-224_64.txt) | 147.60 | 1360.10 |1620.93 (13)| | Cyclic low32 | | [sha2-256](doc/sha2-256.txt) | 147.80 | 1374.90 |1606.06 (16)| | | | [sha2-256_64](doc/sha2-256_64.txt) | 148.01 | 1376.34 |1624.71 (16)| | | -| [sha1ni](doc/sha1ni.txt) | 1601.21 | 174.16 | 397.28 (6) | 989 | insecure,sanity, Permutation, Zeroes, machine-specific | -| [sha1ni_32](doc/sha1ni_32.txt) | 1576.17 | 174.04 | 405.56 (6) | 989 | machine-specific | -| [sha2ni-256](doc/sha2ni-256.txt) | 1527.38 | 184.35 | 404.40 (4) |4241 | insecure,sanity, Permutation, Zeroes, machine-specific | -| [sha2ni-256_64](doc/sha2ni-256_64.txt) | 1501.85 | 186.20 | 407.96 (5) |4241 | Zeroes, machine-specific | -| [blake3_c](doc/blake3_c.txt) | 1288.84 | 357.69 | 582.89 (6) | | no 32bit portability | -| [rmd128](doc/rmd128.txt) | 290.90 | 710.49 | 965.55 (6) | | | +| [sha1ni](doc/sha1ni.txt) | 1632.88 | 170.77 | 379.84 (5) | 989 | insecure,sanity, Permutation, Zeroes, machine-specific | +| [sha1ni_32](doc/sha1ni_32.txt) | 1583.50 | 172.17 | 387.70 (4) | 989 | machine-specific | +| [sha2ni-256](doc/sha2ni-256.txt) | 1556.66 | 180.75 | 393.79 (5) |4241 | insecure,sanity, Permutation, Zeroes, machine-specific | +| [sha2ni-256_64](doc/sha2ni-256_64.txt) | 1508.82 | 184.89 | 393.07 (6) |4241 | Zeroes, machine-specific | +| [blake3_c](doc/blake3_c.txt) | 1298.04 | 354.25 | 563.63 (4) | | no 32bit portability | +| [rmd128](doc/rmd128.txt) | 294.42 | 712.67 | 930.65 (4) | | | | [rmd160](doc/rmd160.txt) | 202.16 | 1045.79 |1287.74 (16)| | Cyclic hi32 | -| [rmd256](doc/rmd256.txt) | 364.81 | 584.86 | 835.02 (11)| | | -| [edonr224](doc/edonr224.txt) | 864.69 | 303.42 | 526.94 (6) | | | -| [edonr256](doc/edonr256.txt) | 847.85 | 305.79 | 510.01 (4) | | | +| [rmd256](doc/rmd256.txt) | 366.21 | 615.39 | 830.04 (7) | | | +| [edonr224](doc/edonr224.txt) | 863.77 | 304.76 | 496.66 (3) | | | +| [edonr256](doc/edonr256.txt) | 870.97 | 296.40 | 517.82 (6) | | | | [blake2s-128](doc/blake2s-128.txt) | 295.30 | 698.09 |1059.24 (51)| | | | [blake2s-160](doc/blake2s-160.txt) | 215.01 | 1026.74 |1239.54 (11)| | | | [blake2s-224](doc/blake2s-224.txt) | 207.06 | 1063.86 |1236.50 (20)| | | @@ -46,187 +46,196 @@ SMhasher | [blake2b-256](doc/blake2b-256.txt) | 355.97 | 1232.22 |1443.31 (19)| | | | [blake2b-256_64](doc/blake2b-256_64.txt) | 356.97 | 1222.76 |1435.03 (9) | | | | [asconhashv12](doc/asconhashv12.txt) | 144.98 | 885.02 |1324.23 (38)|4341 | | -| [asconhashv12_64](doc/asconhashv12_64.txt) | 159.68 | 386.90 | 480.86 (4) |6490 | | +| [asconhashv12_64](doc/asconhashv12_64.txt) | 159.33 | 402.54 | 473.15 (4) |6490 | | | [sha3-256](doc/sha3-256.txt) | 100.58 | 3877.18 |4159.79 (37)| | PerlinNoise | | [sha3-256_64](doc/sha3-256_64.txt) | 100.57 | 3909.00 |4174.63 (16)| | PerlinNoise | -| [hasshe2](doc/hasshe2.txt) | 2773.89 | 64.35 | 282.30 (3) | 445 | Permutation,TwoBytes,Zeroes,Seed| -| [poly_1_mersenne](doc/poly_1_mersenne.txt) | 1369.21 | 61.59 | 248.86 (4) | 479 | fails most tests | -| [poly_2_mersenne](doc/poly_2_mersenne.txt) | 1364.03 | 70.30 | 261.00 (6) | 479 | | -| [poly_3_mersenne](doc/poly_3_mersenne.txt) | 1342.82 | 80.22 | 268.79 (2) | 479 | | -| [poly_4_mersenne](doc/poly_4_mersenne.txt) | 1343.19 | 89.13 | 277.52 (3) | 479 | | -| [tabulation32](doc/tabulation32.txt) | 5781.16 | 40.00 | 241.79 (10) | 848 | collisions | -| [tabulation](doc/tabulation.txt) | 7875.01 | 39.95 | 249.49 (3) | 554 | | -| [crc32_hw](doc/crc32_hw.txt) | 6244.38 | 41.23 | 226.80 (2) | 653 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (SSE4.2/NEON) | -| [crc32_hw1](doc/crc32_hw1.txt) | 7569.29 | 49.07 | 233.75 (3) | 671 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (x86 SSE4.2) | -| [crc64_hw](doc/crc64_hw.txt) | 6143.62 | 40.48 | 223.13 (2) | 652 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (SSE4.2/NEON) | -| [crc32_pclmul](doc/crc32_pclmul.txt) | - | - | - | | insecure, 100% bias, collisions, distrib, BIC, machine-specific (x86 SSE4.2+PCLMUL) | -| [o1hash](doc/o1hash.txt) | 11629440.57 | 18.15 | 199.35 (2) | 101 | insecure, no seed, zeros, fails all tests | -| [fibonacci](doc/fibonacci.txt) | 16878.32 | 22.94 | 803.18 (15)|1692 | UB, zeros, fails all tests | -| [FNV1a](doc/FNV1a.txt) | 760.52 | 73.83 | 254.29 (5) | 204 | bad seed, zeros, fails all tests | -| [FNV1A_Totenschiff](doc/FNV1A_Totenschiff.txt)| 6274.78 | 26.23 | 251.13 (2) | 270 | UB, zeros, fails all tests | -| [FNV1A_Pippip_Yurii](doc/FNV1A_Pippip_Yurii.txt)| 6172.14 | 27.55 | 244.80 (2) | 147 | UB, sanity, fails all tests | -| [FNV1a_YT](doc/FNV1a_YT.txt) | 13486.49 | 30.50 | 237.43 (4) | 321 | bad seed, UB, fails all tests | -| [FNV2](doc/FNV2.txt) | 6171.60 | 32.20 | 208.59 (4) | 278 | fails all tests | -| [FNV64](doc/FNV64.txt) | 774.37 | 72.43 | 201.15 (2) | 79 | fails all tests | -| [FNV128](doc/FNV128.txt) | 390.14 | 136.42 | 289.00 (3) | 171 | fails all tests | -| [k-hash32](doc/k-hash32.txt) | 2230.42 | 53.05 | 264.64 (3) | 808 | insecure, zeros, UB, bad seeds, fails all tests | -| [k-hash64](doc/k-hash64.txt) | 2451.88 | 48.66 | 249.44 (2) | 609 | insecure, zeros, UB, bad seeds, fails all tests | -| [fletcher2](doc/fletcher2.txt) | 15552.61 | 20.61 | 335.31 (3) | 248 | bad seed 0, UB, fails all tests | -| [fletcher4](doc/fletcher4.txt) | 15556.93 | 20.60 | 358.60 (3) | 371 | bad seed 0, UB, fails all tests | -| [bernstein](doc/bernstein.txt) | 1045.97 | 58.31 | 225.78 (3) | 41 | bad seed 0, fails all tests | -| [sdbm](doc/sdbm.txt) | 784.83 | 68.57 | 222.68 (5) | 41 | bad seed 0, fails all tests | -| [x17](doc/x17.txt) | 748.75 | 74.13 | 236.00 (10) | 79 | 99.98% bias, fails all tests | -| [libiberty](doc/libiberty.txt) | 628.66 | 84.95 | 225.07 (4) | 37 | insecure, 100% bias, fails all tests, bad seed | -| [gcc](doc/gcc.txt) | 611.69 | 86.47 | 231.51 (5) | 39 | insecure, 100% bias, fails all tests, bad seed | -| [JenkinsOOAT](doc/JenkinsOOAT.txt) | 627.64 | 107.04 | 252.79 (3) | 153 | bad seed 0, 53.5% bias, fails all tests | -| [JenkinsOOAT_perl](doc/JenkinsOOAT_perl.txt) | 608.10 | 94.17 | 254.09 (4) | 65 | bad seed 0, 1.5-11.5% bias, 7.2x collisions, BIC, LongNeighbors | -| [MicroOAAT](doc/MicroOAAT.txt) | 701.35 | 76.68 | 251.01 (3) | 68 | 100% bias, distrib, BIC | -| [pearsonhash64](doc/pearsonhash64.txt) | 434.17 | 124.14 | 230.79 (4) | | Avalanche, Seed, SSSE3 only. broken MSVC | -| [pearsonhash128](doc/pearsonhash128.txt) | 434.23 | 121.34 | 221.03 (7) | | Avalanche, Seed, SSSE3 only. broken MSVC | -| [pearsonhash256](doc/pearsonhash256.txt) | 444.08 | 119.11 | 229.75 (4) | | Avalanche, Seed, SSSE3 only. broken MSVC | -| [VHASH_32](doc/VHASH_32.txt) | 13053.40 | 65.84 | 289.86 (3) |1231 | sanity, Seed, MomentChi2 | -| [VHASH_64](doc/VHASH_64.txt) | 13465.50 | 63.88 | 286.38 (5) |1231 | sanity, Seed, Sparse | -| [farsh32](doc/farsh32.txt) | 27038.23 | 66.88 | 278.89 (5) | 944 | insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors | -| [farsh64](doc/farsh64.txt) | 13829.32 | 112.46 | 332.59 (3) | 944 | insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors | -| [farsh128](doc/farsh128.txt) | 6878.88 | 233.35 | 384.85 (3) | 944 | insecure: AppendedZeroes, collisions+bias, permut,combin,2bytes,zeroes,PerlinNoise | -| [farsh256](doc/farsh256.txt) | 3467.37 | 440.40 | 593.57 (5) | 944 | insecure: AppendedZeroes, collisions+bias, permut,combin,2bytes,zeroes,PerlinNoise | -| [jodyhash32](doc/jodyhash32.txt) | 1794.34 | 41.12 | 235.12 (4) | 102 | bias, collisions, distr, BIC LongNeighbors | -| [jodyhash64](doc/jodyhash64.txt) | 4813.10 | 40.72 | 239.22 (6) | 118 | bias, collisions, distr, BIC, LongNeighbors | -| [lookup3](doc/lookup3.txt) | 2475.35 | 39.65 | 240.10 (3) | 341 | UB, 28% bias, collisions, 30% distr, BIC | -| [superfast](doc/superfast.txt) | 2058.22 | 49.56 | 254.12 (3) | 210 | UB, bad seed 0, 91% bias, 5273.01x collisions, 37% distr, BIC | -| [MurmurOAAT](doc/MurmurOAAT.txt) | 506.66 | 103.33 | 236.89 (3) | 47 | bad seed 0, collisions, 99.998% distr., BIC, LongNeighbors | -| [Crap8](doc/Crap8.txt) | 3041.14 | 37.25 | 247.87 (4) | 342 | UB, 2.42% bias, collisions, 2% distrib | -| [Murmur1](doc/Murmur1.txt) | 2027.85 | 48.51 | 253.34 (3) | 358 | UB, 1 bad seed, 511x collisions, Diff, BIC | -| [Murmur2](doc/Murmur2.txt) | 3089.18 | 41.22 | 238.42 (4) | 358 | UB, 1 bad seed, 1.7% bias, 81x coll, 1.7% distrib, BIC | -| [Murmur2A](doc/Murmur2A.txt) | 3087.98 | 45.90 | 238.54 (4) | 407 | UB, 1 bad seed, 12.7% bias, LongNeighbors | -| [Murmur2B](doc/Murmur2B.txt) | 5919.38 | 38.18 | 215.96 (3) | 433 | UB, 1.8% bias, collisions, 3.4% distrib, BIC | -| [Murmur2C](doc/Murmur2C.txt) | 3810.98 | 49.09 | 218.51 (3) | 444 | UB, 2^32 bad seeds, 91% bias, collisions, distr, BIC, LongNeighbors | -| [Murmur3A](doc/Murmur3A.txt) | 2982.67 | 49.08 | 245.78 (4) | 351 | UB, 1 bad seed, Moment Chi2 69 | -| [PMurHash32](doc/PMurHash32.txt) | 3005.85 | 48.88 | 242.38 (3) |1862 | 1 bad seed, Moment Chi2 69 | -| [Murmur3C](doc/Murmur3C.txt) | 4833.18 | 56.87 | 250.47 (6) | 859 | UB, LongNeighbors, Text, DiffDist | -| [mirhash32low](doc/mirhash32low.txt) | 6145.39 | 36.95 | 235.09 (4) |1112 | UB, 4 bad seeds, Cyclic, LongNeighbors, machine-specific (32/64 differs) | -| [PMPML_32](doc/PMPML_32.txt) | 6639.68 | 45.33 | 257.45 (3) |1084 | Avalanche >512, unseeded: Seed, BIC, MomentChi2, PerlinNoise | -| [PMPML_64](doc/PMPML_64.txt) | 9833.77 | 50.00 | 251.64 (6) |1305 | unseeded: Seed, MomentChi2, BIC | -| [xxHash32](doc/xxHash32.txt) | 5865.17 | 49.20 | 242.74 (3) | 738 | LongNeighbors, collisions with 4bit diff, MomentChi2 220 | -| [metrohash64](doc/metrohash64.txt) | 14741.56 | 39.44 | 215.76 (2) | 624 | UB, LongNeighbors, BIC | -| [metrohash64_1](doc/metrohash64_1.txt) | 14298.77 | 40.31 | 223.25 (4) | 624 | UB, LongNeighbors, BIC, MomentChi2 | -| [metrohash64crc_1](doc/metrohash64crc_1.txt) | 6929.69 | 44.65 | 223.68 (3) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, MomentChi2, machine-specific (SSE4.2/NEON) | -| [metrohash64crc_2](doc/metrohash64crc_2.txt) | 8150.65 | 43.72 | 219.45 (5) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, machine-specific (SSE4.2/NEON) | -| [cmetrohash64_1o](doc/cmetrohash64_1o.txt) | 14921.73 | 38.95 | 213.25 (2) |3506 | UB, LongNeighbors, BIC, MomentChi2 | -| [cmetrohash64_1](doc/cmetrohash64_1.txt) | 14151.73 | 40.90 | 211.89 (2) | 652 | UB, LongNeighbors, BIC, MomentChi2 | -| [City64noSeed](doc/City64noSeed.txt) | 14209.19 | 31.80 | 225.90 (5) |1038 | Avalanche, Sparse, TwoBytes, MomentChi2, Seed | -| [City64](doc/City64.txt) | 13887.84 | 46.32 | 239.77 (3) |1120 | Sparse, TwoBytes | -| [t1ha1_64le](doc/t1ha1_64le.txt) | 13442.64 | 31.41 | 219.58 (3) | 517 | Avalanche | -| [t1ha1_64be](doc/t1ha1_64be.txt) | 11586.02 | 32.74 | 232.55 (3) | 555 | Avalanche | -| [t1ha0_32le](doc/t1ha0_32le.txt) | 7401.21 | 48.27 | 238.99 (3) | 509 | Sparse, LongNeighbors | -| [t1ha0_32be](doc/t1ha0_32be.txt) | 6217.37 | 50.66 | 244.51 (3) | 533 | Sparse, LongNeighbors | -| [t1ha2_stream](doc/t1ha2_stream.txt) | 14011.63 | 80.72 | 275.17 (3) |1665 | Sparse, Permutation, LongNeighbors | -| [t1ha2_stream128](doc/t1ha2_stream128.txt) | 13136.06 | 97.80 | 306.11 (7) |1665 | Sparse, Permutation, LongNeighbors | -| [aesnihash](doc/aesnihash.txt) | 5579.32 | 56.83 | 258.71 (5) |1209 | fails many tests, machine-specific (x64 AES-NI) | -| [falkhash](doc/falkhash.txt) | 50631.69 | 123.02 | 322.14 (7) | 264 | Sparse, LongNeighbors, machine-specific (x64 AES-NI) | -| [MeowHash](doc/MeowHash.txt) | 29969.40 | 64.96 | 274.29 (4) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | -| [MeowHash64low](doc/MeowHash64low.txt) | 29485.59 | 65.98 | 278.05 (3) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | -| [MeowHash32low](doc/MeowHash32low.txt) | 26944.58 | 65.95 | 292.79 (9) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | +| [hasshe2](doc/hasshe2.txt) | 2879.93 | 62.47 | 272.34 (2) | 445 | Permutation,TwoBytes,Zeroes,Seed| +| [poly_1_mersenne](doc/poly_1_mersenne.txt) | 1278.37 | 63.42 | 244.41 (1) | 479 | fails most tests | +| [poly_2_mersenne](doc/poly_2_mersenne.txt) | 1391.90 | 69.97 | 255.44 (3) | 479 | | +| [poly_3_mersenne](doc/poly_3_mersenne.txt) | 1320.15 | 80.81 | 263.12 (2) | 479 | | +| [poly_4_mersenne](doc/poly_4_mersenne.txt) | 1393.93 | 89.07 | 262.97 (2) | 479 | | +| [tabulation32](doc/tabulation32.txt) | 5819.40 | 40.16 | 233.00 (3) | 848 | collisions | +| [tabulation](doc/tabulation.txt) | 7407.94 | 39.83 | 240.25 (4) | 554 | | +| [crc32_hw](doc/crc32_hw.txt) | 5537.79 | 40.80 | 225.65 (3) | 653 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (SSE4.2/NEON) | +| [crc32_hw1](doc/crc32_hw1.txt) | 7626.17 | 50.21 | 228.50 (2) | 671 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (x86 SSE4.2) | +| [crc64_hw](doc/crc64_hw.txt) | 5579.17 | 40.87 | 202.19 (1) | 652 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (SSE4.2/NEON) | +| [crc32_pclmul](doc/crc32_pclmul.txt) | 7963.20 | 106.02 | 567.70 (3) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific (x86 SSE4.2+PCLMUL) | +| [crc64_jones1](doc/crc64_jones1.txt) | 1673.67 | 83.00 | 249.16 (2) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific | +| [crc64_jones2](doc/crc64_jones2.txt) | 2968.07 | 314.60 | 253.01 (3) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific | +| [crc64_jones3](doc/crc64_jones3.txt) | 3398.80 | 302.59 | 258.16 (8) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific | +| [crc64_jones](doc/crc64_jones.txt) | 3512.66 | 80.70 | 251.40 (2) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific | +| [o1hash](doc/o1hash.txt) | 11530366.92 | 18.40 | 206.94 (1) | 101 | insecure, no seed, zeros, fails all tests | +| [fibonacci](doc/fibonacci.txt) | 15409.62 | 22.67 | 872.83 (3) |1692 | UB, zeros, fails all tests | +| [FNV1a](doc/FNV1a.txt) | 754.70 | 75.28 | 226.30 (2) | 204 | bad seed, zeros, fails all tests | +| [FNV1A_Totenschiff](doc/FNV1A_Totenschiff.txt)| 6166.85 | 26.60 | 235.71 (2) | 270 | UB, zeros, fails all tests | +| [FNV1A_Pippip_Yurii](doc/FNV1A_Pippip_Yurii.txt)| 6115.29 | 28.03 | 233.52 (2) | 147 | UB, sanity, fails all tests | +| [FNV1a_YT](doc/FNV1a_YT.txt) | 13481.70 | 30.67 | 233.71 (7) | 321 | bad seed, UB, fails all tests | +| [FNV2](doc/FNV2.txt) | 5630.87 | 32.09 | 207.08 (1) | 278 | fails all tests | +| [FNV64](doc/FNV64.txt) | 747.70 | 74.18 | 189.18 (1) | 79 | fails all tests | +| [FNV128](doc/FNV128.txt) | 408.59 | 130.82 | 299.47 (20)| 171 | fails all tests | +| [k-hash32](doc/k-hash32.txt) | 2227.90 | 53.85 | 255.78 (2) | 808 | insecure, zeros, UB, bad seeds, fails all tests | +| [k-hash64](doc/k-hash64.txt) | 2492.66 | 48.18 | 242.58 (2) | 609 | insecure, zeros, UB, bad seeds, fails all tests | +| [fletcher2](doc/fletcher2.txt) | 15410.12 | 20.72 | 345.55 (5) | 248 | bad seed 0, UB, fails all tests | +| [fletcher4](doc/fletcher4.txt) | 15603.68 | 21.24 | 320.09 (2) | 371 | bad seed 0, UB, fails all tests | +| [bernstein](doc/bernstein.txt) | 1032.00 | 59.04 | 225.09 (3) | 41 | bad seed 0, fails all tests | +| [sdbm](doc/sdbm.txt) | 772.01 | 71.67 | 220.09 (2) | 41 | bad seed 0, fails all tests | +| [x17](doc/x17.txt) | 765.01 | 75.61 | 225.81 (2) | 79 | 99.98% bias, fails all tests | +| [libiberty](doc/libiberty.txt) | 618.39 | 86.58 | 220.95 (2) | 37 | insecure, 100% bias, fails all tests, bad seed | +| [gcc](doc/gcc.txt) | 612.10 | 88.44 | 224.62 (2) | 39 | insecure, 100% bias, fails all tests, bad seed | +| [JenkinsOOAT](doc/JenkinsOOAT.txt) | 615.60 | 111.23 | 251.08 (2) | 153 | bad seed 0, 53.5% bias, fails all tests | +| [JenkinsOOAT_perl](doc/JenkinsOOAT_perl.txt) | 631.79 | 93.13 | 232.44 (1) | 65 | bad seed 0, 1.5-11.5% bias, 7.2x collisions, BIC, LongNeighbors | +| [MicroOAAT](doc/MicroOAAT.txt) | 730.89 | 78.25 | 236.07 (3) | 68 | 100% bias, distrib, BIC | +| [pearsonhash64](doc/pearsonhash64.txt) | 439.85 | 123.07 | 213.68 (1) | | Avalanche, Seed, SSSE3 only. broken MSVC | +| [pearsonhash128](doc/pearsonhash128.txt) | 438.49 | 123.81 | 212.89 (2) | | Avalanche, Seed, SSSE3 only. broken MSVC | +| [pearsonhash256](doc/pearsonhash256.txt) | 440.63 | 120.72 | 224.63 (2) | | Avalanche, Seed, SSSE3 only. broken MSVC | +| [VHASH_32](doc/VHASH_32.txt) | 13084.37 | 65.45 | 280.14 (2) |1231 | sanity, Seed, MomentChi2 | +| [VHASH_64](doc/VHASH_64.txt) | 13217.64 | 64.90 | 270.04 (2) |1231 | sanity, Seed, Sparse | +| [farsh32](doc/farsh32.txt) | 27583.89 | 65.65 | 266.64 (2) | 944 | insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors | +| [farsh64](doc/farsh64.txt) | 13558.69 | 113.74 | 327.26 (3) | 944 | insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors | +| [farsh128](doc/farsh128.txt) | 7055.39 | 229.42 | 375.57 (4) | 944 | insecure: AppendedZeroes, collisions+bias, permut,combin,2bytes,zeroes,PerlinNoise | +| [farsh256](doc/farsh256.txt) | 3466.26 | 444.74 | 610.23 (4) | 944 | insecure: AppendedZeroes, collisions+bias, permut,combin,2bytes,zeroes,PerlinNoise | +| [jodyhash32](doc/jodyhash32.txt) | 1762.46 | 42.66 | 236.09 (2) | 102 | bias, collisions, distr, BIC LongNeighbors | +| [jodyhash64](doc/jodyhash64.txt) | 4861.84 | 44.05 | 234.35 (2) | 118 | bias, collisions, distr, BIC, LongNeighbors | +| [lookup3](doc/lookup3.txt) | 2474.09 | 40.19 | 238.22 (3) | 341 | UB, 28% bias, collisions, 30% distr, BIC | +| [superfast](doc/superfast.txt) | 2085.79 | 49.89 | 230.76 (3) | 210 | UB, bad seed 0, 91% bias, 5273.01x collisions, 37% distr, BIC | +| [MurmurOAAT](doc/MurmurOAAT.txt) | 513.75 | 105.23 | 244.81 (4) | 47 | bad seed 0, collisions, 99.998% distr., BIC, LongNeighbors | +| [Crap8](doc/Crap8.txt) | 3081.04 | 37.15 | 234.94 (2) | 342 | UB, 2.42% bias, collisions, 2% distrib | +| [Murmur1](doc/Murmur1.txt) | 1955.36 | 48.84 | 236.25 (2) | 358 | UB, 1 bad seed, 511x collisions, Diff, BIC | +| [Murmur2](doc/Murmur2.txt) | 3082.03 | 41.62 | 250.72 (4) | 358 | UB, 1 bad seed, 1.7% bias, 81x coll, 1.7% distrib, BIC | +| [Murmur2A](doc/Murmur2A.txt) | 2850.40 | 46.60 | 284.58 (13)| 407 | UB, 1 bad seed, 12.7% bias, LongNeighbors | +| [Murmur2B](doc/Murmur2B.txt) | 6039.96 | 38.70 | 212.23 (1) | 433 | UB, 1.8% bias, collisions, 3.4% distrib, BIC | +| [Murmur2C](doc/Murmur2C.txt) | 3802.68 | 49.82 | 220.13 (2) | 444 | UB, 2^32 bad seeds, 91% bias, collisions, distr, BIC, LongNeighbors | +| [Murmur3A](doc/Murmur3A.txt) | 3027.30 | 48.99 | 234.49 (2) | 351 | UB, 1 bad seed, Moment Chi2 69 | +| [PMurHash32](doc/PMurHash32.txt) | 3001.44 | 48.99 | 240.35 (3) |1862 | 1 bad seed, Moment Chi2 69 | +| [Murmur3C](doc/Murmur3C.txt) | 4824.95 | 57.39 | 243.91 (2) | 859 | UB, LongNeighbors, Text, DiffDist | +| [mirhash32low](doc/mirhash32low.txt) | 6168.04 | 38.35 | 234.32 (2) |1112 | UB, 4 bad seeds, Cyclic, LongNeighbors, machine-specific (32/64 differs) | +| [PMPML_32](doc/PMPML_32.txt) | 6904.30 | 44.25 | 233.59 (2) |1084 | Avalanche >512, unseeded: Seed, BIC, MomentChi2, PerlinNoise | +| [PMPML_64](doc/PMPML_64.txt) | 10030.67 | 49.22 | 239.07 (5) |1305 | unseeded: Seed, MomentChi2, BIC | +| [xxHash32](doc/xxHash32.txt) | 6064.37 | 48.86 | 234.27 (3) | 738 | LongNeighbors, collisions with 4bit diff, MomentChi2 220 | +| [metrohash64](doc/metrohash64.txt) | 14209.14 | 40.85 | 225.16 (2) | 624 | UB, LongNeighbors, BIC | +| [metrohash64_1](doc/metrohash64_1.txt) | 14495.30 | 40.83 | 213.00 (2) | 624 | UB, LongNeighbors, BIC, MomentChi2 | +| [metrohash64crc_1](doc/metrohash64crc_1.txt) | 8010.90 | 44.43 | 213.94 (2) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, MomentChi2, machine-specific (SSE4.2/NEON) | +| [metrohash64crc_2](doc/metrohash64crc_2.txt) | 7939.65 | 44.84 | 222.01 (2) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, machine-specific (SSE4.2/NEON) | +| [cmetrohash64_1o](doc/cmetrohash64_1o.txt) | 14678.56 | 40.33 | 216.44 (2) |3506 | UB, LongNeighbors, BIC, MomentChi2 | +| [cmetrohash64_1](doc/cmetrohash64_1.txt) | 14332.75 | 41.04 | 216.05 (2) | 652 | UB, LongNeighbors, BIC, MomentChi2 | +| [City64noSeed](doc/City64noSeed.txt) | 14023.27 | 33.37 | 223.59 (2) |1038 | Avalanche, Sparse, TwoBytes, MomentChi2, Seed | +| [City64](doc/City64.txt) | 14390.09 | 46.69 | 231.99 (2) |1120 | Sparse, TwoBytes | +| [t1ha1_64le](doc/t1ha1_64le.txt) | 13425.03 | 31.37 | 221.97 (2) | 517 | Avalanche | +| [t1ha1_64be](doc/t1ha1_64be.txt) | 12002.50 | 31.57 | 226.52 (2) | 555 | Avalanche | +| [t1ha0_32le](doc/t1ha0_32le.txt) | 7276.16 | 49.11 | 236.39 (2) | 509 | Sparse, LongNeighbors | +| [t1ha0_32be](doc/t1ha0_32be.txt) | 6860.87 | 50.16 | 241.26 (2) | 533 | Sparse, LongNeighbors | +| [t1ha0_aes_avx1](doc/t1ha0_aes_avx1.txt) | 27881.52 | 36.78 | 227.13 (2) | 533 | Sparse, LongNeighbors | +| [t1ha2_stream](doc/t1ha2_stream.txt) | 13673.22 | 81.12 | 263.88 (3) |1665 | Sparse, Permutation, LongNeighbors | +| [t1ha2_stream128](doc/t1ha2_stream128.txt) | 13913.43 | 94.60 | 296.15 (4) |1665 | Sparse, Permutation, LongNeighbors | +| [aesnihash](doc/aesnihash.txt) | 5365.60 | 57.21 | 255.87 (3) |1209 | fails many tests, machine-specific (x64 AES-NI) | +| [falkhash](doc/falkhash.txt) | 52401.48 | 122.70 | 316.79 (4) | 264 | Sparse, LongNeighbors, machine-specific (x64 AES-NI) | +| [MeowHash](doc/MeowHash.txt) | 29969.81 | 64.90 | 273.79 (8) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | +| [MeowHash64low](doc/MeowHash64low.txt) | 29438.45 | 63.76 | 269.41 (4) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | +| [MeowHash32low](doc/MeowHash32low.txt) | 30562.54 | 63.77 | 283.26 (3) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | | -------------------------------------- | | | | | | | [tifuhash_64](doc/tifuhash_64.txt) | 35.60 | 1679.52 |1212.75 (15)| 276 | Cyclic low32 | | [floppsyhash](doc/floppsyhash.txt) | 35.72 | 1868.92 |1411.07 (7) | 623 | | | [beamsplitter](doc/beamsplitter.txt) | 789.22 | 682.45 |1150.33 (26)|4203 | UB | -| [discohash1](doc/discohash1.txt) | 4131.12 | 199.00 | 398.35 (5) |1294 | | -| [discohash1-128](doc/discohash1-128.txt) | 4072.95 | 234.17 | 438.43 (5) |1294 | | -| [discohash2](doc/discohash2.txt) | 3986.52 | 207.52 | 421.99 (2) |1294 | | -| [discohash2-128](doc/discohash2-128.txt) | 4094.73 | 236.61 | 433.35 (4) |1294 | | -| [discoNONG](doc/discoNONG.txt) | 3698.45 | 399.67 | 597.78 (9) | | bad seeds | -| [chaskey](doc/chaskey.txt) | 1143.05 | 113.70 | 294.43 (4) |1609 | PerlinNoise | -| [SipHash](doc/SipHash.txt) | 943.53 | 147.15 | 338.74 (4) |1071 | | -| [HalfSipHash](doc/HalfSipHash.txt) | 1141.57 | 79.65 | 263.96 (3) | 700 | zeroes | -| [GoodOAAT](doc/GoodOAAT.txt) | 743.81 | 85.62 | 231.22 (3) | 237 | | -| [pearsonbhash64](doc/pearsonbhash64.txt) | 1794.83 | 97.80 | 268.90 (8) | 683 | | -| [pearsonbhash128](doc/pearsonbhash128.txt) | 1691.62 | 104.57 | 272.38 (4) |1134 | | -| [pearsonbhash256](doc/pearsonbhash256.txt) | 1442.59 | 126.04 | 309.34 (4) | 844 | | -| [prvhash64_64m](doc/prvhash64_64m.txt) | 3077.18 | 47.31 | 241.92 (3) | 349 | | -| [prvhash64_64](doc/prvhash64_64.txt) | 3015.08 | 48.03 | 240.64 (3) | 384 | | -| [prvhash64_128](doc/prvhash64_128.txt) | 3353.81 | 67.64 | 266.32 (2) | 718 | | -| [prvhash64s_64](doc/prvhash64s_64.txt) | 6591.34 | 273.50 | 464.65 (3) |2640 | | -| [prvhash64s_128](doc/prvhash64s_128.txt) | 6581.40 | 333.83 | 528.07 (5) |2799 | | -| [SipHash13](doc/SipHash13.txt) | 1812.75 | 106.56 | 310.76 (5) | 778 | 0.9% bias | -| [TSip](doc/TSip.txt) | 4233.17 | 53.31 | 249.19 (3) | 519 | !msvc | -| [seahash](doc/seahash.txt) | 8261.80 | 58.94 | 256.08 (4) | 871 | PerlinNoise, !msvc | -| [seahash32low](doc/seahash32low.txt) | 8266.17 | 58.90 | 290.21 (16)| 871 | PerlinNoise 32, !msvc | -| [clhash](doc/clhash.txt) | 18703.04 | 70.19 | 282.12 (6) |1809 | PerlinNoise, machine-specific (x64 SSE4.2) | +| [discohash1](doc/discohash1.txt) | 4152.62 | 202.14 | 414.34 (4) |1294 | | +| [discohash1-128](doc/discohash1-128.txt) | 4064.39 | 231.06 | 430.94 (6) |1294 | | +| [discohash2](doc/discohash2.txt) | 4026.84 | 204.37 | 408.13 (6) |1294 | | +| [discohash2-128](doc/discohash2-128.txt) | 4153.48 | 226.54 | 429.24 (4) |1294 | | +| [discoNONG](doc/discoNONG.txt) | 3661.23 | 397.81 | 651.23 (54)| | bad seeds | +| [chaskey](doc/chaskey.txt) | 1142.38 | 113.98 | 288.04 (1) |1609 | PerlinNoise | +| [SipHash](doc/SipHash.txt) | 953.51 | 147.32 | 332.02 (5) |1071 | | +| [HalfSipHash](doc/HalfSipHash.txt) | 1128.85 | 80.48 | 260.42 (2) | 700 | zeroes | +| [GoodOAAT](doc/GoodOAAT.txt) | 744.67 | 87.23 | 243.36 (2) | 237 | | +| [pearsonbhash64](doc/pearsonbhash64.txt) | 1749.98 | 99.84 | 257.11 (2) | 683 | | +| [pearsonbhash128](doc/pearsonbhash128.txt) | 1656.68 | 106.78 | 276.92 (3) |1134 | | +| [pearsonbhash256](doc/pearsonbhash256.txt) | 1418.61 | 123.68 | 301.26 (3) | 844 | | +| [prvhash64_64m](doc/prvhash64_64m.txt) | 3107.77 | 47.31 | 236.76 (2) | 349 | | +| [prvhash64_64](doc/prvhash64_64.txt) | 3057.79 | 47.83 | 244.16 (2) | 384 | | +| [prvhash64_128](doc/prvhash64_128.txt) | 3340.87 | 67.90 | 264.44 (2) | 718 | | +| [prvhash64s_64](doc/prvhash64s_64.txt) | 6724.41 | 266.09 | 438.90 (3) |2640 | | +| [prvhash64s_128](doc/prvhash64s_128.txt) | 6703.66 | 326.46 | 508.67 (3) |2799 | | +| [SipHash13](doc/SipHash13.txt) | 1803.96 | 107.93 | 304.05 (3) | 778 | 0.9% bias | +| [TSip](doc/TSip.txt) | 4330.87 | 52.43 | 245.31 (2) | 519 | !msvc | +| [seahash](doc/seahash.txt) | 8240.58 | 58.61 | 260.35 (1) | 871 | PerlinNoise, !msvc | +| [seahash32low](doc/seahash32low.txt) | 8245.91 | 58.61 | 264.07 (2) | 871 | PerlinNoise 32, !msvc | +| [clhash](doc/clhash.txt) | 22932.36 | 67.22 | 262.78 (2) |1809 | PerlinNoise, machine-specific (x64 SSE4.2) | | [HighwayHash64](doc/HighwayHash64.txt) | 6242.58 | 99.55 | 248.41 (3) |2546 | | -| [Murmur3F](doc/Murmur3F.txt) | 7623.44 | 52.69 | 221.87 (3) | 699 | UB | -| [MUM](doc/MUM.txt) | 9563.99 | 34.99 | 228.55 (5) |1912 | UB, too many bad seeds, machine-specific (32/64 differs) | -| [MUMlow](doc/MUMlow.txt) | 9261.89 | 36.17 | 247.66 (4) |1912 | UB, 5 bad seeds | -| [xmsx32](doc/xmsx32.txt) | 2039.10 | 46.39 | 249.30 (7) | 192 | 2 bad seeds | -| [mirhash](doc/mirhash.txt) | 6139.07 | 37.02 | 209.47 (3) |1112 | UB, 2^36 bad seeds, LongNeighbors, machine-specific (32/64 differs) | -| [mirhashstrict](doc/mirhashstrict.txt) | 3549.01 | 49.99 | 224.91 (2) |1112 | | -| [mirhashstrict32low](doc/mirhashstrict32low.txt)| 3441.35 | 50.60 | 247.19 (3) |1112 | 1 bad seed, MomentChi2 9 | -| [fasthash32](doc/fasthash32.txt) | 6128.28 | 40.30 | 241.64 (4) | 566 | UB | -| [fasthash64](doc/fasthash64.txt) | 5818.92 | 38.70 | 220.74 (2) | 509 | UB | -| [aesni](doc/aesni.txt) | 31232.34 | 29.21 | 230.14 (4) | 519 | machine-specific (x64 AES-NI) | -| [aesni-low](doc/aesni-low.txt) | 31221.14 | 29.64 | 226.18 (3) | 519 | machine-specific (x64 AES-NI) | -| [mx3](doc/mx3.txt) | 9034.90 | 48.71 | 227.89 (2) | 734 | UB | -| [pengyhash](doc/pengyhash.txt) | 13428.80 | 74.24 | 275.42 (5) | 421 | | -| [City32](doc/City32.txt) | 5551.28 | 54.40 | 261.64 (2) |1319 | | -| [City64low](doc/City64low.txt) | 13904.10 | 46.24 | 260.08 (3) |1120| | -| [City128](doc/City128.txt) | 14031.96 | 89.09 | 290.05 (10)|1841 | | -| [CityCrc128](doc/CityCrc128.txt) | 7916.44 | 55.50 | 240.79 (2) | 295 | | -| [FarmHash32](doc/FarmHash32.txt) | 21755.58 | 47.54 | 258.35 (3) |11489| machine-specific (x64 SSE4/AVX) | -| [FarmHash64](doc/FarmHash64.txt) | 12845.53 | 47.11 | 251.58 (3) |3758 | | -| [FarmHash128](doc/FarmHash128.txt) | 13913.65 | 70.25 | 263.06 (3) | 163 | | -| [farmhash32_c](doc/farmhash32_c.txt) | 21601.86 | 47.38 | 273.00 (3) | 762 | machine-specific (x64 SSE4/AVX) | -| [farmhash64_c](doc/farmhash64_c.txt) | 12834.10 | 47.23 | 246.20 (2) |3688 | | -| [farmhash128_c](doc/farmhash128_c.txt) | 13753.24 | 68.96 | 263.76 (3) |1890 | | -| [metrohash64_2](doc/metrohash64_2.txt) | 14316.37 | 40.23 | 218.28 (3) | 627 | UB, LongNeighbors | -| [cmetrohash64_2](doc/cmetrohash64_2.txt) | 14294.26 | 40.76 | 221.40 (4) | 655 | LongNeighbors | -| [metrohash128](doc/metrohash128.txt) | 15634.66 | 73.28 | 261.23 (4) | 773 | UB, LongNeighbors | -| [metrohash128_1](doc/metrohash128_1.txt) | 15806.97 | 72.30 | 260.90 (4) | 773 | UB, LongNeighbors | -| [metrohash128_2](doc/metrohash128_2.txt) | 15822.60 | 72.30 | 255.34 (3) | 773 | UB, LongNeighbors | -| [metrohash128crc_1](doc/metrohash128crc_1.txt)| 8009.23 | 78.72 | 281.55 (13)| 723 | UB, machine-specific (SSE4.2/NEON) | -| [metrohash128crc_2](doc/metrohash128crc_2.txt)| 7878.22 | 79.90 | 275.22 (4) | 723 | UB, machine-specific (SSE4.2/NEON) | -| [xxHash64](doc/xxHash64.txt) | 12108.87 | 49.78 | 228.83 (2) |1999 | | -| [Spooky32](doc/Spooky32.txt) | 13108.95 | 56.27 | 255.36 (3) |2221 | UB | -| [Spooky64](doc/Spooky64.txt) | 13529.36 | 58.76 | 236.31 (3) |2221 | UB | -| [Spooky128](doc/Spooky128.txt) | 11781.35 | 58.91 | 242.91 (3) |2221 | UB | -| [SpookyV2_32](doc/SpookyV2_32.txt) | 13529.16 | 55.55 | 248.37 (4) |2069 | | -| [SpookyV2_64](doc/SpookyV2_64.txt) | 12678.82 | 56.71 | 243.21 (4) |2069 | | -| [SpookyV2_128](doc/SpookyV2_128.txt) | 13512.82 | 58.33 | 244.56 (5) |2069 | | +| [Murmur3F](doc/Murmur3F.txt) | 7104.08 | 52.69 | 216.34 (2) | 699 | UB | +| [MUM](doc/MUM.txt) | 9631.26 | 34.78 | 219.14 (2) |1912 | UB, too many bad seeds, machine-specific (32/64 differs) | +| [MUMlow](doc/MUMlow.txt) | 8532.17 | 35.95 | 238.37 (2) |1912 | UB, 5 bad seeds | +| [xmsx32](doc/xmsx32.txt) | 2105.03 | 45.35 | 238.92 (3) | 192 | 2 bad seeds | +| [mirhash](doc/mirhash.txt) | 5793.85 | 38.15 | 212.91 (2) |1112 | UB, 2^36 bad seeds, LongNeighbors, machine-specific (32/64 differs) | +| [mirhashstrict](doc/mirhashstrict.txt) | 3587.79 | 49.85 | 219.49 (2) |1112 | | +| [mirhashstrict32low](doc/mirhashstrict32low.txt)| 3642.77 | 50.16 | 233.34 (3) |1112 | 1 bad seed, MomentChi2 9 | +| [fasthash32](doc/fasthash32.txt) | 6107.05 | 40.49 | 237.83 (2) | 566 | UB | +| [fasthash64](doc/fasthash64.txt) | 5600.11 | 38.04 | 219.71 (2) | 509 | UB | +| [aesni](doc/aesni.txt) | 31185.98 | 29.45 | 226.75 (2) | 519 | machine-specific (x64 AES-NI) | +| [aesni-low](doc/aesni-low.txt) | 31027.39 | 29.47 | 232.54 (2) | 519 | machine-specific (x64 AES-NI) | +| [mx3](doc/mx3.txt) | 9332.99 | 47.07 | 221.61 (2) | 734 | UB | +| [pengyhash](doc/pengyhash.txt) | 13347.17 | 74.79 | 278.74 (3) | 421 | | +| [City32](doc/City32.txt) | 5745.83 | 52.44 | 242.69 (2) |1319 | | +| [City64low](doc/City64low.txt) | 13119.17 | 47.92 | 251.81 (2) |1120| | +| [City128](doc/City128.txt) | 14472.20 | 88.71 | 285.61 (10)|1841 | | +| [CityCrc128](doc/CityCrc128.txt) | 12255.05 | 89.25 | 281.85 (2) | 295 | | +| [CityCrc256](doc/CityCrc256.txt) | 12428.45 | 164.93 | 358.73 (2) | | | +| [FarmHash32](doc/FarmHash32.txt) | 22136.14 | 46.75 | 258.73 (2) |11489| machine-specific (x64 SSE4/AVX) | +| [FarmHash64](doc/FarmHash64.txt) | 12929.54 | 46.82 | 238.50 (2) |3758 | | +| [FarmHash128](doc/FarmHash128.txt) | 14454.12 | 68.09 | 254.04 (2) | 163 | | +| [farmhash32_c](doc/farmhash32_c.txt) | 22150.13 | 46.08 | 251.43 (3) | 762 | machine-specific (x64 SSE4/AVX) | +| [farmhash64_c](doc/farmhash64_c.txt) | 12925.73 | 46.76 | 239.47 (2) |3688 | | +| [farmhash128_c](doc/farmhash128_c.txt) | 14284.69 | 68.80 | 256.66 (3) |1890 | | +| [metrohash64_2](doc/metrohash64_2.txt) | 14359.39 | 41.09 | 215.53 (2) | 627 | UB, LongNeighbors | +| [cmetrohash64_2](doc/cmetrohash64_2.txt) | 14498.20 | 40.87 | 219.65 (2) | 655 | LongNeighbors | +| [metrohash128](doc/metrohash128.txt) | 15847.63 | 72.33 | 266.54 (2) | 773 | UB, LongNeighbors | +| [metrohash128_1](doc/metrohash128_1.txt) | 15556.40 | 73.49 | 259.05 (2) | 773 | UB, LongNeighbors | +| [metrohash128_2](doc/metrohash128_2.txt) | 15408.56 | 74.36 | 259.57 (2) | 773 | UB, LongNeighbors | +| [metrohash128crc_1](doc/metrohash128crc_1.txt)| 8182.02 | 77.38 | 256.80 (2) | 723 | UB, machine-specific (SSE4.2/NEON) | +| [metrohash128crc_2](doc/metrohash128crc_2.txt)| 7996.33 | 78.81 | 262.53 (2) | 723 | UB, machine-specific (SSE4.2/NEON) | +| [xxHash64](doc/xxHash64.txt) | 11176.72 | 49.67 | 230.24 (6) |1999 | | +| [Spooky32](doc/Spooky32.txt) | 13623.84 | 55.45 | 248.11 (3) |2221 | UB | +| [Spooky64](doc/Spooky64.txt) | 13400.95 | 55.06 | 244.86 (3) |2221 | UB | +| [Spooky128](doc/Spooky128.txt) | 13621.00 | 59.05 | 235.42 (2) |2221 | UB | +| [SpookyV2_32](doc/SpookyV2_32.txt) | 13626.51 | 56.19 | 256.57 (19)|2069 | | +| [SpookyV2_64](doc/SpookyV2_64.txt) | 13401.13 | 56.18 | 246.33 (11)|2069 | | +| [SpookyV2_128](doc/SpookyV2_128.txt) | 12252.64 | 58.94 | 235.46 (2) |2069 | | | [ahash64](doc/ahash64.txt) | 9862.62 | 27.32 | 181.68 (1) | 412 | rust | -| [xxh3](doc/xxh3.txt) | 21033.55 | 29.48 | 226.77 (4) | 744 | DiffDist bit 7 w. 36 bits, BIC | -| [xxh3low](doc/xxh3low.txt) | 17093.19 | 30.57 | 242.07 (7) | 756 | | -| [xxh128](doc/xxh128.txt) | 18802.16 | 32.37 | 234.30 (4) |1012 | | -| [xxh128low](doc/xxh128low.txt) | 18833.05 | 32.30 | 234.68 (3) |1012 | | -| [t1ha2_atonce](doc/t1ha2_atonce.txt) | 13854.44 | 37.92 | 233.54 (2) | 541 | Zeroes low3 | -| [t1ha2_atonce128](doc/t1ha2_atonce128.txt) | 14148.42 | 55.70 | 253.74 (6) | 613 | LongNeighbors | -| [t1ha0_aes_noavx](doc/t1ha0_aes_noavx.txt) | 27231.59 | 37.70 | 236.10 (3) | 925 | LongNeighbors, machine-specific (x86 AES-NI) | -| [t1ha0_aes_avx1](doc/t1ha0_aes_avx1) | 22714.85 | 48.12 | 226.52 (16)| 843 | LongNeighbors, machine-specific (x64 AVX.txt)| -| [t1ha0_aes_avx2](doc/t1ha0_aes_avx2.txt) | 56919.46 | 36.70 | 233.14 (2) | 792 | LongNeighbors, machine-specific (x64 AVX2) | +| [xxh3](doc/xxh3.txt) | 20853.74 | 29.46 | 220.07 (2) | 744 | DiffDist bit 7 w. 36 bits, BIC | +| [xxh3low](doc/xxh3low.txt) | 20568.96 | 29.98 | 243.82 (5) | 756 | | +| [xxh128](doc/xxh128.txt) | 19259.99 | 31.58 | 228.84 (2) |1012 | | +| [xxh128low](doc/xxh128low.txt) | 19555.88 | 30.85 | 227.83 (2) |1012 | | +| [t1ha2_atonce](doc/t1ha2_atonce.txt) | 14275.60 | 37.02 | 224.12 (2) | 541 | Zeroes low3 | +| [t1ha2_atonce128](doc/t1ha2_atonce128.txt) | 14059.85 | 56.44 | 251.53 (3) | 613 | LongNeighbors | +| [t1ha0_aes_noavx](doc/t1ha0_aes_noavx.txt) | 27335.47 | 37.34 | 230.59 (2) | 925 | LongNeighbors, machine-specific (x86 AES-NI) | +| [t1ha0_aes_avx1](doc/t1ha0_aes_avx1.txt) | 27881.52 | 36.78 | 227.13 (2) | 843 | LongNeighbors, machine-specific (x64 AVX) | +| [t1ha0_aes_avx2](doc/t1ha0_aes_avx2.txt) | 56581.83 | 36.51 | 223.59 (1) | 792 | LongNeighbors, machine-specific (x64 AVX2) | | [wyhash32](doc/wyhash32.txt) | 2532.89 | 48.40 | 484.57 (1) | 426 | 4 bad and broken seeds, 32-bit | -| [wyhash32low](doc/wyhash32low.txt) | 22393.77 | 29.04 | 243.40 (3) | 474 | 5 bad seeds | -| [wyhash](doc/wyhash.txt) | 22540.23 | 28.87 | 236.16 (8) | 474 | | -| [rapidhash](doc/rapidhash.txt) | 23789.79 | 22.80 | 138.71 (7) | 574 | | -| [rapidhash_unrolled](doc/rapidhash_unrolled.txt)| 23892.88 | 23.41 | 139.47 (12)| 782 | | -| [umash32](doc/umash32.txt) | 21427.57 | 42.12 | 255.55 (5) |1530 | | -| [umash32_hi](doc/umash32_hi.txt) | 21483.12 | 42.65 | 251.09 (4) |1530 | | -| [umash64](doc/umash64.txt) | 21690.08 | 41.67 | 238.01 (4) |1530 | | -| [umash128](doc/umash128.txt) | 13211.88 | 43.37 | 237.40 (3) |1530 | | -| [halftime_hash64](doc/halftime_hash64.txt) | 4735.63 | 99.90 | 315.34 (3) |2911 | | -| [halftime_hash128](doc/halftime_hash128.txt) | 17534.53 | 97.97 | 311.10 (4) |2462 | | -| [halftime_hash256](doc/halftime_hash256.txt) | 18003.39 | 99.46 | 315.09 (3) |2622 | | -| [halftime_hash512](doc/halftime_hash512.txt) | 10890.15 | 118.05 | 333.45 (3) |3550 | | -| [nmhash32](doc/nmhash32.txt) | 12969.62 | 55.88 | 265.69 (4) |2445 | | -| [nmhash32x](doc/nmhash32x.txt) | 12775.08 | 42.66 | 246.05 (3) |1494 | | -| [k-hashv32](doc/k-hashv32.txt) | 9181.87 | 52.76 | 245.14 (3) |1280 | | -| [k-hashv64](doc/k-hashv32.txt) | 7850.92 | 46.94 | 193.94 (1) |1279 | | -| [komihash](doc/komihash.txt) | 12242.78 | 33.02 | 236.07 (2) |1323 | | -| [polymur](doc/polymur.txt) | 9676.33 | 42.70 | 246.53 (3) |1128 | | +| [wyhash32low](doc/wyhash32low.txt) | 23104.85 | 28.56 | 239.71 (4) | 474 | 5 bad seeds | +| [wyhash](doc/wyhash.txt) | 22640.53 | 28.91 | 229.00 (2) | 474 | | +| [w1hash](doc/w1hash.txt) | 14208.56 | 26.85 | 221.76 (2) | | | +| [rapidhash](doc/rapidhash.txt) | 22147.09 | 29.07 | 214.80 (2) | 574 | | +| [rapidhash_unrolled](doc/rapidhash_unrolled.txt)| 21723.13 | 29.40 | 220.97 (3) | 782 | | +| [umash32](doc/umash32.txt) | 21999.19 | 41.14 | 239.07 (2) |1530 | | +| [umash32_hi](doc/umash32_hi.txt) | 22347.33 | 41.22 | 251.12 (4) |1530 | | +| [umash64](doc/umash64.txt) | 21963.54 | 41.12 | 228.34 (1) |1530 | | +| [umash128](doc/umash128.txt) | 13629.66 | 41.65 | 228.25 (1) |1530 | | +| [halftime_hash64](doc/halftime_hash64.txt) | 4801.79 | 99.05 | 310.02 (2) |2911 | | +| [halftime_hash128](doc/halftime_hash128.txt) | 18220.34 | 94.31 | 307.50 (1) |2462 | | +| [halftime_hash256](doc/halftime_hash256.txt) | 18249.32 | 97.56 | 322.85 (2) |2622 | | +| [halftime_hash512](doc/halftime_hash512.txt) | 10906.18 | 118.54 | 326.76 (3) |3550 | | +| [nmhash32](doc/nmhash32.txt) | 12676.08 | 57.09 | 255.20 (2) |2445 | | +| [nmhash32x](doc/nmhash32x.txt) | 13072.64 | 42.09 | 288.12 (3) |1494 | | +| [k-hashv32](doc/k-hashv32.txt) | 8393.09 | 53.95 | 252.98 (3) |1280 | | +| [k-hashv64](doc/k-hashv64.txt) | 9251.05 | 51.72 | 251.83 (2) |1279 | | +| [komihash](doc/komihash.txt) | 12179.74 | 33.23 | 224.80 (2) |1323 | | +| [polymur](doc/polymur.txt) | 9913.53 | 41.68 | 232.56 (3) |1128 | | +| [gxhash64](doc/gxhash64.txt) | 48919.73 | 36.61 | 236.98 (3) | | | The sortable table variants: * **[Default AMD Ryzen 5 3350G 3.6GHz](https://rurban.github.io/smhasher/doc/table.html)** +* [Intel i7-6820HQ 3.5GHz (Lenovo P50 from 2024)](https://rurban.github.io/smhasher/doc/i7.html) +* [fast AMD EPYC 9554P 64-Core Processor (Server from 2024)](https://rurban.github.io/smhasher/doc/epyc.html) * [Intel i5-2300 2.8GHz](https://rurban.github.io/smhasher/doc/intel.html) -* [Intel i5-2300 2.8GHz 32bit](https://rurban.github.io/smhasher/doc/i686.html) -* [AMD Ryzen 3 3200U 3.5GHz](https://rurban.github.io/smhasher/doc/ryzen3.html) +* [AMD Ryzen 5 PRO 3350G 3.6GHz 32bit 32bit](https://rurban.github.io/smhasher/doc/i686.html) * [Mac Air i7-4650](https://rurban.github.io/smhasher/doc/air.html) * [Cortex-A53 2GHz (Sony XPeria L4)](https://rurban.github.io/smhasher/doc/phone.html) diff --git a/doc/BadHash.txt b/doc/BadHash.txt index 3dcd7485..5055c3fe 100644 --- a/doc/BadHash.txt +++ b/doc/BadHash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x10295701b18 - 0x10295701ad0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.183 bytes/cycle - 524.82 MiB/sec @ 3 ghz -Alignment 6 - 0.183 bytes/cycle - 524.82 MiB/sec @ 3 ghz -Alignment 5 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Alignment 4 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Alignment 3 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Alignment 2 - 0.183 bytes/cycle - 524.82 MiB/sec @ 3 ghz -Alignment 1 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Alignment 0 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Average - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 13.65 cycles/hash -Small key speed test - 2-byte keys - 19.32 cycles/hash -Small key speed test - 3-byte keys - 24.97 cycles/hash -Small key speed test - 4-byte keys - 30.72 cycles/hash -Small key speed test - 5-byte keys - 35.92 cycles/hash -Small key speed test - 6-byte keys - 41.68 cycles/hash -Small key speed test - 7-byte keys - 46.99 cycles/hash -Small key speed test - 8-byte keys - 52.25 cycles/hash -Small key speed test - 9-byte keys - 57.57 cycles/hash -Small key speed test - 10-byte keys - 63.00 cycles/hash -Small key speed test - 11-byte keys - 68.60 cycles/hash -Small key speed test - 12-byte keys - 74.36 cycles/hash -Small key speed test - 13-byte keys - 79.77 cycles/hash -Small key speed test - 14-byte keys - 85.50 cycles/hash -Small key speed test - 15-byte keys - 90.93 cycles/hash -Small key speed test - 16-byte keys - 96.00 cycles/hash -Small key speed test - 17-byte keys - 101.79 cycles/hash -Small key speed test - 18-byte keys - 107.00 cycles/hash -Small key speed test - 19-byte keys - 112.20 cycles/hash -Small key speed test - 20-byte keys - 118.00 cycles/hash -Small key speed test - 21-byte keys - 123.73 cycles/hash -Small key speed test - 22-byte keys - 129.00 cycles/hash -Small key speed test - 23-byte keys - 134.76 cycles/hash -Small key speed test - 24-byte keys - 140.00 cycles/hash -Small key speed test - 25-byte keys - 145.87 cycles/hash -Small key speed test - 26-byte keys - 151.00 cycles/hash -Small key speed test - 27-byte keys - 156.38 cycles/hash -Small key speed test - 28-byte keys - 162.00 cycles/hash -Small key speed test - 29-byte keys - 167.82 cycles/hash -Small key speed test - 30-byte keys - 173.00 cycles/hash -Small key speed test - 31-byte keys - 178.38 cycles/hash -Average 96.198 cycles/hash +Alignment 7 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 6 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 5 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 4 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 3 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 2 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 1 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 0 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Average - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 14.94 cycles/hash +Small key speed test - 2-byte keys - 18.67 cycles/hash +Small key speed test - 3-byte keys - 22.00 cycles/hash +Small key speed test - 4-byte keys - 26.00 cycles/hash +Small key speed test - 5-byte keys - 30.00 cycles/hash +Small key speed test - 6-byte keys - 33.17 cycles/hash +Small key speed test - 7-byte keys - 37.00 cycles/hash +Small key speed test - 8-byte keys - 41.00 cycles/hash +Small key speed test - 9-byte keys - 44.76 cycles/hash +Small key speed test - 10-byte keys - 48.24 cycles/hash +Small key speed test - 11-byte keys - 52.00 cycles/hash +Small key speed test - 12-byte keys - 55.98 cycles/hash +Small key speed test - 13-byte keys - 59.91 cycles/hash +Small key speed test - 14-byte keys - 63.44 cycles/hash +Small key speed test - 15-byte keys - 67.46 cycles/hash +Small key speed test - 16-byte keys - 71.00 cycles/hash +Small key speed test - 17-byte keys - 74.69 cycles/hash +Small key speed test - 18-byte keys - 78.86 cycles/hash +Small key speed test - 19-byte keys - 82.41 cycles/hash +Small key speed test - 20-byte keys - 86.00 cycles/hash +Small key speed test - 21-byte keys - 89.47 cycles/hash +Small key speed test - 22-byte keys - 93.28 cycles/hash +Small key speed test - 23-byte keys - 97.00 cycles/hash +Small key speed test - 24-byte keys - 100.00 cycles/hash +Small key speed test - 25-byte keys - 104.00 cycles/hash +Small key speed test - 26-byte keys - 108.30 cycles/hash +Small key speed test - 27-byte keys - 111.54 cycles/hash +Small key speed test - 28-byte keys - 117.04 cycles/hash +Small key speed test - 29-byte keys - 120.83 cycles/hash +Small key speed test - 30-byte keys - 124.20 cycles/hash +Small key speed test - 31-byte keys - 126.51 cycles/hash +Small key speed test - 32-byte keys - 130.00 cycles/hash +Average 72.802 cycles/hash +Average, weighted by key length freq. 72.618 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 57.518 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/City128.txt b/doc/City128.txt index d6a5c356..a6aad41a 100644 --- a/doc/City128.txt +++ b/doc/City128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x13306dc934a74 - 0x13306dc934a2c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.896 bytes/cycle - 14008.58 MiB/sec @ 3 ghz -Alignment 6 - 4.896 bytes/cycle - 14008.60 MiB/sec @ 3 ghz -Alignment 5 - 4.897 bytes/cycle - 14009.15 MiB/sec @ 3 ghz -Alignment 4 - 4.900 bytes/cycle - 14017.76 MiB/sec @ 3 ghz -Alignment 3 - 4.896 bytes/cycle - 14007.87 MiB/sec @ 3 ghz -Alignment 2 - 4.897 bytes/cycle - 14009.28 MiB/sec @ 3 ghz -Alignment 1 - 4.896 bytes/cycle - 14008.53 MiB/sec @ 3 ghz -Alignment 0 - 4.958 bytes/cycle - 14185.90 MiB/sec @ 3 ghz -Average - 4.905 bytes/cycle - 14031.96 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 77.81 cycles/hash -Small key speed test - 2-byte keys - 77.78 cycles/hash -Small key speed test - 3-byte keys - 77.80 cycles/hash -Small key speed test - 4-byte keys - 79.97 cycles/hash -Small key speed test - 5-byte keys - 79.98 cycles/hash -Small key speed test - 6-byte keys - 79.97 cycles/hash -Small key speed test - 7-byte keys - 79.96 cycles/hash -Small key speed test - 8-byte keys - 77.78 cycles/hash -Small key speed test - 9-byte keys - 80.90 cycles/hash -Small key speed test - 10-byte keys - 80.92 cycles/hash -Small key speed test - 11-byte keys - 80.91 cycles/hash -Small key speed test - 12-byte keys - 80.93 cycles/hash -Small key speed test - 13-byte keys - 80.90 cycles/hash -Small key speed test - 14-byte keys - 80.89 cycles/hash -Small key speed test - 15-byte keys - 80.89 cycles/hash -Small key speed test - 16-byte keys - 80.95 cycles/hash -Small key speed test - 17-byte keys - 99.00 cycles/hash -Small key speed test - 18-byte keys - 99.00 cycles/hash -Small key speed test - 19-byte keys - 99.13 cycles/hash -Small key speed test - 20-byte keys - 99.00 cycles/hash -Small key speed test - 21-byte keys - 98.85 cycles/hash -Small key speed test - 22-byte keys - 98.86 cycles/hash -Small key speed test - 23-byte keys - 98.86 cycles/hash -Small key speed test - 24-byte keys - 98.80 cycles/hash -Small key speed test - 25-byte keys - 98.78 cycles/hash -Small key speed test - 26-byte keys - 98.99 cycles/hash -Small key speed test - 27-byte keys - 99.11 cycles/hash -Small key speed test - 28-byte keys - 98.76 cycles/hash -Small key speed test - 29-byte keys - 98.79 cycles/hash -Small key speed test - 30-byte keys - 98.75 cycles/hash -Small key speed test - 31-byte keys - 98.73 cycles/hash -Average 89.088 cycles/hash +Alignment 7 - 5.037 bytes/cycle - 14411.39 MiB/sec @ 3 ghz +Alignment 6 - 5.053 bytes/cycle - 14456.01 MiB/sec @ 3 ghz +Alignment 5 - 5.052 bytes/cycle - 14455.06 MiB/sec @ 3 ghz +Alignment 4 - 5.058 bytes/cycle - 14471.92 MiB/sec @ 3 ghz +Alignment 3 - 5.053 bytes/cycle - 14456.18 MiB/sec @ 3 ghz +Alignment 2 - 5.053 bytes/cycle - 14455.87 MiB/sec @ 3 ghz +Alignment 1 - 5.053 bytes/cycle - 14457.06 MiB/sec @ 3 ghz +Alignment 0 - 5.108 bytes/cycle - 14614.15 MiB/sec @ 3 ghz +Average - 5.058 bytes/cycle - 14472.20 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 74.96 cycles/hash +Small key speed test - 2-byte keys - 75.07 cycles/hash +Small key speed test - 3-byte keys - 74.95 cycles/hash +Small key speed test - 4-byte keys - 80.93 cycles/hash +Small key speed test - 5-byte keys - 80.93 cycles/hash +Small key speed test - 6-byte keys - 80.94 cycles/hash +Small key speed test - 7-byte keys - 80.93 cycles/hash +Small key speed test - 8-byte keys - 81.00 cycles/hash +Small key speed test - 9-byte keys - 81.00 cycles/hash +Small key speed test - 10-byte keys - 81.00 cycles/hash +Small key speed test - 11-byte keys - 81.00 cycles/hash +Small key speed test - 12-byte keys - 81.00 cycles/hash +Small key speed test - 13-byte keys - 81.00 cycles/hash +Small key speed test - 14-byte keys - 81.00 cycles/hash +Small key speed test - 15-byte keys - 81.00 cycles/hash +Small key speed test - 16-byte keys - 81.00 cycles/hash +Small key speed test - 17-byte keys - 94.96 cycles/hash +Small key speed test - 18-byte keys - 94.96 cycles/hash +Small key speed test - 19-byte keys - 94.97 cycles/hash +Small key speed test - 20-byte keys - 94.96 cycles/hash +Small key speed test - 21-byte keys - 94.96 cycles/hash +Small key speed test - 22-byte keys - 94.96 cycles/hash +Small key speed test - 23-byte keys - 94.97 cycles/hash +Small key speed test - 24-byte keys - 94.95 cycles/hash +Small key speed test - 25-byte keys - 94.96 cycles/hash +Small key speed test - 26-byte keys - 94.95 cycles/hash +Small key speed test - 27-byte keys - 94.95 cycles/hash +Small key speed test - 28-byte keys - 94.96 cycles/hash +Small key speed test - 29-byte keys - 95.23 cycles/hash +Small key speed test - 30-byte keys - 95.31 cycles/hash +Small key speed test - 31-byte keys - 112.17 cycles/hash +Small key speed test - 32-byte keys - 118.84 cycles/hash +Average 88.711 cycles/hash +Average, weighted by key length freq. 87.459 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 81.221 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/City32.txt b/doc/City32.txt index 07a7be0d..9b65addb 100644 --- a/doc/City32.txt +++ b/doc/City32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x174504f7f788 - 0x174504f7f71c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.940 bytes/cycle - 5549.01 MiB/sec @ 3 ghz -Alignment 6 - 1.936 bytes/cycle - 5538.67 MiB/sec @ 3 ghz -Alignment 5 - 1.940 bytes/cycle - 5549.21 MiB/sec @ 3 ghz -Alignment 4 - 1.947 bytes/cycle - 5569.29 MiB/sec @ 3 ghz -Alignment 3 - 1.938 bytes/cycle - 5544.84 MiB/sec @ 3 ghz -Alignment 2 - 1.938 bytes/cycle - 5544.66 MiB/sec @ 3 ghz -Alignment 1 - 1.938 bytes/cycle - 5544.79 MiB/sec @ 3 ghz -Alignment 0 - 1.947 bytes/cycle - 5569.73 MiB/sec @ 3 ghz -Average - 1.940 bytes/cycle - 5551.28 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 37.00 cycles/hash -Small key speed test - 2-byte keys - 41.00 cycles/hash -Small key speed test - 3-byte keys - 45.00 cycles/hash -Small key speed test - 4-byte keys - 48.00 cycles/hash -Small key speed test - 5-byte keys - 44.99 cycles/hash -Small key speed test - 6-byte keys - 44.99 cycles/hash -Small key speed test - 7-byte keys - 44.99 cycles/hash -Small key speed test - 8-byte keys - 44.99 cycles/hash -Small key speed test - 9-byte keys - 44.99 cycles/hash -Small key speed test - 10-byte keys - 44.99 cycles/hash -Small key speed test - 11-byte keys - 44.98 cycles/hash -Small key speed test - 12-byte keys - 44.99 cycles/hash -Small key speed test - 13-byte keys - 56.59 cycles/hash -Small key speed test - 14-byte keys - 56.58 cycles/hash -Small key speed test - 15-byte keys - 56.61 cycles/hash -Small key speed test - 16-byte keys - 56.58 cycles/hash -Small key speed test - 17-byte keys - 56.56 cycles/hash -Small key speed test - 18-byte keys - 56.59 cycles/hash -Small key speed test - 19-byte keys - 56.58 cycles/hash -Small key speed test - 20-byte keys - 56.58 cycles/hash -Small key speed test - 21-byte keys - 57.00 cycles/hash -Small key speed test - 22-byte keys - 57.00 cycles/hash -Small key speed test - 23-byte keys - 57.00 cycles/hash -Small key speed test - 24-byte keys - 56.61 cycles/hash -Small key speed test - 25-byte keys - 67.66 cycles/hash -Small key speed test - 26-byte keys - 67.61 cycles/hash -Small key speed test - 27-byte keys - 67.70 cycles/hash -Small key speed test - 28-byte keys - 68.58 cycles/hash -Small key speed test - 29-byte keys - 67.93 cycles/hash -Small key speed test - 30-byte keys - 67.93 cycles/hash -Small key speed test - 31-byte keys - 67.91 cycles/hash -Average 54.403 cycles/hash +Alignment 7 - 2.006 bytes/cycle - 5740.47 MiB/sec @ 3 ghz +Alignment 6 - 2.007 bytes/cycle - 5742.70 MiB/sec @ 3 ghz +Alignment 5 - 2.007 bytes/cycle - 5741.78 MiB/sec @ 3 ghz +Alignment 4 - 2.015 bytes/cycle - 5764.27 MiB/sec @ 3 ghz +Alignment 3 - 2.005 bytes/cycle - 5737.38 MiB/sec @ 3 ghz +Alignment 2 - 2.005 bytes/cycle - 5737.22 MiB/sec @ 3 ghz +Alignment 1 - 2.005 bytes/cycle - 5737.48 MiB/sec @ 3 ghz +Alignment 0 - 2.015 bytes/cycle - 5765.34 MiB/sec @ 3 ghz +Average - 2.008 bytes/cycle - 5745.83 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 35.96 cycles/hash +Small key speed test - 2-byte keys - 39.00 cycles/hash +Small key speed test - 3-byte keys - 43.00 cycles/hash +Small key speed test - 4-byte keys - 46.00 cycles/hash +Small key speed test - 5-byte keys - 42.00 cycles/hash +Small key speed test - 6-byte keys - 42.13 cycles/hash +Small key speed test - 7-byte keys - 42.00 cycles/hash +Small key speed test - 8-byte keys - 42.00 cycles/hash +Small key speed test - 9-byte keys - 42.14 cycles/hash +Small key speed test - 10-byte keys - 42.00 cycles/hash +Small key speed test - 11-byte keys - 42.00 cycles/hash +Small key speed test - 12-byte keys - 42.00 cycles/hash +Small key speed test - 13-byte keys - 54.43 cycles/hash +Small key speed test - 14-byte keys - 54.41 cycles/hash +Small key speed test - 15-byte keys - 54.00 cycles/hash +Small key speed test - 16-byte keys - 54.00 cycles/hash +Small key speed test - 17-byte keys - 54.27 cycles/hash +Small key speed test - 18-byte keys - 54.25 cycles/hash +Small key speed test - 19-byte keys - 54.00 cycles/hash +Small key speed test - 20-byte keys - 54.00 cycles/hash +Small key speed test - 21-byte keys - 54.34 cycles/hash +Small key speed test - 22-byte keys - 54.00 cycles/hash +Small key speed test - 23-byte keys - 54.47 cycles/hash +Small key speed test - 24-byte keys - 54.31 cycles/hash +Small key speed test - 25-byte keys - 65.94 cycles/hash +Small key speed test - 26-byte keys - 65.93 cycles/hash +Small key speed test - 27-byte keys - 65.93 cycles/hash +Small key speed test - 28-byte keys - 65.94 cycles/hash +Small key speed test - 29-byte keys - 65.88 cycles/hash +Small key speed test - 30-byte keys - 65.88 cycles/hash +Small key speed test - 31-byte keys - 65.88 cycles/hash +Small key speed test - 32-byte keys - 65.93 cycles/hash +Average 52.438 cycles/hash +Average, weighted by key length freq. 52.070 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 48.035 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/City64.txt b/doc/City64.txt index 0201f88a..8cea147f 100644 --- a/doc/City64.txt +++ b/doc/City64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x17e93fc94958 - 0x17e93fc948ec). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.833 bytes/cycle - 13826.40 MiB/sec @ 3 ghz -Alignment 6 - 4.848 bytes/cycle - 13870.48 MiB/sec @ 3 ghz -Alignment 5 - 4.848 bytes/cycle - 13869.76 MiB/sec @ 3 ghz -Alignment 4 - 4.856 bytes/cycle - 13892.56 MiB/sec @ 3 ghz -Alignment 3 - 4.848 bytes/cycle - 13870.24 MiB/sec @ 3 ghz -Alignment 2 - 4.841 bytes/cycle - 13850.16 MiB/sec @ 3 ghz -Alignment 1 - 4.838 bytes/cycle - 13842.01 MiB/sec @ 3 ghz -Alignment 0 - 4.922 bytes/cycle - 14081.08 MiB/sec @ 3 ghz -Average - 4.854 bytes/cycle - 13887.84 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 40.00 cycles/hash -Small key speed test - 2-byte keys - 40.00 cycles/hash -Small key speed test - 3-byte keys - 40.00 cycles/hash -Small key speed test - 4-byte keys - 42.93 cycles/hash -Small key speed test - 5-byte keys - 42.93 cycles/hash -Small key speed test - 6-byte keys - 42.93 cycles/hash -Small key speed test - 7-byte keys - 42.93 cycles/hash -Small key speed test - 8-byte keys - 42.93 cycles/hash -Small key speed test - 9-byte keys - 44.79 cycles/hash -Small key speed test - 10-byte keys - 44.83 cycles/hash -Small key speed test - 11-byte keys - 44.79 cycles/hash -Small key speed test - 12-byte keys - 44.85 cycles/hash -Small key speed test - 13-byte keys - 44.85 cycles/hash -Small key speed test - 14-byte keys - 44.82 cycles/hash -Small key speed test - 15-byte keys - 44.90 cycles/hash -Small key speed test - 16-byte keys - 44.78 cycles/hash -Small key speed test - 17-byte keys - 49.00 cycles/hash -Small key speed test - 18-byte keys - 49.00 cycles/hash -Small key speed test - 19-byte keys - 49.00 cycles/hash -Small key speed test - 20-byte keys - 49.00 cycles/hash -Small key speed test - 21-byte keys - 49.99 cycles/hash -Small key speed test - 22-byte keys - 49.99 cycles/hash -Small key speed test - 23-byte keys - 49.99 cycles/hash -Small key speed test - 24-byte keys - 49.33 cycles/hash -Small key speed test - 25-byte keys - 49.90 cycles/hash -Small key speed test - 26-byte keys - 49.93 cycles/hash -Small key speed test - 27-byte keys - 49.90 cycles/hash -Small key speed test - 28-byte keys - 49.44 cycles/hash -Small key speed test - 29-byte keys - 49.42 cycles/hash -Small key speed test - 30-byte keys - 49.41 cycles/hash -Small key speed test - 31-byte keys - 49.43 cycles/hash -Average 46.322 cycles/hash +Alignment 7 - 5.011 bytes/cycle - 14337.72 MiB/sec @ 3 ghz +Alignment 6 - 5.021 bytes/cycle - 14365.95 MiB/sec @ 3 ghz +Alignment 5 - 5.018 bytes/cycle - 14357.95 MiB/sec @ 3 ghz +Alignment 4 - 5.030 bytes/cycle - 14389.62 MiB/sec @ 3 ghz +Alignment 3 - 5.020 bytes/cycle - 14361.36 MiB/sec @ 3 ghz +Alignment 2 - 5.021 bytes/cycle - 14366.52 MiB/sec @ 3 ghz +Alignment 1 - 5.022 bytes/cycle - 14367.91 MiB/sec @ 3 ghz +Alignment 0 - 5.094 bytes/cycle - 14573.72 MiB/sec @ 3 ghz +Average - 5.030 bytes/cycle - 14390.09 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 38.18 cycles/hash +Small key speed test - 2-byte keys - 38.15 cycles/hash +Small key speed test - 3-byte keys - 38.13 cycles/hash +Small key speed test - 4-byte keys - 43.14 cycles/hash +Small key speed test - 5-byte keys - 43.00 cycles/hash +Small key speed test - 6-byte keys - 43.00 cycles/hash +Small key speed test - 7-byte keys - 43.00 cycles/hash +Small key speed test - 8-byte keys - 47.00 cycles/hash +Small key speed test - 9-byte keys - 47.00 cycles/hash +Small key speed test - 10-byte keys - 47.00 cycles/hash +Small key speed test - 11-byte keys - 47.00 cycles/hash +Small key speed test - 12-byte keys - 47.00 cycles/hash +Small key speed test - 13-byte keys - 47.00 cycles/hash +Small key speed test - 14-byte keys - 47.00 cycles/hash +Small key speed test - 15-byte keys - 47.00 cycles/hash +Small key speed test - 16-byte keys - 47.00 cycles/hash +Small key speed test - 17-byte keys - 48.98 cycles/hash +Small key speed test - 18-byte keys - 48.99 cycles/hash +Small key speed test - 19-byte keys - 48.99 cycles/hash +Small key speed test - 20-byte keys - 48.99 cycles/hash +Small key speed test - 21-byte keys - 48.99 cycles/hash +Small key speed test - 22-byte keys - 48.99 cycles/hash +Small key speed test - 23-byte keys - 48.98 cycles/hash +Small key speed test - 24-byte keys - 49.00 cycles/hash +Small key speed test - 25-byte keys - 48.99 cycles/hash +Small key speed test - 26-byte keys - 48.99 cycles/hash +Small key speed test - 27-byte keys - 48.98 cycles/hash +Small key speed test - 28-byte keys - 48.99 cycles/hash +Small key speed test - 29-byte keys - 49.16 cycles/hash +Small key speed test - 30-byte keys - 49.21 cycles/hash +Small key speed test - 31-byte keys - 49.18 cycles/hash +Small key speed test - 32-byte keys - 49.00 cycles/hash +Average 46.689 cycles/hash +Average, weighted by key length freq. 47.794 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 46.749 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/City64low.txt b/doc/City64low.txt index 36ae00a7..ef2cd4e4 100644 --- a/doc/City64low.txt +++ b/doc/City64low.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x132fc99440628 - 0x132fc994405bc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.850 bytes/cycle - 13875.59 MiB/sec @ 3 ghz -Alignment 6 - 4.850 bytes/cycle - 13875.59 MiB/sec @ 3 ghz -Alignment 5 - 4.850 bytes/cycle - 13876.08 MiB/sec @ 3 ghz -Alignment 4 - 4.857 bytes/cycle - 13896.88 MiB/sec @ 3 ghz -Alignment 3 - 4.849 bytes/cycle - 13874.24 MiB/sec @ 3 ghz -Alignment 2 - 4.850 bytes/cycle - 13876.30 MiB/sec @ 3 ghz -Alignment 1 - 4.850 bytes/cycle - 13875.80 MiB/sec @ 3 ghz -Alignment 0 - 4.922 bytes/cycle - 14082.29 MiB/sec @ 3 ghz -Average - 4.860 bytes/cycle - 13904.10 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 39.98 cycles/hash -Small key speed test - 2-byte keys - 39.97 cycles/hash -Small key speed test - 3-byte keys - 39.96 cycles/hash -Small key speed test - 4-byte keys - 43.00 cycles/hash -Small key speed test - 5-byte keys - 43.00 cycles/hash -Small key speed test - 6-byte keys - 43.00 cycles/hash -Small key speed test - 7-byte keys - 43.00 cycles/hash -Small key speed test - 8-byte keys - 43.00 cycles/hash -Small key speed test - 9-byte keys - 44.65 cycles/hash -Small key speed test - 10-byte keys - 44.89 cycles/hash -Small key speed test - 11-byte keys - 44.58 cycles/hash -Small key speed test - 12-byte keys - 44.80 cycles/hash -Small key speed test - 13-byte keys - 44.49 cycles/hash -Small key speed test - 14-byte keys - 44.61 cycles/hash -Small key speed test - 15-byte keys - 44.49 cycles/hash -Small key speed test - 16-byte keys - 44.93 cycles/hash -Small key speed test - 17-byte keys - 49.00 cycles/hash -Small key speed test - 18-byte keys - 49.00 cycles/hash -Small key speed test - 19-byte keys - 49.00 cycles/hash -Small key speed test - 20-byte keys - 49.00 cycles/hash -Small key speed test - 21-byte keys - 49.95 cycles/hash -Small key speed test - 22-byte keys - 49.95 cycles/hash -Small key speed test - 23-byte keys - 49.96 cycles/hash -Small key speed test - 24-byte keys - 49.12 cycles/hash -Small key speed test - 25-byte keys - 49.81 cycles/hash -Small key speed test - 26-byte keys - 49.79 cycles/hash -Small key speed test - 27-byte keys - 49.71 cycles/hash -Small key speed test - 28-byte keys - 49.00 cycles/hash -Small key speed test - 29-byte keys - 49.34 cycles/hash -Small key speed test - 30-byte keys - 49.32 cycles/hash -Small key speed test - 31-byte keys - 49.27 cycles/hash -Average 46.244 cycles/hash +Alignment 7 - 4.057 bytes/cycle - 11607.96 MiB/sec @ 3 ghz +Alignment 6 - 4.056 bytes/cycle - 11604.22 MiB/sec @ 3 ghz +Alignment 5 - 4.057 bytes/cycle - 11606.12 MiB/sec @ 3 ghz +Alignment 4 - 4.909 bytes/cycle - 14044.04 MiB/sec @ 3 ghz +Alignment 3 - 4.885 bytes/cycle - 13977.05 MiB/sec @ 3 ghz +Alignment 2 - 4.882 bytes/cycle - 13968.53 MiB/sec @ 3 ghz +Alignment 1 - 4.882 bytes/cycle - 13966.68 MiB/sec @ 3 ghz +Alignment 0 - 4.956 bytes/cycle - 14178.80 MiB/sec @ 3 ghz +Average - 4.585 bytes/cycle - 13119.17 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 39.79 cycles/hash +Small key speed test - 2-byte keys - 39.78 cycles/hash +Small key speed test - 3-byte keys - 39.76 cycles/hash +Small key speed test - 4-byte keys - 44.98 cycles/hash +Small key speed test - 5-byte keys - 44.98 cycles/hash +Small key speed test - 6-byte keys - 44.98 cycles/hash +Small key speed test - 7-byte keys - 44.98 cycles/hash +Small key speed test - 8-byte keys - 48.00 cycles/hash +Small key speed test - 9-byte keys - 48.00 cycles/hash +Small key speed test - 10-byte keys - 48.00 cycles/hash +Small key speed test - 11-byte keys - 48.00 cycles/hash +Small key speed test - 12-byte keys - 48.00 cycles/hash +Small key speed test - 13-byte keys - 48.00 cycles/hash +Small key speed test - 14-byte keys - 48.00 cycles/hash +Small key speed test - 15-byte keys - 48.00 cycles/hash +Small key speed test - 16-byte keys - 48.00 cycles/hash +Small key speed test - 17-byte keys - 50.00 cycles/hash +Small key speed test - 18-byte keys - 50.00 cycles/hash +Small key speed test - 19-byte keys - 50.00 cycles/hash +Small key speed test - 20-byte keys - 50.00 cycles/hash +Small key speed test - 21-byte keys - 50.00 cycles/hash +Small key speed test - 22-byte keys - 50.00 cycles/hash +Small key speed test - 23-byte keys - 50.00 cycles/hash +Small key speed test - 24-byte keys - 50.00 cycles/hash +Small key speed test - 25-byte keys - 50.00 cycles/hash +Small key speed test - 26-byte keys - 50.00 cycles/hash +Small key speed test - 27-byte keys - 50.00 cycles/hash +Small key speed test - 28-byte keys - 50.00 cycles/hash +Small key speed test - 29-byte keys - 50.52 cycles/hash +Small key speed test - 30-byte keys - 50.55 cycles/hash +Small key speed test - 31-byte keys - 50.56 cycles/hash +Small key speed test - 32-byte keys - 50.62 cycles/hash +Average 47.922 cycles/hash +Average, weighted by key length freq. 48.834 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 47.816 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/City64noSeed.txt b/doc/City64noSeed.txt index d9ade18f..7c687119 100644 --- a/doc/City64noSeed.txt +++ b/doc/City64noSeed.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x17e15faa79d4 - 0x17e15faa7968). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.991 bytes/cycle - 14278.96 MiB/sec @ 3 ghz -Alignment 6 - 4.997 bytes/cycle - 14297.85 MiB/sec @ 3 ghz -Alignment 5 - 4.995 bytes/cycle - 14290.80 MiB/sec @ 3 ghz -Alignment 4 - 5.006 bytes/cycle - 14321.43 MiB/sec @ 3 ghz -Alignment 3 - 4.920 bytes/cycle - 14077.47 MiB/sec @ 3 ghz -Alignment 2 - 4.911 bytes/cycle - 14049.31 MiB/sec @ 3 ghz -Alignment 1 - 4.918 bytes/cycle - 14071.70 MiB/sec @ 3 ghz -Alignment 0 - 4.993 bytes/cycle - 14286.03 MiB/sec @ 3 ghz -Average - 4.966 bytes/cycle - 14209.19 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 25.00 cycles/hash -Small key speed test - 2-byte keys - 25.00 cycles/hash -Small key speed test - 3-byte keys - 25.00 cycles/hash -Small key speed test - 4-byte keys - 28.00 cycles/hash -Small key speed test - 5-byte keys - 28.00 cycles/hash -Small key speed test - 6-byte keys - 28.00 cycles/hash -Small key speed test - 7-byte keys - 28.00 cycles/hash -Small key speed test - 8-byte keys - 28.00 cycles/hash -Small key speed test - 9-byte keys - 29.98 cycles/hash -Small key speed test - 10-byte keys - 30.00 cycles/hash -Small key speed test - 11-byte keys - 30.00 cycles/hash -Small key speed test - 12-byte keys - 30.00 cycles/hash -Small key speed test - 13-byte keys - 30.00 cycles/hash -Small key speed test - 14-byte keys - 30.00 cycles/hash -Small key speed test - 15-byte keys - 30.00 cycles/hash -Small key speed test - 16-byte keys - 30.00 cycles/hash -Small key speed test - 17-byte keys - 35.00 cycles/hash +Alignment 7 - 4.886 bytes/cycle - 13979.78 MiB/sec @ 3 ghz +Alignment 6 - 4.893 bytes/cycle - 13998.32 MiB/sec @ 3 ghz +Alignment 5 - 4.891 bytes/cycle - 13994.36 MiB/sec @ 3 ghz +Alignment 4 - 4.900 bytes/cycle - 14020.37 MiB/sec @ 3 ghz +Alignment 3 - 4.892 bytes/cycle - 13995.08 MiB/sec @ 3 ghz +Alignment 2 - 4.892 bytes/cycle - 13995.46 MiB/sec @ 3 ghz +Alignment 1 - 4.893 bytes/cycle - 13997.70 MiB/sec @ 3 ghz +Alignment 0 - 4.965 bytes/cycle - 14205.11 MiB/sec @ 3 ghz +Average - 4.901 bytes/cycle - 14023.27 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 26.00 cycles/hash +Small key speed test - 2-byte keys - 26.00 cycles/hash +Small key speed test - 3-byte keys - 26.00 cycles/hash +Small key speed test - 4-byte keys - 30.00 cycles/hash +Small key speed test - 5-byte keys - 30.00 cycles/hash +Small key speed test - 6-byte keys - 30.00 cycles/hash +Small key speed test - 7-byte keys - 30.00 cycles/hash +Small key speed test - 8-byte keys - 34.00 cycles/hash +Small key speed test - 9-byte keys - 34.00 cycles/hash +Small key speed test - 10-byte keys - 34.00 cycles/hash +Small key speed test - 11-byte keys - 34.00 cycles/hash +Small key speed test - 12-byte keys - 34.00 cycles/hash +Small key speed test - 13-byte keys - 34.00 cycles/hash +Small key speed test - 14-byte keys - 34.00 cycles/hash +Small key speed test - 15-byte keys - 34.00 cycles/hash +Small key speed test - 16-byte keys - 34.00 cycles/hash +Small key speed test - 17-byte keys - 35.18 cycles/hash Small key speed test - 18-byte keys - 35.00 cycles/hash -Small key speed test - 19-byte keys - 35.00 cycles/hash -Small key speed test - 20-byte keys - 35.00 cycles/hash -Small key speed test - 21-byte keys - 36.00 cycles/hash -Small key speed test - 22-byte keys - 36.00 cycles/hash -Small key speed test - 23-byte keys - 36.00 cycles/hash -Small key speed test - 24-byte keys - 35.27 cycles/hash -Small key speed test - 25-byte keys - 35.68 cycles/hash -Small key speed test - 26-byte keys - 35.68 cycles/hash -Small key speed test - 27-byte keys - 35.56 cycles/hash -Small key speed test - 28-byte keys - 35.16 cycles/hash -Small key speed test - 29-byte keys - 35.16 cycles/hash -Small key speed test - 30-byte keys - 35.21 cycles/hash -Small key speed test - 31-byte keys - 35.14 cycles/hash -Average 31.801 cycles/hash +Small key speed test - 19-byte keys - 35.15 cycles/hash +Small key speed test - 20-byte keys - 35.27 cycles/hash +Small key speed test - 21-byte keys - 35.00 cycles/hash +Small key speed test - 22-byte keys - 35.00 cycles/hash +Small key speed test - 23-byte keys - 35.13 cycles/hash +Small key speed test - 24-byte keys - 35.00 cycles/hash +Small key speed test - 25-byte keys - 35.17 cycles/hash +Small key speed test - 26-byte keys - 35.00 cycles/hash +Small key speed test - 27-byte keys - 35.00 cycles/hash +Small key speed test - 28-byte keys - 35.25 cycles/hash +Small key speed test - 29-byte keys - 35.68 cycles/hash +Small key speed test - 30-byte keys - 35.68 cycles/hash +Small key speed test - 31-byte keys - 35.70 cycles/hash +Small key speed test - 32-byte keys - 35.68 cycles/hash +Average 33.372 cycles/hash +Average, weighted by key length freq. 34.422 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 33.740 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/CityCrc128.txt b/doc/CityCrc128.txt index 26bc197f..f28bad49 100644 --- a/doc/CityCrc128.txt +++ b/doc/CityCrc128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x1331719373e98 - 0x1331719373e50). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.766 bytes/cycle - 7913.57 MiB/sec @ 3 ghz -Alignment 6 - 2.767 bytes/cycle - 7917.07 MiB/sec @ 3 ghz -Alignment 5 - 2.766 bytes/cycle - 7914.71 MiB/sec @ 3 ghz -Alignment 4 - 2.768 bytes/cycle - 7919.12 MiB/sec @ 3 ghz -Alignment 3 - 2.766 bytes/cycle - 7914.71 MiB/sec @ 3 ghz -Alignment 2 - 2.767 bytes/cycle - 7917.53 MiB/sec @ 3 ghz -Alignment 1 - 2.766 bytes/cycle - 7914.69 MiB/sec @ 3 ghz -Alignment 0 - 2.768 bytes/cycle - 7920.14 MiB/sec @ 3 ghz -Average - 2.767 bytes/cycle - 7916.44 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 45.27 cycles/hash -Small key speed test - 2-byte keys - 45.28 cycles/hash -Small key speed test - 3-byte keys - 45.25 cycles/hash -Small key speed test - 4-byte keys - 48.51 cycles/hash -Small key speed test - 5-byte keys - 48.00 cycles/hash -Small key speed test - 6-byte keys - 48.47 cycles/hash -Small key speed test - 7-byte keys - 48.45 cycles/hash -Small key speed test - 8-byte keys - 45.00 cycles/hash -Small key speed test - 9-byte keys - 47.00 cycles/hash -Small key speed test - 10-byte keys - 47.00 cycles/hash -Small key speed test - 11-byte keys - 47.00 cycles/hash -Small key speed test - 12-byte keys - 47.00 cycles/hash -Small key speed test - 13-byte keys - 47.00 cycles/hash -Small key speed test - 14-byte keys - 47.00 cycles/hash -Small key speed test - 15-byte keys - 47.00 cycles/hash -Small key speed test - 16-byte keys - 47.00 cycles/hash -Small key speed test - 17-byte keys - 63.99 cycles/hash -Small key speed test - 18-byte keys - 63.94 cycles/hash -Small key speed test - 19-byte keys - 63.94 cycles/hash -Small key speed test - 20-byte keys - 63.96 cycles/hash -Small key speed test - 21-byte keys - 64.98 cycles/hash -Small key speed test - 22-byte keys - 64.98 cycles/hash -Small key speed test - 23-byte keys - 64.98 cycles/hash -Small key speed test - 24-byte keys - 64.48 cycles/hash -Small key speed test - 25-byte keys - 64.78 cycles/hash -Small key speed test - 26-byte keys - 64.76 cycles/hash -Small key speed test - 27-byte keys - 64.78 cycles/hash -Small key speed test - 28-byte keys - 65.30 cycles/hash -Small key speed test - 29-byte keys - 65.29 cycles/hash -Small key speed test - 30-byte keys - 65.00 cycles/hash -Small key speed test - 31-byte keys - 65.00 cycles/hash -Average 55.497 cycles/hash +Alignment 7 - 4.264 bytes/cycle - 12198.46 MiB/sec @ 3 ghz +Alignment 6 - 4.268 bytes/cycle - 12211.50 MiB/sec @ 3 ghz +Alignment 5 - 4.275 bytes/cycle - 12230.57 MiB/sec @ 3 ghz +Alignment 4 - 4.275 bytes/cycle - 12230.70 MiB/sec @ 3 ghz +Alignment 3 - 4.268 bytes/cycle - 12209.58 MiB/sec @ 3 ghz +Alignment 2 - 4.267 bytes/cycle - 12209.03 MiB/sec @ 3 ghz +Alignment 1 - 4.275 bytes/cycle - 12230.00 MiB/sec @ 3 ghz +Alignment 0 - 4.376 bytes/cycle - 12520.53 MiB/sec @ 3 ghz +Average - 4.283 bytes/cycle - 12255.05 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 76.92 cycles/hash +Small key speed test - 2-byte keys - 76.87 cycles/hash +Small key speed test - 3-byte keys - 76.92 cycles/hash +Small key speed test - 4-byte keys - 82.16 cycles/hash +Small key speed test - 5-byte keys - 81.99 cycles/hash +Small key speed test - 6-byte keys - 82.00 cycles/hash +Small key speed test - 7-byte keys - 82.10 cycles/hash +Small key speed test - 8-byte keys - 82.17 cycles/hash +Small key speed test - 9-byte keys - 82.15 cycles/hash +Small key speed test - 10-byte keys - 82.14 cycles/hash +Small key speed test - 11-byte keys - 82.23 cycles/hash +Small key speed test - 12-byte keys - 82.19 cycles/hash +Small key speed test - 13-byte keys - 82.22 cycles/hash +Small key speed test - 14-byte keys - 82.18 cycles/hash +Small key speed test - 15-byte keys - 82.14 cycles/hash +Small key speed test - 16-byte keys - 82.20 cycles/hash +Small key speed test - 17-byte keys - 96.99 cycles/hash +Small key speed test - 18-byte keys - 96.99 cycles/hash +Small key speed test - 19-byte keys - 96.99 cycles/hash +Small key speed test - 20-byte keys - 97.00 cycles/hash +Small key speed test - 21-byte keys - 96.99 cycles/hash +Small key speed test - 22-byte keys - 96.99 cycles/hash +Small key speed test - 23-byte keys - 96.99 cycles/hash +Small key speed test - 24-byte keys - 97.00 cycles/hash +Small key speed test - 25-byte keys - 97.09 cycles/hash +Small key speed test - 26-byte keys - 96.98 cycles/hash +Small key speed test - 27-byte keys - 96.98 cycles/hash +Small key speed test - 28-byte keys - 96.99 cycles/hash +Small key speed test - 29-byte keys - 98.34 cycles/hash +Small key speed test - 30-byte keys - 98.22 cycles/hash +Small key speed test - 31-byte keys - 98.26 cycles/hash +Small key speed test - 32-byte keys - 98.54 cycles/hash +Average 89.247 cycles/hash +Average, weighted by key length freq. 88.714 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 82.367 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/CityCrc256.txt b/doc/CityCrc256.txt new file mode 100644 index 00000000..fde8226e --- /dev/null +++ b/doc/CityCrc256.txt @@ -0,0 +1,1991 @@ +------------------------------------------------------------------------------- +--- Testing CityCrc256 "Google CityHashCrc256 SSE4.2 (v1.1)" GOOD + +[[[ Sanity Tests ]]] + +Verification value 0x2A7036C8 ....... PASS +Running sanity check 1 .......... PASS +Running AppendedZeroesTest .......... PASS + +[[[ Speed Tests ]]] + +WARNING: timer resolution is 72 (0x48) ticks (0x133277f1f48f0 - 0x133277f1f48a8). Broken VDSO? +Bulk speed test - 262144-byte keys +Alignment 7 - 4.323 bytes/cycle - 12369.23 MiB/sec @ 3 ghz +Alignment 6 - 4.332 bytes/cycle - 12394.67 MiB/sec @ 3 ghz +Alignment 5 - 4.332 bytes/cycle - 12392.91 MiB/sec @ 3 ghz +Alignment 4 - 4.332 bytes/cycle - 12394.78 MiB/sec @ 3 ghz +Alignment 3 - 4.332 bytes/cycle - 12393.97 MiB/sec @ 3 ghz +Alignment 2 - 4.332 bytes/cycle - 12393.30 MiB/sec @ 3 ghz +Alignment 1 - 4.332 bytes/cycle - 12393.31 MiB/sec @ 3 ghz +Alignment 0 - 4.437 bytes/cycle - 12695.47 MiB/sec @ 3 ghz +Average - 4.344 bytes/cycle - 12428.45 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 179.83 cycles/hash +Small key speed test - 2-byte keys - 177.77 cycles/hash +Small key speed test - 3-byte keys - 177.74 cycles/hash +Small key speed test - 4-byte keys - 179.33 cycles/hash +Small key speed test - 5-byte keys - 183.83 cycles/hash +Small key speed test - 6-byte keys - 176.83 cycles/hash +Small key speed test - 7-byte keys - 184.00 cycles/hash +Small key speed test - 8-byte keys - 136.66 cycles/hash +Small key speed test - 9-byte keys - 181.40 cycles/hash +Small key speed test - 10-byte keys - 156.50 cycles/hash +Small key speed test - 11-byte keys - 156.67 cycles/hash +Small key speed test - 12-byte keys - 153.80 cycles/hash +Small key speed test - 13-byte keys - 158.50 cycles/hash +Small key speed test - 14-byte keys - 156.69 cycles/hash +Small key speed test - 15-byte keys - 156.68 cycles/hash +Small key speed test - 16-byte keys - 136.73 cycles/hash +Small key speed test - 17-byte keys - 176.14 cycles/hash +Small key speed test - 18-byte keys - 176.12 cycles/hash +Small key speed test - 19-byte keys - 176.26 cycles/hash +Small key speed test - 20-byte keys - 173.02 cycles/hash +Small key speed test - 21-byte keys - 176.17 cycles/hash +Small key speed test - 22-byte keys - 175.89 cycles/hash +Small key speed test - 23-byte keys - 176.64 cycles/hash +Small key speed test - 24-byte keys - 138.91 cycles/hash +Small key speed test - 25-byte keys - 158.09 cycles/hash +Small key speed test - 26-byte keys - 158.97 cycles/hash +Small key speed test - 27-byte keys - 159.22 cycles/hash +Small key speed test - 28-byte keys - 155.95 cycles/hash +Small key speed test - 29-byte keys - 159.51 cycles/hash +Small key speed test - 30-byte keys - 158.98 cycles/hash +Small key speed test - 31-byte keys - 159.18 cycles/hash +Small key speed test - 32-byte keys - 145.78 cycles/hash +Average 164.931 cycles/hash +Average, weighted by key length freq. 161.820 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 156.021 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) + +[[[ 'Hashmap' Speed Tests ]]] + +std::unordered_map +Init std HashMapTest: 652.711 cycles/op (104334 inserts, 1% deletions) +Running std HashMapTest: 377.524 cycles/op (35.1 stdv) + +greg7mdp/parallel-hashmap +Init fast HashMapTest: 467.548 cycles/op (104334 inserts, 1% deletions) +Running fast HashMapTest: 279.389 cycles/op (22.7 stdv) ....... PASS + +[[[ Avalanche Tests ]]] + +Testing 24-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.772000% +Testing 32-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.764667% +Testing 40-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.746667% +Testing 48-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.690667% +Testing 56-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.708667% +Testing 64-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.839333% +Testing 72-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.728667% +Testing 80-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.810667% +Testing 96-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.723333% +Testing 112-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.763333% +Testing 128-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.772667% +Testing 160-bit keys -> 256-bit hashes, 300000 reps.......... worst bias is 0.756667% + +[[[ Keyset 'Sparse' Tests ]]] + +Keyset 'Sparse' - 16-bit keys with up to 9 bits set - 50643 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (high 19-25 bits) - Worst is 25 bits: 43/38 (1.13x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 0.3, actual 1 (3.35x) (1) ! +Testing collisions (low 19-25 bits) - Worst is 25 bits: 46/38 (1.20x) +Testing distribution - Worst bias is the 13-bit window at bit 128 - 0.744% + +Keyset 'Sparse' - 24-bit keys with up to 8 bits set - 1271626 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 188.2, actual 164 (0.87x) +Testing collisions (high 24-35 bits) - Worst is 24 bits: 46905/46996 (1.00x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 188.2, actual 198 (1.05x) (10) +Testing collisions (low 24-35 bits) - Worst is 34 bits: 53/47 (1.13x) +Testing distribution - Worst bias is the 17-bit window at bit 31 - 0.120% + +Keyset 'Sparse' - 32-bit keys with up to 7 bits set - 4514873 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2372.2, actual 2456 (1.04x) (84) +Testing collisions (high 25-38 bits) - Worst is 33 bits: 1240/1186 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 2372.2, actual 2263 (0.95x) +Testing collisions (low 25-38 bits) - Worst is 38 bits: 48/37 (1.29x) +Testing distribution - Worst bias is the 19-bit window at bit 142 - 0.078% + +Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2460.8, actual 2473 (1.00x) (13) +Testing collisions (high 25-38 bits) - Worst is 31 bits: 5001/4919 (1.02x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 2460.8, actual 2492 (1.01x) (32) +Testing collisions (low 25-38 bits) - Worst is 31 bits: 5042/4919 (1.02x) +Testing distribution - Worst bias is the 19-bit window at bit 208 - 0.065% + +Keyset 'Sparse' - 48-bit keys with up to 6 bits set - 14196869 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 23437.8, actual 23404 (1.00x) (-33) +Testing collisions (high 27-42 bits) - Worst is 39 bits: 203/183 (1.11x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 23437.8, actual 23347 (1.00x) (-90) +Testing collisions (low 27-42 bits) - Worst is 41 bits: 48/45 (1.05x) +Testing distribution - Worst bias is the 20-bit window at bit 183 - 0.026% + +Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2069.0, actual 2110 (1.02x) (42) +Testing collisions (high 25-38 bits) - Worst is 36 bits: 143/129 (1.11x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 2069.0, actual 2049 (0.99x) (-19) +Testing collisions (low 25-38 bits) - Worst is 38 bits: 40/32 (1.24x) +Testing distribution - Worst bias is the 19-bit window at bit 225 - 0.061% + +Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8021.7, actual 8186 (1.02x) (165) +Testing collisions (high 26-40 bits) - Worst is 40 bits: 36/31 (1.15x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8021.7, actual 8015 (1.00x) (-6) +Testing collisions (low 26-40 bits) - Worst is 37 bits: 262/250 (1.04x) +Testing distribution - Worst bias is the 20-bit window at bit 163 - 0.053% + +Keyset 'Sparse' - 72-bit keys with up to 5 bits set - 15082603 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 26451.8, actual 26351 (1.00x) (-100) +Testing collisions (high 27-42 bits) - Worst is 42 bits: 28/25 (1.08x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 26451.8, actual 26265 (0.99x) (-186) +Testing collisions (low 27-42 bits) - Worst is 40 bits: 120/103 (1.16x) +Testing distribution - Worst bias is the 20-bit window at bit 246 - 0.028% + +Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1401.0, actual 1401 (1.00x) (1) +Testing collisions (high 25-38 bits) - Worst is 37 bits: 49/43 (1.12x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 1401.0, actual 1360 (0.97x) +Testing collisions (low 25-38 bits) - Worst is 30 bits: 5637/5599 (1.01x) +Testing distribution - Worst bias is the 19-bit window at bit 130 - 0.101% + +Keyset 'Sparse' - 160-bit keys with up to 4 bits set - 26977161 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 84546.1, actual 84557 (1.00x) (11) +Testing collisions (high 28-44 bits) - Worst is 41 bits: 177/165 (1.07x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 84546.1, actual 84445 (1.00x) (-101) +Testing collisions (low 28-44 bits) - Worst is 42 bits: 104/82 (1.26x) +Testing distribution - Worst bias is the 20-bit window at bit 8 - 0.019% + +Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 910.2, actual 935 (1.03x) (25) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 469/455 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 910.2, actual 945 (1.04x) (35) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 38/28 (1.34x) +Testing distribution - Worst bias is the 19-bit window at bit 131 - 0.109% + + +[[[ Keyset 'Permutation' Tests ]]] + +Combination Lowbits Tests: +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 668.6, actual 654 (0.98x) +Testing collisions (high 24-37 bits) - Worst is 28 bits: 10729/10667 (1.01x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 668.6, actual 672 (1.01x) (4) +Testing collisions (low 24-37 bits) - Worst is 34 bits: 173/167 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 114 - 0.078% + + +Combination Highbits Tests +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 668.6, actual 678 (1.01x) (10) +Testing collisions (high 24-37 bits) - Worst is 37 bits: 25/20 (1.20x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 668.6, actual 675 (1.01x) (7) +Testing collisions (low 24-37 bits) - Worst is 37 bits: 23/20 (1.10x) +Testing distribution - Worst bias is the 18-bit window at bit 139 - 0.071% + + +Combination Hi-Lo Tests: +Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 17322.9, actual 17174 (0.99x) (-148) +Testing collisions (high 27-41 bits) - Worst is 41 bits: 42/33 (1.24x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 17322.9, actual 17207 (0.99x) (-115) +Testing collisions (low 27-41 bits) - Worst is 41 bits: 51/33 (1.51x) +Testing distribution - Worst bias is the 20-bit window at bit 212 - 0.034% + + +Combination 0x80000000 Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 5 (0.63x) +Testing collisions (high 21-30 bits) - Worst is 26 bits: 522/511 (1.02x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 6 (0.75x) +Testing collisions (low 21-30 bits) - Worst is 26 bits: 543/511 (1.06x) +Testing distribution - Worst bias is the 15-bit window at bit 239 - 0.305% + + +Combination 0x00000001 Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 11 (1.38x) (4) +Testing collisions (high 21-30 bits) - Worst is 28 bits: 146/127 (1.14x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 7 (0.88x) +Testing collisions (low 21-30 bits) - Worst is 29 bits: 72/63 (1.13x) +Testing distribution - Worst bias is the 15-bit window at bit 23 - 0.285% + + +Combination 0x8000000000000000 Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 7 (0.88x) +Testing collisions (high 21-30 bits) - Worst is 27 bits: 270/255 (1.06x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 14 (1.75x) (7) +Testing collisions (low 21-30 bits) - Worst is 30 bits: 37/31 (1.16x) +Testing distribution - Worst bias is the 15-bit window at bit 203 - 0.280% + + +Combination 0x0000000000000001 Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 5 (0.63x) +Testing collisions (high 21-30 bits) - Worst is 27 bits: 266/255 (1.04x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 11 (1.38x) (4) +Testing collisions (low 21-30 bits) - Worst is 30 bits: 36/31 (1.13x) +Testing distribution - Worst bias is the 15-bit window at bit 137 - 0.406% + + +Combination 16-bytes [0-1] Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 8 (1.00x) (1) +Testing collisions (high 21-30 bits) - Worst is 29 bits: 78/63 (1.22x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 9 (1.13x) (2) +Testing collisions (low 21-30 bits) - Worst is 27 bits: 285/255 (1.11x) +Testing distribution - Worst bias is the 15-bit window at bit 7 - 0.285% + + +Combination 16-bytes [0-last] Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 7 (0.88x) +Testing collisions (high 21-30 bits) - Worst is 30 bits: 33/31 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 9 (1.13x) (2) +Testing collisions (low 21-30 bits) - Worst is 29 bits: 76/63 (1.19x) +Testing distribution - Worst bias is the 15-bit window at bit 27 - 0.235% + + +Combination 32-bytes [0-1] Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 11 (1.38x) (4) +Testing collisions (high 21-30 bits) - Worst is 29 bits: 67/63 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 7 (0.88x) +Testing collisions (low 21-30 bits) - Worst is 26 bits: 544/511 (1.06x) +Testing distribution - Worst bias is the 15-bit window at bit 18 - 0.300% + + +Combination 32-bytes [0-last] Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 12 (1.50x) (5) +Testing collisions (high 21-30 bits) - Worst is 30 bits: 35/31 (1.09x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 13 (1.63x) (6) +Testing collisions (low 21-30 bits) - Worst is 30 bits: 43/31 (1.34x) +Testing distribution - Worst bias is the 15-bit window at bit 168 - 0.286% + + +Combination 64-bytes [0-1] Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 8 (1.00x) (1) +Testing collisions (high 21-30 bits) - Worst is 27 bits: 268/255 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 8 (1.00x) (1) +Testing collisions (low 21-30 bits) - Worst is 24 bits: 2059/2037 (1.01x) +Testing distribution - Worst bias is the 15-bit window at bit 127 - 0.306% + + +Combination 64-bytes [0-last] Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 13 (1.63x) (6) +Testing collisions (high 21-30 bits) - Worst is 30 bits: 34/31 (1.06x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 6 (0.75x) +Testing collisions (low 21-30 bits) - Worst is 24 bits: 2085/2037 (1.02x) +Testing distribution - Worst bias is the 15-bit window at bit 197 - 0.200% + + +Combination 128-bytes [0-1] Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 14 (1.75x) (7) +Testing collisions (high 21-30 bits) - Worst is 30 bits: 38/31 (1.19x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 7 (0.88x) +Testing collisions (low 21-30 bits) - Worst is 29 bits: 79/63 (1.23x) +Testing distribution - Worst bias is the 15-bit window at bit 231 - 0.226% + + +Combination 128-bytes [0-last] Tests: +Keyset 'Combination' - up to 17 blocks from a set of 2 - 262142 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8.0, actual 10 (1.25x) (3) +Testing collisions (high 21-30 bits) - Worst is 30 bits: 35/31 (1.09x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 8.0, actual 6 (0.75x) +Testing collisions (low 21-30 bits) - Worst is 21 bits: 15828/15721 (1.01x) +Testing distribution - Worst bias is the 15-bit window at bit 220 - 0.225% + + +[[[ Keyset 'Window' Tests ]]] + +Keyset 'Window' - 32-bit key, 25-bit window - 32 tests, 33554432 keys per test +Window at 0 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 1 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 2 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 3 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 4 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 5 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 6 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 7 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 8 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 9 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 10 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 11 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 12 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 13 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 14 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 15 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 16 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 17 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 18 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 19 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 20 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 21 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 22 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 23 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 24 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 25 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 26 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 27 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 28 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 29 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 30 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 31 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Window at 32 - Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) + +[[[ Keyset 'Cyclic' Tests ]]] + +Keyset 'Cyclic' - 8 cycles of 32 bytes - 1000000 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 113 (0.97x) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 31/29 (1.07x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 103 (0.88x) +Testing collisions (low 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing distribution - Worst bias is the 17-bit window at bit 208 - 0.147% + +Keyset 'Cyclic' - 8 cycles of 33 bytes - 1000000 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 109 (0.94x) +Testing collisions (high 23-34 bits) - Worst is 31 bits: 247/232 (1.06x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 105 (0.90x) +Testing collisions (low 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing distribution - Worst bias is the 17-bit window at bit 105 - 0.125% + +Keyset 'Cyclic' - 8 cycles of 34 bytes - 1000000 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 122 (1.05x) (6) +Testing collisions (high 23-34 bits) - Worst is 32 bits: 122/116 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 122 (1.05x) (6) +Testing collisions (low 23-34 bits) - Worst is 34 bits: 31/29 (1.07x) +Testing distribution - Worst bias is the 17-bit window at bit 215 - 0.163% + +Keyset 'Cyclic' - 8 cycles of 35 bytes - 1000000 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 136 (1.17x) (20) +Testing collisions (high 23-34 bits) - Worst is 32 bits: 136/116 (1.17x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (low 23-34 bits) - Worst is 34 bits: 31/29 (1.07x) +Testing distribution - Worst bias is the 17-bit window at bit 241 - 0.189% + +Keyset 'Cyclic' - 8 cycles of 36 bytes - 1000000 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 142 (1.22x) (26) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 40/29 (1.37x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 131 (1.13x) (15) +Testing collisions (low 23-34 bits) - Worst is 34 bits: 38/29 (1.31x) +Testing distribution - Worst bias is the 17-bit window at bit 172 - 0.129% + +Keyset 'Cyclic' - 8 cycles of 40 bytes - 1000000 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 121 (1.04x) (5) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 129 (1.11x) (13) +Testing collisions (low 23-34 bits) - Worst is 34 bits: 40/29 (1.37x) +Testing distribution - Worst bias is the 17-bit window at bit 48 - 0.115% + + +[[[ Keyset 'TwoBytes' Tests ]]] + +Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 49.6, actual 39 (0.79x) +Testing collisions (high 23-33 bits) - Worst is 29 bits: 419/396 (1.06x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 49.6, actual 53 (1.07x) (4) +Testing collisions (low 23-33 bits) - Worst is 33 bits: 33/24 (1.33x) +Testing distribution - Worst bias is the 16-bit window at bit 49 - 0.155% + +Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 3483.1, actual 3433 (0.99x) (-50) +Testing collisions (high 26-39 bits) - Worst is 39 bits: 32/27 (1.18x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 3483.1, actual 3513 (1.01x) (30) +Testing collisions (low 26-39 bits) - Worst is 39 bits: 31/27 (1.14x) +Testing distribution - Worst bias is the 20-bit window at bit 143 - 0.069% + +Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 40289.5, actual 39975 (0.99x) (-314) +Testing collisions (high 27-42 bits) - Worst is 39 bits: 336/315 (1.07x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 40289.5, actual 40584 (1.01x) (295) +Testing collisions (low 27-42 bits) - Worst is 35 bits: 5109/5042 (1.01x) +Testing distribution - Worst bias is the 20-bit window at bit 225 - 0.025% + + +[[[ Keyset 'Text' Tests ]]] + +Keyset 'Text' - keys of form "FooXXXXBar" - 14776336 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 25101 (0.99x) (-288) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 783498/784335 (1.00x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 25350 (1.00x) (-39) +Testing collisions (low 27-42 bits) - Worst is 42 bits: 29/24 (1.17x) +Testing distribution - Worst bias is the 20-bit window at bit 129 - 0.026% + +Keyset 'Text' - keys of form "FooBarXXXX" - 14776336 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 25262 (0.99x) (-127) +Testing collisions (high 27-42 bits) - Worst is 39 bits: 203/198 (1.02x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 25708 (1.01x) (319) +Testing collisions (low 27-42 bits) - Worst is 42 bits: 28/24 (1.13x) +Testing distribution - Worst bias is the 20-bit window at bit 71 - 0.028% + +Keyset 'Text' - keys of form "XXXXFooBar" - 14776336 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 25381 (1.00x) (-8) +Testing collisions (high 27-42 bits) - Worst is 41 bits: 60/49 (1.21x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 25316 (1.00x) (-73) +Testing collisions (low 27-42 bits) - Worst is 42 bits: 27/24 (1.09x) +Testing distribution - Worst bias is the 20-bit window at bit 38 - 0.026% + +Keyset 'Words' - 4000000 random keys of len 6-16 from alnum charset +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1800 (0.97x) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 30/29 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1901 (1.02x) (39) +Testing collisions (low 25-38 bits) - Worst is 37 bits: 65/58 (1.12x) +Testing distribution - Worst bias is the 19-bit window at bit 215 - 0.049% + +Keyset 'Words' - 4000000 random keys of len 6-16 from password charset +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1866 (1.00x) (4) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 37/29 (1.27x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1783 (0.96x) +Testing collisions (low 25-38 bits) - Worst is 36 bits: 127/116 (1.09x) +Testing distribution - Worst bias is the 19-bit window at bit 136 - 0.060% + +Keyset 'Words' - 104334 dict words +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1.3, actual 1 (0.79x) +Testing collisions (high 20-28 bits) - Worst is 28 bits: 22/20 (1.09x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 1.3, actual 3 (2.37x) (2) ! +Testing collisions (low 20-28 bits) - Worst is 28 bits: 23/20 (1.13x) +Testing distribution - Worst bias is the 14-bit window at bit 116 - 0.537% + + +[[[ Keyset 'Zeroes' Tests ]]] + +Keyset 'Zeroes' - 204800 keys +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 4.9, actual 7 (1.43x) (3) +Testing collisions (high 21-29 bits) - Worst is 25 bits: 645/623 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 4.9, actual 7 (1.43x) (3) +Testing collisions (low 21-29 bits) - Worst is 29 bits: 46/39 (1.18x) +Testing distribution - Worst bias is the 15-bit window at bit 20 - 0.404% + + +[[[ Keyset 'Seed' Tests ]]] + +Keyset 'Seed' - 5000000 keys +Testing collisions (256-bit) - Expected 0.0, actual 4999999 (46316835694926476073504124557862456096537905457216409279206550696624128.00x) (4999999) !!!!! +Testing collisions (high 224-bit) - Expected 0.0, actual 4999999 (10783978666860255429871409330019367881244492125049328729325568.00x) (4999999) !!!!! +Testing collisions (high 160-bit) - Expected 0.0, actual 4999999 (584600654932361140827190469573650885378048.00x) (4999999) !!!!! +Testing collisions (high 128-bit) - Expected 0.0, actual 4999999 (136112946768375379225981996761088.00x) (4999999) !!!!! +Testing collisions (high 64-bit) - Expected 0.0, actual 4999999 (7378697629483.82x) (4999999) !!!!! +Testing collisions (high 32-bit) - Expected 2909.3, actual 4999999 (1718.65x) (4997090) !!!!! +Testing collisions (high 26-39 bits) - Worst is 39 bits: 4999999/22 (219902.99x) !!!!! +Testing collisions (low 224-bit) - Expected 0.0, actual 4999999 (10783978666860255429871409330019367881244492125049328729325568.00x) (4999999) !!!!! +Testing collisions (low 160-bit) - Expected 0.0, actual 4999999 (584600654932361140827190469573650885378048.00x) (4999999) !!!!! +Testing collisions (low 128-bit) - Expected 0.0, actual 4999999 (136112946768375379225981996761088.00x) (4999999) !!!!! +Testing collisions (low 64-bit) - Expected 0.0, actual 4999999 (7378697629483.82x) (4999999) !!!!! +Testing collisions (low 32-bit) - Expected 2909.3, actual 4999999 (1718.65x) (4997090) !!!!! +Testing collisions (low 26-39 bits) - Worst is 39 bits: 4999999/22 (219902.99x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 0 - 100.000% !!!!! + +*********FAIL********* + +[[[ Keyset 'PerlinNoise' Tests ]]] + +Testing 16777216 coordinates (L2) : +Testing collisions (256-bit) - Expected 0.0, actual 16773120 (13800123522799194189823133349153486935305489277234488780983902941478912.00x) (16773120) !!!!! +Testing collisions (high 224-bit) - Expected 0.0, actual 16773120 (3213091642316243189811504760094333192171875684809519159836672.00x) (16773120) !!!!! +Testing collisions (high 160-bit) - Expected 0.0, actual 16773120 (174182046949714410824533318127273054830592.00x) (16773120) !!!!! +Testing collisions (high 128-bit) - Expected 0.0, actual 16773120 (40554918104250545339783029194752.00x) (16773120) !!!!! +Testing collisions (high 64-bit) - Expected 0.0, actual 16773120 (2198486515680.01x) (16773120) !!!!! +Testing collisions (high 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! +Testing collisions (low 224-bit) - Expected 0.0, actual 16773120 (3213091642316243189811504760094333192171875684809519159836672.00x) (16773120) !!!!! +Testing collisions (low 160-bit) - Expected 0.0, actual 16773120 (174182046949714410824533318127273054830592.00x) (16773120) !!!!! +Testing collisions (low 128-bit) - Expected 0.0, actual 16773120 (40554918104250545339783029194752.00x) (16773120) !!!!! +Testing collisions (low 64-bit) - Expected 0.0, actual 16773120 (2198486515680.01x) (16773120) !!!!! +Testing collisions (low 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! + +Testing AV variant, 128 count with 4 spacing, 4-12: +Testing collisions (256-bit) - Expected 0.0, actual 3072384 (74193725587468546434785007236156850278410339946299217118718331029815296.00x) (3072384) +Testing collisions (high 224-bit) - Expected 0.0, actual 3072384 (17274572883608878225736554534211021447184109116508443168997376.00x) (3072384) !!!!! +Testing collisions (high 160-bit) - Expected 0.0, actual 3072384 (936456472458396535070204948898200982388736.00x) (3072384) !!!!! +Testing collisions (high 128-bit) - Expected 0.0, actual 3072384 (218035763236320702142595534422016.00x) (3072384) !!!!! +Testing collisions (high 64-bit) - Expected 0.0, actual 3072384 (11819742409017.70x) (3072384) !!!!! +Testing collisions (high 32-bit) - Expected 1116.2, actual 3072384 (2752.66x) (3071268) !!!!! +Testing collisions (high 25-37 bits) - Worst is 37 bits: 3072384/34 (88064.60x) !!!!! +Testing collisions (low 224-bit) - Expected 0.0, actual 3072384 (17274572883608878225736554534211021447184109116508443168997376.00x) (3072384) !!!!! +Testing collisions (low 160-bit) - Expected 0.0, actual 3072384 (936456472458396535070204948898200982388736.00x) (3072384) !!!!! +Testing collisions (low 128-bit) - Expected 0.0, actual 3072384 (218035763236320702142595534422016.00x) (3072384) !!!!! +Testing collisions (low 64-bit) - Expected 0.0, actual 3072384 (11819742409017.70x) (3072384) !!!!! +Testing collisions (low 32-bit) - Expected 1116.2, actual 3072384 (2752.66x) (3071268) !!!!! +Testing collisions (low 25-37 bits) - Worst is 37 bits: 3072384/34 (88064.60x) !!!!! + +*********FAIL********* + +[[[ Diff 'Differential' Tests ]]] + +Testing 8303632 up-to-5-bit differentials in 64-bit keys -> 256 bit hashes. +100 reps, 830363200 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 11017632 up-to-4-bit differentials in 128-bit keys -> 256 bit hashes. +100 reps, 1101763200 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 2796416 up-to-3-bit differentials in 256-bit keys -> 256 bit hashes. +100 reps, 279641600 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + + +[[[ DiffDist 'Differential Distribution' Tests ]]] + +Testing bit 0 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 521 (1.02x) (10) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 45/31 (1.41x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 487 (0.95x) +Testing collisions (low 24-36 bits) - Worst is 29 bits: 4121/4090 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 6 - 0.076% + +Testing bit 1 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 540 (1.05x) (29) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 75/63 (1.17x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 481 (0.94x) +Testing collisions (low 24-36 bits) - Worst is 28 bits: 8205/8170 (1.00x) +Testing distribution - Worst bias is the 18-bit window at bit 195 - 0.095% + +Testing bit 2 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 525 (1.03x) (14) +Testing collisions (high 24-36 bits) - Worst is 32 bits: 525/511 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 538 (1.05x) (27) +Testing collisions (low 24-36 bits) - Worst is 32 bits: 538/511 (1.05x) +Testing distribution - Worst bias is the 18-bit window at bit 168 - 0.111% + +Testing bit 3 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 529 (1.03x) (18) +Testing collisions (high 24-36 bits) - Worst is 32 bits: 529/511 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 510 (1.00x) (-1) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 36/31 (1.13x) +Testing distribution - Worst bias is the 18-bit window at bit 185 - 0.108% + +Testing bit 4 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 500 (0.98x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 35/31 (1.09x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 552 (1.08x) (41) +Testing collisions (low 24-36 bits) - Worst is 32 bits: 552/511 (1.08x) +Testing distribution - Worst bias is the 18-bit window at bit 135 - 0.117% + +Testing bit 5 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 508 (0.99x) (-3) +Testing collisions (high 24-36 bits) - Worst is 33 bits: 263/255 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 537 (1.05x) (26) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 37/31 (1.16x) +Testing distribution - Worst bias is the 18-bit window at bit 49 - 0.088% + +Testing bit 6 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 551 (1.08x) (40) +Testing collisions (high 24-36 bits) - Worst is 34 bits: 139/127 (1.09x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 511 (1.00x) +Testing collisions (low 24-36 bits) - Worst is 33 bits: 268/255 (1.05x) +Testing distribution - Worst bias is the 18-bit window at bit 197 - 0.099% + +Testing bit 7 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 516 (1.01x) (5) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 65/63 (1.02x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 488 (0.95x) +Testing collisions (low 24-36 bits) - Worst is 26 bits: 32526/32429 (1.00x) +Testing distribution - Worst bias is the 18-bit window at bit 112 - 0.106% + +Testing bit 8 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 479 (0.94x) +Testing collisions (high 24-36 bits) - Worst is 26 bits: 32381/32429 (1.00x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 525 (1.03x) (14) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 43/31 (1.34x) +Testing distribution - Worst bias is the 18-bit window at bit 178 - 0.085% + +Testing bit 9 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 543 (1.06x) (32) +Testing collisions (high 24-36 bits) - Worst is 34 bits: 151/127 (1.18x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 504 (0.98x) (-7) +Testing collisions (low 24-36 bits) - Worst is 34 bits: 140/127 (1.09x) +Testing distribution - Worst bias is the 18-bit window at bit 113 - 0.102% + +Testing bit 10 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 497 (0.97x) +Testing collisions (high 24-36 bits) - Worst is 28 bits: 8260/8170 (1.01x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 518 (1.01x) (7) +Testing collisions (low 24-36 bits) - Worst is 31 bits: 1065/1023 (1.04x) +Testing distribution - Worst bias is the 18-bit window at bit 22 - 0.080% + +Testing bit 11 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 520 (1.02x) (9) +Testing collisions (high 24-36 bits) - Worst is 32 bits: 520/511 (1.02x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 479 (0.94x) +Testing collisions (low 24-36 bits) - Worst is 27 bits: 16427/16298 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 39 - 0.075% + +Testing bit 12 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 491 (0.96x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 36/31 (1.13x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 551 (1.08x) (40) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 40/31 (1.25x) +Testing distribution - Worst bias is the 18-bit window at bit 51 - 0.108% + +Testing bit 13 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 554 (1.08x) (43) +Testing collisions (high 24-36 bits) - Worst is 34 bits: 150/127 (1.17x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 522 (1.02x) (11) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 37/31 (1.16x) +Testing distribution - Worst bias is the 18-bit window at bit 213 - 0.104% + +Testing bit 14 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 522 (1.02x) (11) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 35/31 (1.09x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 543 (1.06x) (32) +Testing collisions (low 24-36 bits) - Worst is 34 bits: 150/127 (1.17x) +Testing distribution - Worst bias is the 18-bit window at bit 178 - 0.107% + +Testing bit 15 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 537 (1.05x) (26) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 74/63 (1.16x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 511 (1.00x) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 41/31 (1.28x) +Testing distribution - Worst bias is the 18-bit window at bit 6 - 0.101% + +Testing bit 16 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 541 (1.06x) (30) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 70/63 (1.09x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 515 (1.01x) (4) +Testing collisions (low 24-36 bits) - Worst is 35 bits: 68/63 (1.06x) +Testing distribution - Worst bias is the 18-bit window at bit 209 - 0.104% + +Testing bit 17 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 501 (0.98x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 37/31 (1.16x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 469 (0.92x) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 38/31 (1.19x) +Testing distribution - Worst bias is the 18-bit window at bit 21 - 0.078% + +Testing bit 18 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 491 (0.96x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 37/31 (1.16x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 510 (1.00x) (-1) +Testing collisions (low 24-36 bits) - Worst is 31 bits: 1064/1023 (1.04x) +Testing distribution - Worst bias is the 18-bit window at bit 113 - 0.084% + +Testing bit 19 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 511 (1.00x) +Testing collisions (high 24-36 bits) - Worst is 34 bits: 135/127 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 472 (0.92x) +Testing collisions (low 24-36 bits) - Worst is 25 bits: 64404/64191 (1.00x) +Testing distribution - Worst bias is the 18-bit window at bit 245 - 0.112% + +Testing bit 20 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 506 (0.99x) (-5) +Testing collisions (high 24-36 bits) - Worst is 33 bits: 269/255 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 497 (0.97x) +Testing collisions (low 24-36 bits) - Worst is 29 bits: 4148/4090 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 90 - 0.085% + +Testing bit 21 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 491 (0.96x) +Testing collisions (high 24-36 bits) - Worst is 34 bits: 132/127 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 516 (1.01x) (5) +Testing collisions (low 24-36 bits) - Worst is 35 bits: 83/63 (1.30x) +Testing distribution - Worst bias is the 18-bit window at bit 205 - 0.114% + +Testing bit 22 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 497 (0.97x) +Testing collisions (high 24-36 bits) - Worst is 24 bits: 125860/125777 (1.00x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 508 (0.99x) (-3) +Testing collisions (low 24-36 bits) - Worst is 34 bits: 146/127 (1.14x) +Testing distribution - Worst bias is the 18-bit window at bit 177 - 0.078% + +Testing bit 23 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 574 (1.12x) (63) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 81/63 (1.27x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 510 (1.00x) (-1) +Testing collisions (low 24-36 bits) - Worst is 35 bits: 67/63 (1.05x) +Testing distribution - Worst bias is the 18-bit window at bit 222 - 0.103% + +Testing bit 24 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 507 (0.99x) (-4) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 34/31 (1.06x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 535 (1.05x) (24) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 34/31 (1.06x) +Testing distribution - Worst bias is the 18-bit window at bit 133 - 0.079% + +Testing bit 25 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 501 (0.98x) +Testing collisions (high 24-36 bits) - Worst is 29 bits: 4153/4090 (1.02x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 489 (0.96x) +Testing collisions (low 24-36 bits) - Worst is 27 bits: 16428/16298 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 172 - 0.110% + +Testing bit 26 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 497 (0.97x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 35/31 (1.09x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 531 (1.04x) (20) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 36/31 (1.13x) +Testing distribution - Worst bias is the 18-bit window at bit 164 - 0.120% + +Testing bit 27 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 480 (0.94x) +Testing collisions (high 24-36 bits) - Worst is 30 bits: 2065/2046 (1.01x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 484 (0.95x) +Testing collisions (low 24-36 bits) - Worst is 28 bits: 8304/8170 (1.02x) +Testing distribution - Worst bias is the 18-bit window at bit 55 - 0.102% + +Testing bit 28 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 524 (1.02x) (13) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 33/31 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 485 (0.95x) +Testing collisions (low 24-36 bits) - Worst is 35 bits: 66/63 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 84 - 0.087% + +Testing bit 29 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 546 (1.07x) (35) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 43/31 (1.34x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 483 (0.94x) +Testing collisions (low 24-36 bits) - Worst is 27 bits: 16422/16298 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 156 - 0.081% + +Testing bit 30 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 524 (1.02x) (13) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 67/63 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 513 (1.00x) (2) +Testing collisions (low 24-36 bits) - Worst is 33 bits: 259/255 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 242 - 0.111% + +Testing bit 31 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 530 (1.04x) (19) +Testing collisions (high 24-36 bits) - Worst is 33 bits: 269/255 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 549 (1.07x) (38) +Testing collisions (low 24-36 bits) - Worst is 32 bits: 549/511 (1.07x) +Testing distribution - Worst bias is the 18-bit window at bit 87 - 0.096% + +Testing bit 32 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 532 (1.04x) (21) +Testing collisions (high 24-36 bits) - Worst is 32 bits: 532/511 (1.04x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 511 (1.00x) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 39/31 (1.22x) +Testing distribution - Worst bias is the 18-bit window at bit 230 - 0.091% + +Testing bit 33 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 477 (0.93x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 38/31 (1.19x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 523 (1.02x) (12) +Testing collisions (low 24-36 bits) - Worst is 35 bits: 76/63 (1.19x) +Testing distribution - Worst bias is the 18-bit window at bit 111 - 0.098% + +Testing bit 34 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 505 (0.99x) (-6) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 69/63 (1.08x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 536 (1.05x) (25) +Testing collisions (low 24-36 bits) - Worst is 32 bits: 536/511 (1.05x) +Testing distribution - Worst bias is the 18-bit window at bit 22 - 0.089% + +Testing bit 35 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 515 (1.01x) (4) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 73/63 (1.14x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 507 (0.99x) (-4) +Testing collisions (low 24-36 bits) - Worst is 29 bits: 4127/4090 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 206 - 0.127% + +Testing bit 36 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 525 (1.03x) (14) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 76/63 (1.19x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 489 (0.96x) +Testing collisions (low 24-36 bits) - Worst is 25 bits: 64549/64191 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 162 - 0.086% + +Testing bit 37 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 497 (0.97x) +Testing collisions (high 24-36 bits) - Worst is 31 bits: 1035/1023 (1.01x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 487 (0.95x) +Testing collisions (low 24-36 bits) - Worst is 30 bits: 2118/2046 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 247 - 0.085% + +Testing bit 38 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 528 (1.03x) (17) +Testing collisions (high 24-36 bits) - Worst is 32 bits: 528/511 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 464 (0.91x) +Testing collisions (low 24-36 bits) - Worst is 30 bits: 2073/2046 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 65 - 0.137% + +Testing bit 39 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 523 (1.02x) (12) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 40/31 (1.25x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 523 (1.02x) (12) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 46/31 (1.44x) +Testing distribution - Worst bias is the 18-bit window at bit 89 - 0.094% + +Testing bit 40 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 504 (0.98x) (-7) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 38/31 (1.19x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 516 (1.01x) (5) +Testing collisions (low 24-36 bits) - Worst is 33 bits: 264/255 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 169 - 0.101% + +Testing bit 41 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 493 (0.96x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 34/31 (1.06x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 490 (0.96x) +Testing collisions (low 24-36 bits) - Worst is 26 bits: 32626/32429 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 183 - 0.097% + +Testing bit 42 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 511 (1.00x) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 71/63 (1.11x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 562 (1.10x) (51) +Testing collisions (low 24-36 bits) - Worst is 33 bits: 291/255 (1.14x) +Testing distribution - Worst bias is the 18-bit window at bit 62 - 0.088% + +Testing bit 43 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 535 (1.05x) (24) +Testing collisions (high 24-36 bits) - Worst is 32 bits: 535/511 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 522 (1.02x) (11) +Testing collisions (low 24-36 bits) - Worst is 35 bits: 69/63 (1.08x) +Testing distribution - Worst bias is the 18-bit window at bit 189 - 0.092% + +Testing bit 44 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 505 (0.99x) (-6) +Testing collisions (high 24-36 bits) - Worst is 25 bits: 64177/64191 (1.00x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 512 (1.00x) (1) +Testing collisions (low 24-36 bits) - Worst is 33 bits: 261/255 (1.02x) +Testing distribution - Worst bias is the 18-bit window at bit 252 - 0.104% + +Testing bit 45 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 504 (0.98x) (-7) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 36/31 (1.13x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 518 (1.01x) (7) +Testing collisions (low 24-36 bits) - Worst is 31 bits: 1061/1023 (1.04x) +Testing distribution - Worst bias is the 18-bit window at bit 242 - 0.095% + +Testing bit 46 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 538 (1.05x) (27) +Testing collisions (high 24-36 bits) - Worst is 32 bits: 538/511 (1.05x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 508 (0.99x) (-3) +Testing collisions (low 24-36 bits) - Worst is 33 bits: 277/255 (1.08x) +Testing distribution - Worst bias is the 18-bit window at bit 179 - 0.104% + +Testing bit 47 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 517 (1.01x) (6) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 38/31 (1.19x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 497 (0.97x) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 36/31 (1.13x) +Testing distribution - Worst bias is the 18-bit window at bit 178 - 0.071% + +Testing bit 48 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 506 (0.99x) (-5) +Testing collisions (high 24-36 bits) - Worst is 30 bits: 2104/2046 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 529 (1.03x) (18) +Testing collisions (low 24-36 bits) - Worst is 34 bits: 140/127 (1.09x) +Testing distribution - Worst bias is the 18-bit window at bit 48 - 0.084% + +Testing bit 49 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 523 (1.02x) (12) +Testing collisions (high 24-36 bits) - Worst is 31 bits: 1047/1023 (1.02x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 516 (1.01x) (5) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 37/31 (1.16x) +Testing distribution - Worst bias is the 18-bit window at bit 143 - 0.081% + +Testing bit 50 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 518 (1.01x) (7) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 37/31 (1.16x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 522 (1.02x) (11) +Testing collisions (low 24-36 bits) - Worst is 34 bits: 141/127 (1.10x) +Testing distribution - Worst bias is the 18-bit window at bit 153 - 0.104% + +Testing bit 51 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 464 (0.91x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 33/31 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 486 (0.95x) +Testing collisions (low 24-36 bits) - Worst is 35 bits: 68/63 (1.06x) +Testing distribution - Worst bias is the 18-bit window at bit 226 - 0.097% + +Testing bit 52 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 490 (0.96x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 33/31 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 515 (1.01x) (4) +Testing collisions (low 24-36 bits) - Worst is 34 bits: 131/127 (1.02x) +Testing distribution - Worst bias is the 18-bit window at bit 130 - 0.109% + +Testing bit 53 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 514 (1.00x) (3) +Testing collisions (high 24-36 bits) - Worst is 33 bits: 259/255 (1.01x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 514 (1.00x) (3) +Testing collisions (low 24-36 bits) - Worst is 34 bits: 131/127 (1.02x) +Testing distribution - Worst bias is the 18-bit window at bit 44 - 0.085% + +Testing bit 54 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 509 (0.99x) (-2) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 37/31 (1.16x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 533 (1.04x) (22) +Testing collisions (low 24-36 bits) - Worst is 34 bits: 150/127 (1.17x) +Testing distribution - Worst bias is the 18-bit window at bit 228 - 0.093% + +Testing bit 55 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 534 (1.04x) (23) +Testing collisions (high 24-36 bits) - Worst is 35 bits: 82/63 (1.28x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 549 (1.07x) (38) +Testing collisions (low 24-36 bits) - Worst is 35 bits: 72/63 (1.13x) +Testing distribution - Worst bias is the 18-bit window at bit 193 - 0.081% + +Testing bit 56 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 509 (0.99x) (-2) +Testing collisions (high 24-36 bits) - Worst is 34 bits: 149/127 (1.16x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 525 (1.03x) (14) +Testing collisions (low 24-36 bits) - Worst is 30 bits: 2112/2046 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 237 - 0.087% + +Testing bit 57 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 528 (1.03x) (17) +Testing collisions (high 24-36 bits) - Worst is 31 bits: 1068/1023 (1.04x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 502 (0.98x) (-9) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 33/31 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 13 - 0.096% + +Testing bit 58 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 471 (0.92x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 33/31 (1.03x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 516 (1.01x) (5) +Testing collisions (low 24-36 bits) - Worst is 29 bits: 4194/4090 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 94 - 0.117% + +Testing bit 59 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 502 (0.98x) (-9) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 38/31 (1.19x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 493 (0.96x) +Testing collisions (low 24-36 bits) - Worst is 28 bits: 8223/8170 (1.01x) +Testing distribution - Worst bias is the 18-bit window at bit 181 - 0.097% + +Testing bit 60 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 469 (0.92x) +Testing collisions (high 24-36 bits) - Worst is 27 bits: 16389/16298 (1.01x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 523 (1.02x) (12) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 38/31 (1.19x) +Testing distribution - Worst bias is the 18-bit window at bit 52 - 0.108% + +Testing bit 61 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 495 (0.97x) +Testing collisions (high 24-36 bits) - Worst is 26 bits: 32573/32429 (1.00x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 498 (0.97x) +Testing collisions (low 24-36 bits) - Worst is 33 bits: 264/255 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 47 - 0.082% + +Testing bit 62 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 539 (1.05x) (28) +Testing collisions (high 24-36 bits) - Worst is 31 bits: 1106/1023 (1.08x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 512 (1.00x) (1) +Testing collisions (low 24-36 bits) - Worst is 33 bits: 265/255 (1.04x) +Testing distribution - Worst bias is the 18-bit window at bit 97 - 0.100% + +Testing bit 63 +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 511.9, actual 518 (1.01x) (7) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 44/31 (1.38x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 511.9, actual 508 (0.99x) (-3) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 33/31 (1.03x) +Testing distribution - Worst bias is the 18-bit window at bit 137 - 0.100% + + +[[[ MomentChi2 Tests ]]] + +Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 6 ... +Target values to approximate : 38918200.000000 - 820900.000000 +8 threads starting... done +Popcount 1 stats : 38919688.522725 - 820994.567404 +Popcount 0 stats : 38918581.997444 - 820964.399201 +MomentChi2 for bits 1 : 1.34948 +MomentChi2 for bits 0 : 0.0888758 + +Derivative stats (transition from 2 consecutive values) : +Popcount 1 stats : 38918297.317042 - 820922.211114 +Popcount 0 stats : 38919847.216441 - 820923.967974 +MomentChi2 for deriv b1 : 0.00576835 +MomentChi2 for deriv b0 : 1.65263 + + Great + + +[[[ Prng Tests ]]] + +Generating 33554432 random numbers : +Testing collisions (256-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 130731.3, actual 130522 (1.00x) (-209) +Testing collisions (high 28-44 bits) - Worst is 44 bits: 36/31 (1.13x) +Testing collisions (low 224-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 160-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 128-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (low 32-bit) - Expected 130731.3, actual 130588 (1.00x) (-143) +Testing collisions (low 28-44 bits) - Worst is 39 bits: 1045/1023 (1.02x) + +[[[ BadSeeds Tests ]]] + +Testing 0 internal secrets: +0x0 PASS + + +Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001 +Verification value is 0x00000001 - Testing took 1522.491253 seconds +------------------------------------------------------------------------------- +[[[ BadSeeds Tests ]]] + +Testing 0 internal secrets: +0x0 PASS +Testing the first 0xffffffff seeds ... +8 threads starting... +at 0 at 20000000 at 40000000 at 60000000 at 80000000 at a0000000 at c0000000 at e0000000 0xe1ffffff 0xc1ffffff 0x01ffffff 0x21ffffff 0xa1ffffff 0x41ffffff 0x81ffffff 0x61ffffff 0xc3ffffff 0x23ffffff 0x83ffffff 0x03ffffff 0xe3ffffff 0xa3ffffff 0x43ffffff 0x63ffffff 0xc5ffffff 0xe5ffffff 0x25ffffff 0x85ffffff 0x05ffffff 0x45ffffff 0xa5ffffff 0x65ffffff 0xe7ffffff 0xc7ffffff 0x27ffffff 0x07ffffff 0x47ffffff 0x87ffffff 0xa7ffffff 0x67ffffff 0x29ffffff 0x09ffffff 0xc9ffffff 0x49ffffff 0xa9ffffff 0xe9ffffff 0x69ffffff 0x89ffffff 0xcbffffff 0x2bffffff 0x4bffffff 0x0bffffff 0xabffffff 0xebffffff 0x8bffffff 0x6bffffff 0xcdffffff 0x0dffffff 0x4dffffff 0xedffffff 0xadffffff 0x2dffffff 0x6dffffff 0x8dffffff 0x4fffffff 0x8fffffff 0xafffffff 0xefffffff 0xcfffffff 0x0fffffff 0x2fffffff 0x6fffffff 0x51ffffff 0xb1ffffff 0x91ffffff 0xd1ffffff 0xf1ffffff 0x71ffffff 0x31ffffff 0x11ffffff 0x53ffffff 0xb3ffffff 0xf3ffffff 0x93ffffff 0xd3ffffff 0x73ffffff 0x33ffffff 0x13ffffff 0x55ffffff 0xb5ffffff 0x35ffffff 0xd5ffffff 0xf5ffffff 0x95ffffff 0x15ffffff 0x75ffffff 0x57ffffff 0xd7ffffff 0x97ffffff 0xb7ffffff 0x37ffffff 0x77ffffff 0x17ffffff 0xf7ffffff 0x59ffffff 0xd9ffffff 0xb9ffffff 0x99ffffff 0xf9ffffff 0x19ffffff 0x39ffffff 0x79ffffff 0x5bffffff 0xdbffffff 0x3bffffff 0xbbffffff 0x9bffffff 0x1bffffff 0xfbffffff 0x7bffffff 0x5dffffff 0xbdffffff 0x1dffffff 0xddffffff 0x3dffffff 0x9dffffff 0xfdffffff 0x7dffffff 0x5fffffff 0xdfffffff 0xbfffffff 0x9fffffff 0x1fffffff 0x3fffffff 0xffffffff 0x7fffffff All 8 threads ended +PASS + + diff --git a/doc/Crap8.txt b/doc/Crap8.txt index f1505ac4..28d2a889 100644 --- a/doc/Crap8.txt +++ b/doc/Crap8.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x16c2cc3b0e50 - 0x16c2cc3b0e08). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.063 bytes/cycle - 3040.93 MiB/sec @ 3 ghz -Alignment 6 - 1.063 bytes/cycle - 3041.15 MiB/sec @ 3 ghz -Alignment 5 - 1.063 bytes/cycle - 3040.90 MiB/sec @ 3 ghz -Alignment 4 - 1.063 bytes/cycle - 3040.71 MiB/sec @ 3 ghz -Alignment 3 - 1.063 bytes/cycle - 3041.47 MiB/sec @ 3 ghz -Alignment 2 - 1.063 bytes/cycle - 3041.18 MiB/sec @ 3 ghz -Alignment 1 - 1.063 bytes/cycle - 3041.31 MiB/sec @ 3 ghz -Alignment 0 - 1.063 bytes/cycle - 3041.49 MiB/sec @ 3 ghz -Average - 1.063 bytes/cycle - 3041.14 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 25.00 cycles/hash -Small key speed test - 2-byte keys - 25.00 cycles/hash -Small key speed test - 3-byte keys - 25.00 cycles/hash -Small key speed test - 4-byte keys - 24.00 cycles/hash -Small key speed test - 5-byte keys - 28.00 cycles/hash -Small key speed test - 6-byte keys - 28.00 cycles/hash -Small key speed test - 7-byte keys - 28.00 cycles/hash +Alignment 7 - 1.078 bytes/cycle - 3083.14 MiB/sec @ 3 ghz +Alignment 6 - 1.078 bytes/cycle - 3083.28 MiB/sec @ 3 ghz +Alignment 5 - 1.077 bytes/cycle - 3082.72 MiB/sec @ 3 ghz +Alignment 4 - 1.078 bytes/cycle - 3083.29 MiB/sec @ 3 ghz +Alignment 3 - 1.078 bytes/cycle - 3083.22 MiB/sec @ 3 ghz +Alignment 2 - 1.075 bytes/cycle - 3076.61 MiB/sec @ 3 ghz +Alignment 1 - 1.074 bytes/cycle - 3072.41 MiB/sec @ 3 ghz +Alignment 0 - 1.078 bytes/cycle - 3083.63 MiB/sec @ 3 ghz +Average - 1.077 bytes/cycle - 3081.04 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 24.78 cycles/hash +Small key speed test - 2-byte keys - 24.81 cycles/hash +Small key speed test - 3-byte keys - 24.81 cycles/hash +Small key speed test - 4-byte keys - 23.87 cycles/hash +Small key speed test - 5-byte keys - 27.00 cycles/hash +Small key speed test - 6-byte keys - 27.00 cycles/hash +Small key speed test - 7-byte keys - 27.00 cycles/hash Small key speed test - 8-byte keys - 28.00 cycles/hash Small key speed test - 9-byte keys - 32.00 cycles/hash Small key speed test - 10-byte keys - 32.00 cycles/hash Small key speed test - 11-byte keys - 32.00 cycles/hash Small key speed test - 12-byte keys - 32.00 cycles/hash -Small key speed test - 13-byte keys - 36.00 cycles/hash -Small key speed test - 14-byte keys - 36.00 cycles/hash -Small key speed test - 15-byte keys - 36.00 cycles/hash -Small key speed test - 16-byte keys - 36.00 cycles/hash -Small key speed test - 17-byte keys - 39.95 cycles/hash -Small key speed test - 18-byte keys - 39.93 cycles/hash -Small key speed test - 19-byte keys - 39.92 cycles/hash -Small key speed test - 20-byte keys - 39.54 cycles/hash -Small key speed test - 21-byte keys - 43.00 cycles/hash -Small key speed test - 22-byte keys - 43.00 cycles/hash -Small key speed test - 23-byte keys - 43.00 cycles/hash -Small key speed test - 24-byte keys - 43.00 cycles/hash -Small key speed test - 25-byte keys - 47.33 cycles/hash -Small key speed test - 26-byte keys - 47.20 cycles/hash -Small key speed test - 27-byte keys - 47.23 cycles/hash -Small key speed test - 28-byte keys - 47.00 cycles/hash -Small key speed test - 29-byte keys - 50.49 cycles/hash -Small key speed test - 30-byte keys - 50.52 cycles/hash -Small key speed test - 31-byte keys - 50.52 cycles/hash -Average 37.246 cycles/hash +Small key speed test - 13-byte keys - 35.00 cycles/hash +Small key speed test - 14-byte keys - 35.00 cycles/hash +Small key speed test - 15-byte keys - 35.00 cycles/hash +Small key speed test - 16-byte keys - 35.87 cycles/hash +Small key speed test - 17-byte keys - 39.00 cycles/hash +Small key speed test - 18-byte keys - 39.00 cycles/hash +Small key speed test - 19-byte keys - 39.00 cycles/hash +Small key speed test - 20-byte keys - 39.00 cycles/hash +Small key speed test - 21-byte keys - 42.75 cycles/hash +Small key speed test - 22-byte keys - 42.67 cycles/hash +Small key speed test - 23-byte keys - 42.72 cycles/hash +Small key speed test - 24-byte keys - 42.00 cycles/hash +Small key speed test - 25-byte keys - 46.91 cycles/hash +Small key speed test - 26-byte keys - 46.86 cycles/hash +Small key speed test - 27-byte keys - 46.88 cycles/hash +Small key speed test - 28-byte keys - 46.00 cycles/hash +Small key speed test - 29-byte keys - 49.99 cycles/hash +Small key speed test - 30-byte keys - 49.99 cycles/hash +Small key speed test - 31-byte keys - 49.99 cycles/hash +Small key speed test - 32-byte keys - 49.98 cycles/hash +Average 37.152 cycles/hash +Average, weighted by key length freq. 37.144 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 33.419 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/FNV128.txt b/doc/FNV128.txt index 8100dab5..716d13b3 100644 --- a/doc/FNV128.txt +++ b/doc/FNV128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x144d544a6918 - 0x144d544a68ac). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.136 bytes/cycle - 390.16 MiB/sec @ 3 ghz -Alignment 6 - 0.136 bytes/cycle - 390.19 MiB/sec @ 3 ghz -Alignment 5 - 0.136 bytes/cycle - 389.59 MiB/sec @ 3 ghz -Alignment 4 - 0.136 bytes/cycle - 389.91 MiB/sec @ 3 ghz -Alignment 3 - 0.136 bytes/cycle - 390.23 MiB/sec @ 3 ghz -Alignment 2 - 0.136 bytes/cycle - 390.05 MiB/sec @ 3 ghz -Alignment 1 - 0.137 bytes/cycle - 390.62 MiB/sec @ 3 ghz -Alignment 0 - 0.136 bytes/cycle - 390.37 MiB/sec @ 3 ghz -Average - 0.136 bytes/cycle - 390.14 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 19.00 cycles/hash -Small key speed test - 2-byte keys - 27.91 cycles/hash -Small key speed test - 3-byte keys - 36.00 cycles/hash -Small key speed test - 4-byte keys - 43.00 cycles/hash -Small key speed test - 5-byte keys - 51.99 cycles/hash -Small key speed test - 6-byte keys - 58.99 cycles/hash -Small key speed test - 7-byte keys - 66.27 cycles/hash -Small key speed test - 8-byte keys - 74.61 cycles/hash -Small key speed test - 9-byte keys - 81.00 cycles/hash -Small key speed test - 10-byte keys - 89.00 cycles/hash -Small key speed test - 11-byte keys - 94.59 cycles/hash -Small key speed test - 12-byte keys - 104.63 cycles/hash -Small key speed test - 13-byte keys - 113.30 cycles/hash -Small key speed test - 14-byte keys - 121.52 cycles/hash -Small key speed test - 15-byte keys - 129.58 cycles/hash -Small key speed test - 16-byte keys - 133.64 cycles/hash -Small key speed test - 17-byte keys - 145.43 cycles/hash -Small key speed test - 18-byte keys - 148.58 cycles/hash -Small key speed test - 19-byte keys - 155.20 cycles/hash -Small key speed test - 20-byte keys - 169.54 cycles/hash -Small key speed test - 21-byte keys - 176.14 cycles/hash -Small key speed test - 22-byte keys - 184.56 cycles/hash -Small key speed test - 23-byte keys - 192.50 cycles/hash -Small key speed test - 24-byte keys - 200.53 cycles/hash -Small key speed test - 25-byte keys - 207.53 cycles/hash -Small key speed test - 26-byte keys - 215.87 cycles/hash -Small key speed test - 27-byte keys - 223.58 cycles/hash -Small key speed test - 28-byte keys - 230.63 cycles/hash -Small key speed test - 29-byte keys - 242.96 cycles/hash -Small key speed test - 30-byte keys - 236.46 cycles/hash -Small key speed test - 31-byte keys - 254.50 cycles/hash -Average 136.421 cycles/hash +Alignment 7 - 0.143 bytes/cycle - 408.56 MiB/sec @ 3 ghz +Alignment 6 - 0.143 bytes/cycle - 408.55 MiB/sec @ 3 ghz +Alignment 5 - 0.143 bytes/cycle - 408.54 MiB/sec @ 3 ghz +Alignment 4 - 0.143 bytes/cycle - 408.68 MiB/sec @ 3 ghz +Alignment 3 - 0.143 bytes/cycle - 408.52 MiB/sec @ 3 ghz +Alignment 2 - 0.143 bytes/cycle - 408.53 MiB/sec @ 3 ghz +Alignment 1 - 0.143 bytes/cycle - 408.67 MiB/sec @ 3 ghz +Alignment 0 - 0.143 bytes/cycle - 408.69 MiB/sec @ 3 ghz +Average - 0.143 bytes/cycle - 408.59 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 16.98 cycles/hash +Small key speed test - 2-byte keys - 26.99 cycles/hash +Small key speed test - 3-byte keys - 34.41 cycles/hash +Small key speed test - 4-byte keys - 40.00 cycles/hash +Small key speed test - 5-byte keys - 47.00 cycles/hash +Small key speed test - 6-byte keys - 54.00 cycles/hash +Small key speed test - 7-byte keys - 61.00 cycles/hash +Small key speed test - 8-byte keys - 68.12 cycles/hash +Small key speed test - 9-byte keys - 75.00 cycles/hash +Small key speed test - 10-byte keys - 82.00 cycles/hash +Small key speed test - 11-byte keys - 89.12 cycles/hash +Small key speed test - 12-byte keys - 96.85 cycles/hash +Small key speed test - 13-byte keys - 103.00 cycles/hash +Small key speed test - 14-byte keys - 110.00 cycles/hash +Small key speed test - 15-byte keys - 117.20 cycles/hash +Small key speed test - 16-byte keys - 124.00 cycles/hash +Small key speed test - 17-byte keys - 131.00 cycles/hash +Small key speed test - 18-byte keys - 138.12 cycles/hash +Small key speed test - 19-byte keys - 146.00 cycles/hash +Small key speed test - 20-byte keys - 152.15 cycles/hash +Small key speed test - 21-byte keys - 160.00 cycles/hash +Small key speed test - 22-byte keys - 166.15 cycles/hash +Small key speed test - 23-byte keys - 173.00 cycles/hash +Small key speed test - 24-byte keys - 180.12 cycles/hash +Small key speed test - 25-byte keys - 187.00 cycles/hash +Small key speed test - 26-byte keys - 194.00 cycles/hash +Small key speed test - 27-byte keys - 202.11 cycles/hash +Small key speed test - 28-byte keys - 220.26 cycles/hash +Small key speed test - 29-byte keys - 268.66 cycles/hash +Small key speed test - 30-byte keys - 245.33 cycles/hash +Small key speed test - 31-byte keys - 240.75 cycles/hash +Small key speed test - 32-byte keys - 236.00 cycles/hash +Average 130.822 cycles/hash +Average, weighted by key length freq. 128.375 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 99.066 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/FNV1A_Pippip_Yurii.txt b/doc/FNV1A_Pippip_Yurii.txt index 44621ddc..5ee0949b 100644 --- a/doc/FNV1A_Pippip_Yurii.txt +++ b/doc/FNV1A_Pippip_Yurii.txt @@ -9,39 +9,40 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x142a64b222d0 - 0x142a64b22264). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.157 bytes/cycle - 6172.61 MiB/sec @ 3 ghz -Alignment 6 - 2.158 bytes/cycle - 6174.71 MiB/sec @ 3 ghz -Alignment 5 - 2.158 bytes/cycle - 6173.24 MiB/sec @ 3 ghz -Alignment 4 - 2.156 bytes/cycle - 6166.98 MiB/sec @ 3 ghz -Alignment 3 - 2.158 bytes/cycle - 6175.41 MiB/sec @ 3 ghz -Alignment 2 - 2.156 bytes/cycle - 6169.29 MiB/sec @ 3 ghz -Alignment 1 - 2.158 bytes/cycle - 6174.42 MiB/sec @ 3 ghz -Alignment 0 - 2.157 bytes/cycle - 6170.46 MiB/sec @ 3 ghz -Average - 2.157 bytes/cycle - 6172.14 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 22.63 cycles/hash -Small key speed test - 2-byte keys - 22.55 cycles/hash -Small key speed test - 3-byte keys - 22.49 cycles/hash -Small key speed test - 4-byte keys - 22.58 cycles/hash -Small key speed test - 5-byte keys - 22.00 cycles/hash -Small key speed test - 6-byte keys - 22.51 cycles/hash -Small key speed test - 7-byte keys - 22.30 cycles/hash -Small key speed test - 8-byte keys - 22.31 cycles/hash -Small key speed test - 9-byte keys - 24.44 cycles/hash -Small key speed test - 10-byte keys - 24.43 cycles/hash -Small key speed test - 11-byte keys - 24.44 cycles/hash -Small key speed test - 12-byte keys - 24.00 cycles/hash -Small key speed test - 13-byte keys - 24.49 cycles/hash -Small key speed test - 14-byte keys - 24.00 cycles/hash -Small key speed test - 15-byte keys - 24.45 cycles/hash -Small key speed test - 16-byte keys - 24.41 cycles/hash +Alignment 7 - 2.135 bytes/cycle - 6107.30 MiB/sec @ 3 ghz +Alignment 6 - 2.138 bytes/cycle - 6116.83 MiB/sec @ 3 ghz +Alignment 5 - 2.138 bytes/cycle - 6116.27 MiB/sec @ 3 ghz +Alignment 4 - 2.138 bytes/cycle - 6116.50 MiB/sec @ 3 ghz +Alignment 3 - 2.138 bytes/cycle - 6116.47 MiB/sec @ 3 ghz +Alignment 2 - 2.138 bytes/cycle - 6116.49 MiB/sec @ 3 ghz +Alignment 1 - 2.138 bytes/cycle - 6115.86 MiB/sec @ 3 ghz +Alignment 0 - 2.138 bytes/cycle - 6116.57 MiB/sec @ 3 ghz +Average - 2.137 bytes/cycle - 6115.29 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 22.99 cycles/hash +Small key speed test - 2-byte keys - 22.99 cycles/hash +Small key speed test - 3-byte keys - 22.99 cycles/hash +Small key speed test - 4-byte keys - 22.99 cycles/hash +Small key speed test - 5-byte keys - 22.99 cycles/hash +Small key speed test - 6-byte keys - 22.99 cycles/hash +Small key speed test - 7-byte keys - 23.00 cycles/hash +Small key speed test - 8-byte keys - 22.99 cycles/hash +Small key speed test - 9-byte keys - 24.98 cycles/hash +Small key speed test - 10-byte keys - 24.99 cycles/hash +Small key speed test - 11-byte keys - 24.99 cycles/hash +Small key speed test - 12-byte keys - 24.99 cycles/hash +Small key speed test - 13-byte keys - 24.99 cycles/hash +Small key speed test - 14-byte keys - 24.98 cycles/hash +Small key speed test - 15-byte keys - 24.97 cycles/hash +Small key speed test - 16-byte keys - 24.99 cycles/hash Small key speed test - 17-byte keys - 32.00 cycles/hash -Small key speed test - 18-byte keys - 32.00 cycles/hash +Small key speed test - 18-byte keys - 32.32 cycles/hash Small key speed test - 19-byte keys - 32.00 cycles/hash -Small key speed test - 20-byte keys - 32.00 cycles/hash -Small key speed test - 21-byte keys - 32.00 cycles/hash -Small key speed test - 22-byte keys - 32.00 cycles/hash +Small key speed test - 20-byte keys - 32.13 cycles/hash +Small key speed test - 21-byte keys - 32.13 cycles/hash +Small key speed test - 22-byte keys - 32.59 cycles/hash Small key speed test - 23-byte keys - 32.00 cycles/hash Small key speed test - 24-byte keys - 32.00 cycles/hash Small key speed test - 25-byte keys - 32.00 cycles/hash @@ -51,7 +52,10 @@ Small key speed test - 28-byte keys - 32.00 cycles/hash Small key speed test - 29-byte keys - 32.00 cycles/hash Small key speed test - 30-byte keys - 32.00 cycles/hash Small key speed test - 31-byte keys - 32.00 cycles/hash -Average 27.549 cycles/hash +Small key speed test - 32-byte keys - 32.00 cycles/hash +Average 28.031 cycles/hash +Average, weighted by key length freq. 28.018 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 24.865 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/FNV1A_Totenschiff.txt b/doc/FNV1A_Totenschiff.txt index 229db8ec..9dbe2ff2 100644 --- a/doc/FNV1A_Totenschiff.txt +++ b/doc/FNV1A_Totenschiff.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x142312c15158 - 0x142312c150ec). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.190 bytes/cycle - 6267.03 MiB/sec @ 3 ghz -Alignment 6 - 2.194 bytes/cycle - 6275.74 MiB/sec @ 3 ghz -Alignment 5 - 2.193 bytes/cycle - 6275.35 MiB/sec @ 3 ghz -Alignment 4 - 2.194 bytes/cycle - 6276.45 MiB/sec @ 3 ghz -Alignment 3 - 2.194 bytes/cycle - 6275.77 MiB/sec @ 3 ghz -Alignment 2 - 2.194 bytes/cycle - 6276.20 MiB/sec @ 3 ghz -Alignment 1 - 2.193 bytes/cycle - 6275.63 MiB/sec @ 3 ghz -Alignment 0 - 2.194 bytes/cycle - 6276.07 MiB/sec @ 3 ghz -Average - 2.193 bytes/cycle - 6274.78 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 22.00 cycles/hash -Small key speed test - 2-byte keys - 22.00 cycles/hash +Alignment 7 - 2.154 bytes/cycle - 6163.99 MiB/sec @ 3 ghz +Alignment 6 - 2.156 bytes/cycle - 6167.98 MiB/sec @ 3 ghz +Alignment 5 - 2.156 bytes/cycle - 6167.82 MiB/sec @ 3 ghz +Alignment 4 - 2.156 bytes/cycle - 6167.90 MiB/sec @ 3 ghz +Alignment 3 - 2.155 bytes/cycle - 6166.48 MiB/sec @ 3 ghz +Alignment 2 - 2.156 bytes/cycle - 6167.62 MiB/sec @ 3 ghz +Alignment 1 - 2.156 bytes/cycle - 6167.50 MiB/sec @ 3 ghz +Alignment 0 - 2.155 bytes/cycle - 6165.47 MiB/sec @ 3 ghz +Average - 2.155 bytes/cycle - 6166.85 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 22.28 cycles/hash +Small key speed test - 2-byte keys - 22.32 cycles/hash Small key speed test - 3-byte keys - 22.00 cycles/hash -Small key speed test - 4-byte keys - 22.00 cycles/hash +Small key speed test - 4-byte keys - 22.28 cycles/hash Small key speed test - 5-byte keys - 22.00 cycles/hash Small key speed test - 6-byte keys - 22.00 cycles/hash Small key speed test - 7-byte keys - 22.00 cycles/hash -Small key speed test - 8-byte keys - 22.00 cycles/hash -Small key speed test - 9-byte keys - 24.00 cycles/hash -Small key speed test - 10-byte keys - 24.00 cycles/hash -Small key speed test - 11-byte keys - 24.00 cycles/hash -Small key speed test - 12-byte keys - 24.00 cycles/hash -Small key speed test - 13-byte keys - 24.00 cycles/hash -Small key speed test - 14-byte keys - 24.00 cycles/hash +Small key speed test - 8-byte keys - 22.34 cycles/hash +Small key speed test - 9-byte keys - 24.28 cycles/hash +Small key speed test - 10-byte keys - 24.25 cycles/hash +Small key speed test - 11-byte keys - 24.29 cycles/hash +Small key speed test - 12-byte keys - 24.26 cycles/hash +Small key speed test - 13-byte keys - 24.26 cycles/hash +Small key speed test - 14-byte keys - 24.43 cycles/hash Small key speed test - 15-byte keys - 24.00 cycles/hash -Small key speed test - 16-byte keys - 24.00 cycles/hash +Small key speed test - 16-byte keys - 24.23 cycles/hash Small key speed test - 17-byte keys - 28.00 cycles/hash Small key speed test - 18-byte keys - 28.00 cycles/hash -Small key speed test - 19-byte keys - 27.99 cycles/hash -Small key speed test - 20-byte keys - 27.99 cycles/hash -Small key speed test - 21-byte keys - 27.97 cycles/hash -Small key speed test - 22-byte keys - 27.97 cycles/hash -Small key speed test - 23-byte keys - 27.97 cycles/hash -Small key speed test - 24-byte keys - 27.98 cycles/hash -Small key speed test - 25-byte keys - 31.62 cycles/hash -Small key speed test - 26-byte keys - 31.61 cycles/hash -Small key speed test - 27-byte keys - 31.61 cycles/hash -Small key speed test - 28-byte keys - 31.63 cycles/hash -Small key speed test - 29-byte keys - 31.64 cycles/hash -Small key speed test - 30-byte keys - 31.59 cycles/hash -Small key speed test - 31-byte keys - 31.63 cycles/hash -Average 26.232 cycles/hash +Small key speed test - 19-byte keys - 28.00 cycles/hash +Small key speed test - 20-byte keys - 28.00 cycles/hash +Small key speed test - 21-byte keys - 28.00 cycles/hash +Small key speed test - 22-byte keys - 28.00 cycles/hash +Small key speed test - 23-byte keys - 28.00 cycles/hash +Small key speed test - 24-byte keys - 28.00 cycles/hash +Small key speed test - 25-byte keys - 32.00 cycles/hash +Small key speed test - 26-byte keys - 32.00 cycles/hash +Small key speed test - 27-byte keys - 32.00 cycles/hash +Small key speed test - 28-byte keys - 32.00 cycles/hash +Small key speed test - 29-byte keys - 32.00 cycles/hash +Small key speed test - 30-byte keys - 32.00 cycles/hash +Small key speed test - 31-byte keys - 32.00 cycles/hash +Small key speed test - 32-byte keys - 32.00 cycles/hash +Average 26.601 cycles/hash +Average, weighted by key length freq. 26.211 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 24.097 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/FNV1a.txt b/doc/FNV1a.txt index c6c204aa..6cb57351 100644 --- a/doc/FNV1a.txt +++ b/doc/FNV1a.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x140ed7434f1c - 0x140ed7434ed4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.266 bytes/cycle - 760.54 MiB/sec @ 3 ghz -Alignment 6 - 0.266 bytes/cycle - 760.47 MiB/sec @ 3 ghz -Alignment 5 - 0.266 bytes/cycle - 760.45 MiB/sec @ 3 ghz -Alignment 4 - 0.266 bytes/cycle - 760.58 MiB/sec @ 3 ghz -Alignment 3 - 0.266 bytes/cycle - 760.51 MiB/sec @ 3 ghz -Alignment 2 - 0.266 bytes/cycle - 760.34 MiB/sec @ 3 ghz -Alignment 1 - 0.266 bytes/cycle - 760.69 MiB/sec @ 3 ghz -Alignment 0 - 0.266 bytes/cycle - 760.54 MiB/sec @ 3 ghz -Average - 0.266 bytes/cycle - 760.52 MiB/sec @ 3 ghz +Alignment 7 - 0.238 bytes/cycle - 680.82 MiB/sec @ 3 ghz +Alignment 6 - 0.268 bytes/cycle - 765.49 MiB/sec @ 3 ghz +Alignment 5 - 0.267 bytes/cycle - 765.14 MiB/sec @ 3 ghz +Alignment 4 - 0.267 bytes/cycle - 765.28 MiB/sec @ 3 ghz +Alignment 3 - 0.267 bytes/cycle - 765.18 MiB/sec @ 3 ghz +Alignment 2 - 0.267 bytes/cycle - 765.25 MiB/sec @ 3 ghz +Alignment 1 - 0.267 bytes/cycle - 765.25 MiB/sec @ 3 ghz +Alignment 0 - 0.267 bytes/cycle - 765.17 MiB/sec @ 3 ghz +Average - 0.264 bytes/cycle - 754.70 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 17.00 cycles/hash Small key speed test - 2-byte keys - 21.00 cycles/hash -Small key speed test - 3-byte keys - 25.00 cycles/hash -Small key speed test - 4-byte keys - 28.95 cycles/hash -Small key speed test - 5-byte keys - 32.18 cycles/hash +Small key speed test - 3-byte keys - 24.89 cycles/hash +Small key speed test - 4-byte keys - 28.50 cycles/hash +Small key speed test - 5-byte keys - 32.00 cycles/hash Small key speed test - 6-byte keys - 36.00 cycles/hash -Small key speed test - 7-byte keys - 40.00 cycles/hash -Small key speed test - 8-byte keys - 44.00 cycles/hash -Small key speed test - 9-byte keys - 47.00 cycles/hash -Small key speed test - 10-byte keys - 51.78 cycles/hash -Small key speed test - 11-byte keys - 55.00 cycles/hash -Small key speed test - 12-byte keys - 59.00 cycles/hash -Small key speed test - 13-byte keys - 63.00 cycles/hash -Small key speed test - 14-byte keys - 66.00 cycles/hash -Small key speed test - 15-byte keys - 70.00 cycles/hash -Small key speed test - 16-byte keys - 73.83 cycles/hash -Small key speed test - 17-byte keys - 77.21 cycles/hash -Small key speed test - 18-byte keys - 81.00 cycles/hash -Small key speed test - 19-byte keys - 84.74 cycles/hash -Small key speed test - 20-byte keys - 88.78 cycles/hash -Small key speed test - 21-byte keys - 92.64 cycles/hash -Small key speed test - 22-byte keys - 96.00 cycles/hash -Small key speed test - 23-byte keys - 99.83 cycles/hash -Small key speed test - 24-byte keys - 104.00 cycles/hash -Small key speed test - 25-byte keys - 108.00 cycles/hash -Small key speed test - 26-byte keys - 111.74 cycles/hash -Small key speed test - 27-byte keys - 115.75 cycles/hash -Small key speed test - 28-byte keys - 118.89 cycles/hash -Small key speed test - 29-byte keys - 122.91 cycles/hash -Small key speed test - 30-byte keys - 126.87 cycles/hash -Small key speed test - 31-byte keys - 130.65 cycles/hash -Average 73.830 cycles/hash +Small key speed test - 7-byte keys - 39.99 cycles/hash +Small key speed test - 8-byte keys - 43.75 cycles/hash +Small key speed test - 9-byte keys - 46.95 cycles/hash +Small key speed test - 10-byte keys - 51.00 cycles/hash +Small key speed test - 11-byte keys - 54.90 cycles/hash +Small key speed test - 12-byte keys - 58.89 cycles/hash +Small key speed test - 13-byte keys - 62.17 cycles/hash +Small key speed test - 14-byte keys - 65.99 cycles/hash +Small key speed test - 15-byte keys - 69.98 cycles/hash +Small key speed test - 16-byte keys - 73.00 cycles/hash +Small key speed test - 17-byte keys - 76.96 cycles/hash +Small key speed test - 18-byte keys - 80.84 cycles/hash +Small key speed test - 19-byte keys - 84.00 cycles/hash +Small key speed test - 20-byte keys - 88.00 cycles/hash +Small key speed test - 21-byte keys - 91.84 cycles/hash +Small key speed test - 22-byte keys - 95.83 cycles/hash +Small key speed test - 23-byte keys - 99.13 cycles/hash +Small key speed test - 24-byte keys - 103.80 cycles/hash +Small key speed test - 25-byte keys - 107.80 cycles/hash +Small key speed test - 26-byte keys - 110.97 cycles/hash +Small key speed test - 27-byte keys - 115.22 cycles/hash +Small key speed test - 28-byte keys - 117.86 cycles/hash +Small key speed test - 29-byte keys - 121.38 cycles/hash +Small key speed test - 30-byte keys - 125.86 cycles/hash +Small key speed test - 31-byte keys - 129.78 cycles/hash +Small key speed test - 32-byte keys - 133.80 cycles/hash +Average 75.283 cycles/hash +Average, weighted by key length freq. 75.065 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 59.819 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/FNV1a_YT.txt b/doc/FNV1a_YT.txt index 1088180d..c480971f 100644 --- a/doc/FNV1a_YT.txt +++ b/doc/FNV1a_YT.txt @@ -9,16 +9,17 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 144 (0x90) ticks (0x1431e64afcd4 - 0x1431e64afc44). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.698 bytes/cycle - 13442.22 MiB/sec @ 3 ghz -Alignment 6 - 4.706 bytes/cycle - 13462.85 MiB/sec @ 3 ghz -Alignment 5 - 4.704 bytes/cycle - 13457.19 MiB/sec @ 3 ghz -Alignment 4 - 4.757 bytes/cycle - 13610.02 MiB/sec @ 3 ghz -Alignment 3 - 4.695 bytes/cycle - 13432.61 MiB/sec @ 3 ghz -Alignment 2 - 4.698 bytes/cycle - 13440.93 MiB/sec @ 3 ghz -Alignment 1 - 4.697 bytes/cycle - 13438.09 MiB/sec @ 3 ghz -Alignment 0 - 4.756 bytes/cycle - 13608.00 MiB/sec @ 3 ghz -Average - 4.714 bytes/cycle - 13486.49 MiB/sec @ 3 ghz +Alignment 7 - 4.692 bytes/cycle - 13423.19 MiB/sec @ 3 ghz +Alignment 6 - 4.702 bytes/cycle - 13451.58 MiB/sec @ 3 ghz +Alignment 5 - 4.702 bytes/cycle - 13453.85 MiB/sec @ 3 ghz +Alignment 4 - 4.758 bytes/cycle - 13611.90 MiB/sec @ 3 ghz +Alignment 3 - 4.696 bytes/cycle - 13434.93 MiB/sec @ 3 ghz +Alignment 2 - 4.695 bytes/cycle - 13432.54 MiB/sec @ 3 ghz +Alignment 1 - 4.695 bytes/cycle - 13432.21 MiB/sec @ 3 ghz +Alignment 0 - 4.758 bytes/cycle - 13613.40 MiB/sec @ 3 ghz +Average - 4.712 bytes/cycle - 13481.70 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 22.00 cycles/hash Small key speed test - 2-byte keys - 22.00 cycles/hash @@ -26,32 +27,35 @@ Small key speed test - 3-byte keys - 26.00 cycles/hash Small key speed test - 4-byte keys - 24.00 cycles/hash Small key speed test - 5-byte keys - 26.00 cycles/hash Small key speed test - 6-byte keys - 26.00 cycles/hash -Small key speed test - 7-byte keys - 29.98 cycles/hash +Small key speed test - 7-byte keys - 30.00 cycles/hash Small key speed test - 8-byte keys - 24.00 cycles/hash -Small key speed test - 9-byte keys - 26.99 cycles/hash +Small key speed test - 9-byte keys - 27.00 cycles/hash Small key speed test - 10-byte keys - 26.00 cycles/hash Small key speed test - 11-byte keys - 30.00 cycles/hash Small key speed test - 12-byte keys - 28.00 cycles/hash Small key speed test - 13-byte keys - 30.00 cycles/hash Small key speed test - 14-byte keys - 30.00 cycles/hash -Small key speed test - 15-byte keys - 33.00 cycles/hash +Small key speed test - 15-byte keys - 33.60 cycles/hash Small key speed test - 16-byte keys - 26.00 cycles/hash Small key speed test - 17-byte keys - 28.00 cycles/hash Small key speed test - 18-byte keys - 28.00 cycles/hash -Small key speed test - 19-byte keys - 31.56 cycles/hash +Small key speed test - 19-byte keys - 31.59 cycles/hash Small key speed test - 20-byte keys - 30.00 cycles/hash -Small key speed test - 21-byte keys - 31.98 cycles/hash +Small key speed test - 21-byte keys - 32.00 cycles/hash Small key speed test - 22-byte keys - 32.00 cycles/hash Small key speed test - 23-byte keys - 36.00 cycles/hash -Small key speed test - 24-byte keys - 31.96 cycles/hash -Small key speed test - 25-byte keys - 35.59 cycles/hash -Small key speed test - 26-byte keys - 35.94 cycles/hash +Small key speed test - 24-byte keys - 31.94 cycles/hash +Small key speed test - 25-byte keys - 35.85 cycles/hash +Small key speed test - 26-byte keys - 35.92 cycles/hash Small key speed test - 27-byte keys - 39.00 cycles/hash Small key speed test - 28-byte keys - 35.00 cycles/hash Small key speed test - 29-byte keys - 39.00 cycles/hash Small key speed test - 30-byte keys - 39.00 cycles/hash -Small key speed test - 31-byte keys - 42.60 cycles/hash -Average 30.504 cycles/hash +Small key speed test - 31-byte keys - 42.67 cycles/hash +Small key speed test - 32-byte keys - 35.00 cycles/hash +Average 30.674 cycles/hash +Average, weighted by key length freq. 30.277 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 27.166 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/FNV2.txt b/doc/FNV2.txt index bb478e6c..7cf0b562 100644 --- a/doc/FNV2.txt +++ b/doc/FNV2.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x146f2a4cbca0 - 0x146f2a4cbc34). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.155 bytes/cycle - 6164.96 MiB/sec @ 3 ghz -Alignment 6 - 2.157 bytes/cycle - 6170.59 MiB/sec @ 3 ghz -Alignment 5 - 2.157 bytes/cycle - 6171.64 MiB/sec @ 3 ghz -Alignment 4 - 2.158 bytes/cycle - 6174.76 MiB/sec @ 3 ghz -Alignment 3 - 2.157 bytes/cycle - 6171.01 MiB/sec @ 3 ghz -Alignment 2 - 2.158 bytes/cycle - 6173.35 MiB/sec @ 3 ghz -Alignment 1 - 2.158 bytes/cycle - 6174.40 MiB/sec @ 3 ghz -Alignment 0 - 2.157 bytes/cycle - 6172.08 MiB/sec @ 3 ghz -Average - 2.157 bytes/cycle - 6171.60 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 16.91 cycles/hash -Small key speed test - 2-byte keys - 20.00 cycles/hash +Alignment 7 - 1.777 bytes/cycle - 5083.09 MiB/sec @ 3 ghz +Alignment 6 - 1.777 bytes/cycle - 5083.11 MiB/sec @ 3 ghz +Alignment 5 - 1.777 bytes/cycle - 5083.09 MiB/sec @ 3 ghz +Alignment 4 - 1.779 bytes/cycle - 5088.43 MiB/sec @ 3 ghz +Alignment 3 - 2.168 bytes/cycle - 6201.39 MiB/sec @ 3 ghz +Alignment 2 - 2.158 bytes/cycle - 6174.19 MiB/sec @ 3 ghz +Alignment 1 - 2.155 bytes/cycle - 6165.96 MiB/sec @ 3 ghz +Alignment 0 - 2.156 bytes/cycle - 6167.67 MiB/sec @ 3 ghz +Average - 1.968 bytes/cycle - 5630.87 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 16.99 cycles/hash +Small key speed test - 2-byte keys - 20.16 cycles/hash Small key speed test - 3-byte keys - 24.00 cycles/hash Small key speed test - 4-byte keys - 28.00 cycles/hash Small key speed test - 5-byte keys - 32.00 cycles/hash -Small key speed test - 6-byte keys - 35.64 cycles/hash +Small key speed test - 6-byte keys - 35.70 cycles/hash Small key speed test - 7-byte keys - 39.00 cycles/hash Small key speed test - 8-byte keys - 17.00 cycles/hash -Small key speed test - 9-byte keys - 20.52 cycles/hash -Small key speed test - 10-byte keys - 24.00 cycles/hash +Small key speed test - 9-byte keys - 20.51 cycles/hash +Small key speed test - 10-byte keys - 24.15 cycles/hash Small key speed test - 11-byte keys - 28.00 cycles/hash Small key speed test - 12-byte keys - 32.00 cycles/hash Small key speed test - 13-byte keys - 35.00 cycles/hash Small key speed test - 14-byte keys - 39.00 cycles/hash -Small key speed test - 15-byte keys - 42.45 cycles/hash -Small key speed test - 16-byte keys - 20.27 cycles/hash +Small key speed test - 15-byte keys - 42.52 cycles/hash +Small key speed test - 16-byte keys - 20.33 cycles/hash Small key speed test - 17-byte keys - 24.00 cycles/hash Small key speed test - 18-byte keys - 28.00 cycles/hash -Small key speed test - 19-byte keys - 31.97 cycles/hash -Small key speed test - 20-byte keys - 35.15 cycles/hash +Small key speed test - 19-byte keys - 32.00 cycles/hash +Small key speed test - 20-byte keys - 35.13 cycles/hash Small key speed test - 21-byte keys - 39.00 cycles/hash Small key speed test - 22-byte keys - 43.00 cycles/hash -Small key speed test - 23-byte keys - 46.24 cycles/hash +Small key speed test - 23-byte keys - 46.28 cycles/hash Small key speed test - 24-byte keys - 24.00 cycles/hash -Small key speed test - 25-byte keys - 27.98 cycles/hash -Small key speed test - 26-byte keys - 31.92 cycles/hash +Small key speed test - 25-byte keys - 28.00 cycles/hash +Small key speed test - 26-byte keys - 31.96 cycles/hash Small key speed test - 27-byte keys - 35.00 cycles/hash Small key speed test - 28-byte keys - 39.00 cycles/hash Small key speed test - 29-byte keys - 43.00 cycles/hash -Small key speed test - 30-byte keys - 46.12 cycles/hash +Small key speed test - 30-byte keys - 46.00 cycles/hash Small key speed test - 31-byte keys - 50.00 cycles/hash -Average 32.199 cycles/hash +Small key speed test - 32-byte keys - 28.00 cycles/hash +Average 32.085 cycles/hash +Average, weighted by key length freq. 31.975 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 24.209 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/FNV64.txt b/doc/FNV64.txt index 4e4b0b2f..faffb960 100644 --- a/doc/FNV64.txt +++ b/doc/FNV64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1439604ba534 - 0x1439604ba4c8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.271 bytes/cycle - 774.82 MiB/sec @ 3 ghz -Alignment 6 - 0.271 bytes/cycle - 774.82 MiB/sec @ 3 ghz -Alignment 5 - 0.271 bytes/cycle - 774.82 MiB/sec @ 3 ghz -Alignment 4 - 0.271 bytes/cycle - 774.82 MiB/sec @ 3 ghz -Alignment 3 - 0.270 bytes/cycle - 773.69 MiB/sec @ 3 ghz -Alignment 2 - 0.271 bytes/cycle - 774.82 MiB/sec @ 3 ghz -Alignment 1 - 0.270 bytes/cycle - 773.55 MiB/sec @ 3 ghz -Alignment 0 - 0.270 bytes/cycle - 773.62 MiB/sec @ 3 ghz -Average - 0.271 bytes/cycle - 774.37 MiB/sec @ 3 ghz +Alignment 7 - 0.222 bytes/cycle - 635.75 MiB/sec @ 3 ghz +Alignment 6 - 0.248 bytes/cycle - 710.13 MiB/sec @ 3 ghz +Alignment 5 - 0.270 bytes/cycle - 772.85 MiB/sec @ 3 ghz +Alignment 4 - 0.270 bytes/cycle - 772.75 MiB/sec @ 3 ghz +Alignment 3 - 0.270 bytes/cycle - 772.46 MiB/sec @ 3 ghz +Alignment 2 - 0.270 bytes/cycle - 772.46 MiB/sec @ 3 ghz +Alignment 1 - 0.270 bytes/cycle - 772.57 MiB/sec @ 3 ghz +Alignment 0 - 0.270 bytes/cycle - 772.66 MiB/sec @ 3 ghz +Average - 0.261 bytes/cycle - 747.70 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 17.00 cycles/hash -Small key speed test - 2-byte keys - 20.90 cycles/hash +Small key speed test - 2-byte keys - 20.89 cycles/hash Small key speed test - 3-byte keys - 24.00 cycles/hash Small key speed test - 4-byte keys - 28.00 cycles/hash -Small key speed test - 5-byte keys - 31.50 cycles/hash +Small key speed test - 5-byte keys - 31.73 cycles/hash Small key speed test - 6-byte keys - 35.00 cycles/hash Small key speed test - 7-byte keys - 39.00 cycles/hash -Small key speed test - 8-byte keys - 42.97 cycles/hash +Small key speed test - 8-byte keys - 42.94 cycles/hash Small key speed test - 9-byte keys - 46.00 cycles/hash Small key speed test - 10-byte keys - 50.00 cycles/hash -Small key speed test - 11-byte keys - 54.00 cycles/hash -Small key speed test - 12-byte keys - 57.52 cycles/hash -Small key speed test - 13-byte keys - 61.34 cycles/hash +Small key speed test - 11-byte keys - 53.86 cycles/hash +Small key speed test - 12-byte keys - 57.61 cycles/hash +Small key speed test - 13-byte keys - 61.00 cycles/hash Small key speed test - 14-byte keys - 65.00 cycles/hash -Small key speed test - 15-byte keys - 68.57 cycles/hash -Small key speed test - 16-byte keys - 72.96 cycles/hash -Small key speed test - 17-byte keys - 76.55 cycles/hash -Small key speed test - 18-byte keys - 79.77 cycles/hash -Small key speed test - 19-byte keys - 83.53 cycles/hash -Small key speed test - 20-byte keys - 87.33 cycles/hash -Small key speed test - 21-byte keys - 90.99 cycles/hash -Small key speed test - 22-byte keys - 94.00 cycles/hash -Small key speed test - 23-byte keys - 98.41 cycles/hash +Small key speed test - 15-byte keys - 68.68 cycles/hash +Small key speed test - 16-byte keys - 72.95 cycles/hash +Small key speed test - 17-byte keys - 76.00 cycles/hash +Small key speed test - 18-byte keys - 79.81 cycles/hash +Small key speed test - 19-byte keys - 83.50 cycles/hash +Small key speed test - 20-byte keys - 87.00 cycles/hash +Small key speed test - 21-byte keys - 91.00 cycles/hash +Small key speed test - 22-byte keys - 94.54 cycles/hash +Small key speed test - 23-byte keys - 98.48 cycles/hash Small key speed test - 24-byte keys - 102.00 cycles/hash -Small key speed test - 25-byte keys - 105.41 cycles/hash -Small key speed test - 26-byte keys - 109.70 cycles/hash -Small key speed test - 27-byte keys - 113.62 cycles/hash -Small key speed test - 28-byte keys - 117.61 cycles/hash -Small key speed test - 29-byte keys - 120.91 cycles/hash -Small key speed test - 30-byte keys - 124.29 cycles/hash -Small key speed test - 31-byte keys - 127.46 cycles/hash -Average 72.431 cycles/hash +Small key speed test - 25-byte keys - 105.47 cycles/hash +Small key speed test - 26-byte keys - 109.00 cycles/hash +Small key speed test - 27-byte keys - 113.00 cycles/hash +Small key speed test - 28-byte keys - 117.16 cycles/hash +Small key speed test - 29-byte keys - 120.00 cycles/hash +Small key speed test - 30-byte keys - 124.06 cycles/hash +Small key speed test - 31-byte keys - 127.95 cycles/hash +Small key speed test - 32-byte keys - 131.00 cycles/hash +Average 74.176 cycles/hash +Average, weighted by key length freq. 74.003 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 59.190 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/FarmHash128.txt b/doc/FarmHash128.txt index 5c0a54ad..11135f06 100644 --- a/doc/FarmHash128.txt +++ b/doc/FarmHash128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x133573a4e0124 - 0x133573a4e00b8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.848 bytes/cycle - 13870.84 MiB/sec @ 3 ghz -Alignment 6 - 4.848 bytes/cycle - 13868.91 MiB/sec @ 3 ghz -Alignment 5 - 4.847 bytes/cycle - 13866.14 MiB/sec @ 3 ghz -Alignment 4 - 4.852 bytes/cycle - 13882.86 MiB/sec @ 3 ghz -Alignment 3 - 4.847 bytes/cycle - 13867.57 MiB/sec @ 3 ghz -Alignment 2 - 4.847 bytes/cycle - 13868.09 MiB/sec @ 3 ghz -Alignment 1 - 4.847 bytes/cycle - 13867.32 MiB/sec @ 3 ghz -Alignment 0 - 4.969 bytes/cycle - 14217.47 MiB/sec @ 3 ghz -Average - 4.863 bytes/cycle - 13913.65 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 57.73 cycles/hash -Small key speed test - 2-byte keys - 57.95 cycles/hash -Small key speed test - 3-byte keys - 58.00 cycles/hash -Small key speed test - 4-byte keys - 63.00 cycles/hash -Small key speed test - 5-byte keys - 63.00 cycles/hash -Small key speed test - 6-byte keys - 63.00 cycles/hash -Small key speed test - 7-byte keys - 63.00 cycles/hash -Small key speed test - 8-byte keys - 63.00 cycles/hash -Small key speed test - 9-byte keys - 63.00 cycles/hash -Small key speed test - 10-byte keys - 63.00 cycles/hash -Small key speed test - 11-byte keys - 63.00 cycles/hash -Small key speed test - 12-byte keys - 63.00 cycles/hash -Small key speed test - 13-byte keys - 63.00 cycles/hash -Small key speed test - 14-byte keys - 63.00 cycles/hash -Small key speed test - 15-byte keys - 63.00 cycles/hash -Small key speed test - 16-byte keys - 63.00 cycles/hash -Small key speed test - 17-byte keys - 79.00 cycles/hash -Small key speed test - 18-byte keys - 79.00 cycles/hash -Small key speed test - 19-byte keys - 79.00 cycles/hash -Small key speed test - 20-byte keys - 79.00 cycles/hash -Small key speed test - 21-byte keys - 79.11 cycles/hash -Small key speed test - 22-byte keys - 79.00 cycles/hash -Small key speed test - 23-byte keys - 79.13 cycles/hash -Small key speed test - 24-byte keys - 78.90 cycles/hash -Small key speed test - 25-byte keys - 79.00 cycles/hash -Small key speed test - 26-byte keys - 79.12 cycles/hash -Small key speed test - 27-byte keys - 79.02 cycles/hash -Small key speed test - 28-byte keys - 78.96 cycles/hash -Small key speed test - 29-byte keys - 78.98 cycles/hash -Small key speed test - 30-byte keys - 79.00 cycles/hash -Small key speed test - 31-byte keys - 78.98 cycles/hash -Average 70.254 cycles/hash +Alignment 7 - 5.022 bytes/cycle - 14368.05 MiB/sec @ 3 ghz +Alignment 6 - 5.037 bytes/cycle - 14410.85 MiB/sec @ 3 ghz +Alignment 5 - 5.037 bytes/cycle - 14412.40 MiB/sec @ 3 ghz +Alignment 4 - 5.043 bytes/cycle - 14426.85 MiB/sec @ 3 ghz +Alignment 3 - 5.037 bytes/cycle - 14411.35 MiB/sec @ 3 ghz +Alignment 2 - 5.038 bytes/cycle - 14412.72 MiB/sec @ 3 ghz +Alignment 1 - 5.037 bytes/cycle - 14411.22 MiB/sec @ 3 ghz +Alignment 0 - 5.166 bytes/cycle - 14779.49 MiB/sec @ 3 ghz +Average - 5.052 bytes/cycle - 14454.12 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 55.00 cycles/hash +Small key speed test - 2-byte keys - 55.00 cycles/hash +Small key speed test - 3-byte keys - 55.00 cycles/hash +Small key speed test - 4-byte keys - 60.89 cycles/hash +Small key speed test - 5-byte keys - 60.91 cycles/hash +Small key speed test - 6-byte keys - 60.89 cycles/hash +Small key speed test - 7-byte keys - 60.90 cycles/hash +Small key speed test - 8-byte keys - 61.00 cycles/hash +Small key speed test - 9-byte keys - 61.00 cycles/hash +Small key speed test - 10-byte keys - 61.00 cycles/hash +Small key speed test - 11-byte keys - 61.00 cycles/hash +Small key speed test - 12-byte keys - 61.00 cycles/hash +Small key speed test - 13-byte keys - 61.00 cycles/hash +Small key speed test - 14-byte keys - 61.00 cycles/hash +Small key speed test - 15-byte keys - 61.00 cycles/hash +Small key speed test - 16-byte keys - 61.00 cycles/hash +Small key speed test - 17-byte keys - 76.00 cycles/hash +Small key speed test - 18-byte keys - 76.00 cycles/hash +Small key speed test - 19-byte keys - 76.00 cycles/hash +Small key speed test - 20-byte keys - 76.00 cycles/hash +Small key speed test - 21-byte keys - 76.00 cycles/hash +Small key speed test - 22-byte keys - 76.00 cycles/hash +Small key speed test - 23-byte keys - 76.00 cycles/hash +Small key speed test - 24-byte keys - 76.00 cycles/hash +Small key speed test - 25-byte keys - 76.00 cycles/hash +Small key speed test - 26-byte keys - 77.35 cycles/hash +Small key speed test - 27-byte keys - 76.00 cycles/hash +Small key speed test - 28-byte keys - 76.00 cycles/hash +Small key speed test - 29-byte keys - 76.95 cycles/hash +Small key speed test - 30-byte keys - 76.95 cycles/hash +Small key speed test - 31-byte keys - 76.95 cycles/hash +Small key speed test - 32-byte keys - 76.96 cycles/hash +Average 68.086 cycles/hash +Average, weighted by key length freq. 67.622 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 61.189 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/FarmHash32.txt b/doc/FarmHash32.txt index e9ac5ced..efafefb1 100644 --- a/doc/FarmHash32.txt +++ b/doc/FarmHash32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1334370f611ac - 0x1334370f61140). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 7.556 bytes/cycle - 21617.69 MiB/sec @ 3 ghz -Alignment 6 - 7.555 bytes/cycle - 21615.62 MiB/sec @ 3 ghz -Alignment 5 - 7.562 bytes/cycle - 21634.64 MiB/sec @ 3 ghz -Alignment 4 - 7.567 bytes/cycle - 21648.23 MiB/sec @ 3 ghz -Alignment 3 - 7.560 bytes/cycle - 21629.36 MiB/sec @ 3 ghz -Alignment 2 - 7.561 bytes/cycle - 21631.93 MiB/sec @ 3 ghz -Alignment 1 - 7.560 bytes/cycle - 21630.09 MiB/sec @ 3 ghz -Alignment 0 - 7.912 bytes/cycle - 22637.09 MiB/sec @ 3 ghz -Average - 7.604 bytes/cycle - 21755.58 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 39.26 cycles/hash -Small key speed test - 2-byte keys - 39.12 cycles/hash -Small key speed test - 3-byte keys - 39.14 cycles/hash -Small key speed test - 4-byte keys - 43.00 cycles/hash -Small key speed test - 5-byte keys - 43.00 cycles/hash -Small key speed test - 6-byte keys - 43.00 cycles/hash -Small key speed test - 7-byte keys - 43.00 cycles/hash -Small key speed test - 8-byte keys - 48.57 cycles/hash -Small key speed test - 9-byte keys - 48.58 cycles/hash -Small key speed test - 10-byte keys - 48.00 cycles/hash -Small key speed test - 11-byte keys - 48.13 cycles/hash -Small key speed test - 12-byte keys - 48.51 cycles/hash -Small key speed test - 13-byte keys - 48.00 cycles/hash -Small key speed test - 14-byte keys - 48.00 cycles/hash -Small key speed test - 15-byte keys - 48.00 cycles/hash -Small key speed test - 16-byte keys - 48.11 cycles/hash -Small key speed test - 17-byte keys - 49.90 cycles/hash -Small key speed test - 18-byte keys - 49.87 cycles/hash -Small key speed test - 19-byte keys - 49.95 cycles/hash -Small key speed test - 20-byte keys - 49.89 cycles/hash -Small key speed test - 21-byte keys - 50.00 cycles/hash -Small key speed test - 22-byte keys - 50.00 cycles/hash -Small key speed test - 23-byte keys - 50.28 cycles/hash -Small key speed test - 24-byte keys - 50.00 cycles/hash -Small key speed test - 25-byte keys - 50.14 cycles/hash -Small key speed test - 26-byte keys - 50.28 cycles/hash -Small key speed test - 27-byte keys - 50.00 cycles/hash -Small key speed test - 28-byte keys - 50.00 cycles/hash -Small key speed test - 29-byte keys - 50.00 cycles/hash -Small key speed test - 30-byte keys - 50.00 cycles/hash -Small key speed test - 31-byte keys - 49.99 cycles/hash -Average 47.539 cycles/hash +Alignment 7 - 7.677 bytes/cycle - 21962.66 MiB/sec @ 3 ghz +Alignment 6 - 7.681 bytes/cycle - 21974.81 MiB/sec @ 3 ghz +Alignment 5 - 7.701 bytes/cycle - 22031.34 MiB/sec @ 3 ghz +Alignment 4 - 7.703 bytes/cycle - 22038.02 MiB/sec @ 3 ghz +Alignment 3 - 7.695 bytes/cycle - 22014.80 MiB/sec @ 3 ghz +Alignment 2 - 7.696 bytes/cycle - 22017.64 MiB/sec @ 3 ghz +Alignment 1 - 7.698 bytes/cycle - 22024.50 MiB/sec @ 3 ghz +Alignment 0 - 8.048 bytes/cycle - 23025.37 MiB/sec @ 3 ghz +Average - 7.737 bytes/cycle - 22136.14 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 38.00 cycles/hash +Small key speed test - 2-byte keys - 38.00 cycles/hash +Small key speed test - 3-byte keys - 38.00 cycles/hash +Small key speed test - 4-byte keys - 51.57 cycles/hash +Small key speed test - 5-byte keys - 49.72 cycles/hash +Small key speed test - 6-byte keys - 41.00 cycles/hash +Small key speed test - 7-byte keys - 41.00 cycles/hash +Small key speed test - 8-byte keys - 47.00 cycles/hash +Small key speed test - 9-byte keys - 47.00 cycles/hash +Small key speed test - 10-byte keys - 47.00 cycles/hash +Small key speed test - 11-byte keys - 46.98 cycles/hash +Small key speed test - 12-byte keys - 46.94 cycles/hash +Small key speed test - 13-byte keys - 46.99 cycles/hash +Small key speed test - 14-byte keys - 46.95 cycles/hash +Small key speed test - 15-byte keys - 47.00 cycles/hash +Small key speed test - 16-byte keys - 47.00 cycles/hash +Small key speed test - 17-byte keys - 47.96 cycles/hash +Small key speed test - 18-byte keys - 47.95 cycles/hash +Small key speed test - 19-byte keys - 47.93 cycles/hash +Small key speed test - 20-byte keys - 47.95 cycles/hash +Small key speed test - 21-byte keys - 47.94 cycles/hash +Small key speed test - 22-byte keys - 47.91 cycles/hash +Small key speed test - 23-byte keys - 47.94 cycles/hash +Small key speed test - 24-byte keys - 47.96 cycles/hash +Small key speed test - 25-byte keys - 47.98 cycles/hash +Small key speed test - 26-byte keys - 52.27 cycles/hash +Small key speed test - 27-byte keys - 48.94 cycles/hash +Small key speed test - 28-byte keys - 48.53 cycles/hash +Small key speed test - 29-byte keys - 48.59 cycles/hash +Small key speed test - 30-byte keys - 48.61 cycles/hash +Small key speed test - 31-byte keys - 48.59 cycles/hash +Small key speed test - 32-byte keys - 48.67 cycles/hash +Average 46.747 cycles/hash +Average, weighted by key length freq. 47.411 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 46.751 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/FarmHash64.txt b/doc/FarmHash64.txt index 662a2037..e558fde9 100644 --- a/doc/FarmHash64.txt +++ b/doc/FarmHash64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x1334d3f1b4968 - 0x1334d3f1b4920). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.476 bytes/cycle - 12805.29 MiB/sec @ 3 ghz -Alignment 6 - 4.475 bytes/cycle - 12804.26 MiB/sec @ 3 ghz -Alignment 5 - 4.475 bytes/cycle - 12803.41 MiB/sec @ 3 ghz -Alignment 4 - 4.477 bytes/cycle - 12810.09 MiB/sec @ 3 ghz -Alignment 3 - 4.472 bytes/cycle - 12794.40 MiB/sec @ 3 ghz -Alignment 2 - 4.476 bytes/cycle - 12804.57 MiB/sec @ 3 ghz -Alignment 1 - 4.476 bytes/cycle - 12804.96 MiB/sec @ 3 ghz -Alignment 0 - 4.592 bytes/cycle - 13137.24 MiB/sec @ 3 ghz -Average - 4.490 bytes/cycle - 12845.53 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 39.18 cycles/hash +Alignment 7 - 4.496 bytes/cycle - 12863.48 MiB/sec @ 3 ghz +Alignment 6 - 4.506 bytes/cycle - 12890.81 MiB/sec @ 3 ghz +Alignment 5 - 4.505 bytes/cycle - 12888.98 MiB/sec @ 3 ghz +Alignment 4 - 4.508 bytes/cycle - 12896.74 MiB/sec @ 3 ghz +Alignment 3 - 4.506 bytes/cycle - 12890.60 MiB/sec @ 3 ghz +Alignment 2 - 4.506 bytes/cycle - 12890.52 MiB/sec @ 3 ghz +Alignment 1 - 4.505 bytes/cycle - 12889.40 MiB/sec @ 3 ghz +Alignment 0 - 4.623 bytes/cycle - 13225.80 MiB/sec @ 3 ghz +Average - 4.519 bytes/cycle - 12929.54 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 39.00 cycles/hash Small key speed test - 2-byte keys - 39.00 cycles/hash Small key speed test - 3-byte keys - 39.00 cycles/hash -Small key speed test - 4-byte keys - 42.46 cycles/hash -Small key speed test - 5-byte keys - 42.44 cycles/hash -Small key speed test - 6-byte keys - 42.47 cycles/hash -Small key speed test - 7-byte keys - 42.43 cycles/hash -Small key speed test - 8-byte keys - 48.85 cycles/hash -Small key speed test - 9-byte keys - 48.79 cycles/hash -Small key speed test - 10-byte keys - 48.83 cycles/hash -Small key speed test - 11-byte keys - 48.78 cycles/hash -Small key speed test - 12-byte keys - 48.80 cycles/hash -Small key speed test - 13-byte keys - 48.85 cycles/hash -Small key speed test - 14-byte keys - 48.80 cycles/hash -Small key speed test - 15-byte keys - 48.79 cycles/hash -Small key speed test - 16-byte keys - 48.84 cycles/hash -Small key speed test - 17-byte keys - 49.00 cycles/hash -Small key speed test - 18-byte keys - 49.00 cycles/hash -Small key speed test - 19-byte keys - 49.00 cycles/hash -Small key speed test - 20-byte keys - 49.00 cycles/hash -Small key speed test - 21-byte keys - 48.88 cycles/hash -Small key speed test - 22-byte keys - 48.90 cycles/hash -Small key speed test - 23-byte keys - 48.95 cycles/hash -Small key speed test - 24-byte keys - 48.94 cycles/hash -Small key speed test - 25-byte keys - 48.85 cycles/hash -Small key speed test - 26-byte keys - 48.83 cycles/hash -Small key speed test - 27-byte keys - 48.88 cycles/hash -Small key speed test - 28-byte keys - 48.92 cycles/hash -Small key speed test - 29-byte keys - 48.95 cycles/hash -Small key speed test - 30-byte keys - 48.94 cycles/hash -Small key speed test - 31-byte keys - 48.94 cycles/hash -Average 47.107 cycles/hash +Small key speed test - 4-byte keys - 42.00 cycles/hash +Small key speed test - 5-byte keys - 42.11 cycles/hash +Small key speed test - 6-byte keys - 42.11 cycles/hash +Small key speed test - 7-byte keys - 42.19 cycles/hash +Small key speed test - 8-byte keys - 48.00 cycles/hash +Small key speed test - 9-byte keys - 48.00 cycles/hash +Small key speed test - 10-byte keys - 48.00 cycles/hash +Small key speed test - 11-byte keys - 48.00 cycles/hash +Small key speed test - 12-byte keys - 48.00 cycles/hash +Small key speed test - 13-byte keys - 48.00 cycles/hash +Small key speed test - 14-byte keys - 48.00 cycles/hash +Small key speed test - 15-byte keys - 48.00 cycles/hash +Small key speed test - 16-byte keys - 48.00 cycles/hash +Small key speed test - 17-byte keys - 48.85 cycles/hash +Small key speed test - 18-byte keys - 48.82 cycles/hash +Small key speed test - 19-byte keys - 48.79 cycles/hash +Small key speed test - 20-byte keys - 48.83 cycles/hash +Small key speed test - 21-byte keys - 48.85 cycles/hash +Small key speed test - 22-byte keys - 48.82 cycles/hash +Small key speed test - 23-byte keys - 48.82 cycles/hash +Small key speed test - 24-byte keys - 48.84 cycles/hash +Small key speed test - 25-byte keys - 48.89 cycles/hash +Small key speed test - 26-byte keys - 48.81 cycles/hash +Small key speed test - 27-byte keys - 48.81 cycles/hash +Small key speed test - 28-byte keys - 48.88 cycles/hash +Small key speed test - 29-byte keys - 48.76 cycles/hash +Small key speed test - 30-byte keys - 48.71 cycles/hash +Small key speed test - 31-byte keys - 48.74 cycles/hash +Small key speed test - 32-byte keys - 48.74 cycles/hash +Average 46.824 cycles/hash +Average, weighted by key length freq. 48.240 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 47.608 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/GoodOAAT.txt b/doc/GoodOAAT.txt index 9d38fac7..b497a2fb 100644 --- a/doc/GoodOAAT.txt +++ b/doc/GoodOAAT.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x131cb11aed908 - 0x131cb11aed8c0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.260 bytes/cycle - 743.86 MiB/sec @ 3 ghz -Alignment 6 - 0.260 bytes/cycle - 743.91 MiB/sec @ 3 ghz -Alignment 5 - 0.260 bytes/cycle - 743.65 MiB/sec @ 3 ghz -Alignment 4 - 0.260 bytes/cycle - 743.87 MiB/sec @ 3 ghz -Alignment 3 - 0.260 bytes/cycle - 743.75 MiB/sec @ 3 ghz -Alignment 2 - 0.260 bytes/cycle - 743.88 MiB/sec @ 3 ghz -Alignment 1 - 0.260 bytes/cycle - 743.59 MiB/sec @ 3 ghz -Alignment 0 - 0.260 bytes/cycle - 743.94 MiB/sec @ 3 ghz -Average - 0.260 bytes/cycle - 743.81 MiB/sec @ 3 ghz +Alignment 7 - 0.261 bytes/cycle - 745.30 MiB/sec @ 3 ghz +Alignment 6 - 0.260 bytes/cycle - 745.23 MiB/sec @ 3 ghz +Alignment 5 - 0.259 bytes/cycle - 741.97 MiB/sec @ 3 ghz +Alignment 4 - 0.260 bytes/cycle - 745.09 MiB/sec @ 3 ghz +Alignment 3 - 0.260 bytes/cycle - 745.22 MiB/sec @ 3 ghz +Alignment 2 - 0.260 bytes/cycle - 745.23 MiB/sec @ 3 ghz +Alignment 1 - 0.260 bytes/cycle - 745.13 MiB/sec @ 3 ghz +Alignment 0 - 0.260 bytes/cycle - 744.19 MiB/sec @ 3 ghz +Average - 0.260 bytes/cycle - 744.67 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 28.00 cycles/hash Small key speed test - 2-byte keys - 32.00 cycles/hash -Small key speed test - 3-byte keys - 36.00 cycles/hash -Small key speed test - 4-byte keys - 39.14 cycles/hash +Small key speed test - 3-byte keys - 35.86 cycles/hash +Small key speed test - 4-byte keys - 39.00 cycles/hash Small key speed test - 5-byte keys - 43.00 cycles/hash -Small key speed test - 6-byte keys - 47.00 cycles/hash +Small key speed test - 6-byte keys - 46.96 cycles/hash Small key speed test - 7-byte keys - 51.00 cycles/hash Small key speed test - 8-byte keys - 55.00 cycles/hash -Small key speed test - 9-byte keys - 58.60 cycles/hash -Small key speed test - 10-byte keys - 63.00 cycles/hash -Small key speed test - 11-byte keys - 66.00 cycles/hash -Small key speed test - 12-byte keys - 69.96 cycles/hash -Small key speed test - 13-byte keys - 74.18 cycles/hash -Small key speed test - 14-byte keys - 77.80 cycles/hash -Small key speed test - 15-byte keys - 82.00 cycles/hash -Small key speed test - 16-byte keys - 85.15 cycles/hash -Small key speed test - 17-byte keys - 89.26 cycles/hash +Small key speed test - 9-byte keys - 58.63 cycles/hash +Small key speed test - 10-byte keys - 61.91 cycles/hash +Small key speed test - 11-byte keys - 65.95 cycles/hash +Small key speed test - 12-byte keys - 69.68 cycles/hash +Small key speed test - 13-byte keys - 73.88 cycles/hash +Small key speed test - 14-byte keys - 78.00 cycles/hash +Small key speed test - 15-byte keys - 81.94 cycles/hash +Small key speed test - 16-byte keys - 85.05 cycles/hash +Small key speed test - 17-byte keys - 88.74 cycles/hash Small key speed test - 18-byte keys - 93.00 cycles/hash -Small key speed test - 19-byte keys - 97.33 cycles/hash -Small key speed test - 20-byte keys - 101.33 cycles/hash -Small key speed test - 21-byte keys - 104.33 cycles/hash -Small key speed test - 22-byte keys - 108.34 cycles/hash -Small key speed test - 23-byte keys - 113.00 cycles/hash -Small key speed test - 24-byte keys - 116.29 cycles/hash +Small key speed test - 19-byte keys - 96.75 cycles/hash +Small key speed test - 20-byte keys - 100.78 cycles/hash +Small key speed test - 21-byte keys - 104.10 cycles/hash +Small key speed test - 22-byte keys - 108.00 cycles/hash +Small key speed test - 23-byte keys - 112.65 cycles/hash +Small key speed test - 24-byte keys - 115.62 cycles/hash Small key speed test - 25-byte keys - 120.00 cycles/hash -Small key speed test - 26-byte keys - 124.28 cycles/hash -Small key speed test - 27-byte keys - 127.31 cycles/hash -Small key speed test - 28-byte keys - 132.45 cycles/hash -Small key speed test - 29-byte keys - 136.41 cycles/hash -Small key speed test - 30-byte keys - 139.86 cycles/hash -Small key speed test - 31-byte keys - 143.32 cycles/hash -Average 85.624 cycles/hash +Small key speed test - 26-byte keys - 123.55 cycles/hash +Small key speed test - 27-byte keys - 127.00 cycles/hash +Small key speed test - 28-byte keys - 131.46 cycles/hash +Small key speed test - 29-byte keys - 135.00 cycles/hash +Small key speed test - 30-byte keys - 139.60 cycles/hash +Small key speed test - 31-byte keys - 142.64 cycles/hash +Small key speed test - 32-byte keys - 146.66 cycles/hash +Average 87.232 cycles/hash +Average, weighted by key length freq. 86.986 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 71.498 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/HalfSipHash.txt b/doc/HalfSipHash.txt index df1c1755..59adfa8f 100644 --- a/doc/HalfSipHash.txt +++ b/doc/HalfSipHash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x131b83686af90 - 0x131b83686af24). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.399 bytes/cycle - 1141.70 MiB/sec @ 3 ghz -Alignment 6 - 0.399 bytes/cycle - 1141.68 MiB/sec @ 3 ghz -Alignment 5 - 0.399 bytes/cycle - 1141.70 MiB/sec @ 3 ghz -Alignment 4 - 0.399 bytes/cycle - 1141.66 MiB/sec @ 3 ghz -Alignment 3 - 0.399 bytes/cycle - 1141.35 MiB/sec @ 3 ghz -Alignment 2 - 0.399 bytes/cycle - 1141.35 MiB/sec @ 3 ghz -Alignment 1 - 0.399 bytes/cycle - 1141.36 MiB/sec @ 3 ghz -Alignment 0 - 0.399 bytes/cycle - 1141.75 MiB/sec @ 3 ghz -Average - 0.399 bytes/cycle - 1141.57 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 45.00 cycles/hash +Alignment 7 - 0.392 bytes/cycle - 1121.41 MiB/sec @ 3 ghz +Alignment 6 - 0.392 bytes/cycle - 1120.98 MiB/sec @ 3 ghz +Alignment 5 - 0.392 bytes/cycle - 1121.55 MiB/sec @ 3 ghz +Alignment 4 - 0.392 bytes/cycle - 1120.80 MiB/sec @ 3 ghz +Alignment 3 - 0.391 bytes/cycle - 1119.92 MiB/sec @ 3 ghz +Alignment 2 - 0.397 bytes/cycle - 1134.52 MiB/sec @ 3 ghz +Alignment 1 - 0.400 bytes/cycle - 1145.64 MiB/sec @ 3 ghz +Alignment 0 - 0.401 bytes/cycle - 1145.96 MiB/sec @ 3 ghz +Average - 0.395 bytes/cycle - 1128.85 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 44.49 cycles/hash Small key speed test - 2-byte keys - 46.00 cycles/hash Small key speed test - 3-byte keys - 48.00 cycles/hash -Small key speed test - 4-byte keys - 52.56 cycles/hash -Small key speed test - 5-byte keys - 52.25 cycles/hash -Small key speed test - 6-byte keys - 53.00 cycles/hash -Small key speed test - 7-byte keys - 53.69 cycles/hash +Small key speed test - 4-byte keys - 52.00 cycles/hash +Small key speed test - 5-byte keys - 52.00 cycles/hash +Small key speed test - 6-byte keys - 52.32 cycles/hash +Small key speed test - 7-byte keys - 53.19 cycles/hash Small key speed test - 8-byte keys - 63.00 cycles/hash -Small key speed test - 9-byte keys - 63.00 cycles/hash -Small key speed test - 10-byte keys - 62.58 cycles/hash -Small key speed test - 11-byte keys - 63.00 cycles/hash -Small key speed test - 12-byte keys - 73.00 cycles/hash -Small key speed test - 13-byte keys - 73.00 cycles/hash -Small key speed test - 14-byte keys - 73.31 cycles/hash -Small key speed test - 15-byte keys - 74.22 cycles/hash -Small key speed test - 16-byte keys - 82.09 cycles/hash -Small key speed test - 17-byte keys - 83.04 cycles/hash -Small key speed test - 18-byte keys - 84.00 cycles/hash -Small key speed test - 19-byte keys - 84.62 cycles/hash -Small key speed test - 20-byte keys - 92.85 cycles/hash -Small key speed test - 21-byte keys - 92.96 cycles/hash -Small key speed test - 22-byte keys - 93.14 cycles/hash -Small key speed test - 23-byte keys - 94.33 cycles/hash -Small key speed test - 24-byte keys - 103.12 cycles/hash -Small key speed test - 25-byte keys - 102.22 cycles/hash -Small key speed test - 26-byte keys - 103.42 cycles/hash -Small key speed test - 27-byte keys - 104.09 cycles/hash -Small key speed test - 28-byte keys - 113.12 cycles/hash -Small key speed test - 29-byte keys - 113.27 cycles/hash -Small key speed test - 30-byte keys - 113.16 cycles/hash -Small key speed test - 31-byte keys - 114.12 cycles/hash -Average 79.650 cycles/hash +Small key speed test - 9-byte keys - 62.23 cycles/hash +Small key speed test - 10-byte keys - 62.31 cycles/hash +Small key speed test - 11-byte keys - 62.90 cycles/hash +Small key speed test - 12-byte keys - 72.89 cycles/hash +Small key speed test - 13-byte keys - 72.97 cycles/hash +Small key speed test - 14-byte keys - 72.59 cycles/hash +Small key speed test - 15-byte keys - 73.88 cycles/hash +Small key speed test - 16-byte keys - 81.69 cycles/hash +Small key speed test - 17-byte keys - 82.17 cycles/hash +Small key speed test - 18-byte keys - 83.33 cycles/hash +Small key speed test - 19-byte keys - 84.12 cycles/hash +Small key speed test - 20-byte keys - 92.55 cycles/hash +Small key speed test - 21-byte keys - 92.79 cycles/hash +Small key speed test - 22-byte keys - 92.99 cycles/hash +Small key speed test - 23-byte keys - 93.95 cycles/hash +Small key speed test - 24-byte keys - 102.33 cycles/hash +Small key speed test - 25-byte keys - 102.40 cycles/hash +Small key speed test - 26-byte keys - 103.00 cycles/hash +Small key speed test - 27-byte keys - 103.60 cycles/hash +Small key speed test - 28-byte keys - 112.00 cycles/hash +Small key speed test - 29-byte keys - 112.77 cycles/hash +Small key speed test - 30-byte keys - 112.00 cycles/hash +Small key speed test - 31-byte keys - 110.42 cycles/hash +Small key speed test - 32-byte keys - 122.44 cycles/hash +Average 80.479 cycles/hash +Average, weighted by key length freq. 80.155 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 71.072 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/JenkinsOOAT.txt b/doc/JenkinsOOAT.txt index d291041d..417b7666 100644 --- a/doc/JenkinsOOAT.txt +++ b/doc/JenkinsOOAT.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x14ea2602a59c - 0x14ea2602a530). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.219 bytes/cycle - 627.40 MiB/sec @ 3 ghz -Alignment 6 - 0.219 bytes/cycle - 627.58 MiB/sec @ 3 ghz -Alignment 5 - 0.219 bytes/cycle - 627.79 MiB/sec @ 3 ghz -Alignment 4 - 0.219 bytes/cycle - 627.75 MiB/sec @ 3 ghz -Alignment 3 - 0.219 bytes/cycle - 627.58 MiB/sec @ 3 ghz -Alignment 2 - 0.219 bytes/cycle - 627.73 MiB/sec @ 3 ghz -Alignment 1 - 0.219 bytes/cycle - 627.74 MiB/sec @ 3 ghz -Alignment 0 - 0.219 bytes/cycle - 627.57 MiB/sec @ 3 ghz -Average - 0.219 bytes/cycle - 627.64 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 38.65 cycles/hash -Small key speed test - 2-byte keys - 43.00 cycles/hash -Small key speed test - 3-byte keys - 47.96 cycles/hash -Small key speed test - 4-byte keys - 52.00 cycles/hash -Small key speed test - 5-byte keys - 56.99 cycles/hash -Small key speed test - 6-byte keys - 61.17 cycles/hash -Small key speed test - 7-byte keys - 66.00 cycles/hash -Small key speed test - 8-byte keys - 70.92 cycles/hash -Small key speed test - 9-byte keys - 75.00 cycles/hash -Small key speed test - 10-byte keys - 79.97 cycles/hash -Small key speed test - 11-byte keys - 84.15 cycles/hash -Small key speed test - 12-byte keys - 88.93 cycles/hash -Small key speed test - 13-byte keys - 93.00 cycles/hash -Small key speed test - 14-byte keys - 97.89 cycles/hash -Small key speed test - 15-byte keys - 102.54 cycles/hash -Small key speed test - 16-byte keys - 106.97 cycles/hash -Small key speed test - 17-byte keys - 111.47 cycles/hash -Small key speed test - 18-byte keys - 116.00 cycles/hash -Small key speed test - 19-byte keys - 120.96 cycles/hash -Small key speed test - 20-byte keys - 124.95 cycles/hash -Small key speed test - 21-byte keys - 129.94 cycles/hash -Small key speed test - 22-byte keys - 134.69 cycles/hash -Small key speed test - 23-byte keys - 138.99 cycles/hash -Small key speed test - 24-byte keys - 143.89 cycles/hash -Small key speed test - 25-byte keys - 147.94 cycles/hash -Small key speed test - 26-byte keys - 152.96 cycles/hash -Small key speed test - 27-byte keys - 156.89 cycles/hash -Small key speed test - 28-byte keys - 161.47 cycles/hash -Small key speed test - 29-byte keys - 166.07 cycles/hash -Small key speed test - 30-byte keys - 170.96 cycles/hash -Small key speed test - 31-byte keys - 175.76 cycles/hash -Average 107.036 cycles/hash +Alignment 7 - 0.215 bytes/cycle - 615.59 MiB/sec @ 3 ghz +Alignment 6 - 0.215 bytes/cycle - 615.60 MiB/sec @ 3 ghz +Alignment 5 - 0.215 bytes/cycle - 615.62 MiB/sec @ 3 ghz +Alignment 4 - 0.215 bytes/cycle - 615.56 MiB/sec @ 3 ghz +Alignment 3 - 0.215 bytes/cycle - 615.59 MiB/sec @ 3 ghz +Alignment 2 - 0.215 bytes/cycle - 615.65 MiB/sec @ 3 ghz +Alignment 1 - 0.215 bytes/cycle - 615.59 MiB/sec @ 3 ghz +Alignment 0 - 0.215 bytes/cycle - 615.58 MiB/sec @ 3 ghz +Average - 0.215 bytes/cycle - 615.60 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 39.00 cycles/hash +Small key speed test - 2-byte keys - 44.00 cycles/hash +Small key speed test - 3-byte keys - 48.87 cycles/hash +Small key speed test - 4-byte keys - 53.43 cycles/hash +Small key speed test - 5-byte keys - 57.99 cycles/hash +Small key speed test - 6-byte keys - 62.70 cycles/hash +Small key speed test - 7-byte keys - 67.49 cycles/hash +Small key speed test - 8-byte keys - 72.00 cycles/hash +Small key speed test - 9-byte keys - 76.64 cycles/hash +Small key speed test - 10-byte keys - 81.00 cycles/hash +Small key speed test - 11-byte keys - 85.70 cycles/hash +Small key speed test - 12-byte keys - 90.57 cycles/hash +Small key speed test - 13-byte keys - 95.00 cycles/hash +Small key speed test - 14-byte keys - 99.61 cycles/hash +Small key speed test - 15-byte keys - 104.00 cycles/hash +Small key speed test - 16-byte keys - 108.92 cycles/hash +Small key speed test - 17-byte keys - 113.57 cycles/hash +Small key speed test - 18-byte keys - 117.91 cycles/hash +Small key speed test - 19-byte keys - 122.57 cycles/hash +Small key speed test - 20-byte keys - 128.12 cycles/hash +Small key speed test - 21-byte keys - 132.01 cycles/hash +Small key speed test - 22-byte keys - 136.61 cycles/hash +Small key speed test - 23-byte keys - 141.61 cycles/hash +Small key speed test - 24-byte keys - 145.63 cycles/hash +Small key speed test - 25-byte keys - 150.63 cycles/hash +Small key speed test - 26-byte keys - 155.59 cycles/hash +Small key speed test - 27-byte keys - 159.60 cycles/hash +Small key speed test - 28-byte keys - 164.45 cycles/hash +Small key speed test - 29-byte keys - 168.99 cycles/hash +Small key speed test - 30-byte keys - 173.59 cycles/hash +Small key speed test - 31-byte keys - 178.60 cycles/hash +Small key speed test - 32-byte keys - 182.94 cycles/hash +Average 111.229 cycles/hash +Average, weighted by key length freq. 110.967 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 92.343 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/JenkinsOOAT_perl.txt b/doc/JenkinsOOAT_perl.txt index dc76d9c6..1f6f96d6 100644 --- a/doc/JenkinsOOAT_perl.txt +++ b/doc/JenkinsOOAT_perl.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x15050d489b1c - 0x15050d489ab0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.213 bytes/cycle - 608.08 MiB/sec @ 3 ghz -Alignment 6 - 0.213 bytes/cycle - 608.11 MiB/sec @ 3 ghz -Alignment 5 - 0.213 bytes/cycle - 608.18 MiB/sec @ 3 ghz -Alignment 4 - 0.213 bytes/cycle - 608.16 MiB/sec @ 3 ghz -Alignment 3 - 0.213 bytes/cycle - 608.08 MiB/sec @ 3 ghz -Alignment 2 - 0.213 bytes/cycle - 608.16 MiB/sec @ 3 ghz -Alignment 1 - 0.212 bytes/cycle - 607.96 MiB/sec @ 3 ghz -Alignment 0 - 0.213 bytes/cycle - 608.13 MiB/sec @ 3 ghz -Average - 0.213 bytes/cycle - 608.10 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 23.27 cycles/hash -Small key speed test - 2-byte keys - 28.00 cycles/hash -Small key speed test - 3-byte keys - 33.00 cycles/hash -Small key speed test - 4-byte keys - 37.92 cycles/hash -Small key speed test - 5-byte keys - 42.32 cycles/hash -Small key speed test - 6-byte keys - 47.00 cycles/hash -Small key speed test - 7-byte keys - 52.00 cycles/hash -Small key speed test - 8-byte keys - 56.96 cycles/hash -Small key speed test - 9-byte keys - 61.00 cycles/hash -Small key speed test - 10-byte keys - 65.96 cycles/hash -Small key speed test - 11-byte keys - 70.88 cycles/hash -Small key speed test - 12-byte keys - 75.00 cycles/hash -Small key speed test - 13-byte keys - 79.95 cycles/hash -Small key speed test - 14-byte keys - 84.92 cycles/hash -Small key speed test - 15-byte keys - 89.90 cycles/hash -Small key speed test - 16-byte keys - 93.97 cycles/hash -Small key speed test - 17-byte keys - 98.91 cycles/hash -Small key speed test - 18-byte keys - 103.85 cycles/hash -Small key speed test - 19-byte keys - 108.43 cycles/hash -Small key speed test - 20-byte keys - 112.86 cycles/hash -Small key speed test - 21-byte keys - 117.84 cycles/hash -Small key speed test - 22-byte keys - 122.00 cycles/hash -Small key speed test - 23-byte keys - 126.89 cycles/hash -Small key speed test - 24-byte keys - 131.94 cycles/hash -Small key speed test - 25-byte keys - 136.22 cycles/hash -Small key speed test - 26-byte keys - 140.87 cycles/hash -Small key speed test - 27-byte keys - 145.83 cycles/hash -Small key speed test - 28-byte keys - 150.91 cycles/hash -Small key speed test - 29-byte keys - 155.74 cycles/hash -Small key speed test - 30-byte keys - 159.94 cycles/hash -Small key speed test - 31-byte keys - 164.93 cycles/hash -Average 94.168 cycles/hash +Alignment 7 - 0.221 bytes/cycle - 631.79 MiB/sec @ 3 ghz +Alignment 6 - 0.221 bytes/cycle - 631.79 MiB/sec @ 3 ghz +Alignment 5 - 0.221 bytes/cycle - 631.78 MiB/sec @ 3 ghz +Alignment 4 - 0.221 bytes/cycle - 631.79 MiB/sec @ 3 ghz +Alignment 3 - 0.221 bytes/cycle - 631.78 MiB/sec @ 3 ghz +Alignment 2 - 0.221 bytes/cycle - 631.78 MiB/sec @ 3 ghz +Alignment 1 - 0.221 bytes/cycle - 631.79 MiB/sec @ 3 ghz +Alignment 0 - 0.221 bytes/cycle - 631.78 MiB/sec @ 3 ghz +Average - 0.221 bytes/cycle - 631.79 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 23.00 cycles/hash +Small key speed test - 2-byte keys - 28.74 cycles/hash +Small key speed test - 3-byte keys - 32.88 cycles/hash +Small key speed test - 4-byte keys - 37.12 cycles/hash +Small key speed test - 5-byte keys - 41.58 cycles/hash +Small key speed test - 6-byte keys - 45.82 cycles/hash +Small key speed test - 7-byte keys - 50.24 cycles/hash +Small key speed test - 8-byte keys - 54.48 cycles/hash +Small key speed test - 9-byte keys - 59.00 cycles/hash +Small key speed test - 10-byte keys - 63.21 cycles/hash +Small key speed test - 11-byte keys - 68.00 cycles/hash +Small key speed test - 12-byte keys - 72.56 cycles/hash +Small key speed test - 13-byte keys - 77.12 cycles/hash +Small key speed test - 14-byte keys - 82.00 cycles/hash +Small key speed test - 15-byte keys - 86.30 cycles/hash +Small key speed test - 16-byte keys - 91.00 cycles/hash +Small key speed test - 17-byte keys - 95.13 cycles/hash +Small key speed test - 18-byte keys - 100.00 cycles/hash +Small key speed test - 19-byte keys - 104.12 cycles/hash +Small key speed test - 20-byte keys - 109.00 cycles/hash +Small key speed test - 21-byte keys - 113.13 cycles/hash +Small key speed test - 22-byte keys - 118.00 cycles/hash +Small key speed test - 23-byte keys - 122.11 cycles/hash +Small key speed test - 24-byte keys - 127.00 cycles/hash +Small key speed test - 25-byte keys - 131.15 cycles/hash +Small key speed test - 26-byte keys - 136.00 cycles/hash +Small key speed test - 27-byte keys - 140.32 cycles/hash +Small key speed test - 28-byte keys - 145.26 cycles/hash +Small key speed test - 29-byte keys - 150.21 cycles/hash +Small key speed test - 30-byte keys - 154.00 cycles/hash +Small key speed test - 31-byte keys - 158.63 cycles/hash +Small key speed test - 32-byte keys - 163.00 cycles/hash +Average 93.128 cycles/hash +Average, weighted by key length freq. 92.754 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 74.598 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/MUM.txt b/doc/MUM.txt index 9f73b0a3..6c8c2e4c 100644 --- a/doc/MUM.txt +++ b/doc/MUM.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x132b74b1e8bec - 0x132b74b1e8b80). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 3.339 bytes/cycle - 9551.53 MiB/sec @ 3 ghz -Alignment 6 - 3.343 bytes/cycle - 9563.08 MiB/sec @ 3 ghz -Alignment 5 - 3.343 bytes/cycle - 9564.38 MiB/sec @ 3 ghz -Alignment 4 - 3.343 bytes/cycle - 9564.82 MiB/sec @ 3 ghz -Alignment 3 - 3.343 bytes/cycle - 9564.31 MiB/sec @ 3 ghz -Alignment 2 - 3.348 bytes/cycle - 9579.24 MiB/sec @ 3 ghz -Alignment 1 - 3.343 bytes/cycle - 9565.79 MiB/sec @ 3 ghz -Alignment 0 - 3.341 bytes/cycle - 9558.75 MiB/sec @ 3 ghz -Average - 3.343 bytes/cycle - 9563.99 MiB/sec @ 3 ghz +Alignment 7 - 3.362 bytes/cycle - 9618.20 MiB/sec @ 3 ghz +Alignment 6 - 3.365 bytes/cycle - 9627.68 MiB/sec @ 3 ghz +Alignment 5 - 3.365 bytes/cycle - 9627.31 MiB/sec @ 3 ghz +Alignment 4 - 3.370 bytes/cycle - 9642.20 MiB/sec @ 3 ghz +Alignment 3 - 3.370 bytes/cycle - 9642.62 MiB/sec @ 3 ghz +Alignment 2 - 3.370 bytes/cycle - 9642.17 MiB/sec @ 3 ghz +Alignment 1 - 3.364 bytes/cycle - 9625.08 MiB/sec @ 3 ghz +Alignment 0 - 3.364 bytes/cycle - 9624.81 MiB/sec @ 3 ghz +Average - 3.366 bytes/cycle - 9631.26 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 32.00 cycles/hash Small key speed test - 2-byte keys - 32.00 cycles/hash -Small key speed test - 3-byte keys - 35.51 cycles/hash +Small key speed test - 3-byte keys - 35.00 cycles/hash Small key speed test - 4-byte keys - 32.00 cycles/hash -Small key speed test - 5-byte keys - 32.82 cycles/hash -Small key speed test - 6-byte keys - 35.33 cycles/hash +Small key speed test - 5-byte keys - 33.00 cycles/hash +Small key speed test - 6-byte keys - 35.00 cycles/hash Small key speed test - 7-byte keys - 36.00 cycles/hash -Small key speed test - 8-byte keys - 30.75 cycles/hash +Small key speed test - 8-byte keys - 30.80 cycles/hash Small key speed test - 9-byte keys - 32.00 cycles/hash Small key speed test - 10-byte keys - 32.00 cycles/hash -Small key speed test - 11-byte keys - 36.76 cycles/hash +Small key speed test - 11-byte keys - 36.00 cycles/hash Small key speed test - 12-byte keys - 32.00 cycles/hash -Small key speed test - 13-byte keys - 34.73 cycles/hash -Small key speed test - 14-byte keys - 36.41 cycles/hash -Small key speed test - 15-byte keys - 37.52 cycles/hash -Small key speed test - 16-byte keys - 31.97 cycles/hash -Small key speed test - 17-byte keys - 33.78 cycles/hash -Small key speed test - 18-byte keys - 33.86 cycles/hash +Small key speed test - 13-byte keys - 34.00 cycles/hash +Small key speed test - 14-byte keys - 36.22 cycles/hash +Small key speed test - 15-byte keys - 37.00 cycles/hash +Small key speed test - 16-byte keys - 31.60 cycles/hash +Small key speed test - 17-byte keys - 33.58 cycles/hash +Small key speed test - 18-byte keys - 33.76 cycles/hash Small key speed test - 19-byte keys - 37.00 cycles/hash -Small key speed test - 20-byte keys - 33.88 cycles/hash -Small key speed test - 21-byte keys - 34.44 cycles/hash +Small key speed test - 20-byte keys - 33.65 cycles/hash +Small key speed test - 21-byte keys - 34.00 cycles/hash Small key speed test - 22-byte keys - 37.00 cycles/hash -Small key speed test - 23-byte keys - 38.57 cycles/hash -Small key speed test - 24-byte keys - 33.91 cycles/hash -Small key speed test - 25-byte keys - 35.93 cycles/hash -Small key speed test - 26-byte keys - 35.97 cycles/hash +Small key speed test - 23-byte keys - 38.00 cycles/hash +Small key speed test - 24-byte keys - 33.27 cycles/hash +Small key speed test - 25-byte keys - 35.62 cycles/hash +Small key speed test - 26-byte keys - 35.26 cycles/hash Small key speed test - 27-byte keys - 39.00 cycles/hash -Small key speed test - 28-byte keys - 35.98 cycles/hash -Small key speed test - 29-byte keys - 36.13 cycles/hash -Small key speed test - 30-byte keys - 39.33 cycles/hash -Small key speed test - 31-byte keys - 40.23 cycles/hash -Average 34.994 cycles/hash +Small key speed test - 28-byte keys - 35.25 cycles/hash +Small key speed test - 29-byte keys - 36.00 cycles/hash +Small key speed test - 30-byte keys - 39.00 cycles/hash +Small key speed test - 31-byte keys - 39.94 cycles/hash +Small key speed test - 32-byte keys - 35.97 cycles/hash +Average 34.779 cycles/hash +Average, weighted by key length freq. 34.538 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 32.617 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/MUMlow.txt b/doc/MUMlow.txt index 29baf416..0c1a8b35 100644 --- a/doc/MUMlow.txt +++ b/doc/MUMlow.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x132bf819e5eac - 0x132bf819e5e64). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 3.240 bytes/cycle - 9269.73 MiB/sec @ 3 ghz -Alignment 6 - 3.239 bytes/cycle - 9268.22 MiB/sec @ 3 ghz -Alignment 5 - 3.235 bytes/cycle - 9255.13 MiB/sec @ 3 ghz -Alignment 4 - 3.234 bytes/cycle - 9253.70 MiB/sec @ 3 ghz -Alignment 3 - 3.239 bytes/cycle - 9267.45 MiB/sec @ 3 ghz -Alignment 2 - 3.239 bytes/cycle - 9268.13 MiB/sec @ 3 ghz -Alignment 1 - 3.239 bytes/cycle - 9267.61 MiB/sec @ 3 ghz -Alignment 0 - 3.231 bytes/cycle - 9245.16 MiB/sec @ 3 ghz -Average - 3.237 bytes/cycle - 9261.89 MiB/sec @ 3 ghz +Alignment 7 - 2.706 bytes/cycle - 7742.37 MiB/sec @ 3 ghz +Alignment 6 - 2.706 bytes/cycle - 7742.73 MiB/sec @ 3 ghz +Alignment 5 - 2.706 bytes/cycle - 7741.90 MiB/sec @ 3 ghz +Alignment 4 - 2.706 bytes/cycle - 7742.20 MiB/sec @ 3 ghz +Alignment 3 - 3.267 bytes/cycle - 9347.20 MiB/sec @ 3 ghz +Alignment 2 - 3.258 bytes/cycle - 9322.07 MiB/sec @ 3 ghz +Alignment 1 - 3.256 bytes/cycle - 9315.79 MiB/sec @ 3 ghz +Alignment 0 - 3.252 bytes/cycle - 9303.09 MiB/sec @ 3 ghz +Average - 2.982 bytes/cycle - 8532.17 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 33.00 cycles/hash Small key speed test - 2-byte keys - 33.00 cycles/hash -Small key speed test - 3-byte keys - 36.56 cycles/hash +Small key speed test - 3-byte keys - 36.21 cycles/hash Small key speed test - 4-byte keys - 33.00 cycles/hash Small key speed test - 5-byte keys - 34.00 cycles/hash -Small key speed test - 6-byte keys - 36.72 cycles/hash +Small key speed test - 6-byte keys - 36.55 cycles/hash Small key speed test - 7-byte keys - 37.00 cycles/hash -Small key speed test - 8-byte keys - 31.87 cycles/hash -Small key speed test - 9-byte keys - 32.99 cycles/hash +Small key speed test - 8-byte keys - 31.99 cycles/hash +Small key speed test - 9-byte keys - 33.67 cycles/hash Small key speed test - 10-byte keys - 33.00 cycles/hash -Small key speed test - 11-byte keys - 37.75 cycles/hash +Small key speed test - 11-byte keys - 37.47 cycles/hash Small key speed test - 12-byte keys - 33.00 cycles/hash -Small key speed test - 13-byte keys - 36.00 cycles/hash -Small key speed test - 14-byte keys - 37.96 cycles/hash -Small key speed test - 15-byte keys - 39.00 cycles/hash -Small key speed test - 16-byte keys - 32.92 cycles/hash -Small key speed test - 17-byte keys - 34.99 cycles/hash -Small key speed test - 18-byte keys - 34.82 cycles/hash +Small key speed test - 13-byte keys - 35.96 cycles/hash +Small key speed test - 14-byte keys - 37.56 cycles/hash +Small key speed test - 15-byte keys - 38.49 cycles/hash +Small key speed test - 16-byte keys - 32.52 cycles/hash +Small key speed test - 17-byte keys - 34.54 cycles/hash +Small key speed test - 18-byte keys - 34.55 cycles/hash Small key speed test - 19-byte keys - 38.00 cycles/hash -Small key speed test - 20-byte keys - 34.78 cycles/hash -Small key speed test - 21-byte keys - 35.87 cycles/hash -Small key speed test - 22-byte keys - 38.45 cycles/hash -Small key speed test - 23-byte keys - 39.94 cycles/hash -Small key speed test - 24-byte keys - 34.88 cycles/hash -Small key speed test - 25-byte keys - 36.99 cycles/hash -Small key speed test - 26-byte keys - 37.00 cycles/hash -Small key speed test - 27-byte keys - 40.95 cycles/hash -Small key speed test - 28-byte keys - 37.00 cycles/hash -Small key speed test - 29-byte keys - 37.26 cycles/hash -Small key speed test - 30-byte keys - 40.95 cycles/hash -Small key speed test - 31-byte keys - 41.66 cycles/hash -Average 36.171 cycles/hash +Small key speed test - 20-byte keys - 34.70 cycles/hash +Small key speed test - 21-byte keys - 35.00 cycles/hash +Small key speed test - 22-byte keys - 38.00 cycles/hash +Small key speed test - 23-byte keys - 39.00 cycles/hash +Small key speed test - 24-byte keys - 34.52 cycles/hash +Small key speed test - 25-byte keys - 36.85 cycles/hash +Small key speed test - 26-byte keys - 36.66 cycles/hash +Small key speed test - 27-byte keys - 40.43 cycles/hash +Small key speed test - 28-byte keys - 36.56 cycles/hash +Small key speed test - 29-byte keys - 37.00 cycles/hash +Small key speed test - 30-byte keys - 40.23 cycles/hash +Small key speed test - 31-byte keys - 41.00 cycles/hash +Small key speed test - 32-byte keys - 36.99 cycles/hash +Average 35.952 cycles/hash +Average, weighted by key length freq. 35.745 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 33.858 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/MeowHash.txt b/doc/MeowHash.txt index 8dbc9711..2700ee21 100644 --- a/doc/MeowHash.txt +++ b/doc/MeowHash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x183b655906fc - 0x183b655906b4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 9.973 bytes/cycle - 28532.24 MiB/sec @ 3 ghz -Alignment 6 - 10.000 bytes/cycle - 28609.17 MiB/sec @ 3 ghz -Alignment 5 - 10.056 bytes/cycle - 28769.18 MiB/sec @ 3 ghz -Alignment 4 - 10.059 bytes/cycle - 28779.09 MiB/sec @ 3 ghz -Alignment 3 - 10.004 bytes/cycle - 28620.99 MiB/sec @ 3 ghz -Alignment 2 - 9.988 bytes/cycle - 28575.80 MiB/sec @ 3 ghz -Alignment 1 - 11.618 bytes/cycle - 33240.13 MiB/sec @ 3 ghz -Alignment 0 - 12.104 bytes/cycle - 34628.61 MiB/sec @ 3 ghz -Average - 10.475 bytes/cycle - 29969.40 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 65.28 cycles/hash -Small key speed test - 2-byte keys - 64.85 cycles/hash -Small key speed test - 3-byte keys - 65.25 cycles/hash -Small key speed test - 4-byte keys - 65.22 cycles/hash -Small key speed test - 5-byte keys - 65.31 cycles/hash -Small key speed test - 6-byte keys - 65.18 cycles/hash -Small key speed test - 7-byte keys - 65.26 cycles/hash -Small key speed test - 8-byte keys - 65.19 cycles/hash -Small key speed test - 9-byte keys - 65.29 cycles/hash -Small key speed test - 10-byte keys - 65.32 cycles/hash -Small key speed test - 11-byte keys - 65.17 cycles/hash -Small key speed test - 12-byte keys - 65.27 cycles/hash -Small key speed test - 13-byte keys - 65.25 cycles/hash -Small key speed test - 14-byte keys - 65.22 cycles/hash -Small key speed test - 15-byte keys - 65.29 cycles/hash +Alignment 7 - 9.987 bytes/cycle - 28572.20 MiB/sec @ 3 ghz +Alignment 6 - 9.993 bytes/cycle - 28590.16 MiB/sec @ 3 ghz +Alignment 5 - 10.050 bytes/cycle - 28754.10 MiB/sec @ 3 ghz +Alignment 4 - 10.052 bytes/cycle - 28758.70 MiB/sec @ 3 ghz +Alignment 3 - 10.000 bytes/cycle - 28610.59 MiB/sec @ 3 ghz +Alignment 2 - 9.997 bytes/cycle - 28600.56 MiB/sec @ 3 ghz +Alignment 1 - 11.623 bytes/cycle - 33254.78 MiB/sec @ 3 ghz +Alignment 0 - 12.100 bytes/cycle - 34617.38 MiB/sec @ 3 ghz +Average - 10.475 bytes/cycle - 29969.81 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 64.96 cycles/hash +Small key speed test - 2-byte keys - 64.88 cycles/hash +Small key speed test - 3-byte keys - 64.80 cycles/hash +Small key speed test - 4-byte keys - 65.00 cycles/hash +Small key speed test - 5-byte keys - 65.10 cycles/hash +Small key speed test - 6-byte keys - 64.93 cycles/hash +Small key speed test - 7-byte keys - 64.79 cycles/hash +Small key speed test - 8-byte keys - 64.96 cycles/hash +Small key speed test - 9-byte keys - 65.02 cycles/hash +Small key speed test - 10-byte keys - 64.89 cycles/hash +Small key speed test - 11-byte keys - 64.72 cycles/hash +Small key speed test - 12-byte keys - 64.98 cycles/hash +Small key speed test - 13-byte keys - 64.98 cycles/hash +Small key speed test - 14-byte keys - 65.12 cycles/hash +Small key speed test - 15-byte keys - 64.81 cycles/hash Small key speed test - 16-byte keys - 65.00 cycles/hash -Small key speed test - 17-byte keys - 64.67 cycles/hash -Small key speed test - 18-byte keys - 64.73 cycles/hash -Small key speed test - 19-byte keys - 64.69 cycles/hash -Small key speed test - 20-byte keys - 64.72 cycles/hash -Small key speed test - 21-byte keys - 64.70 cycles/hash -Small key speed test - 22-byte keys - 64.67 cycles/hash -Small key speed test - 23-byte keys - 64.68 cycles/hash -Small key speed test - 24-byte keys - 64.65 cycles/hash -Small key speed test - 25-byte keys - 64.66 cycles/hash -Small key speed test - 26-byte keys - 64.73 cycles/hash -Small key speed test - 27-byte keys - 64.67 cycles/hash -Small key speed test - 28-byte keys - 64.71 cycles/hash -Small key speed test - 29-byte keys - 64.63 cycles/hash -Small key speed test - 30-byte keys - 64.69 cycles/hash -Small key speed test - 31-byte keys - 64.69 cycles/hash -Average 64.956 cycles/hash +Small key speed test - 17-byte keys - 64.81 cycles/hash +Small key speed test - 18-byte keys - 64.74 cycles/hash +Small key speed test - 19-byte keys - 64.78 cycles/hash +Small key speed test - 20-byte keys - 64.74 cycles/hash +Small key speed test - 21-byte keys - 64.78 cycles/hash +Small key speed test - 22-byte keys - 64.77 cycles/hash +Small key speed test - 23-byte keys - 64.77 cycles/hash +Small key speed test - 24-byte keys - 64.79 cycles/hash +Small key speed test - 25-byte keys - 64.79 cycles/hash +Small key speed test - 26-byte keys - 64.78 cycles/hash +Small key speed test - 27-byte keys - 64.74 cycles/hash +Small key speed test - 28-byte keys - 64.78 cycles/hash +Small key speed test - 29-byte keys - 64.77 cycles/hash +Small key speed test - 30-byte keys - 64.78 cycles/hash +Small key speed test - 31-byte keys - 64.78 cycles/hash +Small key speed test - 32-byte keys - 66.38 cycles/hash +Average 64.903 cycles/hash +Average, weighted by key length freq. 64.878 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 64.968 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/MeowHash32low.txt b/doc/MeowHash32low.txt index 45b83603..ac421256 100644 --- a/doc/MeowHash32low.txt +++ b/doc/MeowHash32low.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x1822abcf0b9c - 0x1822abcf0b54). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 8.257 bytes/cycle - 23624.60 MiB/sec @ 3 ghz -Alignment 6 - 8.258 bytes/cycle - 23625.84 MiB/sec @ 3 ghz -Alignment 5 - 8.297 bytes/cycle - 23738.71 MiB/sec @ 3 ghz -Alignment 4 - 8.303 bytes/cycle - 23754.63 MiB/sec @ 3 ghz -Alignment 3 - 8.964 bytes/cycle - 25645.24 MiB/sec @ 3 ghz -Alignment 2 - 9.884 bytes/cycle - 28277.87 MiB/sec @ 3 ghz -Alignment 1 - 11.448 bytes/cycle - 32752.23 MiB/sec @ 3 ghz -Alignment 0 - 11.932 bytes/cycle - 34137.50 MiB/sec @ 3 ghz -Average - 9.418 bytes/cycle - 26944.58 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 66.06 cycles/hash -Small key speed test - 2-byte keys - 66.11 cycles/hash -Small key speed test - 3-byte keys - 66.01 cycles/hash -Small key speed test - 4-byte keys - 66.08 cycles/hash -Small key speed test - 5-byte keys - 66.09 cycles/hash -Small key speed test - 6-byte keys - 66.07 cycles/hash -Small key speed test - 7-byte keys - 65.96 cycles/hash -Small key speed test - 8-byte keys - 66.07 cycles/hash -Small key speed test - 9-byte keys - 66.16 cycles/hash -Small key speed test - 10-byte keys - 66.13 cycles/hash -Small key speed test - 11-byte keys - 66.12 cycles/hash -Small key speed test - 12-byte keys - 66.14 cycles/hash -Small key speed test - 13-byte keys - 66.15 cycles/hash -Small key speed test - 14-byte keys - 66.16 cycles/hash -Small key speed test - 15-byte keys - 66.14 cycles/hash -Small key speed test - 16-byte keys - 65.98 cycles/hash -Small key speed test - 17-byte keys - 65.80 cycles/hash -Small key speed test - 18-byte keys - 65.79 cycles/hash -Small key speed test - 19-byte keys - 65.81 cycles/hash -Small key speed test - 20-byte keys - 65.84 cycles/hash -Small key speed test - 21-byte keys - 65.75 cycles/hash -Small key speed test - 22-byte keys - 65.77 cycles/hash -Small key speed test - 23-byte keys - 65.75 cycles/hash -Small key speed test - 24-byte keys - 65.78 cycles/hash -Small key speed test - 25-byte keys - 65.79 cycles/hash -Small key speed test - 26-byte keys - 65.79 cycles/hash -Small key speed test - 27-byte keys - 65.86 cycles/hash -Small key speed test - 28-byte keys - 65.87 cycles/hash -Small key speed test - 29-byte keys - 65.79 cycles/hash -Small key speed test - 30-byte keys - 65.77 cycles/hash -Small key speed test - 31-byte keys - 65.85 cycles/hash -Average 65.949 cycles/hash +Alignment 7 - 10.195 bytes/cycle - 29167.10 MiB/sec @ 3 ghz +Alignment 6 - 10.196 bytes/cycle - 29169.76 MiB/sec @ 3 ghz +Alignment 5 - 10.245 bytes/cycle - 29310.87 MiB/sec @ 3 ghz +Alignment 4 - 10.255 bytes/cycle - 29338.63 MiB/sec @ 3 ghz +Alignment 3 - 10.190 bytes/cycle - 29152.86 MiB/sec @ 3 ghz +Alignment 2 - 10.193 bytes/cycle - 29161.47 MiB/sec @ 3 ghz +Alignment 1 - 11.853 bytes/cycle - 33910.57 MiB/sec @ 3 ghz +Alignment 0 - 12.334 bytes/cycle - 35289.04 MiB/sec @ 3 ghz +Average - 10.682 bytes/cycle - 30562.54 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 63.65 cycles/hash +Small key speed test - 2-byte keys - 63.51 cycles/hash +Small key speed test - 3-byte keys - 63.39 cycles/hash +Small key speed test - 4-byte keys - 63.54 cycles/hash +Small key speed test - 5-byte keys - 63.68 cycles/hash +Small key speed test - 6-byte keys - 63.59 cycles/hash +Small key speed test - 7-byte keys - 63.69 cycles/hash +Small key speed test - 8-byte keys - 63.64 cycles/hash +Small key speed test - 9-byte keys - 63.65 cycles/hash +Small key speed test - 10-byte keys - 63.76 cycles/hash +Small key speed test - 11-byte keys - 63.48 cycles/hash +Small key speed test - 12-byte keys - 63.74 cycles/hash +Small key speed test - 13-byte keys - 63.70 cycles/hash +Small key speed test - 14-byte keys - 63.64 cycles/hash +Small key speed test - 15-byte keys - 63.54 cycles/hash +Small key speed test - 16-byte keys - 63.82 cycles/hash +Small key speed test - 17-byte keys - 64.03 cycles/hash +Small key speed test - 18-byte keys - 63.46 cycles/hash +Small key speed test - 19-byte keys - 63.41 cycles/hash +Small key speed test - 20-byte keys - 63.00 cycles/hash +Small key speed test - 21-byte keys - 63.41 cycles/hash +Small key speed test - 22-byte keys - 63.39 cycles/hash +Small key speed test - 23-byte keys - 63.92 cycles/hash +Small key speed test - 24-byte keys - 63.44 cycles/hash +Small key speed test - 25-byte keys - 63.44 cycles/hash +Small key speed test - 26-byte keys - 63.45 cycles/hash +Small key speed test - 27-byte keys - 63.48 cycles/hash +Small key speed test - 28-byte keys - 63.70 cycles/hash +Small key speed test - 29-byte keys - 65.15 cycles/hash +Small key speed test - 30-byte keys - 63.99 cycles/hash +Small key speed test - 31-byte keys - 64.91 cycles/hash +Small key speed test - 32-byte keys - 66.55 cycles/hash +Average 63.773 cycles/hash +Average, weighted by key length freq. 63.659 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 63.718 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/MeowHash64low.txt b/doc/MeowHash64low.txt index c633bb98..c5d60c59 100644 --- a/doc/MeowHash64low.txt +++ b/doc/MeowHash64low.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x182f0424543c - 0x182f042453d0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 9.806 bytes/cycle - 28054.74 MiB/sec @ 3 ghz -Alignment 6 - 9.833 bytes/cycle - 28133.33 MiB/sec @ 3 ghz -Alignment 5 - 9.893 bytes/cycle - 28302.81 MiB/sec @ 3 ghz -Alignment 4 - 9.899 bytes/cycle - 28320.98 MiB/sec @ 3 ghz -Alignment 3 - 9.836 bytes/cycle - 28140.45 MiB/sec @ 3 ghz -Alignment 2 - 9.841 bytes/cycle - 28155.28 MiB/sec @ 3 ghz -Alignment 1 - 11.438 bytes/cycle - 32723.66 MiB/sec @ 3 ghz -Alignment 0 - 11.903 bytes/cycle - 34053.46 MiB/sec @ 3 ghz -Average - 10.306 bytes/cycle - 29485.59 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 66.19 cycles/hash -Small key speed test - 2-byte keys - 66.14 cycles/hash -Small key speed test - 3-byte keys - 66.12 cycles/hash -Small key speed test - 4-byte keys - 66.07 cycles/hash -Small key speed test - 5-byte keys - 66.13 cycles/hash -Small key speed test - 6-byte keys - 66.21 cycles/hash -Small key speed test - 7-byte keys - 66.10 cycles/hash -Small key speed test - 8-byte keys - 66.11 cycles/hash -Small key speed test - 9-byte keys - 66.12 cycles/hash -Small key speed test - 10-byte keys - 66.18 cycles/hash -Small key speed test - 11-byte keys - 66.09 cycles/hash -Small key speed test - 12-byte keys - 66.09 cycles/hash -Small key speed test - 13-byte keys - 66.17 cycles/hash -Small key speed test - 14-byte keys - 66.18 cycles/hash -Small key speed test - 15-byte keys - 66.19 cycles/hash -Small key speed test - 16-byte keys - 65.97 cycles/hash -Small key speed test - 17-byte keys - 65.86 cycles/hash -Small key speed test - 18-byte keys - 65.78 cycles/hash -Small key speed test - 19-byte keys - 65.83 cycles/hash -Small key speed test - 20-byte keys - 65.81 cycles/hash -Small key speed test - 21-byte keys - 65.77 cycles/hash -Small key speed test - 22-byte keys - 65.86 cycles/hash -Small key speed test - 23-byte keys - 65.82 cycles/hash -Small key speed test - 24-byte keys - 65.80 cycles/hash -Small key speed test - 25-byte keys - 65.85 cycles/hash -Small key speed test - 26-byte keys - 65.87 cycles/hash -Small key speed test - 27-byte keys - 65.84 cycles/hash -Small key speed test - 28-byte keys - 65.82 cycles/hash -Small key speed test - 29-byte keys - 65.79 cycles/hash -Small key speed test - 30-byte keys - 65.84 cycles/hash -Small key speed test - 31-byte keys - 65.83 cycles/hash -Average 65.982 cycles/hash +Alignment 7 - 10.183 bytes/cycle - 29134.57 MiB/sec @ 3 ghz +Alignment 6 - 10.194 bytes/cycle - 29165.11 MiB/sec @ 3 ghz +Alignment 5 - 10.242 bytes/cycle - 29302.91 MiB/sec @ 3 ghz +Alignment 4 - 10.250 bytes/cycle - 29325.12 MiB/sec @ 3 ghz +Alignment 3 - 10.194 bytes/cycle - 29164.63 MiB/sec @ 3 ghz +Alignment 2 - 10.185 bytes/cycle - 29140.37 MiB/sec @ 3 ghz +Alignment 1 - 11.088 bytes/cycle - 31724.29 MiB/sec @ 3 ghz +Alignment 0 - 9.979 bytes/cycle - 28550.63 MiB/sec @ 3 ghz +Average - 10.289 bytes/cycle - 29438.45 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 72.04 cycles/hash +Small key speed test - 2-byte keys - 63.54 cycles/hash +Small key speed test - 3-byte keys - 63.64 cycles/hash +Small key speed test - 4-byte keys - 63.65 cycles/hash +Small key speed test - 5-byte keys - 63.64 cycles/hash +Small key speed test - 6-byte keys - 63.80 cycles/hash +Small key speed test - 7-byte keys - 63.34 cycles/hash +Small key speed test - 8-byte keys - 63.67 cycles/hash +Small key speed test - 9-byte keys - 63.73 cycles/hash +Small key speed test - 10-byte keys - 63.74 cycles/hash +Small key speed test - 11-byte keys - 63.71 cycles/hash +Small key speed test - 12-byte keys - 63.73 cycles/hash +Small key speed test - 13-byte keys - 63.58 cycles/hash +Small key speed test - 14-byte keys - 63.70 cycles/hash +Small key speed test - 15-byte keys - 63.36 cycles/hash +Small key speed test - 16-byte keys - 63.84 cycles/hash +Small key speed test - 17-byte keys - 63.30 cycles/hash +Small key speed test - 18-byte keys - 63.33 cycles/hash +Small key speed test - 19-byte keys - 63.00 cycles/hash +Small key speed test - 20-byte keys - 63.00 cycles/hash +Small key speed test - 21-byte keys - 63.41 cycles/hash +Small key speed test - 22-byte keys - 63.00 cycles/hash +Small key speed test - 23-byte keys - 63.00 cycles/hash +Small key speed test - 24-byte keys - 63.00 cycles/hash +Small key speed test - 25-byte keys - 63.44 cycles/hash +Small key speed test - 26-byte keys - 63.00 cycles/hash +Small key speed test - 27-byte keys - 63.44 cycles/hash +Small key speed test - 28-byte keys - 63.42 cycles/hash +Small key speed test - 29-byte keys - 63.42 cycles/hash +Small key speed test - 30-byte keys - 63.50 cycles/hash +Small key speed test - 31-byte keys - 63.41 cycles/hash +Small key speed test - 32-byte keys - 65.07 cycles/hash +Average 63.764 cycles/hash +Average, weighted by key length freq. 63.475 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 63.736 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/MicroOAAT.txt b/doc/MicroOAAT.txt index 8c47099e..e830bd6b 100644 --- a/doc/MicroOAAT.txt +++ b/doc/MicroOAAT.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x15d7c15b5d44 - 0x15d7c15b5cd8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.212 bytes/cycle - 607.03 MiB/sec @ 3 ghz -Alignment 6 - 0.227 bytes/cycle - 648.21 MiB/sec @ 3 ghz -Alignment 5 - 0.254 bytes/cycle - 726.20 MiB/sec @ 3 ghz -Alignment 4 - 0.254 bytes/cycle - 725.66 MiB/sec @ 3 ghz -Alignment 3 - 0.254 bytes/cycle - 726.06 MiB/sec @ 3 ghz -Alignment 2 - 0.254 bytes/cycle - 725.85 MiB/sec @ 3 ghz -Alignment 1 - 0.254 bytes/cycle - 725.86 MiB/sec @ 3 ghz -Alignment 0 - 0.254 bytes/cycle - 725.91 MiB/sec @ 3 ghz -Average - 0.245 bytes/cycle - 701.35 MiB/sec @ 3 ghz +Alignment 7 - 0.255 bytes/cycle - 730.92 MiB/sec @ 3 ghz +Alignment 6 - 0.255 bytes/cycle - 730.87 MiB/sec @ 3 ghz +Alignment 5 - 0.255 bytes/cycle - 730.82 MiB/sec @ 3 ghz +Alignment 4 - 0.255 bytes/cycle - 730.83 MiB/sec @ 3 ghz +Alignment 3 - 0.255 bytes/cycle - 730.90 MiB/sec @ 3 ghz +Alignment 2 - 0.255 bytes/cycle - 730.91 MiB/sec @ 3 ghz +Alignment 1 - 0.255 bytes/cycle - 730.93 MiB/sec @ 3 ghz +Alignment 0 - 0.255 bytes/cycle - 730.91 MiB/sec @ 3 ghz +Average - 0.255 bytes/cycle - 730.89 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 18.00 cycles/hash Small key speed test - 2-byte keys - 22.00 cycles/hash -Small key speed test - 3-byte keys - 26.00 cycles/hash +Small key speed test - 3-byte keys - 25.99 cycles/hash Small key speed test - 4-byte keys - 30.00 cycles/hash Small key speed test - 5-byte keys - 34.00 cycles/hash -Small key speed test - 6-byte keys - 38.00 cycles/hash -Small key speed test - 7-byte keys - 42.00 cycles/hash -Small key speed test - 8-byte keys - 45.17 cycles/hash -Small key speed test - 9-byte keys - 49.16 cycles/hash -Small key speed test - 10-byte keys - 53.83 cycles/hash -Small key speed test - 11-byte keys - 57.99 cycles/hash +Small key speed test - 6-byte keys - 37.88 cycles/hash +Small key speed test - 7-byte keys - 41.69 cycles/hash +Small key speed test - 8-byte keys - 45.00 cycles/hash +Small key speed test - 9-byte keys - 49.00 cycles/hash +Small key speed test - 10-byte keys - 53.00 cycles/hash +Small key speed test - 11-byte keys - 57.76 cycles/hash Small key speed test - 12-byte keys - 61.00 cycles/hash -Small key speed test - 13-byte keys - 65.00 cycles/hash -Small key speed test - 14-byte keys - 69.77 cycles/hash -Small key speed test - 15-byte keys - 73.00 cycles/hash -Small key speed test - 16-byte keys - 76.96 cycles/hash -Small key speed test - 17-byte keys - 80.66 cycles/hash +Small key speed test - 13-byte keys - 64.34 cycles/hash +Small key speed test - 14-byte keys - 69.00 cycles/hash +Small key speed test - 15-byte keys - 72.00 cycles/hash +Small key speed test - 16-byte keys - 76.98 cycles/hash +Small key speed test - 17-byte keys - 80.56 cycles/hash Small key speed test - 18-byte keys - 84.00 cycles/hash -Small key speed test - 19-byte keys - 88.12 cycles/hash +Small key speed test - 19-byte keys - 88.00 cycles/hash Small key speed test - 20-byte keys - 92.00 cycles/hash -Small key speed test - 21-byte keys - 96.58 cycles/hash -Small key speed test - 22-byte keys - 100.00 cycles/hash -Small key speed test - 23-byte keys - 103.98 cycles/hash -Small key speed test - 24-byte keys - 107.87 cycles/hash -Small key speed test - 25-byte keys - 111.88 cycles/hash -Small key speed test - 26-byte keys - 115.88 cycles/hash -Small key speed test - 27-byte keys - 118.86 cycles/hash -Small key speed test - 28-byte keys - 123.09 cycles/hash -Small key speed test - 29-byte keys - 126.27 cycles/hash -Small key speed test - 30-byte keys - 130.96 cycles/hash -Small key speed test - 31-byte keys - 135.00 cycles/hash -Average 76.678 cycles/hash +Small key speed test - 21-byte keys - 96.00 cycles/hash +Small key speed test - 22-byte keys - 99.49 cycles/hash +Small key speed test - 23-byte keys - 103.28 cycles/hash +Small key speed test - 24-byte keys - 106.99 cycles/hash +Small key speed test - 25-byte keys - 110.98 cycles/hash +Small key speed test - 26-byte keys - 115.00 cycles/hash +Small key speed test - 27-byte keys - 118.94 cycles/hash +Small key speed test - 28-byte keys - 122.00 cycles/hash +Small key speed test - 29-byte keys - 126.30 cycles/hash +Small key speed test - 30-byte keys - 130.99 cycles/hash +Small key speed test - 31-byte keys - 133.98 cycles/hash +Small key speed test - 32-byte keys - 137.98 cycles/hash +Average 78.254 cycles/hash +Average, weighted by key length freq. 78.121 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 62.675 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Murmur1.txt b/doc/Murmur1.txt index 32369414..08ac3f55 100644 --- a/doc/Murmur1.txt +++ b/doc/Murmur1.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x16d70bb477c8 - 0x16d70bb47780). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.709 bytes/cycle - 2027.61 MiB/sec @ 3 ghz -Alignment 6 - 0.709 bytes/cycle - 2027.63 MiB/sec @ 3 ghz -Alignment 5 - 0.709 bytes/cycle - 2027.57 MiB/sec @ 3 ghz -Alignment 4 - 0.709 bytes/cycle - 2028.28 MiB/sec @ 3 ghz -Alignment 3 - 0.709 bytes/cycle - 2027.52 MiB/sec @ 3 ghz -Alignment 2 - 0.709 bytes/cycle - 2027.68 MiB/sec @ 3 ghz -Alignment 1 - 0.709 bytes/cycle - 2028.47 MiB/sec @ 3 ghz -Alignment 0 - 0.709 bytes/cycle - 2028.03 MiB/sec @ 3 ghz -Average - 0.709 bytes/cycle - 2027.85 MiB/sec @ 3 ghz +Alignment 7 - 0.592 bytes/cycle - 1694.96 MiB/sec @ 3 ghz +Alignment 6 - 0.593 bytes/cycle - 1697.99 MiB/sec @ 3 ghz +Alignment 5 - 0.716 bytes/cycle - 2047.45 MiB/sec @ 3 ghz +Alignment 4 - 0.713 bytes/cycle - 2041.06 MiB/sec @ 3 ghz +Alignment 3 - 0.713 bytes/cycle - 2040.23 MiB/sec @ 3 ghz +Alignment 2 - 0.713 bytes/cycle - 2040.43 MiB/sec @ 3 ghz +Alignment 1 - 0.713 bytes/cycle - 2040.37 MiB/sec @ 3 ghz +Alignment 0 - 0.713 bytes/cycle - 2040.39 MiB/sec @ 3 ghz +Average - 0.683 bytes/cycle - 1955.36 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 28.00 cycles/hash Small key speed test - 2-byte keys - 30.00 cycles/hash -Small key speed test - 3-byte keys - 31.59 cycles/hash +Small key speed test - 3-byte keys - 31.00 cycles/hash Small key speed test - 4-byte keys - 28.00 cycles/hash -Small key speed test - 5-byte keys - 34.71 cycles/hash +Small key speed test - 5-byte keys - 34.13 cycles/hash Small key speed test - 6-byte keys - 35.00 cycles/hash -Small key speed test - 7-byte keys - 36.00 cycles/hash +Small key speed test - 7-byte keys - 35.97 cycles/hash Small key speed test - 8-byte keys - 34.00 cycles/hash -Small key speed test - 9-byte keys - 39.57 cycles/hash +Small key speed test - 9-byte keys - 39.00 cycles/hash Small key speed test - 10-byte keys - 41.00 cycles/hash Small key speed test - 11-byte keys - 42.00 cycles/hash -Small key speed test - 12-byte keys - 39.98 cycles/hash -Small key speed test - 13-byte keys - 45.16 cycles/hash -Small key speed test - 14-byte keys - 47.00 cycles/hash -Small key speed test - 15-byte keys - 47.97 cycles/hash -Small key speed test - 16-byte keys - 45.26 cycles/hash -Small key speed test - 17-byte keys - 51.00 cycles/hash +Small key speed test - 12-byte keys - 39.56 cycles/hash +Small key speed test - 13-byte keys - 45.00 cycles/hash +Small key speed test - 14-byte keys - 46.97 cycles/hash +Small key speed test - 15-byte keys - 47.81 cycles/hash +Small key speed test - 16-byte keys - 45.00 cycles/hash +Small key speed test - 17-byte keys - 50.99 cycles/hash Small key speed test - 18-byte keys - 52.00 cycles/hash Small key speed test - 19-byte keys - 53.00 cycles/hash -Small key speed test - 20-byte keys - 50.99 cycles/hash -Small key speed test - 21-byte keys - 57.00 cycles/hash -Small key speed test - 22-byte keys - 57.72 cycles/hash -Small key speed test - 23-byte keys - 58.79 cycles/hash -Small key speed test - 24-byte keys - 56.50 cycles/hash -Small key speed test - 25-byte keys - 63.00 cycles/hash -Small key speed test - 26-byte keys - 63.82 cycles/hash -Small key speed test - 27-byte keys - 64.90 cycles/hash -Small key speed test - 28-byte keys - 62.00 cycles/hash -Small key speed test - 29-byte keys - 67.93 cycles/hash -Small key speed test - 30-byte keys - 69.00 cycles/hash -Small key speed test - 31-byte keys - 70.84 cycles/hash -Average 48.507 cycles/hash +Small key speed test - 20-byte keys - 50.85 cycles/hash +Small key speed test - 21-byte keys - 56.85 cycles/hash +Small key speed test - 22-byte keys - 57.00 cycles/hash +Small key speed test - 23-byte keys - 58.00 cycles/hash +Small key speed test - 24-byte keys - 56.00 cycles/hash +Small key speed test - 25-byte keys - 62.92 cycles/hash +Small key speed test - 26-byte keys - 63.00 cycles/hash +Small key speed test - 27-byte keys - 64.00 cycles/hash +Small key speed test - 28-byte keys - 61.95 cycles/hash +Small key speed test - 29-byte keys - 67.00 cycles/hash +Small key speed test - 30-byte keys - 68.93 cycles/hash +Small key speed test - 31-byte keys - 70.00 cycles/hash +Small key speed test - 32-byte keys - 67.95 cycles/hash +Average 48.840 cycles/hash +Average, weighted by key length freq. 48.807 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 42.101 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/Murmur2.txt b/doc/Murmur2.txt index 41e1f60e..5a4e4fe6 100644 --- a/doc/Murmur2.txt +++ b/doc/Murmur2.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x16e3799e52c8 - 0x16e3799e525c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.080 bytes/cycle - 3088.87 MiB/sec @ 3 ghz -Alignment 6 - 1.080 bytes/cycle - 3089.36 MiB/sec @ 3 ghz -Alignment 5 - 1.080 bytes/cycle - 3088.91 MiB/sec @ 3 ghz -Alignment 4 - 1.080 bytes/cycle - 3089.31 MiB/sec @ 3 ghz -Alignment 3 - 1.080 bytes/cycle - 3089.64 MiB/sec @ 3 ghz -Alignment 2 - 1.079 bytes/cycle - 3087.67 MiB/sec @ 3 ghz -Alignment 1 - 1.080 bytes/cycle - 3089.57 MiB/sec @ 3 ghz -Alignment 0 - 1.080 bytes/cycle - 3090.11 MiB/sec @ 3 ghz -Average - 1.080 bytes/cycle - 3089.18 MiB/sec @ 3 ghz +Alignment 7 - 1.077 bytes/cycle - 3082.42 MiB/sec @ 3 ghz +Alignment 6 - 1.077 bytes/cycle - 3081.65 MiB/sec @ 3 ghz +Alignment 5 - 1.077 bytes/cycle - 3081.39 MiB/sec @ 3 ghz +Alignment 4 - 1.077 bytes/cycle - 3082.23 MiB/sec @ 3 ghz +Alignment 3 - 1.077 bytes/cycle - 3082.03 MiB/sec @ 3 ghz +Alignment 2 - 1.077 bytes/cycle - 3082.09 MiB/sec @ 3 ghz +Alignment 1 - 1.077 bytes/cycle - 3082.30 MiB/sec @ 3 ghz +Alignment 0 - 1.077 bytes/cycle - 3082.14 MiB/sec @ 3 ghz +Average - 1.077 bytes/cycle - 3082.03 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 23.00 cycles/hash Small key speed test - 2-byte keys - 25.00 cycles/hash Small key speed test - 3-byte keys - 26.00 cycles/hash Small key speed test - 4-byte keys - 28.00 cycles/hash Small key speed test - 5-byte keys - 32.00 cycles/hash -Small key speed test - 6-byte keys - 32.34 cycles/hash -Small key speed test - 7-byte keys - 33.12 cycles/hash -Small key speed test - 8-byte keys - 31.93 cycles/hash +Small key speed test - 6-byte keys - 32.81 cycles/hash +Small key speed test - 7-byte keys - 33.25 cycles/hash +Small key speed test - 8-byte keys - 31.86 cycles/hash Small key speed test - 9-byte keys - 36.00 cycles/hash Small key speed test - 10-byte keys - 37.00 cycles/hash -Small key speed test - 11-byte keys - 37.80 cycles/hash -Small key speed test - 12-byte keys - 36.96 cycles/hash -Small key speed test - 13-byte keys - 39.42 cycles/hash -Small key speed test - 14-byte keys - 40.53 cycles/hash +Small key speed test - 11-byte keys - 37.00 cycles/hash +Small key speed test - 12-byte keys - 36.98 cycles/hash +Small key speed test - 13-byte keys - 39.66 cycles/hash +Small key speed test - 14-byte keys - 40.00 cycles/hash Small key speed test - 15-byte keys - 41.00 cycles/hash -Small key speed test - 16-byte keys - 39.85 cycles/hash -Small key speed test - 17-byte keys - 43.13 cycles/hash -Small key speed test - 18-byte keys - 44.00 cycles/hash -Small key speed test - 19-byte keys - 46.00 cycles/hash +Small key speed test - 16-byte keys - 39.91 cycles/hash +Small key speed test - 17-byte keys - 43.22 cycles/hash +Small key speed test - 18-byte keys - 44.30 cycles/hash +Small key speed test - 19-byte keys - 45.00 cycles/hash Small key speed test - 20-byte keys - 43.00 cycles/hash Small key speed test - 21-byte keys - 47.00 cycles/hash -Small key speed test - 22-byte keys - 48.00 cycles/hash -Small key speed test - 23-byte keys - 48.94 cycles/hash +Small key speed test - 22-byte keys - 47.92 cycles/hash +Small key speed test - 23-byte keys - 48.93 cycles/hash Small key speed test - 24-byte keys - 47.00 cycles/hash -Small key speed test - 25-byte keys - 50.61 cycles/hash -Small key speed test - 26-byte keys - 51.70 cycles/hash -Small key speed test - 27-byte keys - 52.76 cycles/hash -Small key speed test - 28-byte keys - 50.70 cycles/hash -Small key speed test - 29-byte keys - 54.00 cycles/hash +Small key speed test - 25-byte keys - 50.81 cycles/hash +Small key speed test - 26-byte keys - 51.79 cycles/hash +Small key speed test - 27-byte keys - 52.78 cycles/hash +Small key speed test - 28-byte keys - 50.83 cycles/hash +Small key speed test - 29-byte keys - 54.46 cycles/hash Small key speed test - 30-byte keys - 55.00 cycles/hash Small key speed test - 31-byte keys - 56.00 cycles/hash -Average 41.219 cycles/hash +Small key speed test - 32-byte keys - 54.44 cycles/hash +Average 41.624 cycles/hash +Average, weighted by key length freq. 42.055 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 37.809 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Murmur2A.txt b/doc/Murmur2A.txt index f58330c3..05ae778a 100644 --- a/doc/Murmur2A.txt +++ b/doc/Murmur2A.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x16edd39f29c8 - 0x16edd39f2980). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.078 bytes/cycle - 3084.97 MiB/sec @ 3 ghz -Alignment 6 - 1.080 bytes/cycle - 3088.55 MiB/sec @ 3 ghz -Alignment 5 - 1.080 bytes/cycle - 3089.75 MiB/sec @ 3 ghz -Alignment 4 - 1.079 bytes/cycle - 3086.75 MiB/sec @ 3 ghz -Alignment 3 - 1.079 bytes/cycle - 3088.05 MiB/sec @ 3 ghz -Alignment 2 - 1.080 bytes/cycle - 3089.59 MiB/sec @ 3 ghz -Alignment 1 - 1.079 bytes/cycle - 3086.98 MiB/sec @ 3 ghz -Alignment 0 - 1.080 bytes/cycle - 3089.24 MiB/sec @ 3 ghz -Average - 1.079 bytes/cycle - 3087.98 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 33.00 cycles/hash -Small key speed test - 2-byte keys - 34.26 cycles/hash -Small key speed test - 3-byte keys - 35.00 cycles/hash -Small key speed test - 4-byte keys - 35.00 cycles/hash -Small key speed test - 5-byte keys - 36.00 cycles/hash +Alignment 7 - 0.889 bytes/cycle - 2542.20 MiB/sec @ 3 ghz +Alignment 6 - 0.889 bytes/cycle - 2542.20 MiB/sec @ 3 ghz +Alignment 5 - 0.889 bytes/cycle - 2542.20 MiB/sec @ 3 ghz +Alignment 4 - 0.889 bytes/cycle - 2542.20 MiB/sec @ 3 ghz +Alignment 3 - 1.106 bytes/cycle - 3164.39 MiB/sec @ 3 ghz +Alignment 2 - 1.104 bytes/cycle - 3158.28 MiB/sec @ 3 ghz +Alignment 1 - 1.102 bytes/cycle - 3153.69 MiB/sec @ 3 ghz +Alignment 0 - 1.104 bytes/cycle - 3158.00 MiB/sec @ 3 ghz +Average - 0.996 bytes/cycle - 2850.40 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 32.00 cycles/hash +Small key speed test - 2-byte keys - 34.00 cycles/hash +Small key speed test - 3-byte keys - 34.33 cycles/hash +Small key speed test - 4-byte keys - 34.00 cycles/hash +Small key speed test - 5-byte keys - 35.15 cycles/hash Small key speed test - 6-byte keys - 37.00 cycles/hash -Small key speed test - 7-byte keys - 37.85 cycles/hash -Small key speed test - 8-byte keys - 40.00 cycles/hash -Small key speed test - 9-byte keys - 38.65 cycles/hash -Small key speed test - 10-byte keys - 40.00 cycles/hash -Small key speed test - 11-byte keys - 40.00 cycles/hash -Small key speed test - 12-byte keys - 43.58 cycles/hash -Small key speed test - 13-byte keys - 43.00 cycles/hash -Small key speed test - 14-byte keys - 43.00 cycles/hash -Small key speed test - 15-byte keys - 43.00 cycles/hash -Small key speed test - 16-byte keys - 46.00 cycles/hash -Small key speed test - 17-byte keys - 48.00 cycles/hash -Small key speed test - 18-byte keys - 48.00 cycles/hash -Small key speed test - 19-byte keys - 48.00 cycles/hash -Small key speed test - 20-byte keys - 52.00 cycles/hash -Small key speed test - 21-byte keys - 50.00 cycles/hash -Small key speed test - 22-byte keys - 51.00 cycles/hash -Small key speed test - 23-byte keys - 51.00 cycles/hash -Small key speed test - 24-byte keys - 53.55 cycles/hash -Small key speed test - 25-byte keys - 54.00 cycles/hash -Small key speed test - 26-byte keys - 54.00 cycles/hash -Small key speed test - 27-byte keys - 55.00 cycles/hash -Small key speed test - 28-byte keys - 58.00 cycles/hash -Small key speed test - 29-byte keys - 57.97 cycles/hash -Small key speed test - 30-byte keys - 58.00 cycles/hash -Small key speed test - 31-byte keys - 59.00 cycles/hash -Average 45.899 cycles/hash +Small key speed test - 7-byte keys - 37.00 cycles/hash +Small key speed test - 8-byte keys - 39.29 cycles/hash +Small key speed test - 9-byte keys - 38.00 cycles/hash +Small key speed test - 10-byte keys - 39.00 cycles/hash +Small key speed test - 11-byte keys - 39.00 cycles/hash +Small key speed test - 12-byte keys - 42.97 cycles/hash +Small key speed test - 13-byte keys - 42.19 cycles/hash +Small key speed test - 14-byte keys - 42.15 cycles/hash +Small key speed test - 15-byte keys - 42.70 cycles/hash +Small key speed test - 16-byte keys - 45.00 cycles/hash +Small key speed test - 17-byte keys - 47.00 cycles/hash +Small key speed test - 18-byte keys - 47.00 cycles/hash +Small key speed test - 19-byte keys - 47.00 cycles/hash +Small key speed test - 20-byte keys - 51.00 cycles/hash +Small key speed test - 21-byte keys - 49.00 cycles/hash +Small key speed test - 22-byte keys - 50.00 cycles/hash +Small key speed test - 23-byte keys - 50.00 cycles/hash +Small key speed test - 24-byte keys - 52.00 cycles/hash +Small key speed test - 25-byte keys - 53.00 cycles/hash +Small key speed test - 26-byte keys - 53.15 cycles/hash +Small key speed test - 27-byte keys - 54.00 cycles/hash +Small key speed test - 28-byte keys - 57.00 cycles/hash +Small key speed test - 29-byte keys - 57.00 cycles/hash +Small key speed test - 30-byte keys - 63.31 cycles/hash +Small key speed test - 31-byte keys - 72.00 cycles/hash +Small key speed test - 32-byte keys - 75.15 cycles/hash +Average 46.605 cycles/hash +Average, weighted by key length freq. 45.578 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 41.580 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Murmur2B.txt b/doc/Murmur2B.txt index 2cb52ab5..96fb587b 100644 --- a/doc/Murmur2B.txt +++ b/doc/Murmur2B.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x16f93d9b7d54 - 0x16f93d9b7ce8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.776 bytes/cycle - 5081.83 MiB/sec @ 3 ghz -Alignment 6 - 1.807 bytes/cycle - 5170.33 MiB/sec @ 3 ghz -Alignment 5 - 2.168 bytes/cycle - 6203.01 MiB/sec @ 3 ghz -Alignment 4 - 2.165 bytes/cycle - 6194.17 MiB/sec @ 3 ghz -Alignment 3 - 2.158 bytes/cycle - 6174.29 MiB/sec @ 3 ghz -Alignment 2 - 2.159 bytes/cycle - 6177.49 MiB/sec @ 3 ghz -Alignment 1 - 2.158 bytes/cycle - 6174.69 MiB/sec @ 3 ghz -Alignment 0 - 2.160 bytes/cycle - 6179.25 MiB/sec @ 3 ghz -Average - 2.069 bytes/cycle - 5919.38 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 25.00 cycles/hash -Small key speed test - 2-byte keys - 27.00 cycles/hash -Small key speed test - 3-byte keys - 28.00 cycles/hash -Small key speed test - 4-byte keys - 29.00 cycles/hash +Alignment 7 - 1.934 bytes/cycle - 5532.68 MiB/sec @ 3 ghz +Alignment 6 - 2.139 bytes/cycle - 6118.54 MiB/sec @ 3 ghz +Alignment 5 - 2.137 bytes/cycle - 6115.06 MiB/sec @ 3 ghz +Alignment 4 - 2.137 bytes/cycle - 6115.05 MiB/sec @ 3 ghz +Alignment 3 - 2.137 bytes/cycle - 6115.04 MiB/sec @ 3 ghz +Alignment 2 - 2.137 bytes/cycle - 6115.08 MiB/sec @ 3 ghz +Alignment 1 - 2.134 bytes/cycle - 6104.06 MiB/sec @ 3 ghz +Alignment 0 - 2.134 bytes/cycle - 6104.15 MiB/sec @ 3 ghz +Average - 2.111 bytes/cycle - 6039.96 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 25.99 cycles/hash +Small key speed test - 2-byte keys - 27.83 cycles/hash +Small key speed test - 3-byte keys - 28.61 cycles/hash +Small key speed test - 4-byte keys - 30.00 cycles/hash Small key speed test - 5-byte keys - 30.00 cycles/hash Small key speed test - 6-byte keys - 31.00 cycles/hash Small key speed test - 7-byte keys - 32.00 cycles/hash Small key speed test - 8-byte keys - 32.00 cycles/hash Small key speed test - 9-byte keys - 35.00 cycles/hash Small key speed test - 10-byte keys - 36.00 cycles/hash -Small key speed test - 11-byte keys - 37.00 cycles/hash -Small key speed test - 12-byte keys - 38.00 cycles/hash -Small key speed test - 13-byte keys - 39.00 cycles/hash -Small key speed test - 14-byte keys - 40.00 cycles/hash +Small key speed test - 11-byte keys - 37.24 cycles/hash +Small key speed test - 12-byte keys - 38.87 cycles/hash +Small key speed test - 13-byte keys - 39.46 cycles/hash +Small key speed test - 14-byte keys - 40.65 cycles/hash Small key speed test - 15-byte keys - 41.00 cycles/hash Small key speed test - 16-byte keys - 36.00 cycles/hash -Small key speed test - 17-byte keys - 39.00 cycles/hash -Small key speed test - 18-byte keys - 40.00 cycles/hash -Small key speed test - 19-byte keys - 40.84 cycles/hash -Small key speed test - 20-byte keys - 41.78 cycles/hash -Small key speed test - 21-byte keys - 42.23 cycles/hash -Small key speed test - 22-byte keys - 43.00 cycles/hash -Small key speed test - 23-byte keys - 44.11 cycles/hash +Small key speed test - 17-byte keys - 39.79 cycles/hash +Small key speed test - 18-byte keys - 40.93 cycles/hash +Small key speed test - 19-byte keys - 41.00 cycles/hash +Small key speed test - 20-byte keys - 42.00 cycles/hash +Small key speed test - 21-byte keys - 43.00 cycles/hash +Small key speed test - 22-byte keys - 43.71 cycles/hash +Small key speed test - 23-byte keys - 44.98 cycles/hash Small key speed test - 24-byte keys - 39.00 cycles/hash Small key speed test - 25-byte keys - 43.00 cycles/hash -Small key speed test - 26-byte keys - 43.31 cycles/hash +Small key speed test - 26-byte keys - 44.00 cycles/hash Small key speed test - 27-byte keys - 45.00 cycles/hash Small key speed test - 28-byte keys - 45.00 cycles/hash -Small key speed test - 29-byte keys - 45.96 cycles/hash -Small key speed test - 30-byte keys - 47.22 cycles/hash -Small key speed test - 31-byte keys - 48.00 cycles/hash -Average 38.176 cycles/hash +Small key speed test - 29-byte keys - 46.00 cycles/hash +Small key speed test - 30-byte keys - 47.96 cycles/hash +Small key speed test - 31-byte keys - 48.52 cycles/hash +Small key speed test - 32-byte keys - 43.00 cycles/hash +Average 38.704 cycles/hash +Average, weighted by key length freq. 39.802 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 35.919 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Murmur2C.txt b/doc/Murmur2C.txt index c8beeee5..ff202d97 100644 --- a/doc/Murmur2C.txt +++ b/doc/Murmur2C.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x170269607988 - 0x17026960791c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.346 bytes/cycle - 3849.88 MiB/sec @ 3 ghz -Alignment 6 - 1.345 bytes/cycle - 3848.59 MiB/sec @ 3 ghz -Alignment 5 - 1.345 bytes/cycle - 3847.41 MiB/sec @ 3 ghz -Alignment 4 - 1.345 bytes/cycle - 3848.98 MiB/sec @ 3 ghz -Alignment 3 - 1.320 bytes/cycle - 3776.17 MiB/sec @ 3 ghz -Alignment 2 - 1.318 bytes/cycle - 3769.74 MiB/sec @ 3 ghz -Alignment 1 - 1.319 bytes/cycle - 3774.21 MiB/sec @ 3 ghz -Alignment 0 - 1.319 bytes/cycle - 3772.87 MiB/sec @ 3 ghz -Average - 1.332 bytes/cycle - 3810.98 MiB/sec @ 3 ghz +Alignment 7 - 1.343 bytes/cycle - 3841.07 MiB/sec @ 3 ghz +Alignment 6 - 1.343 bytes/cycle - 3841.71 MiB/sec @ 3 ghz +Alignment 5 - 1.343 bytes/cycle - 3841.28 MiB/sec @ 3 ghz +Alignment 4 - 1.343 bytes/cycle - 3841.96 MiB/sec @ 3 ghz +Alignment 3 - 1.316 bytes/cycle - 3766.20 MiB/sec @ 3 ghz +Alignment 2 - 1.317 bytes/cycle - 3767.18 MiB/sec @ 3 ghz +Alignment 1 - 1.316 bytes/cycle - 3766.11 MiB/sec @ 3 ghz +Alignment 0 - 1.313 bytes/cycle - 3755.97 MiB/sec @ 3 ghz +Average - 1.329 bytes/cycle - 3802.68 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 36.00 cycles/hash Small key speed test - 2-byte keys - 38.00 cycles/hash Small key speed test - 3-byte keys - 39.00 cycles/hash Small key speed test - 4-byte keys - 41.00 cycles/hash -Small key speed test - 5-byte keys - 40.93 cycles/hash +Small key speed test - 5-byte keys - 41.00 cycles/hash Small key speed test - 6-byte keys - 41.00 cycles/hash -Small key speed test - 7-byte keys - 41.00 cycles/hash -Small key speed test - 8-byte keys - 42.99 cycles/hash +Small key speed test - 7-byte keys - 41.24 cycles/hash +Small key speed test - 8-byte keys - 43.00 cycles/hash Small key speed test - 9-byte keys - 47.00 cycles/hash Small key speed test - 10-byte keys - 48.00 cycles/hash -Small key speed test - 11-byte keys - 48.29 cycles/hash -Small key speed test - 12-byte keys - 43.24 cycles/hash -Small key speed test - 13-byte keys - 47.33 cycles/hash -Small key speed test - 14-byte keys - 47.29 cycles/hash -Small key speed test - 15-byte keys - 48.78 cycles/hash -Small key speed test - 16-byte keys - 46.00 cycles/hash -Small key speed test - 17-byte keys - 50.43 cycles/hash -Small key speed test - 18-byte keys - 52.33 cycles/hash -Small key speed test - 19-byte keys - 52.00 cycles/hash +Small key speed test - 11-byte keys - 49.00 cycles/hash +Small key speed test - 12-byte keys - 44.00 cycles/hash +Small key speed test - 13-byte keys - 47.99 cycles/hash +Small key speed test - 14-byte keys - 47.99 cycles/hash +Small key speed test - 15-byte keys - 49.17 cycles/hash +Small key speed test - 16-byte keys - 46.75 cycles/hash +Small key speed test - 17-byte keys - 51.15 cycles/hash +Small key speed test - 18-byte keys - 53.00 cycles/hash +Small key speed test - 19-byte keys - 52.58 cycles/hash Small key speed test - 20-byte keys - 48.00 cycles/hash -Small key speed test - 21-byte keys - 50.47 cycles/hash -Small key speed test - 22-byte keys - 52.57 cycles/hash -Small key speed test - 23-byte keys - 55.00 cycles/hash -Small key speed test - 24-byte keys - 55.00 cycles/hash -Small key speed test - 25-byte keys - 59.00 cycles/hash -Small key speed test - 26-byte keys - 59.00 cycles/hash -Small key speed test - 27-byte keys - 59.60 cycles/hash -Small key speed test - 28-byte keys - 55.00 cycles/hash -Small key speed test - 29-byte keys - 58.00 cycles/hash -Small key speed test - 30-byte keys - 59.59 cycles/hash -Small key speed test - 31-byte keys - 60.00 cycles/hash -Average 49.091 cycles/hash +Small key speed test - 21-byte keys - 51.00 cycles/hash +Small key speed test - 22-byte keys - 53.00 cycles/hash +Small key speed test - 23-byte keys - 56.00 cycles/hash +Small key speed test - 24-byte keys - 55.18 cycles/hash +Small key speed test - 25-byte keys - 59.54 cycles/hash +Small key speed test - 26-byte keys - 59.54 cycles/hash +Small key speed test - 27-byte keys - 60.24 cycles/hash +Small key speed test - 28-byte keys - 55.29 cycles/hash +Small key speed test - 29-byte keys - 59.00 cycles/hash +Small key speed test - 30-byte keys - 60.00 cycles/hash +Small key speed test - 31-byte keys - 60.81 cycles/hash +Small key speed test - 32-byte keys - 59.78 cycles/hash +Average 49.821 cycles/hash +Average, weighted by key length freq. 50.019 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 46.647 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Murmur3A.txt b/doc/Murmur3A.txt index 926f20ae..5e96d615 100644 --- a/doc/Murmur3A.txt +++ b/doc/Murmur3A.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x170daa54991c - 0x170daa5498b0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.041 bytes/cycle - 2978.59 MiB/sec @ 3 ghz -Alignment 6 - 1.043 bytes/cycle - 2984.43 MiB/sec @ 3 ghz -Alignment 5 - 1.040 bytes/cycle - 2976.19 MiB/sec @ 3 ghz -Alignment 4 - 1.046 bytes/cycle - 2992.31 MiB/sec @ 3 ghz -Alignment 3 - 1.042 bytes/cycle - 2979.79 MiB/sec @ 3 ghz -Alignment 2 - 1.040 bytes/cycle - 2975.35 MiB/sec @ 3 ghz -Alignment 1 - 1.041 bytes/cycle - 2978.89 MiB/sec @ 3 ghz -Alignment 0 - 1.047 bytes/cycle - 2995.80 MiB/sec @ 3 ghz -Average - 1.043 bytes/cycle - 2982.67 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 35.00 cycles/hash -Small key speed test - 2-byte keys - 36.81 cycles/hash -Small key speed test - 3-byte keys - 37.00 cycles/hash -Small key speed test - 4-byte keys - 38.00 cycles/hash -Small key speed test - 5-byte keys - 38.73 cycles/hash -Small key speed test - 6-byte keys - 39.86 cycles/hash -Small key speed test - 7-byte keys - 40.00 cycles/hash +Alignment 7 - 1.058 bytes/cycle - 3026.46 MiB/sec @ 3 ghz +Alignment 6 - 1.058 bytes/cycle - 3026.85 MiB/sec @ 3 ghz +Alignment 5 - 1.056 bytes/cycle - 3022.40 MiB/sec @ 3 ghz +Alignment 4 - 1.062 bytes/cycle - 3037.97 MiB/sec @ 3 ghz +Alignment 3 - 1.056 bytes/cycle - 3021.43 MiB/sec @ 3 ghz +Alignment 2 - 1.058 bytes/cycle - 3026.72 MiB/sec @ 3 ghz +Alignment 1 - 1.056 bytes/cycle - 3021.27 MiB/sec @ 3 ghz +Alignment 0 - 1.061 bytes/cycle - 3035.29 MiB/sec @ 3 ghz +Average - 1.058 bytes/cycle - 3027.30 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 34.77 cycles/hash +Small key speed test - 2-byte keys - 36.00 cycles/hash +Small key speed test - 3-byte keys - 36.91 cycles/hash +Small key speed test - 4-byte keys - 37.00 cycles/hash +Small key speed test - 5-byte keys - 38.00 cycles/hash +Small key speed test - 6-byte keys - 39.00 cycles/hash +Small key speed test - 7-byte keys - 39.19 cycles/hash Small key speed test - 8-byte keys - 41.00 cycles/hash -Small key speed test - 9-byte keys - 42.99 cycles/hash -Small key speed test - 10-byte keys - 42.99 cycles/hash -Small key speed test - 11-byte keys - 43.24 cycles/hash -Small key speed test - 12-byte keys - 45.55 cycles/hash -Small key speed test - 13-byte keys - 46.00 cycles/hash +Small key speed test - 9-byte keys - 42.00 cycles/hash +Small key speed test - 10-byte keys - 42.00 cycles/hash +Small key speed test - 11-byte keys - 43.00 cycles/hash +Small key speed test - 12-byte keys - 45.00 cycles/hash +Small key speed test - 13-byte keys - 45.77 cycles/hash Small key speed test - 14-byte keys - 46.00 cycles/hash -Small key speed test - 15-byte keys - 47.00 cycles/hash -Small key speed test - 16-byte keys - 49.00 cycles/hash -Small key speed test - 17-byte keys - 50.00 cycles/hash -Small key speed test - 18-byte keys - 50.13 cycles/hash -Small key speed test - 19-byte keys - 50.00 cycles/hash -Small key speed test - 20-byte keys - 52.99 cycles/hash -Small key speed test - 21-byte keys - 55.93 cycles/hash -Small key speed test - 22-byte keys - 55.00 cycles/hash -Small key speed test - 23-byte keys - 55.00 cycles/hash -Small key speed test - 24-byte keys - 58.12 cycles/hash -Small key speed test - 25-byte keys - 58.79 cycles/hash -Small key speed test - 26-byte keys - 59.00 cycles/hash -Small key speed test - 27-byte keys - 58.89 cycles/hash -Small key speed test - 28-byte keys - 61.12 cycles/hash -Small key speed test - 29-byte keys - 62.00 cycles/hash -Small key speed test - 30-byte keys - 62.19 cycles/hash -Small key speed test - 31-byte keys - 62.98 cycles/hash -Average 49.075 cycles/hash +Small key speed test - 15-byte keys - 46.56 cycles/hash +Small key speed test - 16-byte keys - 48.55 cycles/hash +Small key speed test - 17-byte keys - 49.42 cycles/hash +Small key speed test - 18-byte keys - 49.76 cycles/hash +Small key speed test - 19-byte keys - 49.96 cycles/hash +Small key speed test - 20-byte keys - 52.46 cycles/hash +Small key speed test - 21-byte keys - 55.00 cycles/hash +Small key speed test - 22-byte keys - 54.79 cycles/hash +Small key speed test - 23-byte keys - 54.00 cycles/hash +Small key speed test - 24-byte keys - 57.00 cycles/hash +Small key speed test - 25-byte keys - 57.87 cycles/hash +Small key speed test - 26-byte keys - 58.00 cycles/hash +Small key speed test - 27-byte keys - 58.71 cycles/hash +Small key speed test - 28-byte keys - 61.00 cycles/hash +Small key speed test - 29-byte keys - 61.84 cycles/hash +Small key speed test - 30-byte keys - 61.33 cycles/hash +Small key speed test - 31-byte keys - 61.82 cycles/hash +Small key speed test - 32-byte keys - 63.91 cycles/hash +Average 48.988 cycles/hash +Average, weighted by key length freq. 48.746 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 45.014 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Murmur3C.txt b/doc/Murmur3C.txt index 95efa2fb..95d35eb3 100644 --- a/doc/Murmur3C.txt +++ b/doc/Murmur3C.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x172497f2b53c - 0x172497f2b4f4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.689 bytes/cycle - 4832.94 MiB/sec @ 3 ghz -Alignment 6 - 1.690 bytes/cycle - 4835.66 MiB/sec @ 3 ghz -Alignment 5 - 1.691 bytes/cycle - 4836.57 MiB/sec @ 3 ghz -Alignment 4 - 1.699 bytes/cycle - 4859.49 MiB/sec @ 3 ghz -Alignment 3 - 1.683 bytes/cycle - 4814.60 MiB/sec @ 3 ghz -Alignment 2 - 1.683 bytes/cycle - 4814.99 MiB/sec @ 3 ghz -Alignment 1 - 1.683 bytes/cycle - 4814.48 MiB/sec @ 3 ghz -Alignment 0 - 1.698 bytes/cycle - 4856.68 MiB/sec @ 3 ghz -Average - 1.689 bytes/cycle - 4833.18 MiB/sec @ 3 ghz +Alignment 7 - 1.686 bytes/cycle - 4824.29 MiB/sec @ 3 ghz +Alignment 6 - 1.687 bytes/cycle - 4827.88 MiB/sec @ 3 ghz +Alignment 5 - 1.688 bytes/cycle - 4828.11 MiB/sec @ 3 ghz +Alignment 4 - 1.696 bytes/cycle - 4851.05 MiB/sec @ 3 ghz +Alignment 3 - 1.680 bytes/cycle - 4805.74 MiB/sec @ 3 ghz +Alignment 2 - 1.680 bytes/cycle - 4807.04 MiB/sec @ 3 ghz +Alignment 1 - 1.680 bytes/cycle - 4806.47 MiB/sec @ 3 ghz +Alignment 0 - 1.695 bytes/cycle - 4849.03 MiB/sec @ 3 ghz +Average - 1.686 bytes/cycle - 4824.95 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 46.00 cycles/hash -Small key speed test - 2-byte keys - 46.53 cycles/hash -Small key speed test - 3-byte keys - 47.74 cycles/hash -Small key speed test - 4-byte keys - 48.56 cycles/hash +Small key speed test - 2-byte keys - 46.72 cycles/hash +Small key speed test - 3-byte keys - 47.84 cycles/hash +Small key speed test - 4-byte keys - 48.65 cycles/hash Small key speed test - 5-byte keys - 49.00 cycles/hash -Small key speed test - 6-byte keys - 50.52 cycles/hash -Small key speed test - 7-byte keys - 51.22 cycles/hash +Small key speed test - 6-byte keys - 50.55 cycles/hash +Small key speed test - 7-byte keys - 51.00 cycles/hash Small key speed test - 8-byte keys - 52.00 cycles/hash Small key speed test - 9-byte keys - 53.99 cycles/hash Small key speed test - 10-byte keys - 52.00 cycles/hash Small key speed test - 11-byte keys - 54.00 cycles/hash -Small key speed test - 12-byte keys - 55.97 cycles/hash -Small key speed test - 13-byte keys - 56.48 cycles/hash -Small key speed test - 14-byte keys - 57.25 cycles/hash -Small key speed test - 15-byte keys - 58.46 cycles/hash -Small key speed test - 16-byte keys - 55.78 cycles/hash -Small key speed test - 17-byte keys - 55.57 cycles/hash -Small key speed test - 18-byte keys - 56.45 cycles/hash -Small key speed test - 19-byte keys - 58.00 cycles/hash -Small key speed test - 20-byte keys - 58.00 cycles/hash -Small key speed test - 21-byte keys - 60.00 cycles/hash -Small key speed test - 22-byte keys - 60.26 cycles/hash +Small key speed test - 12-byte keys - 55.99 cycles/hash +Small key speed test - 13-byte keys - 56.75 cycles/hash +Small key speed test - 14-byte keys - 57.00 cycles/hash +Small key speed test - 15-byte keys - 58.88 cycles/hash +Small key speed test - 16-byte keys - 55.99 cycles/hash +Small key speed test - 17-byte keys - 56.00 cycles/hash +Small key speed test - 18-byte keys - 56.72 cycles/hash +Small key speed test - 19-byte keys - 57.95 cycles/hash +Small key speed test - 20-byte keys - 60.33 cycles/hash +Small key speed test - 21-byte keys - 59.97 cycles/hash +Small key speed test - 22-byte keys - 60.19 cycles/hash Small key speed test - 23-byte keys - 61.00 cycles/hash -Small key speed test - 24-byte keys - 61.73 cycles/hash -Small key speed test - 25-byte keys - 61.67 cycles/hash -Small key speed test - 26-byte keys - 64.00 cycles/hash +Small key speed test - 24-byte keys - 61.96 cycles/hash +Small key speed test - 25-byte keys - 61.83 cycles/hash +Small key speed test - 26-byte keys - 63.98 cycles/hash Small key speed test - 27-byte keys - 65.00 cycles/hash -Small key speed test - 28-byte keys - 64.72 cycles/hash -Small key speed test - 29-byte keys - 66.72 cycles/hash -Small key speed test - 30-byte keys - 66.61 cycles/hash -Small key speed test - 31-byte keys - 67.75 cycles/hash -Average 56.870 cycles/hash +Small key speed test - 28-byte keys - 64.93 cycles/hash +Small key speed test - 29-byte keys - 67.13 cycles/hash +Small key speed test - 30-byte keys - 67.41 cycles/hash +Small key speed test - 31-byte keys - 67.82 cycles/hash +Small key speed test - 32-byte keys - 68.00 cycles/hash +Average 57.393 cycles/hash +Average, weighted by key length freq. 57.531 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 54.833 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Murmur3F.txt b/doc/Murmur3F.txt index eb0d289c..f3f73e36 100644 --- a/doc/Murmur3F.txt +++ b/doc/Murmur3F.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x132ac0a888a9c - 0x132ac0a888a54). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.666 bytes/cycle - 7627.99 MiB/sec @ 3 ghz -Alignment 6 - 2.666 bytes/cycle - 7627.90 MiB/sec @ 3 ghz -Alignment 5 - 2.661 bytes/cycle - 7613.60 MiB/sec @ 3 ghz -Alignment 4 - 2.666 bytes/cycle - 7627.77 MiB/sec @ 3 ghz -Alignment 3 - 2.662 bytes/cycle - 7615.66 MiB/sec @ 3 ghz -Alignment 2 - 2.666 bytes/cycle - 7628.32 MiB/sec @ 3 ghz -Alignment 1 - 2.666 bytes/cycle - 7627.81 MiB/sec @ 3 ghz -Alignment 0 - 2.663 bytes/cycle - 7618.50 MiB/sec @ 3 ghz -Average - 2.665 bytes/cycle - 7623.44 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 43.00 cycles/hash -Small key speed test - 2-byte keys - 45.00 cycles/hash -Small key speed test - 3-byte keys - 45.52 cycles/hash -Small key speed test - 4-byte keys - 47.00 cycles/hash +Alignment 7 - 2.232 bytes/cycle - 6384.98 MiB/sec @ 3 ghz +Alignment 6 - 2.232 bytes/cycle - 6384.90 MiB/sec @ 3 ghz +Alignment 5 - 2.232 bytes/cycle - 6384.95 MiB/sec @ 3 ghz +Alignment 4 - 2.429 bytes/cycle - 6949.39 MiB/sec @ 3 ghz +Alignment 3 - 2.688 bytes/cycle - 7691.17 MiB/sec @ 3 ghz +Alignment 2 - 2.685 bytes/cycle - 7682.46 MiB/sec @ 3 ghz +Alignment 1 - 2.685 bytes/cycle - 7682.06 MiB/sec @ 3 ghz +Alignment 0 - 2.682 bytes/cycle - 7672.69 MiB/sec @ 3 ghz +Average - 2.483 bytes/cycle - 7104.08 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 42.65 cycles/hash +Small key speed test - 2-byte keys - 44.24 cycles/hash +Small key speed test - 3-byte keys - 45.28 cycles/hash +Small key speed test - 4-byte keys - 46.98 cycles/hash Small key speed test - 5-byte keys - 48.00 cycles/hash -Small key speed test - 6-byte keys - 49.00 cycles/hash -Small key speed test - 7-byte keys - 50.00 cycles/hash -Small key speed test - 8-byte keys - 49.96 cycles/hash +Small key speed test - 6-byte keys - 48.93 cycles/hash +Small key speed test - 7-byte keys - 49.97 cycles/hash +Small key speed test - 8-byte keys - 49.55 cycles/hash Small key speed test - 9-byte keys - 52.00 cycles/hash Small key speed test - 10-byte keys - 53.00 cycles/hash -Small key speed test - 11-byte keys - 54.00 cycles/hash +Small key speed test - 11-byte keys - 53.22 cycles/hash Small key speed test - 12-byte keys - 55.00 cycles/hash -Small key speed test - 13-byte keys - 54.12 cycles/hash -Small key speed test - 14-byte keys - 56.22 cycles/hash -Small key speed test - 15-byte keys - 56.17 cycles/hash -Small key speed test - 16-byte keys - 47.97 cycles/hash +Small key speed test - 13-byte keys - 54.00 cycles/hash +Small key speed test - 14-byte keys - 56.00 cycles/hash +Small key speed test - 15-byte keys - 55.53 cycles/hash +Small key speed test - 16-byte keys - 47.00 cycles/hash Small key speed test - 17-byte keys - 48.00 cycles/hash -Small key speed test - 18-byte keys - 49.73 cycles/hash -Small key speed test - 19-byte keys - 51.00 cycles/hash -Small key speed test - 20-byte keys - 51.48 cycles/hash -Small key speed test - 21-byte keys - 52.85 cycles/hash -Small key speed test - 22-byte keys - 53.94 cycles/hash -Small key speed test - 23-byte keys - 54.46 cycles/hash -Small key speed test - 24-byte keys - 55.61 cycles/hash -Small key speed test - 25-byte keys - 57.00 cycles/hash -Small key speed test - 26-byte keys - 57.55 cycles/hash -Small key speed test - 27-byte keys - 58.00 cycles/hash -Small key speed test - 28-byte keys - 58.00 cycles/hash -Small key speed test - 29-byte keys - 58.81 cycles/hash -Small key speed test - 30-byte keys - 59.95 cycles/hash -Small key speed test - 31-byte keys - 60.91 cycles/hash -Average 52.685 cycles/hash +Small key speed test - 18-byte keys - 49.00 cycles/hash +Small key speed test - 19-byte keys - 50.98 cycles/hash +Small key speed test - 20-byte keys - 51.26 cycles/hash +Small key speed test - 21-byte keys - 53.22 cycles/hash +Small key speed test - 22-byte keys - 55.00 cycles/hash +Small key speed test - 23-byte keys - 56.00 cycles/hash +Small key speed test - 24-byte keys - 56.61 cycles/hash +Small key speed test - 25-byte keys - 56.43 cycles/hash +Small key speed test - 26-byte keys - 57.41 cycles/hash +Small key speed test - 27-byte keys - 57.98 cycles/hash +Small key speed test - 28-byte keys - 59.00 cycles/hash +Small key speed test - 29-byte keys - 58.99 cycles/hash +Small key speed test - 30-byte keys - 60.00 cycles/hash +Small key speed test - 31-byte keys - 60.97 cycles/hash +Small key speed test - 32-byte keys - 53.82 cycles/hash +Average 52.688 cycles/hash +Average, weighted by key length freq. 53.065 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 50.311 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/MurmurOAAT.txt b/doc/MurmurOAAT.txt index 588d41f9..1109d191 100644 --- a/doc/MurmurOAAT.txt +++ b/doc/MurmurOAAT.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x16a74a6ff148 - 0x16a74a6ff0dc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.177 bytes/cycle - 506.65 MiB/sec @ 3 ghz -Alignment 6 - 0.177 bytes/cycle - 506.65 MiB/sec @ 3 ghz -Alignment 5 - 0.177 bytes/cycle - 506.59 MiB/sec @ 3 ghz -Alignment 4 - 0.177 bytes/cycle - 506.66 MiB/sec @ 3 ghz -Alignment 3 - 0.177 bytes/cycle - 506.65 MiB/sec @ 3 ghz -Alignment 2 - 0.177 bytes/cycle - 506.73 MiB/sec @ 3 ghz -Alignment 1 - 0.177 bytes/cycle - 506.68 MiB/sec @ 3 ghz -Alignment 0 - 0.177 bytes/cycle - 506.69 MiB/sec @ 3 ghz -Average - 0.177 bytes/cycle - 506.66 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 18.66 cycles/hash -Small key speed test - 2-byte keys - 24.63 cycles/hash -Small key speed test - 3-byte keys - 30.00 cycles/hash -Small key speed test - 4-byte keys - 36.00 cycles/hash +Alignment 7 - 0.180 bytes/cycle - 513.72 MiB/sec @ 3 ghz +Alignment 6 - 0.180 bytes/cycle - 513.73 MiB/sec @ 3 ghz +Alignment 5 - 0.180 bytes/cycle - 513.63 MiB/sec @ 3 ghz +Alignment 4 - 0.180 bytes/cycle - 513.75 MiB/sec @ 3 ghz +Alignment 3 - 0.180 bytes/cycle - 513.83 MiB/sec @ 3 ghz +Alignment 2 - 0.180 bytes/cycle - 513.75 MiB/sec @ 3 ghz +Alignment 1 - 0.180 bytes/cycle - 513.76 MiB/sec @ 3 ghz +Alignment 0 - 0.180 bytes/cycle - 513.83 MiB/sec @ 3 ghz +Average - 0.180 bytes/cycle - 513.75 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 18.00 cycles/hash +Small key speed test - 2-byte keys - 24.00 cycles/hash +Small key speed test - 3-byte keys - 29.88 cycles/hash +Small key speed test - 4-byte keys - 35.00 cycles/hash Small key speed test - 5-byte keys - 41.00 cycles/hash -Small key speed test - 6-byte keys - 47.00 cycles/hash -Small key speed test - 7-byte keys - 52.79 cycles/hash -Small key speed test - 8-byte keys - 58.00 cycles/hash -Small key speed test - 9-byte keys - 63.98 cycles/hash -Small key speed test - 10-byte keys - 69.92 cycles/hash -Small key speed test - 11-byte keys - 75.00 cycles/hash -Small key speed test - 12-byte keys - 81.00 cycles/hash -Small key speed test - 13-byte keys - 86.78 cycles/hash -Small key speed test - 14-byte keys - 92.00 cycles/hash -Small key speed test - 15-byte keys - 97.73 cycles/hash -Small key speed test - 16-byte keys - 103.77 cycles/hash -Small key speed test - 17-byte keys - 108.98 cycles/hash -Small key speed test - 18-byte keys - 114.75 cycles/hash -Small key speed test - 19-byte keys - 120.00 cycles/hash -Small key speed test - 20-byte keys - 125.70 cycles/hash -Small key speed test - 21-byte keys - 131.66 cycles/hash -Small key speed test - 22-byte keys - 136.75 cycles/hash -Small key speed test - 23-byte keys - 142.70 cycles/hash -Small key speed test - 24-byte keys - 148.66 cycles/hash -Small key speed test - 25-byte keys - 153.64 cycles/hash -Small key speed test - 26-byte keys - 159.58 cycles/hash -Small key speed test - 27-byte keys - 164.61 cycles/hash -Small key speed test - 28-byte keys - 170.71 cycles/hash -Small key speed test - 29-byte keys - 176.66 cycles/hash -Small key speed test - 30-byte keys - 182.75 cycles/hash -Small key speed test - 31-byte keys - 187.70 cycles/hash -Average 103.326 cycles/hash +Small key speed test - 6-byte keys - 46.00 cycles/hash +Small key speed test - 7-byte keys - 52.00 cycles/hash +Small key speed test - 8-byte keys - 57.77 cycles/hash +Small key speed test - 9-byte keys - 63.00 cycles/hash +Small key speed test - 10-byte keys - 68.92 cycles/hash +Small key speed test - 11-byte keys - 74.00 cycles/hash +Small key speed test - 12-byte keys - 79.86 cycles/hash +Small key speed test - 13-byte keys - 85.65 cycles/hash +Small key speed test - 14-byte keys - 90.78 cycles/hash +Small key speed test - 15-byte keys - 96.63 cycles/hash +Small key speed test - 16-byte keys - 102.00 cycles/hash +Small key speed test - 17-byte keys - 107.63 cycles/hash +Small key speed test - 18-byte keys - 113.00 cycles/hash +Small key speed test - 19-byte keys - 118.72 cycles/hash +Small key speed test - 20-byte keys - 124.88 cycles/hash +Small key speed test - 21-byte keys - 131.24 cycles/hash +Small key speed test - 22-byte keys - 136.00 cycles/hash +Small key speed test - 23-byte keys - 141.95 cycles/hash +Small key speed test - 24-byte keys - 147.79 cycles/hash +Small key speed test - 25-byte keys - 152.95 cycles/hash +Small key speed test - 26-byte keys - 159.03 cycles/hash +Small key speed test - 27-byte keys - 164.08 cycles/hash +Small key speed test - 28-byte keys - 169.96 cycles/hash +Small key speed test - 29-byte keys - 175.95 cycles/hash +Small key speed test - 30-byte keys - 180.93 cycles/hash +Small key speed test - 31-byte keys - 186.86 cycles/hash +Small key speed test - 32-byte keys - 191.97 cycles/hash +Average 105.232 cycles/hash +Average, weighted by key length freq. 104.806 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 82.076 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/NOP_OAAT_read64.txt b/doc/NOP_OAAT_read64.txt index 37ceccc1..8f2191da 100644 --- a/doc/NOP_OAAT_read64.txt +++ b/doc/NOP_OAAT_read64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xfeaaa5e09c - 0xfeaaa5e054). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 9.794 bytes/cycle - 28022.20 MiB/sec @ 3 ghz -Alignment 6 - 9.797 bytes/cycle - 28028.50 MiB/sec @ 3 ghz -Alignment 5 - 9.796 bytes/cycle - 28025.61 MiB/sec @ 3 ghz -Alignment 4 - 9.795 bytes/cycle - 28023.05 MiB/sec @ 3 ghz -Alignment 3 - 9.796 bytes/cycle - 28027.91 MiB/sec @ 3 ghz -Alignment 2 - 9.794 bytes/cycle - 28020.14 MiB/sec @ 3 ghz -Alignment 1 - 9.794 bytes/cycle - 28021.28 MiB/sec @ 3 ghz -Alignment 0 - 11.035 bytes/cycle - 31571.29 MiB/sec @ 3 ghz -Average - 9.950 bytes/cycle - 28467.50 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 16.00 cycles/hash -Small key speed test - 2-byte keys - 16.00 cycles/hash -Small key speed test - 3-byte keys - 17.00 cycles/hash -Small key speed test - 4-byte keys - 17.00 cycles/hash -Small key speed test - 5-byte keys - 18.00 cycles/hash -Small key speed test - 6-byte keys - 18.00 cycles/hash -Small key speed test - 7-byte keys - 19.00 cycles/hash -Small key speed test - 8-byte keys - 19.00 cycles/hash -Small key speed test - 9-byte keys - 19.99 cycles/hash -Small key speed test - 10-byte keys - 20.58 cycles/hash -Small key speed test - 11-byte keys - 20.58 cycles/hash -Small key speed test - 12-byte keys - 21.29 cycles/hash -Small key speed test - 13-byte keys - 21.26 cycles/hash -Small key speed test - 14-byte keys - 23.00 cycles/hash -Small key speed test - 15-byte keys - 22.00 cycles/hash -Small key speed test - 16-byte keys - 13.00 cycles/hash +Alignment 7 - 4040.786 bytes/cycle - 11560782.86 MiB/sec @ 3 ghz +Alignment 6 - 4058.518 bytes/cycle - 11611513.91 MiB/sec @ 3 ghz +Alignment 5 - 4079.755 bytes/cycle - 11672273.10 MiB/sec @ 3 ghz +Alignment 4 - 4080.518 bytes/cycle - 11674454.83 MiB/sec @ 3 ghz +Alignment 3 - 4077.469 bytes/cycle - 11665732.79 MiB/sec @ 3 ghz +Alignment 2 - 4088.925 bytes/cycle - 11698507.84 MiB/sec @ 3 ghz +Alignment 1 - 4073.665 bytes/cycle - 11654848.54 MiB/sec @ 3 ghz +Alignment 0 - 4083.571 bytes/cycle - 11683189.92 MiB/sec @ 3 ghz +Average - 4072.901 bytes/cycle - 11652662.97 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 14.00 cycles/hash +Small key speed test - 2-byte keys - 14.00 cycles/hash +Small key speed test - 3-byte keys - 14.00 cycles/hash +Small key speed test - 4-byte keys - 14.00 cycles/hash +Small key speed test - 5-byte keys - 14.00 cycles/hash +Small key speed test - 6-byte keys - 14.00 cycles/hash +Small key speed test - 7-byte keys - 14.00 cycles/hash +Small key speed test - 8-byte keys - 14.00 cycles/hash +Small key speed test - 9-byte keys - 14.00 cycles/hash +Small key speed test - 10-byte keys - 14.00 cycles/hash +Small key speed test - 11-byte keys - 14.00 cycles/hash +Small key speed test - 12-byte keys - 14.00 cycles/hash +Small key speed test - 13-byte keys - 14.00 cycles/hash +Small key speed test - 14-byte keys - 14.00 cycles/hash +Small key speed test - 15-byte keys - 14.00 cycles/hash +Small key speed test - 16-byte keys - 14.00 cycles/hash Small key speed test - 17-byte keys - 14.00 cycles/hash Small key speed test - 18-byte keys - 14.00 cycles/hash -Small key speed test - 19-byte keys - 15.00 cycles/hash -Small key speed test - 20-byte keys - 15.00 cycles/hash -Small key speed test - 21-byte keys - 16.00 cycles/hash -Small key speed test - 22-byte keys - 17.00 cycles/hash -Small key speed test - 23-byte keys - 17.00 cycles/hash -Small key speed test - 24-byte keys - 19.00 cycles/hash -Small key speed test - 25-byte keys - 18.57 cycles/hash -Small key speed test - 26-byte keys - 19.49 cycles/hash -Small key speed test - 27-byte keys - 19.97 cycles/hash -Small key speed test - 28-byte keys - 21.00 cycles/hash -Small key speed test - 29-byte keys - 21.00 cycles/hash -Small key speed test - 30-byte keys - 22.07 cycles/hash -Small key speed test - 31-byte keys - 22.00 cycles/hash -Average 18.478 cycles/hash +Small key speed test - 19-byte keys - 14.00 cycles/hash +Small key speed test - 20-byte keys - 14.00 cycles/hash +Small key speed test - 21-byte keys - 14.00 cycles/hash +Small key speed test - 22-byte keys - 14.00 cycles/hash +Small key speed test - 23-byte keys - 14.00 cycles/hash +Small key speed test - 24-byte keys - 14.00 cycles/hash +Small key speed test - 25-byte keys - 14.00 cycles/hash +Small key speed test - 26-byte keys - 14.00 cycles/hash +Small key speed test - 27-byte keys - 14.00 cycles/hash +Small key speed test - 28-byte keys - 14.00 cycles/hash +Small key speed test - 29-byte keys - 14.00 cycles/hash +Small key speed test - 30-byte keys - 14.00 cycles/hash +Small key speed test - 31-byte keys - 14.00 cycles/hash +Small key speed test - 32-byte keys - 14.00 cycles/hash +Average 14.000 cycles/hash +Average, weighted by key length freq. 14.000 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 14.000 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/PMPML_32.txt b/doc/PMPML_32.txt index 2834054c..64129a57 100644 --- a/doc/PMPML_32.txt +++ b/doc/PMPML_32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1730c2c660b0 - 0x1730c2c66044). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.313 bytes/cycle - 6617.88 MiB/sec @ 3 ghz -Alignment 6 - 2.315 bytes/cycle - 6622.92 MiB/sec @ 3 ghz -Alignment 5 - 2.316 bytes/cycle - 6626.12 MiB/sec @ 3 ghz -Alignment 4 - 2.317 bytes/cycle - 6628.65 MiB/sec @ 3 ghz -Alignment 3 - 2.318 bytes/cycle - 6630.74 MiB/sec @ 3 ghz -Alignment 2 - 2.317 bytes/cycle - 6630.36 MiB/sec @ 3 ghz -Alignment 1 - 2.315 bytes/cycle - 6622.11 MiB/sec @ 3 ghz -Alignment 0 - 2.355 bytes/cycle - 6738.64 MiB/sec @ 3 ghz -Average - 2.321 bytes/cycle - 6639.68 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 38.24 cycles/hash -Small key speed test - 2-byte keys - 40.00 cycles/hash -Small key speed test - 3-byte keys - 40.00 cycles/hash -Small key speed test - 4-byte keys - 38.31 cycles/hash -Small key speed test - 5-byte keys - 39.00 cycles/hash -Small key speed test - 6-byte keys - 40.24 cycles/hash -Small key speed test - 7-byte keys - 41.00 cycles/hash -Small key speed test - 8-byte keys - 41.32 cycles/hash -Small key speed test - 9-byte keys - 41.33 cycles/hash -Small key speed test - 10-byte keys - 43.00 cycles/hash -Small key speed test - 11-byte keys - 42.00 cycles/hash -Small key speed test - 12-byte keys - 42.95 cycles/hash -Small key speed test - 13-byte keys - 43.00 cycles/hash -Small key speed test - 14-byte keys - 44.00 cycles/hash -Small key speed test - 15-byte keys - 44.00 cycles/hash -Small key speed test - 16-byte keys - 45.00 cycles/hash -Small key speed test - 17-byte keys - 45.99 cycles/hash -Small key speed test - 18-byte keys - 46.00 cycles/hash -Small key speed test - 19-byte keys - 45.00 cycles/hash -Small key speed test - 20-byte keys - 48.00 cycles/hash -Small key speed test - 21-byte keys - 48.96 cycles/hash -Small key speed test - 22-byte keys - 48.00 cycles/hash -Small key speed test - 23-byte keys - 49.21 cycles/hash -Small key speed test - 24-byte keys - 50.00 cycles/hash -Small key speed test - 25-byte keys - 49.15 cycles/hash -Small key speed test - 26-byte keys - 51.00 cycles/hash -Small key speed test - 27-byte keys - 49.60 cycles/hash -Small key speed test - 28-byte keys - 53.00 cycles/hash -Small key speed test - 29-byte keys - 52.00 cycles/hash -Small key speed test - 30-byte keys - 54.00 cycles/hash -Small key speed test - 31-byte keys - 52.00 cycles/hash -Average 45.333 cycles/hash +Alignment 7 - 2.408 bytes/cycle - 6890.58 MiB/sec @ 3 ghz +Alignment 6 - 2.407 bytes/cycle - 6887.06 MiB/sec @ 3 ghz +Alignment 5 - 2.408 bytes/cycle - 6890.46 MiB/sec @ 3 ghz +Alignment 4 - 2.410 bytes/cycle - 6894.17 MiB/sec @ 3 ghz +Alignment 3 - 2.407 bytes/cycle - 6886.82 MiB/sec @ 3 ghz +Alignment 2 - 2.408 bytes/cycle - 6889.99 MiB/sec @ 3 ghz +Alignment 1 - 2.410 bytes/cycle - 6895.12 MiB/sec @ 3 ghz +Alignment 0 - 2.447 bytes/cycle - 7000.18 MiB/sec @ 3 ghz +Average - 2.413 bytes/cycle - 6904.30 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 37.00 cycles/hash +Small key speed test - 2-byte keys - 38.21 cycles/hash +Small key speed test - 3-byte keys - 38.47 cycles/hash +Small key speed test - 4-byte keys - 37.00 cycles/hash +Small key speed test - 5-byte keys - 38.00 cycles/hash +Small key speed test - 6-byte keys - 38.97 cycles/hash +Small key speed test - 7-byte keys - 39.44 cycles/hash +Small key speed test - 8-byte keys - 40.00 cycles/hash +Small key speed test - 9-byte keys - 40.00 cycles/hash +Small key speed test - 10-byte keys - 41.00 cycles/hash +Small key speed test - 11-byte keys - 40.22 cycles/hash +Small key speed test - 12-byte keys - 41.00 cycles/hash +Small key speed test - 13-byte keys - 41.34 cycles/hash +Small key speed test - 14-byte keys - 42.49 cycles/hash +Small key speed test - 15-byte keys - 42.00 cycles/hash +Small key speed test - 16-byte keys - 43.33 cycles/hash +Small key speed test - 17-byte keys - 44.00 cycles/hash +Small key speed test - 18-byte keys - 45.00 cycles/hash +Small key speed test - 19-byte keys - 43.00 cycles/hash +Small key speed test - 20-byte keys - 46.89 cycles/hash +Small key speed test - 21-byte keys - 47.00 cycles/hash +Small key speed test - 22-byte keys - 46.94 cycles/hash +Small key speed test - 23-byte keys - 47.12 cycles/hash +Small key speed test - 24-byte keys - 47.66 cycles/hash +Small key speed test - 25-byte keys - 47.99 cycles/hash +Small key speed test - 26-byte keys - 49.12 cycles/hash +Small key speed test - 27-byte keys - 48.79 cycles/hash +Small key speed test - 28-byte keys - 50.31 cycles/hash +Small key speed test - 29-byte keys - 50.00 cycles/hash +Small key speed test - 30-byte keys - 52.18 cycles/hash +Small key speed test - 31-byte keys - 50.00 cycles/hash +Small key speed test - 32-byte keys - 61.55 cycles/hash +Average 44.250 cycles/hash +Average, weighted by key length freq. 43.712 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 41.610 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/PMPML_64.txt b/doc/PMPML_64.txt index 44f6b92e..7a35f5ac 100644 --- a/doc/PMPML_64.txt +++ b/doc/PMPML_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x173a96f3d308 - 0x173a96f3d29c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 3.434 bytes/cycle - 9823.77 MiB/sec @ 3 ghz -Alignment 6 - 3.432 bytes/cycle - 9817.95 MiB/sec @ 3 ghz -Alignment 5 - 3.431 bytes/cycle - 9816.00 MiB/sec @ 3 ghz -Alignment 4 - 3.431 bytes/cycle - 9816.74 MiB/sec @ 3 ghz -Alignment 3 - 3.434 bytes/cycle - 9824.09 MiB/sec @ 3 ghz -Alignment 2 - 3.432 bytes/cycle - 9817.83 MiB/sec @ 3 ghz -Alignment 1 - 3.431 bytes/cycle - 9815.86 MiB/sec @ 3 ghz -Alignment 0 - 3.474 bytes/cycle - 9937.89 MiB/sec @ 3 ghz -Average - 3.437 bytes/cycle - 9833.77 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 47.95 cycles/hash -Small key speed test - 2-byte keys - 47.92 cycles/hash -Small key speed test - 3-byte keys - 49.99 cycles/hash -Small key speed test - 4-byte keys - 48.00 cycles/hash -Small key speed test - 5-byte keys - 47.96 cycles/hash -Small key speed test - 6-byte keys - 47.94 cycles/hash -Small key speed test - 7-byte keys - 48.20 cycles/hash -Small key speed test - 8-byte keys - 46.00 cycles/hash -Small key speed test - 9-byte keys - 48.00 cycles/hash -Small key speed test - 10-byte keys - 48.00 cycles/hash -Small key speed test - 11-byte keys - 49.70 cycles/hash -Small key speed test - 12-byte keys - 48.00 cycles/hash -Small key speed test - 13-byte keys - 49.99 cycles/hash -Small key speed test - 14-byte keys - 50.00 cycles/hash -Small key speed test - 15-byte keys - 50.92 cycles/hash -Small key speed test - 16-byte keys - 48.00 cycles/hash -Small key speed test - 17-byte keys - 49.98 cycles/hash -Small key speed test - 18-byte keys - 49.96 cycles/hash -Small key speed test - 19-byte keys - 50.92 cycles/hash -Small key speed test - 20-byte keys - 49.96 cycles/hash -Small key speed test - 21-byte keys - 50.88 cycles/hash -Small key speed test - 22-byte keys - 50.91 cycles/hash -Small key speed test - 23-byte keys - 52.65 cycles/hash -Small key speed test - 24-byte keys - 50.00 cycles/hash -Small key speed test - 25-byte keys - 51.76 cycles/hash -Small key speed test - 26-byte keys - 51.64 cycles/hash -Small key speed test - 27-byte keys - 51.99 cycles/hash -Small key speed test - 28-byte keys - 51.97 cycles/hash -Small key speed test - 29-byte keys - 52.97 cycles/hash -Small key speed test - 30-byte keys - 52.98 cycles/hash -Small key speed test - 31-byte keys - 55.00 cycles/hash -Average 50.004 cycles/hash +Alignment 7 - 3.501 bytes/cycle - 10016.32 MiB/sec @ 3 ghz +Alignment 6 - 3.505 bytes/cycle - 10026.61 MiB/sec @ 3 ghz +Alignment 5 - 3.504 bytes/cycle - 10026.33 MiB/sec @ 3 ghz +Alignment 4 - 3.499 bytes/cycle - 10010.76 MiB/sec @ 3 ghz +Alignment 3 - 3.502 bytes/cycle - 10020.72 MiB/sec @ 3 ghz +Alignment 2 - 3.500 bytes/cycle - 10014.27 MiB/sec @ 3 ghz +Alignment 1 - 3.503 bytes/cycle - 10022.46 MiB/sec @ 3 ghz +Alignment 0 - 3.533 bytes/cycle - 10107.87 MiB/sec @ 3 ghz +Average - 3.506 bytes/cycle - 10030.67 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 47.00 cycles/hash +Small key speed test - 2-byte keys - 47.00 cycles/hash +Small key speed test - 3-byte keys - 49.00 cycles/hash +Small key speed test - 4-byte keys - 46.99 cycles/hash +Small key speed test - 5-byte keys - 46.99 cycles/hash +Small key speed test - 6-byte keys - 46.99 cycles/hash +Small key speed test - 7-byte keys - 47.97 cycles/hash +Small key speed test - 8-byte keys - 46.15 cycles/hash +Small key speed test - 9-byte keys - 47.14 cycles/hash +Small key speed test - 10-byte keys - 47.00 cycles/hash +Small key speed test - 11-byte keys - 48.95 cycles/hash +Small key speed test - 12-byte keys - 47.00 cycles/hash +Small key speed test - 13-byte keys - 49.00 cycles/hash +Small key speed test - 14-byte keys - 49.00 cycles/hash +Small key speed test - 15-byte keys - 50.00 cycles/hash +Small key speed test - 16-byte keys - 47.00 cycles/hash +Small key speed test - 17-byte keys - 49.00 cycles/hash +Small key speed test - 18-byte keys - 49.00 cycles/hash +Small key speed test - 19-byte keys - 50.00 cycles/hash +Small key speed test - 20-byte keys - 49.00 cycles/hash +Small key speed test - 21-byte keys - 50.00 cycles/hash +Small key speed test - 22-byte keys - 50.00 cycles/hash +Small key speed test - 23-byte keys - 52.00 cycles/hash +Small key speed test - 24-byte keys - 49.00 cycles/hash +Small key speed test - 25-byte keys - 50.97 cycles/hash +Small key speed test - 26-byte keys - 51.00 cycles/hash +Small key speed test - 27-byte keys - 51.00 cycles/hash +Small key speed test - 28-byte keys - 51.00 cycles/hash +Small key speed test - 29-byte keys - 52.00 cycles/hash +Small key speed test - 30-byte keys - 52.00 cycles/hash +Small key speed test - 31-byte keys - 54.00 cycles/hash +Small key speed test - 32-byte keys - 51.91 cycles/hash +Average 49.221 cycles/hash +Average, weighted by key length freq. 48.970 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 47.409 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/PMurHash32.txt b/doc/PMurHash32.txt index ae36a24f..6b8760a5 100644 --- a/doc/PMurHash32.txt +++ b/doc/PMurHash32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x171919193fc4 - 0x171919193f58). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.048 bytes/cycle - 2999.17 MiB/sec @ 3 ghz -Alignment 6 - 1.047 bytes/cycle - 2995.23 MiB/sec @ 3 ghz -Alignment 5 - 1.048 bytes/cycle - 2998.17 MiB/sec @ 3 ghz -Alignment 4 - 1.060 bytes/cycle - 3031.38 MiB/sec @ 3 ghz -Alignment 3 - 1.048 bytes/cycle - 2999.70 MiB/sec @ 3 ghz -Alignment 2 - 1.048 bytes/cycle - 2999.00 MiB/sec @ 3 ghz -Alignment 1 - 1.049 bytes/cycle - 2999.94 MiB/sec @ 3 ghz -Alignment 0 - 1.057 bytes/cycle - 3024.17 MiB/sec @ 3 ghz -Average - 1.051 bytes/cycle - 3005.85 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 37.00 cycles/hash +Alignment 7 - 1.026 bytes/cycle - 2936.43 MiB/sec @ 3 ghz +Alignment 6 - 1.037 bytes/cycle - 2968.15 MiB/sec @ 3 ghz +Alignment 5 - 1.055 bytes/cycle - 3017.17 MiB/sec @ 3 ghz +Alignment 4 - 1.053 bytes/cycle - 3011.91 MiB/sec @ 3 ghz +Alignment 3 - 1.055 bytes/cycle - 3017.58 MiB/sec @ 3 ghz +Alignment 2 - 1.054 bytes/cycle - 3016.85 MiB/sec @ 3 ghz +Alignment 1 - 1.055 bytes/cycle - 3017.52 MiB/sec @ 3 ghz +Alignment 0 - 1.058 bytes/cycle - 3025.94 MiB/sec @ 3 ghz +Average - 1.049 bytes/cycle - 3001.44 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 36.94 cycles/hash Small key speed test - 2-byte keys - 39.00 cycles/hash -Small key speed test - 3-byte keys - 41.48 cycles/hash +Small key speed test - 3-byte keys - 41.00 cycles/hash Small key speed test - 4-byte keys - 36.00 cycles/hash Small key speed test - 5-byte keys - 39.00 cycles/hash -Small key speed test - 6-byte keys - 42.59 cycles/hash -Small key speed test - 7-byte keys - 44.00 cycles/hash -Small key speed test - 8-byte keys - 40.00 cycles/hash -Small key speed test - 9-byte keys - 42.89 cycles/hash -Small key speed test - 10-byte keys - 45.96 cycles/hash -Small key speed test - 11-byte keys - 48.00 cycles/hash +Small key speed test - 6-byte keys - 42.00 cycles/hash +Small key speed test - 7-byte keys - 43.84 cycles/hash +Small key speed test - 8-byte keys - 39.97 cycles/hash +Small key speed test - 9-byte keys - 42.14 cycles/hash +Small key speed test - 10-byte keys - 45.00 cycles/hash +Small key speed test - 11-byte keys - 47.00 cycles/hash Small key speed test - 12-byte keys - 43.00 cycles/hash -Small key speed test - 13-byte keys - 45.00 cycles/hash -Small key speed test - 14-byte keys - 46.53 cycles/hash -Small key speed test - 15-byte keys - 48.88 cycles/hash -Small key speed test - 16-byte keys - 47.00 cycles/hash -Small key speed test - 17-byte keys - 49.00 cycles/hash -Small key speed test - 18-byte keys - 50.43 cycles/hash -Small key speed test - 19-byte keys - 52.42 cycles/hash -Small key speed test - 20-byte keys - 51.00 cycles/hash -Small key speed test - 21-byte keys - 53.00 cycles/hash -Small key speed test - 22-byte keys - 53.00 cycles/hash -Small key speed test - 23-byte keys - 54.00 cycles/hash -Small key speed test - 24-byte keys - 56.00 cycles/hash -Small key speed test - 25-byte keys - 56.27 cycles/hash -Small key speed test - 26-byte keys - 56.47 cycles/hash -Small key speed test - 27-byte keys - 57.00 cycles/hash -Small key speed test - 28-byte keys - 59.23 cycles/hash -Small key speed test - 29-byte keys - 60.00 cycles/hash +Small key speed test - 13-byte keys - 44.96 cycles/hash +Small key speed test - 14-byte keys - 46.00 cycles/hash +Small key speed test - 15-byte keys - 48.00 cycles/hash +Small key speed test - 16-byte keys - 46.95 cycles/hash +Small key speed test - 17-byte keys - 48.12 cycles/hash +Small key speed test - 18-byte keys - 50.00 cycles/hash +Small key speed test - 19-byte keys - 52.00 cycles/hash +Small key speed test - 20-byte keys - 50.96 cycles/hash +Small key speed test - 21-byte keys - 52.27 cycles/hash +Small key speed test - 22-byte keys - 52.69 cycles/hash +Small key speed test - 23-byte keys - 53.69 cycles/hash +Small key speed test - 24-byte keys - 55.00 cycles/hash +Small key speed test - 25-byte keys - 56.00 cycles/hash +Small key speed test - 26-byte keys - 56.00 cycles/hash +Small key speed test - 27-byte keys - 56.94 cycles/hash +Small key speed test - 28-byte keys - 59.00 cycles/hash +Small key speed test - 29-byte keys - 59.96 cycles/hash Small key speed test - 30-byte keys - 60.00 cycles/hash -Small key speed test - 31-byte keys - 61.00 cycles/hash -Average 48.876 cycles/hash +Small key speed test - 31-byte keys - 60.88 cycles/hash +Small key speed test - 32-byte keys - 63.55 cycles/hash +Average 48.995 cycles/hash +Average, weighted by key length freq. 48.604 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 44.932 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/SipHash.txt b/doc/SipHash.txt index a2a06929..2a8c71e9 100644 --- a/doc/SipHash.txt +++ b/doc/SipHash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x1319a7194b7e4 - 0x1319a7194b79c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.330 bytes/cycle - 943.77 MiB/sec @ 3 ghz -Alignment 6 - 0.330 bytes/cycle - 943.96 MiB/sec @ 3 ghz -Alignment 5 - 0.330 bytes/cycle - 943.37 MiB/sec @ 3 ghz -Alignment 4 - 0.330 bytes/cycle - 943.90 MiB/sec @ 3 ghz -Alignment 3 - 0.330 bytes/cycle - 943.21 MiB/sec @ 3 ghz -Alignment 2 - 0.330 bytes/cycle - 943.52 MiB/sec @ 3 ghz -Alignment 1 - 0.330 bytes/cycle - 943.55 MiB/sec @ 3 ghz -Alignment 0 - 0.330 bytes/cycle - 942.94 MiB/sec @ 3 ghz -Average - 0.330 bytes/cycle - 943.53 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 108.97 cycles/hash -Small key speed test - 2-byte keys - 108.54 cycles/hash -Small key speed test - 3-byte keys - 108.77 cycles/hash -Small key speed test - 4-byte keys - 108.59 cycles/hash -Small key speed test - 5-byte keys - 108.60 cycles/hash -Small key speed test - 6-byte keys - 109.56 cycles/hash -Small key speed test - 7-byte keys - 109.23 cycles/hash -Small key speed test - 8-byte keys - 134.55 cycles/hash -Small key speed test - 9-byte keys - 133.57 cycles/hash -Small key speed test - 10-byte keys - 133.60 cycles/hash -Small key speed test - 11-byte keys - 133.63 cycles/hash -Small key speed test - 12-byte keys - 133.63 cycles/hash -Small key speed test - 13-byte keys - 133.69 cycles/hash -Small key speed test - 14-byte keys - 133.67 cycles/hash -Small key speed test - 15-byte keys - 133.67 cycles/hash -Small key speed test - 16-byte keys - 158.67 cycles/hash -Small key speed test - 17-byte keys - 157.64 cycles/hash -Small key speed test - 18-byte keys - 157.66 cycles/hash -Small key speed test - 19-byte keys - 157.64 cycles/hash -Small key speed test - 20-byte keys - 157.77 cycles/hash -Small key speed test - 21-byte keys - 157.75 cycles/hash -Small key speed test - 22-byte keys - 157.72 cycles/hash -Small key speed test - 23-byte keys - 157.75 cycles/hash -Small key speed test - 24-byte keys - 182.06 cycles/hash -Small key speed test - 25-byte keys - 183.35 cycles/hash -Small key speed test - 26-byte keys - 183.28 cycles/hash -Small key speed test - 27-byte keys - 183.77 cycles/hash -Small key speed test - 28-byte keys - 183.37 cycles/hash -Small key speed test - 29-byte keys - 183.84 cycles/hash -Small key speed test - 30-byte keys - 183.28 cycles/hash -Small key speed test - 31-byte keys - 183.80 cycles/hash -Average 147.148 cycles/hash +Alignment 7 - 0.332 bytes/cycle - 950.14 MiB/sec @ 3 ghz +Alignment 6 - 0.333 bytes/cycle - 953.89 MiB/sec @ 3 ghz +Alignment 5 - 0.333 bytes/cycle - 953.95 MiB/sec @ 3 ghz +Alignment 4 - 0.334 bytes/cycle - 954.61 MiB/sec @ 3 ghz +Alignment 3 - 0.333 bytes/cycle - 953.95 MiB/sec @ 3 ghz +Alignment 2 - 0.334 bytes/cycle - 954.29 MiB/sec @ 3 ghz +Alignment 1 - 0.333 bytes/cycle - 953.59 MiB/sec @ 3 ghz +Alignment 0 - 0.333 bytes/cycle - 953.62 MiB/sec @ 3 ghz +Average - 0.333 bytes/cycle - 953.51 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 107.98 cycles/hash +Small key speed test - 2-byte keys - 108.26 cycles/hash +Small key speed test - 3-byte keys - 108.11 cycles/hash +Small key speed test - 4-byte keys - 108.37 cycles/hash +Small key speed test - 5-byte keys - 107.97 cycles/hash +Small key speed test - 6-byte keys - 108.22 cycles/hash +Small key speed test - 7-byte keys - 107.98 cycles/hash +Small key speed test - 8-byte keys - 132.97 cycles/hash +Small key speed test - 9-byte keys - 131.88 cycles/hash +Small key speed test - 10-byte keys - 131.96 cycles/hash +Small key speed test - 11-byte keys - 131.91 cycles/hash +Small key speed test - 12-byte keys - 131.93 cycles/hash +Small key speed test - 13-byte keys - 132.18 cycles/hash +Small key speed test - 14-byte keys - 131.95 cycles/hash +Small key speed test - 15-byte keys - 131.96 cycles/hash +Small key speed test - 16-byte keys - 156.97 cycles/hash +Small key speed test - 17-byte keys - 155.97 cycles/hash +Small key speed test - 18-byte keys - 155.97 cycles/hash +Small key speed test - 19-byte keys - 155.97 cycles/hash +Small key speed test - 20-byte keys - 156.00 cycles/hash +Small key speed test - 21-byte keys - 155.98 cycles/hash +Small key speed test - 22-byte keys - 155.99 cycles/hash +Small key speed test - 23-byte keys - 156.03 cycles/hash +Small key speed test - 24-byte keys - 179.97 cycles/hash +Small key speed test - 25-byte keys - 180.94 cycles/hash +Small key speed test - 26-byte keys - 181.52 cycles/hash +Small key speed test - 27-byte keys - 180.97 cycles/hash +Small key speed test - 28-byte keys - 181.48 cycles/hash +Small key speed test - 29-byte keys - 181.29 cycles/hash +Small key speed test - 30-byte keys - 180.80 cycles/hash +Small key speed test - 31-byte keys - 180.98 cycles/hash +Small key speed test - 32-byte keys - 203.61 cycles/hash +Average 147.316 cycles/hash +Average, weighted by key length freq. 147.075 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 140.618 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/SipHash13.txt b/doc/SipHash13.txt index 0aaf7f1b..8960e568 100644 --- a/doc/SipHash13.txt +++ b/doc/SipHash13.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x132661d3f82cc - 0x132661d3f8284). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.634 bytes/cycle - 1813.94 MiB/sec @ 3 ghz -Alignment 6 - 0.634 bytes/cycle - 1813.39 MiB/sec @ 3 ghz -Alignment 5 - 0.634 bytes/cycle - 1812.92 MiB/sec @ 3 ghz -Alignment 4 - 0.634 bytes/cycle - 1812.61 MiB/sec @ 3 ghz -Alignment 3 - 0.634 bytes/cycle - 1812.86 MiB/sec @ 3 ghz -Alignment 2 - 0.633 bytes/cycle - 1812.42 MiB/sec @ 3 ghz -Alignment 1 - 0.633 bytes/cycle - 1811.51 MiB/sec @ 3 ghz -Alignment 0 - 0.633 bytes/cycle - 1812.34 MiB/sec @ 3 ghz -Average - 0.634 bytes/cycle - 1812.75 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 87.52 cycles/hash -Small key speed test - 2-byte keys - 87.10 cycles/hash -Small key speed test - 3-byte keys - 87.03 cycles/hash -Small key speed test - 4-byte keys - 86.94 cycles/hash -Small key speed test - 5-byte keys - 86.70 cycles/hash -Small key speed test - 6-byte keys - 87.34 cycles/hash -Small key speed test - 7-byte keys - 92.96 cycles/hash -Small key speed test - 8-byte keys - 99.92 cycles/hash -Small key speed test - 9-byte keys - 98.95 cycles/hash -Small key speed test - 10-byte keys - 98.94 cycles/hash -Small key speed test - 11-byte keys - 98.95 cycles/hash -Small key speed test - 12-byte keys - 98.93 cycles/hash -Small key speed test - 13-byte keys - 98.93 cycles/hash -Small key speed test - 14-byte keys - 98.94 cycles/hash -Small key speed test - 15-byte keys - 98.95 cycles/hash -Small key speed test - 16-byte keys - 112.84 cycles/hash -Small key speed test - 17-byte keys - 113.12 cycles/hash -Small key speed test - 18-byte keys - 112.04 cycles/hash -Small key speed test - 19-byte keys - 111.80 cycles/hash -Small key speed test - 20-byte keys - 112.03 cycles/hash -Small key speed test - 21-byte keys - 112.13 cycles/hash -Small key speed test - 22-byte keys - 112.52 cycles/hash -Small key speed test - 23-byte keys - 112.13 cycles/hash -Small key speed test - 24-byte keys - 126.32 cycles/hash -Small key speed test - 25-byte keys - 123.97 cycles/hash -Small key speed test - 26-byte keys - 124.52 cycles/hash -Small key speed test - 27-byte keys - 124.00 cycles/hash -Small key speed test - 28-byte keys - 124.54 cycles/hash -Small key speed test - 29-byte keys - 124.56 cycles/hash -Small key speed test - 30-byte keys - 124.08 cycles/hash -Small key speed test - 31-byte keys - 124.59 cycles/hash -Average 106.558 cycles/hash +Alignment 7 - 0.630 bytes/cycle - 1803.58 MiB/sec @ 3 ghz +Alignment 6 - 0.631 bytes/cycle - 1804.13 MiB/sec @ 3 ghz +Alignment 5 - 0.630 bytes/cycle - 1803.27 MiB/sec @ 3 ghz +Alignment 4 - 0.631 bytes/cycle - 1804.94 MiB/sec @ 3 ghz +Alignment 3 - 0.631 bytes/cycle - 1804.14 MiB/sec @ 3 ghz +Alignment 2 - 0.631 bytes/cycle - 1805.07 MiB/sec @ 3 ghz +Alignment 1 - 0.630 bytes/cycle - 1803.48 MiB/sec @ 3 ghz +Alignment 0 - 0.630 bytes/cycle - 1803.09 MiB/sec @ 3 ghz +Average - 0.631 bytes/cycle - 1803.96 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 87.15 cycles/hash +Small key speed test - 2-byte keys - 87.25 cycles/hash +Small key speed test - 3-byte keys - 87.16 cycles/hash +Small key speed test - 4-byte keys - 87.42 cycles/hash +Small key speed test - 5-byte keys - 87.07 cycles/hash +Small key speed test - 6-byte keys - 86.74 cycles/hash +Small key speed test - 7-byte keys - 93.26 cycles/hash +Small key speed test - 8-byte keys - 100.00 cycles/hash +Small key speed test - 9-byte keys - 99.44 cycles/hash +Small key speed test - 10-byte keys - 99.43 cycles/hash +Small key speed test - 11-byte keys - 99.48 cycles/hash +Small key speed test - 12-byte keys - 99.36 cycles/hash +Small key speed test - 13-byte keys - 99.49 cycles/hash +Small key speed test - 14-byte keys - 99.48 cycles/hash +Small key speed test - 15-byte keys - 99.43 cycles/hash +Small key speed test - 16-byte keys - 113.35 cycles/hash +Small key speed test - 17-byte keys - 113.62 cycles/hash +Small key speed test - 18-byte keys - 112.55 cycles/hash +Small key speed test - 19-byte keys - 112.48 cycles/hash +Small key speed test - 20-byte keys - 112.63 cycles/hash +Small key speed test - 21-byte keys - 112.51 cycles/hash +Small key speed test - 22-byte keys - 113.68 cycles/hash +Small key speed test - 23-byte keys - 112.57 cycles/hash +Small key speed test - 24-byte keys - 127.22 cycles/hash +Small key speed test - 25-byte keys - 124.47 cycles/hash +Small key speed test - 26-byte keys - 125.04 cycles/hash +Small key speed test - 27-byte keys - 124.37 cycles/hash +Small key speed test - 28-byte keys - 125.04 cycles/hash +Small key speed test - 29-byte keys - 125.08 cycles/hash +Small key speed test - 30-byte keys - 124.42 cycles/hash +Small key speed test - 31-byte keys - 125.11 cycles/hash +Small key speed test - 32-byte keys - 137.49 cycles/hash +Average 107.931 cycles/hash +Average, weighted by key length freq. 107.788 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 104.493 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Spooky128.txt b/doc/Spooky128.txt index 2ef3ea97..bb8bc115 100644 --- a/doc/Spooky128.txt +++ b/doc/Spooky128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x133ae58dc6fa8 - 0x133ae58dc6f3c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 3.831 bytes/cycle - 10961.49 MiB/sec @ 3 ghz -Alignment 6 - 3.831 bytes/cycle - 10960.82 MiB/sec @ 3 ghz -Alignment 5 - 3.831 bytes/cycle - 10960.02 MiB/sec @ 3 ghz -Alignment 4 - 3.830 bytes/cycle - 10958.80 MiB/sec @ 3 ghz -Alignment 3 - 3.831 bytes/cycle - 10960.10 MiB/sec @ 3 ghz -Alignment 2 - 4.607 bytes/cycle - 13181.52 MiB/sec @ 3 ghz -Alignment 1 - 4.588 bytes/cycle - 13127.33 MiB/sec @ 3 ghz -Alignment 0 - 4.593 bytes/cycle - 13140.74 MiB/sec @ 3 ghz -Average - 4.118 bytes/cycle - 11781.35 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 45.86 cycles/hash -Small key speed test - 2-byte keys - 47.00 cycles/hash -Small key speed test - 3-byte keys - 48.00 cycles/hash -Small key speed test - 4-byte keys - 45.99 cycles/hash -Small key speed test - 5-byte keys - 47.00 cycles/hash -Small key speed test - 6-byte keys - 48.73 cycles/hash -Small key speed test - 7-byte keys - 50.31 cycles/hash -Small key speed test - 8-byte keys - 45.00 cycles/hash -Small key speed test - 9-byte keys - 46.00 cycles/hash -Small key speed test - 10-byte keys - 47.17 cycles/hash -Small key speed test - 11-byte keys - 48.29 cycles/hash -Small key speed test - 12-byte keys - 45.99 cycles/hash -Small key speed test - 13-byte keys - 47.17 cycles/hash -Small key speed test - 14-byte keys - 48.99 cycles/hash -Small key speed test - 15-byte keys - 49.75 cycles/hash -Small key speed test - 16-byte keys - 69.68 cycles/hash -Small key speed test - 17-byte keys - 69.51 cycles/hash -Small key speed test - 18-byte keys - 69.25 cycles/hash -Small key speed test - 19-byte keys - 70.29 cycles/hash -Small key speed test - 20-byte keys - 69.50 cycles/hash -Small key speed test - 21-byte keys - 69.54 cycles/hash -Small key speed test - 22-byte keys - 70.59 cycles/hash -Small key speed test - 23-byte keys - 72.15 cycles/hash -Small key speed test - 24-byte keys - 69.64 cycles/hash -Small key speed test - 25-byte keys - 69.75 cycles/hash -Small key speed test - 26-byte keys - 68.98 cycles/hash -Small key speed test - 27-byte keys - 68.97 cycles/hash -Small key speed test - 28-byte keys - 68.99 cycles/hash -Small key speed test - 29-byte keys - 68.99 cycles/hash -Small key speed test - 30-byte keys - 69.72 cycles/hash -Small key speed test - 31-byte keys - 69.50 cycles/hash -Average 58.913 cycles/hash +Alignment 7 - 4.749 bytes/cycle - 13587.25 MiB/sec @ 3 ghz +Alignment 6 - 4.758 bytes/cycle - 13613.98 MiB/sec @ 3 ghz +Alignment 5 - 4.761 bytes/cycle - 13620.65 MiB/sec @ 3 ghz +Alignment 4 - 4.761 bytes/cycle - 13620.89 MiB/sec @ 3 ghz +Alignment 3 - 4.760 bytes/cycle - 13618.37 MiB/sec @ 3 ghz +Alignment 2 - 4.760 bytes/cycle - 13618.73 MiB/sec @ 3 ghz +Alignment 1 - 4.760 bytes/cycle - 13617.86 MiB/sec @ 3 ghz +Alignment 0 - 4.778 bytes/cycle - 13670.24 MiB/sec @ 3 ghz +Average - 4.761 bytes/cycle - 13621.00 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 44.45 cycles/hash +Small key speed test - 2-byte keys - 45.12 cycles/hash +Small key speed test - 3-byte keys - 47.27 cycles/hash +Small key speed test - 4-byte keys - 43.99 cycles/hash +Small key speed test - 5-byte keys - 45.21 cycles/hash +Small key speed test - 6-byte keys - 46.56 cycles/hash +Small key speed test - 7-byte keys - 48.14 cycles/hash +Small key speed test - 8-byte keys - 44.20 cycles/hash +Small key speed test - 9-byte keys - 44.27 cycles/hash +Small key speed test - 10-byte keys - 46.35 cycles/hash +Small key speed test - 11-byte keys - 46.45 cycles/hash +Small key speed test - 12-byte keys - 44.00 cycles/hash +Small key speed test - 13-byte keys - 46.10 cycles/hash +Small key speed test - 14-byte keys - 46.92 cycles/hash +Small key speed test - 15-byte keys - 48.00 cycles/hash +Small key speed test - 16-byte keys - 67.22 cycles/hash +Small key speed test - 17-byte keys - 66.86 cycles/hash +Small key speed test - 18-byte keys - 68.83 cycles/hash +Small key speed test - 19-byte keys - 84.00 cycles/hash +Small key speed test - 20-byte keys - 73.31 cycles/hash +Small key speed test - 21-byte keys - 77.92 cycles/hash +Small key speed test - 22-byte keys - 83.98 cycles/hash +Small key speed test - 23-byte keys - 70.63 cycles/hash +Small key speed test - 24-byte keys - 68.00 cycles/hash +Small key speed test - 25-byte keys - 68.00 cycles/hash +Small key speed test - 26-byte keys - 67.76 cycles/hash +Small key speed test - 27-byte keys - 67.00 cycles/hash +Small key speed test - 28-byte keys - 67.76 cycles/hash +Small key speed test - 29-byte keys - 67.79 cycles/hash +Small key speed test - 30-byte keys - 67.99 cycles/hash +Small key speed test - 31-byte keys - 67.57 cycles/hash +Small key speed test - 32-byte keys - 68.00 cycles/hash +Average 59.051 cycles/hash +Average, weighted by key length freq. 59.080 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 54.201 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Spooky32.txt b/doc/Spooky32.txt index 453eeefd..47bf5ae5 100644 --- a/doc/Spooky32.txt +++ b/doc/Spooky32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x13397e941ef04 - 0x13397e941ee98). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.581 bytes/cycle - 13105.07 MiB/sec @ 3 ghz -Alignment 6 - 4.579 bytes/cycle - 13100.23 MiB/sec @ 3 ghz -Alignment 5 - 4.579 bytes/cycle - 13101.47 MiB/sec @ 3 ghz -Alignment 4 - 4.580 bytes/cycle - 13104.46 MiB/sec @ 3 ghz -Alignment 3 - 4.581 bytes/cycle - 13105.20 MiB/sec @ 3 ghz -Alignment 2 - 4.579 bytes/cycle - 13101.24 MiB/sec @ 3 ghz -Alignment 1 - 4.579 bytes/cycle - 13101.57 MiB/sec @ 3 ghz -Alignment 0 - 4.597 bytes/cycle - 13152.34 MiB/sec @ 3 ghz -Average - 4.582 bytes/cycle - 13108.95 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 42.00 cycles/hash -Small key speed test - 2-byte keys - 45.00 cycles/hash -Small key speed test - 3-byte keys - 45.16 cycles/hash -Small key speed test - 4-byte keys - 42.00 cycles/hash -Small key speed test - 5-byte keys - 45.00 cycles/hash -Small key speed test - 6-byte keys - 45.00 cycles/hash -Small key speed test - 7-byte keys - 47.17 cycles/hash -Small key speed test - 8-byte keys - 43.00 cycles/hash -Small key speed test - 9-byte keys - 43.00 cycles/hash -Small key speed test - 10-byte keys - 45.11 cycles/hash -Small key speed test - 11-byte keys - 46.00 cycles/hash -Small key speed test - 12-byte keys - 43.00 cycles/hash -Small key speed test - 13-byte keys - 45.60 cycles/hash -Small key speed test - 14-byte keys - 45.24 cycles/hash -Small key speed test - 15-byte keys - 46.21 cycles/hash -Small key speed test - 16-byte keys - 66.72 cycles/hash -Small key speed test - 17-byte keys - 66.61 cycles/hash -Small key speed test - 18-byte keys - 68.03 cycles/hash -Small key speed test - 19-byte keys - 69.56 cycles/hash -Small key speed test - 20-byte keys - 66.48 cycles/hash -Small key speed test - 21-byte keys - 67.72 cycles/hash -Small key speed test - 22-byte keys - 68.43 cycles/hash -Small key speed test - 23-byte keys - 69.99 cycles/hash -Small key speed test - 24-byte keys - 66.97 cycles/hash -Small key speed test - 25-byte keys - 67.87 cycles/hash -Small key speed test - 26-byte keys - 65.90 cycles/hash -Small key speed test - 27-byte keys - 66.78 cycles/hash -Small key speed test - 28-byte keys - 65.97 cycles/hash -Small key speed test - 29-byte keys - 65.90 cycles/hash -Small key speed test - 30-byte keys - 67.00 cycles/hash -Small key speed test - 31-byte keys - 65.97 cycles/hash -Average 56.271 cycles/hash +Alignment 7 - 4.752 bytes/cycle - 13596.20 MiB/sec @ 3 ghz +Alignment 6 - 4.762 bytes/cycle - 13623.70 MiB/sec @ 3 ghz +Alignment 5 - 4.762 bytes/cycle - 13624.25 MiB/sec @ 3 ghz +Alignment 4 - 4.762 bytes/cycle - 13622.97 MiB/sec @ 3 ghz +Alignment 3 - 4.757 bytes/cycle - 13609.74 MiB/sec @ 3 ghz +Alignment 2 - 4.761 bytes/cycle - 13621.20 MiB/sec @ 3 ghz +Alignment 1 - 4.761 bytes/cycle - 13621.87 MiB/sec @ 3 ghz +Alignment 0 - 4.778 bytes/cycle - 13670.77 MiB/sec @ 3 ghz +Average - 4.762 bytes/cycle - 13623.84 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 40.16 cycles/hash +Small key speed test - 2-byte keys - 43.35 cycles/hash +Small key speed test - 3-byte keys - 43.82 cycles/hash +Small key speed test - 4-byte keys - 50.00 cycles/hash +Small key speed test - 5-byte keys - 54.14 cycles/hash +Small key speed test - 6-byte keys - 54.13 cycles/hash +Small key speed test - 7-byte keys - 51.92 cycles/hash +Small key speed test - 8-byte keys - 41.00 cycles/hash +Small key speed test - 9-byte keys - 41.14 cycles/hash +Small key speed test - 10-byte keys - 43.49 cycles/hash +Small key speed test - 11-byte keys - 45.00 cycles/hash +Small key speed test - 12-byte keys - 41.00 cycles/hash +Small key speed test - 13-byte keys - 43.00 cycles/hash +Small key speed test - 14-byte keys - 43.58 cycles/hash +Small key speed test - 15-byte keys - 44.82 cycles/hash +Small key speed test - 16-byte keys - 64.00 cycles/hash +Small key speed test - 17-byte keys - 64.00 cycles/hash +Small key speed test - 18-byte keys - 64.42 cycles/hash +Small key speed test - 19-byte keys - 67.01 cycles/hash +Small key speed test - 20-byte keys - 64.00 cycles/hash +Small key speed test - 21-byte keys - 64.00 cycles/hash +Small key speed test - 22-byte keys - 65.00 cycles/hash +Small key speed test - 23-byte keys - 67.99 cycles/hash +Small key speed test - 24-byte keys - 64.00 cycles/hash +Small key speed test - 25-byte keys - 64.46 cycles/hash +Small key speed test - 26-byte keys - 63.00 cycles/hash +Small key speed test - 27-byte keys - 64.00 cycles/hash +Small key speed test - 28-byte keys - 63.18 cycles/hash +Small key speed test - 29-byte keys - 63.00 cycles/hash +Small key speed test - 30-byte keys - 64.37 cycles/hash +Small key speed test - 31-byte keys - 63.00 cycles/hash +Small key speed test - 32-byte keys - 64.42 cycles/hash +Average 55.450 cycles/hash +Average, weighted by key length freq. 54.187 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 51.696 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/Spooky64.txt b/doc/Spooky64.txt index df11a0bd..f425d67a 100644 --- a/doc/Spooky64.txt +++ b/doc/Spooky64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x133a3253c0dec - 0x133a3253c0d80). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.714 bytes/cycle - 13487.63 MiB/sec @ 3 ghz -Alignment 6 - 4.728 bytes/cycle - 13526.94 MiB/sec @ 3 ghz -Alignment 5 - 4.728 bytes/cycle - 13527.58 MiB/sec @ 3 ghz -Alignment 4 - 4.728 bytes/cycle - 13526.82 MiB/sec @ 3 ghz -Alignment 3 - 4.728 bytes/cycle - 13526.67 MiB/sec @ 3 ghz -Alignment 2 - 4.728 bytes/cycle - 13526.69 MiB/sec @ 3 ghz -Alignment 1 - 4.728 bytes/cycle - 13527.88 MiB/sec @ 3 ghz -Alignment 0 - 4.748 bytes/cycle - 13584.70 MiB/sec @ 3 ghz -Average - 4.729 bytes/cycle - 13529.36 MiB/sec @ 3 ghz +Alignment 7 - 4.675 bytes/cycle - 13376.00 MiB/sec @ 3 ghz +Alignment 6 - 4.682 bytes/cycle - 13394.41 MiB/sec @ 3 ghz +Alignment 5 - 4.681 bytes/cycle - 13391.43 MiB/sec @ 3 ghz +Alignment 4 - 4.684 bytes/cycle - 13400.05 MiB/sec @ 3 ghz +Alignment 3 - 4.684 bytes/cycle - 13400.18 MiB/sec @ 3 ghz +Alignment 2 - 4.682 bytes/cycle - 13395.46 MiB/sec @ 3 ghz +Alignment 1 - 4.683 bytes/cycle - 13397.37 MiB/sec @ 3 ghz +Alignment 0 - 4.702 bytes/cycle - 13452.71 MiB/sec @ 3 ghz +Average - 4.684 bytes/cycle - 13400.95 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 41.00 cycles/hash -Small key speed test - 2-byte keys - 43.23 cycles/hash -Small key speed test - 3-byte keys - 44.00 cycles/hash +Small key speed test - 2-byte keys - 43.88 cycles/hash +Small key speed test - 3-byte keys - 44.23 cycles/hash Small key speed test - 4-byte keys - 41.00 cycles/hash -Small key speed test - 5-byte keys - 43.59 cycles/hash +Small key speed test - 5-byte keys - 43.87 cycles/hash Small key speed test - 6-byte keys - 44.00 cycles/hash Small key speed test - 7-byte keys - 46.00 cycles/hash -Small key speed test - 8-byte keys - 41.00 cycles/hash +Small key speed test - 8-byte keys - 41.72 cycles/hash Small key speed test - 9-byte keys - 42.00 cycles/hash -Small key speed test - 10-byte keys - 44.47 cycles/hash -Small key speed test - 11-byte keys - 45.99 cycles/hash -Small key speed test - 12-byte keys - 41.00 cycles/hash -Small key speed test - 13-byte keys - 43.23 cycles/hash -Small key speed test - 14-byte keys - 44.47 cycles/hash +Small key speed test - 10-byte keys - 44.00 cycles/hash +Small key speed test - 11-byte keys - 45.11 cycles/hash +Small key speed test - 12-byte keys - 41.49 cycles/hash +Small key speed test - 13-byte keys - 44.00 cycles/hash +Small key speed test - 14-byte keys - 44.25 cycles/hash Small key speed test - 15-byte keys - 45.00 cycles/hash -Small key speed test - 16-byte keys - 65.10 cycles/hash -Small key speed test - 17-byte keys - 64.64 cycles/hash -Small key speed test - 18-byte keys - 65.32 cycles/hash -Small key speed test - 19-byte keys - 66.00 cycles/hash -Small key speed test - 20-byte keys - 64.52 cycles/hash -Small key speed test - 21-byte keys - 66.57 cycles/hash -Small key speed test - 22-byte keys - 66.77 cycles/hash -Small key speed test - 23-byte keys - 67.43 cycles/hash -Small key speed test - 24-byte keys - 64.91 cycles/hash -Small key speed test - 25-byte keys - 82.00 cycles/hash -Small key speed test - 26-byte keys - 82.41 cycles/hash -Small key speed test - 27-byte keys - 83.91 cycles/hash -Small key speed test - 28-byte keys - 82.79 cycles/hash -Small key speed test - 29-byte keys - 82.00 cycles/hash -Small key speed test - 30-byte keys - 82.61 cycles/hash -Small key speed test - 31-byte keys - 84.69 cycles/hash -Average 58.762 cycles/hash +Small key speed test - 16-byte keys - 64.98 cycles/hash +Small key speed test - 17-byte keys - 65.00 cycles/hash +Small key speed test - 18-byte keys - 65.00 cycles/hash +Small key speed test - 19-byte keys - 66.82 cycles/hash +Small key speed test - 20-byte keys - 65.00 cycles/hash +Small key speed test - 21-byte keys - 65.00 cycles/hash +Small key speed test - 22-byte keys - 66.84 cycles/hash +Small key speed test - 23-byte keys - 67.65 cycles/hash +Small key speed test - 24-byte keys - 65.00 cycles/hash +Small key speed test - 25-byte keys - 66.05 cycles/hash +Small key speed test - 26-byte keys - 63.85 cycles/hash +Small key speed test - 27-byte keys - 64.91 cycles/hash +Small key speed test - 28-byte keys - 64.29 cycles/hash +Small key speed test - 29-byte keys - 63.71 cycles/hash +Small key speed test - 30-byte keys - 66.33 cycles/hash +Small key speed test - 31-byte keys - 64.00 cycles/hash +Small key speed test - 32-byte keys - 65.81 cycles/hash +Average 55.056 cycles/hash +Average, weighted by key length freq. 54.723 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 51.900 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/SpookyV2_128.txt b/doc/SpookyV2_128.txt index 33c695bd..df9f7442 100644 --- a/doc/SpookyV2_128.txt +++ b/doc/SpookyV2_128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x133d0e4bbd35c - 0x133d0e4bbd314). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.716 bytes/cycle - 13493.24 MiB/sec @ 3 ghz -Alignment 6 - 4.722 bytes/cycle - 13509.74 MiB/sec @ 3 ghz -Alignment 5 - 4.722 bytes/cycle - 13510.60 MiB/sec @ 3 ghz -Alignment 4 - 4.718 bytes/cycle - 13499.73 MiB/sec @ 3 ghz -Alignment 3 - 4.721 bytes/cycle - 13508.21 MiB/sec @ 3 ghz -Alignment 2 - 4.722 bytes/cycle - 13509.05 MiB/sec @ 3 ghz -Alignment 1 - 4.723 bytes/cycle - 13513.25 MiB/sec @ 3 ghz -Alignment 0 - 4.739 bytes/cycle - 13558.72 MiB/sec @ 3 ghz -Average - 4.723 bytes/cycle - 13512.82 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 44.00 cycles/hash -Small key speed test - 2-byte keys - 45.88 cycles/hash -Small key speed test - 3-byte keys - 47.00 cycles/hash -Small key speed test - 4-byte keys - 44.00 cycles/hash -Small key speed test - 5-byte keys - 45.79 cycles/hash -Small key speed test - 6-byte keys - 47.38 cycles/hash -Small key speed test - 7-byte keys - 48.83 cycles/hash +Alignment 7 - 3.833 bytes/cycle - 10965.89 MiB/sec @ 3 ghz +Alignment 6 - 3.833 bytes/cycle - 10965.57 MiB/sec @ 3 ghz +Alignment 5 - 3.833 bytes/cycle - 10964.90 MiB/sec @ 3 ghz +Alignment 4 - 3.956 bytes/cycle - 11318.93 MiB/sec @ 3 ghz +Alignment 3 - 4.710 bytes/cycle - 13476.16 MiB/sec @ 3 ghz +Alignment 2 - 4.701 bytes/cycle - 13450.17 MiB/sec @ 3 ghz +Alignment 1 - 4.683 bytes/cycle - 13397.55 MiB/sec @ 3 ghz +Alignment 0 - 4.712 bytes/cycle - 13481.96 MiB/sec @ 3 ghz +Average - 4.283 bytes/cycle - 12252.64 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 44.66 cycles/hash +Small key speed test - 2-byte keys - 46.27 cycles/hash +Small key speed test - 3-byte keys - 47.16 cycles/hash +Small key speed test - 4-byte keys - 44.82 cycles/hash +Small key speed test - 5-byte keys - 46.00 cycles/hash +Small key speed test - 6-byte keys - 47.13 cycles/hash +Small key speed test - 7-byte keys - 49.00 cycles/hash Small key speed test - 8-byte keys - 44.00 cycles/hash -Small key speed test - 9-byte keys - 44.42 cycles/hash -Small key speed test - 10-byte keys - 46.93 cycles/hash -Small key speed test - 11-byte keys - 47.18 cycles/hash -Small key speed test - 12-byte keys - 44.00 cycles/hash -Small key speed test - 13-byte keys - 47.36 cycles/hash -Small key speed test - 14-byte keys - 48.66 cycles/hash -Small key speed test - 15-byte keys - 48.24 cycles/hash -Small key speed test - 16-byte keys - 69.79 cycles/hash -Small key speed test - 17-byte keys - 68.00 cycles/hash -Small key speed test - 18-byte keys - 68.00 cycles/hash -Small key speed test - 19-byte keys - 69.74 cycles/hash -Small key speed test - 20-byte keys - 68.13 cycles/hash -Small key speed test - 21-byte keys - 68.17 cycles/hash -Small key speed test - 22-byte keys - 69.96 cycles/hash -Small key speed test - 23-byte keys - 70.59 cycles/hash -Small key speed test - 24-byte keys - 68.30 cycles/hash -Small key speed test - 25-byte keys - 69.96 cycles/hash -Small key speed test - 26-byte keys - 69.75 cycles/hash -Small key speed test - 27-byte keys - 71.13 cycles/hash -Small key speed test - 28-byte keys - 69.97 cycles/hash -Small key speed test - 29-byte keys - 69.90 cycles/hash -Small key speed test - 30-byte keys - 70.99 cycles/hash -Small key speed test - 31-byte keys - 72.14 cycles/hash -Average 58.328 cycles/hash +Small key speed test - 9-byte keys - 44.98 cycles/hash +Small key speed test - 10-byte keys - 46.00 cycles/hash +Small key speed test - 11-byte keys - 47.77 cycles/hash +Small key speed test - 12-byte keys - 44.76 cycles/hash +Small key speed test - 13-byte keys - 46.00 cycles/hash +Small key speed test - 14-byte keys - 47.64 cycles/hash +Small key speed test - 15-byte keys - 48.56 cycles/hash +Small key speed test - 16-byte keys - 69.97 cycles/hash +Small key speed test - 17-byte keys - 68.85 cycles/hash +Small key speed test - 18-byte keys - 68.85 cycles/hash +Small key speed test - 19-byte keys - 70.00 cycles/hash +Small key speed test - 20-byte keys - 68.86 cycles/hash +Small key speed test - 21-byte keys - 68.85 cycles/hash +Small key speed test - 22-byte keys - 70.00 cycles/hash +Small key speed test - 23-byte keys - 71.52 cycles/hash +Small key speed test - 24-byte keys - 68.90 cycles/hash +Small key speed test - 25-byte keys - 70.00 cycles/hash +Small key speed test - 26-byte keys - 69.97 cycles/hash +Small key speed test - 27-byte keys - 71.94 cycles/hash +Small key speed test - 28-byte keys - 70.00 cycles/hash +Small key speed test - 29-byte keys - 70.00 cycles/hash +Small key speed test - 30-byte keys - 71.00 cycles/hash +Small key speed test - 31-byte keys - 72.74 cycles/hash +Small key speed test - 32-byte keys - 70.00 cycles/hash +Average 58.943 cycles/hash +Average, weighted by key length freq. 58.288 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 55.591 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/SpookyV2_32.txt b/doc/SpookyV2_32.txt index 9407b7c4..6171fff7 100644 --- a/doc/SpookyV2_32.txt +++ b/doc/SpookyV2_32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x133ba1a0f0924 - 0x133ba1a0f08b8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.718 bytes/cycle - 13499.03 MiB/sec @ 3 ghz -Alignment 6 - 4.731 bytes/cycle - 13535.33 MiB/sec @ 3 ghz -Alignment 5 - 4.731 bytes/cycle - 13536.24 MiB/sec @ 3 ghz -Alignment 4 - 4.726 bytes/cycle - 13521.11 MiB/sec @ 3 ghz -Alignment 3 - 4.731 bytes/cycle - 13534.21 MiB/sec @ 3 ghz -Alignment 2 - 4.723 bytes/cycle - 13513.00 MiB/sec @ 3 ghz -Alignment 1 - 4.722 bytes/cycle - 13509.08 MiB/sec @ 3 ghz -Alignment 0 - 4.748 bytes/cycle - 13585.27 MiB/sec @ 3 ghz -Average - 4.729 bytes/cycle - 13529.16 MiB/sec @ 3 ghz +Alignment 7 - 4.753 bytes/cycle - 13597.59 MiB/sec @ 3 ghz +Alignment 6 - 4.762 bytes/cycle - 13624.71 MiB/sec @ 3 ghz +Alignment 5 - 4.762 bytes/cycle - 13623.91 MiB/sec @ 3 ghz +Alignment 4 - 4.762 bytes/cycle - 13622.77 MiB/sec @ 3 ghz +Alignment 3 - 4.761 bytes/cycle - 13621.40 MiB/sec @ 3 ghz +Alignment 2 - 4.761 bytes/cycle - 13620.99 MiB/sec @ 3 ghz +Alignment 1 - 4.761 bytes/cycle - 13621.72 MiB/sec @ 3 ghz +Alignment 0 - 4.781 bytes/cycle - 13678.97 MiB/sec @ 3 ghz +Average - 4.763 bytes/cycle - 13626.51 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 41.00 cycles/hash -Small key speed test - 2-byte keys - 43.90 cycles/hash -Small key speed test - 3-byte keys - 43.99 cycles/hash +Small key speed test - 2-byte keys - 44.49 cycles/hash +Small key speed test - 3-byte keys - 43.45 cycles/hash Small key speed test - 4-byte keys - 41.00 cycles/hash -Small key speed test - 5-byte keys - 43.76 cycles/hash -Small key speed test - 6-byte keys - 43.94 cycles/hash -Small key speed test - 7-byte keys - 46.00 cycles/hash -Small key speed test - 8-byte keys - 41.46 cycles/hash -Small key speed test - 9-byte keys - 42.00 cycles/hash -Small key speed test - 10-byte keys - 44.00 cycles/hash +Small key speed test - 5-byte keys - 43.17 cycles/hash +Small key speed test - 6-byte keys - 43.00 cycles/hash +Small key speed test - 7-byte keys - 45.66 cycles/hash +Small key speed test - 8-byte keys - 41.87 cycles/hash +Small key speed test - 9-byte keys - 42.10 cycles/hash +Small key speed test - 10-byte keys - 44.45 cycles/hash Small key speed test - 11-byte keys - 45.00 cycles/hash -Small key speed test - 12-byte keys - 41.16 cycles/hash -Small key speed test - 13-byte keys - 44.00 cycles/hash -Small key speed test - 14-byte keys - 43.98 cycles/hash -Small key speed test - 15-byte keys - 45.00 cycles/hash -Small key speed test - 16-byte keys - 66.12 cycles/hash -Small key speed test - 17-byte keys - 65.73 cycles/hash -Small key speed test - 18-byte keys - 66.09 cycles/hash -Small key speed test - 19-byte keys - 66.00 cycles/hash -Small key speed test - 20-byte keys - 65.74 cycles/hash -Small key speed test - 21-byte keys - 65.87 cycles/hash -Small key speed test - 22-byte keys - 66.44 cycles/hash -Small key speed test - 23-byte keys - 68.78 cycles/hash -Small key speed test - 24-byte keys - 65.71 cycles/hash -Small key speed test - 25-byte keys - 66.74 cycles/hash -Small key speed test - 26-byte keys - 68.00 cycles/hash -Small key speed test - 27-byte keys - 68.33 cycles/hash -Small key speed test - 28-byte keys - 66.93 cycles/hash -Small key speed test - 29-byte keys - 67.74 cycles/hash -Small key speed test - 30-byte keys - 67.97 cycles/hash -Small key speed test - 31-byte keys - 69.63 cycles/hash -Average 55.548 cycles/hash +Small key speed test - 12-byte keys - 41.00 cycles/hash +Small key speed test - 13-byte keys - 43.61 cycles/hash +Small key speed test - 14-byte keys - 44.69 cycles/hash +Small key speed test - 15-byte keys - 44.29 cycles/hash +Small key speed test - 16-byte keys - 66.00 cycles/hash +Small key speed test - 17-byte keys - 65.80 cycles/hash +Small key speed test - 18-byte keys - 65.00 cycles/hash +Small key speed test - 19-byte keys - 65.59 cycles/hash +Small key speed test - 20-byte keys - 65.33 cycles/hash +Small key speed test - 21-byte keys - 65.00 cycles/hash +Small key speed test - 22-byte keys - 65.69 cycles/hash +Small key speed test - 23-byte keys - 67.90 cycles/hash +Small key speed test - 24-byte keys - 65.00 cycles/hash +Small key speed test - 25-byte keys - 66.00 cycles/hash +Small key speed test - 26-byte keys - 67.23 cycles/hash +Small key speed test - 27-byte keys - 67.00 cycles/hash +Small key speed test - 28-byte keys - 66.00 cycles/hash +Small key speed test - 29-byte keys - 66.00 cycles/hash +Small key speed test - 30-byte keys - 67.00 cycles/hash +Small key speed test - 31-byte keys - 76.63 cycles/hash +Small key speed test - 32-byte keys - 82.00 cycles/hash +Average 56.187 cycles/hash +Average, weighted by key length freq. 55.084 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 52.308 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/SpookyV2_64.txt b/doc/SpookyV2_64.txt index 818bbc9e..3cd4beee 100644 --- a/doc/SpookyV2_64.txt +++ b/doc/SpookyV2_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x133c57bb74428 - 0x133c57bb743bc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 3.831 bytes/cycle - 10959.39 MiB/sec @ 3 ghz -Alignment 6 - 3.831 bytes/cycle - 10959.81 MiB/sec @ 3 ghz -Alignment 5 - 4.644 bytes/cycle - 13287.20 MiB/sec @ 3 ghz -Alignment 4 - 4.634 bytes/cycle - 13257.92 MiB/sec @ 3 ghz -Alignment 3 - 4.626 bytes/cycle - 13235.05 MiB/sec @ 3 ghz -Alignment 2 - 4.620 bytes/cycle - 13218.66 MiB/sec @ 3 ghz -Alignment 1 - 4.621 bytes/cycle - 13220.53 MiB/sec @ 3 ghz -Alignment 0 - 4.646 bytes/cycle - 13291.98 MiB/sec @ 3 ghz -Average - 4.432 bytes/cycle - 12678.82 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 42.00 cycles/hash -Small key speed test - 2-byte keys - 44.85 cycles/hash -Small key speed test - 3-byte keys - 44.99 cycles/hash -Small key speed test - 4-byte keys - 41.99 cycles/hash -Small key speed test - 5-byte keys - 44.79 cycles/hash -Small key speed test - 6-byte keys - 45.00 cycles/hash -Small key speed test - 7-byte keys - 46.87 cycles/hash -Small key speed test - 8-byte keys - 42.00 cycles/hash -Small key speed test - 9-byte keys - 43.00 cycles/hash -Small key speed test - 10-byte keys - 45.00 cycles/hash -Small key speed test - 11-byte keys - 46.00 cycles/hash -Small key speed test - 12-byte keys - 42.28 cycles/hash -Small key speed test - 13-byte keys - 45.00 cycles/hash -Small key speed test - 14-byte keys - 45.00 cycles/hash -Small key speed test - 15-byte keys - 45.87 cycles/hash -Small key speed test - 16-byte keys - 67.79 cycles/hash -Small key speed test - 17-byte keys - 66.89 cycles/hash -Small key speed test - 18-byte keys - 67.60 cycles/hash -Small key speed test - 19-byte keys - 67.55 cycles/hash -Small key speed test - 20-byte keys - 66.89 cycles/hash -Small key speed test - 21-byte keys - 67.49 cycles/hash -Small key speed test - 22-byte keys - 67.77 cycles/hash -Small key speed test - 23-byte keys - 69.90 cycles/hash -Small key speed test - 24-byte keys - 66.97 cycles/hash -Small key speed test - 25-byte keys - 67.96 cycles/hash -Small key speed test - 26-byte keys - 69.59 cycles/hash -Small key speed test - 27-byte keys - 69.73 cycles/hash -Small key speed test - 28-byte keys - 68.00 cycles/hash -Small key speed test - 29-byte keys - 68.53 cycles/hash -Small key speed test - 30-byte keys - 69.76 cycles/hash -Small key speed test - 31-byte keys - 70.99 cycles/hash -Average 56.711 cycles/hash +Alignment 7 - 4.636 bytes/cycle - 13265.02 MiB/sec @ 3 ghz +Alignment 6 - 4.672 bytes/cycle - 13365.92 MiB/sec @ 3 ghz +Alignment 5 - 4.686 bytes/cycle - 13408.02 MiB/sec @ 3 ghz +Alignment 4 - 4.691 bytes/cycle - 13421.55 MiB/sec @ 3 ghz +Alignment 3 - 4.701 bytes/cycle - 13450.76 MiB/sec @ 3 ghz +Alignment 2 - 4.688 bytes/cycle - 13413.53 MiB/sec @ 3 ghz +Alignment 1 - 4.690 bytes/cycle - 13418.00 MiB/sec @ 3 ghz +Alignment 0 - 4.707 bytes/cycle - 13466.27 MiB/sec @ 3 ghz +Average - 4.684 bytes/cycle - 13401.13 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 41.00 cycles/hash +Small key speed test - 2-byte keys - 44.00 cycles/hash +Small key speed test - 3-byte keys - 44.13 cycles/hash +Small key speed test - 4-byte keys - 41.00 cycles/hash +Small key speed test - 5-byte keys - 44.00 cycles/hash +Small key speed test - 6-byte keys - 44.00 cycles/hash +Small key speed test - 7-byte keys - 46.00 cycles/hash +Small key speed test - 8-byte keys - 41.95 cycles/hash +Small key speed test - 9-byte keys - 42.28 cycles/hash +Small key speed test - 10-byte keys - 44.11 cycles/hash +Small key speed test - 11-byte keys - 45.59 cycles/hash +Small key speed test - 12-byte keys - 41.94 cycles/hash +Small key speed test - 13-byte keys - 44.24 cycles/hash +Small key speed test - 14-byte keys - 44.00 cycles/hash +Small key speed test - 15-byte keys - 45.00 cycles/hash +Small key speed test - 16-byte keys - 66.66 cycles/hash +Small key speed test - 17-byte keys - 66.00 cycles/hash +Small key speed test - 18-byte keys - 65.91 cycles/hash +Small key speed test - 19-byte keys - 66.49 cycles/hash +Small key speed test - 20-byte keys - 66.00 cycles/hash +Small key speed test - 21-byte keys - 66.17 cycles/hash +Small key speed test - 22-byte keys - 66.00 cycles/hash +Small key speed test - 23-byte keys - 68.78 cycles/hash +Small key speed test - 24-byte keys - 65.96 cycles/hash +Small key speed test - 25-byte keys - 67.15 cycles/hash +Small key speed test - 26-byte keys - 68.00 cycles/hash +Small key speed test - 27-byte keys - 68.54 cycles/hash +Small key speed test - 28-byte keys - 67.50 cycles/hash +Small key speed test - 29-byte keys - 67.00 cycles/hash +Small key speed test - 30-byte keys - 68.42 cycles/hash +Small key speed test - 31-byte keys - 70.88 cycles/hash +Small key speed test - 32-byte keys - 68.90 cycles/hash +Average 56.176 cycles/hash +Average, weighted by key length freq. 55.465 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 52.715 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/TSip.txt b/doc/TSip.txt index f5280fd7..108c0290 100644 --- a/doc/TSip.txt +++ b/doc/TSip.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x1327ba88a36e4 - 0x1327ba88a369c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.480 bytes/cycle - 4232.97 MiB/sec @ 3 ghz -Alignment 6 - 1.479 bytes/cycle - 4232.19 MiB/sec @ 3 ghz -Alignment 5 - 1.480 bytes/cycle - 4233.11 MiB/sec @ 3 ghz -Alignment 4 - 1.480 bytes/cycle - 4233.51 MiB/sec @ 3 ghz -Alignment 3 - 1.479 bytes/cycle - 4232.57 MiB/sec @ 3 ghz -Alignment 2 - 1.479 bytes/cycle - 4232.04 MiB/sec @ 3 ghz -Alignment 1 - 1.480 bytes/cycle - 4233.42 MiB/sec @ 3 ghz -Alignment 0 - 1.480 bytes/cycle - 4235.58 MiB/sec @ 3 ghz -Average - 1.480 bytes/cycle - 4233.17 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 45.00 cycles/hash -Small key speed test - 2-byte keys - 45.00 cycles/hash -Small key speed test - 3-byte keys - 45.00 cycles/hash -Small key speed test - 4-byte keys - 45.00 cycles/hash -Small key speed test - 5-byte keys - 44.73 cycles/hash -Small key speed test - 6-byte keys - 44.99 cycles/hash -Small key speed test - 7-byte keys - 44.96 cycles/hash -Small key speed test - 8-byte keys - 50.89 cycles/hash -Small key speed test - 9-byte keys - 50.92 cycles/hash -Small key speed test - 10-byte keys - 50.88 cycles/hash -Small key speed test - 11-byte keys - 51.68 cycles/hash -Small key speed test - 12-byte keys - 50.99 cycles/hash -Small key speed test - 13-byte keys - 50.96 cycles/hash -Small key speed test - 14-byte keys - 50.13 cycles/hash -Small key speed test - 15-byte keys - 50.17 cycles/hash -Small key speed test - 16-byte keys - 55.00 cycles/hash -Small key speed test - 17-byte keys - 55.00 cycles/hash -Small key speed test - 18-byte keys - 55.00 cycles/hash -Small key speed test - 19-byte keys - 55.98 cycles/hash -Small key speed test - 20-byte keys - 56.00 cycles/hash -Small key speed test - 21-byte keys - 54.99 cycles/hash -Small key speed test - 22-byte keys - 55.98 cycles/hash -Small key speed test - 23-byte keys - 55.00 cycles/hash -Small key speed test - 24-byte keys - 61.00 cycles/hash -Small key speed test - 25-byte keys - 61.00 cycles/hash -Small key speed test - 26-byte keys - 61.00 cycles/hash -Small key speed test - 27-byte keys - 61.60 cycles/hash -Small key speed test - 28-byte keys - 60.90 cycles/hash -Small key speed test - 29-byte keys - 61.00 cycles/hash -Small key speed test - 30-byte keys - 60.98 cycles/hash -Small key speed test - 31-byte keys - 61.00 cycles/hash -Average 53.314 cycles/hash +Alignment 7 - 1.513 bytes/cycle - 4329.65 MiB/sec @ 3 ghz +Alignment 6 - 1.514 bytes/cycle - 4332.67 MiB/sec @ 3 ghz +Alignment 5 - 1.515 bytes/cycle - 4333.64 MiB/sec @ 3 ghz +Alignment 4 - 1.514 bytes/cycle - 4330.34 MiB/sec @ 3 ghz +Alignment 3 - 1.514 bytes/cycle - 4331.75 MiB/sec @ 3 ghz +Alignment 2 - 1.515 bytes/cycle - 4333.81 MiB/sec @ 3 ghz +Alignment 1 - 1.513 bytes/cycle - 4330.02 MiB/sec @ 3 ghz +Alignment 0 - 1.512 bytes/cycle - 4325.13 MiB/sec @ 3 ghz +Average - 1.514 bytes/cycle - 4330.87 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 44.00 cycles/hash +Small key speed test - 2-byte keys - 44.00 cycles/hash +Small key speed test - 3-byte keys - 44.00 cycles/hash +Small key speed test - 4-byte keys - 44.00 cycles/hash +Small key speed test - 5-byte keys - 43.24 cycles/hash +Small key speed test - 6-byte keys - 44.00 cycles/hash +Small key speed test - 7-byte keys - 43.63 cycles/hash +Small key speed test - 8-byte keys - 49.00 cycles/hash +Small key speed test - 9-byte keys - 49.98 cycles/hash +Small key speed test - 10-byte keys - 49.52 cycles/hash +Small key speed test - 11-byte keys - 50.00 cycles/hash +Small key speed test - 12-byte keys - 50.00 cycles/hash +Small key speed test - 13-byte keys - 49.89 cycles/hash +Small key speed test - 14-byte keys - 49.15 cycles/hash +Small key speed test - 15-byte keys - 49.00 cycles/hash +Small key speed test - 16-byte keys - 54.00 cycles/hash +Small key speed test - 17-byte keys - 54.00 cycles/hash +Small key speed test - 18-byte keys - 54.00 cycles/hash +Small key speed test - 19-byte keys - 54.53 cycles/hash +Small key speed test - 20-byte keys - 54.97 cycles/hash +Small key speed test - 21-byte keys - 53.96 cycles/hash +Small key speed test - 22-byte keys - 54.49 cycles/hash +Small key speed test - 23-byte keys - 54.00 cycles/hash +Small key speed test - 24-byte keys - 59.67 cycles/hash +Small key speed test - 25-byte keys - 59.51 cycles/hash +Small key speed test - 26-byte keys - 59.00 cycles/hash +Small key speed test - 27-byte keys - 60.00 cycles/hash +Small key speed test - 28-byte keys - 59.00 cycles/hash +Small key speed test - 29-byte keys - 59.55 cycles/hash +Small key speed test - 30-byte keys - 59.17 cycles/hash +Small key speed test - 31-byte keys - 59.63 cycles/hash +Small key speed test - 32-byte keys - 65.00 cycles/hash +Average 52.434 cycles/hash +Average, weighted by key length freq. 52.522 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 51.101 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/VHASH_32.txt b/doc/VHASH_32.txt index d7257274..b4f9dcff 100644 --- a/doc/VHASH_32.txt +++ b/doc/VHASH_32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x15be29ad0aa8 - 0x15be29ad0a60). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.560 bytes/cycle - 13047.65 MiB/sec @ 3 ghz -Alignment 6 - 4.561 bytes/cycle - 13048.58 MiB/sec @ 3 ghz -Alignment 5 - 4.561 bytes/cycle - 13048.30 MiB/sec @ 3 ghz -Alignment 4 - 4.561 bytes/cycle - 13048.29 MiB/sec @ 3 ghz -Alignment 3 - 4.561 bytes/cycle - 13048.86 MiB/sec @ 3 ghz -Alignment 2 - 4.561 bytes/cycle - 13048.24 MiB/sec @ 3 ghz -Alignment 1 - 4.553 bytes/cycle - 13025.68 MiB/sec @ 3 ghz -Alignment 0 - 4.583 bytes/cycle - 13111.63 MiB/sec @ 3 ghz -Average - 4.562 bytes/cycle - 13053.40 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 65.24 cycles/hash -Small key speed test - 2-byte keys - 65.00 cycles/hash -Small key speed test - 3-byte keys - 65.00 cycles/hash -Small key speed test - 4-byte keys - 65.00 cycles/hash -Small key speed test - 5-byte keys - 65.00 cycles/hash -Small key speed test - 6-byte keys - 65.00 cycles/hash -Small key speed test - 7-byte keys - 65.00 cycles/hash -Small key speed test - 8-byte keys - 65.00 cycles/hash -Small key speed test - 9-byte keys - 65.00 cycles/hash -Small key speed test - 10-byte keys - 65.00 cycles/hash -Small key speed test - 11-byte keys - 65.00 cycles/hash -Small key speed test - 12-byte keys - 65.00 cycles/hash -Small key speed test - 13-byte keys - 65.24 cycles/hash -Small key speed test - 14-byte keys - 65.00 cycles/hash -Small key speed test - 15-byte keys - 65.00 cycles/hash -Small key speed test - 16-byte keys - 65.00 cycles/hash -Small key speed test - 17-byte keys - 66.00 cycles/hash -Small key speed test - 18-byte keys - 66.50 cycles/hash -Small key speed test - 19-byte keys - 66.00 cycles/hash -Small key speed test - 20-byte keys - 66.47 cycles/hash -Small key speed test - 21-byte keys - 66.93 cycles/hash -Small key speed test - 22-byte keys - 67.03 cycles/hash -Small key speed test - 23-byte keys - 66.95 cycles/hash -Small key speed test - 24-byte keys - 66.85 cycles/hash -Small key speed test - 25-byte keys - 66.93 cycles/hash -Small key speed test - 26-byte keys - 66.77 cycles/hash -Small key speed test - 27-byte keys - 66.84 cycles/hash -Small key speed test - 28-byte keys - 66.91 cycles/hash -Small key speed test - 29-byte keys - 66.75 cycles/hash -Small key speed test - 30-byte keys - 66.88 cycles/hash -Small key speed test - 31-byte keys - 66.84 cycles/hash -Average 65.843 cycles/hash +Alignment 7 - 4.557 bytes/cycle - 13037.27 MiB/sec @ 3 ghz +Alignment 6 - 4.572 bytes/cycle - 13080.27 MiB/sec @ 3 ghz +Alignment 5 - 4.571 bytes/cycle - 13076.90 MiB/sec @ 3 ghz +Alignment 4 - 4.569 bytes/cycle - 13073.44 MiB/sec @ 3 ghz +Alignment 3 - 4.573 bytes/cycle - 13082.96 MiB/sec @ 3 ghz +Alignment 2 - 4.573 bytes/cycle - 13082.35 MiB/sec @ 3 ghz +Alignment 1 - 4.572 bytes/cycle - 13081.40 MiB/sec @ 3 ghz +Alignment 0 - 4.600 bytes/cycle - 13160.40 MiB/sec @ 3 ghz +Average - 4.573 bytes/cycle - 13084.37 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 64.83 cycles/hash +Small key speed test - 2-byte keys - 64.79 cycles/hash +Small key speed test - 3-byte keys - 64.78 cycles/hash +Small key speed test - 4-byte keys - 64.79 cycles/hash +Small key speed test - 5-byte keys - 64.81 cycles/hash +Small key speed test - 6-byte keys - 64.82 cycles/hash +Small key speed test - 7-byte keys - 64.77 cycles/hash +Small key speed test - 8-byte keys - 64.78 cycles/hash +Small key speed test - 9-byte keys - 64.78 cycles/hash +Small key speed test - 10-byte keys - 64.79 cycles/hash +Small key speed test - 11-byte keys - 64.77 cycles/hash +Small key speed test - 12-byte keys - 64.80 cycles/hash +Small key speed test - 13-byte keys - 64.80 cycles/hash +Small key speed test - 14-byte keys - 64.80 cycles/hash +Small key speed test - 15-byte keys - 64.81 cycles/hash +Small key speed test - 16-byte keys - 64.81 cycles/hash +Small key speed test - 17-byte keys - 66.11 cycles/hash +Small key speed test - 18-byte keys - 66.11 cycles/hash +Small key speed test - 19-byte keys - 66.10 cycles/hash +Small key speed test - 20-byte keys - 66.11 cycles/hash +Small key speed test - 21-byte keys - 66.30 cycles/hash +Small key speed test - 22-byte keys - 66.51 cycles/hash +Small key speed test - 23-byte keys - 66.14 cycles/hash +Small key speed test - 24-byte keys - 66.15 cycles/hash +Small key speed test - 25-byte keys - 66.11 cycles/hash +Small key speed test - 26-byte keys - 66.12 cycles/hash +Small key speed test - 27-byte keys - 66.00 cycles/hash +Small key speed test - 28-byte keys - 66.12 cycles/hash +Small key speed test - 29-byte keys - 65.00 cycles/hash +Small key speed test - 30-byte keys - 66.55 cycles/hash +Small key speed test - 31-byte keys - 66.20 cycles/hash +Small key speed test - 32-byte keys - 66.12 cycles/hash +Average 65.452 cycles/hash +Average, weighted by key length freq. 65.384 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 64.810 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/VHASH_64.txt b/doc/VHASH_64.txt index 807fab4e..ad8dd353 100644 --- a/doc/VHASH_64.txt +++ b/doc/VHASH_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x15cb0c0ef6e0 - 0x15cb0c0ef674). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.692 bytes/cycle - 13423.00 MiB/sec @ 3 ghz -Alignment 6 - 4.710 bytes/cycle - 13474.37 MiB/sec @ 3 ghz -Alignment 5 - 4.710 bytes/cycle - 13474.25 MiB/sec @ 3 ghz -Alignment 4 - 4.710 bytes/cycle - 13475.08 MiB/sec @ 3 ghz -Alignment 3 - 4.698 bytes/cycle - 13439.67 MiB/sec @ 3 ghz -Alignment 2 - 4.710 bytes/cycle - 13474.58 MiB/sec @ 3 ghz -Alignment 1 - 4.698 bytes/cycle - 13441.50 MiB/sec @ 3 ghz -Alignment 0 - 4.726 bytes/cycle - 13521.55 MiB/sec @ 3 ghz -Average - 4.707 bytes/cycle - 13465.50 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 63.00 cycles/hash -Small key speed test - 2-byte keys - 63.00 cycles/hash -Small key speed test - 3-byte keys - 63.00 cycles/hash -Small key speed test - 4-byte keys - 63.00 cycles/hash -Small key speed test - 5-byte keys - 63.13 cycles/hash -Small key speed test - 6-byte keys - 63.00 cycles/hash -Small key speed test - 7-byte keys - 63.00 cycles/hash -Small key speed test - 8-byte keys - 63.00 cycles/hash -Small key speed test - 9-byte keys - 63.00 cycles/hash -Small key speed test - 10-byte keys - 63.00 cycles/hash -Small key speed test - 11-byte keys - 63.00 cycles/hash -Small key speed test - 12-byte keys - 63.00 cycles/hash -Small key speed test - 13-byte keys - 63.00 cycles/hash -Small key speed test - 14-byte keys - 63.00 cycles/hash -Small key speed test - 15-byte keys - 63.00 cycles/hash -Small key speed test - 16-byte keys - 63.00 cycles/hash -Small key speed test - 17-byte keys - 64.52 cycles/hash -Small key speed test - 18-byte keys - 64.54 cycles/hash -Small key speed test - 19-byte keys - 64.49 cycles/hash -Small key speed test - 20-byte keys - 64.50 cycles/hash -Small key speed test - 21-byte keys - 64.99 cycles/hash -Small key speed test - 22-byte keys - 64.91 cycles/hash -Small key speed test - 23-byte keys - 64.92 cycles/hash -Small key speed test - 24-byte keys - 64.90 cycles/hash -Small key speed test - 25-byte keys - 64.91 cycles/hash -Small key speed test - 26-byte keys - 64.97 cycles/hash -Small key speed test - 27-byte keys - 64.98 cycles/hash -Small key speed test - 28-byte keys - 64.89 cycles/hash -Small key speed test - 29-byte keys - 64.91 cycles/hash -Small key speed test - 30-byte keys - 64.90 cycles/hash -Small key speed test - 31-byte keys - 64.93 cycles/hash -Average 63.883 cycles/hash +Alignment 7 - 4.615 bytes/cycle - 13203.33 MiB/sec @ 3 ghz +Alignment 6 - 4.617 bytes/cycle - 13209.14 MiB/sec @ 3 ghz +Alignment 5 - 4.617 bytes/cycle - 13208.11 MiB/sec @ 3 ghz +Alignment 4 - 4.618 bytes/cycle - 13210.81 MiB/sec @ 3 ghz +Alignment 3 - 4.617 bytes/cycle - 13208.48 MiB/sec @ 3 ghz +Alignment 2 - 4.616 bytes/cycle - 13207.42 MiB/sec @ 3 ghz +Alignment 1 - 4.616 bytes/cycle - 13205.96 MiB/sec @ 3 ghz +Alignment 0 - 4.644 bytes/cycle - 13287.84 MiB/sec @ 3 ghz +Average - 4.620 bytes/cycle - 13217.64 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 64.00 cycles/hash +Small key speed test - 2-byte keys - 64.00 cycles/hash +Small key speed test - 3-byte keys - 64.00 cycles/hash +Small key speed test - 4-byte keys - 64.00 cycles/hash +Small key speed test - 5-byte keys - 64.00 cycles/hash +Small key speed test - 6-byte keys - 64.00 cycles/hash +Small key speed test - 7-byte keys - 64.00 cycles/hash +Small key speed test - 8-byte keys - 64.00 cycles/hash +Small key speed test - 9-byte keys - 64.00 cycles/hash +Small key speed test - 10-byte keys - 64.00 cycles/hash +Small key speed test - 11-byte keys - 64.00 cycles/hash +Small key speed test - 12-byte keys - 64.00 cycles/hash +Small key speed test - 13-byte keys - 64.00 cycles/hash +Small key speed test - 14-byte keys - 64.00 cycles/hash +Small key speed test - 15-byte keys - 64.00 cycles/hash +Small key speed test - 16-byte keys - 64.00 cycles/hash +Small key speed test - 17-byte keys - 65.81 cycles/hash +Small key speed test - 18-byte keys - 65.76 cycles/hash +Small key speed test - 19-byte keys - 65.81 cycles/hash +Small key speed test - 20-byte keys - 65.76 cycles/hash +Small key speed test - 21-byte keys - 65.77 cycles/hash +Small key speed test - 22-byte keys - 65.82 cycles/hash +Small key speed test - 23-byte keys - 65.79 cycles/hash +Small key speed test - 24-byte keys - 65.88 cycles/hash +Small key speed test - 25-byte keys - 65.85 cycles/hash +Small key speed test - 26-byte keys - 65.82 cycles/hash +Small key speed test - 27-byte keys - 65.84 cycles/hash +Small key speed test - 28-byte keys - 65.86 cycles/hash +Small key speed test - 29-byte keys - 65.80 cycles/hash +Small key speed test - 30-byte keys - 65.77 cycles/hash +Small key speed test - 31-byte keys - 65.77 cycles/hash +Small key speed test - 32-byte keys - 65.80 cycles/hash +Average 64.904 cycles/hash +Average, weighted by key length freq. 64.789 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 64.024 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/aesni-low.txt b/doc/aesni-low.txt index 8be56cab..21a01ea1 100644 --- a/doc/aesni-low.txt +++ b/doc/aesni-low.txt @@ -9,21 +9,22 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x1806531e7204 - 0x1806531e71bc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 11.178 bytes/cycle - 31980.45 MiB/sec @ 3 ghz -Alignment 6 - 10.579 bytes/cycle - 30266.13 MiB/sec @ 3 ghz -Alignment 5 - 11.194 bytes/cycle - 32026.79 MiB/sec @ 3 ghz -Alignment 4 - 11.223 bytes/cycle - 32108.99 MiB/sec @ 3 ghz -Alignment 3 - 11.182 bytes/cycle - 31990.95 MiB/sec @ 3 ghz -Alignment 2 - 11.202 bytes/cycle - 32048.69 MiB/sec @ 3 ghz -Alignment 1 - 10.559 bytes/cycle - 30210.39 MiB/sec @ 3 ghz -Alignment 0 - 10.184 bytes/cycle - 29136.72 MiB/sec @ 3 ghz -Average - 10.913 bytes/cycle - 31221.14 MiB/sec @ 3 ghz +Alignment 7 - 10.773 bytes/cycle - 30820.56 MiB/sec @ 3 ghz +Alignment 6 - 10.759 bytes/cycle - 30782.38 MiB/sec @ 3 ghz +Alignment 5 - 11.146 bytes/cycle - 31888.81 MiB/sec @ 3 ghz +Alignment 4 - 11.213 bytes/cycle - 32081.38 MiB/sec @ 3 ghz +Alignment 3 - 11.146 bytes/cycle - 31888.78 MiB/sec @ 3 ghz +Alignment 2 - 11.151 bytes/cycle - 31902.59 MiB/sec @ 3 ghz +Alignment 1 - 10.708 bytes/cycle - 30636.10 MiB/sec @ 3 ghz +Alignment 0 - 9.863 bytes/cycle - 28218.49 MiB/sec @ 3 ghz +Average - 10.845 bytes/cycle - 31027.39 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 27.00 cycles/hash Small key speed test - 2-byte keys - 27.00 cycles/hash Small key speed test - 3-byte keys - 27.00 cycles/hash -Small key speed test - 4-byte keys - 25.00 cycles/hash +Small key speed test - 4-byte keys - 25.65 cycles/hash Small key speed test - 5-byte keys - 27.00 cycles/hash Small key speed test - 6-byte keys - 27.00 cycles/hash Small key speed test - 7-byte keys - 27.00 cycles/hash @@ -40,18 +41,21 @@ Small key speed test - 17-byte keys - 32.00 cycles/hash Small key speed test - 18-byte keys - 32.00 cycles/hash Small key speed test - 19-byte keys - 32.00 cycles/hash Small key speed test - 20-byte keys - 33.00 cycles/hash -Small key speed test - 21-byte keys - 33.00 cycles/hash -Small key speed test - 22-byte keys - 33.00 cycles/hash -Small key speed test - 23-byte keys - 33.00 cycles/hash -Small key speed test - 24-byte keys - 33.00 cycles/hash -Small key speed test - 25-byte keys - 33.00 cycles/hash -Small key speed test - 26-byte keys - 33.00 cycles/hash -Small key speed test - 27-byte keys - 33.00 cycles/hash -Small key speed test - 28-byte keys - 33.00 cycles/hash -Small key speed test - 29-byte keys - 33.00 cycles/hash -Small key speed test - 30-byte keys - 33.00 cycles/hash -Small key speed test - 31-byte keys - 33.00 cycles/hash -Average 29.645 cycles/hash +Small key speed test - 21-byte keys - 32.00 cycles/hash +Small key speed test - 22-byte keys - 32.00 cycles/hash +Small key speed test - 23-byte keys - 32.00 cycles/hash +Small key speed test - 24-byte keys - 32.23 cycles/hash +Small key speed test - 25-byte keys - 32.12 cycles/hash +Small key speed test - 26-byte keys - 32.00 cycles/hash +Small key speed test - 27-byte keys - 32.00 cycles/hash +Small key speed test - 28-byte keys - 32.00 cycles/hash +Small key speed test - 29-byte keys - 32.00 cycles/hash +Small key speed test - 30-byte keys - 32.19 cycles/hash +Small key speed test - 31-byte keys - 32.00 cycles/hash +Small key speed test - 32-byte keys - 34.00 cycles/hash +Average 29.474 cycles/hash +Average, weighted by key length freq. 29.144 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 26.593 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/aesni.txt b/doc/aesni.txt index 51d29a6d..25988c85 100644 --- a/doc/aesni.txt +++ b/doc/aesni.txt @@ -9,33 +9,34 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x17ff37e03b80 - 0x17ff37e03b14). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 10.965 bytes/cycle - 31371.32 MiB/sec @ 3 ghz -Alignment 6 - 10.953 bytes/cycle - 31335.67 MiB/sec @ 3 ghz -Alignment 5 - 10.930 bytes/cycle - 31271.51 MiB/sec @ 3 ghz -Alignment 4 - 10.993 bytes/cycle - 31450.45 MiB/sec @ 3 ghz -Alignment 3 - 11.374 bytes/cycle - 32540.25 MiB/sec @ 3 ghz -Alignment 2 - 10.882 bytes/cycle - 31134.32 MiB/sec @ 3 ghz -Alignment 1 - 10.921 bytes/cycle - 31246.02 MiB/sec @ 3 ghz -Alignment 0 - 10.314 bytes/cycle - 29509.20 MiB/sec @ 3 ghz -Average - 10.916 bytes/cycle - 31232.34 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 26.96 cycles/hash -Small key speed test - 2-byte keys - 26.96 cycles/hash -Small key speed test - 3-byte keys - 26.97 cycles/hash -Small key speed test - 4-byte keys - 25.00 cycles/hash -Small key speed test - 5-byte keys - 26.96 cycles/hash -Small key speed test - 6-byte keys - 26.96 cycles/hash -Small key speed test - 7-byte keys - 26.97 cycles/hash -Small key speed test - 8-byte keys - 24.00 cycles/hash -Small key speed test - 9-byte keys - 26.98 cycles/hash -Small key speed test - 10-byte keys - 26.97 cycles/hash -Small key speed test - 11-byte keys - 26.98 cycles/hash -Small key speed test - 12-byte keys - 26.97 cycles/hash -Small key speed test - 13-byte keys - 26.98 cycles/hash -Small key speed test - 14-byte keys - 26.97 cycles/hash -Small key speed test - 15-byte keys - 26.96 cycles/hash -Small key speed test - 16-byte keys - 25.00 cycles/hash +Alignment 7 - 11.183 bytes/cycle - 31995.72 MiB/sec @ 3 ghz +Alignment 6 - 10.734 bytes/cycle - 30710.83 MiB/sec @ 3 ghz +Alignment 5 - 10.741 bytes/cycle - 30728.92 MiB/sec @ 3 ghz +Alignment 4 - 10.727 bytes/cycle - 30690.89 MiB/sec @ 3 ghz +Alignment 3 - 11.396 bytes/cycle - 32603.12 MiB/sec @ 3 ghz +Alignment 2 - 11.402 bytes/cycle - 32619.96 MiB/sec @ 3 ghz +Alignment 1 - 11.251 bytes/cycle - 32188.50 MiB/sec @ 3 ghz +Alignment 0 - 9.769 bytes/cycle - 27949.86 MiB/sec @ 3 ghz +Average - 10.900 bytes/cycle - 31185.98 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 27.00 cycles/hash +Small key speed test - 2-byte keys - 27.00 cycles/hash +Small key speed test - 3-byte keys - 27.00 cycles/hash +Small key speed test - 4-byte keys - 25.42 cycles/hash +Small key speed test - 5-byte keys - 27.00 cycles/hash +Small key speed test - 6-byte keys - 27.00 cycles/hash +Small key speed test - 7-byte keys - 26.98 cycles/hash +Small key speed test - 8-byte keys - 25.00 cycles/hash +Small key speed test - 9-byte keys - 27.00 cycles/hash +Small key speed test - 10-byte keys - 27.00 cycles/hash +Small key speed test - 11-byte keys - 27.00 cycles/hash +Small key speed test - 12-byte keys - 27.00 cycles/hash +Small key speed test - 13-byte keys - 27.00 cycles/hash +Small key speed test - 14-byte keys - 27.00 cycles/hash +Small key speed test - 15-byte keys - 27.00 cycles/hash +Small key speed test - 16-byte keys - 25.85 cycles/hash Small key speed test - 17-byte keys - 32.00 cycles/hash Small key speed test - 18-byte keys - 32.00 cycles/hash Small key speed test - 19-byte keys - 32.00 cycles/hash @@ -51,7 +52,10 @@ Small key speed test - 28-byte keys - 32.00 cycles/hash Small key speed test - 29-byte keys - 32.00 cycles/hash Small key speed test - 30-byte keys - 32.00 cycles/hash Small key speed test - 31-byte keys - 32.00 cycles/hash -Average 29.213 cycles/hash +Small key speed test - 32-byte keys - 34.00 cycles/hash +Average 29.445 cycles/hash +Average, weighted by key length freq. 29.123 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 26.531 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/aesnihash.txt b/doc/aesnihash.txt index 702ed1c0..00bd263d 100644 --- a/doc/aesnihash.txt +++ b/doc/aesnihash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x17f31617a984 - 0x17f31617a918). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.950 bytes/cycle - 5579.94 MiB/sec @ 3 ghz -Alignment 6 - 1.950 bytes/cycle - 5579.94 MiB/sec @ 3 ghz -Alignment 5 - 1.950 bytes/cycle - 5579.08 MiB/sec @ 3 ghz -Alignment 4 - 1.950 bytes/cycle - 5579.34 MiB/sec @ 3 ghz -Alignment 3 - 1.950 bytes/cycle - 5578.94 MiB/sec @ 3 ghz -Alignment 2 - 1.950 bytes/cycle - 5578.96 MiB/sec @ 3 ghz -Alignment 1 - 1.950 bytes/cycle - 5578.50 MiB/sec @ 3 ghz -Alignment 0 - 1.950 bytes/cycle - 5579.89 MiB/sec @ 3 ghz -Average - 1.950 bytes/cycle - 5579.32 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 51.00 cycles/hash -Small key speed test - 2-byte keys - 51.00 cycles/hash -Small key speed test - 3-byte keys - 50.00 cycles/hash -Small key speed test - 4-byte keys - 49.90 cycles/hash -Small key speed test - 5-byte keys - 55.99 cycles/hash -Small key speed test - 6-byte keys - 56.22 cycles/hash -Small key speed test - 7-byte keys - 56.00 cycles/hash -Small key speed test - 8-byte keys - 51.00 cycles/hash -Small key speed test - 9-byte keys - 51.00 cycles/hash -Small key speed test - 10-byte keys - 50.00 cycles/hash -Small key speed test - 11-byte keys - 49.96 cycles/hash -Small key speed test - 12-byte keys - 56.33 cycles/hash -Small key speed test - 13-byte keys - 56.14 cycles/hash -Small key speed test - 14-byte keys - 56.00 cycles/hash -Small key speed test - 15-byte keys - 57.51 cycles/hash -Small key speed test - 16-byte keys - 32.00 cycles/hash -Small key speed test - 17-byte keys - 56.51 cycles/hash -Small key speed test - 18-byte keys - 62.89 cycles/hash -Small key speed test - 19-byte keys - 62.86 cycles/hash -Small key speed test - 20-byte keys - 62.62 cycles/hash -Small key speed test - 21-byte keys - 63.00 cycles/hash -Small key speed test - 22-byte keys - 62.88 cycles/hash -Small key speed test - 23-byte keys - 62.85 cycles/hash -Small key speed test - 24-byte keys - 56.92 cycles/hash -Small key speed test - 25-byte keys - 63.00 cycles/hash -Small key speed test - 26-byte keys - 63.50 cycles/hash -Small key speed test - 27-byte keys - 63.05 cycles/hash -Small key speed test - 28-byte keys - 63.00 cycles/hash -Small key speed test - 29-byte keys - 62.89 cycles/hash -Small key speed test - 30-byte keys - 62.81 cycles/hash -Small key speed test - 31-byte keys - 62.77 cycles/hash -Average 56.825 cycles/hash +Alignment 7 - 1.589 bytes/cycle - 4546.58 MiB/sec @ 3 ghz +Alignment 6 - 1.921 bytes/cycle - 5497.08 MiB/sec @ 3 ghz +Alignment 5 - 1.916 bytes/cycle - 5482.28 MiB/sec @ 3 ghz +Alignment 4 - 1.915 bytes/cycle - 5479.11 MiB/sec @ 3 ghz +Alignment 3 - 1.916 bytes/cycle - 5480.32 MiB/sec @ 3 ghz +Alignment 2 - 1.915 bytes/cycle - 5480.25 MiB/sec @ 3 ghz +Alignment 1 - 1.915 bytes/cycle - 5478.84 MiB/sec @ 3 ghz +Alignment 0 - 1.916 bytes/cycle - 5480.32 MiB/sec @ 3 ghz +Average - 1.875 bytes/cycle - 5365.60 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 52.00 cycles/hash +Small key speed test - 2-byte keys - 51.97 cycles/hash +Small key speed test - 3-byte keys - 51.43 cycles/hash +Small key speed test - 4-byte keys - 50.79 cycles/hash +Small key speed test - 5-byte keys - 57.53 cycles/hash +Small key speed test - 6-byte keys - 57.00 cycles/hash +Small key speed test - 7-byte keys - 57.00 cycles/hash +Small key speed test - 8-byte keys - 51.97 cycles/hash +Small key speed test - 9-byte keys - 52.00 cycles/hash +Small key speed test - 10-byte keys - 51.18 cycles/hash +Small key speed test - 11-byte keys - 50.95 cycles/hash +Small key speed test - 12-byte keys - 57.54 cycles/hash +Small key speed test - 13-byte keys - 57.00 cycles/hash +Small key speed test - 14-byte keys - 57.00 cycles/hash +Small key speed test - 15-byte keys - 58.55 cycles/hash +Small key speed test - 16-byte keys - 33.00 cycles/hash +Small key speed test - 17-byte keys - 57.50 cycles/hash +Small key speed test - 18-byte keys - 63.54 cycles/hash +Small key speed test - 19-byte keys - 63.44 cycles/hash +Small key speed test - 20-byte keys - 63.82 cycles/hash +Small key speed test - 21-byte keys - 64.00 cycles/hash +Small key speed test - 22-byte keys - 63.44 cycles/hash +Small key speed test - 23-byte keys - 63.46 cycles/hash +Small key speed test - 24-byte keys - 57.50 cycles/hash +Small key speed test - 25-byte keys - 64.35 cycles/hash +Small key speed test - 26-byte keys - 63.44 cycles/hash +Small key speed test - 27-byte keys - 63.82 cycles/hash +Small key speed test - 28-byte keys - 64.11 cycles/hash +Small key speed test - 29-byte keys - 63.44 cycles/hash +Small key speed test - 30-byte keys - 63.46 cycles/hash +Small key speed test - 31-byte keys - 63.45 cycles/hash +Small key speed test - 32-byte keys - 41.12 cycles/hash +Average 57.213 cycles/hash +Average, weighted by key length freq. 56.670 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 45.609 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/air.html b/doc/air.html index 920dfb06..af0b75eb 100644 --- a/doc/air.html +++ b/doc/air.html @@ -248,6 +248,22 @@

SMhasher

+edonr224 +525.27 +365.89 +504.28 (4) + + + + +edonr256 +525.27 +365.89 +504.28 (4) + + + + blake2s-128 306.43 670.08 @@ -440,6 +456,38 @@

SMhasher

insecure, 100% bias, collisions, distrib, machine-specific (x86 PCLMUL) +crc64_jones1 + + + + +insecure, 100% bias, collisions, distrib + + +crc64_jones2 + + + + +insecure, 100% bias, collisions, distrib + + +crc64_jones3 + + + + +insecure, 100% bias, collisions, distrib + + +crc64_jones + + + + +insecure, 100% bias, collisions, distrib + + o1hash 5525178.01 15.81 @@ -1080,6 +1128,46 @@

SMhasher

0.9% bias +discohash1 +4131.12 +199.00 +398.35 (5) +1294 +bad seeds + + +discohash1-128 +4072.95 +234.17 +438.43 (5) +1294 + + + +discohash2 +3986.52 +207.52 +421.99 (2) +1294 + + + +discohash2-128 +4094.73 +236.61 +433.35 (4) +1294 + + + +discoNONG +3698.45 +399.67 +597.78 (9) + +bad seeds + + TSip 4218.38 52.96 @@ -1088,6 +1176,22 @@

SMhasher

!msvc +aesni +32360.68 +25.66 +629.14 (50) +519 +machine-specific (x64 AES-NI) + + +aesni-low +34262.67 +25.92 +642.08 (68) +519 +machine-specific (x64 AES-NI) + + seahash 7848.36 62.64 @@ -1248,6 +1352,14 @@

SMhasher

+CityCrc256 +19603.25 +42.27 +149.40 (4) + + + + FarmHash32 11957.83 42.76 @@ -1496,6 +1608,30 @@

SMhasher

5 bad seeds +w1hash +2532.89 +37.95 +222.17 (4) + + + + +rapidhash +23789.79 +22.80 +138.71 (7) +574 + + + +rapidhash_unrolled +23892.88 +23.41 +139.47 (12) +782 + + + umash32 15939.18 44.41 @@ -1575,14 +1711,56 @@

SMhasher

1494 + +k-hashv32 +10843.74 +38.41 +157.94 (2) +1280 + + + +k-hashv64 +10820.69 +37.75 +129.51 (2) +1279 + + + +komihash +18568.42 +24.53 +128.57 (1) +728 + + + +polymur +1017.15 +178.25 +313.64 (9) +1128 + + + +gxhash64 +1017.15 +178.25 +313.64 (9) + + + Other timings: diff --git a/doc/asconhashv12.txt b/doc/asconhashv12.txt index 2421d48c..7ebfc414 100644 --- a/doc/asconhashv12.txt +++ b/doc/asconhashv12.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xdca534e3a04 - 0xdca534e39bc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 6 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 5 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 4 - 0.030 bytes/cycle - 86.71 MiB/sec @ 3 ghz -Alignment 3 - 0.030 bytes/cycle - 86.71 MiB/sec @ 3 ghz -Alignment 2 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 1 - 0.030 bytes/cycle - 86.71 MiB/sec @ 3 ghz -Alignment 0 - 0.030 bytes/cycle - 86.78 MiB/sec @ 3 ghz -Average - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1079.61 cycles/hash -Small key speed test - 2-byte keys - 1079.75 cycles/hash -Small key speed test - 3-byte keys - 1079.57 cycles/hash -Small key speed test - 4-byte keys - 1079.55 cycles/hash -Small key speed test - 5-byte keys - 1079.80 cycles/hash -Small key speed test - 6-byte keys - 1079.84 cycles/hash -Small key speed test - 7-byte keys - 1079.78 cycles/hash -Small key speed test - 8-byte keys - 1334.20 cycles/hash -Small key speed test - 9-byte keys - 1350.22 cycles/hash -Small key speed test - 10-byte keys - 1350.24 cycles/hash -Small key speed test - 11-byte keys - 1364.23 cycles/hash -Small key speed test - 12-byte keys - 1350.31 cycles/hash -Small key speed test - 13-byte keys - 1350.25 cycles/hash -Small key speed test - 14-byte keys - 1350.22 cycles/hash -Small key speed test - 15-byte keys - 1350.23 cycles/hash -Small key speed test - 16-byte keys - 1596.39 cycles/hash -Small key speed test - 17-byte keys - 1612.31 cycles/hash -Small key speed test - 18-byte keys - 1612.20 cycles/hash -Small key speed test - 19-byte keys - 1612.29 cycles/hash -Small key speed test - 20-byte keys - 1612.28 cycles/hash -Small key speed test - 21-byte keys - 1612.37 cycles/hash -Small key speed test - 22-byte keys - 1612.32 cycles/hash -Small key speed test - 23-byte keys - 1612.36 cycles/hash -Small key speed test - 24-byte keys - 1859.12 cycles/hash -Small key speed test - 25-byte keys - 1874.60 cycles/hash -Small key speed test - 26-byte keys - 1874.55 cycles/hash -Small key speed test - 27-byte keys - 1874.58 cycles/hash -Small key speed test - 28-byte keys - 1874.61 cycles/hash -Small key speed test - 29-byte keys - 1874.56 cycles/hash -Small key speed test - 30-byte keys - 1874.47 cycles/hash -Small key speed test - 31-byte keys - 1874.61 cycles/hash -Average 1491.014 cycles/hash +Alignment 7 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 6 - 0.057 bytes/cycle - 163.58 MiB/sec @ 3 ghz +Alignment 5 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 4 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 3 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 2 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 1 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 0 - 0.056 bytes/cycle - 158.84 MiB/sec @ 3 ghz +Average - 0.057 bytes/cycle - 162.99 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 615.11 cycles/hash +Small key speed test - 2-byte keys - 615.40 cycles/hash +Small key speed test - 3-byte keys - 613.57 cycles/hash +Small key speed test - 4-byte keys - 613.52 cycles/hash +Small key speed test - 5-byte keys - 614.58 cycles/hash +Small key speed test - 6-byte keys - 613.61 cycles/hash +Small key speed test - 7-byte keys - 613.04 cycles/hash +Small key speed test - 8-byte keys - 737.62 cycles/hash +Small key speed test - 9-byte keys - 749.98 cycles/hash +Small key speed test - 10-byte keys - 751.57 cycles/hash +Small key speed test - 11-byte keys - 750.38 cycles/hash +Small key speed test - 12-byte keys - 751.39 cycles/hash +Small key speed test - 13-byte keys - 750.54 cycles/hash +Small key speed test - 14-byte keys - 750.91 cycles/hash +Small key speed test - 15-byte keys - 750.54 cycles/hash +Small key speed test - 16-byte keys - 878.00 cycles/hash +Small key speed test - 17-byte keys - 893.94 cycles/hash +Small key speed test - 18-byte keys - 895.42 cycles/hash +Small key speed test - 19-byte keys - 894.63 cycles/hash +Small key speed test - 20-byte keys - 894.72 cycles/hash +Small key speed test - 21-byte keys - 894.33 cycles/hash +Small key speed test - 22-byte keys - 894.11 cycles/hash +Small key speed test - 23-byte keys - 893.64 cycles/hash +Small key speed test - 24-byte keys - 1025.10 cycles/hash +Small key speed test - 25-byte keys - 1036.57 cycles/hash +Small key speed test - 26-byte keys - 1037.38 cycles/hash +Small key speed test - 27-byte keys - 1036.56 cycles/hash +Small key speed test - 28-byte keys - 1036.63 cycles/hash +Small key speed test - 29-byte keys - 1035.20 cycles/hash +Small key speed test - 30-byte keys - 1037.21 cycles/hash +Small key speed test - 31-byte keys - 1038.41 cycles/hash +Small key speed test - 32-byte keys - 1175.82 cycles/hash +Average 840.294 cycles/hash +Average, weighted by key length freq. 838.178 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 793.330 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/asconhashv12_64.txt b/doc/asconhashv12_64.txt index 5b1f4975..db82c5f5 100644 --- a/doc/asconhashv12_64.txt +++ b/doc/asconhashv12_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xe69238de300 - 0xe69238de294). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 6 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 5 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 4 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 3 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 2 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 1 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 0 - 0.030 bytes/cycle - 86.78 MiB/sec @ 3 ghz -Average - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 276.25 cycles/hash -Small key speed test - 2-byte keys - 276.25 cycles/hash -Small key speed test - 3-byte keys - 276.00 cycles/hash -Small key speed test - 4-byte keys - 276.00 cycles/hash -Small key speed test - 5-byte keys - 276.00 cycles/hash -Small key speed test - 6-byte keys - 276.00 cycles/hash -Small key speed test - 7-byte keys - 276.00 cycles/hash -Small key speed test - 8-byte keys - 528.06 cycles/hash -Small key speed test - 9-byte keys - 542.88 cycles/hash -Small key speed test - 10-byte keys - 542.83 cycles/hash -Small key speed test - 11-byte keys - 542.89 cycles/hash -Small key speed test - 12-byte keys - 542.95 cycles/hash -Small key speed test - 13-byte keys - 542.87 cycles/hash -Small key speed test - 14-byte keys - 542.81 cycles/hash -Small key speed test - 15-byte keys - 542.91 cycles/hash -Small key speed test - 16-byte keys - 789.71 cycles/hash -Small key speed test - 17-byte keys - 805.05 cycles/hash -Small key speed test - 18-byte keys - 804.91 cycles/hash -Small key speed test - 19-byte keys - 805.05 cycles/hash -Small key speed test - 20-byte keys - 804.94 cycles/hash -Small key speed test - 21-byte keys - 805.05 cycles/hash -Small key speed test - 22-byte keys - 805.02 cycles/hash -Small key speed test - 23-byte keys - 805.10 cycles/hash -Small key speed test - 24-byte keys - 1051.14 cycles/hash -Small key speed test - 25-byte keys - 1066.93 cycles/hash -Small key speed test - 26-byte keys - 1066.75 cycles/hash -Small key speed test - 27-byte keys - 1066.89 cycles/hash -Small key speed test - 28-byte keys - 1066.87 cycles/hash -Small key speed test - 29-byte keys - 1066.97 cycles/hash -Small key speed test - 30-byte keys - 1066.80 cycles/hash -Small key speed test - 31-byte keys - 1066.88 cycles/hash -Average 684.025 cycles/hash +Alignment 7 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 6 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 5 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 4 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 3 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 2 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 1 - 0.055 bytes/cycle - 158.22 MiB/sec @ 3 ghz +Alignment 0 - 0.055 bytes/cycle - 158.07 MiB/sec @ 3 ghz +Average - 0.056 bytes/cycle - 159.33 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 166.51 cycles/hash +Small key speed test - 2-byte keys - 166.48 cycles/hash +Small key speed test - 3-byte keys - 166.48 cycles/hash +Small key speed test - 4-byte keys - 166.49 cycles/hash +Small key speed test - 5-byte keys - 166.45 cycles/hash +Small key speed test - 6-byte keys - 166.47 cycles/hash +Small key speed test - 7-byte keys - 166.51 cycles/hash +Small key speed test - 8-byte keys - 305.01 cycles/hash +Small key speed test - 9-byte keys - 314.07 cycles/hash +Small key speed test - 10-byte keys - 314.09 cycles/hash +Small key speed test - 11-byte keys - 314.06 cycles/hash +Small key speed test - 12-byte keys - 314.02 cycles/hash +Small key speed test - 13-byte keys - 314.00 cycles/hash +Small key speed test - 14-byte keys - 314.05 cycles/hash +Small key speed test - 15-byte keys - 314.07 cycles/hash +Small key speed test - 16-byte keys - 450.20 cycles/hash +Small key speed test - 17-byte keys - 459.25 cycles/hash +Small key speed test - 18-byte keys - 459.23 cycles/hash +Small key speed test - 19-byte keys - 459.01 cycles/hash +Small key speed test - 20-byte keys - 459.26 cycles/hash +Small key speed test - 21-byte keys - 458.73 cycles/hash +Small key speed test - 22-byte keys - 458.63 cycles/hash +Small key speed test - 23-byte keys - 458.72 cycles/hash +Small key speed test - 24-byte keys - 588.70 cycles/hash +Small key speed test - 25-byte keys - 602.91 cycles/hash +Small key speed test - 26-byte keys - 602.95 cycles/hash +Small key speed test - 27-byte keys - 602.94 cycles/hash +Small key speed test - 28-byte keys - 603.59 cycles/hash +Small key speed test - 29-byte keys - 602.96 cycles/hash +Small key speed test - 30-byte keys - 602.86 cycles/hash +Small key speed test - 31-byte keys - 602.81 cycles/hash +Small key speed test - 32-byte keys - 739.82 cycles/hash +Average 402.541 cycles/hash +Average, weighted by key length freq. 402.632 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 359.746 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/beamsplitter.txt b/doc/beamsplitter.txt index 7764a2cd..f9317fd3 100644 --- a/doc/beamsplitter.txt +++ b/doc/beamsplitter.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x12f9fcf2d9b7c - 0x12f9fcf2d9b10). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.201 bytes/cycle - 576.21 MiB/sec @ 3 ghz -Alignment 6 - 0.201 bytes/cycle - 576.25 MiB/sec @ 3 ghz -Alignment 5 - 0.202 bytes/cycle - 576.54 MiB/sec @ 3 ghz -Alignment 4 - 0.202 bytes/cycle - 576.55 MiB/sec @ 3 ghz -Alignment 3 - 0.201 bytes/cycle - 576.49 MiB/sec @ 3 ghz -Alignment 2 - 0.202 bytes/cycle - 576.51 MiB/sec @ 3 ghz -Alignment 1 - 0.202 bytes/cycle - 576.52 MiB/sec @ 3 ghz -Alignment 0 - 0.202 bytes/cycle - 576.75 MiB/sec @ 3 ghz -Average - 0.201 bytes/cycle - 576.48 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 427.99 cycles/hash -Small key speed test - 2-byte keys - 543.56 cycles/hash -Small key speed test - 3-byte keys - 594.64 cycles/hash -Small key speed test - 4-byte keys - 785.31 cycles/hash -Small key speed test - 5-byte keys - 904.49 cycles/hash -Small key speed test - 6-byte keys - 951.26 cycles/hash -Small key speed test - 7-byte keys - 1186.03 cycles/hash -Small key speed test - 8-byte keys - 217.91 cycles/hash -Small key speed test - 9-byte keys - 367.33 cycles/hash -Small key speed test - 10-byte keys - 497.00 cycles/hash -Small key speed test - 11-byte keys - 684.98 cycles/hash -Small key speed test - 12-byte keys - 847.50 cycles/hash -Small key speed test - 13-byte keys - 937.87 cycles/hash -Small key speed test - 14-byte keys - 1121.24 cycles/hash -Small key speed test - 15-byte keys - 1241.52 cycles/hash -Small key speed test - 16-byte keys - 362.42 cycles/hash -Small key speed test - 17-byte keys - 520.18 cycles/hash -Small key speed test - 18-byte keys - 742.47 cycles/hash -Small key speed test - 19-byte keys - 807.83 cycles/hash -Small key speed test - 20-byte keys - 954.17 cycles/hash -Small key speed test - 21-byte keys - 1119.62 cycles/hash -Small key speed test - 22-byte keys - 1238.78 cycles/hash -Small key speed test - 23-byte keys - 1388.56 cycles/hash -Small key speed test - 24-byte keys - 363.29 cycles/hash -Small key speed test - 25-byte keys - 509.56 cycles/hash -Small key speed test - 26-byte keys - 589.65 cycles/hash -Small key speed test - 27-byte keys - 670.13 cycles/hash -Small key speed test - 28-byte keys - 1051.20 cycles/hash -Small key speed test - 29-byte keys - 1127.21 cycles/hash -Small key speed test - 30-byte keys - 946.51 cycles/hash -Small key speed test - 31-byte keys - 1427.34 cycles/hash -Average 810.565 cycles/hash +Alignment 7 - 0.200 bytes/cycle - 573.03 MiB/sec @ 3 ghz +Alignment 6 - 0.200 bytes/cycle - 573.02 MiB/sec @ 3 ghz +Alignment 5 - 0.200 bytes/cycle - 573.02 MiB/sec @ 3 ghz +Alignment 4 - 0.200 bytes/cycle - 573.01 MiB/sec @ 3 ghz +Alignment 3 - 0.200 bytes/cycle - 573.02 MiB/sec @ 3 ghz +Alignment 2 - 0.200 bytes/cycle - 573.01 MiB/sec @ 3 ghz +Alignment 1 - 0.200 bytes/cycle - 571.29 MiB/sec @ 3 ghz +Alignment 0 - 0.200 bytes/cycle - 572.26 MiB/sec @ 3 ghz +Average - 0.200 bytes/cycle - 572.71 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 432.44 cycles/hash +Small key speed test - 2-byte keys - 548.94 cycles/hash +Small key speed test - 3-byte keys - 601.90 cycles/hash +Small key speed test - 4-byte keys - 792.80 cycles/hash +Small key speed test - 5-byte keys - 913.49 cycles/hash +Small key speed test - 6-byte keys - 962.38 cycles/hash +Small key speed test - 7-byte keys - 1151.25 cycles/hash +Small key speed test - 8-byte keys - 220.71 cycles/hash +Small key speed test - 9-byte keys - 370.88 cycles/hash +Small key speed test - 10-byte keys - 503.32 cycles/hash +Small key speed test - 11-byte keys - 693.25 cycles/hash +Small key speed test - 12-byte keys - 869.18 cycles/hash +Small key speed test - 13-byte keys - 948.29 cycles/hash +Small key speed test - 14-byte keys - 1124.78 cycles/hash +Small key speed test - 15-byte keys - 1297.49 cycles/hash +Small key speed test - 16-byte keys - 360.45 cycles/hash +Small key speed test - 17-byte keys - 518.20 cycles/hash +Small key speed test - 18-byte keys - 763.17 cycles/hash +Small key speed test - 19-byte keys - 803.73 cycles/hash +Small key speed test - 20-byte keys - 948.12 cycles/hash +Small key speed test - 21-byte keys - 1115.97 cycles/hash +Small key speed test - 22-byte keys - 1234.22 cycles/hash +Small key speed test - 23-byte keys - 1383.06 cycles/hash +Small key speed test - 24-byte keys - 361.31 cycles/hash +Small key speed test - 25-byte keys - 506.81 cycles/hash +Small key speed test - 26-byte keys - 585.58 cycles/hash +Small key speed test - 27-byte keys - 683.69 cycles/hash +Small key speed test - 28-byte keys - 1058.67 cycles/hash +Small key speed test - 29-byte keys - 1199.24 cycles/hash +Small key speed test - 30-byte keys - 962.84 cycles/hash +Small key speed test - 31-byte keys - 1521.83 cycles/hash +Small key speed test - 32-byte keys - 375.43 cycles/hash +Average 806.670 cycles/hash +Average, weighted by key length freq. 816.089 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 522.233 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/bernstein.txt b/doc/bernstein.txt index 79f3264c..a14e5dc1 100644 --- a/doc/bernstein.txt +++ b/doc/bernstein.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x14843bfa3b20 - 0x14843bfa3ab4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.366 bytes/cycle - 1046.32 MiB/sec @ 3 ghz -Alignment 6 - 0.365 bytes/cycle - 1044.90 MiB/sec @ 3 ghz -Alignment 5 - 0.365 bytes/cycle - 1044.91 MiB/sec @ 3 ghz -Alignment 4 - 0.366 bytes/cycle - 1046.32 MiB/sec @ 3 ghz -Alignment 3 - 0.366 bytes/cycle - 1046.32 MiB/sec @ 3 ghz -Alignment 2 - 0.366 bytes/cycle - 1046.32 MiB/sec @ 3 ghz -Alignment 1 - 0.366 bytes/cycle - 1046.32 MiB/sec @ 3 ghz -Alignment 0 - 0.366 bytes/cycle - 1046.37 MiB/sec @ 3 ghz -Average - 0.366 bytes/cycle - 1045.97 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 16.96 cycles/hash -Small key speed test - 2-byte keys - 20.58 cycles/hash -Small key speed test - 3-byte keys - 21.75 cycles/hash -Small key speed test - 4-byte keys - 23.87 cycles/hash -Small key speed test - 5-byte keys - 26.00 cycles/hash -Small key speed test - 6-byte keys - 29.00 cycles/hash -Small key speed test - 7-byte keys - 32.00 cycles/hash -Small key speed test - 8-byte keys - 34.00 cycles/hash -Small key speed test - 9-byte keys - 43.04 cycles/hash -Small key speed test - 10-byte keys - 49.00 cycles/hash -Small key speed test - 11-byte keys - 52.98 cycles/hash -Small key speed test - 12-byte keys - 55.00 cycles/hash -Small key speed test - 13-byte keys - 59.00 cycles/hash -Small key speed test - 14-byte keys - 61.13 cycles/hash -Small key speed test - 15-byte keys - 53.00 cycles/hash -Small key speed test - 16-byte keys - 56.00 cycles/hash -Small key speed test - 17-byte keys - 59.00 cycles/hash -Small key speed test - 18-byte keys - 61.99 cycles/hash -Small key speed test - 19-byte keys - 64.45 cycles/hash -Small key speed test - 20-byte keys - 67.45 cycles/hash -Small key speed test - 21-byte keys - 70.00 cycles/hash -Small key speed test - 22-byte keys - 72.66 cycles/hash -Small key speed test - 23-byte keys - 75.54 cycles/hash -Small key speed test - 24-byte keys - 78.49 cycles/hash -Small key speed test - 25-byte keys - 81.00 cycles/hash -Small key speed test - 26-byte keys - 84.00 cycles/hash -Small key speed test - 27-byte keys - 86.48 cycles/hash -Small key speed test - 28-byte keys - 89.56 cycles/hash -Small key speed test - 29-byte keys - 91.81 cycles/hash -Small key speed test - 30-byte keys - 94.54 cycles/hash -Small key speed test - 31-byte keys - 97.33 cycles/hash -Average 58.310 cycles/hash +Alignment 7 - 0.362 bytes/cycle - 1035.03 MiB/sec @ 3 ghz +Alignment 6 - 0.362 bytes/cycle - 1035.09 MiB/sec @ 3 ghz +Alignment 5 - 0.362 bytes/cycle - 1035.08 MiB/sec @ 3 ghz +Alignment 4 - 0.362 bytes/cycle - 1035.30 MiB/sec @ 3 ghz +Alignment 3 - 0.362 bytes/cycle - 1035.29 MiB/sec @ 3 ghz +Alignment 2 - 0.362 bytes/cycle - 1035.47 MiB/sec @ 3 ghz +Alignment 1 - 0.359 bytes/cycle - 1028.09 MiB/sec @ 3 ghz +Alignment 0 - 0.355 bytes/cycle - 1016.64 MiB/sec @ 3 ghz +Average - 0.361 bytes/cycle - 1032.00 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 15.13 cycles/hash +Small key speed test - 2-byte keys - 18.00 cycles/hash +Small key speed test - 3-byte keys - 21.00 cycles/hash +Small key speed test - 4-byte keys - 24.00 cycles/hash +Small key speed test - 5-byte keys - 26.98 cycles/hash +Small key speed test - 6-byte keys - 29.65 cycles/hash +Small key speed test - 7-byte keys - 32.44 cycles/hash +Small key speed test - 8-byte keys - 35.00 cycles/hash +Small key speed test - 9-byte keys - 38.00 cycles/hash +Small key speed test - 10-byte keys - 41.00 cycles/hash +Small key speed test - 11-byte keys - 44.00 cycles/hash +Small key speed test - 12-byte keys - 46.00 cycles/hash +Small key speed test - 13-byte keys - 49.00 cycles/hash +Small key speed test - 14-byte keys - 52.00 cycles/hash +Small key speed test - 15-byte keys - 55.00 cycles/hash +Small key speed test - 16-byte keys - 57.83 cycles/hash +Small key speed test - 17-byte keys - 60.00 cycles/hash +Small key speed test - 18-byte keys - 63.00 cycles/hash +Small key speed test - 19-byte keys - 66.00 cycles/hash +Small key speed test - 20-byte keys - 69.00 cycles/hash +Small key speed test - 21-byte keys - 72.00 cycles/hash +Small key speed test - 22-byte keys - 74.43 cycles/hash +Small key speed test - 23-byte keys - 77.19 cycles/hash +Small key speed test - 24-byte keys - 80.00 cycles/hash +Small key speed test - 25-byte keys - 83.00 cycles/hash +Small key speed test - 26-byte keys - 86.00 cycles/hash +Small key speed test - 27-byte keys - 88.26 cycles/hash +Small key speed test - 28-byte keys - 91.60 cycles/hash +Small key speed test - 29-byte keys - 94.53 cycles/hash +Small key speed test - 30-byte keys - 97.00 cycles/hash +Small key speed test - 31-byte keys - 100.00 cycles/hash +Small key speed test - 32-byte keys - 102.19 cycles/hash +Average 59.039 cycles/hash +Average, weighted by key length freq. 58.881 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 47.667 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/blake2b-160.txt b/doc/blake2b-160.txt index 2cff1b51..3d4a4105 100644 --- a/doc/blake2b-160.txt +++ b/doc/blake2b-160.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 144 (0x90) ticks (0xbccfa0988f8 - 0xbccfa098868). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 6 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 5 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 4 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 3 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 2 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 1 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 0 - 0.129 bytes/cycle - 369.60 MiB/sec @ 3 ghz -Average - 0.129 bytes/cycle - 368.85 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1154.61 cycles/hash -Small key speed test - 2-byte keys - 1151.35 cycles/hash -Small key speed test - 3-byte keys - 1150.73 cycles/hash -Small key speed test - 4-byte keys - 1155.13 cycles/hash -Small key speed test - 5-byte keys - 1153.00 cycles/hash -Small key speed test - 6-byte keys - 1153.00 cycles/hash -Small key speed test - 7-byte keys - 1153.00 cycles/hash -Small key speed test - 8-byte keys - 1172.01 cycles/hash -Small key speed test - 9-byte keys - 1174.28 cycles/hash -Small key speed test - 10-byte keys - 1174.34 cycles/hash -Small key speed test - 11-byte keys - 1173.93 cycles/hash -Small key speed test - 12-byte keys - 1173.96 cycles/hash -Small key speed test - 13-byte keys - 1173.29 cycles/hash -Small key speed test - 14-byte keys - 1173.24 cycles/hash -Small key speed test - 15-byte keys - 1173.47 cycles/hash -Small key speed test - 16-byte keys - 1174.46 cycles/hash -Small key speed test - 17-byte keys - 1173.90 cycles/hash -Small key speed test - 18-byte keys - 1174.00 cycles/hash -Small key speed test - 19-byte keys - 1173.75 cycles/hash -Small key speed test - 20-byte keys - 1174.03 cycles/hash -Small key speed test - 21-byte keys - 1173.78 cycles/hash -Small key speed test - 22-byte keys - 1173.78 cycles/hash -Small key speed test - 23-byte keys - 1173.77 cycles/hash -Small key speed test - 24-byte keys - 1177.99 cycles/hash -Small key speed test - 25-byte keys - 1177.49 cycles/hash -Small key speed test - 26-byte keys - 1177.49 cycles/hash -Small key speed test - 27-byte keys - 1177.51 cycles/hash -Small key speed test - 28-byte keys - 1177.93 cycles/hash -Small key speed test - 29-byte keys - 1177.50 cycles/hash -Small key speed test - 30-byte keys - 1177.50 cycles/hash -Small key speed test - 31-byte keys - 1177.49 cycles/hash -Average 1170.056 cycles/hash +Alignment 7 - 0.201 bytes/cycle - 576.31 MiB/sec @ 3 ghz +Alignment 6 - 0.202 bytes/cycle - 578.71 MiB/sec @ 3 ghz +Alignment 5 - 0.202 bytes/cycle - 578.66 MiB/sec @ 3 ghz +Alignment 4 - 0.202 bytes/cycle - 578.70 MiB/sec @ 3 ghz +Alignment 3 - 0.202 bytes/cycle - 578.80 MiB/sec @ 3 ghz +Alignment 2 - 0.202 bytes/cycle - 578.02 MiB/sec @ 3 ghz +Alignment 1 - 0.202 bytes/cycle - 578.69 MiB/sec @ 3 ghz +Alignment 0 - 0.202 bytes/cycle - 578.70 MiB/sec @ 3 ghz +Average - 0.202 bytes/cycle - 578.32 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 761.73 cycles/hash +Small key speed test - 2-byte keys - 766.80 cycles/hash +Small key speed test - 3-byte keys - 769.83 cycles/hash +Small key speed test - 4-byte keys - 768.27 cycles/hash +Small key speed test - 5-byte keys - 762.93 cycles/hash +Small key speed test - 6-byte keys - 762.12 cycles/hash +Small key speed test - 7-byte keys - 760.45 cycles/hash +Small key speed test - 8-byte keys - 791.85 cycles/hash +Small key speed test - 9-byte keys - 784.32 cycles/hash +Small key speed test - 10-byte keys - 784.39 cycles/hash +Small key speed test - 11-byte keys - 784.01 cycles/hash +Small key speed test - 12-byte keys - 791.16 cycles/hash +Small key speed test - 13-byte keys - 782.13 cycles/hash +Small key speed test - 14-byte keys - 783.65 cycles/hash +Small key speed test - 15-byte keys - 783.19 cycles/hash +Small key speed test - 16-byte keys - 781.72 cycles/hash +Small key speed test - 17-byte keys - 779.29 cycles/hash +Small key speed test - 18-byte keys - 776.97 cycles/hash +Small key speed test - 19-byte keys - 777.00 cycles/hash +Small key speed test - 20-byte keys - 786.39 cycles/hash +Small key speed test - 21-byte keys - 780.20 cycles/hash +Small key speed test - 22-byte keys - 779.53 cycles/hash +Small key speed test - 23-byte keys - 777.67 cycles/hash +Small key speed test - 24-byte keys - 790.50 cycles/hash +Small key speed test - 25-byte keys - 785.74 cycles/hash +Small key speed test - 26-byte keys - 786.46 cycles/hash +Small key speed test - 27-byte keys - 786.63 cycles/hash +Small key speed test - 28-byte keys - 790.77 cycles/hash +Small key speed test - 29-byte keys - 785.11 cycles/hash +Small key speed test - 30-byte keys - 786.28 cycles/hash +Small key speed test - 31-byte keys - 785.46 cycles/hash +Small key speed test - 32-byte keys - 801.69 cycles/hash +Average 780.445 cycles/hash +Average, weighted by key length freq. 783.019 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 782.230 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2b-224.txt b/doc/blake2b-224.txt index c034e015..c2eb0e27 100644 --- a/doc/blake2b-224.txt +++ b/doc/blake2b-224.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xc4e4306bedc - 0xc4e4306be70). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 6 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 5 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 4 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 3 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 2 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 1 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 0 - 0.129 bytes/cycle - 369.58 MiB/sec @ 3 ghz -Average - 0.129 bytes/cycle - 368.85 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1156.76 cycles/hash -Small key speed test - 2-byte keys - 1152.14 cycles/hash -Small key speed test - 3-byte keys - 1152.12 cycles/hash -Small key speed test - 4-byte keys - 1160.77 cycles/hash -Small key speed test - 5-byte keys - 1160.66 cycles/hash -Small key speed test - 6-byte keys - 1160.94 cycles/hash -Small key speed test - 7-byte keys - 1160.59 cycles/hash -Small key speed test - 8-byte keys - 1175.22 cycles/hash -Small key speed test - 9-byte keys - 1175.29 cycles/hash -Small key speed test - 10-byte keys - 1175.36 cycles/hash -Small key speed test - 11-byte keys - 1175.32 cycles/hash -Small key speed test - 12-byte keys - 1174.82 cycles/hash -Small key speed test - 13-byte keys - 1175.03 cycles/hash -Small key speed test - 14-byte keys - 1175.09 cycles/hash -Small key speed test - 15-byte keys - 1174.66 cycles/hash -Small key speed test - 16-byte keys - 1174.93 cycles/hash -Small key speed test - 17-byte keys - 1173.91 cycles/hash -Small key speed test - 18-byte keys - 1173.88 cycles/hash -Small key speed test - 19-byte keys - 1173.75 cycles/hash -Small key speed test - 20-byte keys - 1174.34 cycles/hash -Small key speed test - 21-byte keys - 1172.98 cycles/hash -Small key speed test - 22-byte keys - 1172.98 cycles/hash -Small key speed test - 23-byte keys - 1172.98 cycles/hash -Small key speed test - 24-byte keys - 1177.75 cycles/hash -Small key speed test - 25-byte keys - 1177.65 cycles/hash -Small key speed test - 26-byte keys - 1177.65 cycles/hash -Small key speed test - 27-byte keys - 1177.57 cycles/hash -Small key speed test - 28-byte keys - 1177.79 cycles/hash -Small key speed test - 29-byte keys - 1177.67 cycles/hash -Small key speed test - 30-byte keys - 1177.68 cycles/hash -Small key speed test - 31-byte keys - 1177.65 cycles/hash -Average 1171.482 cycles/hash +Alignment 7 - 0.204 bytes/cycle - 582.55 MiB/sec @ 3 ghz +Alignment 6 - 0.203 bytes/cycle - 579.48 MiB/sec @ 3 ghz +Alignment 5 - 0.200 bytes/cycle - 573.37 MiB/sec @ 3 ghz +Alignment 4 - 0.203 bytes/cycle - 580.27 MiB/sec @ 3 ghz +Alignment 3 - 0.202 bytes/cycle - 578.74 MiB/sec @ 3 ghz +Alignment 2 - 0.202 bytes/cycle - 578.88 MiB/sec @ 3 ghz +Alignment 1 - 0.202 bytes/cycle - 577.76 MiB/sec @ 3 ghz +Alignment 0 - 0.202 bytes/cycle - 577.48 MiB/sec @ 3 ghz +Average - 0.202 bytes/cycle - 578.57 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 762.85 cycles/hash +Small key speed test - 2-byte keys - 768.42 cycles/hash +Small key speed test - 3-byte keys - 766.96 cycles/hash +Small key speed test - 4-byte keys - 766.95 cycles/hash +Small key speed test - 5-byte keys - 759.01 cycles/hash +Small key speed test - 6-byte keys - 761.20 cycles/hash +Small key speed test - 7-byte keys - 762.11 cycles/hash +Small key speed test - 8-byte keys - 791.54 cycles/hash +Small key speed test - 9-byte keys - 782.69 cycles/hash +Small key speed test - 10-byte keys - 788.86 cycles/hash +Small key speed test - 11-byte keys - 783.29 cycles/hash +Small key speed test - 12-byte keys - 791.21 cycles/hash +Small key speed test - 13-byte keys - 782.70 cycles/hash +Small key speed test - 14-byte keys - 767.69 cycles/hash +Small key speed test - 15-byte keys - 758.43 cycles/hash +Small key speed test - 16-byte keys - 758.34 cycles/hash +Small key speed test - 17-byte keys - 763.90 cycles/hash +Small key speed test - 18-byte keys - 766.08 cycles/hash +Small key speed test - 19-byte keys - 765.18 cycles/hash +Small key speed test - 20-byte keys - 758.11 cycles/hash +Small key speed test - 21-byte keys - 764.73 cycles/hash +Small key speed test - 22-byte keys - 762.59 cycles/hash +Small key speed test - 23-byte keys - 764.18 cycles/hash +Small key speed test - 24-byte keys - 767.41 cycles/hash +Small key speed test - 25-byte keys - 759.22 cycles/hash +Small key speed test - 26-byte keys - 760.13 cycles/hash +Small key speed test - 27-byte keys - 761.05 cycles/hash +Small key speed test - 28-byte keys - 764.01 cycles/hash +Small key speed test - 29-byte keys - 762.39 cycles/hash +Small key speed test - 30-byte keys - 758.48 cycles/hash +Small key speed test - 31-byte keys - 763.97 cycles/hash +Small key speed test - 32-byte keys - 764.38 cycles/hash +Average 767.440 cycles/hash +Average, weighted by key length freq. 770.444 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 771.449 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2b-256.txt b/doc/blake2b-256.txt index 0e8c1040..7b3ca3c3 100644 --- a/doc/blake2b-256.txt +++ b/doc/blake2b-256.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xccda100cd44 - 0xccda100ccfc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.209 bytes/cycle - 597.06 MiB/sec @ 3 ghz -Alignment 6 - 0.209 bytes/cycle - 597.89 MiB/sec @ 3 ghz -Alignment 5 - 0.209 bytes/cycle - 597.63 MiB/sec @ 3 ghz -Alignment 4 - 0.209 bytes/cycle - 597.89 MiB/sec @ 3 ghz -Alignment 3 - 0.209 bytes/cycle - 597.87 MiB/sec @ 3 ghz -Alignment 2 - 0.208 bytes/cycle - 595.60 MiB/sec @ 3 ghz -Alignment 1 - 0.207 bytes/cycle - 591.32 MiB/sec @ 3 ghz -Alignment 0 - 0.185 bytes/cycle - 529.05 MiB/sec @ 3 ghz -Average - 0.206 bytes/cycle - 588.04 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 744.48 cycles/hash -Small key speed test - 2-byte keys - 751.44 cycles/hash -Small key speed test - 3-byte keys - 749.51 cycles/hash -Small key speed test - 4-byte keys - 748.15 cycles/hash -Small key speed test - 5-byte keys - 743.56 cycles/hash -Small key speed test - 6-byte keys - 744.97 cycles/hash -Small key speed test - 7-byte keys - 742.13 cycles/hash -Small key speed test - 8-byte keys - 769.17 cycles/hash -Small key speed test - 9-byte keys - 772.36 cycles/hash -Small key speed test - 10-byte keys - 764.64 cycles/hash -Small key speed test - 11-byte keys - 762.07 cycles/hash -Small key speed test - 12-byte keys - 766.97 cycles/hash -Small key speed test - 13-byte keys - 764.21 cycles/hash -Small key speed test - 14-byte keys - 765.57 cycles/hash -Small key speed test - 15-byte keys - 765.41 cycles/hash -Small key speed test - 16-byte keys - 771.03 cycles/hash -Small key speed test - 17-byte keys - 772.86 cycles/hash -Small key speed test - 18-byte keys - 768.48 cycles/hash -Small key speed test - 19-byte keys - 769.67 cycles/hash -Small key speed test - 20-byte keys - 770.24 cycles/hash -Small key speed test - 21-byte keys - 769.36 cycles/hash -Small key speed test - 22-byte keys - 760.45 cycles/hash -Small key speed test - 23-byte keys - 759.89 cycles/hash -Small key speed test - 24-byte keys - 774.39 cycles/hash -Small key speed test - 25-byte keys - 761.49 cycles/hash -Small key speed test - 26-byte keys - 764.74 cycles/hash -Small key speed test - 27-byte keys - 767.61 cycles/hash -Small key speed test - 28-byte keys - 770.63 cycles/hash -Small key speed test - 29-byte keys - 765.31 cycles/hash -Small key speed test - 30-byte keys - 775.36 cycles/hash -Small key speed test - 31-byte keys - 779.89 cycles/hash -Average 763.099 cycles/hash +Alignment 7 - 0.204 bytes/cycle - 582.66 MiB/sec @ 3 ghz +Alignment 6 - 0.204 bytes/cycle - 582.68 MiB/sec @ 3 ghz +Alignment 5 - 0.204 bytes/cycle - 582.50 MiB/sec @ 3 ghz +Alignment 4 - 0.204 bytes/cycle - 582.64 MiB/sec @ 3 ghz +Alignment 3 - 0.204 bytes/cycle - 582.55 MiB/sec @ 3 ghz +Alignment 2 - 0.203 bytes/cycle - 581.89 MiB/sec @ 3 ghz +Alignment 1 - 0.204 bytes/cycle - 582.54 MiB/sec @ 3 ghz +Alignment 0 - 0.204 bytes/cycle - 582.43 MiB/sec @ 3 ghz +Average - 0.204 bytes/cycle - 582.49 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 741.67 cycles/hash +Small key speed test - 2-byte keys - 751.89 cycles/hash +Small key speed test - 3-byte keys - 750.57 cycles/hash +Small key speed test - 4-byte keys - 744.22 cycles/hash +Small key speed test - 5-byte keys - 737.41 cycles/hash +Small key speed test - 6-byte keys - 737.91 cycles/hash +Small key speed test - 7-byte keys - 738.44 cycles/hash +Small key speed test - 8-byte keys - 762.73 cycles/hash +Small key speed test - 9-byte keys - 761.67 cycles/hash +Small key speed test - 10-byte keys - 760.93 cycles/hash +Small key speed test - 11-byte keys - 759.49 cycles/hash +Small key speed test - 12-byte keys - 766.41 cycles/hash +Small key speed test - 13-byte keys - 758.61 cycles/hash +Small key speed test - 14-byte keys - 762.06 cycles/hash +Small key speed test - 15-byte keys - 759.88 cycles/hash +Small key speed test - 16-byte keys - 763.35 cycles/hash +Small key speed test - 17-byte keys - 760.25 cycles/hash +Small key speed test - 18-byte keys - 760.60 cycles/hash +Small key speed test - 19-byte keys - 762.97 cycles/hash +Small key speed test - 20-byte keys - 761.28 cycles/hash +Small key speed test - 21-byte keys - 760.50 cycles/hash +Small key speed test - 22-byte keys - 756.80 cycles/hash +Small key speed test - 23-byte keys - 762.10 cycles/hash +Small key speed test - 24-byte keys - 761.99 cycles/hash +Small key speed test - 25-byte keys - 762.22 cycles/hash +Small key speed test - 26-byte keys - 761.54 cycles/hash +Small key speed test - 27-byte keys - 760.52 cycles/hash +Small key speed test - 28-byte keys - 761.99 cycles/hash +Small key speed test - 29-byte keys - 763.03 cycles/hash +Small key speed test - 30-byte keys - 761.81 cycles/hash +Small key speed test - 31-byte keys - 765.63 cycles/hash +Small key speed test - 32-byte keys - 763.76 cycles/hash +Average 757.633 cycles/hash +Average, weighted by key length freq. 760.928 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 760.674 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2b-256_64.txt b/doc/blake2b-256_64.txt index 3763380b..b261e444 100644 --- a/doc/blake2b-256_64.txt +++ b/doc/blake2b-256_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xd4b53e86ed8 - 0xd4b53e86e6c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 6 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 5 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 4 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 3 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 2 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 1 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 0 - 0.129 bytes/cycle - 369.61 MiB/sec @ 3 ghz -Average - 0.129 bytes/cycle - 368.84 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1177.60 cycles/hash -Small key speed test - 2-byte keys - 1181.24 cycles/hash -Small key speed test - 3-byte keys - 1181.11 cycles/hash -Small key speed test - 4-byte keys - 1182.49 cycles/hash -Small key speed test - 5-byte keys - 1182.49 cycles/hash -Small key speed test - 6-byte keys - 1182.57 cycles/hash -Small key speed test - 7-byte keys - 1182.37 cycles/hash -Small key speed test - 8-byte keys - 1204.89 cycles/hash -Small key speed test - 9-byte keys - 1202.90 cycles/hash -Small key speed test - 10-byte keys - 1202.90 cycles/hash -Small key speed test - 11-byte keys - 1202.89 cycles/hash -Small key speed test - 12-byte keys - 1202.50 cycles/hash -Small key speed test - 13-byte keys - 1202.94 cycles/hash -Small key speed test - 14-byte keys - 1202.89 cycles/hash -Small key speed test - 15-byte keys - 1202.87 cycles/hash -Small key speed test - 16-byte keys - 1200.21 cycles/hash -Small key speed test - 17-byte keys - 1204.33 cycles/hash -Small key speed test - 18-byte keys - 1202.63 cycles/hash -Small key speed test - 19-byte keys - 1202.56 cycles/hash -Small key speed test - 20-byte keys - 1205.74 cycles/hash -Small key speed test - 21-byte keys - 1202.71 cycles/hash -Small key speed test - 22-byte keys - 1202.72 cycles/hash -Small key speed test - 23-byte keys - 1202.74 cycles/hash -Small key speed test - 24-byte keys - 1203.14 cycles/hash -Small key speed test - 25-byte keys - 1202.44 cycles/hash -Small key speed test - 26-byte keys - 1202.46 cycles/hash -Small key speed test - 27-byte keys - 1202.46 cycles/hash -Small key speed test - 28-byte keys - 1202.51 cycles/hash -Small key speed test - 29-byte keys - 1202.50 cycles/hash -Small key speed test - 30-byte keys - 1202.50 cycles/hash -Small key speed test - 31-byte keys - 1202.52 cycles/hash -Average 1198.027 cycles/hash +Alignment 7 - 0.202 bytes/cycle - 579.26 MiB/sec @ 3 ghz +Alignment 6 - 0.202 bytes/cycle - 579.28 MiB/sec @ 3 ghz +Alignment 5 - 0.202 bytes/cycle - 579.27 MiB/sec @ 3 ghz +Alignment 4 - 0.202 bytes/cycle - 579.28 MiB/sec @ 3 ghz +Alignment 3 - 0.202 bytes/cycle - 579.26 MiB/sec @ 3 ghz +Alignment 2 - 0.202 bytes/cycle - 579.30 MiB/sec @ 3 ghz +Alignment 1 - 0.202 bytes/cycle - 579.28 MiB/sec @ 3 ghz +Alignment 0 - 0.202 bytes/cycle - 579.29 MiB/sec @ 3 ghz +Average - 0.202 bytes/cycle - 579.28 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 744.08 cycles/hash +Small key speed test - 2-byte keys - 742.96 cycles/hash +Small key speed test - 3-byte keys - 745.75 cycles/hash +Small key speed test - 4-byte keys - 752.87 cycles/hash +Small key speed test - 5-byte keys - 755.51 cycles/hash +Small key speed test - 6-byte keys - 763.55 cycles/hash +Small key speed test - 7-byte keys - 757.01 cycles/hash +Small key speed test - 8-byte keys - 764.13 cycles/hash +Small key speed test - 9-byte keys - 759.89 cycles/hash +Small key speed test - 10-byte keys - 767.60 cycles/hash +Small key speed test - 11-byte keys - 759.92 cycles/hash +Small key speed test - 12-byte keys - 762.00 cycles/hash +Small key speed test - 13-byte keys - 760.35 cycles/hash +Small key speed test - 14-byte keys - 761.03 cycles/hash +Small key speed test - 15-byte keys - 762.77 cycles/hash +Small key speed test - 16-byte keys - 765.27 cycles/hash +Small key speed test - 17-byte keys - 768.51 cycles/hash +Small key speed test - 18-byte keys - 767.82 cycles/hash +Small key speed test - 19-byte keys - 760.80 cycles/hash +Small key speed test - 20-byte keys - 763.82 cycles/hash +Small key speed test - 21-byte keys - 764.50 cycles/hash +Small key speed test - 22-byte keys - 762.94 cycles/hash +Small key speed test - 23-byte keys - 760.87 cycles/hash +Small key speed test - 24-byte keys - 777.56 cycles/hash +Small key speed test - 25-byte keys - 779.40 cycles/hash +Small key speed test - 26-byte keys - 778.01 cycles/hash +Small key speed test - 27-byte keys - 777.29 cycles/hash +Small key speed test - 28-byte keys - 780.21 cycles/hash +Small key speed test - 29-byte keys - 777.71 cycles/hash +Small key speed test - 30-byte keys - 776.85 cycles/hash +Small key speed test - 31-byte keys - 777.15 cycles/hash +Small key speed test - 32-byte keys - 782.70 cycles/hash +Average 765.025 cycles/hash +Average, weighted by key length freq. 765.123 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 762.826 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-128.txt b/doc/blake2s-128.txt index e7a32ef1..f9e84858 100644 --- a/doc/blake2s-128.txt +++ b/doc/blake2s-128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x9895a602254 - 0x9895a6021e8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.27 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.08 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 966.00 cycles/hash -Small key speed test - 2-byte keys - 970.00 cycles/hash -Small key speed test - 3-byte keys - 970.00 cycles/hash -Small key speed test - 4-byte keys - 961.00 cycles/hash -Small key speed test - 5-byte keys - 961.88 cycles/hash -Small key speed test - 6-byte keys - 961.59 cycles/hash -Small key speed test - 7-byte keys - 961.51 cycles/hash -Small key speed test - 8-byte keys - 984.74 cycles/hash -Small key speed test - 9-byte keys - 984.00 cycles/hash -Small key speed test - 10-byte keys - 984.00 cycles/hash -Small key speed test - 11-byte keys - 984.00 cycles/hash -Small key speed test - 12-byte keys - 984.80 cycles/hash -Small key speed test - 13-byte keys - 982.98 cycles/hash -Small key speed test - 14-byte keys - 982.98 cycles/hash -Small key speed test - 15-byte keys - 982.98 cycles/hash -Small key speed test - 16-byte keys - 976.83 cycles/hash -Small key speed test - 17-byte keys - 974.00 cycles/hash -Small key speed test - 18-byte keys - 974.00 cycles/hash -Small key speed test - 19-byte keys - 974.95 cycles/hash -Small key speed test - 20-byte keys - 977.38 cycles/hash -Small key speed test - 21-byte keys - 977.36 cycles/hash -Small key speed test - 22-byte keys - 977.36 cycles/hash -Small key speed test - 23-byte keys - 977.35 cycles/hash -Small key speed test - 24-byte keys - 973.00 cycles/hash -Small key speed test - 25-byte keys - 973.00 cycles/hash -Small key speed test - 26-byte keys - 973.00 cycles/hash -Small key speed test - 27-byte keys - 973.00 cycles/hash -Small key speed test - 28-byte keys - 973.00 cycles/hash -Small key speed test - 29-byte keys - 973.28 cycles/hash -Small key speed test - 30-byte keys - 973.00 cycles/hash -Small key speed test - 31-byte keys - 973.00 cycles/hash -Average 974.709 cycles/hash +Alignment 7 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 6 - 0.120 bytes/cycle - 342.12 MiB/sec @ 3 ghz +Alignment 5 - 0.120 bytes/cycle - 342.10 MiB/sec @ 3 ghz +Alignment 4 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 3 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 2 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 1 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 0 - 0.120 bytes/cycle - 343.33 MiB/sec @ 3 ghz +Average - 0.120 bytes/cycle - 342.97 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 618.76 cycles/hash +Small key speed test - 2-byte keys - 620.18 cycles/hash +Small key speed test - 3-byte keys - 621.20 cycles/hash +Small key speed test - 4-byte keys - 619.45 cycles/hash +Small key speed test - 5-byte keys - 627.85 cycles/hash +Small key speed test - 6-byte keys - 623.64 cycles/hash +Small key speed test - 7-byte keys - 622.54 cycles/hash +Small key speed test - 8-byte keys - 640.83 cycles/hash +Small key speed test - 9-byte keys - 639.96 cycles/hash +Small key speed test - 10-byte keys - 641.56 cycles/hash +Small key speed test - 11-byte keys - 641.14 cycles/hash +Small key speed test - 12-byte keys - 642.18 cycles/hash +Small key speed test - 13-byte keys - 640.79 cycles/hash +Small key speed test - 14-byte keys - 641.05 cycles/hash +Small key speed test - 15-byte keys - 641.86 cycles/hash +Small key speed test - 16-byte keys - 629.39 cycles/hash +Small key speed test - 17-byte keys - 647.10 cycles/hash +Small key speed test - 18-byte keys - 649.18 cycles/hash +Small key speed test - 19-byte keys - 649.29 cycles/hash +Small key speed test - 20-byte keys - 642.98 cycles/hash +Small key speed test - 21-byte keys - 638.67 cycles/hash +Small key speed test - 22-byte keys - 639.40 cycles/hash +Small key speed test - 23-byte keys - 638.05 cycles/hash +Small key speed test - 24-byte keys - 640.20 cycles/hash +Small key speed test - 25-byte keys - 645.43 cycles/hash +Small key speed test - 26-byte keys - 644.98 cycles/hash +Small key speed test - 27-byte keys - 644.73 cycles/hash +Small key speed test - 28-byte keys - 643.45 cycles/hash +Small key speed test - 29-byte keys - 645.34 cycles/hash +Small key speed test - 30-byte keys - 652.75 cycles/hash +Small key speed test - 31-byte keys - 653.12 cycles/hash +Small key speed test - 32-byte keys - 655.42 cycles/hash +Average 638.826 cycles/hash +Average, weighted by key length freq. 641.703 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 635.196 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-160.txt b/doc/blake2s-160.txt index 5ce8c0c4..e18f9871 100644 --- a/doc/blake2s-160.txt +++ b/doc/blake2s-160.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x9fa9eebce24 - 0x9fa9eebcdb8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.03 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.03 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.03 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.36 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 978.00 cycles/hash -Small key speed test - 2-byte keys - 972.00 cycles/hash -Small key speed test - 3-byte keys - 972.59 cycles/hash -Small key speed test - 4-byte keys - 969.72 cycles/hash -Small key speed test - 5-byte keys - 973.56 cycles/hash -Small key speed test - 6-byte keys - 969.81 cycles/hash -Small key speed test - 7-byte keys - 973.61 cycles/hash -Small key speed test - 8-byte keys - 992.98 cycles/hash -Small key speed test - 9-byte keys - 987.77 cycles/hash -Small key speed test - 10-byte keys - 987.92 cycles/hash -Small key speed test - 11-byte keys - 987.92 cycles/hash -Small key speed test - 12-byte keys - 993.00 cycles/hash -Small key speed test - 13-byte keys - 991.13 cycles/hash -Small key speed test - 14-byte keys - 991.14 cycles/hash -Small key speed test - 15-byte keys - 991.14 cycles/hash -Small key speed test - 16-byte keys - 986.41 cycles/hash -Small key speed test - 17-byte keys - 985.00 cycles/hash -Small key speed test - 18-byte keys - 985.00 cycles/hash -Small key speed test - 19-byte keys - 985.00 cycles/hash -Small key speed test - 20-byte keys - 987.00 cycles/hash -Small key speed test - 21-byte keys - 987.05 cycles/hash -Small key speed test - 22-byte keys - 987.05 cycles/hash -Small key speed test - 23-byte keys - 987.04 cycles/hash -Small key speed test - 24-byte keys - 987.06 cycles/hash -Small key speed test - 25-byte keys - 987.02 cycles/hash -Small key speed test - 26-byte keys - 987.02 cycles/hash -Small key speed test - 27-byte keys - 987.02 cycles/hash -Small key speed test - 28-byte keys - 987.06 cycles/hash -Small key speed test - 29-byte keys - 987.02 cycles/hash -Small key speed test - 30-byte keys - 987.03 cycles/hash -Small key speed test - 31-byte keys - 987.03 cycles/hash -Average 984.456 cycles/hash +Alignment 7 - 0.119 bytes/cycle - 341.78 MiB/sec @ 3 ghz +Alignment 6 - 0.119 bytes/cycle - 341.77 MiB/sec @ 3 ghz +Alignment 5 - 0.119 bytes/cycle - 341.78 MiB/sec @ 3 ghz +Alignment 4 - 0.119 bytes/cycle - 341.77 MiB/sec @ 3 ghz +Alignment 3 - 0.119 bytes/cycle - 341.72 MiB/sec @ 3 ghz +Alignment 2 - 0.119 bytes/cycle - 341.76 MiB/sec @ 3 ghz +Alignment 1 - 0.119 bytes/cycle - 341.78 MiB/sec @ 3 ghz +Alignment 0 - 0.119 bytes/cycle - 341.54 MiB/sec @ 3 ghz +Average - 0.119 bytes/cycle - 341.74 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 640.15 cycles/hash +Small key speed test - 2-byte keys - 642.06 cycles/hash +Small key speed test - 3-byte keys - 642.24 cycles/hash +Small key speed test - 4-byte keys - 641.03 cycles/hash +Small key speed test - 5-byte keys - 646.11 cycles/hash +Small key speed test - 6-byte keys - 644.73 cycles/hash +Small key speed test - 7-byte keys - 644.77 cycles/hash +Small key speed test - 8-byte keys - 661.67 cycles/hash +Small key speed test - 9-byte keys - 662.72 cycles/hash +Small key speed test - 10-byte keys - 661.12 cycles/hash +Small key speed test - 11-byte keys - 661.94 cycles/hash +Small key speed test - 12-byte keys - 661.13 cycles/hash +Small key speed test - 13-byte keys - 661.98 cycles/hash +Small key speed test - 14-byte keys - 661.31 cycles/hash +Small key speed test - 15-byte keys - 661.14 cycles/hash +Small key speed test - 16-byte keys - 650.81 cycles/hash +Small key speed test - 17-byte keys - 671.35 cycles/hash +Small key speed test - 18-byte keys - 672.32 cycles/hash +Small key speed test - 19-byte keys - 670.50 cycles/hash +Small key speed test - 20-byte keys - 664.66 cycles/hash +Small key speed test - 21-byte keys - 660.61 cycles/hash +Small key speed test - 22-byte keys - 659.70 cycles/hash +Small key speed test - 23-byte keys - 658.39 cycles/hash +Small key speed test - 24-byte keys - 662.71 cycles/hash +Small key speed test - 25-byte keys - 666.23 cycles/hash +Small key speed test - 26-byte keys - 667.28 cycles/hash +Small key speed test - 27-byte keys - 666.39 cycles/hash +Small key speed test - 28-byte keys - 662.45 cycles/hash +Small key speed test - 29-byte keys - 666.63 cycles/hash +Small key speed test - 30-byte keys - 667.45 cycles/hash +Small key speed test - 31-byte keys - 666.30 cycles/hash +Small key speed test - 32-byte keys - 669.27 cycles/hash +Average 659.286 cycles/hash +Average, weighted by key length freq. 662.619 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 656.554 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-224.txt b/doc/blake2s-224.txt index a9f07fcb..04b164a8 100644 --- a/doc/blake2s-224.txt +++ b/doc/blake2s-224.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xa6f08318a20 - 0xa6f083189b4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.27 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.07 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 970.98 cycles/hash -Small key speed test - 2-byte keys - 977.00 cycles/hash -Small key speed test - 3-byte keys - 977.00 cycles/hash -Small key speed test - 4-byte keys - 972.00 cycles/hash -Small key speed test - 5-byte keys - 972.00 cycles/hash -Small key speed test - 6-byte keys - 972.00 cycles/hash -Small key speed test - 7-byte keys - 972.28 cycles/hash -Small key speed test - 8-byte keys - 994.30 cycles/hash -Small key speed test - 9-byte keys - 988.86 cycles/hash -Small key speed test - 10-byte keys - 988.84 cycles/hash -Small key speed test - 11-byte keys - 988.86 cycles/hash -Small key speed test - 12-byte keys - 993.93 cycles/hash -Small key speed test - 13-byte keys - 994.09 cycles/hash -Small key speed test - 14-byte keys - 994.08 cycles/hash -Small key speed test - 15-byte keys - 994.08 cycles/hash -Small key speed test - 16-byte keys - 986.59 cycles/hash -Small key speed test - 17-byte keys - 985.00 cycles/hash -Small key speed test - 18-byte keys - 985.00 cycles/hash -Small key speed test - 19-byte keys - 985.00 cycles/hash -Small key speed test - 20-byte keys - 986.35 cycles/hash -Small key speed test - 21-byte keys - 986.08 cycles/hash -Small key speed test - 22-byte keys - 986.08 cycles/hash -Small key speed test - 23-byte keys - 986.07 cycles/hash -Small key speed test - 24-byte keys - 983.00 cycles/hash -Small key speed test - 25-byte keys - 984.54 cycles/hash -Small key speed test - 26-byte keys - 984.72 cycles/hash -Small key speed test - 27-byte keys - 984.71 cycles/hash -Small key speed test - 28-byte keys - 983.00 cycles/hash -Small key speed test - 29-byte keys - 984.81 cycles/hash -Small key speed test - 30-byte keys - 984.82 cycles/hash -Small key speed test - 31-byte keys - 984.81 cycles/hash -Average 984.222 cycles/hash +Alignment 7 - 0.118 bytes/cycle - 338.31 MiB/sec @ 3 ghz +Alignment 6 - 0.118 bytes/cycle - 338.34 MiB/sec @ 3 ghz +Alignment 5 - 0.118 bytes/cycle - 338.70 MiB/sec @ 3 ghz +Alignment 4 - 0.118 bytes/cycle - 338.69 MiB/sec @ 3 ghz +Alignment 3 - 0.118 bytes/cycle - 338.69 MiB/sec @ 3 ghz +Alignment 2 - 0.118 bytes/cycle - 338.70 MiB/sec @ 3 ghz +Alignment 1 - 0.118 bytes/cycle - 338.70 MiB/sec @ 3 ghz +Alignment 0 - 0.118 bytes/cycle - 338.79 MiB/sec @ 3 ghz +Average - 0.118 bytes/cycle - 338.62 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 645.93 cycles/hash +Small key speed test - 2-byte keys - 647.97 cycles/hash +Small key speed test - 3-byte keys - 648.40 cycles/hash +Small key speed test - 4-byte keys - 647.99 cycles/hash +Small key speed test - 5-byte keys - 650.82 cycles/hash +Small key speed test - 6-byte keys - 651.59 cycles/hash +Small key speed test - 7-byte keys - 651.74 cycles/hash +Small key speed test - 8-byte keys - 661.45 cycles/hash +Small key speed test - 9-byte keys - 663.14 cycles/hash +Small key speed test - 10-byte keys - 664.18 cycles/hash +Small key speed test - 11-byte keys - 669.42 cycles/hash +Small key speed test - 12-byte keys - 668.81 cycles/hash +Small key speed test - 13-byte keys - 668.99 cycles/hash +Small key speed test - 14-byte keys - 667.98 cycles/hash +Small key speed test - 15-byte keys - 662.93 cycles/hash +Small key speed test - 16-byte keys - 650.50 cycles/hash +Small key speed test - 17-byte keys - 669.58 cycles/hash +Small key speed test - 18-byte keys - 669.96 cycles/hash +Small key speed test - 19-byte keys - 669.94 cycles/hash +Small key speed test - 20-byte keys - 658.11 cycles/hash +Small key speed test - 21-byte keys - 660.00 cycles/hash +Small key speed test - 22-byte keys - 659.40 cycles/hash +Small key speed test - 23-byte keys - 664.26 cycles/hash +Small key speed test - 24-byte keys - 670.29 cycles/hash +Small key speed test - 25-byte keys - 673.28 cycles/hash +Small key speed test - 26-byte keys - 674.66 cycles/hash +Small key speed test - 27-byte keys - 667.60 cycles/hash +Small key speed test - 28-byte keys - 667.00 cycles/hash +Small key speed test - 29-byte keys - 670.45 cycles/hash +Small key speed test - 30-byte keys - 673.68 cycles/hash +Small key speed test - 31-byte keys - 673.87 cycles/hash +Small key speed test - 32-byte keys - 677.17 cycles/hash +Average 663.159 cycles/hash +Average, weighted by key length freq. 665.409 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 658.362 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-256.txt b/doc/blake2s-256.txt index 29fe391d..e36e70ac 100644 --- a/doc/blake2s-256.txt +++ b/doc/blake2s-256.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xae41add46fc - 0xae41add4690). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.25 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.07 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 963.00 cycles/hash -Small key speed test - 2-byte keys - 970.65 cycles/hash -Small key speed test - 3-byte keys - 970.40 cycles/hash -Small key speed test - 4-byte keys - 965.50 cycles/hash -Small key speed test - 5-byte keys - 964.97 cycles/hash -Small key speed test - 6-byte keys - 965.07 cycles/hash -Small key speed test - 7-byte keys - 963.47 cycles/hash -Small key speed test - 8-byte keys - 983.97 cycles/hash -Small key speed test - 9-byte keys - 983.00 cycles/hash -Small key speed test - 10-byte keys - 983.00 cycles/hash -Small key speed test - 11-byte keys - 983.00 cycles/hash -Small key speed test - 12-byte keys - 983.98 cycles/hash -Small key speed test - 13-byte keys - 985.24 cycles/hash -Small key speed test - 14-byte keys - 985.25 cycles/hash -Small key speed test - 15-byte keys - 985.24 cycles/hash -Small key speed test - 16-byte keys - 976.51 cycles/hash -Small key speed test - 17-byte keys - 977.63 cycles/hash -Small key speed test - 18-byte keys - 975.85 cycles/hash -Small key speed test - 19-byte keys - 976.77 cycles/hash -Small key speed test - 20-byte keys - 979.18 cycles/hash -Small key speed test - 21-byte keys - 979.22 cycles/hash -Small key speed test - 22-byte keys - 979.22 cycles/hash -Small key speed test - 23-byte keys - 979.22 cycles/hash -Small key speed test - 24-byte keys - 977.16 cycles/hash -Small key speed test - 25-byte keys - 977.14 cycles/hash -Small key speed test - 26-byte keys - 977.14 cycles/hash -Small key speed test - 27-byte keys - 977.14 cycles/hash -Small key speed test - 28-byte keys - 977.16 cycles/hash -Small key speed test - 29-byte keys - 977.14 cycles/hash -Small key speed test - 30-byte keys - 977.14 cycles/hash -Small key speed test - 31-byte keys - 977.14 cycles/hash -Average 976.661 cycles/hash +Alignment 7 - 0.119 bytes/cycle - 341.61 MiB/sec @ 3 ghz +Alignment 6 - 0.119 bytes/cycle - 341.64 MiB/sec @ 3 ghz +Alignment 5 - 0.119 bytes/cycle - 341.68 MiB/sec @ 3 ghz +Alignment 4 - 0.119 bytes/cycle - 341.66 MiB/sec @ 3 ghz +Alignment 3 - 0.119 bytes/cycle - 341.60 MiB/sec @ 3 ghz +Alignment 2 - 0.119 bytes/cycle - 341.65 MiB/sec @ 3 ghz +Alignment 1 - 0.119 bytes/cycle - 341.64 MiB/sec @ 3 ghz +Alignment 0 - 0.119 bytes/cycle - 341.72 MiB/sec @ 3 ghz +Average - 0.119 bytes/cycle - 341.65 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 627.32 cycles/hash +Small key speed test - 2-byte keys - 630.88 cycles/hash +Small key speed test - 3-byte keys - 630.87 cycles/hash +Small key speed test - 4-byte keys - 627.29 cycles/hash +Small key speed test - 5-byte keys - 634.24 cycles/hash +Small key speed test - 6-byte keys - 636.22 cycles/hash +Small key speed test - 7-byte keys - 635.78 cycles/hash +Small key speed test - 8-byte keys - 645.62 cycles/hash +Small key speed test - 9-byte keys - 649.18 cycles/hash +Small key speed test - 10-byte keys - 649.49 cycles/hash +Small key speed test - 11-byte keys - 649.46 cycles/hash +Small key speed test - 12-byte keys - 649.13 cycles/hash +Small key speed test - 13-byte keys - 649.13 cycles/hash +Small key speed test - 14-byte keys - 649.42 cycles/hash +Small key speed test - 15-byte keys - 649.51 cycles/hash +Small key speed test - 16-byte keys - 647.98 cycles/hash +Small key speed test - 17-byte keys - 651.77 cycles/hash +Small key speed test - 18-byte keys - 649.52 cycles/hash +Small key speed test - 19-byte keys - 651.78 cycles/hash +Small key speed test - 20-byte keys - 652.20 cycles/hash +Small key speed test - 21-byte keys - 650.49 cycles/hash +Small key speed test - 22-byte keys - 650.63 cycles/hash +Small key speed test - 23-byte keys - 650.64 cycles/hash +Small key speed test - 24-byte keys - 647.54 cycles/hash +Small key speed test - 25-byte keys - 649.15 cycles/hash +Small key speed test - 26-byte keys - 646.30 cycles/hash +Small key speed test - 27-byte keys - 645.98 cycles/hash +Small key speed test - 28-byte keys - 655.95 cycles/hash +Small key speed test - 29-byte keys - 646.03 cycles/hash +Small key speed test - 30-byte keys - 645.84 cycles/hash +Small key speed test - 31-byte keys - 648.16 cycles/hash +Small key speed test - 32-byte keys - 661.09 cycles/hash +Average 645.769 cycles/hash +Average, weighted by key length freq. 649.359 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 647.666 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-256_64.txt b/doc/blake2s-256_64.txt index c5c7ae78..4e0c5e3c 100644 --- a/doc/blake2s-256_64.txt +++ b/doc/blake2s-256_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xb568ea52df4 - 0xb568ea52d88). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.01 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.01 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.01 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.02 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 221.00 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.35 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1031.40 cycles/hash -Small key speed test - 2-byte keys - 1029.42 cycles/hash -Small key speed test - 3-byte keys - 1029.47 cycles/hash -Small key speed test - 4-byte keys - 1026.45 cycles/hash -Small key speed test - 5-byte keys - 1029.94 cycles/hash -Small key speed test - 6-byte keys - 1029.92 cycles/hash -Small key speed test - 7-byte keys - 1030.84 cycles/hash -Small key speed test - 8-byte keys - 1051.25 cycles/hash -Small key speed test - 9-byte keys - 1051.55 cycles/hash -Small key speed test - 10-byte keys - 1051.50 cycles/hash -Small key speed test - 11-byte keys - 1051.85 cycles/hash -Small key speed test - 12-byte keys - 1051.59 cycles/hash -Small key speed test - 13-byte keys - 1051.49 cycles/hash -Small key speed test - 14-byte keys - 1051.55 cycles/hash -Small key speed test - 15-byte keys - 1051.85 cycles/hash -Small key speed test - 16-byte keys - 1050.58 cycles/hash -Small key speed test - 17-byte keys - 1050.54 cycles/hash -Small key speed test - 18-byte keys - 1050.53 cycles/hash -Small key speed test - 19-byte keys - 1050.60 cycles/hash -Small key speed test - 20-byte keys - 1050.66 cycles/hash -Small key speed test - 21-byte keys - 1050.56 cycles/hash -Small key speed test - 22-byte keys - 1050.48 cycles/hash -Small key speed test - 23-byte keys - 1050.50 cycles/hash -Small key speed test - 24-byte keys - 1050.58 cycles/hash -Small key speed test - 25-byte keys - 1050.50 cycles/hash -Small key speed test - 26-byte keys - 1050.46 cycles/hash -Small key speed test - 27-byte keys - 1050.50 cycles/hash -Small key speed test - 28-byte keys - 1050.63 cycles/hash -Small key speed test - 29-byte keys - 1050.43 cycles/hash -Small key speed test - 30-byte keys - 1050.50 cycles/hash -Small key speed test - 31-byte keys - 1050.49 cycles/hash -Average 1046.084 cycles/hash +Alignment 7 - 0.118 bytes/cycle - 338.76 MiB/sec @ 3 ghz +Alignment 6 - 0.118 bytes/cycle - 338.77 MiB/sec @ 3 ghz +Alignment 5 - 0.118 bytes/cycle - 338.76 MiB/sec @ 3 ghz +Alignment 4 - 0.118 bytes/cycle - 338.76 MiB/sec @ 3 ghz +Alignment 3 - 0.118 bytes/cycle - 338.76 MiB/sec @ 3 ghz +Alignment 2 - 0.118 bytes/cycle - 338.91 MiB/sec @ 3 ghz +Alignment 1 - 0.117 bytes/cycle - 336.11 MiB/sec @ 3 ghz +Alignment 0 - 0.118 bytes/cycle - 338.84 MiB/sec @ 3 ghz +Average - 0.118 bytes/cycle - 338.46 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 642.21 cycles/hash +Small key speed test - 2-byte keys - 647.20 cycles/hash +Small key speed test - 3-byte keys - 650.00 cycles/hash +Small key speed test - 4-byte keys - 646.23 cycles/hash +Small key speed test - 5-byte keys - 651.76 cycles/hash +Small key speed test - 6-byte keys - 651.44 cycles/hash +Small key speed test - 7-byte keys - 659.12 cycles/hash +Small key speed test - 8-byte keys - 679.91 cycles/hash +Small key speed test - 9-byte keys - 671.89 cycles/hash +Small key speed test - 10-byte keys - 678.53 cycles/hash +Small key speed test - 11-byte keys - 674.00 cycles/hash +Small key speed test - 12-byte keys - 674.13 cycles/hash +Small key speed test - 13-byte keys - 681.29 cycles/hash +Small key speed test - 14-byte keys - 686.86 cycles/hash +Small key speed test - 15-byte keys - 687.08 cycles/hash +Small key speed test - 16-byte keys - 684.20 cycles/hash +Small key speed test - 17-byte keys - 674.16 cycles/hash +Small key speed test - 18-byte keys - 675.36 cycles/hash +Small key speed test - 19-byte keys - 686.71 cycles/hash +Small key speed test - 20-byte keys - 678.05 cycles/hash +Small key speed test - 21-byte keys - 670.29 cycles/hash +Small key speed test - 22-byte keys - 683.23 cycles/hash +Small key speed test - 23-byte keys - 677.69 cycles/hash +Small key speed test - 24-byte keys - 671.31 cycles/hash +Small key speed test - 25-byte keys - 673.83 cycles/hash +Small key speed test - 26-byte keys - 682.39 cycles/hash +Small key speed test - 27-byte keys - 676.07 cycles/hash +Small key speed test - 28-byte keys - 673.70 cycles/hash +Small key speed test - 29-byte keys - 679.05 cycles/hash +Small key speed test - 30-byte keys - 685.65 cycles/hash +Small key speed test - 31-byte keys - 685.81 cycles/hash +Small key speed test - 32-byte keys - 687.87 cycles/hash +Average 672.720 cycles/hash +Average, weighted by key length freq. 678.748 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 677.625 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake3_c.txt b/doc/blake3_c.txt index 8162ef58..26f9f6df 100644 --- a/doc/blake3_c.txt +++ b/doc/blake3_c.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x94d62935ab0 - 0x94d62935a44). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.449 bytes/cycle - 1283.43 MiB/sec @ 3 ghz -Alignment 6 - 0.449 bytes/cycle - 1283.44 MiB/sec @ 3 ghz -Alignment 5 - 0.449 bytes/cycle - 1283.45 MiB/sec @ 3 ghz -Alignment 4 - 0.449 bytes/cycle - 1284.02 MiB/sec @ 3 ghz -Alignment 3 - 0.449 bytes/cycle - 1283.43 MiB/sec @ 3 ghz -Alignment 2 - 0.449 bytes/cycle - 1283.46 MiB/sec @ 3 ghz -Alignment 1 - 0.449 bytes/cycle - 1283.45 MiB/sec @ 3 ghz -Alignment 0 - 0.455 bytes/cycle - 1302.57 MiB/sec @ 3 ghz -Average - 0.449 bytes/cycle - 1285.91 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 331.00 cycles/hash -Small key speed test - 2-byte keys - 332.00 cycles/hash -Small key speed test - 3-byte keys - 332.00 cycles/hash -Small key speed test - 4-byte keys - 332.84 cycles/hash -Small key speed test - 5-byte keys - 332.84 cycles/hash -Small key speed test - 6-byte keys - 332.84 cycles/hash -Small key speed test - 7-byte keys - 332.86 cycles/hash -Small key speed test - 8-byte keys - 341.29 cycles/hash -Small key speed test - 9-byte keys - 341.50 cycles/hash -Small key speed test - 10-byte keys - 341.50 cycles/hash -Small key speed test - 11-byte keys - 341.50 cycles/hash -Small key speed test - 12-byte keys - 340.00 cycles/hash -Small key speed test - 13-byte keys - 341.50 cycles/hash -Small key speed test - 14-byte keys - 341.50 cycles/hash -Small key speed test - 15-byte keys - 341.50 cycles/hash -Small key speed test - 16-byte keys - 340.00 cycles/hash -Small key speed test - 17-byte keys - 341.50 cycles/hash -Small key speed test - 18-byte keys - 353.17 cycles/hash -Small key speed test - 19-byte keys - 343.43 cycles/hash -Small key speed test - 20-byte keys - 340.00 cycles/hash -Small key speed test - 21-byte keys - 341.50 cycles/hash -Small key speed test - 22-byte keys - 341.50 cycles/hash -Small key speed test - 23-byte keys - 341.50 cycles/hash -Small key speed test - 24-byte keys - 340.00 cycles/hash -Small key speed test - 25-byte keys - 342.00 cycles/hash -Small key speed test - 26-byte keys - 342.00 cycles/hash -Small key speed test - 27-byte keys - 342.00 cycles/hash -Small key speed test - 28-byte keys - 341.00 cycles/hash -Small key speed test - 29-byte keys - 342.00 cycles/hash -Small key speed test - 30-byte keys - 342.00 cycles/hash -Small key speed test - 31-byte keys - 350.00 cycles/hash -Average 340.009 cycles/hash +Alignment 7 - 0.452 bytes/cycle - 1292.25 MiB/sec @ 3 ghz +Alignment 6 - 0.452 bytes/cycle - 1292.20 MiB/sec @ 3 ghz +Alignment 5 - 0.453 bytes/cycle - 1297.25 MiB/sec @ 3 ghz +Alignment 4 - 0.454 bytes/cycle - 1300.28 MiB/sec @ 3 ghz +Alignment 3 - 0.454 bytes/cycle - 1299.73 MiB/sec @ 3 ghz +Alignment 2 - 0.454 bytes/cycle - 1299.64 MiB/sec @ 3 ghz +Alignment 1 - 0.454 bytes/cycle - 1299.30 MiB/sec @ 3 ghz +Alignment 0 - 0.456 bytes/cycle - 1303.66 MiB/sec @ 3 ghz +Average - 0.454 bytes/cycle - 1298.04 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 346.69 cycles/hash +Small key speed test - 2-byte keys - 350.69 cycles/hash +Small key speed test - 3-byte keys - 350.27 cycles/hash +Small key speed test - 4-byte keys - 351.05 cycles/hash +Small key speed test - 5-byte keys - 352.26 cycles/hash +Small key speed test - 6-byte keys - 353.12 cycles/hash +Small key speed test - 7-byte keys - 352.16 cycles/hash +Small key speed test - 8-byte keys - 347.18 cycles/hash +Small key speed test - 9-byte keys - 352.79 cycles/hash +Small key speed test - 10-byte keys - 353.09 cycles/hash +Small key speed test - 11-byte keys - 352.76 cycles/hash +Small key speed test - 12-byte keys - 352.86 cycles/hash +Small key speed test - 13-byte keys - 353.16 cycles/hash +Small key speed test - 14-byte keys - 352.95 cycles/hash +Small key speed test - 15-byte keys - 353.27 cycles/hash +Small key speed test - 16-byte keys - 352.62 cycles/hash +Small key speed test - 17-byte keys - 352.69 cycles/hash +Small key speed test - 18-byte keys - 352.67 cycles/hash +Small key speed test - 19-byte keys - 352.81 cycles/hash +Small key speed test - 20-byte keys - 352.78 cycles/hash +Small key speed test - 21-byte keys - 358.23 cycles/hash +Small key speed test - 22-byte keys - 358.08 cycles/hash +Small key speed test - 23-byte keys - 358.34 cycles/hash +Small key speed test - 24-byte keys - 359.10 cycles/hash +Small key speed test - 25-byte keys - 359.16 cycles/hash +Small key speed test - 26-byte keys - 358.98 cycles/hash +Small key speed test - 27-byte keys - 359.02 cycles/hash +Small key speed test - 28-byte keys - 358.96 cycles/hash +Small key speed test - 29-byte keys - 359.10 cycles/hash +Small key speed test - 30-byte keys - 359.27 cycles/hash +Small key speed test - 31-byte keys - 354.04 cycles/hash +Small key speed test - 32-byte keys - 355.77 cycles/hash +Average 354.247 cycles/hash +Average, weighted by key length freq. 353.982 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 352.567 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/chaskey.txt b/doc/chaskey.txt index 35aca708..e8283c7d 100644 --- a/doc/chaskey.txt +++ b/doc/chaskey.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1318286a453cc - 0x1318286a45360). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.399 bytes/cycle - 1141.80 MiB/sec @ 3 ghz -Alignment 6 - 0.399 bytes/cycle - 1141.70 MiB/sec @ 3 ghz -Alignment 5 - 0.400 bytes/cycle - 1143.75 MiB/sec @ 3 ghz -Alignment 4 - 0.399 bytes/cycle - 1141.54 MiB/sec @ 3 ghz -Alignment 3 - 0.401 bytes/cycle - 1146.10 MiB/sec @ 3 ghz -Alignment 2 - 0.400 bytes/cycle - 1144.13 MiB/sec @ 3 ghz -Alignment 1 - 0.400 bytes/cycle - 1144.03 MiB/sec @ 3 ghz -Alignment 0 - 0.399 bytes/cycle - 1141.36 MiB/sec @ 3 ghz -Average - 0.400 bytes/cycle - 1143.05 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 95.15 cycles/hash -Small key speed test - 2-byte keys - 94.90 cycles/hash -Small key speed test - 3-byte keys - 92.84 cycles/hash -Small key speed test - 4-byte keys - 94.93 cycles/hash -Small key speed test - 5-byte keys - 94.72 cycles/hash -Small key speed test - 6-byte keys - 94.73 cycles/hash -Small key speed test - 7-byte keys - 90.08 cycles/hash -Small key speed test - 8-byte keys - 95.76 cycles/hash -Small key speed test - 9-byte keys - 94.67 cycles/hash -Small key speed test - 10-byte keys - 94.90 cycles/hash -Small key speed test - 11-byte keys - 92.90 cycles/hash -Small key speed test - 12-byte keys - 94.99 cycles/hash -Small key speed test - 13-byte keys - 95.48 cycles/hash -Small key speed test - 14-byte keys - 95.03 cycles/hash -Small key speed test - 15-byte keys - 91.43 cycles/hash -Small key speed test - 16-byte keys - 62.00 cycles/hash -Small key speed test - 17-byte keys - 139.39 cycles/hash -Small key speed test - 18-byte keys - 138.69 cycles/hash -Small key speed test - 19-byte keys - 131.27 cycles/hash -Small key speed test - 20-byte keys - 137.87 cycles/hash -Small key speed test - 21-byte keys - 137.87 cycles/hash -Small key speed test - 22-byte keys - 137.81 cycles/hash -Small key speed test - 23-byte keys - 130.30 cycles/hash -Small key speed test - 24-byte keys - 138.23 cycles/hash -Small key speed test - 25-byte keys - 138.30 cycles/hash -Small key speed test - 26-byte keys - 137.81 cycles/hash -Small key speed test - 27-byte keys - 131.29 cycles/hash -Small key speed test - 28-byte keys - 138.68 cycles/hash -Small key speed test - 29-byte keys - 139.83 cycles/hash -Small key speed test - 30-byte keys - 142.09 cycles/hash -Small key speed test - 31-byte keys - 130.81 cycles/hash -Average 113.702 cycles/hash +Alignment 7 - 0.400 bytes/cycle - 1145.62 MiB/sec @ 3 ghz +Alignment 6 - 0.400 bytes/cycle - 1145.39 MiB/sec @ 3 ghz +Alignment 5 - 0.400 bytes/cycle - 1145.28 MiB/sec @ 3 ghz +Alignment 4 - 0.400 bytes/cycle - 1144.94 MiB/sec @ 3 ghz +Alignment 3 - 0.401 bytes/cycle - 1147.24 MiB/sec @ 3 ghz +Alignment 2 - 0.398 bytes/cycle - 1139.36 MiB/sec @ 3 ghz +Alignment 1 - 0.397 bytes/cycle - 1135.36 MiB/sec @ 3 ghz +Alignment 0 - 0.397 bytes/cycle - 1135.89 MiB/sec @ 3 ghz +Average - 0.399 bytes/cycle - 1142.38 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 95.78 cycles/hash +Small key speed test - 2-byte keys - 95.71 cycles/hash +Small key speed test - 3-byte keys - 93.11 cycles/hash +Small key speed test - 4-byte keys - 95.67 cycles/hash +Small key speed test - 5-byte keys - 95.42 cycles/hash +Small key speed test - 6-byte keys - 95.60 cycles/hash +Small key speed test - 7-byte keys - 89.01 cycles/hash +Small key speed test - 8-byte keys - 96.64 cycles/hash +Small key speed test - 9-byte keys - 95.76 cycles/hash +Small key speed test - 10-byte keys - 95.77 cycles/hash +Small key speed test - 11-byte keys - 93.53 cycles/hash +Small key speed test - 12-byte keys - 96.54 cycles/hash +Small key speed test - 13-byte keys - 96.98 cycles/hash +Small key speed test - 14-byte keys - 95.00 cycles/hash +Small key speed test - 15-byte keys - 91.80 cycles/hash +Small key speed test - 16-byte keys - 62.42 cycles/hash +Small key speed test - 17-byte keys - 140.40 cycles/hash +Small key speed test - 18-byte keys - 139.35 cycles/hash +Small key speed test - 19-byte keys - 132.46 cycles/hash +Small key speed test - 20-byte keys - 139.07 cycles/hash +Small key speed test - 21-byte keys - 138.60 cycles/hash +Small key speed test - 22-byte keys - 138.99 cycles/hash +Small key speed test - 23-byte keys - 131.42 cycles/hash +Small key speed test - 24-byte keys - 139.28 cycles/hash +Small key speed test - 25-byte keys - 138.43 cycles/hash +Small key speed test - 26-byte keys - 138.71 cycles/hash +Small key speed test - 27-byte keys - 131.57 cycles/hash +Small key speed test - 28-byte keys - 140.29 cycles/hash +Small key speed test - 29-byte keys - 140.64 cycles/hash +Small key speed test - 30-byte keys - 141.29 cycles/hash +Small key speed test - 31-byte keys - 130.05 cycles/hash +Small key speed test - 32-byte keys - 102.00 cycles/hash +Average 113.978 cycles/hash +Average, weighted by key length freq. 111.112 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 82.945 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/clhash.txt b/doc/clhash.txt index e11a09ec..b586e2ab 100644 --- a/doc/clhash.txt +++ b/doc/clhash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 144 (0x90) ticks (0x1329f23662128 - 0x1329f23662098). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 6.734 bytes/cycle - 19264.98 MiB/sec @ 3 ghz -Alignment 6 - 6.439 bytes/cycle - 18423.09 MiB/sec @ 3 ghz -Alignment 5 - 6.555 bytes/cycle - 18752.99 MiB/sec @ 3 ghz -Alignment 4 - 6.538 bytes/cycle - 18705.48 MiB/sec @ 3 ghz -Alignment 3 - 6.771 bytes/cycle - 19372.53 MiB/sec @ 3 ghz -Alignment 2 - 6.098 bytes/cycle - 17446.27 MiB/sec @ 3 ghz -Alignment 1 - 6.785 bytes/cycle - 19411.56 MiB/sec @ 3 ghz -Alignment 0 - 6.378 bytes/cycle - 18247.37 MiB/sec @ 3 ghz -Average - 6.537 bytes/cycle - 18703.04 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 70.88 cycles/hash -Small key speed test - 2-byte keys - 70.85 cycles/hash -Small key speed test - 3-byte keys - 70.90 cycles/hash -Small key speed test - 4-byte keys - 71.00 cycles/hash -Small key speed test - 5-byte keys - 71.00 cycles/hash -Small key speed test - 6-byte keys - 71.00 cycles/hash -Small key speed test - 7-byte keys - 70.76 cycles/hash -Small key speed test - 8-byte keys - 61.81 cycles/hash -Small key speed test - 9-byte keys - 70.94 cycles/hash -Small key speed test - 10-byte keys - 70.95 cycles/hash -Small key speed test - 11-byte keys - 71.00 cycles/hash -Small key speed test - 12-byte keys - 70.95 cycles/hash -Small key speed test - 13-byte keys - 71.90 cycles/hash -Small key speed test - 14-byte keys - 71.87 cycles/hash -Small key speed test - 15-byte keys - 72.08 cycles/hash -Small key speed test - 16-byte keys - 61.76 cycles/hash -Small key speed test - 17-byte keys - 69.97 cycles/hash -Small key speed test - 18-byte keys - 70.24 cycles/hash -Small key speed test - 19-byte keys - 70.24 cycles/hash -Small key speed test - 20-byte keys - 69.97 cycles/hash -Small key speed test - 21-byte keys - 69.97 cycles/hash -Small key speed test - 22-byte keys - 70.14 cycles/hash -Small key speed test - 23-byte keys - 69.99 cycles/hash -Small key speed test - 24-byte keys - 62.97 cycles/hash -Small key speed test - 25-byte keys - 70.92 cycles/hash -Small key speed test - 26-byte keys - 71.92 cycles/hash -Small key speed test - 27-byte keys - 71.94 cycles/hash -Small key speed test - 28-byte keys - 71.98 cycles/hash -Small key speed test - 29-byte keys - 71.98 cycles/hash -Small key speed test - 30-byte keys - 71.96 cycles/hash -Small key speed test - 31-byte keys - 71.99 cycles/hash -Average 70.188 cycles/hash +Alignment 7 - 7.997 bytes/cycle - 22880.23 MiB/sec @ 3 ghz +Alignment 6 - 8.003 bytes/cycle - 22897.35 MiB/sec @ 3 ghz +Alignment 5 - 8.008 bytes/cycle - 22910.03 MiB/sec @ 3 ghz +Alignment 4 - 8.004 bytes/cycle - 22899.63 MiB/sec @ 3 ghz +Alignment 3 - 8.005 bytes/cycle - 22902.23 MiB/sec @ 3 ghz +Alignment 2 - 8.003 bytes/cycle - 22896.27 MiB/sec @ 3 ghz +Alignment 1 - 8.003 bytes/cycle - 22898.05 MiB/sec @ 3 ghz +Alignment 0 - 8.100 bytes/cycle - 23175.09 MiB/sec @ 3 ghz +Average - 8.015 bytes/cycle - 22932.36 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 68.00 cycles/hash +Small key speed test - 2-byte keys - 67.15 cycles/hash +Small key speed test - 3-byte keys - 67.00 cycles/hash +Small key speed test - 4-byte keys - 68.00 cycles/hash +Small key speed test - 5-byte keys - 68.00 cycles/hash +Small key speed test - 6-byte keys - 68.00 cycles/hash +Small key speed test - 7-byte keys - 68.00 cycles/hash +Small key speed test - 8-byte keys - 59.32 cycles/hash +Small key speed test - 9-byte keys - 68.25 cycles/hash +Small key speed test - 10-byte keys - 68.00 cycles/hash +Small key speed test - 11-byte keys - 68.00 cycles/hash +Small key speed test - 12-byte keys - 68.17 cycles/hash +Small key speed test - 13-byte keys - 69.00 cycles/hash +Small key speed test - 14-byte keys - 69.00 cycles/hash +Small key speed test - 15-byte keys - 69.00 cycles/hash +Small key speed test - 16-byte keys - 59.28 cycles/hash +Small key speed test - 17-byte keys - 67.00 cycles/hash +Small key speed test - 18-byte keys - 68.17 cycles/hash +Small key speed test - 19-byte keys - 68.00 cycles/hash +Small key speed test - 20-byte keys - 67.00 cycles/hash +Small key speed test - 21-byte keys - 67.00 cycles/hash +Small key speed test - 22-byte keys - 67.00 cycles/hash +Small key speed test - 23-byte keys - 67.00 cycles/hash +Small key speed test - 24-byte keys - 60.41 cycles/hash +Small key speed test - 25-byte keys - 68.00 cycles/hash +Small key speed test - 26-byte keys - 69.00 cycles/hash +Small key speed test - 27-byte keys - 69.00 cycles/hash +Small key speed test - 28-byte keys - 69.00 cycles/hash +Small key speed test - 29-byte keys - 69.00 cycles/hash +Small key speed test - 30-byte keys - 69.00 cycles/hash +Small key speed test - 31-byte keys - 73.29 cycles/hash +Small key speed test - 32-byte keys - 60.98 cycles/hash +Average 67.220 cycles/hash +Average, weighted by key length freq. 67.119 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 64.398 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/cmetrohash64_1.txt b/doc/cmetrohash64_1.txt index 2b3283f2..2d0798fa 100644 --- a/doc/cmetrohash64_1.txt +++ b/doc/cmetrohash64_1.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x17b194a507d4 - 0x17b194a5078c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5.140 bytes/cycle - 14705.34 MiB/sec @ 3 ghz -Alignment 6 - 5.149 bytes/cycle - 14731.33 MiB/sec @ 3 ghz -Alignment 5 - 5.150 bytes/cycle - 14735.55 MiB/sec @ 3 ghz -Alignment 4 - 5.150 bytes/cycle - 14733.87 MiB/sec @ 3 ghz -Alignment 3 - 5.150 bytes/cycle - 14735.23 MiB/sec @ 3 ghz -Alignment 2 - 5.148 bytes/cycle - 14728.86 MiB/sec @ 3 ghz -Alignment 1 - 4.456 bytes/cycle - 12748.34 MiB/sec @ 3 ghz -Alignment 0 - 4.228 bytes/cycle - 12095.32 MiB/sec @ 3 ghz -Average - 4.946 bytes/cycle - 14151.73 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 34.00 cycles/hash -Small key speed test - 2-byte keys - 34.00 cycles/hash -Small key speed test - 3-byte keys - 40.94 cycles/hash -Small key speed test - 4-byte keys - 34.00 cycles/hash -Small key speed test - 5-byte keys - 41.00 cycles/hash -Small key speed test - 6-byte keys - 39.29 cycles/hash -Small key speed test - 7-byte keys - 38.98 cycles/hash -Small key speed test - 8-byte keys - 27.00 cycles/hash -Small key speed test - 9-byte keys - 33.00 cycles/hash -Small key speed test - 10-byte keys - 33.00 cycles/hash -Small key speed test - 11-byte keys - 39.00 cycles/hash -Small key speed test - 12-byte keys - 33.00 cycles/hash -Small key speed test - 13-byte keys - 39.00 cycles/hash -Small key speed test - 14-byte keys - 39.00 cycles/hash -Small key speed test - 15-byte keys - 44.00 cycles/hash -Small key speed test - 16-byte keys - 33.55 cycles/hash -Small key speed test - 17-byte keys - 39.00 cycles/hash -Small key speed test - 18-byte keys - 39.00 cycles/hash -Small key speed test - 19-byte keys - 44.00 cycles/hash -Small key speed test - 20-byte keys - 38.16 cycles/hash -Small key speed test - 21-byte keys - 45.24 cycles/hash -Small key speed test - 22-byte keys - 44.82 cycles/hash -Small key speed test - 23-byte keys - 51.41 cycles/hash -Small key speed test - 24-byte keys - 39.00 cycles/hash -Small key speed test - 25-byte keys - 45.68 cycles/hash -Small key speed test - 26-byte keys - 45.00 cycles/hash -Small key speed test - 27-byte keys - 50.82 cycles/hash -Small key speed test - 28-byte keys - 44.97 cycles/hash -Small key speed test - 29-byte keys - 51.00 cycles/hash -Small key speed test - 30-byte keys - 51.00 cycles/hash -Small key speed test - 31-byte keys - 56.00 cycles/hash -Average 40.899 cycles/hash +Alignment 7 - 4.995 bytes/cycle - 14290.19 MiB/sec @ 3 ghz +Alignment 6 - 5.003 bytes/cycle - 14313.19 MiB/sec @ 3 ghz +Alignment 5 - 5.000 bytes/cycle - 14306.05 MiB/sec @ 3 ghz +Alignment 4 - 5.006 bytes/cycle - 14322.57 MiB/sec @ 3 ghz +Alignment 3 - 5.004 bytes/cycle - 14317.66 MiB/sec @ 3 ghz +Alignment 2 - 5.006 bytes/cycle - 14321.06 MiB/sec @ 3 ghz +Alignment 1 - 5.000 bytes/cycle - 14304.21 MiB/sec @ 3 ghz +Alignment 0 - 5.064 bytes/cycle - 14487.09 MiB/sec @ 3 ghz +Average - 5.010 bytes/cycle - 14332.75 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 28.00 cycles/hash +Small key speed test - 2-byte keys - 28.00 cycles/hash +Small key speed test - 3-byte keys - 34.00 cycles/hash +Small key speed test - 4-byte keys - 28.00 cycles/hash +Small key speed test - 5-byte keys - 34.00 cycles/hash +Small key speed test - 6-byte keys - 34.00 cycles/hash +Small key speed test - 7-byte keys - 40.00 cycles/hash +Small key speed test - 8-byte keys - 28.00 cycles/hash +Small key speed test - 9-byte keys - 34.00 cycles/hash +Small key speed test - 10-byte keys - 34.00 cycles/hash +Small key speed test - 11-byte keys - 40.00 cycles/hash +Small key speed test - 12-byte keys - 34.00 cycles/hash +Small key speed test - 13-byte keys - 40.00 cycles/hash +Small key speed test - 14-byte keys - 40.00 cycles/hash +Small key speed test - 15-byte keys - 45.00 cycles/hash +Small key speed test - 16-byte keys - 34.19 cycles/hash +Small key speed test - 17-byte keys - 40.00 cycles/hash +Small key speed test - 18-byte keys - 40.00 cycles/hash +Small key speed test - 19-byte keys - 45.00 cycles/hash +Small key speed test - 20-byte keys - 39.00 cycles/hash +Small key speed test - 21-byte keys - 46.00 cycles/hash +Small key speed test - 22-byte keys - 45.00 cycles/hash +Small key speed test - 23-byte keys - 52.60 cycles/hash +Small key speed test - 24-byte keys - 39.78 cycles/hash +Small key speed test - 25-byte keys - 46.21 cycles/hash +Small key speed test - 26-byte keys - 46.00 cycles/hash +Small key speed test - 27-byte keys - 52.00 cycles/hash +Small key speed test - 28-byte keys - 45.00 cycles/hash +Small key speed test - 29-byte keys - 52.00 cycles/hash +Small key speed test - 30-byte keys - 52.00 cycles/hash +Small key speed test - 31-byte keys - 57.00 cycles/hash +Small key speed test - 32-byte keys - 60.54 cycles/hash +Average 41.041 cycles/hash +Average, weighted by key length freq. 40.611 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 35.207 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/cmetrohash64_1o.txt b/doc/cmetrohash64_1o.txt index 8eecc72b..b53f24ca 100644 --- a/doc/cmetrohash64_1o.txt +++ b/doc/cmetrohash64_1o.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 180 (0xb4) ticks (0x17a8b0c1cec8 - 0x17a8b0c1ce14). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5.202 bytes/cycle - 14882.05 MiB/sec @ 3 ghz -Alignment 6 - 5.208 bytes/cycle - 14901.00 MiB/sec @ 3 ghz -Alignment 5 - 5.208 bytes/cycle - 14899.57 MiB/sec @ 3 ghz -Alignment 4 - 5.204 bytes/cycle - 14889.88 MiB/sec @ 3 ghz -Alignment 3 - 5.209 bytes/cycle - 14902.89 MiB/sec @ 3 ghz -Alignment 2 - 5.210 bytes/cycle - 14906.15 MiB/sec @ 3 ghz -Alignment 1 - 5.207 bytes/cycle - 14896.12 MiB/sec @ 3 ghz -Alignment 0 - 5.276 bytes/cycle - 15096.17 MiB/sec @ 3 ghz -Average - 5.216 bytes/cycle - 14921.73 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 28.00 cycles/hash -Small key speed test - 2-byte keys - 28.30 cycles/hash -Small key speed test - 3-byte keys - 32.99 cycles/hash -Small key speed test - 4-byte keys - 28.00 cycles/hash -Small key speed test - 5-byte keys - 33.00 cycles/hash -Small key speed test - 6-byte keys - 33.00 cycles/hash -Small key speed test - 7-byte keys - 39.00 cycles/hash -Small key speed test - 8-byte keys - 28.00 cycles/hash -Small key speed test - 9-byte keys - 33.00 cycles/hash -Small key speed test - 10-byte keys - 33.00 cycles/hash -Small key speed test - 11-byte keys - 39.86 cycles/hash -Small key speed test - 12-byte keys - 33.00 cycles/hash -Small key speed test - 13-byte keys - 39.32 cycles/hash -Small key speed test - 14-byte keys - 39.32 cycles/hash -Small key speed test - 15-byte keys - 43.27 cycles/hash -Small key speed test - 16-byte keys - 34.00 cycles/hash -Small key speed test - 17-byte keys - 37.81 cycles/hash -Small key speed test - 18-byte keys - 37.94 cycles/hash -Small key speed test - 19-byte keys - 43.00 cycles/hash -Small key speed test - 20-byte keys - 38.46 cycles/hash -Small key speed test - 21-byte keys - 43.12 cycles/hash -Small key speed test - 22-byte keys - 43.00 cycles/hash -Small key speed test - 23-byte keys - 49.00 cycles/hash -Small key speed test - 24-byte keys - 38.67 cycles/hash -Small key speed test - 25-byte keys - 43.24 cycles/hash -Small key speed test - 26-byte keys - 43.13 cycles/hash -Small key speed test - 27-byte keys - 49.30 cycles/hash -Small key speed test - 28-byte keys - 43.00 cycles/hash -Small key speed test - 29-byte keys - 49.30 cycles/hash -Small key speed test - 30-byte keys - 49.19 cycles/hash -Small key speed test - 31-byte keys - 54.18 cycles/hash -Average 38.948 cycles/hash +Alignment 7 - 5.115 bytes/cycle - 14634.72 MiB/sec @ 3 ghz +Alignment 6 - 5.125 bytes/cycle - 14663.34 MiB/sec @ 3 ghz +Alignment 5 - 5.124 bytes/cycle - 14659.66 MiB/sec @ 3 ghz +Alignment 4 - 5.125 bytes/cycle - 14662.50 MiB/sec @ 3 ghz +Alignment 3 - 5.114 bytes/cycle - 14632.11 MiB/sec @ 3 ghz +Alignment 2 - 5.125 bytes/cycle - 14663.64 MiB/sec @ 3 ghz +Alignment 1 - 5.125 bytes/cycle - 14663.33 MiB/sec @ 3 ghz +Alignment 0 - 5.190 bytes/cycle - 14849.18 MiB/sec @ 3 ghz +Average - 5.131 bytes/cycle - 14678.56 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 29.00 cycles/hash +Small key speed test - 2-byte keys - 29.00 cycles/hash +Small key speed test - 3-byte keys - 33.18 cycles/hash +Small key speed test - 4-byte keys - 29.00 cycles/hash +Small key speed test - 5-byte keys - 33.28 cycles/hash +Small key speed test - 6-byte keys - 33.43 cycles/hash +Small key speed test - 7-byte keys - 39.29 cycles/hash +Small key speed test - 8-byte keys - 29.00 cycles/hash +Small key speed test - 9-byte keys - 33.95 cycles/hash +Small key speed test - 10-byte keys - 33.97 cycles/hash +Small key speed test - 11-byte keys - 40.00 cycles/hash +Small key speed test - 12-byte keys - 33.97 cycles/hash +Small key speed test - 13-byte keys - 40.00 cycles/hash +Small key speed test - 14-byte keys - 40.00 cycles/hash +Small key speed test - 15-byte keys - 45.00 cycles/hash +Small key speed test - 16-byte keys - 35.00 cycles/hash +Small key speed test - 17-byte keys - 38.00 cycles/hash +Small key speed test - 18-byte keys - 38.25 cycles/hash +Small key speed test - 19-byte keys - 44.00 cycles/hash +Small key speed test - 20-byte keys - 38.22 cycles/hash +Small key speed test - 21-byte keys - 44.00 cycles/hash +Small key speed test - 22-byte keys - 44.00 cycles/hash +Small key speed test - 23-byte keys - 50.00 cycles/hash +Small key speed test - 24-byte keys - 39.00 cycles/hash +Small key speed test - 25-byte keys - 44.00 cycles/hash +Small key speed test - 26-byte keys - 44.00 cycles/hash +Small key speed test - 27-byte keys - 50.00 cycles/hash +Small key speed test - 28-byte keys - 44.00 cycles/hash +Small key speed test - 29-byte keys - 50.00 cycles/hash +Small key speed test - 30-byte keys - 50.00 cycles/hash +Small key speed test - 31-byte keys - 55.00 cycles/hash +Small key speed test - 32-byte keys - 60.90 cycles/hash +Average 40.327 cycles/hash +Average, weighted by key length freq. 39.986 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 35.491 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/cmetrohash64_2.txt b/doc/cmetrohash64_2.txt index fa7d4780..ec85baeb 100644 --- a/doc/cmetrohash64_2.txt +++ b/doc/cmetrohash64_2.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x17ba9ca005dc - 0x17ba9ca00570). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.977 bytes/cycle - 14237.90 MiB/sec @ 3 ghz -Alignment 6 - 4.987 bytes/cycle - 14268.53 MiB/sec @ 3 ghz -Alignment 5 - 4.988 bytes/cycle - 14270.56 MiB/sec @ 3 ghz -Alignment 4 - 4.994 bytes/cycle - 14288.98 MiB/sec @ 3 ghz -Alignment 3 - 4.987 bytes/cycle - 14267.70 MiB/sec @ 3 ghz -Alignment 2 - 4.994 bytes/cycle - 14288.36 MiB/sec @ 3 ghz -Alignment 1 - 4.994 bytes/cycle - 14287.88 MiB/sec @ 3 ghz -Alignment 0 - 5.049 bytes/cycle - 14444.14 MiB/sec @ 3 ghz -Average - 4.996 bytes/cycle - 14294.26 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 28.15 cycles/hash -Small key speed test - 2-byte keys - 28.20 cycles/hash -Small key speed test - 3-byte keys - 34.00 cycles/hash +Alignment 7 - 5.050 bytes/cycle - 14446.88 MiB/sec @ 3 ghz +Alignment 6 - 5.060 bytes/cycle - 14478.19 MiB/sec @ 3 ghz +Alignment 5 - 5.062 bytes/cycle - 14481.36 MiB/sec @ 3 ghz +Alignment 4 - 5.062 bytes/cycle - 14482.98 MiB/sec @ 3 ghz +Alignment 3 - 5.060 bytes/cycle - 14478.03 MiB/sec @ 3 ghz +Alignment 2 - 5.061 bytes/cycle - 14480.15 MiB/sec @ 3 ghz +Alignment 1 - 5.061 bytes/cycle - 14480.79 MiB/sec @ 3 ghz +Alignment 0 - 5.123 bytes/cycle - 14657.18 MiB/sec @ 3 ghz +Average - 5.067 bytes/cycle - 14498.20 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 28.00 cycles/hash +Small key speed test - 2-byte keys - 28.00 cycles/hash +Small key speed test - 3-byte keys - 33.55 cycles/hash Small key speed test - 4-byte keys - 28.00 cycles/hash -Small key speed test - 5-byte keys - 34.00 cycles/hash +Small key speed test - 5-byte keys - 33.76 cycles/hash Small key speed test - 6-byte keys - 34.00 cycles/hash -Small key speed test - 7-byte keys - 40.00 cycles/hash -Small key speed test - 8-byte keys - 28.00 cycles/hash -Small key speed test - 9-byte keys - 34.00 cycles/hash +Small key speed test - 7-byte keys - 39.72 cycles/hash +Small key speed test - 8-byte keys - 27.99 cycles/hash +Small key speed test - 9-byte keys - 33.00 cycles/hash Small key speed test - 10-byte keys - 34.00 cycles/hash -Small key speed test - 11-byte keys - 40.49 cycles/hash +Small key speed test - 11-byte keys - 39.97 cycles/hash Small key speed test - 12-byte keys - 34.00 cycles/hash -Small key speed test - 13-byte keys - 40.19 cycles/hash -Small key speed test - 14-byte keys - 39.97 cycles/hash -Small key speed test - 15-byte keys - 45.48 cycles/hash -Small key speed test - 16-byte keys - 35.44 cycles/hash -Small key speed test - 17-byte keys - 40.82 cycles/hash -Small key speed test - 18-byte keys - 40.00 cycles/hash -Small key speed test - 19-byte keys - 45.24 cycles/hash -Small key speed test - 20-byte keys - 39.97 cycles/hash -Small key speed test - 21-byte keys - 45.60 cycles/hash -Small key speed test - 22-byte keys - 45.98 cycles/hash -Small key speed test - 23-byte keys - 52.27 cycles/hash -Small key speed test - 24-byte keys - 39.99 cycles/hash -Small key speed test - 25-byte keys - 46.98 cycles/hash -Small key speed test - 26-byte keys - 46.22 cycles/hash -Small key speed test - 27-byte keys - 52.71 cycles/hash -Small key speed test - 28-byte keys - 45.44 cycles/hash -Small key speed test - 29-byte keys - 52.88 cycles/hash -Small key speed test - 30-byte keys - 53.07 cycles/hash -Small key speed test - 31-byte keys - 58.60 cycles/hash -Average 40.764 cycles/hash +Small key speed test - 13-byte keys - 39.89 cycles/hash +Small key speed test - 14-byte keys - 39.47 cycles/hash +Small key speed test - 15-byte keys - 45.00 cycles/hash +Small key speed test - 16-byte keys - 35.00 cycles/hash +Small key speed test - 17-byte keys - 40.00 cycles/hash +Small key speed test - 18-byte keys - 39.55 cycles/hash +Small key speed test - 19-byte keys - 45.00 cycles/hash +Small key speed test - 20-byte keys - 39.00 cycles/hash +Small key speed test - 21-byte keys - 45.00 cycles/hash +Small key speed test - 22-byte keys - 45.00 cycles/hash +Small key speed test - 23-byte keys - 51.88 cycles/hash +Small key speed test - 24-byte keys - 39.00 cycles/hash +Small key speed test - 25-byte keys - 45.85 cycles/hash +Small key speed test - 26-byte keys - 45.50 cycles/hash +Small key speed test - 27-byte keys - 51.87 cycles/hash +Small key speed test - 28-byte keys - 45.00 cycles/hash +Small key speed test - 29-byte keys - 51.95 cycles/hash +Small key speed test - 30-byte keys - 52.15 cycles/hash +Small key speed test - 31-byte keys - 57.80 cycles/hash +Small key speed test - 32-byte keys - 59.94 cycles/hash +Average 40.870 cycles/hash +Average, weighted by key length freq. 40.457 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 35.237 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc32.txt b/doc/crc32.txt index 7dc400e5..b76fac11 100644 --- a/doc/crc32.txt +++ b/doc/crc32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x131aba4df34 - 0x131aba4dec8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.137 bytes/cycle - 392.12 MiB/sec @ 3 ghz -Alignment 6 - 0.137 bytes/cycle - 392.07 MiB/sec @ 3 ghz -Alignment 5 - 0.137 bytes/cycle - 392.12 MiB/sec @ 3 ghz -Alignment 4 - 0.137 bytes/cycle - 392.08 MiB/sec @ 3 ghz -Alignment 3 - 0.137 bytes/cycle - 392.12 MiB/sec @ 3 ghz -Alignment 2 - 0.137 bytes/cycle - 392.07 MiB/sec @ 3 ghz -Alignment 1 - 0.137 bytes/cycle - 392.12 MiB/sec @ 3 ghz -Alignment 0 - 0.137 bytes/cycle - 392.08 MiB/sec @ 3 ghz -Average - 0.137 bytes/cycle - 392.10 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 20.72 cycles/hash -Small key speed test - 2-byte keys - 27.60 cycles/hash -Small key speed test - 3-byte keys - 35.00 cycles/hash -Small key speed test - 4-byte keys - 43.00 cycles/hash -Small key speed test - 5-byte keys - 50.00 cycles/hash -Small key speed test - 6-byte keys - 57.00 cycles/hash -Small key speed test - 7-byte keys - 65.00 cycles/hash -Small key speed test - 8-byte keys - 71.99 cycles/hash -Small key speed test - 9-byte keys - 79.00 cycles/hash -Small key speed test - 10-byte keys - 86.00 cycles/hash -Small key speed test - 11-byte keys - 93.00 cycles/hash -Small key speed test - 12-byte keys - 100.52 cycles/hash -Small key speed test - 13-byte keys - 108.00 cycles/hash -Small key speed test - 14-byte keys - 115.84 cycles/hash -Small key speed test - 15-byte keys - 123.00 cycles/hash -Small key speed test - 16-byte keys - 129.00 cycles/hash -Small key speed test - 17-byte keys - 137.00 cycles/hash -Small key speed test - 18-byte keys - 145.00 cycles/hash -Small key speed test - 19-byte keys - 157.00 cycles/hash -Small key speed test - 20-byte keys - 165.00 cycles/hash -Small key speed test - 21-byte keys - 172.00 cycles/hash -Small key speed test - 22-byte keys - 180.00 cycles/hash -Small key speed test - 23-byte keys - 187.77 cycles/hash -Small key speed test - 24-byte keys - 194.00 cycles/hash -Small key speed test - 25-byte keys - 202.00 cycles/hash -Small key speed test - 26-byte keys - 209.24 cycles/hash -Small key speed test - 27-byte keys - 210.23 cycles/hash -Small key speed test - 28-byte keys - 217.91 cycles/hash -Small key speed test - 29-byte keys - 226.19 cycles/hash -Small key speed test - 30-byte keys - 232.21 cycles/hash -Small key speed test - 31-byte keys - 240.00 cycles/hash -Average 131.620 cycles/hash +Alignment 7 - 0.111 bytes/cycle - 318.19 MiB/sec @ 3 ghz +Alignment 6 - 0.131 bytes/cycle - 373.94 MiB/sec @ 3 ghz +Alignment 5 - 0.130 bytes/cycle - 370.91 MiB/sec @ 3 ghz +Alignment 4 - 0.134 bytes/cycle - 382.08 MiB/sec @ 3 ghz +Alignment 3 - 0.135 bytes/cycle - 386.63 MiB/sec @ 3 ghz +Alignment 2 - 0.134 bytes/cycle - 383.33 MiB/sec @ 3 ghz +Alignment 1 - 0.132 bytes/cycle - 378.05 MiB/sec @ 3 ghz +Alignment 0 - 0.128 bytes/cycle - 365.91 MiB/sec @ 3 ghz +Average - 0.129 bytes/cycle - 369.88 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 22.70 cycles/hash +Small key speed test - 2-byte keys - 29.61 cycles/hash +Small key speed test - 3-byte keys - 38.48 cycles/hash +Small key speed test - 4-byte keys - 45.26 cycles/hash +Small key speed test - 5-byte keys - 53.03 cycles/hash +Small key speed test - 6-byte keys - 61.35 cycles/hash +Small key speed test - 7-byte keys - 68.53 cycles/hash +Small key speed test - 8-byte keys - 75.65 cycles/hash +Small key speed test - 9-byte keys - 83.13 cycles/hash +Small key speed test - 10-byte keys - 90.00 cycles/hash +Small key speed test - 11-byte keys - 103.36 cycles/hash +Small key speed test - 12-byte keys - 108.74 cycles/hash +Small key speed test - 13-byte keys - 117.42 cycles/hash +Small key speed test - 14-byte keys - 127.12 cycles/hash +Small key speed test - 15-byte keys - 133.18 cycles/hash +Small key speed test - 16-byte keys - 140.07 cycles/hash +Small key speed test - 17-byte keys - 146.07 cycles/hash +Small key speed test - 18-byte keys - 151.65 cycles/hash +Small key speed test - 19-byte keys - 160.28 cycles/hash +Small key speed test - 20-byte keys - 173.64 cycles/hash +Small key speed test - 21-byte keys - 175.22 cycles/hash +Small key speed test - 22-byte keys - 182.39 cycles/hash +Small key speed test - 23-byte keys - 191.72 cycles/hash +Small key speed test - 24-byte keys - 198.52 cycles/hash +Small key speed test - 25-byte keys - 206.45 cycles/hash +Small key speed test - 26-byte keys - 215.50 cycles/hash +Small key speed test - 27-byte keys - 225.06 cycles/hash +Small key speed test - 28-byte keys - 230.61 cycles/hash +Small key speed test - 29-byte keys - 240.00 cycles/hash +Small key speed test - 30-byte keys - 246.80 cycles/hash +Small key speed test - 31-byte keys - 252.89 cycles/hash +Small key speed test - 32-byte keys - 260.03 cycles/hash +Average 142.327 cycles/hash +Average, weighted by key length freq. 142.497 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 111.392 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc32_hw.txt b/doc/crc32_hw.txt index 7c0b0e33..ed71a437 100644 --- a/doc/crc32_hw.txt +++ b/doc/crc32_hw.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x13308c57fee8 - 0x13308c57fea0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.180 bytes/cycle - 6238.39 MiB/sec @ 3 ghz -Alignment 6 - 2.184 bytes/cycle - 6247.14 MiB/sec @ 3 ghz -Alignment 5 - 2.183 bytes/cycle - 6246.94 MiB/sec @ 3 ghz -Alignment 4 - 2.183 bytes/cycle - 6246.73 MiB/sec @ 3 ghz -Alignment 3 - 2.183 bytes/cycle - 6246.61 MiB/sec @ 3 ghz -Alignment 2 - 2.183 bytes/cycle - 6246.60 MiB/sec @ 3 ghz -Alignment 1 - 2.179 bytes/cycle - 6235.06 MiB/sec @ 3 ghz -Alignment 0 - 2.184 bytes/cycle - 6247.54 MiB/sec @ 3 ghz -Average - 2.183 bytes/cycle - 6244.38 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 26.78 cycles/hash -Small key speed test - 2-byte keys - 29.48 cycles/hash -Small key speed test - 3-byte keys - 32.96 cycles/hash -Small key speed test - 4-byte keys - 32.88 cycles/hash -Small key speed test - 5-byte keys - 37.43 cycles/hash -Small key speed test - 6-byte keys - 38.22 cycles/hash -Small key speed test - 7-byte keys - 40.34 cycles/hash -Small key speed test - 8-byte keys - 32.98 cycles/hash -Small key speed test - 9-byte keys - 37.29 cycles/hash -Small key speed test - 10-byte keys - 37.94 cycles/hash -Small key speed test - 11-byte keys - 41.93 cycles/hash -Small key speed test - 12-byte keys - 34.98 cycles/hash -Small key speed test - 13-byte keys - 41.15 cycles/hash -Small key speed test - 14-byte keys - 41.53 cycles/hash -Small key speed test - 15-byte keys - 44.02 cycles/hash -Small key speed test - 16-byte keys - 39.28 cycles/hash -Small key speed test - 17-byte keys - 43.58 cycles/hash -Small key speed test - 18-byte keys - 43.97 cycles/hash -Small key speed test - 19-byte keys - 46.26 cycles/hash -Small key speed test - 20-byte keys - 38.96 cycles/hash -Small key speed test - 21-byte keys - 44.33 cycles/hash -Small key speed test - 22-byte keys - 44.83 cycles/hash -Small key speed test - 23-byte keys - 48.73 cycles/hash -Small key speed test - 24-byte keys - 42.37 cycles/hash -Small key speed test - 25-byte keys - 47.05 cycles/hash -Small key speed test - 26-byte keys - 47.53 cycles/hash -Small key speed test - 27-byte keys - 49.05 cycles/hash -Small key speed test - 28-byte keys - 43.00 cycles/hash -Small key speed test - 29-byte keys - 47.98 cycles/hash -Small key speed test - 30-byte keys - 48.87 cycles/hash -Small key speed test - 31-byte keys - 52.45 cycles/hash -Average 41.230 cycles/hash +Alignment 7 - 2.188 bytes/cycle - 6261.33 MiB/sec @ 3 ghz +Alignment 6 - 1.807 bytes/cycle - 5169.63 MiB/sec @ 3 ghz +Alignment 5 - 1.769 bytes/cycle - 5062.08 MiB/sec @ 3 ghz +Alignment 4 - 1.769 bytes/cycle - 5061.94 MiB/sec @ 3 ghz +Alignment 3 - 1.769 bytes/cycle - 5061.68 MiB/sec @ 3 ghz +Alignment 2 - 1.785 bytes/cycle - 5105.98 MiB/sec @ 3 ghz +Alignment 1 - 2.202 bytes/cycle - 6300.93 MiB/sec @ 3 ghz +Alignment 0 - 2.195 bytes/cycle - 6278.77 MiB/sec @ 3 ghz +Average - 1.936 bytes/cycle - 5537.79 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 26.52 cycles/hash +Small key speed test - 2-byte keys - 29.27 cycles/hash +Small key speed test - 3-byte keys - 32.83 cycles/hash +Small key speed test - 4-byte keys - 32.76 cycles/hash +Small key speed test - 5-byte keys - 37.19 cycles/hash +Small key speed test - 6-byte keys - 37.41 cycles/hash +Small key speed test - 7-byte keys - 40.15 cycles/hash +Small key speed test - 8-byte keys - 32.61 cycles/hash +Small key speed test - 9-byte keys - 36.93 cycles/hash +Small key speed test - 10-byte keys - 37.43 cycles/hash +Small key speed test - 11-byte keys - 41.59 cycles/hash +Small key speed test - 12-byte keys - 34.62 cycles/hash +Small key speed test - 13-byte keys - 40.65 cycles/hash +Small key speed test - 14-byte keys - 41.10 cycles/hash +Small key speed test - 15-byte keys - 43.64 cycles/hash +Small key speed test - 16-byte keys - 38.96 cycles/hash +Small key speed test - 17-byte keys - 42.59 cycles/hash +Small key speed test - 18-byte keys - 43.08 cycles/hash +Small key speed test - 19-byte keys - 45.98 cycles/hash +Small key speed test - 20-byte keys - 38.50 cycles/hash +Small key speed test - 21-byte keys - 44.11 cycles/hash +Small key speed test - 22-byte keys - 44.49 cycles/hash +Small key speed test - 23-byte keys - 48.28 cycles/hash +Small key speed test - 24-byte keys - 42.02 cycles/hash +Small key speed test - 25-byte keys - 46.09 cycles/hash +Small key speed test - 26-byte keys - 47.06 cycles/hash +Small key speed test - 27-byte keys - 48.58 cycles/hash +Small key speed test - 28-byte keys - 41.61 cycles/hash +Small key speed test - 29-byte keys - 47.03 cycles/hash +Small key speed test - 30-byte keys - 48.28 cycles/hash +Small key speed test - 31-byte keys - 51.84 cycles/hash +Small key speed test - 32-byte keys - 42.37 cycles/hash +Average 40.799 cycles/hash +Average, weighted by key length freq. 41.411 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 38.392 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc32_hw1.txt b/doc/crc32_hw1.txt index 7944620d..724463ea 100644 --- a/doc/crc32_hw1.txt +++ b/doc/crc32_hw1.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1343d7887fe4 - 0x1343d7887f78). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.650 bytes/cycle - 7580.95 MiB/sec @ 3 ghz -Alignment 6 - 2.652 bytes/cycle - 7587.64 MiB/sec @ 3 ghz -Alignment 5 - 2.646 bytes/cycle - 7570.42 MiB/sec @ 3 ghz -Alignment 4 - 2.650 bytes/cycle - 7580.64 MiB/sec @ 3 ghz -Alignment 3 - 2.650 bytes/cycle - 7581.03 MiB/sec @ 3 ghz -Alignment 2 - 2.639 bytes/cycle - 7550.38 MiB/sec @ 3 ghz -Alignment 1 - 2.637 bytes/cycle - 7545.67 MiB/sec @ 3 ghz -Alignment 0 - 2.642 bytes/cycle - 7557.60 MiB/sec @ 3 ghz -Average - 2.646 bytes/cycle - 7569.29 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 28.17 cycles/hash -Small key speed test - 2-byte keys - 30.45 cycles/hash -Small key speed test - 3-byte keys - 32.95 cycles/hash -Small key speed test - 4-byte keys - 35.86 cycles/hash -Small key speed test - 5-byte keys - 48.78 cycles/hash -Small key speed test - 6-byte keys - 48.50 cycles/hash -Small key speed test - 7-byte keys - 47.68 cycles/hash -Small key speed test - 8-byte keys - 40.89 cycles/hash -Small key speed test - 9-byte keys - 44.09 cycles/hash -Small key speed test - 10-byte keys - 48.84 cycles/hash -Small key speed test - 11-byte keys - 50.46 cycles/hash -Small key speed test - 12-byte keys - 43.69 cycles/hash -Small key speed test - 13-byte keys - 46.88 cycles/hash -Small key speed test - 14-byte keys - 52.28 cycles/hash -Small key speed test - 15-byte keys - 52.37 cycles/hash -Small key speed test - 16-byte keys - 45.09 cycles/hash -Small key speed test - 17-byte keys - 49.21 cycles/hash -Small key speed test - 18-byte keys - 53.69 cycles/hash -Small key speed test - 19-byte keys - 56.12 cycles/hash -Small key speed test - 20-byte keys - 48.91 cycles/hash -Small key speed test - 21-byte keys - 52.08 cycles/hash -Small key speed test - 22-byte keys - 57.20 cycles/hash -Small key speed test - 23-byte keys - 58.25 cycles/hash -Small key speed test - 24-byte keys - 49.71 cycles/hash -Small key speed test - 25-byte keys - 53.45 cycles/hash -Small key speed test - 26-byte keys - 57.56 cycles/hash -Small key speed test - 27-byte keys - 60.31 cycles/hash -Small key speed test - 28-byte keys - 51.89 cycles/hash -Small key speed test - 29-byte keys - 54.83 cycles/hash -Small key speed test - 30-byte keys - 59.83 cycles/hash -Small key speed test - 31-byte keys - 61.16 cycles/hash -Average 49.071 cycles/hash +Alignment 7 - 2.669 bytes/cycle - 7634.73 MiB/sec @ 3 ghz +Alignment 6 - 2.668 bytes/cycle - 7634.50 MiB/sec @ 3 ghz +Alignment 5 - 2.667 bytes/cycle - 7630.51 MiB/sec @ 3 ghz +Alignment 4 - 2.666 bytes/cycle - 7626.28 MiB/sec @ 3 ghz +Alignment 3 - 2.661 bytes/cycle - 7612.20 MiB/sec @ 3 ghz +Alignment 2 - 2.662 bytes/cycle - 7616.15 MiB/sec @ 3 ghz +Alignment 1 - 2.665 bytes/cycle - 7624.92 MiB/sec @ 3 ghz +Alignment 0 - 2.667 bytes/cycle - 7630.04 MiB/sec @ 3 ghz +Average - 2.666 bytes/cycle - 7626.17 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 28.65 cycles/hash +Small key speed test - 2-byte keys - 30.46 cycles/hash +Small key speed test - 3-byte keys - 34.12 cycles/hash +Small key speed test - 4-byte keys - 36.99 cycles/hash +Small key speed test - 5-byte keys - 41.72 cycles/hash +Small key speed test - 6-byte keys - 43.90 cycles/hash +Small key speed test - 7-byte keys - 47.40 cycles/hash +Small key speed test - 8-byte keys - 40.18 cycles/hash +Small key speed test - 9-byte keys - 43.74 cycles/hash +Small key speed test - 10-byte keys - 48.66 cycles/hash +Small key speed test - 11-byte keys - 50.23 cycles/hash +Small key speed test - 12-byte keys - 43.39 cycles/hash +Small key speed test - 13-byte keys - 47.03 cycles/hash +Small key speed test - 14-byte keys - 51.88 cycles/hash +Small key speed test - 15-byte keys - 51.94 cycles/hash +Small key speed test - 16-byte keys - 44.76 cycles/hash +Small key speed test - 17-byte keys - 48.46 cycles/hash +Small key speed test - 18-byte keys - 65.00 cycles/hash +Small key speed test - 19-byte keys - 68.62 cycles/hash +Small key speed test - 20-byte keys - 60.60 cycles/hash +Small key speed test - 21-byte keys - 62.72 cycles/hash +Small key speed test - 22-byte keys - 66.59 cycles/hash +Small key speed test - 23-byte keys - 56.17 cycles/hash +Small key speed test - 24-byte keys - 48.47 cycles/hash +Small key speed test - 25-byte keys - 53.00 cycles/hash +Small key speed test - 26-byte keys - 56.97 cycles/hash +Small key speed test - 27-byte keys - 60.01 cycles/hash +Small key speed test - 28-byte keys - 52.05 cycles/hash +Small key speed test - 29-byte keys - 53.61 cycles/hash +Small key speed test - 30-byte keys - 58.99 cycles/hash +Small key speed test - 31-byte keys - 58.95 cycles/hash +Small key speed test - 32-byte keys - 51.30 cycles/hash +Average 50.206 cycles/hash +Average, weighted by key length freq. 52.507 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 45.432 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc32_pclmul.txt b/doc/crc32_pclmul.txt index 6910b823..1b7294dd 100644 --- a/doc/crc32_pclmul.txt +++ b/doc/crc32_pclmul.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x134e82784df8 - 0x134e82784d8c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.767 bytes/cycle - 7915.39 MiB/sec @ 3 ghz -Alignment 6 - 2.723 bytes/cycle - 7791.36 MiB/sec @ 3 ghz -Alignment 5 - 2.714 bytes/cycle - 7765.22 MiB/sec @ 3 ghz -Alignment 4 - 2.695 bytes/cycle - 7711.13 MiB/sec @ 3 ghz -Alignment 3 - 2.755 bytes/cycle - 7883.33 MiB/sec @ 3 ghz -Alignment 2 - 2.760 bytes/cycle - 7897.43 MiB/sec @ 3 ghz -Alignment 1 - 2.721 bytes/cycle - 7783.42 MiB/sec @ 3 ghz -Alignment 0 - 4.361 bytes/cycle - 12477.43 MiB/sec @ 3 ghz -Average - 2.937 bytes/cycle - 8403.09 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 101.58 cycles/hash -Small key speed test - 2-byte keys - 103.38 cycles/hash -Small key speed test - 3-byte keys - 103.06 cycles/hash -Small key speed test - 4-byte keys - 106.60 cycles/hash -Small key speed test - 5-byte keys - 103.24 cycles/hash -Small key speed test - 6-byte keys - 103.26 cycles/hash -Small key speed test - 7-byte keys - 103.04 cycles/hash -Small key speed test - 8-byte keys - 108.52 cycles/hash -Small key speed test - 9-byte keys - 102.78 cycles/hash -Small key speed test - 10-byte keys - 102.86 cycles/hash -Small key speed test - 11-byte keys - 103.61 cycles/hash -Small key speed test - 12-byte keys - 105.06 cycles/hash -Small key speed test - 13-byte keys - 105.33 cycles/hash -Small key speed test - 14-byte keys - 105.38 cycles/hash -Small key speed test - 15-byte keys - 105.34 cycles/hash -Small key speed test - 16-byte keys - 100.97 cycles/hash -Small key speed test - 17-byte keys - 106.82 cycles/hash -Small key speed test - 18-byte keys - 106.74 cycles/hash -Small key speed test - 19-byte keys - 107.08 cycles/hash -Small key speed test - 20-byte keys - 106.75 cycles/hash -Small key speed test - 21-byte keys - 107.18 cycles/hash -Small key speed test - 22-byte keys - 106.96 cycles/hash -Small key speed test - 23-byte keys - 106.82 cycles/hash -Small key speed test - 24-byte keys - 106.76 cycles/hash -Small key speed test - 25-byte keys - 106.89 cycles/hash -Small key speed test - 26-byte keys - 106.85 cycles/hash -Small key speed test - 27-byte keys - 106.83 cycles/hash -Small key speed test - 28-byte keys - 107.00 cycles/hash -Small key speed test - 29-byte keys - 107.13 cycles/hash -Small key speed test - 30-byte keys - 107.11 cycles/hash -Small key speed test - 31-byte keys - 107.03 cycles/hash -Average 105.419 cycles/hash +Alignment 7 - 2.330 bytes/cycle - 6666.15 MiB/sec @ 3 ghz +Alignment 6 - 2.311 bytes/cycle - 6612.02 MiB/sec @ 3 ghz +Alignment 5 - 2.668 bytes/cycle - 7633.50 MiB/sec @ 3 ghz +Alignment 4 - 2.674 bytes/cycle - 7649.15 MiB/sec @ 3 ghz +Alignment 3 - 2.701 bytes/cycle - 7726.54 MiB/sec @ 3 ghz +Alignment 2 - 2.673 bytes/cycle - 7647.96 MiB/sec @ 3 ghz +Alignment 1 - 2.711 bytes/cycle - 7756.34 MiB/sec @ 3 ghz +Alignment 0 - 4.199 bytes/cycle - 12013.98 MiB/sec @ 3 ghz +Average - 2.783 bytes/cycle - 7963.20 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 101.97 cycles/hash +Small key speed test - 2-byte keys - 105.35 cycles/hash +Small key speed test - 3-byte keys - 105.31 cycles/hash +Small key speed test - 4-byte keys - 105.37 cycles/hash +Small key speed test - 5-byte keys - 105.41 cycles/hash +Small key speed test - 6-byte keys - 105.44 cycles/hash +Small key speed test - 7-byte keys - 105.42 cycles/hash +Small key speed test - 8-byte keys - 105.41 cycles/hash +Small key speed test - 9-byte keys - 105.37 cycles/hash +Small key speed test - 10-byte keys - 105.40 cycles/hash +Small key speed test - 11-byte keys - 105.40 cycles/hash +Small key speed test - 12-byte keys - 105.36 cycles/hash +Small key speed test - 13-byte keys - 105.36 cycles/hash +Small key speed test - 14-byte keys - 105.36 cycles/hash +Small key speed test - 15-byte keys - 105.38 cycles/hash +Small key speed test - 16-byte keys - 100.19 cycles/hash +Small key speed test - 17-byte keys - 107.46 cycles/hash +Small key speed test - 18-byte keys - 107.49 cycles/hash +Small key speed test - 19-byte keys - 107.45 cycles/hash +Small key speed test - 20-byte keys - 107.47 cycles/hash +Small key speed test - 21-byte keys - 107.47 cycles/hash +Small key speed test - 22-byte keys - 107.46 cycles/hash +Small key speed test - 23-byte keys - 107.50 cycles/hash +Small key speed test - 24-byte keys - 107.49 cycles/hash +Small key speed test - 25-byte keys - 107.47 cycles/hash +Small key speed test - 26-byte keys - 107.56 cycles/hash +Small key speed test - 27-byte keys - 107.71 cycles/hash +Small key speed test - 28-byte keys - 107.49 cycles/hash +Small key speed test - 29-byte keys - 107.90 cycles/hash +Small key speed test - 30-byte keys - 107.82 cycles/hash +Small key speed test - 31-byte keys - 107.86 cycles/hash +Small key speed test - 32-byte keys - 101.62 cycles/hash +Average 106.023 cycles/hash +Average, weighted by key length freq. 105.908 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 103.388 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/crc64_hw.txt b/doc/crc64_hw.txt index d3b49719..49d4397c 100644 --- a/doc/crc64_hw.txt +++ b/doc/crc64_hw.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x133a2f229f40 - 0x133a2f229ed4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.147 bytes/cycle - 6142.46 MiB/sec @ 3 ghz -Alignment 6 - 2.147 bytes/cycle - 6142.72 MiB/sec @ 3 ghz -Alignment 5 - 2.149 bytes/cycle - 6148.58 MiB/sec @ 3 ghz -Alignment 4 - 2.146 bytes/cycle - 6138.69 MiB/sec @ 3 ghz -Alignment 3 - 2.148 bytes/cycle - 6144.82 MiB/sec @ 3 ghz -Alignment 2 - 2.148 bytes/cycle - 6144.84 MiB/sec @ 3 ghz -Alignment 1 - 2.148 bytes/cycle - 6144.20 MiB/sec @ 3 ghz -Alignment 0 - 2.147 bytes/cycle - 6142.70 MiB/sec @ 3 ghz -Average - 2.147 bytes/cycle - 6143.62 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 26.82 cycles/hash -Small key speed test - 2-byte keys - 27.90 cycles/hash -Small key speed test - 3-byte keys - 31.04 cycles/hash -Small key speed test - 4-byte keys - 31.85 cycles/hash -Small key speed test - 5-byte keys - 34.25 cycles/hash -Small key speed test - 6-byte keys - 33.59 cycles/hash -Small key speed test - 7-byte keys - 41.29 cycles/hash -Small key speed test - 8-byte keys - 33.29 cycles/hash -Small key speed test - 9-byte keys - 38.81 cycles/hash -Small key speed test - 10-byte keys - 37.27 cycles/hash -Small key speed test - 11-byte keys - 43.06 cycles/hash -Small key speed test - 12-byte keys - 35.34 cycles/hash -Small key speed test - 13-byte keys - 42.43 cycles/hash -Small key speed test - 14-byte keys - 41.84 cycles/hash -Small key speed test - 15-byte keys - 44.17 cycles/hash -Small key speed test - 16-byte keys - 38.85 cycles/hash -Small key speed test - 17-byte keys - 44.42 cycles/hash -Small key speed test - 18-byte keys - 43.84 cycles/hash -Small key speed test - 19-byte keys - 43.93 cycles/hash +Alignment 7 - 1.769 bytes/cycle - 5062.20 MiB/sec @ 3 ghz +Alignment 6 - 1.769 bytes/cycle - 5062.23 MiB/sec @ 3 ghz +Alignment 5 - 1.769 bytes/cycle - 5061.95 MiB/sec @ 3 ghz +Alignment 4 - 1.769 bytes/cycle - 5061.86 MiB/sec @ 3 ghz +Alignment 3 - 2.136 bytes/cycle - 6112.39 MiB/sec @ 3 ghz +Alignment 2 - 2.130 bytes/cycle - 6092.73 MiB/sec @ 3 ghz +Alignment 1 - 2.128 bytes/cycle - 6089.39 MiB/sec @ 3 ghz +Alignment 0 - 2.129 bytes/cycle - 6090.61 MiB/sec @ 3 ghz +Average - 1.950 bytes/cycle - 5579.17 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 27.02 cycles/hash +Small key speed test - 2-byte keys - 28.23 cycles/hash +Small key speed test - 3-byte keys - 31.39 cycles/hash +Small key speed test - 4-byte keys - 32.25 cycles/hash +Small key speed test - 5-byte keys - 34.74 cycles/hash +Small key speed test - 6-byte keys - 34.00 cycles/hash +Small key speed test - 7-byte keys - 41.26 cycles/hash +Small key speed test - 8-byte keys - 33.69 cycles/hash +Small key speed test - 9-byte keys - 39.24 cycles/hash +Small key speed test - 10-byte keys - 37.57 cycles/hash +Small key speed test - 11-byte keys - 43.55 cycles/hash +Small key speed test - 12-byte keys - 35.49 cycles/hash +Small key speed test - 13-byte keys - 42.76 cycles/hash +Small key speed test - 14-byte keys - 42.02 cycles/hash +Small key speed test - 15-byte keys - 44.43 cycles/hash +Small key speed test - 16-byte keys - 39.09 cycles/hash +Small key speed test - 17-byte keys - 44.71 cycles/hash +Small key speed test - 18-byte keys - 44.12 cycles/hash +Small key speed test - 19-byte keys - 44.34 cycles/hash Small key speed test - 20-byte keys - 39.60 cycles/hash -Small key speed test - 21-byte keys - 45.36 cycles/hash -Small key speed test - 22-byte keys - 44.39 cycles/hash -Small key speed test - 23-byte keys - 45.57 cycles/hash -Small key speed test - 24-byte keys - 39.42 cycles/hash -Small key speed test - 25-byte keys - 43.95 cycles/hash -Small key speed test - 26-byte keys - 45.87 cycles/hash -Small key speed test - 27-byte keys - 48.83 cycles/hash -Small key speed test - 28-byte keys - 42.15 cycles/hash -Small key speed test - 29-byte keys - 49.36 cycles/hash -Small key speed test - 30-byte keys - 44.22 cycles/hash -Small key speed test - 31-byte keys - 52.32 cycles/hash -Average 40.485 cycles/hash +Small key speed test - 21-byte keys - 45.38 cycles/hash +Small key speed test - 22-byte keys - 44.68 cycles/hash +Small key speed test - 23-byte keys - 45.93 cycles/hash +Small key speed test - 24-byte keys - 39.73 cycles/hash +Small key speed test - 25-byte keys - 44.13 cycles/hash +Small key speed test - 26-byte keys - 46.41 cycles/hash +Small key speed test - 27-byte keys - 49.38 cycles/hash +Small key speed test - 28-byte keys - 42.48 cycles/hash +Small key speed test - 29-byte keys - 49.65 cycles/hash +Small key speed test - 30-byte keys - 44.62 cycles/hash +Small key speed test - 31-byte keys - 52.66 cycles/hash +Small key speed test - 32-byte keys - 43.25 cycles/hash +Average 40.868 cycles/hash +Average, weighted by key length freq. 42.067 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 39.267 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc64_jones.txt b/doc/crc64_jones.txt new file mode 100644 index 00000000..16f2a59c --- /dev/null +++ b/doc/crc64_jones.txt @@ -0,0 +1,2079 @@ +------------------------------------------------------------------------------- +--- Testing crc64_jones "crc64, jones polynomial, auto 1-3 pipelines depending on length, joined at the end" POOR + +[[[ Sanity Tests ]]] + +Verification value 0x7DC1B496 ....... PASS +Running sanity check 1 .......... PASS +Running AppendedZeroesTest .......... PASS + +[[[ Speed Tests ]]] + +WARNING: timer resolution is 108 (0x6c) ticks (0x13d8b3e14f14 - 0x13d8b3e14ea8). Broken VDSO? +Bulk speed test - 262144-byte keys +Alignment 7 - 1.230 bytes/cycle - 3517.70 MiB/sec @ 3 ghz +Alignment 6 - 1.228 bytes/cycle - 3512.77 MiB/sec @ 3 ghz +Alignment 5 - 1.233 bytes/cycle - 3528.35 MiB/sec @ 3 ghz +Alignment 4 - 1.220 bytes/cycle - 3490.33 MiB/sec @ 3 ghz +Alignment 3 - 1.220 bytes/cycle - 3490.11 MiB/sec @ 3 ghz +Alignment 2 - 1.233 bytes/cycle - 3528.39 MiB/sec @ 3 ghz +Alignment 1 - 1.231 bytes/cycle - 3521.03 MiB/sec @ 3 ghz +Alignment 0 - 1.228 bytes/cycle - 3512.59 MiB/sec @ 3 ghz +Average - 1.228 bytes/cycle - 3512.66 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 33.62 cycles/hash +Small key speed test - 2-byte keys - 38.94 cycles/hash +Small key speed test - 3-byte keys - 45.83 cycles/hash +Small key speed test - 4-byte keys - 52.82 cycles/hash +Small key speed test - 5-byte keys - 60.61 cycles/hash +Small key speed test - 6-byte keys - 67.39 cycles/hash +Small key speed test - 7-byte keys - 74.64 cycles/hash +Small key speed test - 8-byte keys - 59.43 cycles/hash +Small key speed test - 9-byte keys - 67.11 cycles/hash +Small key speed test - 10-byte keys - 74.24 cycles/hash +Small key speed test - 11-byte keys - 81.46 cycles/hash +Small key speed test - 12-byte keys - 66.63 cycles/hash +Small key speed test - 13-byte keys - 74.12 cycles/hash +Small key speed test - 14-byte keys - 81.65 cycles/hash +Small key speed test - 15-byte keys - 89.06 cycles/hash +Small key speed test - 16-byte keys - 72.98 cycles/hash +Small key speed test - 17-byte keys - 80.81 cycles/hash +Small key speed test - 18-byte keys - 88.07 cycles/hash +Small key speed test - 19-byte keys - 95.28 cycles/hash +Small key speed test - 20-byte keys - 80.17 cycles/hash +Small key speed test - 21-byte keys - 87.86 cycles/hash +Small key speed test - 22-byte keys - 94.88 cycles/hash +Small key speed test - 23-byte keys - 102.22 cycles/hash +Small key speed test - 24-byte keys - 87.11 cycles/hash +Small key speed test - 25-byte keys - 94.44 cycles/hash +Small key speed test - 26-byte keys - 101.44 cycles/hash +Small key speed test - 27-byte keys - 109.15 cycles/hash +Small key speed test - 28-byte keys - 94.53 cycles/hash +Small key speed test - 29-byte keys - 101.42 cycles/hash +Small key speed test - 30-byte keys - 108.57 cycles/hash +Small key speed test - 31-byte keys - 115.23 cycles/hash +Small key speed test - 32-byte keys - 100.58 cycles/hash +Average 80.697 cycles/hash +Average, weighted by key length freq. 82.658 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 72.032 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) + +[[[ 'Hashmap' Speed Tests ]]] + +std::unordered_map +Init std HashMapTest: 465.363 cycles/op (104334 inserts, 1% deletions) +Running std HashMapTest: 372.192 cycles/op (9.8 stdv) + +greg7mdp/parallel-hashmap +Init fast HashMapTest: 310.430 cycles/op (104334 inserts, 1% deletions) +Running fast HashMapTest: 265.677 cycles/op (1.3 stdv) ....... PASS + +[[[ Avalanche Tests ]]] + +Testing 24-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +Testing 32-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 40-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 48-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 56-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 64-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 72-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 80-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 96-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 112-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 128-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 160-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 512-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 1024-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +*********FAIL********* + +[[[ Keyset 'Sparse' Tests ]]] + +Keyset 'Sparse' - 16-bit keys with up to 9 bits set - 50643 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (high 19-25 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (low 19-25 bits) - Worst is 25 bits: 19702/38 (515.80x) !!!!! +Testing distribution - Worst bias is the 13-bit window at bit 0 - 87.512% !!!!! + +Keyset 'Sparse' - 24-bit keys with up to 8 bits set - 1271626 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (high 24-35 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (low 24-35 bits) - Worst is 24 bits: 353795/46996 (7.53x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 0 - 89.254% !!!!! + +Keyset 'Sparse' - 32-bit keys with up to 7 bits set - 4514873 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2372.2, actual 0 (0.00x) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 225634/290569 (0.78x) +Testing collisions (low 32-bit) - Expected 2372.2, actual 1716 (0.72x) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 32949/18931 (1.74x) +Testing distribution - Worst bias is the 19-bit window at bit 63 - 48.502% !!!!! + +Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2460.8, actual 2770 (1.13x) (310) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 471339/301185 (1.56x) +Testing collisions (low 32-bit) - Expected 2460.8, actual 4578 (1.86x) (2118) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 62236/19637 (3.17x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 55 - 26.366% !!!!! + +Keyset 'Sparse' - 48-bit keys with up to 6 bits set - 14196869 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 23437.8, actual 86718 (3.70x) (63281) !!!!! +Testing collisions (high 27-42 bits) - Worst is 32 bits: 86718/23437 (3.70x) !!!!! +Testing collisions (low 32-bit) - Expected 23437.8, actual 10206 (0.44x) +Testing collisions (low 27-42 bits) - Worst is 28 bits: 439497/368886 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 49 - 8.182% !!!!! + +Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2069.0, actual 4550 (2.20x) (2482) !!!!! +Testing collisions (high 25-38 bits) - Worst is 31 bits: 9100/4136 (2.20x) !!!!! +Testing collisions (low 32-bit) - Expected 2069.0, actual 1008 (0.49x) +Testing collisions (low 25-38 bits) - Worst is 31 bits: 6188/4136 (1.50x) +Testing distribution - Worst bias is the 19-bit window at bit 60 - 4.589% !!!!! + +Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8021.7, actual 10388 (1.29x) (2367) +Testing collisions (high 26-40 bits) - Worst is 32 bits: 10388/8021 (1.29x) +Testing collisions (low 32-bit) - Expected 8021.7, actual 6460 (0.81x) +Testing collisions (low 26-40 bits) - Worst is 27 bits: 298840/251643 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 50 - 2.290% !!!!! + +Keyset 'Sparse' - 72-bit keys with up to 5 bits set - 15082603 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 26451.8, actual 21148 (0.80x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 797203/816575 (0.98x) +Testing collisions (low 32-bit) - Expected 26451.8, actual 34232 (1.29x) (7781) +Testing collisions (low 27-42 bits) - Worst is 35 bits: 6174/3309 (1.87x) +Testing distribution - Worst bias is the 20-bit window at bit 24 - 1.509% !!!!! + +Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1401.0, actual 1435 (1.02x) (35) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 70/21 (3.20x) !!!!! +Testing collisions (low 32-bit) - Expected 1401.0, actual 840 (0.60x) +Testing collisions (low 25-38 bits) - Worst is 27 bits: 50326/44458 (1.13x) +Testing distribution - Worst bias is the 19-bit window at bit 29 - 2.053% !!!!! + +Keyset 'Sparse' - 160-bit keys with up to 4 bits set - 26977161 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 84546.1, actual 82294 (0.97x) +Testing collisions (high 28-44 bits) - Worst is 43 bits: 105/41 (2.54x) !!!!! +Testing collisions (low 32-bit) - Expected 84546.1, actual 92626 (1.10x) (8080) +Testing collisions (low 28-44 bits) - Worst is 43 bits: 140/41 (3.38x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 0.407% + +Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 910.2, actual 1110 (1.22x) (200) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 610/455 (1.34x) +Testing collisions (low 32-bit) - Expected 910.2, actual 1279 (1.41x) (369) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 70/28 (2.46x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 45 - 0.363% + +Keyset 'Sparse' - 512-bit keys with up to 3 bits set - 22370049 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 58155.4, actual 58555 (1.01x) (400) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 80/28 (2.81x) !!!!! +Testing collisions (low 32-bit) - Expected 58155.4, actual 58907 (1.01x) (752) +Testing collisions (low 28-43 bits) - Worst is 42 bits: 90/56 (1.58x) +Testing distribution - Worst bias is the 20-bit window at bit 42 - 0.108% + +Keyset 'Sparse' - 1024-bit keys with up to 2 bits set - 524801 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (high 22-32 bits) - Worst is 22 bits: 31328/31504 (0.99x) +Testing collisions (low 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (low 22-32 bits) - Worst is 22 bits: 31137/31504 (0.99x) +Testing distribution - Worst bias is the 16-bit window at bit 31 - 0.592% + +Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 512.4, actual 513 (1.00x) (1) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 51/32 (1.59x) +Testing collisions (low 32-bit) - Expected 512.4, actual 570 (1.11x) (58) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 60/32 (1.87x) +Testing distribution - Worst bias is the 18-bit window at bit 29 - 0.264% + +*********FAIL********* + +[[[ Keyset 'Permutation' Tests ]]] + +Combination Lowbits Tests: +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 33 - 74.318% !!!!! + +*********FAIL********* + +Combination Highbits Tests +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 59 - 50.100% !!!!! + +*********FAIL********* + +Combination Hi-Lo Tests: +Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 813615 (201533487953.56x) (813615) !!!!! +Testing collisions (high 32-bit) - Expected 17322.9, actual 822958 (47.51x) (805636) !!!!! +Testing collisions (high 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing collisions (low 32-bit) - Expected 17322.9, actual 817759 (47.21x) (800437) !!!!! +Testing collisions (low 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 36 - 6.110% !!!!! + +*********FAIL********* + +Combination 0x80000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 38 - 58.033% !!!!! + +*********FAIL********* + +Combination 0x00000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 47 - 74.395% !!!!! + +*********FAIL********* + +Combination 0x8000000000000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 1 - 74.666% !!!!! + +*********FAIL********* + +Combination 0x0000000000000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 37 - 74.784% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 50.698% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 34 - 51.902% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 31 - 63.227% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 74.245% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 58.340% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 52 - 52.995% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 14 - 51.561% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 45 - 50.195% !!!!! + +*********FAIL********* + +[[[ Keyset 'Window' Tests ]]] + +Keyset 'Window' - 32-bit key, 25-bit window - 32 tests, 33554432 keys per test +Window at 0 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 1 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 2 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 3 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 4 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 5 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 6 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 7 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 8 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 9 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 10 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 11 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 12 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 13 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 14 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 15 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 16 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 17 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 18 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 19 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 20 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 21 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 22 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 23 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 24 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 25 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 26 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 27 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 28 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 29 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 30 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 31 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 32 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) + +[[[ Keyset 'Cyclic' Tests ]]] + +Keyset 'Cyclic' - 8 cycles of 8 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 103 (0.88x) +Testing collisions (high 23-34 bits) - Worst is 24 bits: 29243/29218 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 70/58 (1.20x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.109% + +Keyset 'Cyclic' - 8 cycles of 9 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (high 23-34 bits) - Worst is 33 bits: 66/58 (1.13x) +Testing collisions (low 32-bit) - Expected 116.4, actual 118 (1.01x) (2) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 492/465 (1.06x) +Testing distribution - Worst bias is the 17-bit window at bit 52 - 0.085% + +Keyset 'Cyclic' - 8 cycles of 10 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 27 bits: 3766/3716 (1.01x) +Testing collisions (low 32-bit) - Expected 116.4, actual 106 (0.91x) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 472/465 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.079% + +Keyset 'Cyclic' - 8 cycles of 11 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 115 (0.99x) (-1) +Testing collisions (high 23-34 bits) - Worst is 25 bits: 15081/14754 (1.02x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 62/58 (1.07x) +Testing distribution - Worst bias is the 17-bit window at bit 39 - 0.142% + +Keyset 'Cyclic' - 8 cycles of 12 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 26 bits: 7435/7413 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 105 (0.90x) +Testing collisions (low 23-34 bits) - Worst is 26 bits: 7475/7413 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 8 - 0.094% + +Keyset 'Cyclic' - 8 cycles of 16 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 117 (1.01x) (1) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 32 bits: 120/116 (1.03x) +Testing distribution - Worst bias is the 16-bit window at bit 7 - 0.114% + + +[[[ Keyset 'TwoBytes' Tests ]]] + +Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 261375 (22646103971038.65x) (261375) !!!!! +Testing collisions (high 32-bit) - Expected 49.6, actual 261375 (5272.97x) (261326) !!!!! +Testing collisions (high 23-33 bits) - Worst is 33 bits: 261375/24 (10545.68x) !!!!! +Testing collisions (low 32-bit) - Expected 49.6, actual 261378 (5273.03x) (261329) !!!!! +Testing collisions (low 23-33 bits) - Worst is 33 bits: 261378/24 (10545.80x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 0 - 87.354% !!!!! + +Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 3648285 (4496774986619.34x) (3648285) !!!!! +Testing collisions (high 32-bit) - Expected 3483.1, actual 3650943 (1048.19x) (3647460) !!!!! +Testing collisions (high 26-39 bits) - Worst is 39 bits: 3648306/27 (134015.55x) !!!!! +Testing collisions (low 32-bit) - Expected 3483.1, actual 3648528 (1047.50x) (3645045) !!!!! +Testing collisions (low 26-39 bits) - Worst is 39 bits: 3648285/27 (134014.78x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 88.627% !!!!! + +Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 14322075 (1524566310736.38x) (14322075) !!!!! +Testing collisions (high 32-bit) - Expected 40289.5, actual 14326031 (355.58x) (14285742) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing collisions (low 32-bit) - Expected 40289.5, actual 14324456 (355.54x) (14284167) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 64.751% !!!!! + +Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 36444345 (686634081469.61x) (36444345) !!!!! +Testing collisions (high 32-bit) - Expected 227182.3, actual 36453640 (160.46x) (36226458) !!!!! +Testing collisions (high 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing collisions (low 32-bit) - Expected 227182.3, actual 36451340 (160.45x) (36224158) !!!!! +Testing collisions (low 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 40.372% !!!!! + +Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 74176695 (365441696655.85x) (74176695) !!!!! +Testing collisions (high 32-bit) - Expected 865959.1, actual 74196456 (85.68x) (73330497) !!!!! +Testing collisions (high 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing collisions (low 32-bit) - Expected 865959.1, actual 74193744 (85.68x) (73327785) !!!!! +Testing collisions (low 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 24.319% !!!!! + +*********FAIL********* + +[[[ Keyset 'Text' Tests ]]] + +Keyset 'Text' - keys of form "FooXXXXBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 29 bits: 940540/201492 (4.67x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 88000 (3.47x) (62611) !!!!! +Testing collisions (low 27-42 bits) - Worst is 32 bits: 88000/25389 (3.47x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 63 - 31.683% !!!!! + +Keyset 'Text' - keys of form "FooBarXXXX" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 532272/784335 (0.68x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 29 bits: 929280/201492 (4.61x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 52.279% !!!!! + +Keyset 'Text' - keys of form "XXXXFooBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 28 bits: 1408000/399329 (3.53x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 27 bits: 80000/784335 (0.10x) +Testing distribution - Worst bias is the 20-bit window at bit 61 - 24.026% !!!!! + +Keyset 'Words' - 4000000 random keys of len 6-16 from alnum charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1802 (0.97x) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 35/29 (1.20x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1897 (1.02x) (35) +Testing collisions (low 25-38 bits) - Worst is 33 bits: 962/931 (1.03x) +Testing distribution - Worst bias is the 19-bit window at bit 59 - 0.057% + +Keyset 'Words' - 4000000 random keys of len 6-16 from password charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1872 (1.01x) (10) +Testing collisions (high 25-38 bits) - Worst is 33 bits: 949/931 (1.02x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1907 (1.02x) (45) +Testing collisions (low 25-38 bits) - Worst is 34 bits: 483/465 (1.04x) +Testing distribution - Worst bias is the 19-bit window at bit 10 - 0.052% + +Keyset 'Words' - 104334 dict words +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (high 20-28 bits) - Worst is 22 bits: 1303/1286 (1.01x) +Testing collisions (low 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (low 20-28 bits) - Worst is 28 bits: 23/20 (1.13x) +Testing distribution - Worst bias is the 14-bit window at bit 62 - 0.676% + +*********FAIL********* + +[[[ Keyset 'Zeroes' Tests ]]] + +Keyset 'Zeroes' - 204800 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 204799 (180143985094819.84x) (204799) !!!!! +Testing collisions (high 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (high 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing collisions (low 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (low 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing distribution - Worst bias is the 15-bit window at bit 0 - 99.997% !!!!! + +*********FAIL********* + +[[[ Keyset 'Seed' Tests ]]] + +Keyset 'Seed' - 5000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (high 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (low 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing distribution - Worst bias is the 19-bit window at bit 49 - 64.465% !!!!! + +*********FAIL********* + +[[[ Keyset 'PerlinNoise' Tests ]]] + +Testing 16777216 coordinates (L2) : +Testing collisions ( 64-bit) - Expected 0.0, actual 16773120 (2198486515680.01x) (16773120) !!!!! +Testing collisions (high 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! +Testing collisions (low 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! + +Testing AV variant, 128 count with 4 spacing, 4-12: +Testing collisions ( 64-bit) - Expected 0.0, actual 796431 (3063942940256.29x) (796431) +Testing collisions (high 32-bit) - Expected 1116.2, actual 797014 (714.07x) (795898) !!!!! +Testing collisions (high 25-37 bits) - Worst is 37 bits: 796449/34 (22828.84x) !!!!! +Testing collisions (low 32-bit) - Expected 1116.2, actual 797035 (714.09x) (795919) !!!!! +Testing collisions (low 25-37 bits) - Worst is 37 bits: 796463/34 (22829.24x) !!!!! + +*********FAIL********* + +[[[ Diff 'Differential' Tests ]]] + +Testing 8303632 up-to-5-bit differentials in 64-bit keys -> 64 bit hashes. +1000 reps, 8303632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 11017632 up-to-4-bit differentials in 128-bit keys -> 64 bit hashes. +1000 reps, 11017632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 2796416 up-to-3-bit differentials in 256-bit keys -> 64 bit hashes. +1000 reps, 2796416000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + + +[[[ DiffDist 'Differential Distribution' Tests ]]] + +Testing bit 0 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 1 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 2 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 3 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 4 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 5 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 6 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 7 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 8 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 9 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 10 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 11 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 12 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 13 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 14 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 15 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 16 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 17 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 18 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 19 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 20 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 21 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 22 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 23 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 24 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 25 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 26 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 27 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 28 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 29 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 30 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 31 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 32 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 33 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 34 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 35 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 36 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 37 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 38 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 39 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 40 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 41 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 42 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 43 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 44 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 45 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 46 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 47 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 48 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 49 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 50 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 51 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 52 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 53 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 54 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 55 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 56 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 57 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 58 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 59 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 60 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 61 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 62 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 63 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +*********FAIL********* + +[[[ MomentChi2 Tests ]]] + +Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 2 ... +Target values to approximate : 38918200.000000 - 273633.333333 +8 threads starting... done +Popcount 1 stats : 38918912.000000 - 273643.176129 +Popcount 0 stats : 38918912.000000 - 273643.178030 +MomentChi2 for bits 1 : 0.926303 +MomentChi2 for bits 0 : 0.926303 + +Derivative stats (transition from 2 consecutive values) : +Popcount 1 stats : 42600335.340257 - 233974.301184 +Popcount 0 stats : 32312867.472151 - 105358.370683 +MomentChi2 for deriv b1 : 2.67098e+07 +MomentChi2 for deriv b0 : 1.15122e+08 + + FAIL !!!! + + +*********FAIL********* + +[[[ Prng Tests ]]] + +Generating 33554432 random numbers : +Testing collisions ( 64-bit) - Expected 0.0, actual 33554431 (1099511627776.00x) (33554431) !!!!! +Testing collisions (high 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (high 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! +Testing collisions (low 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (low 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! + +*********FAIL********* + +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS + + +Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001 +Verification value is 0x00000001 - Testing took 890.231476 seconds +------------------------------------------------------------------------------- +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS +Testing the first 0xffffffff seeds ... +8 threads starting... +at 0 +Broken seed 0x00000000 => 0 with key[16] of all 0 bytes +at 20000000 at 40000000 at 60000000 at 80000000 at a0000000 at c0000000 at e0000000 0x81ffffff 0x41ffffff 0xe1ffffff 0x01ffffff 0x21ffffff 0xc1ffffff 0x61ffffff 0xa1ffffff 0xe3ffffff 0x23ffffff 0xc3ffffff 0x83ffffff 0x03ffffff 0x43ffffff 0xa3ffffff 0x63ffffff 0xe5ffffff 0x05ffffff 0x85ffffff 0x45ffffff 0x25ffffff 0xa5ffffff 0xc5ffffff 0x65ffffff 0xe7ffffff 0x07ffffff 0x27ffffff 0x87ffffff 0x47ffffff 0xa7ffffff 0xc7ffffff 0x67ffffff 0xe9ffffff 0x29ffffff 0x49ffffff 0x09ffffff 0xa9ffffff 0xc9ffffff 0x89ffffff 0x69ffffff 0xebffffff 0x4bffffff 0x2bffffff 0x0bffffff 0xcbffffff 0x8bffffff 0xabffffff 0x6bffffff 0xedffffff 0x2dffffff 0x4dffffff 0xcdffffff 0x0dffffff 0x8dffffff 0xadffffff 0x6dffffff 0xefffffff 0x0fffffff 0x4fffffff 0xcfffffff 0x8fffffff 0x2fffffff 0xafffffff 0x6fffffff 0xf1ffffff 0x11ffffff 0xd1ffffff 0x51ffffff 0x91ffffff 0x31ffffff 0xb1ffffff 0x71ffffff 0xf3ffffff 0xd3ffffff 0x13ffffff 0x53ffffff 0x33ffffff 0x93ffffff 0xb3ffffff 0x73ffffff 0xf5ffffff 0xd5ffffff 0x15ffffff 0x35ffffff 0x55ffffff 0x95ffffff 0xb5ffffff 0x75ffffff 0xf7ffffff 0xd7ffffff 0x17ffffff 0x37ffffff 0x57ffffff 0x97ffffff 0xb7ffffff 0x77ffffff 0xf9ffffff 0xd9ffffff 0x19ffffff 0x39ffffff 0x99ffffff 0x59ffffff 0xb9ffffff 0x79ffffff 0xfbffffff 0xdbffffff 0x1bffffff 0x9bffffff 0x3bffffff 0x5bffffff 0xbbffffff 0x7bffffff 0xfdffffff 0xddffffff 0x1dffffff 0x9dffffff 0x3dffffff 0x5dffffff 0xbdffffff 0x7dffffff 0xffffffff 0xdfffffff 0x1fffffff 0x9fffffff 0x3fffffff 0x5fffffff 0xbfffffff 0x7fffffff All 8 threads ended +FAIL +Ensure to add these bad seeds to the list of secrets in main.cpp + +*********FAIL********* + + diff --git a/doc/crc64_jones1.txt b/doc/crc64_jones1.txt new file mode 100644 index 00000000..730c0ba2 --- /dev/null +++ b/doc/crc64_jones1.txt @@ -0,0 +1,2079 @@ +------------------------------------------------------------------------------- +--- Testing crc64_jones1 "crc64, jones polynomial, standard fast software method from Mark Adler" POOR + +[[[ Sanity Tests ]]] + +Verification value 0x7DC1B496 ....... PASS +Running sanity check 1 .......... PASS +Running AppendedZeroesTest .......... PASS + +[[[ Speed Tests ]]] + +WARNING: timer resolution is 72 (0x48) ticks (0x13625708f670 - 0x13625708f628). Broken VDSO? +Bulk speed test - 262144-byte keys +Alignment 7 - 0.593 bytes/cycle - 1696.78 MiB/sec @ 3 ghz +Alignment 6 - 0.593 bytes/cycle - 1697.18 MiB/sec @ 3 ghz +Alignment 5 - 0.593 bytes/cycle - 1695.67 MiB/sec @ 3 ghz +Alignment 4 - 0.591 bytes/cycle - 1690.89 MiB/sec @ 3 ghz +Alignment 3 - 0.584 bytes/cycle - 1670.92 MiB/sec @ 3 ghz +Alignment 2 - 0.573 bytes/cycle - 1639.74 MiB/sec @ 3 ghz +Alignment 1 - 0.576 bytes/cycle - 1649.03 MiB/sec @ 3 ghz +Alignment 0 - 0.576 bytes/cycle - 1649.17 MiB/sec @ 3 ghz +Average - 0.585 bytes/cycle - 1673.67 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 33.41 cycles/hash +Small key speed test - 2-byte keys - 39.56 cycles/hash +Small key speed test - 3-byte keys - 47.95 cycles/hash +Small key speed test - 4-byte keys - 55.14 cycles/hash +Small key speed test - 5-byte keys - 61.96 cycles/hash +Small key speed test - 6-byte keys - 69.91 cycles/hash +Small key speed test - 7-byte keys - 77.24 cycles/hash +Small key speed test - 8-byte keys - 62.76 cycles/hash +Small key speed test - 9-byte keys - 68.74 cycles/hash +Small key speed test - 10-byte keys - 76.66 cycles/hash +Small key speed test - 11-byte keys - 83.89 cycles/hash +Small key speed test - 12-byte keys - 69.14 cycles/hash +Small key speed test - 13-byte keys - 76.56 cycles/hash +Small key speed test - 14-byte keys - 83.35 cycles/hash +Small key speed test - 15-byte keys - 91.08 cycles/hash +Small key speed test - 16-byte keys - 75.81 cycles/hash +Small key speed test - 17-byte keys - 83.44 cycles/hash +Small key speed test - 18-byte keys - 90.36 cycles/hash +Small key speed test - 19-byte keys - 97.78 cycles/hash +Small key speed test - 20-byte keys - 82.68 cycles/hash +Small key speed test - 21-byte keys - 89.89 cycles/hash +Small key speed test - 22-byte keys - 98.27 cycles/hash +Small key speed test - 23-byte keys - 105.20 cycles/hash +Small key speed test - 24-byte keys - 89.31 cycles/hash +Small key speed test - 25-byte keys - 96.65 cycles/hash +Small key speed test - 26-byte keys - 104.64 cycles/hash +Small key speed test - 27-byte keys - 111.70 cycles/hash +Small key speed test - 28-byte keys - 96.53 cycles/hash +Small key speed test - 29-byte keys - 103.32 cycles/hash +Small key speed test - 30-byte keys - 111.78 cycles/hash +Small key speed test - 31-byte keys - 118.18 cycles/hash +Small key speed test - 32-byte keys - 103.20 cycles/hash +Average 83.003 cycles/hash +Average, weighted by key length freq. 85.080 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 74.418 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) + +[[[ 'Hashmap' Speed Tests ]]] + +std::unordered_map +Init std HashMapTest: 462.206 cycles/op (104334 inserts, 1% deletions) +Running std HashMapTest: 364.366 cycles/op (3.4 stdv) + +greg7mdp/parallel-hashmap +Init fast HashMapTest: 293.221 cycles/op (104334 inserts, 1% deletions) +Running fast HashMapTest: 252.031 cycles/op (2.0 stdv) ....... PASS + +[[[ Avalanche Tests ]]] + +Testing 24-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +Testing 32-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 40-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 48-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 56-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 64-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 72-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 80-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 96-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 112-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 128-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 160-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 512-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 1024-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +*********FAIL********* + +[[[ Keyset 'Sparse' Tests ]]] + +Keyset 'Sparse' - 16-bit keys with up to 9 bits set - 50643 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (high 19-25 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (low 19-25 bits) - Worst is 25 bits: 19702/38 (515.80x) !!!!! +Testing distribution - Worst bias is the 13-bit window at bit 0 - 87.512% !!!!! + +Keyset 'Sparse' - 24-bit keys with up to 8 bits set - 1271626 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (high 24-35 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (low 24-35 bits) - Worst is 24 bits: 353795/46996 (7.53x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 0 - 89.254% !!!!! + +Keyset 'Sparse' - 32-bit keys with up to 7 bits set - 4514873 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2372.2, actual 0 (0.00x) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 225634/290569 (0.78x) +Testing collisions (low 32-bit) - Expected 2372.2, actual 1716 (0.72x) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 32949/18931 (1.74x) +Testing distribution - Worst bias is the 19-bit window at bit 63 - 48.502% !!!!! + +Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2460.8, actual 2770 (1.13x) (310) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 471339/301185 (1.56x) +Testing collisions (low 32-bit) - Expected 2460.8, actual 4578 (1.86x) (2118) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 62236/19637 (3.17x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 55 - 26.366% !!!!! + +Keyset 'Sparse' - 48-bit keys with up to 6 bits set - 14196869 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 23437.8, actual 86718 (3.70x) (63281) !!!!! +Testing collisions (high 27-42 bits) - Worst is 32 bits: 86718/23437 (3.70x) !!!!! +Testing collisions (low 32-bit) - Expected 23437.8, actual 10206 (0.44x) +Testing collisions (low 27-42 bits) - Worst is 28 bits: 439497/368886 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 49 - 8.182% !!!!! + +Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2069.0, actual 4550 (2.20x) (2482) !!!!! +Testing collisions (high 25-38 bits) - Worst is 31 bits: 9100/4136 (2.20x) !!!!! +Testing collisions (low 32-bit) - Expected 2069.0, actual 1008 (0.49x) +Testing collisions (low 25-38 bits) - Worst is 31 bits: 6188/4136 (1.50x) +Testing distribution - Worst bias is the 19-bit window at bit 60 - 4.589% !!!!! + +Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8021.7, actual 10388 (1.29x) (2367) +Testing collisions (high 26-40 bits) - Worst is 32 bits: 10388/8021 (1.29x) +Testing collisions (low 32-bit) - Expected 8021.7, actual 6460 (0.81x) +Testing collisions (low 26-40 bits) - Worst is 27 bits: 298840/251643 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 50 - 2.290% !!!!! + +Keyset 'Sparse' - 72-bit keys with up to 5 bits set - 15082603 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 26451.8, actual 21148 (0.80x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 797203/816575 (0.98x) +Testing collisions (low 32-bit) - Expected 26451.8, actual 34232 (1.29x) (7781) +Testing collisions (low 27-42 bits) - Worst is 35 bits: 6174/3309 (1.87x) +Testing distribution - Worst bias is the 20-bit window at bit 24 - 1.509% !!!!! + +Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1401.0, actual 1435 (1.02x) (35) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 70/21 (3.20x) !!!!! +Testing collisions (low 32-bit) - Expected 1401.0, actual 840 (0.60x) +Testing collisions (low 25-38 bits) - Worst is 27 bits: 50326/44458 (1.13x) +Testing distribution - Worst bias is the 19-bit window at bit 29 - 2.053% !!!!! + +Keyset 'Sparse' - 160-bit keys with up to 4 bits set - 26977161 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 84546.1, actual 82294 (0.97x) +Testing collisions (high 28-44 bits) - Worst is 43 bits: 105/41 (2.54x) !!!!! +Testing collisions (low 32-bit) - Expected 84546.1, actual 92626 (1.10x) (8080) +Testing collisions (low 28-44 bits) - Worst is 43 bits: 140/41 (3.38x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 0.407% + +Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 910.2, actual 1110 (1.22x) (200) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 610/455 (1.34x) +Testing collisions (low 32-bit) - Expected 910.2, actual 1279 (1.41x) (369) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 70/28 (2.46x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 45 - 0.363% + +Keyset 'Sparse' - 512-bit keys with up to 3 bits set - 22370049 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 58155.4, actual 58555 (1.01x) (400) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 80/28 (2.81x) !!!!! +Testing collisions (low 32-bit) - Expected 58155.4, actual 58907 (1.01x) (752) +Testing collisions (low 28-43 bits) - Worst is 42 bits: 90/56 (1.58x) +Testing distribution - Worst bias is the 20-bit window at bit 42 - 0.108% + +Keyset 'Sparse' - 1024-bit keys with up to 2 bits set - 524801 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (high 22-32 bits) - Worst is 22 bits: 31328/31504 (0.99x) +Testing collisions (low 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (low 22-32 bits) - Worst is 22 bits: 31137/31504 (0.99x) +Testing distribution - Worst bias is the 16-bit window at bit 31 - 0.592% + +Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 512.4, actual 513 (1.00x) (1) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 51/32 (1.59x) +Testing collisions (low 32-bit) - Expected 512.4, actual 570 (1.11x) (58) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 60/32 (1.87x) +Testing distribution - Worst bias is the 18-bit window at bit 29 - 0.264% + +*********FAIL********* + +[[[ Keyset 'Permutation' Tests ]]] + +Combination Lowbits Tests: +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 33 - 74.318% !!!!! + +*********FAIL********* + +Combination Highbits Tests +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 59 - 50.100% !!!!! + +*********FAIL********* + +Combination Hi-Lo Tests: +Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 813615 (201533487953.56x) (813615) !!!!! +Testing collisions (high 32-bit) - Expected 17322.9, actual 822958 (47.51x) (805636) !!!!! +Testing collisions (high 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing collisions (low 32-bit) - Expected 17322.9, actual 817759 (47.21x) (800437) !!!!! +Testing collisions (low 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 36 - 6.110% !!!!! + +*********FAIL********* + +Combination 0x80000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 38 - 58.033% !!!!! + +*********FAIL********* + +Combination 0x00000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 47 - 74.395% !!!!! + +*********FAIL********* + +Combination 0x8000000000000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 1 - 74.666% !!!!! + +*********FAIL********* + +Combination 0x0000000000000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 37 - 74.784% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 50.698% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 34 - 51.902% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 31 - 63.227% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 74.245% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 58.340% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 52 - 52.995% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 14 - 51.561% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 45 - 50.195% !!!!! + +*********FAIL********* + +[[[ Keyset 'Window' Tests ]]] + +Keyset 'Window' - 32-bit key, 25-bit window - 32 tests, 33554432 keys per test +Window at 0 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 1 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 2 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 3 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 4 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 5 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 6 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 7 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 8 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 9 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 10 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 11 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 12 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 13 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 14 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 15 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 16 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 17 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 18 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 19 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 20 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 21 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 22 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 23 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 24 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 25 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 26 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 27 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 28 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 29 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 30 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 31 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 32 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) + +[[[ Keyset 'Cyclic' Tests ]]] + +Keyset 'Cyclic' - 8 cycles of 8 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 103 (0.88x) +Testing collisions (high 23-34 bits) - Worst is 24 bits: 29243/29218 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 70/58 (1.20x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.109% + +Keyset 'Cyclic' - 8 cycles of 9 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (high 23-34 bits) - Worst is 33 bits: 66/58 (1.13x) +Testing collisions (low 32-bit) - Expected 116.4, actual 118 (1.01x) (2) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 492/465 (1.06x) +Testing distribution - Worst bias is the 17-bit window at bit 52 - 0.085% + +Keyset 'Cyclic' - 8 cycles of 10 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 27 bits: 3766/3716 (1.01x) +Testing collisions (low 32-bit) - Expected 116.4, actual 106 (0.91x) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 472/465 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.079% + +Keyset 'Cyclic' - 8 cycles of 11 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 115 (0.99x) (-1) +Testing collisions (high 23-34 bits) - Worst is 25 bits: 15081/14754 (1.02x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 62/58 (1.07x) +Testing distribution - Worst bias is the 17-bit window at bit 39 - 0.142% + +Keyset 'Cyclic' - 8 cycles of 12 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 26 bits: 7435/7413 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 105 (0.90x) +Testing collisions (low 23-34 bits) - Worst is 26 bits: 7475/7413 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 8 - 0.094% + +Keyset 'Cyclic' - 8 cycles of 16 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 117 (1.01x) (1) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 32 bits: 120/116 (1.03x) +Testing distribution - Worst bias is the 16-bit window at bit 7 - 0.114% + + +[[[ Keyset 'TwoBytes' Tests ]]] + +Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 261375 (22646103971038.65x) (261375) !!!!! +Testing collisions (high 32-bit) - Expected 49.6, actual 261375 (5272.97x) (261326) !!!!! +Testing collisions (high 23-33 bits) - Worst is 33 bits: 261375/24 (10545.68x) !!!!! +Testing collisions (low 32-bit) - Expected 49.6, actual 261378 (5273.03x) (261329) !!!!! +Testing collisions (low 23-33 bits) - Worst is 33 bits: 261378/24 (10545.80x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 0 - 87.354% !!!!! + +Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 3648285 (4496774986619.34x) (3648285) !!!!! +Testing collisions (high 32-bit) - Expected 3483.1, actual 3650943 (1048.19x) (3647460) !!!!! +Testing collisions (high 26-39 bits) - Worst is 39 bits: 3648306/27 (134015.55x) !!!!! +Testing collisions (low 32-bit) - Expected 3483.1, actual 3648528 (1047.50x) (3645045) !!!!! +Testing collisions (low 26-39 bits) - Worst is 39 bits: 3648285/27 (134014.78x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 88.627% !!!!! + +Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 14322075 (1524566310736.38x) (14322075) !!!!! +Testing collisions (high 32-bit) - Expected 40289.5, actual 14326031 (355.58x) (14285742) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing collisions (low 32-bit) - Expected 40289.5, actual 14324456 (355.54x) (14284167) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 64.751% !!!!! + +Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 36444345 (686634081469.61x) (36444345) !!!!! +Testing collisions (high 32-bit) - Expected 227182.3, actual 36453640 (160.46x) (36226458) !!!!! +Testing collisions (high 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing collisions (low 32-bit) - Expected 227182.3, actual 36451340 (160.45x) (36224158) !!!!! +Testing collisions (low 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 40.372% !!!!! + +Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 74176695 (365441696655.85x) (74176695) !!!!! +Testing collisions (high 32-bit) - Expected 865959.1, actual 74196456 (85.68x) (73330497) !!!!! +Testing collisions (high 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing collisions (low 32-bit) - Expected 865959.1, actual 74193744 (85.68x) (73327785) !!!!! +Testing collisions (low 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 24.319% !!!!! + +*********FAIL********* + +[[[ Keyset 'Text' Tests ]]] + +Keyset 'Text' - keys of form "FooXXXXBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 29 bits: 940540/201492 (4.67x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 88000 (3.47x) (62611) !!!!! +Testing collisions (low 27-42 bits) - Worst is 32 bits: 88000/25389 (3.47x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 63 - 31.683% !!!!! + +Keyset 'Text' - keys of form "FooBarXXXX" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 532272/784335 (0.68x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 29 bits: 929280/201492 (4.61x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 52.279% !!!!! + +Keyset 'Text' - keys of form "XXXXFooBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 28 bits: 1408000/399329 (3.53x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 27 bits: 80000/784335 (0.10x) +Testing distribution - Worst bias is the 20-bit window at bit 61 - 24.026% !!!!! + +Keyset 'Words' - 4000000 random keys of len 6-16 from alnum charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1802 (0.97x) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 35/29 (1.20x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1897 (1.02x) (35) +Testing collisions (low 25-38 bits) - Worst is 33 bits: 962/931 (1.03x) +Testing distribution - Worst bias is the 19-bit window at bit 59 - 0.057% + +Keyset 'Words' - 4000000 random keys of len 6-16 from password charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1872 (1.01x) (10) +Testing collisions (high 25-38 bits) - Worst is 33 bits: 949/931 (1.02x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1907 (1.02x) (45) +Testing collisions (low 25-38 bits) - Worst is 34 bits: 483/465 (1.04x) +Testing distribution - Worst bias is the 19-bit window at bit 10 - 0.052% + +Keyset 'Words' - 104334 dict words +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (high 20-28 bits) - Worst is 22 bits: 1303/1286 (1.01x) +Testing collisions (low 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (low 20-28 bits) - Worst is 28 bits: 23/20 (1.13x) +Testing distribution - Worst bias is the 14-bit window at bit 62 - 0.676% + +*********FAIL********* + +[[[ Keyset 'Zeroes' Tests ]]] + +Keyset 'Zeroes' - 204800 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 204799 (180143985094819.84x) (204799) !!!!! +Testing collisions (high 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (high 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing collisions (low 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (low 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing distribution - Worst bias is the 15-bit window at bit 0 - 99.997% !!!!! + +*********FAIL********* + +[[[ Keyset 'Seed' Tests ]]] + +Keyset 'Seed' - 5000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (high 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (low 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing distribution - Worst bias is the 19-bit window at bit 49 - 64.465% !!!!! + +*********FAIL********* + +[[[ Keyset 'PerlinNoise' Tests ]]] + +Testing 16777216 coordinates (L2) : +Testing collisions ( 64-bit) - Expected 0.0, actual 16773120 (2198486515680.01x) (16773120) !!!!! +Testing collisions (high 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! +Testing collisions (low 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! + +Testing AV variant, 128 count with 4 spacing, 4-12: +Testing collisions ( 64-bit) - Expected 0.0, actual 796431 (3063942940256.29x) (796431) +Testing collisions (high 32-bit) - Expected 1116.2, actual 797014 (714.07x) (795898) !!!!! +Testing collisions (high 25-37 bits) - Worst is 37 bits: 796449/34 (22828.84x) !!!!! +Testing collisions (low 32-bit) - Expected 1116.2, actual 797035 (714.09x) (795919) !!!!! +Testing collisions (low 25-37 bits) - Worst is 37 bits: 796463/34 (22829.24x) !!!!! + +*********FAIL********* + +[[[ Diff 'Differential' Tests ]]] + +Testing 8303632 up-to-5-bit differentials in 64-bit keys -> 64 bit hashes. +1000 reps, 8303632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 11017632 up-to-4-bit differentials in 128-bit keys -> 64 bit hashes. +1000 reps, 11017632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 2796416 up-to-3-bit differentials in 256-bit keys -> 64 bit hashes. +1000 reps, 2796416000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + + +[[[ DiffDist 'Differential Distribution' Tests ]]] + +Testing bit 0 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 1 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 2 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 3 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 4 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 5 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 6 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 7 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 8 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 9 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 10 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 11 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 12 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 13 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 14 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 15 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 16 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 17 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 18 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 19 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 20 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 21 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 22 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 23 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 24 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 25 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 26 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 27 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 28 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 29 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 30 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 31 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 32 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 33 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 34 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 35 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 36 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 37 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 38 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 39 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 40 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 41 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 42 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 43 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 44 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 45 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 46 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 47 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 48 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 49 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 50 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 51 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 52 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 53 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 54 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 55 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 56 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 57 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 58 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 59 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 60 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 61 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 62 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 63 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +*********FAIL********* + +[[[ MomentChi2 Tests ]]] + +Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 2 ... +Target values to approximate : 38918200.000000 - 273633.333333 +8 threads starting... done +Popcount 1 stats : 38918912.000000 - 273643.176129 +Popcount 0 stats : 38918912.000000 - 273643.178030 +MomentChi2 for bits 1 : 0.926303 +MomentChi2 for bits 0 : 0.926303 + +Derivative stats (transition from 2 consecutive values) : +Popcount 1 stats : 42600335.340257 - 233974.301184 +Popcount 0 stats : 32312867.472151 - 105358.370683 +MomentChi2 for deriv b1 : 2.67098e+07 +MomentChi2 for deriv b0 : 1.15122e+08 + + FAIL !!!! + + +*********FAIL********* + +[[[ Prng Tests ]]] + +Generating 33554432 random numbers : +Testing collisions ( 64-bit) - Expected 0.0, actual 33554431 (1099511627776.00x) (33554431) !!!!! +Testing collisions (high 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (high 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! +Testing collisions (low 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (low 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! + +*********FAIL********* + +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS + + +Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001 +Verification value is 0x00000001 - Testing took 1485.944470 seconds +------------------------------------------------------------------------------- +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS +Testing the first 0xffffffff seeds ... +8 threads starting... +at 0 +Broken seed 0x00000000 => 0 with key[16] of all 0 bytes +at 20000000 at 40000000 at 60000000 at 80000000 at a0000000 at c0000000 at e0000000 0x81ffffff 0x41ffffff 0xc1ffffff 0x21ffffff 0x01ffffff 0xa1ffffff 0xe1ffffff 0x61ffffff 0x83ffffff 0xa3ffffff 0x03ffffff 0x23ffffff 0x43ffffff 0xc3ffffff 0xe3ffffff 0x63ffffff 0x85ffffff 0xa5ffffff 0x05ffffff 0x45ffffff 0xc5ffffff 0x25ffffff 0x65ffffff 0xe5ffffff 0x47ffffff 0x87ffffff 0xa7ffffff 0x07ffffff 0xc7ffffff 0x67ffffff 0x27ffffff 0xe7ffffff 0x49ffffff 0xa9ffffff 0x69ffffff 0x09ffffff 0xc9ffffff 0x89ffffff 0x29ffffff 0xe9ffffff 0x4bffffff 0xabffffff 0x6bffffff 0xcbffffff 0x8bffffff 0x0bffffff 0xebffffff 0x2bffffff 0x4dffffff 0x6dffffff 0xcdffffff 0xadffffff 0x0dffffff 0x8dffffff 0xedffffff 0x2dffffff 0x4fffffff 0xcfffffff 0x6fffffff 0xafffffff 0x0fffffff 0x8fffffff 0xefffffff 0x2fffffff 0x51ffffff 0xd1ffffff 0xb1ffffff 0x71ffffff 0x11ffffff 0x91ffffff 0xf1ffffff 0x31ffffff 0x53ffffff 0x73ffffff 0xb3ffffff 0xd3ffffff 0x13ffffff 0x93ffffff 0xf3ffffff 0x33ffffff 0x55ffffff 0x15ffffff 0xb5ffffff 0xd5ffffff 0x75ffffff 0x95ffffff 0xf5ffffff 0x35ffffff 0x57ffffff 0xd7ffffff 0x17ffffff 0xb7ffffff 0x77ffffff 0x97ffffff 0xf7ffffff 0x37ffffff 0xd9ffffff 0x19ffffff 0x59ffffff 0x99ffffff 0x79ffffff 0xb9ffffff 0xf9ffffff 0x39ffffff 0x1bffffff 0xdbffffff 0x5bffffff 0x7bffffff 0x9bffffff 0xbbffffff 0xfbffffff 0x3bffffff 0xddffffff 0x7dffffff 0x1dffffff 0x5dffffff 0x9dffffff 0xfdffffff 0xbdffffff 0x3dffffff 0x1fffffff 0x7fffffff 0x5fffffff 0xdfffffff 0x9fffffff 0xffffffff 0xbfffffff 0x3fffffff All 8 threads ended +FAIL +Ensure to add these bad seeds to the list of secrets in main.cpp + +*********FAIL********* + + diff --git a/doc/crc64_jones2.txt b/doc/crc64_jones2.txt new file mode 100644 index 00000000..a34eb2a7 --- /dev/null +++ b/doc/crc64_jones2.txt @@ -0,0 +1,2073 @@ +------------------------------------------------------------------------------- +--- Testing crc64_jones2 "crc64, jones polynomial, 2 pipelines in 1 thread, joined at the end" POOR + +[[[ Sanity Tests ]]] + +Verification value 0x7DC1B496 ....... PASS +Running sanity check 1 .......... PASS +Running AppendedZeroesTest .......... PASS + +[[[ Speed Tests ]]] + +WARNING: timer resolution is 108 (0x6c) ticks (0x13743ef5d07c - 0x13743ef5d010). Broken VDSO? +Bulk speed test - 262144-byte keys +Alignment 7 - 1.034 bytes/cycle - 2959.44 MiB/sec @ 3 ghz +Alignment 6 - 1.034 bytes/cycle - 2958.81 MiB/sec @ 3 ghz +Alignment 5 - 1.034 bytes/cycle - 2958.30 MiB/sec @ 3 ghz +Alignment 4 - 1.034 bytes/cycle - 2959.21 MiB/sec @ 3 ghz +Alignment 3 - 1.034 bytes/cycle - 2957.55 MiB/sec @ 3 ghz +Alignment 2 - 1.034 bytes/cycle - 2958.22 MiB/sec @ 3 ghz +Alignment 1 - 1.034 bytes/cycle - 2958.72 MiB/sec @ 3 ghz +Alignment 0 - 1.061 bytes/cycle - 3034.34 MiB/sec @ 3 ghz +Average - 1.037 bytes/cycle - 2968.07 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 31.90 cycles/hash +Small key speed test - 2-byte keys - 42.08 cycles/hash +Small key speed test - 3-byte keys - 48.83 cycles/hash +Small key speed test - 4-byte keys - 55.88 cycles/hash +Small key speed test - 5-byte keys - 62.97 cycles/hash +Small key speed test - 6-byte keys - 70.32 cycles/hash +Small key speed test - 7-byte keys - 77.60 cycles/hash +Small key speed test - 8-byte keys - 63.10 cycles/hash +Small key speed test - 9-byte keys - 69.32 cycles/hash +Small key speed test - 10-byte keys - 76.10 cycles/hash +Small key speed test - 11-byte keys - 83.57 cycles/hash +Small key speed test - 12-byte keys - 68.91 cycles/hash +Small key speed test - 13-byte keys - 76.40 cycles/hash +Small key speed test - 14-byte keys - 82.67 cycles/hash +Small key speed test - 15-byte keys - 90.26 cycles/hash +Small key speed test - 16-byte keys - 316.12 cycles/hash +Small key speed test - 17-byte keys - 337.84 cycles/hash +Small key speed test - 18-byte keys - 379.26 cycles/hash +Small key speed test - 19-byte keys - 343.58 cycles/hash +Small key speed test - 20-byte keys - 582.23 cycles/hash +Small key speed test - 21-byte keys - 585.14 cycles/hash +Small key speed test - 22-byte keys - 588.74 cycles/hash +Small key speed test - 23-byte keys - 594.11 cycles/hash +Small key speed test - 24-byte keys - 586.81 cycles/hash +Small key speed test - 25-byte keys - 592.00 cycles/hash +Small key speed test - 26-byte keys - 599.53 cycles/hash +Small key speed test - 27-byte keys - 607.34 cycles/hash +Small key speed test - 28-byte keys - 586.43 cycles/hash +Small key speed test - 29-byte keys - 586.87 cycles/hash +Small key speed test - 30-byte keys - 592.13 cycles/hash +Small key speed test - 31-byte keys - 597.46 cycles/hash +Small key speed test - 32-byte keys - 591.70 cycles/hash +Average 314.600 cycles/hash +Average, weighted by key length freq. 278.350 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 174.045 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) + +[[[ 'Hashmap' Speed Tests ]]] + +std::unordered_map +Init std HashMapTest: 468.595 cycles/op (104334 inserts, 1% deletions) +Running std HashMapTest: 374.276 cycles/op (3.9 stdv) + +greg7mdp/parallel-hashmap +Init fast HashMapTest: 295.358 cycles/op (104334 inserts, 1% deletions) +Running fast HashMapTest: 255.131 cycles/op (2.7 stdv) ....... PASS + +[[[ Avalanche Tests ]]] + +Testing 24-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +Testing 32-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 40-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 48-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 56-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 64-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 72-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 80-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 96-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 112-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 128-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 160-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 512-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 1024-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +*********FAIL********* + +[[[ Keyset 'Sparse' Tests ]]] + +Keyset 'Sparse' - 16-bit keys with up to 9 bits set - 50643 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (high 19-25 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (low 19-25 bits) - Worst is 25 bits: 19702/38 (515.80x) !!!!! +Testing distribution - Worst bias is the 13-bit window at bit 0 - 87.512% !!!!! + +Keyset 'Sparse' - 24-bit keys with up to 8 bits set - 1271626 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (high 24-35 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (low 24-35 bits) - Worst is 24 bits: 353795/46996 (7.53x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 0 - 89.254% !!!!! + +Keyset 'Sparse' - 32-bit keys with up to 7 bits set - 4514873 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2372.2, actual 0 (0.00x) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 225634/290569 (0.78x) +Testing collisions (low 32-bit) - Expected 2372.2, actual 1716 (0.72x) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 32949/18931 (1.74x) +Testing distribution - Worst bias is the 19-bit window at bit 63 - 48.502% !!!!! + +Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2460.8, actual 2770 (1.13x) (310) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 471339/301185 (1.56x) +Testing collisions (low 32-bit) - Expected 2460.8, actual 4578 (1.86x) (2118) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 62236/19637 (3.17x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 55 - 26.366% !!!!! + +Keyset 'Sparse' - 48-bit keys with up to 6 bits set - 14196869 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 23437.8, actual 86718 (3.70x) (63281) !!!!! +Testing collisions (high 27-42 bits) - Worst is 32 bits: 86718/23437 (3.70x) !!!!! +Testing collisions (low 32-bit) - Expected 23437.8, actual 10206 (0.44x) +Testing collisions (low 27-42 bits) - Worst is 28 bits: 439497/368886 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 49 - 8.182% !!!!! + +Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2069.0, actual 4550 (2.20x) (2482) !!!!! +Testing collisions (high 25-38 bits) - Worst is 31 bits: 9100/4136 (2.20x) !!!!! +Testing collisions (low 32-bit) - Expected 2069.0, actual 1008 (0.49x) +Testing collisions (low 25-38 bits) - Worst is 31 bits: 6188/4136 (1.50x) +Testing distribution - Worst bias is the 19-bit window at bit 60 - 4.589% !!!!! + +Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8021.7, actual 10388 (1.29x) (2367) +Testing collisions (high 26-40 bits) - Worst is 32 bits: 10388/8021 (1.29x) +Testing collisions (low 32-bit) - Expected 8021.7, actual 6460 (0.81x) +Testing collisions (low 26-40 bits) - Worst is 27 bits: 298840/251643 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 50 - 2.290% !!!!! + +Keyset 'Sparse' - 72-bit keys with up to 5 bits set - 15082603 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 26451.8, actual 21148 (0.80x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 797203/816575 (0.98x) +Testing collisions (low 32-bit) - Expected 26451.8, actual 34232 (1.29x) (7781) +Testing collisions (low 27-42 bits) - Worst is 35 bits: 6174/3309 (1.87x) +Testing distribution - Worst bias is the 20-bit window at bit 24 - 1.509% !!!!! + +Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1401.0, actual 1435 (1.02x) (35) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 70/21 (3.20x) !!!!! +Testing collisions (low 32-bit) - Expected 1401.0, actual 840 (0.60x) +Testing collisions (low 25-38 bits) - Worst is 27 bits: 50326/44458 (1.13x) +Testing distribution - Worst bias is the 19-bit window at bit 29 - 2.053% !!!!! + +Keyset 'Sparse' - 160-bit keys with up to 4 bits set - 26977161 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 84546.1, actual 82294 (0.97x) +Testing collisions (high 28-44 bits) - Worst is 43 bits: 105/41 (2.54x) !!!!! +Testing collisions (low 32-bit) - Expected 84546.1, actual 92626 (1.10x) (8080) +Testing collisions (low 28-44 bits) - Worst is 43 bits: 140/41 (3.38x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 0.407% + +Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 910.2, actual 1110 (1.22x) (200) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 610/455 (1.34x) +Testing collisions (low 32-bit) - Expected 910.2, actual 1279 (1.41x) (369) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 70/28 (2.46x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 45 - 0.363% + +Keyset 'Sparse' - 512-bit keys with up to 3 bits set - 22370049 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 58155.4, actual 58555 (1.01x) (400) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 80/28 (2.81x) !!!!! +Testing collisions (low 32-bit) - Expected 58155.4, actual 58907 (1.01x) (752) +Testing collisions (low 28-43 bits) - Worst is 42 bits: 90/56 (1.58x) +Testing distribution - Worst bias is the 20-bit window at bit 42 - 0.108% + +Keyset 'Sparse' - 1024-bit keys with up to 2 bits set - 524801 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (high 22-32 bits) - Worst is 22 bits: 31328/31504 (0.99x) +Testing collisions (low 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (low 22-32 bits) - Worst is 22 bits: 31137/31504 (0.99x) +Testing distribution - Worst bias is the 16-bit window at bit 31 - 0.592% + +Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 512.4, actual 513 (1.00x) (1) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 51/32 (1.59x) +Testing collisions (low 32-bit) - Expected 512.4, actual 570 (1.11x) (58) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 60/32 (1.87x) +Testing distribution - Worst bias is the 18-bit window at bit 29 - 0.264% + +*********FAIL********* + +[[[ Keyset 'Permutation' Tests ]]] + +Combination Lowbits Tests: +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 33 - 74.318% !!!!! + +*********FAIL********* + +Combination Highbits Tests +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 59 - 50.100% !!!!! + +*********FAIL********* + +Combination Hi-Lo Tests: +Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 813615 (201533487953.56x) (813615) !!!!! +Testing collisions (high 32-bit) - Expected 17322.9, actual 822958 (47.51x) (805636) !!!!! +Testing collisions (high 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing collisions (low 32-bit) - Expected 17322.9, actual 817759 (47.21x) (800437) !!!!! +Testing collisions (low 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 36 - 6.110% !!!!! + +*********FAIL********* + +Combination 0x80000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 38 - 58.033% !!!!! + +*********FAIL********* + +Combination 0x00000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 47 - 74.395% !!!!! + +*********FAIL********* + +Combination 0x8000000000000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 1 - 74.666% !!!!! + +*********FAIL********* + +Combination 0x0000000000000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 37 - 74.784% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 50.698% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 34 - 51.902% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 31 - 63.227% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 74.245% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 58.340% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 52 - 52.995% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 14 - 51.561% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 45 - 50.195% !!!!! + +*********FAIL********* + +[[[ Keyset 'Window' Tests ]]] + +Keyset 'Window' - 32-bit key, 25-bit window - 32 tests, 33554432 keys per test +Window at 0 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 1 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 2 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 3 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 4 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 5 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 6 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 7 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 8 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 9 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 10 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 11 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 12 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 13 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 14 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 15 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 16 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 17 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 18 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 19 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 20 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 21 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 22 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 23 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 24 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 25 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 26 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 27 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 28 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 29 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 30 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 31 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 32 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) + +[[[ Keyset 'Cyclic' Tests ]]] + +Keyset 'Cyclic' - 8 cycles of 8 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 103 (0.88x) +Testing collisions (high 23-34 bits) - Worst is 24 bits: 29243/29218 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 70/58 (1.20x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.109% + +Keyset 'Cyclic' - 8 cycles of 9 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (high 23-34 bits) - Worst is 33 bits: 66/58 (1.13x) +Testing collisions (low 32-bit) - Expected 116.4, actual 118 (1.01x) (2) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 492/465 (1.06x) +Testing distribution - Worst bias is the 17-bit window at bit 52 - 0.085% + +Keyset 'Cyclic' - 8 cycles of 10 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 27 bits: 3766/3716 (1.01x) +Testing collisions (low 32-bit) - Expected 116.4, actual 106 (0.91x) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 472/465 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.079% + +Keyset 'Cyclic' - 8 cycles of 11 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 115 (0.99x) (-1) +Testing collisions (high 23-34 bits) - Worst is 25 bits: 15081/14754 (1.02x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 62/58 (1.07x) +Testing distribution - Worst bias is the 17-bit window at bit 39 - 0.142% + +Keyset 'Cyclic' - 8 cycles of 12 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 26 bits: 7435/7413 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 105 (0.90x) +Testing collisions (low 23-34 bits) - Worst is 26 bits: 7475/7413 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 8 - 0.094% + +Keyset 'Cyclic' - 8 cycles of 16 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 117 (1.01x) (1) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 32 bits: 120/116 (1.03x) +Testing distribution - Worst bias is the 16-bit window at bit 7 - 0.114% + + +[[[ Keyset 'TwoBytes' Tests ]]] + +Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 261375 (22646103971038.65x) (261375) !!!!! +Testing collisions (high 32-bit) - Expected 49.6, actual 261375 (5272.97x) (261326) !!!!! +Testing collisions (high 23-33 bits) - Worst is 33 bits: 261375/24 (10545.68x) !!!!! +Testing collisions (low 32-bit) - Expected 49.6, actual 261378 (5273.03x) (261329) !!!!! +Testing collisions (low 23-33 bits) - Worst is 33 bits: 261378/24 (10545.80x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 0 - 87.354% !!!!! + +Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 3648285 (4496774986619.34x) (3648285) !!!!! +Testing collisions (high 32-bit) - Expected 3483.1, actual 3650943 (1048.19x) (3647460) !!!!! +Testing collisions (high 26-39 bits) - Worst is 39 bits: 3648306/27 (134015.55x) !!!!! +Testing collisions (low 32-bit) - Expected 3483.1, actual 3648528 (1047.50x) (3645045) !!!!! +Testing collisions (low 26-39 bits) - Worst is 39 bits: 3648285/27 (134014.78x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 88.627% !!!!! + +Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 14322075 (1524566310736.38x) (14322075) !!!!! +Testing collisions (high 32-bit) - Expected 40289.5, actual 14326031 (355.58x) (14285742) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing collisions (low 32-bit) - Expected 40289.5, actual 14324456 (355.54x) (14284167) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 64.751% !!!!! + +Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 36444345 (686634081469.61x) (36444345) !!!!! +Testing collisions (high 32-bit) - Expected 227182.3, actual 36453640 (160.46x) (36226458) !!!!! +Testing collisions (high 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing collisions (low 32-bit) - Expected 227182.3, actual 36451340 (160.45x) (36224158) !!!!! +Testing collisions (low 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 40.372% !!!!! + +Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 74176695 (365441696655.85x) (74176695) !!!!! +Testing collisions (high 32-bit) - Expected 865959.1, actual 74196456 (85.68x) (73330497) !!!!! +Testing collisions (high 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing collisions (low 32-bit) - Expected 865959.1, actual 74193744 (85.68x) (73327785) !!!!! +Testing collisions (low 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 24.319% !!!!! + +*********FAIL********* + +[[[ Keyset 'Text' Tests ]]] + +Keyset 'Text' - keys of form "FooXXXXBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 29 bits: 940540/201492 (4.67x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 88000 (3.47x) (62611) !!!!! +Testing collisions (low 27-42 bits) - Worst is 32 bits: 88000/25389 (3.47x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 63 - 31.683% !!!!! + +Keyset 'Text' - keys of form "FooBarXXXX" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 532272/784335 (0.68x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 29 bits: 929280/201492 (4.61x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 52.279% !!!!! + +Keyset 'Text' - keys of form "XXXXFooBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 28 bits: 1408000/399329 (3.53x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 27 bits: 80000/784335 (0.10x) +Testing distribution - Worst bias is the 20-bit window at bit 61 - 24.026% !!!!! + +Keyset 'Words' - 4000000 random keys of len 6-16 from alnum charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1802 (0.97x) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 35/29 (1.20x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1897 (1.02x) (35) +Testing collisions (low 25-38 bits) - Worst is 33 bits: 962/931 (1.03x) +Testing distribution - Worst bias is the 19-bit window at bit 59 - 0.057% + +Keyset 'Words' - 4000000 random keys of len 6-16 from password charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1872 (1.01x) (10) +Testing collisions (high 25-38 bits) - Worst is 33 bits: 949/931 (1.02x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1907 (1.02x) (45) +Testing collisions (low 25-38 bits) - Worst is 34 bits: 483/465 (1.04x) +Testing distribution - Worst bias is the 19-bit window at bit 10 - 0.052% + +Keyset 'Words' - 104334 dict words +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (high 20-28 bits) - Worst is 22 bits: 1303/1286 (1.01x) +Testing collisions (low 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (low 20-28 bits) - Worst is 28 bits: 23/20 (1.13x) +Testing distribution - Worst bias is the 14-bit window at bit 62 - 0.676% + +*********FAIL********* + +[[[ Keyset 'Zeroes' Tests ]]] + +Keyset 'Zeroes' - 204800 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 204799 (180143985094819.84x) (204799) !!!!! +Testing collisions (high 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (high 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing collisions (low 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (low 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing distribution - Worst bias is the 15-bit window at bit 0 - 99.997% !!!!! + +*********FAIL********* + +[[[ Keyset 'Seed' Tests ]]] + +Keyset 'Seed' - 5000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (high 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (low 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing distribution - Worst bias is the 19-bit window at bit 49 - 64.465% !!!!! + +*********FAIL********* + +[[[ Keyset 'PerlinNoise' Tests ]]] + +Testing 16777216 coordinates (L2) : +Testing collisions ( 64-bit) - Expected 0.0, actual 16773120 (2198486515680.01x) (16773120) !!!!! +Testing collisions (high 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! +Testing collisions (low 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! + +Testing AV variant, 128 count with 4 spacing, 4-12: +Testing collisions ( 64-bit) - Expected 0.0, actual 796431 (3063942940256.29x) (796431) +Testing collisions (high 32-bit) - Expected 1116.2, actual 797014 (714.07x) (795898) !!!!! +Testing collisions (high 25-37 bits) - Worst is 37 bits: 796449/34 (22828.84x) !!!!! +Testing collisions (low 32-bit) - Expected 1116.2, actual 797035 (714.09x) (795919) !!!!! +Testing collisions (low 25-37 bits) - Worst is 37 bits: 796463/34 (22829.24x) !!!!! + +*********FAIL********* + +[[[ Diff 'Differential' Tests ]]] + +Testing 8303632 up-to-5-bit differentials in 64-bit keys -> 64 bit hashes. +1000 reps, 8303632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 11017632 up-to-4-bit differentials in 128-bit keys -> 64 bit hashes. +1000 reps, 11017632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 2796416 up-to-3-bit differentials in 256-bit keys -> 64 bit hashes. +1000 reps, 2796416000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + + +[[[ DiffDist 'Differential Distribution' Tests ]]] + +Testing bit 0 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 1 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 2 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 3 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 4 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 5 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 6 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 7 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 8 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 9 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 10 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 11 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 12 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 13 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 14 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 15 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 16 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 17 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 18 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 19 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 20 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 21 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 22 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 23 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 24 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 25 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 26 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 27 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 28 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 29 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 30 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 31 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 32 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 33 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 34 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 35 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 36 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 37 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 38 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 39 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 40 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 41 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 42 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 43 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 44 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 45 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 46 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 47 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 48 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 49 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 50 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 51 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 52 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 53 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 54 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 55 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 56 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 57 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 58 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 59 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 60 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 61 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 62 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 63 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +*********FAIL********* + +[[[ MomentChi2 Tests ]]] + +Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 2 ... +Target values to approximate : 38918200.000000 - 273633.333333 +8 threads starting... done +Popcount 1 stats : 38918912.000000 - 273643.176129 +Popcount 0 stats : 38918912.000000 - 273643.178030 +MomentChi2 for bits 1 : 0.926303 +MomentChi2 for bits 0 : 0.926303 + +Derivative stats (transition from 2 consecutive values) : +Popcount 1 stats : 42600335.340257 - 233974.301184 +Popcount 0 stats : 32312867.472151 - 105358.370683 +MomentChi2 for deriv b1 : 2.67098e+07 +MomentChi2 for deriv b0 : 1.15122e+08 + + FAIL !!!! + + +*********FAIL********* + +[[[ Prng Tests ]]] + +Generating 33554432 random numbers : +Testing collisions ( 64-bit) - Expected 0.0, actual 33554431 (1099511627776.00x) (33554431) !!!!! +Testing collisions (high 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (high 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! +Testing collisions (low 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (low 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! + +*********FAIL********* + +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS + + +Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001 +Verification value is 0x00000001 - Testing took 2227.450501 seconds +------------------------------------------------------------------------------- +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS +Testing the first 0xffffffff seeds ... +8 threads starting... +at 20000000 at 0 +Broken seed 0x00000000 => 0 with key[16] of all 0 bytes +at 40000000 at 60000000 at 80000000 at a0000000 at e0000000 at c0000000 0xc1ffffff 0x41ffffff 0x01ffffff 0x61ffffff 0xa1ffffff 0x81ffffff 0xe1ffffff 0x21ffffff 0x03ffffff 0x43ffffff 0x63ffffff 0x83ffffff 0xa3ffffff 0xc3ffffff 0xe3ffffff 0x23ffffff 0x45ffffff 0x05ffffff 0xa5ffffff 0xc5ffffff 0x85ffffff 0x65ffffff 0x25ffffff 0xe5ffffff 0x07ffffff 0x47ffffff 0xc7ffffff 0x87ffffff 0xa7ffffff 0x67ffffff 0x27ffffff 0xe7ffffff 0x09ffffff 0xc9ffffff 0x49ffffff 0x89ffffff 0xa9ffffff 0x69ffffff 0x29ffffff 0xe9ffffff 0xcbffffff 0x0bffffff 0x6bffffff 0x8bffffff 0x4bffffff 0xabffffff 0x2bffffff 0xebffffff 0xcdffffff 0x0dffffff 0x4dffffff 0x6dffffff 0xadffffff 0x8dffffff 0x2dffffff 0xedffffff 0x0fffffff 0xcfffffff 0x6fffffff 0xafffffff 0x8fffffff 0x4fffffff 0xefffffff 0x2fffffff \ No newline at end of file diff --git a/doc/crc64_jones3.txt b/doc/crc64_jones3.txt new file mode 100644 index 00000000..6a06053b --- /dev/null +++ b/doc/crc64_jones3.txt @@ -0,0 +1,2079 @@ +------------------------------------------------------------------------------- +--- Testing crc64_jones3 "crc64, jones polynomial, 3 pipelines in 1 thread, joined at the end" POOR + +[[[ Sanity Tests ]]] + +Verification value 0x7DC1B496 ....... PASS +Running sanity check 1 .......... PASS +Running AppendedZeroesTest .......... PASS + +[[[ Speed Tests ]]] + +WARNING: timer resolution is 108 (0x6c) ticks (0x13a773dfac0c - 0x13a773dfaba0). Broken VDSO? +Bulk speed test - 262144-byte keys +Alignment 7 - 1.190 bytes/cycle - 3404.35 MiB/sec @ 3 ghz +Alignment 6 - 1.195 bytes/cycle - 3419.97 MiB/sec @ 3 ghz +Alignment 5 - 1.195 bytes/cycle - 3420.32 MiB/sec @ 3 ghz +Alignment 4 - 1.177 bytes/cycle - 3367.52 MiB/sec @ 3 ghz +Alignment 3 - 1.176 bytes/cycle - 3365.57 MiB/sec @ 3 ghz +Alignment 2 - 1.190 bytes/cycle - 3405.45 MiB/sec @ 3 ghz +Alignment 1 - 1.190 bytes/cycle - 3404.19 MiB/sec @ 3 ghz +Alignment 0 - 1.189 bytes/cycle - 3403.01 MiB/sec @ 3 ghz +Average - 1.188 bytes/cycle - 3398.80 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 33.05 cycles/hash +Small key speed test - 2-byte keys - 43.51 cycles/hash +Small key speed test - 3-byte keys - 51.26 cycles/hash +Small key speed test - 4-byte keys - 58.66 cycles/hash +Small key speed test - 5-byte keys - 66.83 cycles/hash +Small key speed test - 6-byte keys - 74.23 cycles/hash +Small key speed test - 7-byte keys - 81.43 cycles/hash +Small key speed test - 8-byte keys - 66.43 cycles/hash +Small key speed test - 9-byte keys - 73.22 cycles/hash +Small key speed test - 10-byte keys - 80.44 cycles/hash +Small key speed test - 11-byte keys - 87.98 cycles/hash +Small key speed test - 12-byte keys - 73.16 cycles/hash +Small key speed test - 13-byte keys - 80.55 cycles/hash +Small key speed test - 14-byte keys - 87.83 cycles/hash +Small key speed test - 15-byte keys - 95.52 cycles/hash +Small key speed test - 16-byte keys - 79.97 cycles/hash +Small key speed test - 17-byte keys - 87.32 cycles/hash +Small key speed test - 18-byte keys - 94.63 cycles/hash +Small key speed test - 19-byte keys - 101.61 cycles/hash +Small key speed test - 20-byte keys - 86.29 cycles/hash +Small key speed test - 21-byte keys - 94.12 cycles/hash +Small key speed test - 22-byte keys - 101.57 cycles/hash +Small key speed test - 23-byte keys - 109.18 cycles/hash +Small key speed test - 24-byte keys - 588.30 cycles/hash +Small key speed test - 25-byte keys - 593.17 cycles/hash +Small key speed test - 26-byte keys - 600.86 cycles/hash +Small key speed test - 27-byte keys - 607.50 cycles/hash +Small key speed test - 28-byte keys - 1091.08 cycles/hash +Small key speed test - 29-byte keys - 1094.38 cycles/hash +Small key speed test - 30-byte keys - 1098.71 cycles/hash +Small key speed test - 31-byte keys - 1103.15 cycles/hash +Small key speed test - 32-byte keys - 1097.07 cycles/hash +Average 302.594 cycles/hash +Average, weighted by key length freq. 176.347 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 85.004 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) + +[[[ 'Hashmap' Speed Tests ]]] + +std::unordered_map +Init std HashMapTest: 520.984 cycles/op (104334 inserts, 1% deletions) +Running std HashMapTest: 259.466 cycles/op (26.1 stdv) + +greg7mdp/parallel-hashmap +Init fast HashMapTest: 334.593 cycles/op (104334 inserts, 1% deletions) +Running fast HashMapTest: 154.210 cycles/op (9.3 stdv) ....... PASS + +[[[ Avalanche Tests ]]] + +Testing 24-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +Testing 32-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 40-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 48-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 56-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 64-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 72-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 80-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 96-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 112-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 128-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 160-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 512-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 1024-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +*********FAIL********* + +[[[ Keyset 'Sparse' Tests ]]] + +Keyset 'Sparse' - 16-bit keys with up to 9 bits set - 50643 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (high 19-25 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (low 19-25 bits) - Worst is 25 bits: 19702/38 (515.80x) !!!!! +Testing distribution - Worst bias is the 13-bit window at bit 0 - 87.512% !!!!! + +Keyset 'Sparse' - 24-bit keys with up to 8 bits set - 1271626 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (high 24-35 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (low 24-35 bits) - Worst is 24 bits: 353795/46996 (7.53x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 0 - 89.254% !!!!! + +Keyset 'Sparse' - 32-bit keys with up to 7 bits set - 4514873 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2372.2, actual 0 (0.00x) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 225634/290569 (0.78x) +Testing collisions (low 32-bit) - Expected 2372.2, actual 1716 (0.72x) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 32949/18931 (1.74x) +Testing distribution - Worst bias is the 19-bit window at bit 63 - 48.502% !!!!! + +Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2460.8, actual 2770 (1.13x) (310) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 471339/301185 (1.56x) +Testing collisions (low 32-bit) - Expected 2460.8, actual 4578 (1.86x) (2118) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 62236/19637 (3.17x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 55 - 26.366% !!!!! + +Keyset 'Sparse' - 48-bit keys with up to 6 bits set - 14196869 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 23437.8, actual 86718 (3.70x) (63281) !!!!! +Testing collisions (high 27-42 bits) - Worst is 32 bits: 86718/23437 (3.70x) !!!!! +Testing collisions (low 32-bit) - Expected 23437.8, actual 10206 (0.44x) +Testing collisions (low 27-42 bits) - Worst is 28 bits: 439497/368886 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 49 - 8.182% !!!!! + +Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2069.0, actual 4550 (2.20x) (2482) !!!!! +Testing collisions (high 25-38 bits) - Worst is 31 bits: 9100/4136 (2.20x) !!!!! +Testing collisions (low 32-bit) - Expected 2069.0, actual 1008 (0.49x) +Testing collisions (low 25-38 bits) - Worst is 31 bits: 6188/4136 (1.50x) +Testing distribution - Worst bias is the 19-bit window at bit 60 - 4.589% !!!!! + +Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8021.7, actual 10388 (1.29x) (2367) +Testing collisions (high 26-40 bits) - Worst is 32 bits: 10388/8021 (1.29x) +Testing collisions (low 32-bit) - Expected 8021.7, actual 6460 (0.81x) +Testing collisions (low 26-40 bits) - Worst is 27 bits: 298840/251643 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 50 - 2.290% !!!!! + +Keyset 'Sparse' - 72-bit keys with up to 5 bits set - 15082603 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 26451.8, actual 21148 (0.80x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 797203/816575 (0.98x) +Testing collisions (low 32-bit) - Expected 26451.8, actual 34232 (1.29x) (7781) +Testing collisions (low 27-42 bits) - Worst is 35 bits: 6174/3309 (1.87x) +Testing distribution - Worst bias is the 20-bit window at bit 24 - 1.509% !!!!! + +Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1401.0, actual 1435 (1.02x) (35) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 70/21 (3.20x) !!!!! +Testing collisions (low 32-bit) - Expected 1401.0, actual 840 (0.60x) +Testing collisions (low 25-38 bits) - Worst is 27 bits: 50326/44458 (1.13x) +Testing distribution - Worst bias is the 19-bit window at bit 29 - 2.053% !!!!! + +Keyset 'Sparse' - 160-bit keys with up to 4 bits set - 26977161 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 84546.1, actual 82294 (0.97x) +Testing collisions (high 28-44 bits) - Worst is 43 bits: 105/41 (2.54x) !!!!! +Testing collisions (low 32-bit) - Expected 84546.1, actual 92626 (1.10x) (8080) +Testing collisions (low 28-44 bits) - Worst is 43 bits: 140/41 (3.38x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 0.407% + +Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 910.2, actual 1110 (1.22x) (200) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 610/455 (1.34x) +Testing collisions (low 32-bit) - Expected 910.2, actual 1279 (1.41x) (369) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 70/28 (2.46x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 45 - 0.363% + +Keyset 'Sparse' - 512-bit keys with up to 3 bits set - 22370049 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 58155.4, actual 58555 (1.01x) (400) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 80/28 (2.81x) !!!!! +Testing collisions (low 32-bit) - Expected 58155.4, actual 58907 (1.01x) (752) +Testing collisions (low 28-43 bits) - Worst is 42 bits: 90/56 (1.58x) +Testing distribution - Worst bias is the 20-bit window at bit 42 - 0.108% + +Keyset 'Sparse' - 1024-bit keys with up to 2 bits set - 524801 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (high 22-32 bits) - Worst is 22 bits: 31328/31504 (0.99x) +Testing collisions (low 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (low 22-32 bits) - Worst is 22 bits: 31137/31504 (0.99x) +Testing distribution - Worst bias is the 16-bit window at bit 31 - 0.592% + +Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 512.4, actual 513 (1.00x) (1) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 51/32 (1.59x) +Testing collisions (low 32-bit) - Expected 512.4, actual 570 (1.11x) (58) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 60/32 (1.87x) +Testing distribution - Worst bias is the 18-bit window at bit 29 - 0.264% + +*********FAIL********* + +[[[ Keyset 'Permutation' Tests ]]] + +Combination Lowbits Tests: +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 33 - 74.318% !!!!! + +*********FAIL********* + +Combination Highbits Tests +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 59 - 50.100% !!!!! + +*********FAIL********* + +Combination Hi-Lo Tests: +Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 813615 (201533487953.56x) (813615) !!!!! +Testing collisions (high 32-bit) - Expected 17322.9, actual 822958 (47.51x) (805636) !!!!! +Testing collisions (high 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing collisions (low 32-bit) - Expected 17322.9, actual 817759 (47.21x) (800437) !!!!! +Testing collisions (low 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 36 - 6.110% !!!!! + +*********FAIL********* + +Combination 0x80000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 38 - 58.033% !!!!! + +*********FAIL********* + +Combination 0x00000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 47 - 74.395% !!!!! + +*********FAIL********* + +Combination 0x8000000000000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 1 - 74.666% !!!!! + +*********FAIL********* + +Combination 0x0000000000000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 37 - 74.784% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 50.698% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 34 - 51.902% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 31 - 63.227% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 74.245% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 58.340% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 52 - 52.995% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 14 - 51.561% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 45 - 50.195% !!!!! + +*********FAIL********* + +[[[ Keyset 'Window' Tests ]]] + +Keyset 'Window' - 32-bit key, 25-bit window - 32 tests, 33554432 keys per test +Window at 0 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 1 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 2 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 3 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 4 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 5 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 6 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 7 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 8 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 9 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 10 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 11 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 12 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 13 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 14 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 15 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 16 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 17 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 18 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 19 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 20 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 21 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 22 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 23 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 24 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 25 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 26 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 27 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 28 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 29 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 30 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 31 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 32 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) + +[[[ Keyset 'Cyclic' Tests ]]] + +Keyset 'Cyclic' - 8 cycles of 8 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 103 (0.88x) +Testing collisions (high 23-34 bits) - Worst is 24 bits: 29243/29218 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 70/58 (1.20x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.109% + +Keyset 'Cyclic' - 8 cycles of 9 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (high 23-34 bits) - Worst is 33 bits: 66/58 (1.13x) +Testing collisions (low 32-bit) - Expected 116.4, actual 118 (1.01x) (2) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 492/465 (1.06x) +Testing distribution - Worst bias is the 17-bit window at bit 52 - 0.085% + +Keyset 'Cyclic' - 8 cycles of 10 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 27 bits: 3766/3716 (1.01x) +Testing collisions (low 32-bit) - Expected 116.4, actual 106 (0.91x) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 472/465 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.079% + +Keyset 'Cyclic' - 8 cycles of 11 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 115 (0.99x) (-1) +Testing collisions (high 23-34 bits) - Worst is 25 bits: 15081/14754 (1.02x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 62/58 (1.07x) +Testing distribution - Worst bias is the 17-bit window at bit 39 - 0.142% + +Keyset 'Cyclic' - 8 cycles of 12 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 26 bits: 7435/7413 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 105 (0.90x) +Testing collisions (low 23-34 bits) - Worst is 26 bits: 7475/7413 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 8 - 0.094% + +Keyset 'Cyclic' - 8 cycles of 16 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 117 (1.01x) (1) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 32 bits: 120/116 (1.03x) +Testing distribution - Worst bias is the 16-bit window at bit 7 - 0.114% + + +[[[ Keyset 'TwoBytes' Tests ]]] + +Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 261375 (22646103971038.65x) (261375) !!!!! +Testing collisions (high 32-bit) - Expected 49.6, actual 261375 (5272.97x) (261326) !!!!! +Testing collisions (high 23-33 bits) - Worst is 33 bits: 261375/24 (10545.68x) !!!!! +Testing collisions (low 32-bit) - Expected 49.6, actual 261378 (5273.03x) (261329) !!!!! +Testing collisions (low 23-33 bits) - Worst is 33 bits: 261378/24 (10545.80x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 0 - 87.354% !!!!! + +Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 3648285 (4496774986619.34x) (3648285) !!!!! +Testing collisions (high 32-bit) - Expected 3483.1, actual 3650943 (1048.19x) (3647460) !!!!! +Testing collisions (high 26-39 bits) - Worst is 39 bits: 3648306/27 (134015.55x) !!!!! +Testing collisions (low 32-bit) - Expected 3483.1, actual 3648528 (1047.50x) (3645045) !!!!! +Testing collisions (low 26-39 bits) - Worst is 39 bits: 3648285/27 (134014.78x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 88.627% !!!!! + +Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 14322075 (1524566310736.38x) (14322075) !!!!! +Testing collisions (high 32-bit) - Expected 40289.5, actual 14326031 (355.58x) (14285742) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing collisions (low 32-bit) - Expected 40289.5, actual 14324456 (355.54x) (14284167) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 64.751% !!!!! + +Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 36444345 (686634081469.61x) (36444345) !!!!! +Testing collisions (high 32-bit) - Expected 227182.3, actual 36453640 (160.46x) (36226458) !!!!! +Testing collisions (high 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing collisions (low 32-bit) - Expected 227182.3, actual 36451340 (160.45x) (36224158) !!!!! +Testing collisions (low 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 40.372% !!!!! + +Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 74176695 (365441696655.85x) (74176695) !!!!! +Testing collisions (high 32-bit) - Expected 865959.1, actual 74196456 (85.68x) (73330497) !!!!! +Testing collisions (high 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing collisions (low 32-bit) - Expected 865959.1, actual 74193744 (85.68x) (73327785) !!!!! +Testing collisions (low 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 24.319% !!!!! + +*********FAIL********* + +[[[ Keyset 'Text' Tests ]]] + +Keyset 'Text' - keys of form "FooXXXXBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 29 bits: 940540/201492 (4.67x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 88000 (3.47x) (62611) !!!!! +Testing collisions (low 27-42 bits) - Worst is 32 bits: 88000/25389 (3.47x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 63 - 31.683% !!!!! + +Keyset 'Text' - keys of form "FooBarXXXX" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 532272/784335 (0.68x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 29 bits: 929280/201492 (4.61x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 52.279% !!!!! + +Keyset 'Text' - keys of form "XXXXFooBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 28 bits: 1408000/399329 (3.53x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 27 bits: 80000/784335 (0.10x) +Testing distribution - Worst bias is the 20-bit window at bit 61 - 24.026% !!!!! + +Keyset 'Words' - 4000000 random keys of len 6-16 from alnum charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1802 (0.97x) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 35/29 (1.20x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1897 (1.02x) (35) +Testing collisions (low 25-38 bits) - Worst is 33 bits: 962/931 (1.03x) +Testing distribution - Worst bias is the 19-bit window at bit 59 - 0.057% + +Keyset 'Words' - 4000000 random keys of len 6-16 from password charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1872 (1.01x) (10) +Testing collisions (high 25-38 bits) - Worst is 33 bits: 949/931 (1.02x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1907 (1.02x) (45) +Testing collisions (low 25-38 bits) - Worst is 34 bits: 483/465 (1.04x) +Testing distribution - Worst bias is the 19-bit window at bit 10 - 0.052% + +Keyset 'Words' - 104334 dict words +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (high 20-28 bits) - Worst is 22 bits: 1303/1286 (1.01x) +Testing collisions (low 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (low 20-28 bits) - Worst is 28 bits: 23/20 (1.13x) +Testing distribution - Worst bias is the 14-bit window at bit 62 - 0.676% + +*********FAIL********* + +[[[ Keyset 'Zeroes' Tests ]]] + +Keyset 'Zeroes' - 204800 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 204799 (180143985094819.84x) (204799) !!!!! +Testing collisions (high 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (high 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing collisions (low 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (low 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing distribution - Worst bias is the 15-bit window at bit 0 - 99.997% !!!!! + +*********FAIL********* + +[[[ Keyset 'Seed' Tests ]]] + +Keyset 'Seed' - 5000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (high 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (low 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing distribution - Worst bias is the 19-bit window at bit 49 - 64.465% !!!!! + +*********FAIL********* + +[[[ Keyset 'PerlinNoise' Tests ]]] + +Testing 16777216 coordinates (L2) : +Testing collisions ( 64-bit) - Expected 0.0, actual 16773120 (2198486515680.01x) (16773120) !!!!! +Testing collisions (high 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! +Testing collisions (low 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! + +Testing AV variant, 128 count with 4 spacing, 4-12: +Testing collisions ( 64-bit) - Expected 0.0, actual 796431 (3063942940256.29x) (796431) +Testing collisions (high 32-bit) - Expected 1116.2, actual 797014 (714.07x) (795898) !!!!! +Testing collisions (high 25-37 bits) - Worst is 37 bits: 796449/34 (22828.84x) !!!!! +Testing collisions (low 32-bit) - Expected 1116.2, actual 797035 (714.09x) (795919) !!!!! +Testing collisions (low 25-37 bits) - Worst is 37 bits: 796463/34 (22829.24x) !!!!! + +*********FAIL********* + +[[[ Diff 'Differential' Tests ]]] + +Testing 8303632 up-to-5-bit differentials in 64-bit keys -> 64 bit hashes. +1000 reps, 8303632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 11017632 up-to-4-bit differentials in 128-bit keys -> 64 bit hashes. +1000 reps, 11017632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 2796416 up-to-3-bit differentials in 256-bit keys -> 64 bit hashes. +1000 reps, 2796416000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + + +[[[ DiffDist 'Differential Distribution' Tests ]]] + +Testing bit 0 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 1 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 2 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 3 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 4 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 5 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 6 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 7 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 8 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 9 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 10 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 11 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 12 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 13 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 14 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 15 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 16 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 17 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 18 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 19 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 20 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 21 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 22 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 23 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 24 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 25 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 26 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 27 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 28 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 29 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 30 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 31 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 32 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 33 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 34 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 35 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 36 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 37 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 38 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 39 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 40 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 41 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 42 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 43 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 44 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 45 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 46 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 47 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 48 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 49 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 50 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 51 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 52 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 53 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 54 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 55 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 56 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 57 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 58 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 59 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 60 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 61 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 62 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 63 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +*********FAIL********* + +[[[ MomentChi2 Tests ]]] + +Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 2 ... +Target values to approximate : 38918200.000000 - 273633.333333 +8 threads starting... done +Popcount 1 stats : 38918912.000000 - 273643.176129 +Popcount 0 stats : 38918912.000000 - 273643.178030 +MomentChi2 for bits 1 : 0.926303 +MomentChi2 for bits 0 : 0.926303 + +Derivative stats (transition from 2 consecutive values) : +Popcount 1 stats : 42600335.340257 - 233974.301184 +Popcount 0 stats : 32312867.472151 - 105358.370683 +MomentChi2 for deriv b1 : 2.67098e+07 +MomentChi2 for deriv b0 : 1.15122e+08 + + FAIL !!!! + + +*********FAIL********* + +[[[ Prng Tests ]]] + +Generating 33554432 random numbers : +Testing collisions ( 64-bit) - Expected 0.0, actual 33554431 (1099511627776.00x) (33554431) !!!!! +Testing collisions (high 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (high 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! +Testing collisions (low 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (low 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! + +*********FAIL********* + +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS + + +Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001 +Verification value is 0x00000001 - Testing took 1981.988814 seconds +------------------------------------------------------------------------------- +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS +Testing the first 0xffffffff seeds ... +8 threads starting... +at 0 +Broken seed 0x00000000 => 0 with key[16] of all 0 bytes +at 20000000 at 60000000 at 40000000 at 80000000 at a0000000 at c0000000 at e0000000 0x61ffffff 0x21ffffff 0xa1ffffff 0x01ffffff 0x41ffffff 0xc1ffffff 0x81ffffff 0xe1ffffff 0xa3ffffff 0x63ffffff 0xc3ffffff 0x23ffffff 0x03ffffff 0x83ffffff 0x43ffffff 0xe3ffffff 0xa5ffffff 0x65ffffff 0x05ffffff 0xc5ffffff 0x85ffffff 0x25ffffff 0x45ffffff 0xe5ffffff 0xa7ffffff 0x27ffffff 0x07ffffff 0x67ffffff 0xc7ffffff 0x47ffffff 0x87ffffff 0xe7ffffff 0xa9ffffff 0x29ffffff 0x09ffffff 0x69ffffff 0xc9ffffff 0x89ffffff 0x49ffffff 0xe9ffffff 0xabffffff 0x2bffffff 0x0bffffff 0x6bffffff 0xcbffffff 0x8bffffff 0xebffffff 0x4bffffff 0xadffffff 0x0dffffff 0x2dffffff 0x6dffffff 0xcdffffff 0x8dffffff 0xedffffff 0x4dffffff 0xafffffff 0x2fffffff 0x0fffffff 0x6fffffff 0xcfffffff 0xefffffff 0x8fffffff 0x4fffffff 0xb1ffffff 0x71ffffff 0x31ffffff 0x11ffffff 0x91ffffff 0xf1ffffff 0xd1ffffff 0x51ffffff 0xb3ffffff 0x33ffffff 0x13ffffff 0x73ffffff 0xd3ffffff 0x93ffffff 0xf3ffffff 0x53ffffff 0xb5ffffff 0x35ffffff 0x15ffffff 0x75ffffff 0xd5ffffff 0x95ffffff 0xf5ffffff 0x55ffffff 0xb7ffffff 0x37ffffff 0x17ffffff 0x77ffffff 0xd7ffffff 0x97ffffff 0xf7ffffff 0x57ffffff 0xb9ffffff 0x39ffffff 0x19ffffff 0x79ffffff 0xd9ffffff 0x99ffffff 0xf9ffffff 0x59ffffff 0xbbffffff 0x1bffffff 0x7bffffff 0x3bffffff 0xdbffffff 0x9bffffff 0xfbffffff 0x5bffffff 0xbdffffff 0x1dffffff 0x7dffffff 0x3dffffff 0xddffffff 0x9dffffff 0xfdffffff 0x5dffffff 0xbfffffff 0x1fffffff 0x3fffffff 0x7fffffff 0xdfffffff 0x9fffffff 0xffffffff 0x5fffffff All 8 threads ended +FAIL +Ensure to add these bad seeds to the list of secrets in main.cpp + +*********FAIL********* + + diff --git a/doc/discoNONG.txt b/doc/discoNONG.txt index 4f63e90b..8241f59b 100644 --- a/doc/discoNONG.txt +++ b/doc/discoNONG.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x130b6ff3cd620 - 0x130b6ff3cd5b4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.289 bytes/cycle - 3687.82 MiB/sec @ 3 ghz -Alignment 6 - 1.288 bytes/cycle - 3685.86 MiB/sec @ 3 ghz -Alignment 5 - 1.288 bytes/cycle - 3686.08 MiB/sec @ 3 ghz -Alignment 4 - 1.288 bytes/cycle - 3685.86 MiB/sec @ 3 ghz -Alignment 3 - 1.288 bytes/cycle - 3685.11 MiB/sec @ 3 ghz -Alignment 2 - 1.288 bytes/cycle - 3685.08 MiB/sec @ 3 ghz -Alignment 1 - 1.288 bytes/cycle - 3684.95 MiB/sec @ 3 ghz -Alignment 0 - 1.324 bytes/cycle - 3786.85 MiB/sec @ 3 ghz -Average - 1.293 bytes/cycle - 3698.45 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 328.48 cycles/hash -Small key speed test - 2-byte keys - 344.35 cycles/hash -Small key speed test - 3-byte keys - 365.39 cycles/hash -Small key speed test - 4-byte keys - 386.17 cycles/hash -Small key speed test - 5-byte keys - 408.27 cycles/hash -Small key speed test - 6-byte keys - 426.96 cycles/hash -Small key speed test - 7-byte keys - 447.82 cycles/hash -Small key speed test - 8-byte keys - 297.41 cycles/hash -Small key speed test - 9-byte keys - 348.01 cycles/hash -Small key speed test - 10-byte keys - 366.33 cycles/hash -Small key speed test - 11-byte keys - 387.05 cycles/hash -Small key speed test - 12-byte keys - 410.30 cycles/hash -Small key speed test - 13-byte keys - 431.02 cycles/hash -Small key speed test - 14-byte keys - 451.74 cycles/hash -Small key speed test - 15-byte keys - 484.96 cycles/hash -Small key speed test - 16-byte keys - 315.58 cycles/hash -Small key speed test - 17-byte keys - 367.47 cycles/hash -Small key speed test - 18-byte keys - 385.25 cycles/hash -Small key speed test - 19-byte keys - 407.69 cycles/hash -Small key speed test - 20-byte keys - 426.95 cycles/hash -Small key speed test - 21-byte keys - 447.20 cycles/hash -Small key speed test - 22-byte keys - 467.89 cycles/hash -Small key speed test - 23-byte keys - 488.90 cycles/hash -Small key speed test - 24-byte keys - 320.29 cycles/hash -Small key speed test - 25-byte keys - 354.18 cycles/hash -Small key speed test - 26-byte keys - 373.08 cycles/hash -Small key speed test - 27-byte keys - 393.71 cycles/hash -Small key speed test - 28-byte keys - 414.61 cycles/hash -Small key speed test - 29-byte keys - 434.64 cycles/hash -Small key speed test - 30-byte keys - 444.40 cycles/hash -Small key speed test - 31-byte keys - 463.66 cycles/hash -Average 399.670 cycles/hash +Alignment 7 - 1.267 bytes/cycle - 3624.02 MiB/sec @ 3 ghz +Alignment 6 - 1.273 bytes/cycle - 3642.90 MiB/sec @ 3 ghz +Alignment 5 - 1.277 bytes/cycle - 3652.98 MiB/sec @ 3 ghz +Alignment 4 - 1.277 bytes/cycle - 3653.52 MiB/sec @ 3 ghz +Alignment 3 - 1.277 bytes/cycle - 3654.10 MiB/sec @ 3 ghz +Alignment 2 - 1.277 bytes/cycle - 3652.60 MiB/sec @ 3 ghz +Alignment 1 - 1.278 bytes/cycle - 3655.68 MiB/sec @ 3 ghz +Alignment 0 - 1.312 bytes/cycle - 3754.08 MiB/sec @ 3 ghz +Average - 1.280 bytes/cycle - 3661.23 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 329.16 cycles/hash +Small key speed test - 2-byte keys - 346.96 cycles/hash +Small key speed test - 3-byte keys - 371.59 cycles/hash +Small key speed test - 4-byte keys - 388.67 cycles/hash +Small key speed test - 5-byte keys - 411.10 cycles/hash +Small key speed test - 6-byte keys - 431.47 cycles/hash +Small key speed test - 7-byte keys - 453.11 cycles/hash +Small key speed test - 8-byte keys - 306.14 cycles/hash +Small key speed test - 9-byte keys - 351.16 cycles/hash +Small key speed test - 10-byte keys - 370.48 cycles/hash +Small key speed test - 11-byte keys - 390.83 cycles/hash +Small key speed test - 12-byte keys - 408.02 cycles/hash +Small key speed test - 13-byte keys - 429.43 cycles/hash +Small key speed test - 14-byte keys - 450.53 cycles/hash +Small key speed test - 15-byte keys - 484.76 cycles/hash +Small key speed test - 16-byte keys - 323.47 cycles/hash +Small key speed test - 17-byte keys - 368.01 cycles/hash +Small key speed test - 18-byte keys - 384.90 cycles/hash +Small key speed test - 19-byte keys - 405.91 cycles/hash +Small key speed test - 20-byte keys - 426.07 cycles/hash +Small key speed test - 21-byte keys - 447.03 cycles/hash +Small key speed test - 22-byte keys - 465.96 cycles/hash +Small key speed test - 23-byte keys - 488.30 cycles/hash +Small key speed test - 24-byte keys - 328.70 cycles/hash +Small key speed test - 25-byte keys - 354.89 cycles/hash +Small key speed test - 26-byte keys - 368.70 cycles/hash +Small key speed test - 27-byte keys - 390.17 cycles/hash +Small key speed test - 28-byte keys - 408.86 cycles/hash +Small key speed test - 29-byte keys - 429.11 cycles/hash +Small key speed test - 30-byte keys - 435.67 cycles/hash +Small key speed test - 31-byte keys - 456.09 cycles/hash +Small key speed test - 32-byte keys - 324.72 cycles/hash +Average 397.811 cycles/hash +Average, weighted by key length freq. 404.142 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 359.475 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/discohash1-128.txt b/doc/discohash1-128.txt index cddb957f..e9b461e8 100644 --- a/doc/discohash1-128.txt +++ b/doc/discohash1-128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x130474c306848 - 0x130474c306800). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.423 bytes/cycle - 4069.85 MiB/sec @ 3 ghz -Alignment 6 - 1.423 bytes/cycle - 4070.71 MiB/sec @ 3 ghz -Alignment 5 - 1.422 bytes/cycle - 4068.47 MiB/sec @ 3 ghz -Alignment 4 - 1.422 bytes/cycle - 4069.58 MiB/sec @ 3 ghz -Alignment 3 - 1.422 bytes/cycle - 4067.43 MiB/sec @ 3 ghz -Alignment 2 - 1.422 bytes/cycle - 4069.33 MiB/sec @ 3 ghz -Alignment 1 - 1.422 bytes/cycle - 4067.63 MiB/sec @ 3 ghz -Alignment 0 - 1.433 bytes/cycle - 4100.57 MiB/sec @ 3 ghz -Average - 1.424 bytes/cycle - 4072.95 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 174.83 cycles/hash -Small key speed test - 2-byte keys - 192.61 cycles/hash -Small key speed test - 3-byte keys - 213.18 cycles/hash -Small key speed test - 4-byte keys - 247.01 cycles/hash -Small key speed test - 5-byte keys - 264.06 cycles/hash -Small key speed test - 6-byte keys - 284.95 cycles/hash -Small key speed test - 7-byte keys - 318.88 cycles/hash -Small key speed test - 8-byte keys - 147.38 cycles/hash -Small key speed test - 9-byte keys - 158.64 cycles/hash -Small key speed test - 10-byte keys - 181.66 cycles/hash -Small key speed test - 11-byte keys - 210.30 cycles/hash -Small key speed test - 12-byte keys - 228.57 cycles/hash -Small key speed test - 13-byte keys - 263.00 cycles/hash -Small key speed test - 14-byte keys - 293.18 cycles/hash -Small key speed test - 15-byte keys - 311.07 cycles/hash -Small key speed test - 16-byte keys - 170.18 cycles/hash -Small key speed test - 17-byte keys - 193.57 cycles/hash -Small key speed test - 18-byte keys - 221.98 cycles/hash -Small key speed test - 19-byte keys - 243.39 cycles/hash -Small key speed test - 20-byte keys - 264.50 cycles/hash -Small key speed test - 21-byte keys - 289.71 cycles/hash -Small key speed test - 22-byte keys - 311.05 cycles/hash -Small key speed test - 23-byte keys - 330.98 cycles/hash -Small key speed test - 24-byte keys - 170.75 cycles/hash -Small key speed test - 25-byte keys - 188.51 cycles/hash -Small key speed test - 26-byte keys - 204.57 cycles/hash -Small key speed test - 27-byte keys - 213.26 cycles/hash -Small key speed test - 28-byte keys - 234.58 cycles/hash -Small key speed test - 29-byte keys - 231.25 cycles/hash -Small key speed test - 30-byte keys - 241.83 cycles/hash -Small key speed test - 31-byte keys - 259.80 cycles/hash -Average 234.169 cycles/hash +Alignment 7 - 1.412 bytes/cycle - 4039.79 MiB/sec @ 3 ghz +Alignment 6 - 1.415 bytes/cycle - 4048.50 MiB/sec @ 3 ghz +Alignment 5 - 1.421 bytes/cycle - 4066.05 MiB/sec @ 3 ghz +Alignment 4 - 1.421 bytes/cycle - 4066.05 MiB/sec @ 3 ghz +Alignment 3 - 1.421 bytes/cycle - 4066.22 MiB/sec @ 3 ghz +Alignment 2 - 1.421 bytes/cycle - 4065.89 MiB/sec @ 3 ghz +Alignment 1 - 1.421 bytes/cycle - 4066.06 MiB/sec @ 3 ghz +Alignment 0 - 1.432 bytes/cycle - 4096.55 MiB/sec @ 3 ghz +Average - 1.421 bytes/cycle - 4064.39 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 173.88 cycles/hash +Small key speed test - 2-byte keys - 191.59 cycles/hash +Small key speed test - 3-byte keys - 211.73 cycles/hash +Small key speed test - 4-byte keys - 245.57 cycles/hash +Small key speed test - 5-byte keys - 262.43 cycles/hash +Small key speed test - 6-byte keys - 283.30 cycles/hash +Small key speed test - 7-byte keys - 317.18 cycles/hash +Small key speed test - 8-byte keys - 146.72 cycles/hash +Small key speed test - 9-byte keys - 158.68 cycles/hash +Small key speed test - 10-byte keys - 180.89 cycles/hash +Small key speed test - 11-byte keys - 208.83 cycles/hash +Small key speed test - 12-byte keys - 228.88 cycles/hash +Small key speed test - 13-byte keys - 263.17 cycles/hash +Small key speed test - 14-byte keys - 292.04 cycles/hash +Small key speed test - 15-byte keys - 309.34 cycles/hash +Small key speed test - 16-byte keys - 169.16 cycles/hash +Small key speed test - 17-byte keys - 192.60 cycles/hash +Small key speed test - 18-byte keys - 220.55 cycles/hash +Small key speed test - 19-byte keys - 242.43 cycles/hash +Small key speed test - 20-byte keys - 262.63 cycles/hash +Small key speed test - 21-byte keys - 288.09 cycles/hash +Small key speed test - 22-byte keys - 310.56 cycles/hash +Small key speed test - 23-byte keys - 329.26 cycles/hash +Small key speed test - 24-byte keys - 169.47 cycles/hash +Small key speed test - 25-byte keys - 186.85 cycles/hash +Small key speed test - 26-byte keys - 203.69 cycles/hash +Small key speed test - 27-byte keys - 210.92 cycles/hash +Small key speed test - 28-byte keys - 233.58 cycles/hash +Small key speed test - 29-byte keys - 229.94 cycles/hash +Small key speed test - 30-byte keys - 239.66 cycles/hash +Small key speed test - 31-byte keys - 259.85 cycles/hash +Small key speed test - 32-byte keys - 170.43 cycles/hash +Average 231.059 cycles/hash +Average, weighted by key length freq. 234.705 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 190.320 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/discohash1.txt b/doc/discohash1.txt index c055d87a..90f32f55 100644 --- a/doc/discohash1.txt +++ b/doc/discohash1.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x13024f222bbd0 - 0x13024f222bb64). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.443 bytes/cycle - 4128.53 MiB/sec @ 3 ghz -Alignment 6 - 1.442 bytes/cycle - 4125.79 MiB/sec @ 3 ghz -Alignment 5 - 1.442 bytes/cycle - 4126.95 MiB/sec @ 3 ghz -Alignment 4 - 1.442 bytes/cycle - 4125.61 MiB/sec @ 3 ghz -Alignment 3 - 1.442 bytes/cycle - 4126.79 MiB/sec @ 3 ghz -Alignment 2 - 1.442 bytes/cycle - 4126.08 MiB/sec @ 3 ghz -Alignment 1 - 1.443 bytes/cycle - 4127.12 MiB/sec @ 3 ghz -Alignment 0 - 1.455 bytes/cycle - 4162.07 MiB/sec @ 3 ghz -Average - 1.444 bytes/cycle - 4131.12 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 140.31 cycles/hash -Small key speed test - 2-byte keys - 159.27 cycles/hash -Small key speed test - 3-byte keys - 181.72 cycles/hash -Small key speed test - 4-byte keys - 213.00 cycles/hash -Small key speed test - 5-byte keys - 231.74 cycles/hash -Small key speed test - 6-byte keys - 250.97 cycles/hash -Small key speed test - 7-byte keys - 284.69 cycles/hash -Small key speed test - 8-byte keys - 114.00 cycles/hash -Small key speed test - 9-byte keys - 126.66 cycles/hash -Small key speed test - 10-byte keys - 147.52 cycles/hash -Small key speed test - 11-byte keys - 177.23 cycles/hash -Small key speed test - 12-byte keys - 195.90 cycles/hash -Small key speed test - 13-byte keys - 228.99 cycles/hash -Small key speed test - 14-byte keys - 257.00 cycles/hash -Small key speed test - 15-byte keys - 278.14 cycles/hash -Small key speed test - 16-byte keys - 135.62 cycles/hash -Small key speed test - 17-byte keys - 163.19 cycles/hash -Small key speed test - 18-byte keys - 190.16 cycles/hash -Small key speed test - 19-byte keys - 206.19 cycles/hash -Small key speed test - 20-byte keys - 227.00 cycles/hash -Small key speed test - 21-byte keys - 257.10 cycles/hash -Small key speed test - 22-byte keys - 271.24 cycles/hash -Small key speed test - 23-byte keys - 294.00 cycles/hash -Small key speed test - 24-byte keys - 135.69 cycles/hash -Small key speed test - 25-byte keys - 155.20 cycles/hash -Small key speed test - 26-byte keys - 169.16 cycles/hash -Small key speed test - 27-byte keys - 173.19 cycles/hash -Small key speed test - 28-byte keys - 185.07 cycles/hash -Small key speed test - 29-byte keys - 199.24 cycles/hash -Small key speed test - 30-byte keys - 204.24 cycles/hash -Small key speed test - 31-byte keys - 215.46 cycles/hash -Average 198.996 cycles/hash +Alignment 7 - 1.450 bytes/cycle - 4149.52 MiB/sec @ 3 ghz +Alignment 6 - 1.450 bytes/cycle - 4149.06 MiB/sec @ 3 ghz +Alignment 5 - 1.450 bytes/cycle - 4148.95 MiB/sec @ 3 ghz +Alignment 4 - 1.450 bytes/cycle - 4148.37 MiB/sec @ 3 ghz +Alignment 3 - 1.451 bytes/cycle - 4149.92 MiB/sec @ 3 ghz +Alignment 2 - 1.450 bytes/cycle - 4148.35 MiB/sec @ 3 ghz +Alignment 1 - 1.450 bytes/cycle - 4149.04 MiB/sec @ 3 ghz +Alignment 0 - 1.460 bytes/cycle - 4177.73 MiB/sec @ 3 ghz +Average - 1.451 bytes/cycle - 4152.62 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 139.52 cycles/hash +Small key speed test - 2-byte keys - 158.00 cycles/hash +Small key speed test - 3-byte keys - 180.87 cycles/hash +Small key speed test - 4-byte keys - 211.88 cycles/hash +Small key speed test - 5-byte keys - 230.76 cycles/hash +Small key speed test - 6-byte keys - 249.95 cycles/hash +Small key speed test - 7-byte keys - 331.77 cycles/hash +Small key speed test - 8-byte keys - 117.00 cycles/hash +Small key speed test - 9-byte keys - 130.26 cycles/hash +Small key speed test - 10-byte keys - 151.25 cycles/hash +Small key speed test - 11-byte keys - 181.00 cycles/hash +Small key speed test - 12-byte keys - 199.12 cycles/hash +Small key speed test - 13-byte keys - 234.96 cycles/hash +Small key speed test - 14-byte keys - 263.81 cycles/hash +Small key speed test - 15-byte keys - 281.95 cycles/hash +Small key speed test - 16-byte keys - 139.24 cycles/hash +Small key speed test - 17-byte keys - 167.18 cycles/hash +Small key speed test - 18-byte keys - 195.13 cycles/hash +Small key speed test - 19-byte keys - 210.99 cycles/hash +Small key speed test - 20-byte keys - 232.99 cycles/hash +Small key speed test - 21-byte keys - 263.42 cycles/hash +Small key speed test - 22-byte keys - 278.32 cycles/hash +Small key speed test - 23-byte keys - 301.93 cycles/hash +Small key speed test - 24-byte keys - 139.26 cycles/hash +Small key speed test - 25-byte keys - 159.16 cycles/hash +Small key speed test - 26-byte keys - 174.21 cycles/hash +Small key speed test - 27-byte keys - 177.67 cycles/hash +Small key speed test - 28-byte keys - 194.27 cycles/hash +Small key speed test - 29-byte keys - 202.31 cycles/hash +Small key speed test - 30-byte keys - 210.19 cycles/hash +Small key speed test - 31-byte keys - 221.34 cycles/hash +Small key speed test - 32-byte keys - 138.73 cycles/hash +Average 202.139 cycles/hash +Average, weighted by key length freq. 206.500 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 162.287 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/discohash2-128.txt b/doc/discohash2-128.txt index 3962742d..a1d334fa 100644 --- a/doc/discohash2-128.txt +++ b/doc/discohash2-128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x13090d0418fc0 - 0x13090d0418f54). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.440 bytes/cycle - 4120.37 MiB/sec @ 3 ghz -Alignment 6 - 1.440 bytes/cycle - 4118.87 MiB/sec @ 3 ghz -Alignment 5 - 1.439 bytes/cycle - 4116.52 MiB/sec @ 3 ghz -Alignment 4 - 1.439 bytes/cycle - 4118.31 MiB/sec @ 3 ghz -Alignment 3 - 1.430 bytes/cycle - 4092.07 MiB/sec @ 3 ghz -Alignment 2 - 1.415 bytes/cycle - 4048.48 MiB/sec @ 3 ghz -Alignment 1 - 1.417 bytes/cycle - 4054.98 MiB/sec @ 3 ghz -Alignment 0 - 1.429 bytes/cycle - 4088.27 MiB/sec @ 3 ghz -Average - 1.431 bytes/cycle - 4094.73 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 183.40 cycles/hash -Small key speed test - 2-byte keys - 191.56 cycles/hash -Small key speed test - 3-byte keys - 213.54 cycles/hash -Small key speed test - 4-byte keys - 256.90 cycles/hash -Small key speed test - 5-byte keys - 265.74 cycles/hash -Small key speed test - 6-byte keys - 287.08 cycles/hash -Small key speed test - 7-byte keys - 329.14 cycles/hash -Small key speed test - 8-byte keys - 148.62 cycles/hash -Small key speed test - 9-byte keys - 179.57 cycles/hash -Small key speed test - 10-byte keys - 209.00 cycles/hash -Small key speed test - 11-byte keys - 210.18 cycles/hash -Small key speed test - 12-byte keys - 228.52 cycles/hash -Small key speed test - 13-byte keys - 291.00 cycles/hash -Small key speed test - 14-byte keys - 294.05 cycles/hash -Small key speed test - 15-byte keys - 313.00 cycles/hash -Small key speed test - 16-byte keys - 169.10 cycles/hash -Small key speed test - 17-byte keys - 194.43 cycles/hash -Small key speed test - 18-byte keys - 223.91 cycles/hash -Small key speed test - 19-byte keys - 241.52 cycles/hash -Small key speed test - 20-byte keys - 262.88 cycles/hash -Small key speed test - 21-byte keys - 291.90 cycles/hash -Small key speed test - 22-byte keys - 308.37 cycles/hash -Small key speed test - 23-byte keys - 330.03 cycles/hash -Small key speed test - 24-byte keys - 169.18 cycles/hash -Small key speed test - 25-byte keys - 187.65 cycles/hash -Small key speed test - 26-byte keys - 201.56 cycles/hash -Small key speed test - 27-byte keys - 205.95 cycles/hash -Small key speed test - 28-byte keys - 220.75 cycles/hash -Small key speed test - 29-byte keys - 236.60 cycles/hash -Small key speed test - 30-byte keys - 238.14 cycles/hash -Small key speed test - 31-byte keys - 251.66 cycles/hash -Average 236.611 cycles/hash +Alignment 7 - 1.450 bytes/cycle - 4149.25 MiB/sec @ 3 ghz +Alignment 6 - 1.450 bytes/cycle - 4148.95 MiB/sec @ 3 ghz +Alignment 5 - 1.451 bytes/cycle - 4150.74 MiB/sec @ 3 ghz +Alignment 4 - 1.450 bytes/cycle - 4148.71 MiB/sec @ 3 ghz +Alignment 3 - 1.451 bytes/cycle - 4149.99 MiB/sec @ 3 ghz +Alignment 2 - 1.450 bytes/cycle - 4149.19 MiB/sec @ 3 ghz +Alignment 1 - 1.450 bytes/cycle - 4148.61 MiB/sec @ 3 ghz +Alignment 0 - 1.462 bytes/cycle - 4182.41 MiB/sec @ 3 ghz +Average - 1.452 bytes/cycle - 4153.48 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 169.53 cycles/hash +Small key speed test - 2-byte keys - 187.00 cycles/hash +Small key speed test - 3-byte keys - 209.18 cycles/hash +Small key speed test - 4-byte keys - 243.00 cycles/hash +Small key speed test - 5-byte keys - 269.45 cycles/hash +Small key speed test - 6-byte keys - 280.61 cycles/hash +Small key speed test - 7-byte keys - 313.74 cycles/hash +Small key speed test - 8-byte keys - 146.58 cycles/hash +Small key speed test - 9-byte keys - 156.12 cycles/hash +Small key speed test - 10-byte keys - 176.65 cycles/hash +Small key speed test - 11-byte keys - 205.43 cycles/hash +Small key speed test - 12-byte keys - 223.95 cycles/hash +Small key speed test - 13-byte keys - 257.55 cycles/hash +Small key speed test - 14-byte keys - 287.32 cycles/hash +Small key speed test - 15-byte keys - 305.21 cycles/hash +Small key speed test - 16-byte keys - 165.51 cycles/hash +Small key speed test - 17-byte keys - 190.25 cycles/hash +Small key speed test - 18-byte keys - 219.00 cycles/hash +Small key speed test - 19-byte keys - 236.12 cycles/hash +Small key speed test - 20-byte keys - 257.00 cycles/hash +Small key speed test - 21-byte keys - 286.00 cycles/hash +Small key speed test - 22-byte keys - 301.00 cycles/hash +Small key speed test - 23-byte keys - 323.58 cycles/hash +Small key speed test - 24-byte keys - 165.60 cycles/hash +Small key speed test - 25-byte keys - 184.10 cycles/hash +Small key speed test - 26-byte keys - 197.00 cycles/hash +Small key speed test - 27-byte keys - 203.57 cycles/hash +Small key speed test - 28-byte keys - 219.52 cycles/hash +Small key speed test - 29-byte keys - 226.00 cycles/hash +Small key speed test - 30-byte keys - 229.42 cycles/hash +Small key speed test - 31-byte keys - 248.61 cycles/hash +Small key speed test - 32-byte keys - 165.64 cycles/hash +Average 226.539 cycles/hash +Average, weighted by key length freq. 230.250 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 187.043 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/discohash2.txt b/doc/discohash2.txt index c2fe58eb..9fd9b9ab 100644 --- a/doc/discohash2.txt +++ b/doc/discohash2.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1306e17058c48 - 0x1306e17058bdc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.391 bytes/cycle - 3980.91 MiB/sec @ 3 ghz -Alignment 6 - 1.394 bytes/cycle - 3988.74 MiB/sec @ 3 ghz -Alignment 5 - 1.394 bytes/cycle - 3988.69 MiB/sec @ 3 ghz -Alignment 4 - 1.392 bytes/cycle - 3982.67 MiB/sec @ 3 ghz -Alignment 3 - 1.392 bytes/cycle - 3982.05 MiB/sec @ 3 ghz -Alignment 2 - 1.391 bytes/cycle - 3978.37 MiB/sec @ 3 ghz -Alignment 1 - 1.391 bytes/cycle - 3980.87 MiB/sec @ 3 ghz -Alignment 0 - 1.402 bytes/cycle - 4009.91 MiB/sec @ 3 ghz -Average - 1.393 bytes/cycle - 3986.52 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 147.00 cycles/hash -Small key speed test - 2-byte keys - 168.42 cycles/hash -Small key speed test - 3-byte keys - 192.41 cycles/hash -Small key speed test - 4-byte keys - 221.37 cycles/hash -Small key speed test - 5-byte keys - 244.49 cycles/hash -Small key speed test - 6-byte keys - 263.44 cycles/hash -Small key speed test - 7-byte keys - 294.57 cycles/hash -Small key speed test - 8-byte keys - 121.11 cycles/hash -Small key speed test - 9-byte keys - 133.57 cycles/hash -Small key speed test - 10-byte keys - 153.48 cycles/hash -Small key speed test - 11-byte keys - 182.32 cycles/hash -Small key speed test - 12-byte keys - 201.21 cycles/hash -Small key speed test - 13-byte keys - 237.76 cycles/hash -Small key speed test - 14-byte keys - 266.26 cycles/hash -Small key speed test - 15-byte keys - 285.47 cycles/hash -Small key speed test - 16-byte keys - 142.95 cycles/hash -Small key speed test - 17-byte keys - 168.16 cycles/hash -Small key speed test - 18-byte keys - 197.18 cycles/hash -Small key speed test - 19-byte keys - 215.92 cycles/hash -Small key speed test - 20-byte keys - 234.91 cycles/hash -Small key speed test - 21-byte keys - 264.80 cycles/hash -Small key speed test - 22-byte keys - 284.89 cycles/hash -Small key speed test - 23-byte keys - 303.84 cycles/hash -Small key speed test - 24-byte keys - 143.04 cycles/hash -Small key speed test - 25-byte keys - 162.73 cycles/hash -Small key speed test - 26-byte keys - 178.86 cycles/hash -Small key speed test - 27-byte keys - 185.65 cycles/hash -Small key speed test - 28-byte keys - 192.96 cycles/hash -Small key speed test - 29-byte keys - 207.05 cycles/hash -Small key speed test - 30-byte keys - 212.02 cycles/hash -Small key speed test - 31-byte keys - 225.33 cycles/hash -Average 207.522 cycles/hash +Alignment 7 - 1.406 bytes/cycle - 4021.57 MiB/sec @ 3 ghz +Alignment 6 - 1.406 bytes/cycle - 4023.00 MiB/sec @ 3 ghz +Alignment 5 - 1.406 bytes/cycle - 4023.38 MiB/sec @ 3 ghz +Alignment 4 - 1.406 bytes/cycle - 4022.67 MiB/sec @ 3 ghz +Alignment 3 - 1.406 bytes/cycle - 4023.97 MiB/sec @ 3 ghz +Alignment 2 - 1.406 bytes/cycle - 4022.23 MiB/sec @ 3 ghz +Alignment 1 - 1.406 bytes/cycle - 4022.45 MiB/sec @ 3 ghz +Alignment 0 - 1.417 bytes/cycle - 4055.48 MiB/sec @ 3 ghz +Average - 1.407 bytes/cycle - 4026.84 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 146.19 cycles/hash +Small key speed test - 2-byte keys - 167.56 cycles/hash +Small key speed test - 3-byte keys - 191.13 cycles/hash +Small key speed test - 4-byte keys - 220.04 cycles/hash +Small key speed test - 5-byte keys - 243.52 cycles/hash +Small key speed test - 6-byte keys - 262.22 cycles/hash +Small key speed test - 7-byte keys - 292.81 cycles/hash +Small key speed test - 8-byte keys - 120.26 cycles/hash +Small key speed test - 9-byte keys - 132.85 cycles/hash +Small key speed test - 10-byte keys - 152.71 cycles/hash +Small key speed test - 11-byte keys - 181.03 cycles/hash +Small key speed test - 12-byte keys - 200.07 cycles/hash +Small key speed test - 13-byte keys - 235.97 cycles/hash +Small key speed test - 14-byte keys - 266.12 cycles/hash +Small key speed test - 15-byte keys - 283.55 cycles/hash +Small key speed test - 16-byte keys - 142.17 cycles/hash +Small key speed test - 17-byte keys - 167.14 cycles/hash +Small key speed test - 18-byte keys - 195.98 cycles/hash +Small key speed test - 19-byte keys - 214.99 cycles/hash +Small key speed test - 20-byte keys - 234.00 cycles/hash +Small key speed test - 21-byte keys - 262.96 cycles/hash +Small key speed test - 22-byte keys - 282.97 cycles/hash +Small key speed test - 23-byte keys - 302.92 cycles/hash +Small key speed test - 24-byte keys - 142.18 cycles/hash +Small key speed test - 25-byte keys - 161.92 cycles/hash +Small key speed test - 26-byte keys - 177.31 cycles/hash +Small key speed test - 27-byte keys - 185.16 cycles/hash +Small key speed test - 28-byte keys - 192.45 cycles/hash +Small key speed test - 29-byte keys - 205.40 cycles/hash +Small key speed test - 30-byte keys - 209.00 cycles/hash +Small key speed test - 31-byte keys - 224.46 cycles/hash +Small key speed test - 32-byte keys - 142.67 cycles/hash +Average 204.366 cycles/hash +Average, weighted by key length freq. 207.757 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 163.816 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/donothing128.txt b/doc/donothing128.txt index 36b00e95..38675b05 100644 --- a/doc/donothing128.txt +++ b/doc/donothing128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xfc2ff5f164 - 0xfc2ff5f0f8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5324.001 bytes/cycle - 15232088.66 MiB/sec @ 3 ghz -Alignment 6 - 5312.054 bytes/cycle - 15197907.37 MiB/sec @ 3 ghz -Alignment 5 - 5341.769 bytes/cycle - 15282922.68 MiB/sec @ 3 ghz -Alignment 4 - 5344.057 bytes/cycle - 15289469.75 MiB/sec @ 3 ghz -Alignment 3 - 5323.893 bytes/cycle - 15231779.11 MiB/sec @ 3 ghz -Alignment 2 - 5346.893 bytes/cycle - 15297583.41 MiB/sec @ 3 ghz -Alignment 1 - 5355.747 bytes/cycle - 15322915.89 MiB/sec @ 3 ghz -Alignment 0 - 5374.720 bytes/cycle - 15377197.84 MiB/sec @ 3 ghz -Average - 5340.392 bytes/cycle - 15278983.09 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 6.00 cycles/hash -Small key speed test - 2-byte keys - 6.00 cycles/hash -Small key speed test - 3-byte keys - 6.00 cycles/hash -Small key speed test - 4-byte keys - 6.00 cycles/hash -Small key speed test - 5-byte keys - 6.00 cycles/hash -Small key speed test - 6-byte keys - 6.00 cycles/hash -Small key speed test - 7-byte keys - 6.00 cycles/hash -Small key speed test - 8-byte keys - 6.00 cycles/hash -Small key speed test - 9-byte keys - 6.00 cycles/hash -Small key speed test - 10-byte keys - 6.00 cycles/hash -Small key speed test - 11-byte keys - 6.00 cycles/hash -Small key speed test - 12-byte keys - 6.00 cycles/hash -Small key speed test - 13-byte keys - 6.00 cycles/hash -Small key speed test - 14-byte keys - 6.00 cycles/hash -Small key speed test - 15-byte keys - 6.00 cycles/hash -Small key speed test - 16-byte keys - 6.00 cycles/hash -Small key speed test - 17-byte keys - 6.00 cycles/hash -Small key speed test - 18-byte keys - 6.00 cycles/hash -Small key speed test - 19-byte keys - 6.00 cycles/hash -Small key speed test - 20-byte keys - 6.00 cycles/hash -Small key speed test - 21-byte keys - 6.00 cycles/hash -Small key speed test - 22-byte keys - 6.00 cycles/hash -Small key speed test - 23-byte keys - 6.00 cycles/hash -Small key speed test - 24-byte keys - 6.00 cycles/hash -Small key speed test - 25-byte keys - 6.00 cycles/hash -Small key speed test - 26-byte keys - 6.00 cycles/hash -Small key speed test - 27-byte keys - 6.00 cycles/hash -Small key speed test - 28-byte keys - 6.00 cycles/hash -Small key speed test - 29-byte keys - 6.00 cycles/hash -Small key speed test - 30-byte keys - 6.00 cycles/hash -Small key speed test - 31-byte keys - 6.00 cycles/hash -Average 6.000 cycles/hash +Alignment 7 - 4182.140 bytes/cycle - 11965197.96 MiB/sec @ 3 ghz +Alignment 6 - 4187.756 bytes/cycle - 11981264.79 MiB/sec @ 3 ghz +Alignment 5 - 4177.338 bytes/cycle - 11951460.65 MiB/sec @ 3 ghz +Alignment 4 - 4194.192 bytes/cycle - 11999679.80 MiB/sec @ 3 ghz +Alignment 3 - 4175.740 bytes/cycle - 11946888.55 MiB/sec @ 3 ghz +Alignment 2 - 4162.206 bytes/cycle - 11908166.51 MiB/sec @ 3 ghz +Alignment 1 - 4171.750 bytes/cycle - 11935473.60 MiB/sec @ 3 ghz +Alignment 0 - 4196.611 bytes/cycle - 12006600.03 MiB/sec @ 3 ghz +Average - 4180.967 bytes/cycle - 11961841.48 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 4.00 cycles/hash +Small key speed test - 2-byte keys - 4.00 cycles/hash +Small key speed test - 3-byte keys - 4.00 cycles/hash +Small key speed test - 4-byte keys - 4.00 cycles/hash +Small key speed test - 5-byte keys - 4.00 cycles/hash +Small key speed test - 6-byte keys - 4.00 cycles/hash +Small key speed test - 7-byte keys - 4.00 cycles/hash +Small key speed test - 8-byte keys - 4.37 cycles/hash +Small key speed test - 9-byte keys - 4.00 cycles/hash +Small key speed test - 10-byte keys - 4.00 cycles/hash +Small key speed test - 11-byte keys - 4.00 cycles/hash +Small key speed test - 12-byte keys - 4.00 cycles/hash +Small key speed test - 13-byte keys - 4.00 cycles/hash +Small key speed test - 14-byte keys - 4.00 cycles/hash +Small key speed test - 15-byte keys - 4.00 cycles/hash +Small key speed test - 16-byte keys - 4.00 cycles/hash +Small key speed test - 17-byte keys - 4.26 cycles/hash +Small key speed test - 18-byte keys - 4.00 cycles/hash +Small key speed test - 19-byte keys - 4.00 cycles/hash +Small key speed test - 20-byte keys - 4.00 cycles/hash +Small key speed test - 21-byte keys - 4.00 cycles/hash +Small key speed test - 22-byte keys - 4.00 cycles/hash +Small key speed test - 23-byte keys - 5.48 cycles/hash +Small key speed test - 24-byte keys - 4.00 cycles/hash +Small key speed test - 25-byte keys - 4.00 cycles/hash +Small key speed test - 26-byte keys - 4.00 cycles/hash +Small key speed test - 27-byte keys - 4.00 cycles/hash +Small key speed test - 28-byte keys - 4.00 cycles/hash +Small key speed test - 29-byte keys - 4.00 cycles/hash +Small key speed test - 30-byte keys - 4.00 cycles/hash +Small key speed test - 31-byte keys - 4.39 cycles/hash +Small key speed test - 32-byte keys - 4.00 cycles/hash +Average 4.078 cycles/hash +Average, weighted by key length freq. 4.069 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 4.017 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/donothing32.txt b/doc/donothing32.txt index 84c0ad55..e3a1d430 100644 --- a/doc/donothing32.txt +++ b/doc/donothing32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xf750f5d2dc - 0xf750f5d294). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5328.224 bytes/cycle - 15244171.15 MiB/sec @ 3 ghz -Alignment 6 - 5339.918 bytes/cycle - 15277626.79 MiB/sec @ 3 ghz -Alignment 5 - 5352.355 bytes/cycle - 15313210.84 MiB/sec @ 3 ghz -Alignment 4 - 5327.213 bytes/cycle - 15241277.87 MiB/sec @ 3 ghz -Alignment 3 - 5395.013 bytes/cycle - 15435255.68 MiB/sec @ 3 ghz -Alignment 2 - 5343.330 bytes/cycle - 15287390.71 MiB/sec @ 3 ghz -Alignment 1 - 5346.456 bytes/cycle - 15296334.59 MiB/sec @ 3 ghz -Alignment 0 - 5395.457 bytes/cycle - 15436527.28 MiB/sec @ 3 ghz -Average - 5353.496 bytes/cycle - 15316474.36 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 6.00 cycles/hash -Small key speed test - 2-byte keys - 6.00 cycles/hash -Small key speed test - 3-byte keys - 6.00 cycles/hash -Small key speed test - 4-byte keys - 6.00 cycles/hash -Small key speed test - 5-byte keys - 6.00 cycles/hash -Small key speed test - 6-byte keys - 6.00 cycles/hash -Small key speed test - 7-byte keys - 6.00 cycles/hash -Small key speed test - 8-byte keys - 6.00 cycles/hash -Small key speed test - 9-byte keys - 6.00 cycles/hash -Small key speed test - 10-byte keys - 6.00 cycles/hash -Small key speed test - 11-byte keys - 6.00 cycles/hash -Small key speed test - 12-byte keys - 6.00 cycles/hash -Small key speed test - 13-byte keys - 6.00 cycles/hash -Small key speed test - 14-byte keys - 6.00 cycles/hash -Small key speed test - 15-byte keys - 6.00 cycles/hash -Small key speed test - 16-byte keys - 6.00 cycles/hash -Small key speed test - 17-byte keys - 6.00 cycles/hash -Small key speed test - 18-byte keys - 6.00 cycles/hash -Small key speed test - 19-byte keys - 6.00 cycles/hash -Small key speed test - 20-byte keys - 6.00 cycles/hash -Small key speed test - 21-byte keys - 6.00 cycles/hash -Small key speed test - 22-byte keys - 6.00 cycles/hash -Small key speed test - 23-byte keys - 6.00 cycles/hash -Small key speed test - 24-byte keys - 6.00 cycles/hash -Small key speed test - 25-byte keys - 6.00 cycles/hash -Small key speed test - 26-byte keys - 6.00 cycles/hash -Small key speed test - 27-byte keys - 6.00 cycles/hash -Small key speed test - 28-byte keys - 6.00 cycles/hash -Small key speed test - 29-byte keys - 6.00 cycles/hash -Small key speed test - 30-byte keys - 6.00 cycles/hash -Small key speed test - 31-byte keys - 6.00 cycles/hash -Average 6.000 cycles/hash +Alignment 7 - 4019.617 bytes/cycle - 11500215.17 MiB/sec @ 3 ghz +Alignment 6 - 4036.594 bytes/cycle - 11548787.26 MiB/sec @ 3 ghz +Alignment 5 - 4030.022 bytes/cycle - 11529986.44 MiB/sec @ 3 ghz +Alignment 4 - 4046.632 bytes/cycle - 11577507.88 MiB/sec @ 3 ghz +Alignment 3 - 4021.561 bytes/cycle - 11505777.86 MiB/sec @ 3 ghz +Alignment 2 - 4038.690 bytes/cycle - 11554783.95 MiB/sec @ 3 ghz +Alignment 1 - 4047.685 bytes/cycle - 11580518.44 MiB/sec @ 3 ghz +Alignment 0 - 4018.458 bytes/cycle - 11496899.37 MiB/sec @ 3 ghz +Average - 4032.407 bytes/cycle - 11536809.55 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 4.00 cycles/hash +Small key speed test - 2-byte keys - 4.00 cycles/hash +Small key speed test - 3-byte keys - 4.00 cycles/hash +Small key speed test - 4-byte keys - 4.00 cycles/hash +Small key speed test - 5-byte keys - 4.00 cycles/hash +Small key speed test - 6-byte keys - 4.00 cycles/hash +Small key speed test - 7-byte keys - 4.00 cycles/hash +Small key speed test - 8-byte keys - 4.00 cycles/hash +Small key speed test - 9-byte keys - 4.00 cycles/hash +Small key speed test - 10-byte keys - 4.00 cycles/hash +Small key speed test - 11-byte keys - 4.00 cycles/hash +Small key speed test - 12-byte keys - 4.00 cycles/hash +Small key speed test - 13-byte keys - 4.00 cycles/hash +Small key speed test - 14-byte keys - 4.00 cycles/hash +Small key speed test - 15-byte keys - 4.00 cycles/hash +Small key speed test - 16-byte keys - 4.00 cycles/hash +Small key speed test - 17-byte keys - 4.00 cycles/hash +Small key speed test - 18-byte keys - 4.00 cycles/hash +Small key speed test - 19-byte keys - 4.00 cycles/hash +Small key speed test - 20-byte keys - 4.00 cycles/hash +Small key speed test - 21-byte keys - 4.00 cycles/hash +Small key speed test - 22-byte keys - 4.00 cycles/hash +Small key speed test - 23-byte keys - 4.00 cycles/hash +Small key speed test - 24-byte keys - 4.00 cycles/hash +Small key speed test - 25-byte keys - 4.00 cycles/hash +Small key speed test - 26-byte keys - 4.00 cycles/hash +Small key speed test - 27-byte keys - 4.00 cycles/hash +Small key speed test - 28-byte keys - 4.00 cycles/hash +Small key speed test - 29-byte keys - 4.00 cycles/hash +Small key speed test - 30-byte keys - 4.00 cycles/hash +Small key speed test - 31-byte keys - 4.00 cycles/hash +Small key speed test - 32-byte keys - 4.00 cycles/hash +Average 4.000 cycles/hash +Average, weighted by key length freq. 4.000 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 4.000 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/donothing64.txt b/doc/donothing64.txt index a2022f5f..a3c5a1e7 100644 --- a/doc/donothing64.txt +++ b/doc/donothing64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xf9c6586350 - 0xf9c6586308). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5344.275 bytes/cycle - 15290093.57 MiB/sec @ 3 ghz -Alignment 6 - 5339.373 bytes/cycle - 15276069.87 MiB/sec @ 3 ghz -Alignment 5 - 5393.199 bytes/cycle - 15430065.47 MiB/sec @ 3 ghz -Alignment 4 - 5328.549 bytes/cycle - 15245101.36 MiB/sec @ 3 ghz -Alignment 3 - 5381.971 bytes/cycle - 15397942.83 MiB/sec @ 3 ghz -Alignment 2 - 5361.374 bytes/cycle - 15339013.69 MiB/sec @ 3 ghz -Alignment 1 - 5365.400 bytes/cycle - 15350532.85 MiB/sec @ 3 ghz -Alignment 0 - 5351.699 bytes/cycle - 15311333.86 MiB/sec @ 3 ghz -Average - 5358.230 bytes/cycle - 15330019.19 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 6.00 cycles/hash -Small key speed test - 2-byte keys - 6.00 cycles/hash -Small key speed test - 3-byte keys - 6.00 cycles/hash -Small key speed test - 4-byte keys - 6.00 cycles/hash -Small key speed test - 5-byte keys - 6.00 cycles/hash -Small key speed test - 6-byte keys - 6.00 cycles/hash -Small key speed test - 7-byte keys - 6.00 cycles/hash -Small key speed test - 8-byte keys - 6.00 cycles/hash -Small key speed test - 9-byte keys - 6.00 cycles/hash -Small key speed test - 10-byte keys - 6.00 cycles/hash -Small key speed test - 11-byte keys - 6.00 cycles/hash -Small key speed test - 12-byte keys - 6.00 cycles/hash -Small key speed test - 13-byte keys - 6.00 cycles/hash -Small key speed test - 14-byte keys - 6.00 cycles/hash -Small key speed test - 15-byte keys - 6.00 cycles/hash -Small key speed test - 16-byte keys - 6.00 cycles/hash -Small key speed test - 17-byte keys - 6.00 cycles/hash -Small key speed test - 18-byte keys - 6.00 cycles/hash -Small key speed test - 19-byte keys - 6.00 cycles/hash -Small key speed test - 20-byte keys - 6.00 cycles/hash -Small key speed test - 21-byte keys - 6.00 cycles/hash -Small key speed test - 22-byte keys - 6.00 cycles/hash -Small key speed test - 23-byte keys - 6.00 cycles/hash -Small key speed test - 24-byte keys - 6.00 cycles/hash -Small key speed test - 25-byte keys - 6.00 cycles/hash -Small key speed test - 26-byte keys - 6.00 cycles/hash -Small key speed test - 27-byte keys - 6.00 cycles/hash -Small key speed test - 28-byte keys - 6.00 cycles/hash -Small key speed test - 29-byte keys - 6.00 cycles/hash -Small key speed test - 30-byte keys - 6.00 cycles/hash -Small key speed test - 31-byte keys - 6.00 cycles/hash -Average 6.000 cycles/hash +Alignment 7 - 4247.231 bytes/cycle - 12151426.72 MiB/sec @ 3 ghz +Alignment 6 - 4296.550 bytes/cycle - 12292527.72 MiB/sec @ 3 ghz +Alignment 5 - 4269.660 bytes/cycle - 12215594.24 MiB/sec @ 3 ghz +Alignment 4 - 4299.088 bytes/cycle - 12299789.94 MiB/sec @ 3 ghz +Alignment 3 - 4275.513 bytes/cycle - 12232341.04 MiB/sec @ 3 ghz +Alignment 2 - 4277.188 bytes/cycle - 12237134.27 MiB/sec @ 3 ghz +Alignment 1 - 4291.482 bytes/cycle - 12278028.96 MiB/sec @ 3 ghz +Alignment 0 - 4352.227 bytes/cycle - 12451820.84 MiB/sec @ 3 ghz +Average - 4288.617 bytes/cycle - 12269832.97 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 4.00 cycles/hash +Small key speed test - 2-byte keys - 4.00 cycles/hash +Small key speed test - 3-byte keys - 4.00 cycles/hash +Small key speed test - 4-byte keys - 4.00 cycles/hash +Small key speed test - 5-byte keys - 4.00 cycles/hash +Small key speed test - 6-byte keys - 4.00 cycles/hash +Small key speed test - 7-byte keys - 4.00 cycles/hash +Small key speed test - 8-byte keys - 4.00 cycles/hash +Small key speed test - 9-byte keys - 4.00 cycles/hash +Small key speed test - 10-byte keys - 4.00 cycles/hash +Small key speed test - 11-byte keys - 4.00 cycles/hash +Small key speed test - 12-byte keys - 4.00 cycles/hash +Small key speed test - 13-byte keys - 4.00 cycles/hash +Small key speed test - 14-byte keys - 4.00 cycles/hash +Small key speed test - 15-byte keys - 4.00 cycles/hash +Small key speed test - 16-byte keys - 4.00 cycles/hash +Small key speed test - 17-byte keys - 4.00 cycles/hash +Small key speed test - 18-byte keys - 4.00 cycles/hash +Small key speed test - 19-byte keys - 4.00 cycles/hash +Small key speed test - 20-byte keys - 4.00 cycles/hash +Small key speed test - 21-byte keys - 4.00 cycles/hash +Small key speed test - 22-byte keys - 4.00 cycles/hash +Small key speed test - 23-byte keys - 4.00 cycles/hash +Small key speed test - 24-byte keys - 4.00 cycles/hash +Small key speed test - 25-byte keys - 4.00 cycles/hash +Small key speed test - 26-byte keys - 4.00 cycles/hash +Small key speed test - 27-byte keys - 4.00 cycles/hash +Small key speed test - 28-byte keys - 4.00 cycles/hash +Small key speed test - 29-byte keys - 4.00 cycles/hash +Small key speed test - 30-byte keys - 4.00 cycles/hash +Small key speed test - 31-byte keys - 4.00 cycles/hash +Small key speed test - 32-byte keys - 4.00 cycles/hash +Average 4.000 cycles/hash +Average, weighted by key length freq. 4.000 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 4.000 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/edonr224.txt b/doc/edonr224.txt index 431729e0..9951f813 100644 --- a/doc/edonr224.txt +++ b/doc/edonr224.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x8e2169c3470 - 0x8e2169c3404). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.302 bytes/cycle - 864.14 MiB/sec @ 3 ghz -Alignment 6 - 0.302 bytes/cycle - 864.11 MiB/sec @ 3 ghz -Alignment 5 - 0.301 bytes/cycle - 861.89 MiB/sec @ 3 ghz -Alignment 4 - 0.304 bytes/cycle - 869.03 MiB/sec @ 3 ghz -Alignment 3 - 0.302 bytes/cycle - 863.69 MiB/sec @ 3 ghz -Alignment 2 - 0.301 bytes/cycle - 861.62 MiB/sec @ 3 ghz -Alignment 1 - 0.302 bytes/cycle - 863.71 MiB/sec @ 3 ghz -Alignment 0 - 0.304 bytes/cycle - 869.33 MiB/sec @ 3 ghz -Average - 0.302 bytes/cycle - 864.69 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 302.72 cycles/hash -Small key speed test - 2-byte keys - 304.56 cycles/hash -Small key speed test - 3-byte keys - 304.63 cycles/hash -Small key speed test - 4-byte keys - 299.53 cycles/hash -Small key speed test - 5-byte keys - 302.38 cycles/hash -Small key speed test - 6-byte keys - 302.44 cycles/hash -Small key speed test - 7-byte keys - 302.44 cycles/hash -Small key speed test - 8-byte keys - 303.15 cycles/hash -Small key speed test - 9-byte keys - 303.93 cycles/hash -Small key speed test - 10-byte keys - 303.83 cycles/hash -Small key speed test - 11-byte keys - 303.88 cycles/hash -Small key speed test - 12-byte keys - 303.47 cycles/hash -Small key speed test - 13-byte keys - 303.56 cycles/hash -Small key speed test - 14-byte keys - 303.52 cycles/hash -Small key speed test - 15-byte keys - 303.59 cycles/hash -Small key speed test - 16-byte keys - 303.98 cycles/hash -Small key speed test - 17-byte keys - 309.58 cycles/hash -Small key speed test - 18-byte keys - 309.61 cycles/hash -Small key speed test - 19-byte keys - 309.00 cycles/hash -Small key speed test - 20-byte keys - 301.49 cycles/hash +Alignment 7 - 0.302 bytes/cycle - 864.04 MiB/sec @ 3 ghz +Alignment 6 - 0.301 bytes/cycle - 861.13 MiB/sec @ 3 ghz +Alignment 5 - 0.300 bytes/cycle - 859.42 MiB/sec @ 3 ghz +Alignment 4 - 0.303 bytes/cycle - 866.84 MiB/sec @ 3 ghz +Alignment 3 - 0.302 bytes/cycle - 863.44 MiB/sec @ 3 ghz +Alignment 2 - 0.302 bytes/cycle - 863.47 MiB/sec @ 3 ghz +Alignment 1 - 0.302 bytes/cycle - 863.45 MiB/sec @ 3 ghz +Alignment 0 - 0.304 bytes/cycle - 868.35 MiB/sec @ 3 ghz +Average - 0.302 bytes/cycle - 863.77 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 306.00 cycles/hash +Small key speed test - 2-byte keys - 311.00 cycles/hash +Small key speed test - 3-byte keys - 312.92 cycles/hash +Small key speed test - 4-byte keys - 303.95 cycles/hash +Small key speed test - 5-byte keys - 306.97 cycles/hash +Small key speed test - 6-byte keys - 307.63 cycles/hash +Small key speed test - 7-byte keys - 307.72 cycles/hash +Small key speed test - 8-byte keys - 304.00 cycles/hash +Small key speed test - 9-byte keys - 303.00 cycles/hash +Small key speed test - 10-byte keys - 303.55 cycles/hash +Small key speed test - 11-byte keys - 303.48 cycles/hash +Small key speed test - 12-byte keys - 304.59 cycles/hash +Small key speed test - 13-byte keys - 307.19 cycles/hash +Small key speed test - 14-byte keys - 307.62 cycles/hash +Small key speed test - 15-byte keys - 307.64 cycles/hash +Small key speed test - 16-byte keys - 303.26 cycles/hash +Small key speed test - 17-byte keys - 315.00 cycles/hash +Small key speed test - 18-byte keys - 315.40 cycles/hash +Small key speed test - 19-byte keys - 315.00 cycles/hash +Small key speed test - 20-byte keys - 300.00 cycles/hash Small key speed test - 21-byte keys - 301.00 cycles/hash -Small key speed test - 22-byte keys - 301.63 cycles/hash +Small key speed test - 22-byte keys - 301.00 cycles/hash Small key speed test - 23-byte keys - 301.00 cycles/hash -Small key speed test - 24-byte keys - 301.64 cycles/hash -Small key speed test - 25-byte keys - 302.85 cycles/hash -Small key speed test - 26-byte keys - 302.96 cycles/hash -Small key speed test - 27-byte keys - 303.55 cycles/hash -Small key speed test - 28-byte keys - 301.00 cycles/hash -Small key speed test - 29-byte keys - 303.41 cycles/hash -Small key speed test - 30-byte keys - 303.28 cycles/hash -Small key speed test - 31-byte keys - 302.45 cycles/hash -Average 303.421 cycles/hash +Small key speed test - 24-byte keys - 299.82 cycles/hash +Small key speed test - 25-byte keys - 300.29 cycles/hash +Small key speed test - 26-byte keys - 300.91 cycles/hash +Small key speed test - 27-byte keys - 300.36 cycles/hash +Small key speed test - 28-byte keys - 299.97 cycles/hash +Small key speed test - 29-byte keys - 300.00 cycles/hash +Small key speed test - 30-byte keys - 300.00 cycles/hash +Small key speed test - 31-byte keys - 300.00 cycles/hash +Small key speed test - 32-byte keys - 302.00 cycles/hash +Average 304.758 cycles/hash +Average, weighted by key length freq. 305.677 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 303.938 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/edonr256.txt b/doc/edonr256.txt index 08f49c66..dd41d211 100644 --- a/doc/edonr256.txt +++ b/doc/edonr256.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x91861d0fa60 - 0x91861d0fa18). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.296 bytes/cycle - 846.55 MiB/sec @ 3 ghz -Alignment 6 - 0.296 bytes/cycle - 846.52 MiB/sec @ 3 ghz -Alignment 5 - 0.295 bytes/cycle - 844.71 MiB/sec @ 3 ghz -Alignment 4 - 0.298 bytes/cycle - 853.52 MiB/sec @ 3 ghz -Alignment 3 - 0.296 bytes/cycle - 846.07 MiB/sec @ 3 ghz -Alignment 2 - 0.296 bytes/cycle - 845.83 MiB/sec @ 3 ghz -Alignment 1 - 0.296 bytes/cycle - 846.02 MiB/sec @ 3 ghz -Alignment 0 - 0.298 bytes/cycle - 853.58 MiB/sec @ 3 ghz -Average - 0.296 bytes/cycle - 847.85 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 303.70 cycles/hash -Small key speed test - 2-byte keys - 308.23 cycles/hash -Small key speed test - 3-byte keys - 308.02 cycles/hash -Small key speed test - 4-byte keys - 304.58 cycles/hash -Small key speed test - 5-byte keys - 304.93 cycles/hash -Small key speed test - 6-byte keys - 304.39 cycles/hash -Small key speed test - 7-byte keys - 305.03 cycles/hash -Small key speed test - 8-byte keys - 302.41 cycles/hash -Small key speed test - 9-byte keys - 304.83 cycles/hash -Small key speed test - 10-byte keys - 305.03 cycles/hash -Small key speed test - 11-byte keys - 305.34 cycles/hash -Small key speed test - 12-byte keys - 302.76 cycles/hash -Small key speed test - 13-byte keys - 304.43 cycles/hash -Small key speed test - 14-byte keys - 304.86 cycles/hash -Small key speed test - 15-byte keys - 304.35 cycles/hash -Small key speed test - 16-byte keys - 303.64 cycles/hash -Small key speed test - 17-byte keys - 310.52 cycles/hash -Small key speed test - 18-byte keys - 310.23 cycles/hash -Small key speed test - 19-byte keys - 317.34 cycles/hash -Small key speed test - 20-byte keys - 306.93 cycles/hash -Small key speed test - 21-byte keys - 306.91 cycles/hash -Small key speed test - 22-byte keys - 307.10 cycles/hash -Small key speed test - 23-byte keys - 306.89 cycles/hash -Small key speed test - 24-byte keys - 304.63 cycles/hash -Small key speed test - 25-byte keys - 304.68 cycles/hash -Small key speed test - 26-byte keys - 304.86 cycles/hash -Small key speed test - 27-byte keys - 304.77 cycles/hash -Small key speed test - 28-byte keys - 304.41 cycles/hash -Small key speed test - 29-byte keys - 304.37 cycles/hash -Small key speed test - 30-byte keys - 304.71 cycles/hash -Small key speed test - 31-byte keys - 304.53 cycles/hash -Average 305.788 cycles/hash +Alignment 7 - 0.278 bytes/cycle - 796.77 MiB/sec @ 3 ghz +Alignment 6 - 0.307 bytes/cycle - 877.99 MiB/sec @ 3 ghz +Alignment 5 - 0.307 bytes/cycle - 878.11 MiB/sec @ 3 ghz +Alignment 4 - 0.309 bytes/cycle - 885.43 MiB/sec @ 3 ghz +Alignment 3 - 0.308 bytes/cycle - 880.28 MiB/sec @ 3 ghz +Alignment 2 - 0.308 bytes/cycle - 880.31 MiB/sec @ 3 ghz +Alignment 1 - 0.308 bytes/cycle - 880.31 MiB/sec @ 3 ghz +Alignment 0 - 0.311 bytes/cycle - 888.54 MiB/sec @ 3 ghz +Average - 0.304 bytes/cycle - 870.97 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 293.12 cycles/hash +Small key speed test - 2-byte keys - 299.35 cycles/hash +Small key speed test - 3-byte keys - 299.60 cycles/hash +Small key speed test - 4-byte keys - 290.81 cycles/hash +Small key speed test - 5-byte keys - 293.20 cycles/hash +Small key speed test - 6-byte keys - 293.44 cycles/hash +Small key speed test - 7-byte keys - 293.24 cycles/hash +Small key speed test - 8-byte keys - 289.37 cycles/hash +Small key speed test - 9-byte keys - 294.00 cycles/hash +Small key speed test - 10-byte keys - 294.00 cycles/hash +Small key speed test - 11-byte keys - 295.34 cycles/hash +Small key speed test - 12-byte keys - 289.65 cycles/hash +Small key speed test - 13-byte keys - 295.63 cycles/hash +Small key speed test - 14-byte keys - 294.69 cycles/hash +Small key speed test - 15-byte keys - 295.01 cycles/hash +Small key speed test - 16-byte keys - 296.43 cycles/hash +Small key speed test - 17-byte keys - 309.64 cycles/hash +Small key speed test - 18-byte keys - 310.80 cycles/hash +Small key speed test - 19-byte keys - 310.52 cycles/hash +Small key speed test - 20-byte keys - 295.97 cycles/hash +Small key speed test - 21-byte keys - 296.46 cycles/hash +Small key speed test - 22-byte keys - 296.98 cycles/hash +Small key speed test - 23-byte keys - 297.10 cycles/hash +Small key speed test - 24-byte keys - 294.42 cycles/hash +Small key speed test - 25-byte keys - 296.35 cycles/hash +Small key speed test - 26-byte keys - 295.86 cycles/hash +Small key speed test - 27-byte keys - 296.38 cycles/hash +Small key speed test - 28-byte keys - 294.99 cycles/hash +Small key speed test - 29-byte keys - 295.53 cycles/hash +Small key speed test - 30-byte keys - 294.74 cycles/hash +Small key speed test - 31-byte keys - 295.68 cycles/hash +Small key speed test - 32-byte keys - 296.50 cycles/hash +Average 296.400 cycles/hash +Average, weighted by key length freq. 297.382 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 294.783 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/epyc.html b/doc/epyc.html new file mode 100644 index 00000000..8b62b5bd --- /dev/null +++ b/doc/epyc.html @@ -0,0 +1,1927 @@ + + + + + + + + +

SMhasher

+ +

Alternative timings with a fast AMD EPYC 9554P 64-Core Processor (Server from 2024)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Hash functionMiB/seccycl./hashcycl./mapsizeQuality problems
donothing3213553281.724.00-13test NOP
donothing6413541357.624.00-13test NOP
donothing12813541295.404.00-13test NOP
NOP_OAAT_read6413331965.846.00-47test NOP
BadHash864.1957.97-47test FAIL
sumhash24548.6821.89-363test FAIL
sumhash32100902.8212.90-863UB, test FAIL
multiply_shift7545.6417.13113.71 (1)345fails all tests
pair_multiply_shift8074.0327.09114.46 (1)609fails all tests

crc32431.31114.96135.40 (1)422insecure, 8590x collisions, distrib
md5_32394.22528.58666.88 (1)4419
md5_64394.25536.05667.01 (1)4419
md5-128394.26542.95676.78 (1)4419
sha1_32695.43392.33564.22 (1)5126Sanity, Cyclic low32, collisions, 36.6% distrib
sha1_64696.39401.69571.37 (1)5126Sanity, Cyclic low32, collisions, 36.6% distrib
sha1-160695.69454.58610.97 (1)5126Comb/Cyclic low32
sha2-224237.47846.901016.77 (1)Cyclic low32
sha2-224_64237.61848.431014.99 (2)Cyclic low32
sha2-256238.66843.581007.11 (1)
sha2-256_64237.48846.181015.99 (2)
sha1ni1830.17145.19264.69 (1)989insecure,sanity, Permutation, Zeroes, amd epyc only
sha1ni_321830.19137.47276.48 (0)989insecure,sanity, Permutation, Zeroes, TwoBytes, amd epyc only
sha2ni-2561716.21154.79277.64 (1)4241insecure,sanity, Permutation, Zeroes, amd epyc only
sha2ni-256_641716.59147.99270.44 (1)4241insecure,sanity, Permutation, Zeroes, TwoBytes, amd epyc only
blake3_c1801.36315.27445.99 (16)no 32bit portability
rmd128355.57550.15704.03 (1)
rmd160187.931006.901186.82 (2)
rmd256394.80503.14656.81 (2)
edonr224622.92344.19468.41 (1)
edonr256622.52343.77465.60 (2)
blake2s-128165.101167.721343.40 (1)
blake2s-160165.011174.441362.35 (8)
blake2s-224165.081175.121343.20 (2)
blake2s-256165.021176.591384.37 (1)
blake2s-256_64165.141180.711357.44 (1)
blake2b-160282.591351.971545.04 (1)
blake2b-224282.571352.011524.89 (2)
blake2b-256282.411353.611536.79 (1)Sparse high 32-bit
blake2b-256_64282.181408.581543.69 (1)
asconhashv12194.41675.45705.48 (1)6490
asconhashv12_64194.44323.58330.37 (1)4341
sha3-256170.382333.112562.86 (18)PerlinNoise
sha3-256_64170.432335.552564.19 (10)PerlinNoise
hasshe22884.7458.16172.95 (2)445Permutation,TwoBytes,Zeroes,Seed
poly_1_mersenne1730.2542.07156.71 (1)479fails most tests
poly_2_mersenne1730.2249.00161.78 (1)479
poly_3_mersenne1730.2055.46168.07 (1)479
poly_4_mersenne1730.1762.80173.56 (1)479
tabulation3236432.7222.93150.62 (1)848collisions
tabulation7883.2727.87128.94 (1)554
crc32_hw9223.3524.11142.62 (1)653insecure, 100% bias, collisions, distrib, machine-specific (SSE4.2/NEON)
crc32_hw126518.7230.22139.68 (1)671insecure, 100% bias, collisions, distrib, machine-specific (x86 SSE4.2)
crc64_hw9223.5423.83109.81 (0)652insecure, 100% bias, collisions, distrib, machine-specific (SSE4.2/NEON)
crc32_pclmul11163.0183.31291.51 (3)481insecure, 100% bias, collisions, distrib, machine-specific (x86 PCLMUL)
crc64_jones1insecure, 100% bias, collisions, distrib
crc64_jones2insecure, 100% bias, collisions, distrib
crc64_jones3insecure, 100% bias, collisions, distrib
crc64_jonesinsecure, 100% bias, collisions, distrib
o1hash13351023.109.09101.49 (1)101insecure, zeros, fails all tests
fibonacci100430.6514.91422.62 (1)1692UB, zeros, fails all tests
FNV1a863.6859.48132.37 (1)204zeros, fails all tests
FNV1A_Totenschiff6918.9016.80144.67 (0)270UB, zeros, fails all tests
FNV1A_Pippip_Yurii6918.7518.20145.23 (1)147UB, sanity, fails all tests
FNV1a_YT17678.6020.43143.28 (1)321UB, fails all tests
FNV26919.2422.0792.51 (1)278fails all tests
FNV64863.8959.8374.41 (1)79fails all tests
FNV128431.31121.85133.73 (1)171fails all tests
k-hash3214854.8939.41161.51 (1)808UB, insecure, zeros, fails all tests
k-hash6414133.9028.97145.11 (1)609UB, insecure, zeros, fails all tests
fletcher224835.0311.26188.60 (0)248UB, fails all tests
fletcher424828.9611.25188.82 (1)371UB, fails all tests
bernstein1153.5744.91134.59 (1)41fails all tests
sdbm863.9257.36132.34 (0)41fails all tests
x171153.5646.44135.52 (1)7999.98% bias, fails all tests
libiberty692.1669.72132.77 (1)37insecure, 100% bias, fails all tests
gcc692.1670.70133.84 (1)39insecure, 100% bias, fails all tests
JenkinsOOAT692.1591.26138.71 (1)15353.5% bias, fails all tests
JenkinsOOAT_perl692.1677.17136.62 (1)651.5-11.5% bias, 7.2x collisions, LongNeighbors
MicroOAAT1153.5646.67135.28 (1)68100% bias, distrib
beamsplitter534.89827.06858.12 (1)UB, too many bad seeds
discohash2951.62222.03343.63 (4)1294
pearsonhash64431.42117.5083.31 (1) Avalanche, Seed, SSSE3 only. broken MSVC
pearsonhash128431.40120.5485.08 (1) Avalanche, Seed, SSSE3 only. broken MSVC
pearsonhash256424.97124.5994.41 (0) Avalanche, Seed, SSSE3 only. broken MSVC
VHASH_3213868.7449.88185.85 (1)1231sanity, Seed, MomentChi2
VHASH_6413863.0049.90170.18 (1)1231sanity, Seed, Sparse
farsh3254178.8446.31173.01 (1)944insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors
farsh6427066.1088.09214.66 (1)944insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors
farsh12813584.69175.25232.81 (2) ??
farsh2566796.97347.33402.81 (1) ??
jodyhash322768.3025.57146.20 (1)102bias, collisions, distr, LongNeighbors
jodyhash646105.1722.53117.98 (1)118bias, collisions, distr, LongNeighbors
lookup32965.9826.94146.43 (1)341UB, 28% bias, collisions, 30% distr
superfast2306.9236.88147.52 (1)210UB, bad seed 0, 91% bias, 5273.01x collisions, 37% distr, BIC
MurmurOAAT575.2986.71135.26 (1)47collisions, 99.998% distr., BIC, bad seed 0, LongNeighbors
Crap83460.1225.97147.54 (1)342UB, 2.42% bias, collisions, 2% distrib
Murmur12306.9436.14153.79 (1)UB, fails all tests, 1 bad seed
Murmur23459.8130.22151.61 (1)358UB, 1 bad seed, 1.7% bias, 81x coll, 1.7% distrib, BIC
Murmur2A3459.6634.28155.44 (1)407UB, 1 bad seed, 12.7% bias, LongNeighbors
Murmur2B6916.7726.8898.73 (0)433UB, 1.8% bias, collisions, 3.4% distrib, BIC
Murmur2C4611.6336.97120.91 (1)444UB, 2^32 bad seeds, 91% bias, collisions, distr, BIC, LongNeighbors
Murmur3A3295.1736.50155.47 (1)351UB, Moment Chi2 69
PMurHash323372.0236.67154.57 (1)1862Moment Chi2 69
Murmur3C4710.4844.19143.79 (1)859UB, LongNeighbors, DiffDist
PMPML_3212125.0831.59157.83 (1)1084Avalanche >512, unseeded: Seed, MomentChi2
PMPML_6418188.3731.12129.21 (1)1305unseeded: Seed, MomentChi2
xxHash326914.1337.53158.27 (1)738LongNeighbors, collisions with 4bit diff, MomentChi2 220
metrohash64_118482.9029.23123.22 (1)624UB, LongNeighbors, BIC, MomentChi2
metrohash64_218586.3929.80123.42 (1)627UB, LongNeighbors
metrohash64crc_124893.2032.23126.27 (1)632UB, cyclic collisions 8 byte, BIC, MomentChi2, machine-specific (SSE4.2/NEON)
metrohash64crc_224896.8732.23126.58 (1)632UB, cyclic collisions 8 byte, BIC, machine-specific (SSE4.2/NEON)
metrohash128_120149.0364.51172.86 (1)773UB, LongNeighbors
metrohash128_220148.7564.43172.38 (1)773UB, LongNeighbors
cmetrohash64_1o14841.2830.60124.64 (1)3506LongNeighbors, MomentChi2
cmetrohash64_118548.7429.23123.28 (0)652LongNeighbors, BIC, MomentChi2
cmetrohash64_218504.6229.80124.87 (1)655LongNeighbors
City64noSeed15796.0521.72117.22 (1)1038Avalanche, Sparse, TwoBytes, MomentChi2, Seed
City6415791.0533.49128.12 (1)1120Sparse, TwoBytes
t1ha1_64be13826.4420.37120.27 (1)555Avalanche
t1ha0_32le7905.2036.06123.51 (0)509Sparse, LongNeighbors
t1ha0_32be7545.5037.72123.94 (1)533Sparse, LongNeighbors
t1ha2_stream15786.5856.76159.22 (1)1665Sparse, Permutation, LongNeighbors
t1ha2_stream12815783.1371.63174.11 (1)1665Sparse, Permutation, LongNeighbors
aesnihash6150.1942.24153.76 (1)1209fails many tests, machine-specific (x64 AES-NI)
falkhash66674.4583.69197.94 (1)264Sparse, LongNeighbors, machine-specific (x64 AES-NI)
MeowHash41878.9457.37173.31 (1)1764Sparse, machine-specific (x64 AES-NI)
MeowHash64low41883.3457.32174.01 (1)1764Sparse, machine-specific (x64 AES-NI)
MeowHash32low41888.7557.42183.70 (1)1764Sparse, machine-specific (x64 AES-NI)
t1ha1_64le16532.2719.71119.32 (1)517Avalanche
tifuhash_64172.43416.72328.84 (2)276
floppsyhash170.71482.13405.13 (1)623
chaskey1496.3889.69187.58 (1)1609PerlinNoise
SipHash1327.84106.92206.44 (1)1071
HalfSipHash1537.9457.21168.21 (1)700zeroes
GoodOAAT1153.5554.36136.28 (1)237
pearsonbhash641977.4183.26133.74 (1)683
pearsonbhash1281977.3695.75140.26 (1)1134
pearsonbhash2561977.3596.98141.75 (0)844
prvhash64_64m3459.9334.36126.31 (1)349
prvhash64_643365.9035.25127.63 (1)384
prvhash64_1283952.6553.25156.32 (1)718
prvhash64s_646496.17231.86325.00 (1)2640
prvhash64s_1286694.05303.41388.48 (1)2799
SipHash132511.9678.33184.19 (1)7780.9% bias
discohash12869.00177.16281.62 (1)1294bad seeds
discohash1-1282858.71213.13318.91 (1)1294
discohash22861.12179.98280.35 (1)1294
discohash2-1282867.73214.01318.93 (1)1294
discoNONG3114.34390.56497.82 (1)bad seeds
TSip5425.3439.88148.19 (1)519!msvc
aesni29051.5328.63126.17 (1)519machine-specific (x64 AES-NI)
aesni-low29025.6628.63125.00 (1)519machine-specific (x64 AES-NI)
seahash7502.7441.48142.39 (1)871PerlinNoise, !msvc
seahash32low7502.8241.49170.74 (1)871PerlinNoise, !msvc
clhash25785.6052.77167.66 (1)1809PerlinNoise, machine-specific (SSE4.2/NEON)
HighwayHash646242.5899.55248.41 (3)2546
Murmur3F7504.2545.6993.19 (1)699UB
fasthash326914.0528.43146.59 (1)566UB
fasthash646914.2726.68101.37 (1)509UB, Moment Chi2 5159 !
MUM12875.1826.63121.17 (1)1912UB, too many bad seeds, machine-specific (32/64 differs)
MUMlow12777.2426.62151.29 (1)1912UB, 5 bad seeds
xmsx322306.9435.55151.34 (1)1922 bad seeds
mirhash4180.2326.69121.08 (1)11122^36 bad seeds, UB, LongNeighbors, machine-specific (32/64 differs)
mirhash32low4174.9026.71152.31 (1)11124 bad seeds, UB, Cyclic, LongNeighbors, machine-specific (32/64 differs)
mirhashstrict3256.3438.89127.81 (1)1112
mirhashstrict32low3256.3439.29160.31 (1)11121 bad seed, MomentChi2 9
mx37903.3536.63107.46 (1)734UB
pengyhash16751.8050.45156.07 (1)421
City325499.3342.69159.11 (1)1319
City64low15791.4633.34159.78 (1)1120
City12815862.5774.78182.38 (1)1841
CityCrc12818368.7975.35181.49 (1)295
CityCrc25618385.35159.50351.06 (1)
FarmHash3229054.4533.34160.20 (1)11489machine-specific (x64 SSE4/AVX/NEON)
FarmHash6415787.6833.47128.34 (1)3758
FarmHash12814744.8160.16149.85 (1)163
farmhash32_c28997.2933.34161.92 (1)762machine-specific (x64 SSE4/AVX/NEON)
farmhash64_c15787.0633.47128.43 (1)3688
farmhash128_c14708.8061.24149.39 (1)1890
metrohash6418557.6929.63124.03 (1)624LongNeighbors
metrohash12814950.6263.70173.05 (1)624UB
metrohash128crc_124882.4568.24177.15 (1)723UB, machine-specific (SSE4.2/NEON)
metrohash128crc_224883.0968.23177.39 (1)723UB, machine-specific (SSE4.2/NEON)
xxHash6410056.4537.32130.57 (1)1999
Spooky3216149.7935.01156.25 (1)2221UB
Spooky6416149.9234.96125.91 (1)2221UB
Spooky12816150.3648.58136.77 (1)2221UB
SpookyV2_3216144.8335.92158.32 (1)2069
SpookyV2_6416145.8735.89126.17 (1)2069
SpookyV2_12816144.3149.90137.70 (1)2069
t1ha2_atonce15793.7526.50123.56 (0)541
t1ha2_atonce12815790.5649.34145.55 (1)613LongNeighbors
t1ha0_aes_noavx31307.5927.00123.67 (1)925LongNeighbors, machine-specific (x86 AES-NI)
t1ha0_aes_avx131329.3726.51123.17 (1)843LongNeighbors, machine-specific (x64 AVX)
t1ha0_aes_avx280055.0526.52124.04 (1)792LongNeighbors, machine-specific (x64 AVX2)
ahash6410923.4931.33528.54 (14)412rust
xxh345761.9920.57115.13 (1)744Moment Chi2 14974, BIC
xxh3low45985.2820.57149.19 (1)756Moment Chi2 1.8e+9 !
xxh12845404.5922.72118.73 (1)1012Moment Chi2 14974
xxh128low45594.0522.65118.31 (1)1012Moment Chi2 14974, BIC
MeowHash41878.9457.37173.31 (1)1764Sparse low32, machine-specific (x64 AES-NI)
MeowHash32low41888.7557.42183.70 (1)1764Sparse, machine-specific (x64 AES-NI)
wyhash24518.9518.90108.28 (1)474
wyhash322532.8937.95222.17 (4) 4264 bad and broken seeds, 32-bit
wyhash32low24515.9818.91145.84 (1)4745 bad seeds
w1hash16950.3124.53115.22 (1)
rapidhash24480.1620.11110.33 (1)574
rapidhash_unrolled24198.1919.58109.39 (1)782
umash3240085.2728.59152.60 (1)1530
umash32_hi40050.0529.18152.17 (1)1530
umash6440087.2028.12121.30 (1)1530
umash12825929.9428.61123.04 (1)1530
halftime_hash647407.7280.64187.80 (1)1530
halftime_hash12822952.8770.56192.21 (1)1530
halftime_hash25640050.3977.73201.87 (1)1530
halftime_hash51240355.0389.53213.99 (1)1530
nmhash3226048.4041.39161.78 (1)2445
nmhash32x26004.4131.23149.38 (1)1494
k-hashv327439.7049.75168.97 (1)1280
k-hashv647463.6748.83142.47 (1)1279
komihash18957.7823.26116.93 (1)728
polymur14155.4832.45123.59 (1)1128
gxhash64103530.0827.00147.16 (1)
+ +Other timings: + + +

Summary

+

I added some SSE assisted hashes and fast intel/arm CRC32-C and AES HW variants, but not the fastest crcutil yet. See our crcutil results. See also the old https://code.google.com/p/smhasher/w/list.

+

So the fastest hash functions on x86_64 without quality problems are:

+ +

Hash functions for symbol tables or hash tables typically use 32 bit hashes, for databases, file systems and file checksums typically 64 or 128bit, for crypto now starting with 256 bit.

+

Typical median key size in perl5 is 20, the most common 4. Similar for all other dynamic languages. See github.com/rurban/perl-hash-stats

+

When used in a hash table the instruction cache will usually beat the CPU and throughput measured here. In my tests the smallest FNV1A beats the fastest crc32_hw1 with Perl 5 hash tables. Even if those worse hash functions will lead to more collisions, the overall speed advantage and inline-ability beats the slightly worse quality. See e.g. A Seven-Dimensional Analysis of Hashing Methods and its Implications on Query Processing for a concise overview of the best hash table strategies, confirming that the simplest Mult hashing (bernstein, FNV*, x17, sdbm) always beat "better" hash functions (Tabulation, Murmur, Farm, ...) when used in a hash table.

+

The fast hash functions tested here are recommendable as fast for file digests and maybe bigger databases, but not for 32bit hash tables. The "Quality problems" lead to less uniform distribution, i.e. more collisions and worse performance, but are rarely related to real security attacks, just the 2nd sanity zeroes test against \0 invariance is security relevant.

+

Columns

+

MiB/sec: The average of the Bulk key speed test for alignments 0-7 with 262144-byte keys. The higher the better.

+

cycl./hash: The average of the Small key speed test for 1-31 byte keys. The smaller the better.

+

cycl./map: The result of the Hashmap test for /usr/dict/words with std::unordered_map get queries, with the standard deviation in brackets. This tests the inlinability of the hash function (see size). The smaller the better.

+

size: The object size in byte on AMD64. This affects the inlinability in e.g. hash tables. The smaller the better.

+

Quality problems: See the failures in the linked doc. The less the better.

+

Other

+ +

SECURITY

+

The hash table attacks described in SipHash against City, Murmur or Perl JenkinsOAAT or at Hash Function Lounge are not included here.

+

Such an attack avoidance cannot be the problem of the hash function, but only the hash table collision resolution scheme. You can attack every single hash function, even the best and most secure if you detect the seed, e.g. from language (mis-)features, side-channel attacks, collision timings and independly the sort-order, so you need to protect your collision handling scheme from the worst-case O(n), i.e. separate chaining with linked lists. Linked lists chaining allows high load factors, but is very cache-unfriendly. The only recommendable linked list scheme is inlining the key or hash into the array. Nowadays everybody uses fast open addressing, even if the load factor needs to be ~50%, unless you use Cuckoo Hashing.

+

I.e. the usage of SipHash for their hash table in Python 3.4, ruby, rust, systemd, OpenDNS, Haskell and OpenBSD is pure security theatre. SipHash is not secure enough for security purposes and not fast enough for general usage. Brute-force generation of ~32k collisions need 2-4m for all these hashes. siphash being the slowest needs max 4m, other typically max 2m30s, with <10s for practical 16k collision attacks with all hash functions. Using Murmur is usually slower than a simple Mult, even in the worst case. Provable secure is only uniform hashing, i.e. 2-5 independent Mult or Tabulation, or using a guaranteed logarithmic collision scheme (a tree) or a linear collision scheme, such as Robin Hood or Cockoo hashing with collision counting.

+

One more note regarding security: Nowadays even SHA1 can be solved in a solver, like Z3 (or faster ones) for practical hash table collision attacks (i.e. 14-20 bits). All hash functions with less than 160 bits tested here cannot be considered "secure" at all.

+

The '' vulnerability attack with binary keys is tested in the 2nd Sanity Zero test.

+

CRYPTO

+

The official NIST hash function testsuite does not do such extensive statistical tests, to search for weak ranges in the bits. Also crypto does not change the initial state, which we do here for our random 32bit seed. Crypto mostly cares about unreversable key -> hash functions without changing the initial fixed state and timings/sidechannel attacks.

+

The NIST "Cryptographic Algorithm Validation Program" (CAVP) involves the testing of the implementations of FIPS-approved and NIST-recommended cryptographic algorithms. During the NIST SHA-3 competition, the testing methodology was borrowed from the "CAVP", as the KATs and MCTs of the SHA-3 Competition Test Suite were based on the CAVP tests for SHA-2. In addition to this, the “Extremely Long Message Test,” not present in the CAVP for SHA-2, required the submitters to generate the hash value corresponding to a message with a length of 1 GiB. “NIST - Cryptographic Algorithm Validation Program (CAVP),” June 2017. Available: http://csrc.nist.gov/groups/STM/cavp (No testing source code provided, just high-level descriptions)

+

Two other independent third party testsuites found an extensive number of bugs and weaknesses in the SHA3 candidates. "Finding Bugs in Cryptographic Hash Function Implementations", Nicky Mouha, Mohammad S Raunak, D. Richard Kuhn, and Raghu Kacker, 2017. https://eprint.iacr.org/2017/891.pdf

+

Maybe independent researchers should come together to do a better public SHA-4 round, based on better and more testing methods, open source code for the tests, and using standard industry practices, such as valgrind, address-sanitizer and ubsan to detect obvious bugs.

+

PROBLEMS

+ +

Typical undefined behaviour (UB) problems:

+ + + diff --git a/doc/falkhash.txt b/doc/falkhash.txt index 89be13dd..ce6161bc 100644 --- a/doc/falkhash.txt +++ b/doc/falkhash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x180d7a9eb89c - 0x180d7a9eb830). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 17.497 bytes/cycle - 50058.33 MiB/sec @ 3 ghz -Alignment 6 - 17.478 bytes/cycle - 50005.47 MiB/sec @ 3 ghz -Alignment 5 - 17.577 bytes/cycle - 50287.96 MiB/sec @ 3 ghz -Alignment 4 - 17.595 bytes/cycle - 50339.77 MiB/sec @ 3 ghz -Alignment 3 - 17.586 bytes/cycle - 50313.59 MiB/sec @ 3 ghz -Alignment 2 - 17.487 bytes/cycle - 50031.65 MiB/sec @ 3 ghz -Alignment 1 - 17.568 bytes/cycle - 50262.43 MiB/sec @ 3 ghz -Alignment 0 - 18.789 bytes/cycle - 53754.34 MiB/sec @ 3 ghz -Average - 17.697 bytes/cycle - 50631.69 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 108.59 cycles/hash -Small key speed test - 2-byte keys - 108.54 cycles/hash -Small key speed test - 3-byte keys - 107.85 cycles/hash -Small key speed test - 4-byte keys - 107.87 cycles/hash -Small key speed test - 5-byte keys - 114.86 cycles/hash -Small key speed test - 6-byte keys - 114.89 cycles/hash -Small key speed test - 7-byte keys - 114.95 cycles/hash -Small key speed test - 8-byte keys - 114.96 cycles/hash -Small key speed test - 9-byte keys - 114.99 cycles/hash -Small key speed test - 10-byte keys - 115.21 cycles/hash -Small key speed test - 11-byte keys - 116.03 cycles/hash -Small key speed test - 12-byte keys - 120.40 cycles/hash -Small key speed test - 13-byte keys - 121.85 cycles/hash -Small key speed test - 14-byte keys - 120.55 cycles/hash -Small key speed test - 15-byte keys - 121.67 cycles/hash -Small key speed test - 16-byte keys - 125.17 cycles/hash -Small key speed test - 17-byte keys - 122.31 cycles/hash -Small key speed test - 18-byte keys - 128.99 cycles/hash -Small key speed test - 19-byte keys - 129.12 cycles/hash -Small key speed test - 20-byte keys - 129.12 cycles/hash -Small key speed test - 21-byte keys - 128.97 cycles/hash -Small key speed test - 22-byte keys - 129.11 cycles/hash -Small key speed test - 23-byte keys - 128.98 cycles/hash -Small key speed test - 24-byte keys - 128.99 cycles/hash -Small key speed test - 25-byte keys - 129.50 cycles/hash -Small key speed test - 26-byte keys - 129.98 cycles/hash -Small key speed test - 27-byte keys - 135.98 cycles/hash -Small key speed test - 28-byte keys - 135.98 cycles/hash -Small key speed test - 29-byte keys - 135.98 cycles/hash -Small key speed test - 30-byte keys - 136.13 cycles/hash -Small key speed test - 31-byte keys - 136.09 cycles/hash -Average 123.019 cycles/hash +Alignment 7 - 18.093 bytes/cycle - 51765.20 MiB/sec @ 3 ghz +Alignment 6 - 18.134 bytes/cycle - 51882.93 MiB/sec @ 3 ghz +Alignment 5 - 18.157 bytes/cycle - 51948.08 MiB/sec @ 3 ghz +Alignment 4 - 18.200 bytes/cycle - 52070.43 MiB/sec @ 3 ghz +Alignment 3 - 18.212 bytes/cycle - 52104.28 MiB/sec @ 3 ghz +Alignment 2 - 18.188 bytes/cycle - 52035.52 MiB/sec @ 3 ghz +Alignment 1 - 18.218 bytes/cycle - 52121.16 MiB/sec @ 3 ghz +Alignment 0 - 19.323 bytes/cycle - 55284.21 MiB/sec @ 3 ghz +Average - 18.316 bytes/cycle - 52401.48 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 106.18 cycles/hash +Small key speed test - 2-byte keys - 106.00 cycles/hash +Small key speed test - 3-byte keys - 105.79 cycles/hash +Small key speed test - 4-byte keys - 105.88 cycles/hash +Small key speed test - 5-byte keys - 112.80 cycles/hash +Small key speed test - 6-byte keys - 112.00 cycles/hash +Small key speed test - 7-byte keys - 112.95 cycles/hash +Small key speed test - 8-byte keys - 113.12 cycles/hash +Small key speed test - 9-byte keys - 141.78 cycles/hash +Small key speed test - 10-byte keys - 145.03 cycles/hash +Small key speed test - 11-byte keys - 112.95 cycles/hash +Small key speed test - 12-byte keys - 117.73 cycles/hash +Small key speed test - 13-byte keys - 118.96 cycles/hash +Small key speed test - 14-byte keys - 118.36 cycles/hash +Small key speed test - 15-byte keys - 117.98 cycles/hash +Small key speed test - 16-byte keys - 122.99 cycles/hash +Small key speed test - 17-byte keys - 118.95 cycles/hash +Small key speed test - 18-byte keys - 126.47 cycles/hash +Small key speed test - 19-byte keys - 126.50 cycles/hash +Small key speed test - 20-byte keys - 126.46 cycles/hash +Small key speed test - 21-byte keys - 126.71 cycles/hash +Small key speed test - 22-byte keys - 126.47 cycles/hash +Small key speed test - 23-byte keys - 126.01 cycles/hash +Small key speed test - 24-byte keys - 126.49 cycles/hash +Small key speed test - 25-byte keys - 126.91 cycles/hash +Small key speed test - 26-byte keys - 126.89 cycles/hash +Small key speed test - 27-byte keys - 128.78 cycles/hash +Small key speed test - 28-byte keys - 133.66 cycles/hash +Small key speed test - 29-byte keys - 133.91 cycles/hash +Small key speed test - 30-byte keys - 133.86 cycles/hash +Small key speed test - 31-byte keys - 133.89 cycles/hash +Small key speed test - 32-byte keys - 133.84 cycles/hash +Average 122.698 cycles/hash +Average, weighted by key length freq. 124.031 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 126.626 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/farmhash128_c.txt b/doc/farmhash128_c.txt index cd899af4..5b6dbf17 100644 --- a/doc/farmhash128_c.txt +++ b/doc/farmhash128_c.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x13377f155b5b4 - 0x13377f155b56c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.800 bytes/cycle - 13733.38 MiB/sec @ 3 ghz -Alignment 6 - 4.801 bytes/cycle - 13734.46 MiB/sec @ 3 ghz -Alignment 5 - 4.800 bytes/cycle - 13732.49 MiB/sec @ 3 ghz -Alignment 4 - 4.800 bytes/cycle - 13731.94 MiB/sec @ 3 ghz -Alignment 3 - 4.800 bytes/cycle - 13732.29 MiB/sec @ 3 ghz -Alignment 2 - 4.794 bytes/cycle - 13715.25 MiB/sec @ 3 ghz -Alignment 1 - 4.800 bytes/cycle - 13733.10 MiB/sec @ 3 ghz -Alignment 0 - 4.863 bytes/cycle - 13913.04 MiB/sec @ 3 ghz -Average - 4.807 bytes/cycle - 13753.24 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 57.14 cycles/hash -Small key speed test - 2-byte keys - 57.00 cycles/hash -Small key speed test - 3-byte keys - 57.17 cycles/hash -Small key speed test - 4-byte keys - 59.92 cycles/hash -Small key speed test - 5-byte keys - 59.95 cycles/hash -Small key speed test - 6-byte keys - 59.96 cycles/hash -Small key speed test - 7-byte keys - 59.96 cycles/hash -Small key speed test - 8-byte keys - 62.00 cycles/hash -Small key speed test - 9-byte keys - 62.00 cycles/hash -Small key speed test - 10-byte keys - 62.00 cycles/hash -Small key speed test - 11-byte keys - 62.00 cycles/hash -Small key speed test - 12-byte keys - 62.00 cycles/hash -Small key speed test - 13-byte keys - 62.16 cycles/hash -Small key speed test - 14-byte keys - 62.00 cycles/hash -Small key speed test - 15-byte keys - 62.00 cycles/hash -Small key speed test - 16-byte keys - 62.00 cycles/hash -Small key speed test - 17-byte keys - 77.93 cycles/hash -Small key speed test - 18-byte keys - 77.94 cycles/hash -Small key speed test - 19-byte keys - 77.99 cycles/hash -Small key speed test - 20-byte keys - 77.92 cycles/hash -Small key speed test - 21-byte keys - 77.98 cycles/hash -Small key speed test - 22-byte keys - 77.99 cycles/hash -Small key speed test - 23-byte keys - 77.98 cycles/hash -Small key speed test - 24-byte keys - 77.89 cycles/hash -Small key speed test - 25-byte keys - 77.89 cycles/hash -Small key speed test - 26-byte keys - 77.87 cycles/hash -Small key speed test - 27-byte keys - 77.89 cycles/hash -Small key speed test - 28-byte keys - 77.82 cycles/hash -Small key speed test - 29-byte keys - 77.79 cycles/hash -Small key speed test - 30-byte keys - 77.77 cycles/hash -Small key speed test - 31-byte keys - 77.79 cycles/hash -Average 68.958 cycles/hash +Alignment 7 - 4.977 bytes/cycle - 14238.28 MiB/sec @ 3 ghz +Alignment 6 - 4.986 bytes/cycle - 14263.89 MiB/sec @ 3 ghz +Alignment 5 - 4.986 bytes/cycle - 14263.94 MiB/sec @ 3 ghz +Alignment 4 - 4.989 bytes/cycle - 14273.17 MiB/sec @ 3 ghz +Alignment 3 - 4.985 bytes/cycle - 14262.14 MiB/sec @ 3 ghz +Alignment 2 - 4.985 bytes/cycle - 14263.35 MiB/sec @ 3 ghz +Alignment 1 - 4.986 bytes/cycle - 14263.91 MiB/sec @ 3 ghz +Alignment 0 - 5.050 bytes/cycle - 14448.82 MiB/sec @ 3 ghz +Average - 4.993 bytes/cycle - 14284.69 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 55.00 cycles/hash +Small key speed test - 2-byte keys - 55.00 cycles/hash +Small key speed test - 3-byte keys - 55.00 cycles/hash +Small key speed test - 4-byte keys - 57.00 cycles/hash +Small key speed test - 5-byte keys - 57.00 cycles/hash +Small key speed test - 6-byte keys - 57.00 cycles/hash +Small key speed test - 7-byte keys - 57.00 cycles/hash +Small key speed test - 8-byte keys - 61.64 cycles/hash +Small key speed test - 9-byte keys - 61.62 cycles/hash +Small key speed test - 10-byte keys - 61.62 cycles/hash +Small key speed test - 11-byte keys - 61.62 cycles/hash +Small key speed test - 12-byte keys - 61.63 cycles/hash +Small key speed test - 13-byte keys - 61.65 cycles/hash +Small key speed test - 14-byte keys - 61.60 cycles/hash +Small key speed test - 15-byte keys - 62.72 cycles/hash +Small key speed test - 16-byte keys - 62.15 cycles/hash +Small key speed test - 17-byte keys - 76.93 cycles/hash +Small key speed test - 18-byte keys - 76.92 cycles/hash +Small key speed test - 19-byte keys - 76.90 cycles/hash +Small key speed test - 20-byte keys - 79.08 cycles/hash +Small key speed test - 21-byte keys - 78.84 cycles/hash +Small key speed test - 22-byte keys - 79.03 cycles/hash +Small key speed test - 23-byte keys - 79.00 cycles/hash +Small key speed test - 24-byte keys - 79.00 cycles/hash +Small key speed test - 25-byte keys - 79.00 cycles/hash +Small key speed test - 26-byte keys - 79.00 cycles/hash +Small key speed test - 27-byte keys - 79.00 cycles/hash +Small key speed test - 28-byte keys - 79.00 cycles/hash +Small key speed test - 29-byte keys - 77.70 cycles/hash +Small key speed test - 30-byte keys - 77.66 cycles/hash +Small key speed test - 31-byte keys - 77.63 cycles/hash +Small key speed test - 32-byte keys - 77.67 cycles/hash +Average 68.800 cycles/hash +Average, weighted by key length freq. 68.846 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 61.766 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/farmhash32_c.txt b/doc/farmhash32_c.txt index 8ab530a1..1254e168 100644 --- a/doc/farmhash32_c.txt +++ b/doc/farmhash32_c.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x133644ef28b40 - 0x133644ef28ad4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 7.492 bytes/cycle - 21433.46 MiB/sec @ 3 ghz -Alignment 6 - 7.491 bytes/cycle - 21431.02 MiB/sec @ 3 ghz -Alignment 5 - 7.491 bytes/cycle - 21432.20 MiB/sec @ 3 ghz -Alignment 4 - 7.508 bytes/cycle - 21479.96 MiB/sec @ 3 ghz -Alignment 3 - 7.520 bytes/cycle - 21513.72 MiB/sec @ 3 ghz -Alignment 2 - 7.518 bytes/cycle - 21509.73 MiB/sec @ 3 ghz -Alignment 1 - 7.520 bytes/cycle - 21514.78 MiB/sec @ 3 ghz -Alignment 0 - 7.864 bytes/cycle - 22500.04 MiB/sec @ 3 ghz -Average - 7.550 bytes/cycle - 21601.86 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 39.11 cycles/hash -Small key speed test - 2-byte keys - 39.00 cycles/hash -Small key speed test - 3-byte keys - 39.00 cycles/hash -Small key speed test - 4-byte keys - 43.00 cycles/hash -Small key speed test - 5-byte keys - 43.00 cycles/hash -Small key speed test - 6-byte keys - 43.00 cycles/hash -Small key speed test - 7-byte keys - 43.00 cycles/hash -Small key speed test - 8-byte keys - 48.61 cycles/hash -Small key speed test - 9-byte keys - 48.32 cycles/hash -Small key speed test - 10-byte keys - 48.00 cycles/hash -Small key speed test - 11-byte keys - 48.00 cycles/hash -Small key speed test - 12-byte keys - 48.00 cycles/hash -Small key speed test - 13-byte keys - 48.00 cycles/hash -Small key speed test - 14-byte keys - 48.00 cycles/hash -Small key speed test - 15-byte keys - 48.27 cycles/hash -Small key speed test - 16-byte keys - 48.51 cycles/hash -Small key speed test - 17-byte keys - 49.26 cycles/hash -Small key speed test - 18-byte keys - 49.00 cycles/hash -Small key speed test - 19-byte keys - 49.00 cycles/hash -Small key speed test - 20-byte keys - 49.00 cycles/hash -Small key speed test - 21-byte keys - 50.00 cycles/hash -Small key speed test - 22-byte keys - 50.00 cycles/hash -Small key speed test - 23-byte keys - 50.00 cycles/hash -Small key speed test - 24-byte keys - 49.95 cycles/hash -Small key speed test - 25-byte keys - 49.98 cycles/hash -Small key speed test - 26-byte keys - 50.00 cycles/hash -Small key speed test - 27-byte keys - 50.00 cycles/hash -Small key speed test - 28-byte keys - 49.96 cycles/hash -Small key speed test - 29-byte keys - 49.95 cycles/hash -Small key speed test - 30-byte keys - 49.96 cycles/hash -Small key speed test - 31-byte keys - 49.96 cycles/hash -Average 47.382 cycles/hash +Alignment 7 - 7.706 bytes/cycle - 22047.15 MiB/sec @ 3 ghz +Alignment 6 - 7.707 bytes/cycle - 22048.65 MiB/sec @ 3 ghz +Alignment 5 - 7.704 bytes/cycle - 22041.98 MiB/sec @ 3 ghz +Alignment 4 - 7.709 bytes/cycle - 22054.66 MiB/sec @ 3 ghz +Alignment 3 - 7.686 bytes/cycle - 21990.15 MiB/sec @ 3 ghz +Alignment 2 - 7.701 bytes/cycle - 22032.46 MiB/sec @ 3 ghz +Alignment 1 - 7.682 bytes/cycle - 21977.83 MiB/sec @ 3 ghz +Alignment 0 - 8.042 bytes/cycle - 23008.15 MiB/sec @ 3 ghz +Average - 7.742 bytes/cycle - 22150.13 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 38.48 cycles/hash +Small key speed test - 2-byte keys - 38.46 cycles/hash +Small key speed test - 3-byte keys - 38.42 cycles/hash +Small key speed test - 4-byte keys - 42.00 cycles/hash +Small key speed test - 5-byte keys - 42.00 cycles/hash +Small key speed test - 6-byte keys - 42.00 cycles/hash +Small key speed test - 7-byte keys - 42.00 cycles/hash +Small key speed test - 8-byte keys - 47.00 cycles/hash +Small key speed test - 9-byte keys - 47.00 cycles/hash +Small key speed test - 10-byte keys - 47.00 cycles/hash +Small key speed test - 11-byte keys - 47.00 cycles/hash +Small key speed test - 12-byte keys - 47.00 cycles/hash +Small key speed test - 13-byte keys - 47.00 cycles/hash +Small key speed test - 14-byte keys - 47.00 cycles/hash +Small key speed test - 15-byte keys - 47.00 cycles/hash +Small key speed test - 16-byte keys - 47.00 cycles/hash +Small key speed test - 17-byte keys - 48.00 cycles/hash +Small key speed test - 18-byte keys - 48.00 cycles/hash +Small key speed test - 19-byte keys - 48.00 cycles/hash +Small key speed test - 20-byte keys - 48.00 cycles/hash +Small key speed test - 21-byte keys - 48.00 cycles/hash +Small key speed test - 22-byte keys - 48.00 cycles/hash +Small key speed test - 23-byte keys - 48.00 cycles/hash +Small key speed test - 24-byte keys - 48.00 cycles/hash +Small key speed test - 25-byte keys - 48.00 cycles/hash +Small key speed test - 26-byte keys - 48.00 cycles/hash +Small key speed test - 27-byte keys - 48.00 cycles/hash +Small key speed test - 28-byte keys - 48.00 cycles/hash +Small key speed test - 29-byte keys - 48.11 cycles/hash +Small key speed test - 30-byte keys - 48.00 cycles/hash +Small key speed test - 31-byte keys - 48.00 cycles/hash +Small key speed test - 32-byte keys - 48.00 cycles/hash +Average 46.077 cycles/hash +Average, weighted by key length freq. 47.336 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 46.669 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/farmhash64_c.txt b/doc/farmhash64_c.txt index cf43bfc7..c34f31e5 100644 --- a/doc/farmhash64_c.txt +++ b/doc/farmhash64_c.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1336dfacbf82c - 0x1336dfacbf7c0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.476 bytes/cycle - 12805.85 MiB/sec @ 3 ghz -Alignment 6 - 4.475 bytes/cycle - 12804.42 MiB/sec @ 3 ghz -Alignment 5 - 4.475 bytes/cycle - 12804.40 MiB/sec @ 3 ghz -Alignment 4 - 4.478 bytes/cycle - 12810.86 MiB/sec @ 3 ghz -Alignment 3 - 4.473 bytes/cycle - 12796.77 MiB/sec @ 3 ghz -Alignment 2 - 4.475 bytes/cycle - 12804.35 MiB/sec @ 3 ghz -Alignment 1 - 4.476 bytes/cycle - 12804.89 MiB/sec @ 3 ghz -Alignment 0 - 4.558 bytes/cycle - 13041.27 MiB/sec @ 3 ghz -Average - 4.486 bytes/cycle - 12834.10 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 39.16 cycles/hash -Small key speed test - 2-byte keys - 39.19 cycles/hash -Small key speed test - 3-byte keys - 39.14 cycles/hash -Small key speed test - 4-byte keys - 43.00 cycles/hash -Small key speed test - 5-byte keys - 43.00 cycles/hash -Small key speed test - 6-byte keys - 43.00 cycles/hash -Small key speed test - 7-byte keys - 43.00 cycles/hash -Small key speed test - 8-byte keys - 48.90 cycles/hash -Small key speed test - 9-byte keys - 48.90 cycles/hash -Small key speed test - 10-byte keys - 48.90 cycles/hash -Small key speed test - 11-byte keys - 48.84 cycles/hash -Small key speed test - 12-byte keys - 48.86 cycles/hash -Small key speed test - 13-byte keys - 48.85 cycles/hash -Small key speed test - 14-byte keys - 48.82 cycles/hash -Small key speed test - 15-byte keys - 48.86 cycles/hash -Small key speed test - 16-byte keys - 48.82 cycles/hash -Small key speed test - 17-byte keys - 48.95 cycles/hash -Small key speed test - 18-byte keys - 48.92 cycles/hash -Small key speed test - 19-byte keys - 48.94 cycles/hash -Small key speed test - 20-byte keys - 48.97 cycles/hash -Small key speed test - 21-byte keys - 49.00 cycles/hash -Small key speed test - 22-byte keys - 49.00 cycles/hash -Small key speed test - 23-byte keys - 49.00 cycles/hash -Small key speed test - 24-byte keys - 49.00 cycles/hash -Small key speed test - 25-byte keys - 49.00 cycles/hash -Small key speed test - 26-byte keys - 49.00 cycles/hash -Small key speed test - 27-byte keys - 49.00 cycles/hash -Small key speed test - 28-byte keys - 49.00 cycles/hash -Small key speed test - 29-byte keys - 49.00 cycles/hash -Small key speed test - 30-byte keys - 49.00 cycles/hash -Small key speed test - 31-byte keys - 49.00 cycles/hash -Average 47.226 cycles/hash +Alignment 7 - 4.493 bytes/cycle - 12854.04 MiB/sec @ 3 ghz +Alignment 6 - 4.505 bytes/cycle - 12888.09 MiB/sec @ 3 ghz +Alignment 5 - 4.504 bytes/cycle - 12885.54 MiB/sec @ 3 ghz +Alignment 4 - 4.507 bytes/cycle - 12894.00 MiB/sec @ 3 ghz +Alignment 3 - 4.505 bytes/cycle - 12888.77 MiB/sec @ 3 ghz +Alignment 2 - 4.504 bytes/cycle - 12885.18 MiB/sec @ 3 ghz +Alignment 1 - 4.504 bytes/cycle - 12886.28 MiB/sec @ 3 ghz +Alignment 0 - 4.622 bytes/cycle - 13223.92 MiB/sec @ 3 ghz +Average - 4.518 bytes/cycle - 12925.73 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 39.00 cycles/hash +Small key speed test - 2-byte keys - 39.00 cycles/hash +Small key speed test - 3-byte keys - 39.00 cycles/hash +Small key speed test - 4-byte keys - 42.00 cycles/hash +Small key speed test - 5-byte keys - 42.00 cycles/hash +Small key speed test - 6-byte keys - 42.00 cycles/hash +Small key speed test - 7-byte keys - 42.00 cycles/hash +Small key speed test - 8-byte keys - 48.00 cycles/hash +Small key speed test - 9-byte keys - 48.00 cycles/hash +Small key speed test - 10-byte keys - 48.00 cycles/hash +Small key speed test - 11-byte keys - 48.00 cycles/hash +Small key speed test - 12-byte keys - 48.00 cycles/hash +Small key speed test - 13-byte keys - 48.00 cycles/hash +Small key speed test - 14-byte keys - 48.00 cycles/hash +Small key speed test - 15-byte keys - 48.00 cycles/hash +Small key speed test - 16-byte keys - 48.00 cycles/hash +Small key speed test - 17-byte keys - 48.57 cycles/hash +Small key speed test - 18-byte keys - 48.73 cycles/hash +Small key speed test - 19-byte keys - 48.62 cycles/hash +Small key speed test - 20-byte keys - 48.80 cycles/hash +Small key speed test - 21-byte keys - 48.69 cycles/hash +Small key speed test - 22-byte keys - 48.60 cycles/hash +Small key speed test - 23-byte keys - 48.62 cycles/hash +Small key speed test - 24-byte keys - 48.76 cycles/hash +Small key speed test - 25-byte keys - 48.69 cycles/hash +Small key speed test - 26-byte keys - 48.61 cycles/hash +Small key speed test - 27-byte keys - 48.63 cycles/hash +Small key speed test - 28-byte keys - 48.64 cycles/hash +Small key speed test - 29-byte keys - 48.85 cycles/hash +Small key speed test - 30-byte keys - 48.77 cycles/hash +Small key speed test - 31-byte keys - 48.76 cycles/hash +Small key speed test - 32-byte keys - 48.84 cycles/hash +Average 46.756 cycles/hash +Average, weighted by key length freq. 48.173 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 47.598 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/farsh128.txt b/doc/farsh128.txt index ad85fef8..eed5c05e 100644 --- a/doc/farsh128.txt +++ b/doc/farsh128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x160d52eba3e8 - 0x160d52eba37c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.395 bytes/cycle - 6852.22 MiB/sec @ 3 ghz -Alignment 6 - 2.390 bytes/cycle - 6838.37 MiB/sec @ 3 ghz -Alignment 5 - 2.395 bytes/cycle - 6851.18 MiB/sec @ 3 ghz -Alignment 4 - 2.395 bytes/cycle - 6851.53 MiB/sec @ 3 ghz -Alignment 3 - 2.396 bytes/cycle - 6854.83 MiB/sec @ 3 ghz -Alignment 2 - 2.396 bytes/cycle - 6855.92 MiB/sec @ 3 ghz -Alignment 1 - 2.400 bytes/cycle - 6865.29 MiB/sec @ 3 ghz -Alignment 0 - 2.468 bytes/cycle - 7061.69 MiB/sec @ 3 ghz -Average - 2.404 bytes/cycle - 6878.88 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 250.02 cycles/hash -Small key speed test - 2-byte keys - 250.61 cycles/hash -Small key speed test - 3-byte keys - 250.55 cycles/hash -Small key speed test - 4-byte keys - 152.65 cycles/hash -Small key speed test - 5-byte keys - 250.58 cycles/hash -Small key speed test - 6-byte keys - 249.75 cycles/hash -Small key speed test - 7-byte keys - 250.13 cycles/hash -Small key speed test - 8-byte keys - 171.31 cycles/hash -Small key speed test - 9-byte keys - 250.75 cycles/hash -Small key speed test - 10-byte keys - 250.79 cycles/hash -Small key speed test - 11-byte keys - 250.41 cycles/hash -Small key speed test - 12-byte keys - 175.63 cycles/hash -Small key speed test - 13-byte keys - 251.13 cycles/hash -Small key speed test - 14-byte keys - 251.28 cycles/hash -Small key speed test - 15-byte keys - 251.46 cycles/hash -Small key speed test - 16-byte keys - 182.44 cycles/hash -Small key speed test - 17-byte keys - 251.04 cycles/hash -Small key speed test - 18-byte keys - 250.75 cycles/hash -Small key speed test - 19-byte keys - 250.76 cycles/hash -Small key speed test - 20-byte keys - 176.93 cycles/hash -Small key speed test - 21-byte keys - 251.83 cycles/hash -Small key speed test - 22-byte keys - 251.76 cycles/hash -Small key speed test - 23-byte keys - 251.61 cycles/hash -Small key speed test - 24-byte keys - 178.48 cycles/hash -Small key speed test - 25-byte keys - 248.90 cycles/hash -Small key speed test - 26-byte keys - 249.91 cycles/hash -Small key speed test - 27-byte keys - 250.15 cycles/hash -Small key speed test - 28-byte keys - 181.94 cycles/hash -Small key speed test - 29-byte keys - 249.90 cycles/hash -Small key speed test - 30-byte keys - 250.04 cycles/hash -Small key speed test - 31-byte keys - 250.27 cycles/hash -Average 233.347 cycles/hash +Alignment 7 - 2.454 bytes/cycle - 7021.41 MiB/sec @ 3 ghz +Alignment 6 - 2.455 bytes/cycle - 7022.40 MiB/sec @ 3 ghz +Alignment 5 - 2.455 bytes/cycle - 7024.99 MiB/sec @ 3 ghz +Alignment 4 - 2.453 bytes/cycle - 7017.58 MiB/sec @ 3 ghz +Alignment 3 - 2.454 bytes/cycle - 7022.11 MiB/sec @ 3 ghz +Alignment 2 - 2.457 bytes/cycle - 7029.53 MiB/sec @ 3 ghz +Alignment 1 - 2.465 bytes/cycle - 7051.99 MiB/sec @ 3 ghz +Alignment 0 - 2.535 bytes/cycle - 7253.13 MiB/sec @ 3 ghz +Average - 2.466 bytes/cycle - 7055.39 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 245.88 cycles/hash +Small key speed test - 2-byte keys - 245.55 cycles/hash +Small key speed test - 3-byte keys - 245.60 cycles/hash +Small key speed test - 4-byte keys - 151.87 cycles/hash +Small key speed test - 5-byte keys - 245.53 cycles/hash +Small key speed test - 6-byte keys - 245.42 cycles/hash +Small key speed test - 7-byte keys - 245.54 cycles/hash +Small key speed test - 8-byte keys - 168.33 cycles/hash +Small key speed test - 9-byte keys - 250.90 cycles/hash +Small key speed test - 10-byte keys - 248.87 cycles/hash +Small key speed test - 11-byte keys - 250.08 cycles/hash +Small key speed test - 12-byte keys - 176.86 cycles/hash +Small key speed test - 13-byte keys - 251.07 cycles/hash +Small key speed test - 14-byte keys - 250.94 cycles/hash +Small key speed test - 15-byte keys - 251.22 cycles/hash +Small key speed test - 16-byte keys - 162.10 cycles/hash +Small key speed test - 17-byte keys - 250.97 cycles/hash +Small key speed test - 18-byte keys - 250.87 cycles/hash +Small key speed test - 19-byte keys - 250.83 cycles/hash +Small key speed test - 20-byte keys - 176.79 cycles/hash +Small key speed test - 21-byte keys - 251.75 cycles/hash +Small key speed test - 22-byte keys - 251.68 cycles/hash +Small key speed test - 23-byte keys - 251.73 cycles/hash +Small key speed test - 24-byte keys - 163.95 cycles/hash +Small key speed test - 25-byte keys - 249.64 cycles/hash +Small key speed test - 26-byte keys - 250.66 cycles/hash +Small key speed test - 27-byte keys - 251.71 cycles/hash +Small key speed test - 28-byte keys - 181.58 cycles/hash +Small key speed test - 29-byte keys - 249.94 cycles/hash +Small key speed test - 30-byte keys - 250.46 cycles/hash +Small key speed test - 31-byte keys - 249.99 cycles/hash +Small key speed test - 32-byte keys - 173.20 cycles/hash +Average 229.422 cycles/hash +Average, weighted by key length freq. 230.685 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 209.190 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/farsh256.txt b/doc/farsh256.txt index 3eeec31f..e84bf619 100644 --- a/doc/farsh256.txt +++ b/doc/farsh256.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x16334163d08c - 0x16334163d020). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.207 bytes/cycle - 3453.89 MiB/sec @ 3 ghz -Alignment 6 - 1.208 bytes/cycle - 3456.01 MiB/sec @ 3 ghz -Alignment 5 - 1.206 bytes/cycle - 3451.24 MiB/sec @ 3 ghz -Alignment 4 - 1.208 bytes/cycle - 3455.63 MiB/sec @ 3 ghz -Alignment 3 - 1.208 bytes/cycle - 3457.40 MiB/sec @ 3 ghz -Alignment 2 - 1.208 bytes/cycle - 3455.19 MiB/sec @ 3 ghz -Alignment 1 - 1.210 bytes/cycle - 3460.57 MiB/sec @ 3 ghz -Alignment 0 - 1.240 bytes/cycle - 3549.03 MiB/sec @ 3 ghz -Average - 1.212 bytes/cycle - 3467.37 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 488.07 cycles/hash -Small key speed test - 2-byte keys - 484.00 cycles/hash -Small key speed test - 3-byte keys - 484.00 cycles/hash -Small key speed test - 4-byte keys - 234.68 cycles/hash -Small key speed test - 5-byte keys - 485.00 cycles/hash -Small key speed test - 6-byte keys - 485.00 cycles/hash -Small key speed test - 7-byte keys - 485.18 cycles/hash -Small key speed test - 8-byte keys - 284.76 cycles/hash -Small key speed test - 9-byte keys - 484.90 cycles/hash -Small key speed test - 10-byte keys - 482.58 cycles/hash -Small key speed test - 11-byte keys - 482.78 cycles/hash -Small key speed test - 12-byte keys - 288.02 cycles/hash -Small key speed test - 13-byte keys - 485.53 cycles/hash -Small key speed test - 14-byte keys - 485.53 cycles/hash -Small key speed test - 15-byte keys - 483.95 cycles/hash -Small key speed test - 16-byte keys - 289.23 cycles/hash -Small key speed test - 17-byte keys - 485.62 cycles/hash -Small key speed test - 18-byte keys - 485.28 cycles/hash -Small key speed test - 19-byte keys - 485.21 cycles/hash -Small key speed test - 20-byte keys - 283.09 cycles/hash -Small key speed test - 21-byte keys - 486.77 cycles/hash -Small key speed test - 22-byte keys - 486.62 cycles/hash -Small key speed test - 23-byte keys - 485.95 cycles/hash -Small key speed test - 24-byte keys - 286.20 cycles/hash -Small key speed test - 25-byte keys - 483.07 cycles/hash -Small key speed test - 26-byte keys - 486.12 cycles/hash -Small key speed test - 27-byte keys - 486.36 cycles/hash -Small key speed test - 28-byte keys - 292.59 cycles/hash -Small key speed test - 29-byte keys - 485.86 cycles/hash -Small key speed test - 30-byte keys - 485.77 cycles/hash -Small key speed test - 31-byte keys - 534.68 cycles/hash -Average 440.400 cycles/hash +Alignment 7 - 1.222 bytes/cycle - 3495.90 MiB/sec @ 3 ghz +Alignment 6 - 1.225 bytes/cycle - 3504.78 MiB/sec @ 3 ghz +Alignment 5 - 1.203 bytes/cycle - 3442.93 MiB/sec @ 3 ghz +Alignment 4 - 1.201 bytes/cycle - 3435.55 MiB/sec @ 3 ghz +Alignment 3 - 1.202 bytes/cycle - 3439.89 MiB/sec @ 3 ghz +Alignment 2 - 1.205 bytes/cycle - 3448.45 MiB/sec @ 3 ghz +Alignment 1 - 1.200 bytes/cycle - 3432.51 MiB/sec @ 3 ghz +Alignment 0 - 1.234 bytes/cycle - 3530.04 MiB/sec @ 3 ghz +Average - 1.212 bytes/cycle - 3466.26 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 501.35 cycles/hash +Small key speed test - 2-byte keys - 493.43 cycles/hash +Small key speed test - 3-byte keys - 493.42 cycles/hash +Small key speed test - 4-byte keys - 252.12 cycles/hash +Small key speed test - 5-byte keys - 494.10 cycles/hash +Small key speed test - 6-byte keys - 493.81 cycles/hash +Small key speed test - 7-byte keys - 493.82 cycles/hash +Small key speed test - 8-byte keys - 303.45 cycles/hash +Small key speed test - 9-byte keys - 492.68 cycles/hash +Small key speed test - 10-byte keys - 491.77 cycles/hash +Small key speed test - 11-byte keys - 491.75 cycles/hash +Small key speed test - 12-byte keys - 271.40 cycles/hash +Small key speed test - 13-byte keys - 493.81 cycles/hash +Small key speed test - 14-byte keys - 493.76 cycles/hash +Small key speed test - 15-byte keys - 493.76 cycles/hash +Small key speed test - 16-byte keys - 320.59 cycles/hash +Small key speed test - 17-byte keys - 494.60 cycles/hash +Small key speed test - 18-byte keys - 491.45 cycles/hash +Small key speed test - 19-byte keys - 491.42 cycles/hash +Small key speed test - 20-byte keys - 302.87 cycles/hash +Small key speed test - 21-byte keys - 494.92 cycles/hash +Small key speed test - 22-byte keys - 494.91 cycles/hash +Small key speed test - 23-byte keys - 495.01 cycles/hash +Small key speed test - 24-byte keys - 303.04 cycles/hash +Small key speed test - 25-byte keys - 495.05 cycles/hash +Small key speed test - 26-byte keys - 500.26 cycles/hash +Small key speed test - 27-byte keys - 500.26 cycles/hash +Small key speed test - 28-byte keys - 303.50 cycles/hash +Small key speed test - 29-byte keys - 499.39 cycles/hash +Small key speed test - 30-byte keys - 499.43 cycles/hash +Small key speed test - 31-byte keys - 499.44 cycles/hash +Small key speed test - 32-byte keys - 291.16 cycles/hash +Average 444.742 cycles/hash +Average, weighted by key length freq. 445.013 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 408.589 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/farsh32.txt b/doc/farsh32.txt index bc34f644..7a6a40b5 100644 --- a/doc/farsh32.txt +++ b/doc/farsh32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x15ec7a2aec18 - 0x15ec7a2aebd0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 9.402 bytes/cycle - 26898.92 MiB/sec @ 3 ghz -Alignment 6 - 9.391 bytes/cycle - 26867.86 MiB/sec @ 3 ghz -Alignment 5 - 9.400 bytes/cycle - 26893.31 MiB/sec @ 3 ghz -Alignment 4 - 9.394 bytes/cycle - 26877.70 MiB/sec @ 3 ghz -Alignment 3 - 9.428 bytes/cycle - 26974.40 MiB/sec @ 3 ghz -Alignment 2 - 9.427 bytes/cycle - 26970.26 MiB/sec @ 3 ghz -Alignment 1 - 9.428 bytes/cycle - 26974.15 MiB/sec @ 3 ghz -Alignment 0 - 9.734 bytes/cycle - 27849.26 MiB/sec @ 3 ghz -Average - 9.451 bytes/cycle - 27038.23 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 71.00 cycles/hash -Small key speed test - 2-byte keys - 71.00 cycles/hash -Small key speed test - 3-byte keys - 71.06 cycles/hash -Small key speed test - 4-byte keys - 53.21 cycles/hash -Small key speed test - 5-byte keys - 71.27 cycles/hash -Small key speed test - 6-byte keys - 71.29 cycles/hash -Small key speed test - 7-byte keys - 71.30 cycles/hash -Small key speed test - 8-byte keys - 47.11 cycles/hash -Small key speed test - 9-byte keys - 72.25 cycles/hash -Small key speed test - 10-byte keys - 72.00 cycles/hash -Small key speed test - 11-byte keys - 72.00 cycles/hash -Small key speed test - 12-byte keys - 53.00 cycles/hash -Small key speed test - 13-byte keys - 72.00 cycles/hash -Small key speed test - 14-byte keys - 72.00 cycles/hash -Small key speed test - 15-byte keys - 72.00 cycles/hash -Small key speed test - 16-byte keys - 48.16 cycles/hash -Small key speed test - 17-byte keys - 71.00 cycles/hash -Small key speed test - 18-byte keys - 71.46 cycles/hash -Small key speed test - 19-byte keys - 71.00 cycles/hash -Small key speed test - 20-byte keys - 54.00 cycles/hash -Small key speed test - 21-byte keys - 71.50 cycles/hash -Small key speed test - 22-byte keys - 71.00 cycles/hash -Small key speed test - 23-byte keys - 71.45 cycles/hash -Small key speed test - 24-byte keys - 50.00 cycles/hash -Small key speed test - 25-byte keys - 71.00 cycles/hash -Small key speed test - 26-byte keys - 71.23 cycles/hash -Small key speed test - 27-byte keys - 71.32 cycles/hash -Small key speed test - 28-byte keys - 54.00 cycles/hash -Small key speed test - 29-byte keys - 71.15 cycles/hash -Small key speed test - 30-byte keys - 71.29 cycles/hash -Small key speed test - 31-byte keys - 71.23 cycles/hash -Average 66.879 cycles/hash +Alignment 7 - 9.526 bytes/cycle - 27254.50 MiB/sec @ 3 ghz +Alignment 6 - 9.602 bytes/cycle - 27472.40 MiB/sec @ 3 ghz +Alignment 5 - 9.614 bytes/cycle - 27505.64 MiB/sec @ 3 ghz +Alignment 4 - 9.610 bytes/cycle - 27495.79 MiB/sec @ 3 ghz +Alignment 3 - 9.618 bytes/cycle - 27518.27 MiB/sec @ 3 ghz +Alignment 2 - 9.599 bytes/cycle - 27462.08 MiB/sec @ 3 ghz +Alignment 1 - 9.615 bytes/cycle - 27509.39 MiB/sec @ 3 ghz +Alignment 0 - 9.945 bytes/cycle - 28453.03 MiB/sec @ 3 ghz +Average - 9.641 bytes/cycle - 27583.89 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 70.79 cycles/hash +Small key speed test - 2-byte keys - 70.00 cycles/hash +Small key speed test - 3-byte keys - 70.00 cycles/hash +Small key speed test - 4-byte keys - 52.82 cycles/hash +Small key speed test - 5-byte keys - 71.00 cycles/hash +Small key speed test - 6-byte keys - 70.99 cycles/hash +Small key speed test - 7-byte keys - 70.80 cycles/hash +Small key speed test - 8-byte keys - 46.00 cycles/hash +Small key speed test - 9-byte keys - 70.99 cycles/hash +Small key speed test - 10-byte keys - 70.98 cycles/hash +Small key speed test - 11-byte keys - 70.98 cycles/hash +Small key speed test - 12-byte keys - 51.98 cycles/hash +Small key speed test - 13-byte keys - 71.00 cycles/hash +Small key speed test - 14-byte keys - 71.00 cycles/hash +Small key speed test - 15-byte keys - 71.00 cycles/hash +Small key speed test - 16-byte keys - 47.91 cycles/hash +Small key speed test - 17-byte keys - 70.29 cycles/hash +Small key speed test - 18-byte keys - 70.00 cycles/hash +Small key speed test - 19-byte keys - 70.00 cycles/hash +Small key speed test - 20-byte keys - 53.00 cycles/hash +Small key speed test - 21-byte keys - 70.00 cycles/hash +Small key speed test - 22-byte keys - 70.00 cycles/hash +Small key speed test - 23-byte keys - 70.00 cycles/hash +Small key speed test - 24-byte keys - 49.26 cycles/hash +Small key speed test - 25-byte keys - 69.93 cycles/hash +Small key speed test - 26-byte keys - 70.00 cycles/hash +Small key speed test - 27-byte keys - 70.00 cycles/hash +Small key speed test - 28-byte keys - 53.00 cycles/hash +Small key speed test - 29-byte keys - 70.00 cycles/hash +Small key speed test - 30-byte keys - 70.00 cycles/hash +Small key speed test - 31-byte keys - 70.00 cycles/hash +Small key speed test - 32-byte keys - 57.00 cycles/hash +Average 65.647 cycles/hash +Average, weighted by key length freq. 65.522 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 60.163 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/farsh64.txt b/doc/farsh64.txt index 240b081c..de8dbd73 100644 --- a/doc/farsh64.txt +++ b/doc/farsh64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x15f91bde23a0 - 0x15f91bde2334). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 4.799 bytes/cycle - 13730.11 MiB/sec @ 3 ghz -Alignment 6 - 4.816 bytes/cycle - 13779.55 MiB/sec @ 3 ghz -Alignment 5 - 4.819 bytes/cycle - 13787.73 MiB/sec @ 3 ghz -Alignment 4 - 4.819 bytes/cycle - 13786.81 MiB/sec @ 3 ghz -Alignment 3 - 4.820 bytes/cycle - 13791.06 MiB/sec @ 3 ghz -Alignment 2 - 4.816 bytes/cycle - 13777.29 MiB/sec @ 3 ghz -Alignment 1 - 4.819 bytes/cycle - 13785.86 MiB/sec @ 3 ghz -Alignment 0 - 4.962 bytes/cycle - 14196.19 MiB/sec @ 3 ghz -Average - 4.834 bytes/cycle - 13829.32 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 126.60 cycles/hash -Small key speed test - 2-byte keys - 126.59 cycles/hash -Small key speed test - 3-byte keys - 126.63 cycles/hash -Small key speed test - 4-byte keys - 57.31 cycles/hash -Small key speed test - 5-byte keys - 126.69 cycles/hash -Small key speed test - 6-byte keys - 126.60 cycles/hash -Small key speed test - 7-byte keys - 126.66 cycles/hash -Small key speed test - 8-byte keys - 66.96 cycles/hash -Small key speed test - 9-byte keys - 126.85 cycles/hash -Small key speed test - 10-byte keys - 126.93 cycles/hash -Small key speed test - 11-byte keys - 126.97 cycles/hash -Small key speed test - 12-byte keys - 66.98 cycles/hash -Small key speed test - 13-byte keys - 126.21 cycles/hash -Small key speed test - 14-byte keys - 125.29 cycles/hash -Small key speed test - 15-byte keys - 125.17 cycles/hash -Small key speed test - 16-byte keys - 70.30 cycles/hash -Small key speed test - 17-byte keys - 124.00 cycles/hash -Small key speed test - 18-byte keys - 124.85 cycles/hash -Small key speed test - 19-byte keys - 124.84 cycles/hash -Small key speed test - 20-byte keys - 67.71 cycles/hash -Small key speed test - 21-byte keys - 124.44 cycles/hash -Small key speed test - 22-byte keys - 124.43 cycles/hash -Small key speed test - 23-byte keys - 124.41 cycles/hash -Small key speed test - 24-byte keys - 69.66 cycles/hash -Small key speed test - 25-byte keys - 124.48 cycles/hash -Small key speed test - 26-byte keys - 125.41 cycles/hash -Small key speed test - 27-byte keys - 125.00 cycles/hash -Small key speed test - 28-byte keys - 71.03 cycles/hash -Small key speed test - 29-byte keys - 125.71 cycles/hash -Small key speed test - 30-byte keys - 125.84 cycles/hash -Small key speed test - 31-byte keys - 125.82 cycles/hash -Average 112.463 cycles/hash +Alignment 7 - 4.712 bytes/cycle - 13482.00 MiB/sec @ 3 ghz +Alignment 6 - 4.700 bytes/cycle - 13446.03 MiB/sec @ 3 ghz +Alignment 5 - 4.733 bytes/cycle - 13540.01 MiB/sec @ 3 ghz +Alignment 4 - 4.725 bytes/cycle - 13518.51 MiB/sec @ 3 ghz +Alignment 3 - 4.730 bytes/cycle - 13533.23 MiB/sec @ 3 ghz +Alignment 2 - 4.726 bytes/cycle - 13522.19 MiB/sec @ 3 ghz +Alignment 1 - 4.726 bytes/cycle - 13521.72 MiB/sec @ 3 ghz +Alignment 0 - 4.860 bytes/cycle - 13905.80 MiB/sec @ 3 ghz +Average - 4.739 bytes/cycle - 13558.69 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 127.77 cycles/hash +Small key speed test - 2-byte keys - 127.27 cycles/hash +Small key speed test - 3-byte keys - 127.27 cycles/hash +Small key speed test - 4-byte keys - 58.00 cycles/hash +Small key speed test - 5-byte keys - 128.00 cycles/hash +Small key speed test - 6-byte keys - 128.69 cycles/hash +Small key speed test - 7-byte keys - 128.49 cycles/hash +Small key speed test - 8-byte keys - 72.00 cycles/hash +Small key speed test - 9-byte keys - 127.53 cycles/hash +Small key speed test - 10-byte keys - 128.66 cycles/hash +Small key speed test - 11-byte keys - 128.65 cycles/hash +Small key speed test - 12-byte keys - 68.19 cycles/hash +Small key speed test - 13-byte keys - 128.66 cycles/hash +Small key speed test - 14-byte keys - 128.66 cycles/hash +Small key speed test - 15-byte keys - 128.60 cycles/hash +Small key speed test - 16-byte keys - 77.86 cycles/hash +Small key speed test - 17-byte keys - 127.65 cycles/hash +Small key speed test - 18-byte keys - 128.47 cycles/hash +Small key speed test - 19-byte keys - 128.17 cycles/hash +Small key speed test - 20-byte keys - 70.00 cycles/hash +Small key speed test - 21-byte keys - 127.70 cycles/hash +Small key speed test - 22-byte keys - 127.64 cycles/hash +Small key speed test - 23-byte keys - 127.69 cycles/hash +Small key speed test - 24-byte keys - 72.78 cycles/hash +Small key speed test - 25-byte keys - 127.65 cycles/hash +Small key speed test - 26-byte keys - 128.64 cycles/hash +Small key speed test - 27-byte keys - 128.69 cycles/hash +Small key speed test - 28-byte keys - 73.00 cycles/hash +Small key speed test - 29-byte keys - 128.77 cycles/hash +Small key speed test - 30-byte keys - 128.71 cycles/hash +Small key speed test - 31-byte keys - 128.69 cycles/hash +Small key speed test - 32-byte keys - 71.26 cycles/hash +Average 113.744 cycles/hash +Average, weighted by key length freq. 114.299 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 103.639 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/fasthash32.txt b/doc/fasthash32.txt index 4b28e807..8be1b096 100644 --- a/doc/fasthash32.txt +++ b/doc/fasthash32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x130f78472364c - 0x130f784723604). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.142 bytes/cycle - 6129.39 MiB/sec @ 3 ghz -Alignment 6 - 2.142 bytes/cycle - 6128.06 MiB/sec @ 3 ghz -Alignment 5 - 2.142 bytes/cycle - 6127.65 MiB/sec @ 3 ghz -Alignment 4 - 2.142 bytes/cycle - 6127.95 MiB/sec @ 3 ghz -Alignment 3 - 2.142 bytes/cycle - 6128.70 MiB/sec @ 3 ghz -Alignment 2 - 2.142 bytes/cycle - 6128.12 MiB/sec @ 3 ghz -Alignment 1 - 2.141 bytes/cycle - 6126.02 MiB/sec @ 3 ghz -Alignment 0 - 2.143 bytes/cycle - 6130.32 MiB/sec @ 3 ghz -Average - 2.142 bytes/cycle - 6128.28 MiB/sec @ 3 ghz +Alignment 7 - 2.138 bytes/cycle - 6115.74 MiB/sec @ 3 ghz +Alignment 6 - 2.134 bytes/cycle - 6105.24 MiB/sec @ 3 ghz +Alignment 5 - 2.133 bytes/cycle - 6103.89 MiB/sec @ 3 ghz +Alignment 4 - 2.138 bytes/cycle - 6115.69 MiB/sec @ 3 ghz +Alignment 3 - 2.129 bytes/cycle - 6089.86 MiB/sec @ 3 ghz +Alignment 2 - 2.134 bytes/cycle - 6105.17 MiB/sec @ 3 ghz +Alignment 1 - 2.138 bytes/cycle - 6116.66 MiB/sec @ 3 ghz +Alignment 0 - 2.134 bytes/cycle - 6104.14 MiB/sec @ 3 ghz +Average - 2.135 bytes/cycle - 6107.05 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 34.00 cycles/hash Small key speed test - 2-byte keys - 35.00 cycles/hash -Small key speed test - 3-byte keys - 36.63 cycles/hash -Small key speed test - 4-byte keys - 37.00 cycles/hash -Small key speed test - 5-byte keys - 37.99 cycles/hash +Small key speed test - 3-byte keys - 36.99 cycles/hash +Small key speed test - 4-byte keys - 37.25 cycles/hash +Small key speed test - 5-byte keys - 38.00 cycles/hash Small key speed test - 6-byte keys - 39.00 cycles/hash -Small key speed test - 7-byte keys - 39.12 cycles/hash +Small key speed test - 7-byte keys - 39.00 cycles/hash Small key speed test - 8-byte keys - 32.00 cycles/hash -Small key speed test - 9-byte keys - 36.91 cycles/hash -Small key speed test - 10-byte keys - 37.64 cycles/hash +Small key speed test - 9-byte keys - 37.00 cycles/hash +Small key speed test - 10-byte keys - 37.87 cycles/hash Small key speed test - 11-byte keys - 38.00 cycles/hash -Small key speed test - 12-byte keys - 38.97 cycles/hash +Small key speed test - 12-byte keys - 39.00 cycles/hash Small key speed test - 13-byte keys - 39.00 cycles/hash -Small key speed test - 14-byte keys - 40.59 cycles/hash -Small key speed test - 15-byte keys - 41.00 cycles/hash +Small key speed test - 14-byte keys - 41.00 cycles/hash +Small key speed test - 15-byte keys - 41.92 cycles/hash Small key speed test - 16-byte keys - 36.00 cycles/hash -Small key speed test - 17-byte keys - 40.48 cycles/hash -Small key speed test - 18-byte keys - 40.74 cycles/hash -Small key speed test - 19-byte keys - 40.78 cycles/hash +Small key speed test - 17-byte keys - 40.98 cycles/hash +Small key speed test - 18-byte keys - 40.99 cycles/hash +Small key speed test - 19-byte keys - 41.00 cycles/hash Small key speed test - 20-byte keys - 41.00 cycles/hash -Small key speed test - 21-byte keys - 42.51 cycles/hash -Small key speed test - 22-byte keys - 43.15 cycles/hash -Small key speed test - 23-byte keys - 43.86 cycles/hash -Small key speed test - 24-byte keys - 39.65 cycles/hash +Small key speed test - 21-byte keys - 42.22 cycles/hash +Small key speed test - 22-byte keys - 43.23 cycles/hash +Small key speed test - 23-byte keys - 44.00 cycles/hash +Small key speed test - 24-byte keys - 39.93 cycles/hash Small key speed test - 25-byte keys - 44.00 cycles/hash -Small key speed test - 26-byte keys - 44.00 cycles/hash -Small key speed test - 27-byte keys - 44.57 cycles/hash +Small key speed test - 26-byte keys - 44.19 cycles/hash +Small key speed test - 27-byte keys - 44.42 cycles/hash Small key speed test - 28-byte keys - 45.00 cycles/hash -Small key speed test - 29-byte keys - 46.23 cycles/hash -Small key speed test - 30-byte keys - 46.85 cycles/hash -Small key speed test - 31-byte keys - 47.72 cycles/hash -Average 40.303 cycles/hash +Small key speed test - 29-byte keys - 46.00 cycles/hash +Small key speed test - 30-byte keys - 47.00 cycles/hash +Small key speed test - 31-byte keys - 47.59 cycles/hash +Small key speed test - 32-byte keys - 43.00 cycles/hash +Average 40.487 cycles/hash +Average, weighted by key length freq. 40.238 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 37.102 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/fasthash64.txt b/doc/fasthash64.txt index 1cebbb80..ce0b029c 100644 --- a/doc/fasthash64.txt +++ b/doc/fasthash64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x13100ee6d2150 - 0x13100ee6d20e4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.188 bytes/cycle - 6259.21 MiB/sec @ 3 ghz -Alignment 6 - 2.190 bytes/cycle - 6264.25 MiB/sec @ 3 ghz -Alignment 5 - 2.193 bytes/cycle - 6275.10 MiB/sec @ 3 ghz -Alignment 4 - 2.188 bytes/cycle - 6259.30 MiB/sec @ 3 ghz -Alignment 3 - 1.822 bytes/cycle - 5213.06 MiB/sec @ 3 ghz -Alignment 2 - 1.777 bytes/cycle - 5083.25 MiB/sec @ 3 ghz -Alignment 1 - 1.784 bytes/cycle - 5104.81 MiB/sec @ 3 ghz -Alignment 0 - 2.129 bytes/cycle - 6092.35 MiB/sec @ 3 ghz -Average - 2.034 bytes/cycle - 5818.92 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 31.98 cycles/hash -Small key speed test - 2-byte keys - 34.00 cycles/hash -Small key speed test - 3-byte keys - 34.00 cycles/hash -Small key speed test - 4-byte keys - 36.00 cycles/hash -Small key speed test - 5-byte keys - 36.66 cycles/hash -Small key speed test - 6-byte keys - 37.00 cycles/hash -Small key speed test - 7-byte keys - 38.00 cycles/hash +Alignment 7 - 2.194 bytes/cycle - 6276.55 MiB/sec @ 3 ghz +Alignment 6 - 2.198 bytes/cycle - 6288.42 MiB/sec @ 3 ghz +Alignment 5 - 1.777 bytes/cycle - 5083.27 MiB/sec @ 3 ghz +Alignment 4 - 1.777 bytes/cycle - 5083.29 MiB/sec @ 3 ghz +Alignment 3 - 1.777 bytes/cycle - 5083.29 MiB/sec @ 3 ghz +Alignment 2 - 1.777 bytes/cycle - 5083.30 MiB/sec @ 3 ghz +Alignment 1 - 1.953 bytes/cycle - 5586.71 MiB/sec @ 3 ghz +Alignment 0 - 2.208 bytes/cycle - 6316.02 MiB/sec @ 3 ghz +Average - 1.957 bytes/cycle - 5600.11 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 30.60 cycles/hash +Small key speed test - 2-byte keys - 32.68 cycles/hash +Small key speed test - 3-byte keys - 33.00 cycles/hash +Small key speed test - 4-byte keys - 34.12 cycles/hash +Small key speed test - 5-byte keys - 35.00 cycles/hash +Small key speed test - 6-byte keys - 36.00 cycles/hash +Small key speed test - 7-byte keys - 38.66 cycles/hash Small key speed test - 8-byte keys - 30.00 cycles/hash -Small key speed test - 9-byte keys - 35.56 cycles/hash -Small key speed test - 10-byte keys - 36.00 cycles/hash -Small key speed test - 11-byte keys - 36.12 cycles/hash -Small key speed test - 12-byte keys - 37.00 cycles/hash -Small key speed test - 13-byte keys - 38.00 cycles/hash +Small key speed test - 9-byte keys - 35.00 cycles/hash +Small key speed test - 10-byte keys - 35.00 cycles/hash +Small key speed test - 11-byte keys - 36.00 cycles/hash +Small key speed test - 12-byte keys - 36.83 cycles/hash +Small key speed test - 13-byte keys - 37.79 cycles/hash Small key speed test - 14-byte keys - 39.00 cycles/hash Small key speed test - 15-byte keys - 39.00 cycles/hash -Small key speed test - 16-byte keys - 34.00 cycles/hash -Small key speed test - 17-byte keys - 39.00 cycles/hash -Small key speed test - 18-byte keys - 39.00 cycles/hash -Small key speed test - 19-byte keys - 39.00 cycles/hash -Small key speed test - 20-byte keys - 39.69 cycles/hash -Small key speed test - 21-byte keys - 40.55 cycles/hash -Small key speed test - 22-byte keys - 42.00 cycles/hash -Small key speed test - 23-byte keys - 42.88 cycles/hash -Small key speed test - 24-byte keys - 38.00 cycles/hash -Small key speed test - 25-byte keys - 42.82 cycles/hash -Small key speed test - 26-byte keys - 42.98 cycles/hash -Small key speed test - 27-byte keys - 43.00 cycles/hash -Small key speed test - 28-byte keys - 43.20 cycles/hash -Small key speed test - 29-byte keys - 44.45 cycles/hash -Small key speed test - 30-byte keys - 45.31 cycles/hash -Small key speed test - 31-byte keys - 45.52 cycles/hash -Average 38.701 cycles/hash +Small key speed test - 16-byte keys - 33.97 cycles/hash +Small key speed test - 17-byte keys - 38.00 cycles/hash +Small key speed test - 18-byte keys - 38.12 cycles/hash +Small key speed test - 19-byte keys - 38.75 cycles/hash +Small key speed test - 20-byte keys - 39.00 cycles/hash +Small key speed test - 21-byte keys - 39.00 cycles/hash +Small key speed test - 22-byte keys - 41.00 cycles/hash +Small key speed test - 23-byte keys - 41.91 cycles/hash +Small key speed test - 24-byte keys - 37.00 cycles/hash +Small key speed test - 25-byte keys - 41.96 cycles/hash +Small key speed test - 26-byte keys - 42.00 cycles/hash +Small key speed test - 27-byte keys - 42.00 cycles/hash +Small key speed test - 28-byte keys - 42.88 cycles/hash +Small key speed test - 29-byte keys - 43.00 cycles/hash +Small key speed test - 30-byte keys - 44.00 cycles/hash +Small key speed test - 31-byte keys - 44.96 cycles/hash +Small key speed test - 32-byte keys - 41.00 cycles/hash +Average 38.038 cycles/hash +Average, weighted by key length freq. 37.940 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 35.034 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/fibonacci.txt b/doc/fibonacci.txt index 7df9118a..1886f733 100644 --- a/doc/fibonacci.txt +++ b/doc/fibonacci.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x13edff74b478 - 0x13edff74b430). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5.892 bytes/cycle - 16857.51 MiB/sec @ 3 ghz -Alignment 6 - 5.908 bytes/cycle - 16902.60 MiB/sec @ 3 ghz -Alignment 5 - 5.912 bytes/cycle - 16913.41 MiB/sec @ 3 ghz -Alignment 4 - 5.903 bytes/cycle - 16889.79 MiB/sec @ 3 ghz -Alignment 3 - 5.911 bytes/cycle - 16912.23 MiB/sec @ 3 ghz -Alignment 2 - 5.912 bytes/cycle - 16914.28 MiB/sec @ 3 ghz -Alignment 1 - 5.903 bytes/cycle - 16888.23 MiB/sec @ 3 ghz -Alignment 0 - 5.854 bytes/cycle - 16748.55 MiB/sec @ 3 ghz -Average - 5.899 bytes/cycle - 16878.32 MiB/sec @ 3 ghz +Alignment 7 - 5.386 bytes/cycle - 15410.37 MiB/sec @ 3 ghz +Alignment 6 - 5.193 bytes/cycle - 14858.71 MiB/sec @ 3 ghz +Alignment 5 - 5.448 bytes/cycle - 15586.59 MiB/sec @ 3 ghz +Alignment 4 - 5.852 bytes/cycle - 16743.10 MiB/sec @ 3 ghz +Alignment 3 - 5.442 bytes/cycle - 15568.94 MiB/sec @ 3 ghz +Alignment 2 - 5.264 bytes/cycle - 15060.79 MiB/sec @ 3 ghz +Alignment 1 - 5.286 bytes/cycle - 15122.96 MiB/sec @ 3 ghz +Alignment 0 - 5.217 bytes/cycle - 14925.50 MiB/sec @ 3 ghz +Average - 5.386 bytes/cycle - 15409.62 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 17.00 cycles/hash -Small key speed test - 2-byte keys - 18.97 cycles/hash -Small key speed test - 3-byte keys - 20.16 cycles/hash -Small key speed test - 4-byte keys - 21.86 cycles/hash -Small key speed test - 5-byte keys - 22.55 cycles/hash +Small key speed test - 2-byte keys - 18.00 cycles/hash +Small key speed test - 3-byte keys - 20.00 cycles/hash +Small key speed test - 4-byte keys - 21.00 cycles/hash +Small key speed test - 5-byte keys - 22.25 cycles/hash Small key speed test - 6-byte keys - 24.00 cycles/hash -Small key speed test - 7-byte keys - 26.00 cycles/hash +Small key speed test - 7-byte keys - 25.00 cycles/hash Small key speed test - 8-byte keys - 17.00 cycles/hash -Small key speed test - 9-byte keys - 19.00 cycles/hash +Small key speed test - 9-byte keys - 18.75 cycles/hash Small key speed test - 10-byte keys - 20.00 cycles/hash -Small key speed test - 11-byte keys - 21.92 cycles/hash +Small key speed test - 11-byte keys - 21.53 cycles/hash Small key speed test - 12-byte keys - 23.00 cycles/hash -Small key speed test - 13-byte keys - 25.00 cycles/hash -Small key speed test - 14-byte keys - 26.00 cycles/hash -Small key speed test - 15-byte keys - 26.24 cycles/hash +Small key speed test - 13-byte keys - 24.71 cycles/hash +Small key speed test - 14-byte keys - 25.85 cycles/hash +Small key speed test - 15-byte keys - 26.00 cycles/hash Small key speed test - 16-byte keys - 18.00 cycles/hash -Small key speed test - 17-byte keys - 20.00 cycles/hash +Small key speed test - 17-byte keys - 19.70 cycles/hash Small key speed test - 18-byte keys - 21.00 cycles/hash -Small key speed test - 19-byte keys - 22.74 cycles/hash -Small key speed test - 20-byte keys - 24.53 cycles/hash -Small key speed test - 21-byte keys - 25.16 cycles/hash +Small key speed test - 19-byte keys - 23.00 cycles/hash +Small key speed test - 20-byte keys - 24.44 cycles/hash +Small key speed test - 21-byte keys - 25.00 cycles/hash Small key speed test - 22-byte keys - 26.00 cycles/hash -Small key speed test - 23-byte keys - 28.00 cycles/hash -Small key speed test - 24-byte keys - 20.20 cycles/hash +Small key speed test - 23-byte keys - 27.99 cycles/hash +Small key speed test - 24-byte keys - 20.00 cycles/hash Small key speed test - 25-byte keys - 21.00 cycles/hash -Small key speed test - 26-byte keys - 23.00 cycles/hash +Small key speed test - 26-byte keys - 22.92 cycles/hash Small key speed test - 27-byte keys - 24.00 cycles/hash Small key speed test - 28-byte keys - 25.00 cycles/hash -Small key speed test - 29-byte keys - 26.00 cycles/hash -Small key speed test - 30-byte keys - 27.83 cycles/hash -Small key speed test - 31-byte keys - 29.99 cycles/hash -Average 22.940 cycles/hash +Small key speed test - 29-byte keys - 25.00 cycles/hash +Small key speed test - 30-byte keys - 27.51 cycles/hash +Small key speed test - 31-byte keys - 29.70 cycles/hash +Small key speed test - 32-byte keys - 21.00 cycles/hash +Average 22.668 cycles/hash +Average, weighted by key length freq. 22.761 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 19.787 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/fletcher2.txt b/doc/fletcher2.txt index 98b28b2c..dc42afa1 100644 --- a/doc/fletcher2.txt +++ b/doc/fletcher2.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x14777cddb450 - 0x14777cddb3e4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5.441 bytes/cycle - 15566.77 MiB/sec @ 3 ghz -Alignment 6 - 5.449 bytes/cycle - 15591.09 MiB/sec @ 3 ghz -Alignment 5 - 5.446 bytes/cycle - 15579.88 MiB/sec @ 3 ghz -Alignment 4 - 5.449 bytes/cycle - 15588.56 MiB/sec @ 3 ghz -Alignment 3 - 5.446 bytes/cycle - 15582.16 MiB/sec @ 3 ghz -Alignment 2 - 5.448 bytes/cycle - 15587.24 MiB/sec @ 3 ghz -Alignment 1 - 5.449 bytes/cycle - 15591.13 MiB/sec @ 3 ghz -Alignment 0 - 5.360 bytes/cycle - 15334.07 MiB/sec @ 3 ghz -Average - 5.436 bytes/cycle - 15552.61 MiB/sec @ 3 ghz +Alignment 7 - 5.391 bytes/cycle - 15424.54 MiB/sec @ 3 ghz +Alignment 6 - 5.396 bytes/cycle - 15437.02 MiB/sec @ 3 ghz +Alignment 5 - 5.397 bytes/cycle - 15441.08 MiB/sec @ 3 ghz +Alignment 4 - 5.397 bytes/cycle - 15442.34 MiB/sec @ 3 ghz +Alignment 3 - 5.396 bytes/cycle - 15436.70 MiB/sec @ 3 ghz +Alignment 2 - 5.397 bytes/cycle - 15441.41 MiB/sec @ 3 ghz +Alignment 1 - 5.396 bytes/cycle - 15437.00 MiB/sec @ 3 ghz +Alignment 0 - 5.320 bytes/cycle - 15220.86 MiB/sec @ 3 ghz +Average - 5.386 bytes/cycle - 15410.12 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 15.00 cycles/hash -Small key speed test - 2-byte keys - 16.68 cycles/hash +Small key speed test - 2-byte keys - 17.00 cycles/hash Small key speed test - 3-byte keys - 18.00 cycles/hash Small key speed test - 4-byte keys - 19.00 cycles/hash Small key speed test - 5-byte keys - 21.00 cycles/hash Small key speed test - 6-byte keys - 22.00 cycles/hash -Small key speed test - 7-byte keys - 23.28 cycles/hash +Small key speed test - 7-byte keys - 24.00 cycles/hash Small key speed test - 8-byte keys - 15.00 cycles/hash Small key speed test - 9-byte keys - 16.00 cycles/hash Small key speed test - 10-byte keys - 18.00 cycles/hash Small key speed test - 11-byte keys - 19.00 cycles/hash -Small key speed test - 12-byte keys - 20.29 cycles/hash +Small key speed test - 12-byte keys - 20.97 cycles/hash Small key speed test - 13-byte keys - 22.00 cycles/hash -Small key speed test - 14-byte keys - 23.00 cycles/hash -Small key speed test - 15-byte keys - 24.27 cycles/hash +Small key speed test - 14-byte keys - 23.64 cycles/hash +Small key speed test - 15-byte keys - 24.80 cycles/hash Small key speed test - 16-byte keys - 16.00 cycles/hash -Small key speed test - 17-byte keys - 17.34 cycles/hash -Small key speed test - 18-byte keys - 18.99 cycles/hash -Small key speed test - 19-byte keys - 20.51 cycles/hash -Small key speed test - 20-byte keys - 21.76 cycles/hash +Small key speed test - 17-byte keys - 17.95 cycles/hash +Small key speed test - 18-byte keys - 19.00 cycles/hash +Small key speed test - 19-byte keys - 20.59 cycles/hash +Small key speed test - 20-byte keys - 22.00 cycles/hash Small key speed test - 21-byte keys - 23.00 cycles/hash -Small key speed test - 22-byte keys - 24.50 cycles/hash -Small key speed test - 23-byte keys - 25.95 cycles/hash -Small key speed test - 24-byte keys - 17.73 cycles/hash -Small key speed test - 25-byte keys - 18.91 cycles/hash +Small key speed test - 22-byte keys - 24.99 cycles/hash +Small key speed test - 23-byte keys - 26.00 cycles/hash +Small key speed test - 24-byte keys - 17.99 cycles/hash +Small key speed test - 25-byte keys - 19.00 cycles/hash Small key speed test - 26-byte keys - 20.00 cycles/hash Small key speed test - 27-byte keys - 21.99 cycles/hash Small key speed test - 28-byte keys - 23.00 cycles/hash Small key speed test - 29-byte keys - 24.00 cycles/hash -Small key speed test - 30-byte keys - 25.70 cycles/hash -Small key speed test - 31-byte keys - 26.99 cycles/hash -Average 20.609 cycles/hash +Small key speed test - 30-byte keys - 26.00 cycles/hash +Small key speed test - 31-byte keys - 27.00 cycles/hash +Small key speed test - 32-byte keys - 19.00 cycles/hash +Average 20.716 cycles/hash +Average, weighted by key length freq. 20.701 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 17.600 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/fletcher4.txt b/doc/fletcher4.txt index eeac0736..47d15f7a 100644 --- a/doc/fletcher4.txt +++ b/doc/fletcher4.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x147ddaca1850 - 0x147ddaca17e4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5.452 bytes/cycle - 15597.39 MiB/sec @ 3 ghz -Alignment 6 - 5.446 bytes/cycle - 15582.08 MiB/sec @ 3 ghz -Alignment 5 - 5.447 bytes/cycle - 15584.40 MiB/sec @ 3 ghz -Alignment 4 - 5.445 bytes/cycle - 15577.46 MiB/sec @ 3 ghz -Alignment 3 - 5.448 bytes/cycle - 15585.89 MiB/sec @ 3 ghz -Alignment 2 - 5.448 bytes/cycle - 15586.71 MiB/sec @ 3 ghz -Alignment 1 - 5.444 bytes/cycle - 15575.53 MiB/sec @ 3 ghz -Alignment 0 - 5.371 bytes/cycle - 15365.97 MiB/sec @ 3 ghz -Average - 5.438 bytes/cycle - 15556.93 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 15.00 cycles/hash -Small key speed test - 2-byte keys - 16.83 cycles/hash +Alignment 7 - 5.442 bytes/cycle - 15569.21 MiB/sec @ 3 ghz +Alignment 6 - 5.461 bytes/cycle - 15623.40 MiB/sec @ 3 ghz +Alignment 5 - 5.442 bytes/cycle - 15570.41 MiB/sec @ 3 ghz +Alignment 4 - 5.471 bytes/cycle - 15652.71 MiB/sec @ 3 ghz +Alignment 3 - 5.474 bytes/cycle - 15660.93 MiB/sec @ 3 ghz +Alignment 2 - 5.473 bytes/cycle - 15657.68 MiB/sec @ 3 ghz +Alignment 1 - 5.469 bytes/cycle - 15646.51 MiB/sec @ 3 ghz +Alignment 0 - 5.400 bytes/cycle - 15448.55 MiB/sec @ 3 ghz +Average - 5.454 bytes/cycle - 15603.68 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 14.72 cycles/hash +Small key speed test - 2-byte keys - 16.23 cycles/hash Small key speed test - 3-byte keys - 18.00 cycles/hash Small key speed test - 4-byte keys - 19.00 cycles/hash -Small key speed test - 5-byte keys - 21.00 cycles/hash -Small key speed test - 6-byte keys - 22.00 cycles/hash -Small key speed test - 7-byte keys - 23.00 cycles/hash -Small key speed test - 8-byte keys - 15.00 cycles/hash -Small key speed test - 9-byte keys - 16.00 cycles/hash -Small key speed test - 10-byte keys - 18.00 cycles/hash -Small key speed test - 11-byte keys - 19.00 cycles/hash -Small key speed test - 12-byte keys - 20.60 cycles/hash -Small key speed test - 13-byte keys - 22.00 cycles/hash +Small key speed test - 5-byte keys - 22.42 cycles/hash +Small key speed test - 6-byte keys - 27.00 cycles/hash +Small key speed test - 7-byte keys - 29.00 cycles/hash +Small key speed test - 8-byte keys - 18.00 cycles/hash +Small key speed test - 9-byte keys - 20.00 cycles/hash +Small key speed test - 10-byte keys - 22.00 cycles/hash +Small key speed test - 11-byte keys - 23.25 cycles/hash +Small key speed test - 12-byte keys - 20.89 cycles/hash +Small key speed test - 13-byte keys - 21.81 cycles/hash Small key speed test - 14-byte keys - 23.00 cycles/hash -Small key speed test - 15-byte keys - 24.30 cycles/hash +Small key speed test - 15-byte keys - 24.00 cycles/hash Small key speed test - 16-byte keys - 16.00 cycles/hash -Small key speed test - 17-byte keys - 17.28 cycles/hash -Small key speed test - 18-byte keys - 18.72 cycles/hash -Small key speed test - 19-byte keys - 20.33 cycles/hash -Small key speed test - 20-byte keys - 21.58 cycles/hash +Small key speed test - 17-byte keys - 17.00 cycles/hash +Small key speed test - 18-byte keys - 18.63 cycles/hash +Small key speed test - 19-byte keys - 20.00 cycles/hash +Small key speed test - 20-byte keys - 21.21 cycles/hash Small key speed test - 21-byte keys - 23.00 cycles/hash -Small key speed test - 22-byte keys - 24.82 cycles/hash -Small key speed test - 23-byte keys - 25.97 cycles/hash -Small key speed test - 24-byte keys - 17.67 cycles/hash -Small key speed test - 25-byte keys - 18.55 cycles/hash +Small key speed test - 22-byte keys - 24.00 cycles/hash +Small key speed test - 23-byte keys - 25.95 cycles/hash +Small key speed test - 24-byte keys - 17.27 cycles/hash +Small key speed test - 25-byte keys - 18.52 cycles/hash Small key speed test - 26-byte keys - 20.00 cycles/hash -Small key speed test - 27-byte keys - 21.88 cycles/hash -Small key speed test - 28-byte keys - 23.00 cycles/hash -Small key speed test - 29-byte keys - 24.42 cycles/hash -Small key speed test - 30-byte keys - 25.78 cycles/hash -Small key speed test - 31-byte keys - 26.84 cycles/hash -Average 20.599 cycles/hash +Small key speed test - 27-byte keys - 21.15 cycles/hash +Small key speed test - 28-byte keys - 22.91 cycles/hash +Small key speed test - 29-byte keys - 24.00 cycles/hash +Small key speed test - 30-byte keys - 25.00 cycles/hash +Small key speed test - 31-byte keys - 26.73 cycles/hash +Small key speed test - 32-byte keys - 18.97 cycles/hash +Average 21.240 cycles/hash +Average, weighted by key length freq. 21.170 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 19.414 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/floppsyhash.txt b/doc/floppsyhash.txt index 99e379fc..bd68fe3d 100644 --- a/doc/floppsyhash.txt +++ b/doc/floppsyhash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1310a2d33a59c - 0x1310a2d33a530). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.054 bytes/cycle - 153.31 MiB/sec @ 3 ghz -Alignment 6 - 0.054 bytes/cycle - 153.17 MiB/sec @ 3 ghz -Alignment 5 - 0.054 bytes/cycle - 153.65 MiB/sec @ 3 ghz -Alignment 4 - 0.054 bytes/cycle - 153.39 MiB/sec @ 3 ghz -Alignment 3 - 0.054 bytes/cycle - 154.15 MiB/sec @ 3 ghz -Alignment 2 - 0.054 bytes/cycle - 154.05 MiB/sec @ 3 ghz -Alignment 1 - 0.054 bytes/cycle - 154.05 MiB/sec @ 3 ghz -Alignment 0 - 0.054 bytes/cycle - 153.65 MiB/sec @ 3 ghz -Average - 0.054 bytes/cycle - 153.68 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 302.67 cycles/hash -Small key speed test - 2-byte keys - 320.23 cycles/hash -Small key speed test - 3-byte keys - 338.86 cycles/hash -Small key speed test - 4-byte keys - 352.35 cycles/hash -Small key speed test - 5-byte keys - 372.23 cycles/hash -Small key speed test - 6-byte keys - 388.80 cycles/hash -Small key speed test - 7-byte keys - 412.54 cycles/hash -Small key speed test - 8-byte keys - 426.10 cycles/hash -Small key speed test - 9-byte keys - 443.85 cycles/hash -Small key speed test - 10-byte keys - 460.79 cycles/hash -Small key speed test - 11-byte keys - 480.68 cycles/hash -Small key speed test - 12-byte keys - 497.95 cycles/hash -Small key speed test - 13-byte keys - 518.03 cycles/hash -Small key speed test - 14-byte keys - 535.11 cycles/hash -Small key speed test - 15-byte keys - 554.71 cycles/hash -Small key speed test - 16-byte keys - 572.38 cycles/hash -Small key speed test - 17-byte keys - 591.15 cycles/hash -Small key speed test - 18-byte keys - 608.46 cycles/hash -Small key speed test - 19-byte keys - 627.95 cycles/hash -Small key speed test - 20-byte keys - 646.07 cycles/hash -Small key speed test - 21-byte keys - 664.93 cycles/hash -Small key speed test - 22-byte keys - 681.89 cycles/hash -Small key speed test - 23-byte keys - 701.51 cycles/hash -Small key speed test - 24-byte keys - 718.21 cycles/hash -Small key speed test - 25-byte keys - 738.26 cycles/hash -Small key speed test - 26-byte keys - 756.01 cycles/hash -Small key speed test - 27-byte keys - 775.15 cycles/hash -Small key speed test - 28-byte keys - 792.19 cycles/hash -Small key speed test - 29-byte keys - 812.06 cycles/hash -Small key speed test - 30-byte keys - 828.68 cycles/hash -Small key speed test - 31-byte keys - 848.39 cycles/hash -Average 573.169 cycles/hash +Alignment 7 - 0.054 bytes/cycle - 155.11 MiB/sec @ 3 ghz +Alignment 6 - 0.054 bytes/cycle - 154.80 MiB/sec @ 3 ghz +Alignment 5 - 0.054 bytes/cycle - 154.85 MiB/sec @ 3 ghz +Alignment 4 - 0.054 bytes/cycle - 154.87 MiB/sec @ 3 ghz +Alignment 3 - 0.054 bytes/cycle - 154.93 MiB/sec @ 3 ghz +Alignment 2 - 0.054 bytes/cycle - 154.91 MiB/sec @ 3 ghz +Alignment 1 - 0.054 bytes/cycle - 154.91 MiB/sec @ 3 ghz +Alignment 0 - 0.054 bytes/cycle - 154.83 MiB/sec @ 3 ghz +Average - 0.054 bytes/cycle - 154.90 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 299.71 cycles/hash +Small key speed test - 2-byte keys - 317.97 cycles/hash +Small key speed test - 3-byte keys - 336.62 cycles/hash +Small key speed test - 4-byte keys - 352.75 cycles/hash +Small key speed test - 5-byte keys - 372.26 cycles/hash +Small key speed test - 6-byte keys - 387.54 cycles/hash +Small key speed test - 7-byte keys - 410.31 cycles/hash +Small key speed test - 8-byte keys - 420.00 cycles/hash +Small key speed test - 9-byte keys - 441.40 cycles/hash +Small key speed test - 10-byte keys - 456.76 cycles/hash +Small key speed test - 11-byte keys - 477.50 cycles/hash +Small key speed test - 12-byte keys - 494.09 cycles/hash +Small key speed test - 13-byte keys - 512.65 cycles/hash +Small key speed test - 14-byte keys - 529.83 cycles/hash +Small key speed test - 15-byte keys - 550.55 cycles/hash +Small key speed test - 16-byte keys - 567.63 cycles/hash +Small key speed test - 17-byte keys - 586.69 cycles/hash +Small key speed test - 18-byte keys - 603.58 cycles/hash +Small key speed test - 19-byte keys - 624.31 cycles/hash +Small key speed test - 20-byte keys - 641.33 cycles/hash +Small key speed test - 21-byte keys - 660.28 cycles/hash +Small key speed test - 22-byte keys - 678.21 cycles/hash +Small key speed test - 23-byte keys - 696.66 cycles/hash +Small key speed test - 24-byte keys - 713.20 cycles/hash +Small key speed test - 25-byte keys - 733.13 cycles/hash +Small key speed test - 26-byte keys - 750.04 cycles/hash +Small key speed test - 27-byte keys - 769.72 cycles/hash +Small key speed test - 28-byte keys - 786.66 cycles/hash +Small key speed test - 29-byte keys - 806.66 cycles/hash +Small key speed test - 30-byte keys - 824.15 cycles/hash +Small key speed test - 31-byte keys - 843.23 cycles/hash +Small key speed test - 32-byte keys - 860.27 cycles/hash +Average 578.302 cycles/hash +Average, weighted by key length freq. 576.176 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 502.819 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/gcc.txt b/doc/gcc.txt index 695bc771..f7b46a4d 100644 --- a/doc/gcc.txt +++ b/doc/gcc.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x14d2ab3cdbf4 - 0x14d2ab3cdbac). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.214 bytes/cycle - 611.92 MiB/sec @ 3 ghz -Alignment 6 - 0.214 bytes/cycle - 611.92 MiB/sec @ 3 ghz -Alignment 5 - 0.214 bytes/cycle - 611.92 MiB/sec @ 3 ghz -Alignment 4 - 0.214 bytes/cycle - 611.92 MiB/sec @ 3 ghz -Alignment 3 - 0.214 bytes/cycle - 611.92 MiB/sec @ 3 ghz -Alignment 2 - 0.214 bytes/cycle - 611.92 MiB/sec @ 3 ghz -Alignment 1 - 0.213 bytes/cycle - 610.12 MiB/sec @ 3 ghz -Alignment 0 - 0.214 bytes/cycle - 611.92 MiB/sec @ 3 ghz -Average - 0.214 bytes/cycle - 611.69 MiB/sec @ 3 ghz +Alignment 7 - 0.214 bytes/cycle - 611.94 MiB/sec @ 3 ghz +Alignment 6 - 0.214 bytes/cycle - 612.00 MiB/sec @ 3 ghz +Alignment 5 - 0.214 bytes/cycle - 612.21 MiB/sec @ 3 ghz +Alignment 4 - 0.214 bytes/cycle - 612.43 MiB/sec @ 3 ghz +Alignment 3 - 0.214 bytes/cycle - 611.96 MiB/sec @ 3 ghz +Alignment 2 - 0.214 bytes/cycle - 611.53 MiB/sec @ 3 ghz +Alignment 1 - 0.214 bytes/cycle - 612.43 MiB/sec @ 3 ghz +Alignment 0 - 0.214 bytes/cycle - 612.30 MiB/sec @ 3 ghz +Average - 0.214 bytes/cycle - 612.10 MiB/sec @ 3 ghz Small key speed test - 1-byte keys - 16.00 cycles/hash -Small key speed test - 2-byte keys - 21.00 cycles/hash -Small key speed test - 3-byte keys - 25.54 cycles/hash +Small key speed test - 2-byte keys - 20.89 cycles/hash +Small key speed test - 3-byte keys - 25.00 cycles/hash Small key speed test - 4-byte keys - 30.00 cycles/hash Small key speed test - 5-byte keys - 35.00 cycles/hash -Small key speed test - 6-byte keys - 39.29 cycles/hash +Small key speed test - 6-byte keys - 39.00 cycles/hash Small key speed test - 7-byte keys - 44.00 cycles/hash -Small key speed test - 8-byte keys - 49.00 cycles/hash -Small key speed test - 9-byte keys - 53.88 cycles/hash -Small key speed test - 10-byte keys - 58.61 cycles/hash +Small key speed test - 8-byte keys - 48.92 cycles/hash +Small key speed test - 9-byte keys - 53.57 cycles/hash +Small key speed test - 10-byte keys - 58.00 cycles/hash Small key speed test - 11-byte keys - 63.00 cycles/hash -Small key speed test - 12-byte keys - 68.00 cycles/hash -Small key speed test - 13-byte keys - 72.18 cycles/hash -Small key speed test - 14-byte keys - 77.00 cycles/hash -Small key speed test - 15-byte keys - 82.00 cycles/hash -Small key speed test - 16-byte keys - 86.56 cycles/hash -Small key speed test - 17-byte keys - 91.27 cycles/hash -Small key speed test - 18-byte keys - 96.00 cycles/hash -Small key speed test - 19-byte keys - 100.44 cycles/hash -Small key speed test - 20-byte keys - 105.43 cycles/hash -Small key speed test - 21-byte keys - 110.00 cycles/hash -Small key speed test - 22-byte keys - 114.46 cycles/hash -Small key speed test - 23-byte keys - 119.00 cycles/hash -Small key speed test - 24-byte keys - 124.23 cycles/hash -Small key speed test - 25-byte keys - 128.42 cycles/hash -Small key speed test - 26-byte keys - 133.33 cycles/hash -Small key speed test - 27-byte keys - 138.06 cycles/hash -Small key speed test - 28-byte keys - 143.25 cycles/hash -Small key speed test - 29-byte keys - 147.11 cycles/hash -Small key speed test - 30-byte keys - 151.95 cycles/hash -Small key speed test - 31-byte keys - 156.52 cycles/hash -Average 86.468 cycles/hash +Small key speed test - 12-byte keys - 67.89 cycles/hash +Small key speed test - 13-byte keys - 72.00 cycles/hash +Small key speed test - 14-byte keys - 76.91 cycles/hash +Small key speed test - 15-byte keys - 81.79 cycles/hash +Small key speed test - 16-byte keys - 86.00 cycles/hash +Small key speed test - 17-byte keys - 90.72 cycles/hash +Small key speed test - 18-byte keys - 95.69 cycles/hash +Small key speed test - 19-byte keys - 100.00 cycles/hash +Small key speed test - 20-byte keys - 104.69 cycles/hash +Small key speed test - 21-byte keys - 109.71 cycles/hash +Small key speed test - 22-byte keys - 114.10 cycles/hash +Small key speed test - 23-byte keys - 118.65 cycles/hash +Small key speed test - 24-byte keys - 123.65 cycles/hash +Small key speed test - 25-byte keys - 127.81 cycles/hash +Small key speed test - 26-byte keys - 132.72 cycles/hash +Small key speed test - 27-byte keys - 137.47 cycles/hash +Small key speed test - 28-byte keys - 142.43 cycles/hash +Small key speed test - 29-byte keys - 146.49 cycles/hash +Small key speed test - 30-byte keys - 151.61 cycles/hash +Small key speed test - 31-byte keys - 155.68 cycles/hash +Small key speed test - 32-byte keys - 160.58 cycles/hash +Average 88.437 cycles/hash +Average, weighted by key length freq. 88.256 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 69.391 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/gxhash64.txt b/doc/gxhash64.txt index a5b71c38..4ad5d8f1 100644 --- a/doc/gxhash64.txt +++ b/doc/gxhash64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 180 (0xb4) ticks (0x133852ad5c67c - 0x133852ad5c5c8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 25.827 bytes/cycle - 73892.72 MiB/sec @ 3 ghz -Alignment 6 - 25.656 bytes/cycle - 73401.04 MiB/sec @ 3 ghz -Alignment 5 - 25.754 bytes/cycle - 73681.45 MiB/sec @ 3 ghz -Alignment 4 - 25.763 bytes/cycle - 73709.30 MiB/sec @ 3 ghz -Alignment 3 - 25.617 bytes/cycle - 73291.44 MiB/sec @ 3 ghz -Alignment 2 - 25.768 bytes/cycle - 73721.56 MiB/sec @ 3 ghz -Alignment 1 - 25.680 bytes/cycle - 73471.18 MiB/sec @ 3 ghz -Alignment 0 - 25.825 bytes/cycle - 73884.54 MiB/sec @ 3 ghz -Average - 25.736 bytes/cycle - 73631.65 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 18.93 cycles/hash -Small key speed test - 2-byte keys - 19.08 cycles/hash -Small key speed test - 3-byte keys - 18.97 cycles/hash -Small key speed test - 4-byte keys - 18.97 cycles/hash -Small key speed test - 5-byte keys - 18.93 cycles/hash -Small key speed test - 6-byte keys - 18.93 cycles/hash -Small key speed test - 7-byte keys - 18.85 cycles/hash -Small key speed test - 8-byte keys - 18.44 cycles/hash -Small key speed test - 9-byte keys - 18.51 cycles/hash -Small key speed test - 10-byte keys - 18.40 cycles/hash -Small key speed test - 11-byte keys - 18.00 cycles/hash -Small key speed test - 12-byte keys - 18.90 cycles/hash -Small key speed test - 13-byte keys - 18.74 cycles/hash -Small key speed test - 14-byte keys - 18.58 cycles/hash -Small key speed test - 15-byte keys - 18.73 cycles/hash -Small key speed test - 16-byte keys - 16.50 cycles/hash -Small key speed test - 17-byte keys - 20.75 cycles/hash -Small key speed test - 18-byte keys - 20.89 cycles/hash -Small key speed test - 19-byte keys - 20.67 cycles/hash -Small key speed test - 20-byte keys - 20.86 cycles/hash -Small key speed test - 21-byte keys - 20.99 cycles/hash -Small key speed test - 22-byte keys - 20.26 cycles/hash -Small key speed test - 23-byte keys - 20.95 cycles/hash -Small key speed test - 24-byte keys - 20.99 cycles/hash -Small key speed test - 25-byte keys - 20.67 cycles/hash -Small key speed test - 26-byte keys - 20.55 cycles/hash -Small key speed test - 27-byte keys - 21.37 cycles/hash -Small key speed test - 28-byte keys - 20.53 cycles/hash -Small key speed test - 29-byte keys - 21.39 cycles/hash -Small key speed test - 30-byte keys - 21.42 cycles/hash -Small key speed test - 31-byte keys - 21.40 cycles/hash -Average 19.714 cycles/hash +Alignment 7 - 16.845 bytes/cycle - 48194.83 MiB/sec @ 3 ghz +Alignment 6 - 16.877 bytes/cycle - 48284.66 MiB/sec @ 3 ghz +Alignment 5 - 16.865 bytes/cycle - 48252.03 MiB/sec @ 3 ghz +Alignment 4 - 16.920 bytes/cycle - 48409.53 MiB/sec @ 3 ghz +Alignment 3 - 16.944 bytes/cycle - 48476.81 MiB/sec @ 3 ghz +Alignment 2 - 16.918 bytes/cycle - 48402.31 MiB/sec @ 3 ghz +Alignment 1 - 16.888 bytes/cycle - 48316.18 MiB/sec @ 3 ghz +Alignment 0 - 18.532 bytes/cycle - 53021.47 MiB/sec @ 3 ghz +Average - 17.099 bytes/cycle - 48919.73 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 30.11 cycles/hash +Small key speed test - 2-byte keys - 30.33 cycles/hash +Small key speed test - 3-byte keys - 30.41 cycles/hash +Small key speed test - 4-byte keys - 30.32 cycles/hash +Small key speed test - 5-byte keys - 30.53 cycles/hash +Small key speed test - 6-byte keys - 30.22 cycles/hash +Small key speed test - 7-byte keys - 30.45 cycles/hash +Small key speed test - 8-byte keys - 30.00 cycles/hash +Small key speed test - 9-byte keys - 30.29 cycles/hash +Small key speed test - 10-byte keys - 30.00 cycles/hash +Small key speed test - 11-byte keys - 30.00 cycles/hash +Small key speed test - 12-byte keys - 30.18 cycles/hash +Small key speed test - 13-byte keys - 30.14 cycles/hash +Small key speed test - 14-byte keys - 30.14 cycles/hash +Small key speed test - 15-byte keys - 30.17 cycles/hash +Small key speed test - 16-byte keys - 30.23 cycles/hash +Small key speed test - 17-byte keys - 43.00 cycles/hash +Small key speed test - 18-byte keys - 43.00 cycles/hash +Small key speed test - 19-byte keys - 43.00 cycles/hash +Small key speed test - 20-byte keys - 43.00 cycles/hash +Small key speed test - 21-byte keys - 43.00 cycles/hash +Small key speed test - 22-byte keys - 43.00 cycles/hash +Small key speed test - 23-byte keys - 43.00 cycles/hash +Small key speed test - 24-byte keys - 43.00 cycles/hash +Small key speed test - 25-byte keys - 43.00 cycles/hash +Small key speed test - 26-byte keys - 43.00 cycles/hash +Small key speed test - 27-byte keys - 43.00 cycles/hash +Small key speed test - 28-byte keys - 43.00 cycles/hash +Small key speed test - 29-byte keys - 43.00 cycles/hash +Small key speed test - 30-byte keys - 43.00 cycles/hash +Small key speed test - 31-byte keys - 43.00 cycles/hash +Small key speed test - 32-byte keys - 43.00 cycles/hash +Average 36.610 cycles/hash +Average, weighted by key length freq. 35.770 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 30.382 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/halftime_hash128.txt b/doc/halftime_hash128.txt index 9e76db8f..b3cd77b0 100644 --- a/doc/halftime_hash128.txt +++ b/doc/halftime_hash128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1342b9684c888 - 0x1342b9684c81c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 6.089 bytes/cycle - 17420.97 MiB/sec @ 3 ghz -Alignment 6 - 6.098 bytes/cycle - 17446.61 MiB/sec @ 3 ghz -Alignment 5 - 6.101 bytes/cycle - 17456.32 MiB/sec @ 3 ghz -Alignment 4 - 6.104 bytes/cycle - 17462.55 MiB/sec @ 3 ghz -Alignment 3 - 6.097 bytes/cycle - 17444.38 MiB/sec @ 3 ghz -Alignment 2 - 6.096 bytes/cycle - 17442.07 MiB/sec @ 3 ghz -Alignment 1 - 6.100 bytes/cycle - 17451.61 MiB/sec @ 3 ghz -Alignment 0 - 6.344 bytes/cycle - 18151.72 MiB/sec @ 3 ghz -Average - 6.129 bytes/cycle - 17534.53 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 96.43 cycles/hash -Small key speed test - 2-byte keys - 96.50 cycles/hash -Small key speed test - 3-byte keys - 96.56 cycles/hash -Small key speed test - 4-byte keys - 96.41 cycles/hash -Small key speed test - 5-byte keys - 95.90 cycles/hash -Small key speed test - 6-byte keys - 96.33 cycles/hash -Small key speed test - 7-byte keys - 95.91 cycles/hash -Small key speed test - 8-byte keys - 96.49 cycles/hash -Small key speed test - 9-byte keys - 96.46 cycles/hash -Small key speed test - 10-byte keys - 96.48 cycles/hash -Small key speed test - 11-byte keys - 96.48 cycles/hash -Small key speed test - 12-byte keys - 96.47 cycles/hash -Small key speed test - 13-byte keys - 96.44 cycles/hash -Small key speed test - 14-byte keys - 96.43 cycles/hash -Small key speed test - 15-byte keys - 96.46 cycles/hash -Small key speed test - 16-byte keys - 76.64 cycles/hash -Small key speed test - 17-byte keys - 100.30 cycles/hash -Small key speed test - 18-byte keys - 100.28 cycles/hash -Small key speed test - 19-byte keys - 100.46 cycles/hash -Small key speed test - 20-byte keys - 100.69 cycles/hash -Small key speed test - 21-byte keys - 101.19 cycles/hash -Small key speed test - 22-byte keys - 101.16 cycles/hash -Small key speed test - 23-byte keys - 101.14 cycles/hash -Small key speed test - 24-byte keys - 101.11 cycles/hash -Small key speed test - 25-byte keys - 101.18 cycles/hash -Small key speed test - 26-byte keys - 101.19 cycles/hash -Small key speed test - 27-byte keys - 101.18 cycles/hash -Small key speed test - 28-byte keys - 101.22 cycles/hash -Small key speed test - 29-byte keys - 101.19 cycles/hash -Small key speed test - 30-byte keys - 101.19 cycles/hash -Small key speed test - 31-byte keys - 101.23 cycles/hash -Average 97.971 cycles/hash +Alignment 7 - 6.323 bytes/cycle - 18089.02 MiB/sec @ 3 ghz +Alignment 6 - 6.338 bytes/cycle - 18133.43 MiB/sec @ 3 ghz +Alignment 5 - 6.338 bytes/cycle - 18134.23 MiB/sec @ 3 ghz +Alignment 4 - 6.346 bytes/cycle - 18157.40 MiB/sec @ 3 ghz +Alignment 3 - 6.339 bytes/cycle - 18136.81 MiB/sec @ 3 ghz +Alignment 2 - 6.336 bytes/cycle - 18126.07 MiB/sec @ 3 ghz +Alignment 1 - 6.337 bytes/cycle - 18131.13 MiB/sec @ 3 ghz +Alignment 0 - 6.590 bytes/cycle - 18854.65 MiB/sec @ 3 ghz +Average - 6.368 bytes/cycle - 18220.34 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 92.64 cycles/hash +Small key speed test - 2-byte keys - 92.81 cycles/hash +Small key speed test - 3-byte keys - 92.71 cycles/hash +Small key speed test - 4-byte keys - 92.69 cycles/hash +Small key speed test - 5-byte keys - 92.63 cycles/hash +Small key speed test - 6-byte keys - 92.64 cycles/hash +Small key speed test - 7-byte keys - 92.67 cycles/hash +Small key speed test - 8-byte keys - 92.77 cycles/hash +Small key speed test - 9-byte keys - 92.76 cycles/hash +Small key speed test - 10-byte keys - 92.79 cycles/hash +Small key speed test - 11-byte keys - 92.76 cycles/hash +Small key speed test - 12-byte keys - 92.76 cycles/hash +Small key speed test - 13-byte keys - 92.74 cycles/hash +Small key speed test - 14-byte keys - 92.75 cycles/hash +Small key speed test - 15-byte keys - 92.80 cycles/hash +Small key speed test - 16-byte keys - 73.65 cycles/hash +Small key speed test - 17-byte keys - 96.67 cycles/hash +Small key speed test - 18-byte keys - 96.74 cycles/hash +Small key speed test - 19-byte keys - 96.73 cycles/hash +Small key speed test - 20-byte keys - 96.88 cycles/hash +Small key speed test - 21-byte keys - 96.91 cycles/hash +Small key speed test - 22-byte keys - 96.90 cycles/hash +Small key speed test - 23-byte keys - 96.90 cycles/hash +Small key speed test - 24-byte keys - 96.89 cycles/hash +Small key speed test - 25-byte keys - 96.86 cycles/hash +Small key speed test - 26-byte keys - 96.86 cycles/hash +Small key speed test - 27-byte keys - 96.90 cycles/hash +Small key speed test - 28-byte keys - 96.97 cycles/hash +Small key speed test - 29-byte keys - 111.50 cycles/hash +Small key speed test - 30-byte keys - 99.79 cycles/hash +Small key speed test - 31-byte keys - 99.69 cycles/hash +Small key speed test - 32-byte keys - 80.14 cycles/hash +Average 94.311 cycles/hash +Average, weighted by key length freq. 93.298 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 85.393 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/halftime_hash256.txt b/doc/halftime_hash256.txt index 732d79bf..bd7ab17f 100644 --- a/doc/halftime_hash256.txt +++ b/doc/halftime_hash256.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1343cb6bbb26c - 0x1343cb6bbb200). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 6.246 bytes/cycle - 17870.05 MiB/sec @ 3 ghz -Alignment 6 - 6.274 bytes/cycle - 17951.17 MiB/sec @ 3 ghz -Alignment 5 - 6.274 bytes/cycle - 17950.76 MiB/sec @ 3 ghz -Alignment 4 - 6.274 bytes/cycle - 17950.65 MiB/sec @ 3 ghz -Alignment 3 - 6.271 bytes/cycle - 17940.07 MiB/sec @ 3 ghz -Alignment 2 - 6.273 bytes/cycle - 17947.27 MiB/sec @ 3 ghz -Alignment 1 - 6.267 bytes/cycle - 17931.41 MiB/sec @ 3 ghz -Alignment 0 - 6.461 bytes/cycle - 18485.71 MiB/sec @ 3 ghz -Average - 6.293 bytes/cycle - 18003.39 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 98.93 cycles/hash -Small key speed test - 2-byte keys - 99.08 cycles/hash -Small key speed test - 3-byte keys - 99.10 cycles/hash -Small key speed test - 4-byte keys - 99.14 cycles/hash -Small key speed test - 5-byte keys - 99.00 cycles/hash -Small key speed test - 6-byte keys - 99.06 cycles/hash -Small key speed test - 7-byte keys - 99.10 cycles/hash -Small key speed test - 8-byte keys - 99.03 cycles/hash -Small key speed test - 9-byte keys - 98.77 cycles/hash -Small key speed test - 10-byte keys - 98.66 cycles/hash -Small key speed test - 11-byte keys - 98.75 cycles/hash -Small key speed test - 12-byte keys - 99.19 cycles/hash -Small key speed test - 13-byte keys - 98.78 cycles/hash -Small key speed test - 14-byte keys - 98.78 cycles/hash -Small key speed test - 15-byte keys - 98.76 cycles/hash -Small key speed test - 16-byte keys - 77.55 cycles/hash -Small key speed test - 17-byte keys - 101.64 cycles/hash -Small key speed test - 18-byte keys - 101.56 cycles/hash -Small key speed test - 19-byte keys - 101.67 cycles/hash -Small key speed test - 20-byte keys - 101.59 cycles/hash -Small key speed test - 21-byte keys - 101.24 cycles/hash -Small key speed test - 22-byte keys - 101.24 cycles/hash -Small key speed test - 23-byte keys - 101.29 cycles/hash -Small key speed test - 24-byte keys - 101.45 cycles/hash -Small key speed test - 25-byte keys - 101.32 cycles/hash -Small key speed test - 26-byte keys - 101.36 cycles/hash -Small key speed test - 27-byte keys - 101.33 cycles/hash -Small key speed test - 28-byte keys - 101.45 cycles/hash -Small key speed test - 29-byte keys - 101.46 cycles/hash -Small key speed test - 30-byte keys - 101.36 cycles/hash -Small key speed test - 31-byte keys - 101.46 cycles/hash -Average 99.456 cycles/hash +Alignment 7 - 6.351 bytes/cycle - 18170.86 MiB/sec @ 3 ghz +Alignment 6 - 6.356 bytes/cycle - 18185.63 MiB/sec @ 3 ghz +Alignment 5 - 6.353 bytes/cycle - 18176.49 MiB/sec @ 3 ghz +Alignment 4 - 6.361 bytes/cycle - 18199.66 MiB/sec @ 3 ghz +Alignment 3 - 6.352 bytes/cycle - 18171.96 MiB/sec @ 3 ghz +Alignment 2 - 6.352 bytes/cycle - 18172.55 MiB/sec @ 3 ghz +Alignment 1 - 6.354 bytes/cycle - 18179.12 MiB/sec @ 3 ghz +Alignment 0 - 6.549 bytes/cycle - 18738.27 MiB/sec @ 3 ghz +Average - 6.379 bytes/cycle - 18249.32 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 97.00 cycles/hash +Small key speed test - 2-byte keys - 97.81 cycles/hash +Small key speed test - 3-byte keys - 97.66 cycles/hash +Small key speed test - 4-byte keys - 97.74 cycles/hash +Small key speed test - 5-byte keys - 97.61 cycles/hash +Small key speed test - 6-byte keys - 97.63 cycles/hash +Small key speed test - 7-byte keys - 97.65 cycles/hash +Small key speed test - 8-byte keys - 97.28 cycles/hash +Small key speed test - 9-byte keys - 97.43 cycles/hash +Small key speed test - 10-byte keys - 97.08 cycles/hash +Small key speed test - 11-byte keys - 97.09 cycles/hash +Small key speed test - 12-byte keys - 96.97 cycles/hash +Small key speed test - 13-byte keys - 97.03 cycles/hash +Small key speed test - 14-byte keys - 96.88 cycles/hash +Small key speed test - 15-byte keys - 97.08 cycles/hash +Small key speed test - 16-byte keys - 76.40 cycles/hash +Small key speed test - 17-byte keys - 100.25 cycles/hash +Small key speed test - 18-byte keys - 100.09 cycles/hash +Small key speed test - 19-byte keys - 100.08 cycles/hash +Small key speed test - 20-byte keys - 100.17 cycles/hash +Small key speed test - 21-byte keys - 100.21 cycles/hash +Small key speed test - 22-byte keys - 100.12 cycles/hash +Small key speed test - 23-byte keys - 100.17 cycles/hash +Small key speed test - 24-byte keys - 100.14 cycles/hash +Small key speed test - 25-byte keys - 100.22 cycles/hash +Small key speed test - 26-byte keys - 100.11 cycles/hash +Small key speed test - 27-byte keys - 100.12 cycles/hash +Small key speed test - 28-byte keys - 100.07 cycles/hash +Small key speed test - 29-byte keys - 100.10 cycles/hash +Small key speed test - 30-byte keys - 100.30 cycles/hash +Small key speed test - 31-byte keys - 100.03 cycles/hash +Small key speed test - 32-byte keys - 83.50 cycles/hash +Average 97.563 cycles/hash +Average, weighted by key length freq. 96.877 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 89.190 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/halftime_hash512.txt b/doc/halftime_hash512.txt index 3993a945..40171937 100644 --- a/doc/halftime_hash512.txt +++ b/doc/halftime_hash512.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x1344e5c5c0ccc - 0x1344e5c5c0c84). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 3.802 bytes/cycle - 10878.46 MiB/sec @ 3 ghz -Alignment 6 - 3.795 bytes/cycle - 10858.60 MiB/sec @ 3 ghz -Alignment 5 - 3.798 bytes/cycle - 10865.55 MiB/sec @ 3 ghz -Alignment 4 - 3.802 bytes/cycle - 10877.34 MiB/sec @ 3 ghz -Alignment 3 - 3.804 bytes/cycle - 10883.81 MiB/sec @ 3 ghz -Alignment 2 - 3.798 bytes/cycle - 10865.26 MiB/sec @ 3 ghz -Alignment 1 - 3.800 bytes/cycle - 10872.38 MiB/sec @ 3 ghz -Alignment 0 - 3.852 bytes/cycle - 11019.77 MiB/sec @ 3 ghz -Average - 3.806 bytes/cycle - 10890.15 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 116.64 cycles/hash -Small key speed test - 2-byte keys - 118.60 cycles/hash -Small key speed test - 3-byte keys - 118.87 cycles/hash -Small key speed test - 4-byte keys - 117.32 cycles/hash -Small key speed test - 5-byte keys - 117.83 cycles/hash -Small key speed test - 6-byte keys - 117.68 cycles/hash -Small key speed test - 7-byte keys - 117.82 cycles/hash -Small key speed test - 8-byte keys - 117.95 cycles/hash -Small key speed test - 9-byte keys - 116.90 cycles/hash -Small key speed test - 10-byte keys - 116.96 cycles/hash -Small key speed test - 11-byte keys - 116.95 cycles/hash -Small key speed test - 12-byte keys - 116.99 cycles/hash -Small key speed test - 13-byte keys - 116.92 cycles/hash -Small key speed test - 14-byte keys - 116.84 cycles/hash -Small key speed test - 15-byte keys - 116.88 cycles/hash -Small key speed test - 16-byte keys - 112.79 cycles/hash -Small key speed test - 17-byte keys - 118.49 cycles/hash -Small key speed test - 18-byte keys - 118.47 cycles/hash -Small key speed test - 19-byte keys - 118.52 cycles/hash -Small key speed test - 20-byte keys - 119.13 cycles/hash -Small key speed test - 21-byte keys - 119.18 cycles/hash -Small key speed test - 22-byte keys - 119.34 cycles/hash -Small key speed test - 23-byte keys - 119.30 cycles/hash -Small key speed test - 24-byte keys - 119.18 cycles/hash -Small key speed test - 25-byte keys - 119.25 cycles/hash -Small key speed test - 26-byte keys - 119.30 cycles/hash -Small key speed test - 27-byte keys - 119.15 cycles/hash -Small key speed test - 28-byte keys - 118.96 cycles/hash -Small key speed test - 29-byte keys - 119.13 cycles/hash -Small key speed test - 30-byte keys - 119.19 cycles/hash -Small key speed test - 31-byte keys - 119.11 cycles/hash -Average 118.053 cycles/hash +Alignment 7 - 3.786 bytes/cycle - 10832.86 MiB/sec @ 3 ghz +Alignment 6 - 3.792 bytes/cycle - 10848.38 MiB/sec @ 3 ghz +Alignment 5 - 3.794 bytes/cycle - 10855.89 MiB/sec @ 3 ghz +Alignment 4 - 3.797 bytes/cycle - 10864.52 MiB/sec @ 3 ghz +Alignment 3 - 3.794 bytes/cycle - 10855.12 MiB/sec @ 3 ghz +Alignment 2 - 3.793 bytes/cycle - 10852.26 MiB/sec @ 3 ghz +Alignment 1 - 3.794 bytes/cycle - 10854.07 MiB/sec @ 3 ghz +Alignment 0 - 3.945 bytes/cycle - 11286.34 MiB/sec @ 3 ghz +Average - 3.812 bytes/cycle - 10906.18 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 116.81 cycles/hash +Small key speed test - 2-byte keys - 118.89 cycles/hash +Small key speed test - 3-byte keys - 118.30 cycles/hash +Small key speed test - 4-byte keys - 116.96 cycles/hash +Small key speed test - 5-byte keys - 117.27 cycles/hash +Small key speed test - 6-byte keys - 117.30 cycles/hash +Small key speed test - 7-byte keys - 117.46 cycles/hash +Small key speed test - 8-byte keys - 118.31 cycles/hash +Small key speed test - 9-byte keys - 118.51 cycles/hash +Small key speed test - 10-byte keys - 118.38 cycles/hash +Small key speed test - 11-byte keys - 118.44 cycles/hash +Small key speed test - 12-byte keys - 118.42 cycles/hash +Small key speed test - 13-byte keys - 118.57 cycles/hash +Small key speed test - 14-byte keys - 118.37 cycles/hash +Small key speed test - 15-byte keys - 118.23 cycles/hash +Small key speed test - 16-byte keys - 113.02 cycles/hash +Small key speed test - 17-byte keys - 119.49 cycles/hash +Small key speed test - 18-byte keys - 119.41 cycles/hash +Small key speed test - 19-byte keys - 119.68 cycles/hash +Small key speed test - 20-byte keys - 117.94 cycles/hash +Small key speed test - 21-byte keys - 119.65 cycles/hash +Small key speed test - 22-byte keys - 119.35 cycles/hash +Small key speed test - 23-byte keys - 120.00 cycles/hash +Small key speed test - 24-byte keys - 119.21 cycles/hash +Small key speed test - 25-byte keys - 119.49 cycles/hash +Small key speed test - 26-byte keys - 119.49 cycles/hash +Small key speed test - 27-byte keys - 119.40 cycles/hash +Small key speed test - 28-byte keys - 118.14 cycles/hash +Small key speed test - 29-byte keys - 119.64 cycles/hash +Small key speed test - 30-byte keys - 119.84 cycles/hash +Small key speed test - 31-byte keys - 119.72 cycles/hash +Small key speed test - 32-byte keys - 119.69 cycles/hash +Average 118.543 cycles/hash +Average, weighted by key length freq. 118.428 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 116.279 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/halftime_hash64.txt b/doc/halftime_hash64.txt index 3427e487..93294d48 100644 --- a/doc/halftime_hash64.txt +++ b/doc/halftime_hash64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x1341900d53324 - 0x1341900d532dc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 1.656 bytes/cycle - 4737.03 MiB/sec @ 3 ghz -Alignment 6 - 1.654 bytes/cycle - 4731.38 MiB/sec @ 3 ghz -Alignment 5 - 1.655 bytes/cycle - 4733.67 MiB/sec @ 3 ghz -Alignment 4 - 1.656 bytes/cycle - 4737.66 MiB/sec @ 3 ghz -Alignment 3 - 1.655 bytes/cycle - 4733.59 MiB/sec @ 3 ghz -Alignment 2 - 1.655 bytes/cycle - 4735.31 MiB/sec @ 3 ghz -Alignment 1 - 1.655 bytes/cycle - 4734.58 MiB/sec @ 3 ghz -Alignment 0 - 1.657 bytes/cycle - 4741.85 MiB/sec @ 3 ghz -Average - 1.655 bytes/cycle - 4735.63 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 94.44 cycles/hash -Small key speed test - 2-byte keys - 94.56 cycles/hash -Small key speed test - 3-byte keys - 94.55 cycles/hash -Small key speed test - 4-byte keys - 95.00 cycles/hash -Small key speed test - 5-byte keys - 95.02 cycles/hash -Small key speed test - 6-byte keys - 95.03 cycles/hash -Small key speed test - 7-byte keys - 94.97 cycles/hash -Small key speed test - 8-byte keys - 69.70 cycles/hash -Small key speed test - 9-byte keys - 99.98 cycles/hash -Small key speed test - 10-byte keys - 100.08 cycles/hash -Small key speed test - 11-byte keys - 100.06 cycles/hash -Small key speed test - 12-byte keys - 100.62 cycles/hash -Small key speed test - 13-byte keys - 100.58 cycles/hash -Small key speed test - 14-byte keys - 100.57 cycles/hash -Small key speed test - 15-byte keys - 100.58 cycles/hash -Small key speed test - 16-byte keys - 74.68 cycles/hash -Small key speed test - 17-byte keys - 104.86 cycles/hash +Alignment 7 - 1.677 bytes/cycle - 4796.74 MiB/sec @ 3 ghz +Alignment 6 - 1.678 bytes/cycle - 4802.02 MiB/sec @ 3 ghz +Alignment 5 - 1.678 bytes/cycle - 4801.71 MiB/sec @ 3 ghz +Alignment 4 - 1.678 bytes/cycle - 4801.33 MiB/sec @ 3 ghz +Alignment 3 - 1.678 bytes/cycle - 4802.04 MiB/sec @ 3 ghz +Alignment 2 - 1.678 bytes/cycle - 4801.85 MiB/sec @ 3 ghz +Alignment 1 - 1.678 bytes/cycle - 4801.89 MiB/sec @ 3 ghz +Alignment 0 - 1.680 bytes/cycle - 4806.71 MiB/sec @ 3 ghz +Average - 1.678 bytes/cycle - 4801.79 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 93.31 cycles/hash +Small key speed test - 2-byte keys - 93.51 cycles/hash +Small key speed test - 3-byte keys - 93.51 cycles/hash +Small key speed test - 4-byte keys - 93.83 cycles/hash +Small key speed test - 5-byte keys - 93.90 cycles/hash +Small key speed test - 6-byte keys - 93.85 cycles/hash +Small key speed test - 7-byte keys - 93.83 cycles/hash +Small key speed test - 8-byte keys - 68.45 cycles/hash +Small key speed test - 9-byte keys - 99.14 cycles/hash +Small key speed test - 10-byte keys - 99.72 cycles/hash +Small key speed test - 11-byte keys - 99.28 cycles/hash +Small key speed test - 12-byte keys - 99.83 cycles/hash +Small key speed test - 13-byte keys - 99.84 cycles/hash +Small key speed test - 14-byte keys - 99.87 cycles/hash +Small key speed test - 15-byte keys - 99.82 cycles/hash +Small key speed test - 16-byte keys - 74.96 cycles/hash +Small key speed test - 17-byte keys - 105.08 cycles/hash Small key speed test - 18-byte keys - 105.02 cycles/hash -Small key speed test - 19-byte keys - 105.09 cycles/hash -Small key speed test - 20-byte keys - 104.45 cycles/hash -Small key speed test - 21-byte keys - 104.48 cycles/hash -Small key speed test - 22-byte keys - 104.46 cycles/hash -Small key speed test - 23-byte keys - 103.99 cycles/hash -Small key speed test - 24-byte keys - 81.62 cycles/hash -Small key speed test - 25-byte keys - 111.20 cycles/hash -Small key speed test - 26-byte keys - 110.98 cycles/hash -Small key speed test - 27-byte keys - 111.29 cycles/hash -Small key speed test - 28-byte keys - 109.78 cycles/hash -Small key speed test - 29-byte keys - 109.79 cycles/hash -Small key speed test - 30-byte keys - 109.80 cycles/hash -Small key speed test - 31-byte keys - 109.77 cycles/hash -Average 99.902 cycles/hash +Small key speed test - 19-byte keys - 104.98 cycles/hash +Small key speed test - 20-byte keys - 103.87 cycles/hash +Small key speed test - 21-byte keys - 103.83 cycles/hash +Small key speed test - 22-byte keys - 103.81 cycles/hash +Small key speed test - 23-byte keys - 103.89 cycles/hash +Small key speed test - 24-byte keys - 81.91 cycles/hash +Small key speed test - 25-byte keys - 110.50 cycles/hash +Small key speed test - 26-byte keys - 110.50 cycles/hash +Small key speed test - 27-byte keys - 110.52 cycles/hash +Small key speed test - 28-byte keys - 109.83 cycles/hash +Small key speed test - 29-byte keys - 110.08 cycles/hash +Small key speed test - 30-byte keys - 110.10 cycles/hash +Small key speed test - 31-byte keys - 110.20 cycles/hash +Small key speed test - 32-byte keys - 88.72 cycles/hash +Average 99.046 cycles/hash +Average, weighted by key length freq. 99.128 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 88.307 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/hasshe2.txt b/doc/hasshe2.txt index c08948d1..a853d05f 100644 --- a/doc/hasshe2.txt +++ b/doc/hasshe2.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x12c9e943aca4 - 0x12c9e943ac38). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.971 bytes/cycle - 2778.15 MiB/sec @ 3 ghz -Alignment 6 - 0.970 bytes/cycle - 2773.99 MiB/sec @ 3 ghz -Alignment 5 - 0.969 bytes/cycle - 2773.45 MiB/sec @ 3 ghz -Alignment 4 - 0.970 bytes/cycle - 2774.48 MiB/sec @ 3 ghz -Alignment 3 - 0.969 bytes/cycle - 2772.73 MiB/sec @ 3 ghz -Alignment 2 - 0.970 bytes/cycle - 2774.19 MiB/sec @ 3 ghz -Alignment 1 - 0.969 bytes/cycle - 2771.42 MiB/sec @ 3 ghz -Alignment 0 - 0.969 bytes/cycle - 2772.73 MiB/sec @ 3 ghz -Average - 0.970 bytes/cycle - 2773.89 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 56.59 cycles/hash -Small key speed test - 2-byte keys - 56.59 cycles/hash -Small key speed test - 3-byte keys - 56.62 cycles/hash -Small key speed test - 4-byte keys - 56.00 cycles/hash -Small key speed test - 5-byte keys - 56.67 cycles/hash -Small key speed test - 6-byte keys - 56.00 cycles/hash -Small key speed test - 7-byte keys - 56.55 cycles/hash -Small key speed test - 8-byte keys - 56.00 cycles/hash -Small key speed test - 9-byte keys - 56.62 cycles/hash -Small key speed test - 10-byte keys - 56.55 cycles/hash -Small key speed test - 11-byte keys - 56.60 cycles/hash -Small key speed test - 12-byte keys - 56.61 cycles/hash -Small key speed test - 13-byte keys - 56.57 cycles/hash -Small key speed test - 14-byte keys - 56.66 cycles/hash -Small key speed test - 15-byte keys - 56.85 cycles/hash -Small key speed test - 16-byte keys - 56.32 cycles/hash -Small key speed test - 17-byte keys - 72.46 cycles/hash -Small key speed test - 18-byte keys - 72.42 cycles/hash -Small key speed test - 19-byte keys - 72.42 cycles/hash -Small key speed test - 20-byte keys - 72.52 cycles/hash -Small key speed test - 21-byte keys - 72.77 cycles/hash -Small key speed test - 22-byte keys - 72.88 cycles/hash -Small key speed test - 23-byte keys - 72.87 cycles/hash -Small key speed test - 24-byte keys - 72.77 cycles/hash -Small key speed test - 25-byte keys - 72.77 cycles/hash -Small key speed test - 26-byte keys - 72.92 cycles/hash -Small key speed test - 27-byte keys - 72.89 cycles/hash -Small key speed test - 28-byte keys - 72.77 cycles/hash -Small key speed test - 29-byte keys - 72.79 cycles/hash -Small key speed test - 30-byte keys - 72.83 cycles/hash -Small key speed test - 31-byte keys - 72.87 cycles/hash -Average 64.347 cycles/hash +Alignment 7 - 1.010 bytes/cycle - 2889.43 MiB/sec @ 3 ghz +Alignment 6 - 1.011 bytes/cycle - 2892.91 MiB/sec @ 3 ghz +Alignment 5 - 1.008 bytes/cycle - 2882.90 MiB/sec @ 3 ghz +Alignment 4 - 0.997 bytes/cycle - 2852.78 MiB/sec @ 3 ghz +Alignment 3 - 1.008 bytes/cycle - 2882.91 MiB/sec @ 3 ghz +Alignment 2 - 1.007 bytes/cycle - 2881.86 MiB/sec @ 3 ghz +Alignment 1 - 1.008 bytes/cycle - 2883.29 MiB/sec @ 3 ghz +Alignment 0 - 1.004 bytes/cycle - 2873.32 MiB/sec @ 3 ghz +Average - 1.007 bytes/cycle - 2879.93 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 54.83 cycles/hash +Small key speed test - 2-byte keys - 54.74 cycles/hash +Small key speed test - 3-byte keys - 54.74 cycles/hash +Small key speed test - 4-byte keys - 54.82 cycles/hash +Small key speed test - 5-byte keys - 54.78 cycles/hash +Small key speed test - 6-byte keys - 54.74 cycles/hash +Small key speed test - 7-byte keys - 54.62 cycles/hash +Small key speed test - 8-byte keys - 54.65 cycles/hash +Small key speed test - 9-byte keys - 54.77 cycles/hash +Small key speed test - 10-byte keys - 54.76 cycles/hash +Small key speed test - 11-byte keys - 54.76 cycles/hash +Small key speed test - 12-byte keys - 54.74 cycles/hash +Small key speed test - 13-byte keys - 54.74 cycles/hash +Small key speed test - 14-byte keys - 54.75 cycles/hash +Small key speed test - 15-byte keys - 54.78 cycles/hash +Small key speed test - 16-byte keys - 54.00 cycles/hash +Small key speed test - 17-byte keys - 70.23 cycles/hash +Small key speed test - 18-byte keys - 70.24 cycles/hash +Small key speed test - 19-byte keys - 70.22 cycles/hash +Small key speed test - 20-byte keys - 70.23 cycles/hash +Small key speed test - 21-byte keys - 70.23 cycles/hash +Small key speed test - 22-byte keys - 70.25 cycles/hash +Small key speed test - 23-byte keys - 70.22 cycles/hash +Small key speed test - 24-byte keys - 70.23 cycles/hash +Small key speed test - 25-byte keys - 70.23 cycles/hash +Small key speed test - 26-byte keys - 70.23 cycles/hash +Small key speed test - 27-byte keys - 70.25 cycles/hash +Small key speed test - 28-byte keys - 70.27 cycles/hash +Small key speed test - 29-byte keys - 70.22 cycles/hash +Small key speed test - 30-byte keys - 70.23 cycles/hash +Small key speed test - 31-byte keys - 70.22 cycles/hash +Small key speed test - 32-byte keys - 70.16 cycles/hash +Average 62.465 cycles/hash +Average, weighted by key length freq. 61.474 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 54.665 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/i686.html b/doc/i686.html index be394994..1610e9ee 100644 --- a/doc/i686.html +++ b/doc/i686.html @@ -1200,6 +1200,14 @@

SMhasher

+CityCrc256 +19603.25 +42.27 +149.40 (4) + + + + FarmHash32 11215.25 59.39 @@ -1519,12 +1527,22 @@

SMhasher

1128 + +gxhash64 +1017.15 +178.25 +313.64 (9) + + + Other timings: