brotli-8.0.2/.cargo_vcs_info.json0000644000000001360000000000100123360ustar { "git": { "sha1": "769efcbca153bfc4737f1986459da5d9d23368b8" }, "path_in_vcs": "" }brotli-8.0.2/Cargo.lock0000644000000061070000000000100103150ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 3 [[package]] name = "alloc-no-stdlib" version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "brotli" version = "8.0.2" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", "brotli-decompressor", "sha2", ] [[package]] name = "brotli-decompressor" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cpufeatures" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] [[package]] name = "crypto-common" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", ] [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", ] [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "libc" version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "sha2" version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", "digest", ] [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" brotli-8.0.2/Cargo.toml0000644000000052300000000000100103340ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2015" rust-version = "1.59.0" name = "brotli" version = "8.0.2" authors = [ "Daniel Reiter Horn ", "The Brotli Authors", ] build = false include = [ "/src/**/*.rs", "/examples/**/*.rs", "/Cargo.toml", "/README.md", "/LICENSE.MIT", ] autolib = false autobins = false autoexamples = false autotests = false autobenches = false description = "A brotli compressor and decompressor that with an interface avoiding the rust stdlib. This makes it suitable for embedded devices and kernels. It is designed with a pluggable allocator so that the standard lib's allocator may be employed. The default build also includes a stdlib allocator and stream interface. Disable this with --features=no-stdlib. All included code is safe." homepage = "https://github.com/dropbox/rust-brotli" documentation = "https://docs.rs/brotli/" readme = "README.md" keywords = [ "brotli", "decompression", "lz77", "huffman", "nostd", ] categories = [ "compression", "no-std", ] license = "BSD-3-Clause AND MIT" repository = "https://github.com/dropbox/rust-brotli" [features] benchmark = ["brotli-decompressor/benchmark"] billing = [] default = ["std"] disable-timer = ["brotli-decompressor/disable-timer"] disallow_large_window_size = [] external-literal-probability = [] ffi-api = ["brotli-decompressor/ffi-api"] float64 = [] floating_point_context_mixing = [] no-stdlib-ffi-binding = [] pass-through-ffi-panics = [] seccomp = ["brotli-decompressor/seccomp"] simd = [] std = [ "alloc-stdlib", "brotli-decompressor/std", ] validation = ["sha2"] vector_scratch_space = [] [lib] name = "brotli" path = "src/lib.rs" [[bin]] name = "brotli" path = "src/bin/brotli.rs" doc = false [[bin]] name = "catbrotli" path = "src/bin/catbrotli.rs" doc = false [[example]] name = "compress" path = "examples/compress.rs" [[example]] name = "decompress" path = "examples/decompress.rs" [dependencies.alloc-no-stdlib] version = "2.0" [dependencies.alloc-stdlib] version = "~0.2" optional = true [dependencies.brotli-decompressor] version = "~5.0" default-features = false [dependencies.sha2] version = "~0.10" optional = true [profile.release] lto = true incremental = false brotli-8.0.2/Cargo.toml.orig000064400000000000000000000034741046102023000140250ustar 00000000000000[package] name = "brotli" version = "8.0.2" authors = ["Daniel Reiter Horn ", "The Brotli Authors"] description = "A brotli compressor and decompressor that with an interface avoiding the rust stdlib. This makes it suitable for embedded devices and kernels. It is designed with a pluggable allocator so that the standard lib's allocator may be employed. The default build also includes a stdlib allocator and stream interface. Disable this with --features=no-stdlib. All included code is safe." license = "BSD-3-Clause AND MIT" documentation = "https://docs.rs/brotli/" homepage = "https://github.com/dropbox/rust-brotli" repository = "https://github.com/dropbox/rust-brotli" keywords = ["brotli", "decompression", "lz77", "huffman", "nostd"] categories = ["compression", "no-std"] readme = "README.md" autobins = false edition = "2015" rust-version = "1.59.0" include = [ "/src/**/*.rs", "/examples/**/*.rs", "/Cargo.toml", "/README.md", "/LICENSE.MIT", ] [[bin]] doc = false name = "brotli" [[bin]] doc = false name = "catbrotli" [profile.release] lto = true incremental = false [dependencies] "alloc-no-stdlib" = { version = "2.0" } "alloc-stdlib" = { version = "~0.2", optional = true } "brotli-decompressor" = { version = "~5.0", default-features = false } "sha2" = { version = "~0.10", optional = true } [features] default = ["std"] benchmark = ["brotli-decompressor/benchmark"] billing = [] disable-timer = ["brotli-decompressor/disable-timer"] disallow_large_window_size = [] external-literal-probability = [] ffi-api = ["brotli-decompressor/ffi-api"] float64 = [] floating_point_context_mixing = [] no-stdlib-ffi-binding = [] pass-through-ffi-panics = [] seccomp = ["brotli-decompressor/seccomp"] simd = [] std = ["alloc-stdlib", "brotli-decompressor/std"] validation = ["sha2"] vector_scratch_space = [] brotli-8.0.2/LICENSE.MIT000064400000000000000000000020741046102023000125660ustar 00000000000000Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. brotli-8.0.2/README.md000064400000000000000000000213661046102023000124150ustar 00000000000000# rust-brotli [![crates.io](https://img.shields.io/crates/v/brotli.svg)](https://crates.io/crates/brotli) [![Build Status](https://travis-ci.org/dropbox/rust-brotli.svg?branch=master)](https://travis-ci.org/dropbox/rust-brotli) ## What's new in 8.0.2 Fix for memory leak in ffi API ## What's new in 8.0.1 Compatibility for ffi builds ## What's new in 8.0.0 * Fixed LZ77 to comply with the specification * No longer seed the context by the end of the lz77 dictionary. Instead use zero for the seed as would happen without a dictionary. This matches the behavior of brotli with a custom dictionary as specified in * https://datatracker.ietf.org/doc/draft-vandevenne-shared-brotli-format/ ## What's new in 7.0.0 * Fix error with short writes * allow quality=10 for certain APIs and make it default to 9.5 ## What's new in 6.0.0 * Remove unused SIMD use statements * hide a few warnings - these are TODOs, and should be fixed in separate PRs * do NOT build SIMD as part of MSRV -- doesn't make any sense to combine nightly with MSRV ## What's new in 5.0.0 * The FFI is no longer active by default to avoid ODR issues if multiple versions of brotli are included in several dependent crates. ## What's new in 4.0.0 Pinned to a rust-brotli-decompressor that can disable the ffi with the ffi-api flag. This can help avoid symbol conflicts with other brotli libs. ## What's new in 3.5 Updated SIMD support. Better CI integration. Cleaned up some of the clippy warnings. ## What's new in 3.4 Brotli decompressor's reader and writer has better behavior when operating upon brotli streams with extra bits at the end. Optional features like stdsimd are now tested or disabled for now. ## What's new in 3.2 * into_inner conversions for both Reader and Writer classes ## What's new in 3.0 * A fully compatible FFI for drop-in compatibiltiy with the https://github.com/google/brotli binaries * custom allocators fully supported * Multithreaded compression so multiple threads can operate in unison on a single file * Concatenatability mode to add the feature requested in https://github.com/google/brotli/issues/628 * binary tool catbrotli can accomplish this if the first file was specified with -apendable and the second with -catable * validation mode where a file is double-checked to be able to be decompressed with the same settings; useful for benchmarking or fuzzing * Magic Number: where the brotli file can have a useful header with a few magic bytes, concatability info and a final output size for pre-allocating memory ## What's new in 2.5 * In 2.5 The callback also passes down an allocator to make new StaticCommands and PDFs and 256 bit floating point vectors. * In 2.4 The callback with the compression intermediate representation now passes a full metablock at a time. Also these items are mutable in case futher optimization is desired ## What's new in 2.3 * Flush now produces output instead of calling finish on the stream. This allows you to use the writer abstraction to get immediate output without having to resort to the CompressStream internal abstraction ## Project Requirements Direct no-stdlib port of the C brotli compressor to Rust no dependency on the Rust stdlib: this library would be ideal for decompressing within a rust kernel among other things. This is useful to see how C and Rust compare in an apples-to-apples comparison where the same algorithms and data structures and optimizations are employed. ## Compression Usage Rust brotli currently supports compression levels 0 - 11 They should be bitwise identical to the brotli C compression engine at compression levels 0-9 Recommended lg_window_size is between 20 and 22 ### With the io::Read abstraction ```rust let mut input = brotli::CompressorReader::new(&mut io::stdin(), 4096 /* buffer size */, quality as u32, lg_window_size as u32); ``` then you can simply read input as you would any other io::Read class ### With the io::Write abstraction ```rust let mut writer = brotli::Compressor::new(&mut io::stdout(), 4096 /* buffer size */, quality as u32, lg_window_size as u32); ``` There are also methods to build Compressor Readers or Writers using the with_params static function eg: ```rust let params = BrotliEncoderParams::default(); // modify params to fit the application needs let mut writer = brotli::Compressor::with_params(&mut io::stdout(), 4096 /* buffer size */, params); ``` or for the reader ```rust let params = BrotliEncoderParams::default(); // modify params to fit the application needs let mut writer = brotli::CompressorReader::with_params(&mut io::stdin(), 4096 /* buffer size */, params); ``` ### With the Stream Copy abstraction ```rust match brotli::BrotliCompress(&mut io::stdin(), &mut io::stdout(), &brotli_encoder_params) { Ok(_) => {}, Err(e) => panic!("Error {:?}", e), } ``` ## Decompression Usage ### With the io::Read abstraction ```rust let mut input = brotli::Decompressor::new(&mut io::stdin(), 4096 /* buffer size */); ``` then you can simply read input as you would any other io::Read class ### With the io::Write abstraction ```rust let mut writer = brotli::DecompressorWriter::new(&mut io::stdout(), 4096 /* buffer size */); ``` ### With the Stream Copy abstraction ```rust match brotli::BrotliDecompress(&mut io::stdin(), &mut io::stdout()) { Ok(_) => {}, Err(e) => panic!("Error {:?}", e), } ``` ### With manual memory management There are 3 steps to using brotli without stdlib 1. setup the memory manager 2. setup the BrotliState 3. in a loop, call BrotliDecompressStream in Detail ```rust // at global scope declare a MemPool type -- in this case we'll choose the heap to // avoid unsafe code, and avoid restrictions of the stack size declare_stack_allocator_struct!(MemPool, heap); // at local scope, make a heap allocated buffers to hold uint8's uint32's and huffman codes let mut u8_buffer = define_allocator_memory_pool!(4096, u8, [0; 32 * 1024 * 1024], heap); let mut u32_buffer = define_allocator_memory_pool!(4096, u32, [0; 1024 * 1024], heap); let mut hc_buffer = define_allocator_memory_pool!(4096, HuffmanCode, [0; 4 * 1024 * 1024], heap); let heap_u8_allocator = HeapPrealloc::::new_allocator(4096, &mut u8_buffer, bzero); let heap_u32_allocator = HeapPrealloc::::new_allocator(4096, &mut u32_buffer, bzero); let heap_hc_allocator = HeapPrealloc::::new_allocator(4096, &mut hc_buffer, bzero); // At this point no more syscalls are going to be needed since everything can come from the allocators. // Feel free to activate SECCOMP jailing or other mechanisms to secure your application if you wish. // Now it's possible to setup the decompressor state let mut brotli_state = BrotliState::new(heap_u8_allocator, heap_u32_allocator, heap_hc_allocator); // at this point the decompressor simply needs an input and output buffer and the ability to track // the available data left in each buffer loop { result = BrotliDecompressStream(&mut available_in, &mut input_offset, &input.slice(), &mut available_out, &mut output_offset, &mut output.slice_mut(), &mut written, &mut brotli_state); // just end the decompression if result is BrotliResult::ResultSuccess or BrotliResult::ResultFailure } ``` This interface is the same interface that the C brotli decompressor uses Also feel free to use custom allocators that invoke Box directly. This example illustrates a mechanism to avoid subsequent syscalls after the initial allocation ## Using the C interface rust-brotli is a drop-in replacement for the official https://github.com/google/brotli C implementation. That means you can use it from any place that supports that library. To build rust-brotli in this manner enter the c subdirectory and run make there cd c && make this should build c/target/release/libbrotli.so and should build the vanilla command line tool in C for compressing and decompressing any brotli file. the libbrotli.so in c/target/release should be able to replace any other libbrotli.so file, but with all the advantages of using safe rust (except in the FFI bindings) The code also allows a wider range of options, including forcing the prediction mode (eg UTF8 vs signed vs MSB vs LSB) and changing the weight of the literal cost from 540 to other values. Additionally the CATABLE and APPENDABLE options are exposed and allow concatenation of files created in this manner. Specifically CATABLE files can be concatenated in any order using the catbrotli tool and APPENDABLE files can be the first file in a sequence of catable files... eg you can combine appendable.br catable1.br catable2.br catable3.br or simply catable0.br catable1.br catable2.br catable3.br brotli-8.0.2/examples/compress.rs000064400000000000000000000024651046102023000151540ustar 00000000000000extern crate brotli; #[cfg(not(feature = "std"))] fn main() { panic!("For no-stdlib examples please see the tests") } #[cfg(feature = "std")] fn main() { use std::io; use std::io::{Read, Write}; let stdout = &mut io::stdout(); { let mut writer = brotli::CompressorWriter::new(stdout, 4096, 11, 22); let mut buf = [0u8; 4096]; loop { match io::stdin().read(&mut buf[..]) { Err(e) => { if let io::ErrorKind::Interrupted = e.kind() { continue; } panic!("{}", e); } Ok(size) => { if size == 0 { match writer.flush() { Err(e) => { if let io::ErrorKind::Interrupted = e.kind() { continue; } panic!("{}", e) } Ok(_) => break, } } match writer.write_all(&buf[..size]) { Err(e) => panic!("{}", e), Ok(_) => {} } } } } } } brotli-8.0.2/examples/decompress.rs000064400000000000000000000017461046102023000154660ustar 00000000000000extern crate brotli; #[cfg(not(feature = "std"))] fn main() { panic!("For no-stdlib examples please see the tests") } #[cfg(feature = "std")] fn main() { use std::io; let stdin = &mut io::stdin(); { use std::io::{Read, Write}; let mut reader = brotli::Decompressor::new( stdin, 4096, // buffer size ); let mut buf = [0u8; 4096]; loop { match reader.read(&mut buf[..]) { Err(e) => { if let io::ErrorKind::Interrupted = e.kind() { continue; } panic!("{}", e); } Ok(size) => { if size == 0 { break; } match io::stdout().write_all(&buf[..size]) { Err(e) => panic!("{}", e), Ok(_) => {} } } } } } } brotli-8.0.2/src/bin/brotli.rs000064400000000000000000001115761046102023000143410ustar 00000000000000#![cfg_attr(feature = "benchmark", feature(test))] extern crate alloc_no_stdlib; extern crate brotli; extern crate brotli_decompressor; extern crate core; #[cfg(feature = "validation")] extern crate sha2; pub mod integration_tests; mod test_broccoli; mod test_custom_dict; mod test_threading; mod tests; mod util; mod validate; use core::cmp::{max, min}; use core::ops; use std::env; use std::fs::File; use std::io::{self, Error, ErrorKind, Read, Seek, SeekFrom, Write}; use alloc_no_stdlib::{Allocator, SliceWrapper, SliceWrapperMut}; use brotli::enc::backward_references::BrotliEncoderMode; use brotli::enc::threading::{ BrotliEncoderThreadError, CompressMulti, CompressionThreadResult, Owned, SendAlloc, }; use brotli::enc::{ compress_worker_pool, new_work_pool, BrotliEncoderMaxCompressedSizeMulti, BrotliEncoderParams, UnionHasher, WorkerPool, }; use brotli::CustomRead; const MAX_THREADS: usize = 16; pub struct Rebox { b: Box<[T]>, } impl From> for Rebox { fn from(data: Vec) -> Self { Rebox:: { b: data.into_boxed_slice(), } } } impl core::default::Default for Rebox { fn default() -> Self { let v: Vec = Vec::new(); let b = v.into_boxed_slice(); Rebox:: { b } } } impl ops::Index for Rebox { type Output = T; fn index(&self, index: usize) -> &T { &(*self.b)[index] } } impl ops::IndexMut for Rebox { fn index_mut(&mut self, index: usize) -> &mut T { &mut (*self.b)[index] } } impl alloc_no_stdlib::SliceWrapper for Rebox { fn slice(&self) -> &[T] { &self.b } } impl alloc_no_stdlib::SliceWrapperMut for Rebox { fn slice_mut(&mut self) -> &mut [T] { &mut self.b } } #[derive(Clone, Copy, Default)] pub struct HeapAllocator {} impl alloc_no_stdlib::Allocator for HeapAllocator { type AllocatedMemory = Rebox; fn alloc_cell(self: &mut HeapAllocator, len: usize) -> Rebox { let v: Vec = vec![T::default(); len]; let b = v.into_boxed_slice(); Rebox:: { b } } fn free_cell(self: &mut HeapAllocator, _data: Rebox) {} } /* type HeapBrotliAlloc = brotli::CombiningAllocator< HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, HeapAllocator, >; */ macro_rules! println_stderr( ($($val:tt)*) => { { writeln!(&mut ::std::io::stderr(), $($val)*).unwrap(); } } ); use std::path::Path; // declare_stack_allocator_struct!(MemPool, 4096, global); pub struct IoWriterWrapper<'a, OutputType: Write + 'a>(&'a mut OutputType); pub struct IoReaderWrapper<'a, OutputType: Read + 'a>(&'a mut OutputType); impl<'a, OutputType: Write> brotli::CustomWrite for IoWriterWrapper<'a, OutputType> { fn flush(&mut self) -> Result<(), io::Error> { loop { match self.0.flush() { Err(e) => match e.kind() { ErrorKind::Interrupted => continue, _ => return Err(e), }, Ok(_) => return Ok(()), } } } fn write(&mut self, buf: &[u8]) -> Result { loop { match self.0.write(buf) { Err(e) => match e.kind() { ErrorKind::Interrupted => continue, _ => return Err(e), }, Ok(cur_written) => return Ok(cur_written), } } } } impl<'a, InputType: Read> brotli::CustomRead for IoReaderWrapper<'a, InputType> { fn read(&mut self, buf: &mut [u8]) -> Result { loop { match self.0.read(buf) { Err(e) => match e.kind() { ErrorKind::Interrupted => continue, _ => return Err(e), }, Ok(cur_read) => return Ok(cur_read), } } } } struct IntoIoReader(OutputType); impl brotli::CustomRead for IntoIoReader { fn read(&mut self, buf: &mut [u8]) -> Result { loop { match self.0.read(buf) { Err(e) => match e.kind() { ErrorKind::Interrupted => continue, _ => return Err(e), }, Ok(cur_read) => return Ok(cur_read), } } } } #[cfg(not(feature = "seccomp"))] pub fn decompress( r: &mut InputType, w: &mut OutputType, buffer_size: usize, custom_dictionary: Rebox, ) -> Result<(), io::Error> where InputType: Read, OutputType: Write, { let mut alloc_u8 = HeapAllocator::default(); let mut input_buffer = alloc_u8.alloc_cell(buffer_size); let mut output_buffer = alloc_u8.alloc_cell(buffer_size); brotli::BrotliDecompressCustomIoCustomDict( &mut IoReaderWrapper::(r), &mut IoWriterWrapper::(w), input_buffer.slice_mut(), output_buffer.slice_mut(), alloc_u8, HeapAllocator::default(), HeapAllocator::default(), custom_dictionary, Error::new(ErrorKind::UnexpectedEof, "Unexpected EOF"), ) } #[cfg(feature = "seccomp")] extern "C" { fn calloc(n_elem: usize, el_size: usize) -> *mut u8; fn free(ptr: *mut u8); fn syscall(value: i32) -> i32; fn prctl(operation: i32, flags: u32) -> i32; } #[cfg(feature = "seccomp")] const PR_SET_SECCOMP: i32 = 22; #[cfg(feature = "seccomp")] const SECCOMP_MODE_STRICT: u32 = 1; #[cfg(feature = "seccomp")] declare_stack_allocator_struct!(CallocAllocatedFreelist, 8192, calloc); #[cfg(feature = "seccomp")] pub fn decompress( r: &mut InputType, w: &mut OutputType, buffer_size: usize, custom_dictionary: Rebox, ) -> Result<(), io::Error> where InputType: Read, OutputType: Write, { if custom_dictionary.len() != 0 { return Err(io::Error::new( ErrorKind::InvalidData, "Not allowed to have a custom_dictionary with SECCOMP", )); } core::mem::drop(custom_dictionary); let u8_buffer = unsafe { define_allocator_memory_pool!(4, u8, [0; 1024 * 1024 * 200], calloc) }; let u32_buffer = unsafe { define_allocator_memory_pool!(4, u32, [0; 16384], calloc) }; let hc_buffer = unsafe { define_allocator_memory_pool!(4, HuffmanCode, [0; 1024 * 1024 * 16], calloc) }; let mut alloc_u8 = CallocAllocatedFreelist::::new_allocator(u8_buffer.data, bzero); let alloc_u32 = CallocAllocatedFreelist::::new_allocator(u32_buffer.data, bzero); let alloc_hc = CallocAllocatedFreelist::::new_allocator(hc_buffer.data, bzero); let ret = unsafe { prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT) }; if ret != 0 { panic!("Unable to activate seccomp"); } match brotli::BrotliDecompressCustomIo( &mut IoReaderWrapper::(r), &mut IoWriterWrapper::(w), &mut alloc_u8.alloc_cell(buffer_size).slice_mut(), &mut alloc_u8.alloc_cell(buffer_size).slice_mut(), alloc_u8, alloc_u32, alloc_hc, Error::new(ErrorKind::UnexpectedEof, "Unexpected EOF"), ) { Err(e) => Err(e), Ok(()) => { unsafe { syscall(60); }; unreachable!() } } } pub fn new_brotli_heap_alloc() -> HeapAllocator { HeapAllocator::default() } impl brotli::enc::BrotliAlloc for HeapAllocator {} pub fn compress_multi_nostd( input: Vec, output: &mut [u8], params: &BrotliEncoderParams, mut num_threads: usize, ) -> Result { let mut alloc_array = [ SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), ]; if num_threads > alloc_array.len() { num_threads = alloc_array.len(); } CompressMulti( params, &mut Owned::new(Rebox::from(input)), output, &mut alloc_array[..num_threads], &mut util::MTSpawner::default(), ) } pub fn compress_multi( r: &mut InputType, w: &mut OutputType, params: &BrotliEncoderParams, mut num_threads: usize, work_pool: Option< &mut WorkerPool< CompressionThreadResult, UnionHasher, HeapAllocator, (Rebox, BrotliEncoderParams), >, >, ) -> Result { let mut input: Vec = Vec::::new(); r.read_to_end(&mut input)?; let mut output = Rebox::from(vec![ 0u8; BrotliEncoderMaxCompressedSizeMulti( input.len(), num_threads ) ]); let res = if let Some(worker_pool) = work_pool { let mut alloc_array = [ SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), ]; if num_threads > alloc_array.len() { num_threads = alloc_array.len(); } compress_worker_pool( params, &mut Owned::new(Rebox::from(input)), output.slice_mut(), &mut alloc_array[..num_threads], worker_pool, ) } else { compress_multi_nostd(input, output.slice_mut(), params, num_threads) }; match res { Ok(size) => { if let Err(err) = w.write_all(&output.slice()[..size]) { Err(err) } else { Ok(size) } } Err(err) => Err(io::Error::new(ErrorKind::Other, format!("{:?}", err))), } } pub fn compress( r: &mut InputType, w: &mut OutputType, buffer_size: usize, params: &brotli::enc::BrotliEncoderParams, custom_dictionary: &[u8], num_threads: usize, ) -> Result where InputType: Read, OutputType: Write, { if num_threads > 1 && custom_dictionary.is_empty() && !params.log_meta_block { if has_stdlib() { return compress_multi( r, w, params, num_threads, Some(&mut new_work_pool(num_threads - 1)), ); } else { return compress_multi(r, w, params, num_threads, None); } } let mut alloc_u8 = HeapAllocator::default(); let mut input_buffer = alloc_u8.alloc_cell(buffer_size); let mut output_buffer = alloc_u8.alloc_cell(buffer_size); let mut log = |pm: &mut brotli::interface::PredictionModeContextMap, data: &mut [brotli::interface::Command], mb: brotli::InputPair, _mfv: &mut HeapAllocator| { let tmp = brotli::interface::Command::PredictionMode( brotli::interface::PredictionModeContextMap:: { literal_context_map: brotli::InputReference::from(&pm.literal_context_map), predmode_speed_and_distance_context_map: brotli::InputReference::from( &pm.predmode_speed_and_distance_context_map, ), }, ); util::write_one(&tmp); for cmd in data.iter() { util::write_one(&cmd.thaw_pair(&mb)); } }; if params.log_meta_block { println_stderr!("window {} 0 0 0", params.lgwin); } brotli::BrotliCompressCustomIoCustomDict( &mut IoReaderWrapper::(r), &mut IoWriterWrapper::(w), input_buffer.slice_mut(), output_buffer.slice_mut(), params, new_brotli_heap_alloc(), &mut log, custom_dictionary, Error::new(ErrorKind::UnexpectedEof, "Unexpected EOF"), ) } // This decompressor is defined unconditionally on whether std is defined // so we can exercise the code in any case pub struct BrotliDecompressor( brotli::DecompressorCustomIo< io::Error, IntoIoReader, Rebox, HeapAllocator, HeapAllocator, HeapAllocator, >, ); impl BrotliDecompressor { pub fn new(r: R, buffer_size: usize) -> Self { let mut alloc_u8 = HeapAllocator::default(); let buffer = alloc_u8.alloc_cell(buffer_size); let alloc_u32 = HeapAllocator::default(); let alloc_hc = HeapAllocator::default(); BrotliDecompressor::(brotli::DecompressorCustomIo::< Error, IntoIoReader, Rebox, HeapAllocator, HeapAllocator, HeapAllocator, >::new( IntoIoReader::(r), buffer, alloc_u8, alloc_u32, alloc_hc, io::Error::new(ErrorKind::InvalidData, "Invalid Data"), )) } } impl Read for BrotliDecompressor { fn read(&mut self, buf: &mut [u8]) -> Result { self.0.read(buf) } } #[cfg(test)] fn writeln0( strm: &mut OutputType, data: &str, ) -> core::result::Result<(), io::Error> { writeln!(strm, "{:}", data) } #[cfg(test)] fn writeln_time( strm: &mut OutputType, data: &str, v0: u64, v1: u64, v2: u32, ) -> core::result::Result<(), io::Error> { writeln!(strm, "{:} {:} {:}.{:09}", v0, data, v1, v2) } #[allow(non_upper_case_globals)] pub const kMaxDictionarySize: usize = 50331660; fn read_custom_dictionary(filename: &str) -> Vec { let mut dict = match File::open(Path::new(&filename)) { Err(why) => panic!("couldn't open custom dictionary {:}\n{:}", filename, why), Ok(file) => file, }; let mut ret = Vec::::new(); dict.read_to_end(&mut ret).unwrap(); if ret.len() > kMaxDictionarySize { panic!("dictionary [{}] is larger than maximum allowed: {}\n", filename, kMaxDictionarySize); } ret } #[cfg(feature = "std")] fn has_stdlib() -> bool { true } #[cfg(not(feature = "std"))] fn has_stdlib() -> bool { false } fn main() { let mut buffer_size = 65536; let mut do_compress = false; let mut do_validate = false; let mut params = brotli::enc::BrotliEncoderInitParams(); let mut custom_dictionary = Vec::::new(); let mut use_work_pool = has_stdlib(); params.quality = 11; // default let mut filenames = [std::string::String::new(), std::string::String::new()]; let mut num_benchmarks = 1; let mut double_dash = false; let mut num_threads = 1; if env::args_os().len() > 1 { let mut first = true; for argument in env::args() { if first { first = false; continue; } if argument == "--" { double_dash = true; continue; } if (argument == "-catable" || argument == "--catable") && !double_dash { params.catable = true; params.use_dictionary = false; params.appendable = true; continue; } if (argument == "-nothreadpool" || argument == "--nothreadpool") && !double_dash { use_work_pool = false; continue; } if (argument == "-appendable" || argument == "--appendable") && !double_dash { params.appendable = true; continue; } if (argument.starts_with("-magic") || argument.starts_with("--magic")) && !double_dash { params.magic_number = true; continue; } if argument.starts_with("-customdictionary=") && !double_dash { for item in argument.splitn(2, |c| c == '=').skip(1) { custom_dictionary = read_custom_dictionary(item); } continue; } if argument == "--dump-dictionary" && !double_dash { util::print_dictionary(util::permute_dictionary()); return; } if argument == "-utf8" && !double_dash { params.mode = BrotliEncoderMode::BROTLI_FORCE_UTF8_PRIOR; continue; } if argument == "-msb" && !double_dash { params.mode = BrotliEncoderMode::BROTLI_FORCE_MSB_PRIOR; continue; } if argument == "-lsb" && !double_dash { params.mode = BrotliEncoderMode::BROTLI_FORCE_LSB_PRIOR; continue; } if argument == "-signed" && !double_dash { params.mode = BrotliEncoderMode::BROTLI_FORCE_SIGNED_PRIOR; continue; } if argument == "-efficient" && !double_dash { params.favor_cpu_efficiency = true; continue; } if argument == "-lowlatency" && !double_dash { params.favor_cpu_efficiency = false; continue; } if argument == "-i" && !double_dash { // display the intermediate representation of metablocks params.log_meta_block = true; continue; } if (argument == "-0" || argument == "-q0") && !double_dash { params.quality = 0; continue; } if (argument == "-1" || argument == "-q1") && !double_dash { params.quality = 1; continue; } if (argument == "-2" || argument == "-q2") && !double_dash { params.quality = 2; continue; } if (argument == "-3" || argument == "-q3") && !double_dash { params.quality = 3; continue; } if (argument == "-4" || argument == "-q4") && !double_dash { params.quality = 4; continue; } if (argument == "-5" || argument == "-q5") && !double_dash { params.quality = 5; continue; } if (argument == "-6" || argument == "-q6") && !double_dash { params.quality = 6; continue; } if (argument == "-7" || argument == "-q7") && !double_dash { params.quality = 7; continue; } if (argument == "-8" || argument == "-q8") && !double_dash { params.quality = 8; continue; } if (argument == "-9" || argument == "-q9") && !double_dash { params.quality = 9; continue; } if (argument == "-9.5" || argument == "-q9.5") && !double_dash { params.quality = 10; params.q9_5 = true; continue; } if (argument == "-9.5x" || argument == "-q9.5x") && !double_dash { params.quality = 11; params.q9_5 = true; continue; } if (argument == "-10" || argument == "-q10") && !double_dash { params.quality = 10; continue; } if (argument == "-11" || argument == "-q11") && !double_dash { params.quality = 11; continue; } if (argument == "-q9.5y") && !double_dash { params.quality = 12; params.q9_5 = true; continue; } if argument.starts_with("-l") && !double_dash { params.lgblock = argument .trim_matches('-') .trim_matches('l') .parse::() .unwrap(); continue; } if argument.starts_with("-j") && !double_dash { num_threads = min( max( 1, argument .trim_matches('-') .trim_matches('j') .parse::() .unwrap() as usize, ), MAX_THREADS, ); continue; } if argument.starts_with("-bytescore=") && !double_dash { params.hasher.literal_byte_score = argument .trim_matches('-') .trim_matches('b') .trim_matches('y') .trim_matches('t') .trim_matches('e') .trim_matches('s') .trim_matches('c') .trim_matches('o') .trim_matches('r') .trim_matches('e') .trim_matches('=') .parse::() .unwrap(); continue; } if argument.starts_with("-w") && !double_dash { params.lgwin = argument .trim_matches('-') .trim_matches('w') .parse::() .unwrap(); continue; } if (argument == "-validate" || argument == "--validate") && !double_dash { do_validate = true; continue; } if argument.starts_with("-bs") && !double_dash { buffer_size = argument .trim_matches('-') .trim_matches('b') .trim_matches('s') .trim_matches('=') .parse::() .unwrap(); continue; } if argument.starts_with("-findprior") && !double_dash { params.prior_bitmask_detection = 1; continue; } if argument.starts_with("-findspeed=") && !double_dash { params.cdf_adaptation_detection = argument .trim_matches('-') .trim_matches('f') .trim_matches('i') .trim_matches('n') .trim_matches('d') .trim_matches('r') .trim_matches('a') .trim_matches('n') .trim_matches('d') .trim_matches('o') .trim_matches('m') .trim_matches('=') .parse::() .unwrap() as u8; continue; } else if argument == "-findspeed" && !double_dash { params.cdf_adaptation_detection = 1; continue; } if argument == "-basicstride" && !double_dash { params.stride_detection_quality = 1; continue; } else if argument == "-advstride" && !double_dash { params.stride_detection_quality = 3; continue; } else if argument == "-stride" && !double_dash { params.stride_detection_quality = 2; continue; } else if (argument.starts_with("-s") && !argument.starts_with("-speed=")) && !double_dash { params.size_hint = argument .trim_matches('-') .trim_matches('s') .parse::() .unwrap(); continue; } if argument.starts_with("-speed=") && !double_dash { let comma_string = argument .trim_matches('-') .trim_matches('s') .trim_matches('p') .trim_matches('e') .trim_matches('e') .trim_matches('d') .trim_matches('='); let split = comma_string.split(','); for (index, s) in split.enumerate() { let data = s.parse::().unwrap(); if data > 16384 { println_stderr!("Speed must be <= 16384, not {}", data); } if index == 0 { for item in params.literal_adaptation.iter_mut() { item.0 = data; } } else if index == 1 { for item in params.literal_adaptation.iter_mut() { item.1 = data; } } else if (index & 1) == 0 { params.literal_adaptation[index / 2].0 = data; } else { params.literal_adaptation[index / 2].1 = data; } } continue; } if argument == "-avoiddistanceprefixsearch" && !double_dash { params.avoid_distance_prefix_search = true; } if argument.starts_with("-b") && !double_dash { num_benchmarks = argument .trim_matches('-') .trim_matches('b') .parse::() .unwrap(); continue; } if argument == "-c" && !double_dash { do_compress = true; continue; } if argument == "-h" || argument == "-help" || argument == "--help" && !double_dash { println_stderr!("Decompression:\nbrotli [input_file] [output_file]\nCompression:brotli -c -q9.5 -w22 [input_file] [output_file]\nQuality may be one of -q9.5 -q9.5x -q9.5y or -q[0-11] for standard brotli settings.\nOptional size hint -s to direct better compression\n\nThe -i parameter produces a cross human readdable IR representation of the file.\nThis can be ingested by other compressors.\nIR-specific options include:\n-findprior\n-speed="); return; } if filenames[0].is_empty() { filenames[0] = argument.clone(); continue; } if filenames[1].is_empty() { filenames[1] = argument.clone(); continue; } panic!("Unknown Argument {:}", argument); } if !filenames[0].is_empty() { let mut input = match File::open(Path::new(&filenames[0])) { Err(why) => panic!("couldn't open {:}\n{:}", filenames[0], why), Ok(file) => file, }; if !filenames[1].is_empty() { let mut output = match File::create(Path::new(&filenames[1])) { Err(why) => panic!( "couldn't open file for writing: {:}\n{:}", filenames[1], why ), Ok(file) => file, }; let mut worker_pool = if num_threads != 1 && do_compress && use_work_pool && !do_validate { Some(new_work_pool(num_threads - 1)) } else { None }; for i in 0..num_benchmarks { if do_validate { let dict = core::mem::take(&mut custom_dictionary); if num_benchmarks > 0 { custom_dictionary = dict.clone(); } match validate::compress_validate( &mut input, &mut output, buffer_size, ¶ms, dict.into(), num_threads, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } else if do_compress { if let Some(ref mut work_pool) = worker_pool { match compress_multi( &mut input, &mut output, ¶ms, num_threads, Some(work_pool), ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } else if num_threads != 1 { match compress_multi( &mut input, &mut output, ¶ms, num_threads, None, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } else { match compress( &mut input, &mut output, buffer_size, ¶ms, &custom_dictionary[..], num_threads, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } } else { let dict = core::mem::take(&mut custom_dictionary); if num_benchmarks > 0 { custom_dictionary = dict.clone(); } match decompress(&mut input, &mut output, buffer_size, dict.into()) { Ok(_) => {} Err(e) => panic!("Error: {:} during brotli decompress\nTo compress with Brotli, specify the -c flag.", e), } } if i + 1 != num_benchmarks { input.seek(SeekFrom::Start(0)).unwrap(); output.seek(SeekFrom::Start(0)).unwrap(); } } drop(output); } else { assert_eq!(num_benchmarks, 1); if do_validate { if do_compress { match validate::compress_validate( &mut input, &mut io::stdout(), buffer_size, ¶ms, custom_dictionary.into(), num_threads, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } else { match validate::compress_validate( &mut input, &mut io::sink(), buffer_size, ¶ms, custom_dictionary.into(), num_threads, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } } else if do_compress { match compress( &mut input, &mut io::stdout(), buffer_size, ¶ms, &custom_dictionary[..], num_threads, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } else { match decompress(&mut input, &mut io::stdout(), buffer_size, custom_dictionary.into()) { Ok(_) => {} Err(e) => panic!("Error: {:} during brotli decompress\nTo compress with Brotli, specify the -c flag.", e), } } } drop(input); } else { assert_eq!(num_benchmarks, 1); if do_validate { if do_compress { match validate::compress_validate( &mut io::stdin(), &mut io::stdout(), buffer_size, ¶ms, custom_dictionary.into(), num_threads, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } else { match validate::compress_validate( &mut io::stdin(), &mut io::sink(), buffer_size, ¶ms, custom_dictionary.into(), num_threads, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } } else if do_compress { match compress( &mut io::stdin(), &mut io::stdout(), buffer_size, ¶ms, &custom_dictionary[..], num_threads, ) { Ok(_) => return, Err(e) => panic!("Error {:?}", e), } } else { match decompress(&mut io::stdin(), &mut io::stdout(), buffer_size, custom_dictionary.into()) { Ok(_) => return, Err(e) => panic!("Error: {:} during brotli decompress\nTo compress with Brotli, specify the -c flag.", e), } } } } else { assert_eq!(num_benchmarks, 1); match decompress(&mut io::stdin(), &mut io::stdout(), buffer_size, custom_dictionary.into()) { Ok(_) => (), Err(e) => panic!("Error: {:} during brotli decompress\nTo compress with Brotli, specify the -c flag.", e), } } } brotli-8.0.2/src/bin/catbrotli.rs000064400000000000000000000132031046102023000150150ustar 00000000000000extern crate brotli; extern crate core; use std::fs::File; use std::io::{Read, Write}; use std::path::Path; use std::{env, io}; use brotli::concat::{BroCatli, BroCatliResult}; fn usage() { writeln!( &mut ::std::io::stderr(), "Usage: [-w] filename0 filename1 filename2..." ) .unwrap(); } fn read_no_interrupt(r: &mut R, buf: &mut [u8]) -> Result { loop { match r.read(buf) { Err(e) => match e.kind() { io::ErrorKind::Interrupted => continue, _ => return Err(e), }, Ok(cur_read) => return Ok(cur_read), } } } fn write_no_interrupt(w: &mut W, mut buf: &[u8]) -> Result { let mut total_read = 0usize; loop { match w.write(buf) { Err(e) => match e.kind() { io::ErrorKind::Interrupted => continue, _ => return Err(e), }, Ok(cur_read) => { buf = &buf[cur_read..]; total_read += cur_read; if buf.is_empty() { return Ok(total_read); } } } } } fn main() { let mut window_size: Option = None; let mut double_dash = false; let mut buffer_size = 4096usize; let mut filenames = Vec::::new(); let mut ostream = io::stdout(); if env::args_os().len() > 1 { for argument in env::args().skip(1) { if argument.starts_with("-w") && !double_dash { window_size = Some( argument .trim_matches('-') .trim_matches('w') .parse::() .unwrap() as u8, ); continue; } if argument.starts_with("-bs") && !double_dash { buffer_size = argument .trim_matches('-') .trim_matches('b') .trim_matches('s') .parse::() .unwrap(); continue; } if argument == "--" { double_dash = true; continue; } filenames.push(argument); } } else { usage(); return; } let mut ibuffer = vec![0u8; buffer_size]; let mut obuffer = vec![0u8; buffer_size]; let mut ooffset = 0; let mut ioffset; let mut bro_cat_li = match window_size { Some(ws) => BroCatli::new_with_window_size(ws), None => BroCatli::new(), }; for filename in filenames { bro_cat_li.new_brotli_file(); let mut input_file = match File::open(Path::new(&filename)) { Err(why) => panic!("couldn't open {:}\n{:}", filename, why), Ok(file) => file, }; loop { ioffset = 0; match read_no_interrupt(&mut input_file, &mut ibuffer[..]) { Err(e) => panic!("{}", e), Ok(cur_read) => { if cur_read == 0 { break; } loop { match bro_cat_li.stream( &ibuffer[..cur_read], &mut ioffset, &mut obuffer[..], &mut ooffset, ) { BroCatliResult::NeedsMoreOutput => { match write_no_interrupt(&mut ostream, &obuffer[..ooffset]) { Err(why) => panic!("couldn't write: {:}", why), Ok(count) => { assert_eq!(count, ooffset); } } ooffset = 0; } BroCatliResult::NeedsMoreInput => { break; } BroCatliResult::Success => { panic!("Unexpected state: Success when streaming before finish"); } failure => { panic!( "Failed to concatenate files on {:} {:?}", filename, failure ); } } } } } } } loop { match bro_cat_li.finish(&mut obuffer[..], &mut ooffset) { BroCatliResult::NeedsMoreOutput => { match write_no_interrupt(&mut ostream, &obuffer[..ooffset]) { Err(why) => panic!("couldn't write: {:}", why), Ok(count) => { assert_eq!(count, ooffset); } } ooffset = 0; } BroCatliResult::NeedsMoreInput => { panic!("Unexpected EOF"); } BroCatliResult::Success => { if ooffset != 0 { match write_no_interrupt(&mut ostream, &obuffer[..ooffset]) { Err(why) => panic!("couldn't write: {:}", why), Ok(count) => { assert_eq!(count, ooffset); } } } break; } failure => { panic!("{:?}", failure) } } } } brotli-8.0.2/src/bin/integration_tests.rs000064400000000000000000001155411046102023000166070ustar 00000000000000#![cfg(test)] #![allow(non_upper_case_globals)] #![allow(dead_code)] extern crate brotli_decompressor; extern crate core; use core::cmp::min; use std::io; #[cfg(feature = "std")] use std::io::{Read, Write}; use std::time::Duration; #[cfg(not(feature = "disable-timer"))] use std::time::SystemTime; use brotli::BrotliDecompressStream; use super::alloc_no_stdlib::{Allocator, SliceWrapper, SliceWrapperMut}; use super::brotli::{BrotliResult, BrotliState}; #[cfg(feature = "std")] use super::brotli::{CompressorReader, CompressorWriter}; #[cfg(feature = "std")] use super::brotli_decompressor::{Decompressor, DecompressorWriter}; use super::{HeapAllocator, Rebox}; #[cfg(feature = "benchmark")] extern crate test; #[cfg(feature = "benchmark")] use self::test::Bencher; pub struct Buffer { data: Vec, read_offset: usize, } #[derive(Debug)] pub struct UnlimitedBuffer { pub data: Vec, read_offset: usize, } #[cfg(feature = "disable-timer")] fn now() -> Duration { return Duration::new(0, 0); } #[cfg(not(feature = "disable-timer"))] fn now() -> SystemTime { SystemTime::now() } #[cfg(not(feature = "disable-timer"))] fn elapsed(start: SystemTime) -> (Duration, bool) { match start.elapsed() { Ok(delta) => (delta, false), _ => (Duration::new(0, 0), true), } } #[cfg(feature = "disable-timer")] fn elapsed(_start: Duration) -> (Duration, bool) { return (Duration::new(0, 0), true); } fn _write_all(w: &mut OutputType, buf: &[u8]) -> Result<(), io::Error> where OutputType: io::Write, { let mut total_written: usize = 0; while total_written < buf.len() { match w.write(&buf[total_written..]) { Err(e) => match e.kind() { io::ErrorKind::Interrupted => continue, _ => return Err(e), }, Ok(cur_written) => { if cur_written == 0 { return Err(io::Error::new(io::ErrorKind::UnexpectedEof, "Write EOF")); } total_written += cur_written; } } } Ok(()) } trait Runner { fn iter(&mut self, cb: &mut Fn); } struct Passthrough {} impl Runner for Passthrough { fn iter(&mut self, cb: &mut Fn) { cb() } } #[cfg(feature = "benchmark")] struct BenchmarkPassthrough<'a>(pub &'a mut Bencher); #[cfg(feature = "benchmark")] impl<'a> Runner for BenchmarkPassthrough<'a> { fn iter(&mut self, cb: &mut Fn) { self.0.iter(cb) } } // option_env!("BENCHMARK_MODE").is_some() fn decompress_internal( r: &mut InputType, mut w: &mut OutputType, input_buffer_limit: usize, output_buffer_limit: usize, runner: &mut Run, ) -> Result<(), io::Error> where InputType: io::Read, OutputType: io::Write, { let mut total = Duration::new(0, 0); let mut range: usize = 0; let mut timing_error: bool = false; runner.iter(&mut || { range += 1; let mut brotli_state = BrotliState::new( HeapAllocator::default(), HeapAllocator::default(), HeapAllocator::default(), ); let mut input = brotli_state.alloc_u8.alloc_cell(input_buffer_limit); let mut output = brotli_state.alloc_u8.alloc_cell(output_buffer_limit); let mut available_out: usize = output.slice().len(); // let amount = try!(r.read(&mut buf)); let mut available_in: usize = 0; let mut input_offset: usize = 0; let mut output_offset: usize = 0; let mut result: BrotliResult = BrotliResult::NeedsMoreInput; loop { match result { BrotliResult::NeedsMoreInput => { input_offset = 0; match r.read(input.slice_mut()) { Err(e) => match e.kind() { io::ErrorKind::Interrupted => continue, _ => panic!("{}", e), }, Ok(size) => { if size == 0 { panic!( "{:?}", io::Error::new(io::ErrorKind::UnexpectedEof, "Read EOF") ); } available_in = size; } } } BrotliResult::NeedsMoreOutput => { _write_all(&mut w, &output.slice()[..output_offset]).unwrap(); output_offset = 0; } BrotliResult::ResultSuccess => break, BrotliResult::ResultFailure => panic!("FAILURE"), } let mut written: usize = 0; let start = now(); result = BrotliDecompressStream( &mut available_in, &mut input_offset, input.slice(), &mut available_out, &mut output_offset, output.slice_mut(), &mut written, &mut brotli_state, ); let (delta, err) = elapsed(start); if err { timing_error = true; } total += delta; if output_offset != 0 { _write_all(&mut w, &output.slice()[..output_offset]).unwrap(); output_offset = 0; available_out = output.slice().len() } } }); if timing_error { let _r = super::writeln0(&mut io::stderr(), "Timing error"); } else { let _r = super::writeln_time( &mut io::stderr(), "Iterations; Time", range as u64, total.as_secs(), total.subsec_nanos(), ); } Ok(()) } impl Buffer { pub fn new(buf: &[u8]) -> Buffer { let mut ret = Buffer { data: Vec::::new(), read_offset: 0, }; ret.data.extend(buf); ret } } impl UnlimitedBuffer { pub fn new(buf: &[u8]) -> Self { let mut ret = UnlimitedBuffer { data: Vec::::new(), read_offset: 0, }; ret.data.extend(buf); ret } pub fn reset_read(&mut self) { self.read_offset = 0; } pub fn data(&self) -> &[u8] { &self.data[..] } } impl io::Read for Buffer { fn read(&mut self, buf: &mut [u8]) -> io::Result { if self.read_offset == self.data.len() { self.read_offset = 0; } let bytes_to_read = min(buf.len(), self.data.len() - self.read_offset); if bytes_to_read > 0 { buf[0..bytes_to_read] .clone_from_slice(&self.data[self.read_offset..self.read_offset + bytes_to_read]); } self.read_offset += bytes_to_read; Ok(bytes_to_read) } } impl io::Write for Buffer { fn write(&mut self, buf: &[u8]) -> io::Result { if self.read_offset == self.data.len() { return Ok(buf.len()); } self.data.extend(buf); Ok(buf.len()) } fn flush(&mut self) -> io::Result<()> { Ok(()) } } impl io::Read for UnlimitedBuffer { fn read(&mut self, buf: &mut [u8]) -> io::Result { let bytes_to_read = min(buf.len(), self.data.len() - self.read_offset); if bytes_to_read > 0 { buf[0..bytes_to_read] .clone_from_slice(&self.data[self.read_offset..self.read_offset + bytes_to_read]); } self.read_offset += bytes_to_read; Ok(bytes_to_read) } } impl io::Write for UnlimitedBuffer { fn write(&mut self, buf: &[u8]) -> io::Result { self.data.extend(buf); Ok(buf.len()) } fn flush(&mut self) -> io::Result<()> { Ok(()) } } #[allow(non_snake_case)] #[test] fn test_roundtrip_64x() { let X = b'X'; let in_buf: [u8; 64] = [ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, ]; let mut input = UnlimitedBuffer::new(&in_buf); let mut compressed = UnlimitedBuffer::new(&[]); let mut output = UnlimitedBuffer::new(&[]); let q: i32 = 9; let lgwin: i32 = 16; let mut params = super::brotli::enc::BrotliEncoderInitParams(); params.quality = q; params.lgwin = lgwin; match super::compress(&mut input, &mut compressed, 65536, ¶ms, &[], 1) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } let mut compressed_in = UnlimitedBuffer::new(&compressed.data[..]); match super::decompress(&mut compressed_in, &mut output, 65536, Rebox::default()) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } for i in 0..input.data.len() { assert_eq!(output.data[i], input.data[i]); } assert_eq!(output.data.len(), input.data.len()); assert_eq!(input.read_offset, in_buf.len()); } fn roundtrip_helper(in_buf: &[u8], q: i32, lgwin: i32, q9_5: bool) -> usize { let mut params = super::brotli::enc::BrotliEncoderInitParams(); params.quality = q; params.q9_5 = q9_5; params.lgwin = lgwin; params.size_hint = if in_buf.len() > 100000 { 2048 * 1024 } else { in_buf.len() }; let mut input = UnlimitedBuffer::new(in_buf); let mut compressed = UnlimitedBuffer::new(&[]); let mut output = UnlimitedBuffer::new(&[]); match super::compress(&mut input, &mut compressed, 4096, ¶ms, &[], 1) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } let mut compressed_in = UnlimitedBuffer::new(&compressed.data[..]); match super::decompress(&mut compressed_in, &mut output, 4096, Rebox::default()) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } for i in 0..input.data.len() { assert_eq!(output.data[i], input.data[i]); } assert_eq!(output.data.len(), input.data.len()); assert_eq!(input.read_offset, in_buf.len()); compressed.data[..].len() } fn total_roundtrip_helper(data: &[u8]) { for q in 0..10 { roundtrip_helper(data, q, q + 13, false); } roundtrip_helper(data, 10, 23, true); } static RANDOM_THEN_UNICODE: &[u8] = include_bytes!("../../testdata/random_then_unicode"); #[test] fn test_random_then_unicode_0() { roundtrip_helper(RANDOM_THEN_UNICODE, 0, 13, false); } #[test] fn test_random_then_unicode_1() { roundtrip_helper(RANDOM_THEN_UNICODE, 1, 14, false); } #[test] fn test_random_then_unicode_2() { roundtrip_helper(RANDOM_THEN_UNICODE, 2, 15, false); } #[test] fn test_random_then_unicode_3() { roundtrip_helper(RANDOM_THEN_UNICODE, 3, 16, false); } #[test] fn test_random_then_unicode_4() { roundtrip_helper(RANDOM_THEN_UNICODE, 4, 17, false); } #[test] fn test_random_then_unicode_5() { roundtrip_helper(RANDOM_THEN_UNICODE, 5, 18, false); } #[test] fn test_random_then_unicode_6() { roundtrip_helper(RANDOM_THEN_UNICODE, 6, 19, false); } #[test] fn test_random_then_unicode_7() { roundtrip_helper(RANDOM_THEN_UNICODE, 7, 20, false); } #[test] fn test_random_then_unicode_8() { roundtrip_helper(RANDOM_THEN_UNICODE, 8, 21, false); } #[test] fn test_random_then_unicode_9() { roundtrip_helper(RANDOM_THEN_UNICODE, 9, 22, false); } #[cfg(feature = "std")] const random_then_unicode_compressed_size_9_5: usize = 130036; #[cfg(feature = "std")] const random_then_unicode_compressed_size_9_5x: usize = 129715; #[cfg(not(feature = "std"))] const alice_compressed_size_10: usize = 47490; #[cfg(not(feature = "std"))] const alice_compressed_size_11: usize = 46496; #[cfg(feature = "std")] #[cfg(not(feature = "float64"))] const alice_compressed_size_10: usize = 47488; #[cfg(feature = "std")] #[cfg(not(feature = "float64"))] const alice_compressed_size_11: usize = 46493; #[cfg(feature = "std")] #[cfg(feature = "float64")] const alice_compressed_size_10: usize = 47515; #[cfg(feature = "std")] #[cfg(feature = "float64")] const alice_compressed_size_11: usize = 46510; #[cfg(not(feature = "std"))] // approx log const random_then_unicode_compressed_size_9_5: usize = 130105; #[cfg(not(feature = "std"))] // approx log const random_then_unicode_compressed_size_9_5x: usize = 129873; #[test] fn test_random_then_unicode_9_5() { let c_size = roundtrip_helper(RANDOM_THEN_UNICODE, 10, 28, true); assert_eq!(c_size, random_then_unicode_compressed_size_9_5); } #[test] fn test_random_then_unicode_9x5() { let c_size = roundtrip_helper(RANDOM_THEN_UNICODE, 11, 22, true); assert_eq!(c_size, random_then_unicode_compressed_size_9_5x); } #[test] fn test_alice29_11() { let c_size = roundtrip_helper(include_bytes!("../../testdata/alice29.txt"), 11, 22, false); if c_size != 46492 { // depends on log2 impl assert_eq!(c_size, alice_compressed_size_11); } } #[test] fn test_alice29_10() { let c_size = roundtrip_helper(include_bytes!("../../testdata/alice29.txt"), 10, 22, false); assert_eq!(c_size, alice_compressed_size_10); } #[test] fn test_roundtrip_quickfox_repeated() { total_roundtrip_helper(include_bytes!("../../testdata/quickfox_repeated")); } #[test] fn test_roundtrip_alice29() { total_roundtrip_helper(include_bytes!("../../testdata/alice29.txt")); } #[test] fn test_roundtrip_as_you_lik() { total_roundtrip_helper(include_bytes!("../../testdata/asyoulik.txt")); } #[cfg(feature = "std")] fn reader_helper(mut in_buf: &[u8], q: u32, lgwin: u32) { let original_buf = in_buf; let mut cmp = [0u8; 259]; let mut input = UnlimitedBuffer::new(in_buf); { let renc = CompressorReader::new(&mut input, 255, q, lgwin); let mut rdec = Decompressor::new(renc, 257); loop { match rdec.read(&mut cmp[..]) { Ok(size) => { if size == 0 { break; } assert_eq!(cmp[..size], in_buf[..size]); in_buf = &in_buf[size..]; } Err(e) => panic!("Error {:?}", e), } } let inner_item = rdec.into_inner(); let _inner_inner_item = inner_item.into_inner(); } in_buf = original_buf; input = UnlimitedBuffer::new(in_buf); let mut r2enc = CompressorReader::new(&mut input, 255, q, lgwin); let mut compressed_size = 0usize; loop { match r2enc.read(&mut cmp[..]) { Ok(size) => { if size == 0 { break; } compressed_size += size; } Err(e) => panic!("Error {:?}", e), } } let pct_ratio = 90usize; assert!(compressed_size < original_buf.len() * pct_ratio / 100); } /* #[cfg(feature="std")] fn simple_reader_helper(mut in_buf: &[u8], q: u32, lgwin: u32) { let mut xinput = UnlimitedBuffer::new(&in_buf); let xenc; let mut buf = HeapAllocator::default().alloc_cell(1024); xenc = SimpleReader::new(xinput, buf, 1, 16); return; let original_buf = in_buf; let mut cmp = [0u8; 259]; let mut buf = HeapAllocator::default().alloc_cell(1024); let mut input = UnlimitedBuffer::new(&in_buf); { let renc = SimpleReader::new(&mut input, buf, q, lgwin).unwrap(); let mut rdec = Decompressor::new(renc, 257); loop { match rdec.read(&mut cmp[..]) { Ok(size) => { if size == 0 { break; } assert_eq!(cmp[..size], in_buf[..size]); in_buf = &in_buf[size..]; } Err(e) => panic!("Error {:?}", e), } } } in_buf = original_buf; input = UnlimitedBuffer::new(&in_buf); let mut r2enc = CompressorReader::new(&mut input, 255, q, lgwin); let mut compressed_size = 0usize; loop { match r2enc.read(&mut cmp[..]) { Ok(size) => { if size == 0 { break; } compressed_size += size; } Err(e) => panic!("Error {:?}", e), } } let pct_ratio = 90usize; assert!(compressed_size < original_buf.len() * pct_ratio / 100); } */ #[cfg(feature = "std")] #[test] fn test_reader_64x() { reader_helper(include_bytes!("../../testdata/64x"), 9, 20); } /* #[cfg(feature="std")] #[test] fn test_simple_64x() { bogus_reader_helper(include_bytes!("../../testdata/64x"), 9, 20); }*/ #[cfg(feature = "std")] #[test] fn test_reader_as_you_lik() { reader_helper(include_bytes!("../../testdata/asyoulik.txt"), 9, 20); } #[cfg(feature = "std")] #[test] fn test_reader_quickfox_repeated() { reader_helper(include_bytes!("../../testdata/quickfox_repeated"), 9, 20); } #[cfg(feature = "std")] #[test] fn test_reader_random_then_unicode() { reader_helper(include_bytes!("../../testdata/random_then_unicode"), 9, 20); } #[cfg(feature = "std")] #[test] fn test_reader_alice() { reader_helper(include_bytes!("../../testdata/alice29.txt"), 9, 22); } #[cfg(feature = "std")] fn writer_helper(mut in_buf: &[u8], buf_size: usize, q: u32, lgwin: u32, do_flush: bool) { let original_buf = in_buf; let mut output = UnlimitedBuffer::new(&[]); { { let wdec = DecompressorWriter::new(&mut output, 257); { let mut wenc = CompressorWriter::new(wdec, 255, q, lgwin); while !in_buf.is_empty() { match wenc.write(&in_buf[..min(in_buf.len(), buf_size)]) { Ok(size) => { if size == 0 { break; } in_buf = &in_buf[size..]; } Err(e) => panic!("Error {:?}", e), } if do_flush { if let Err(e) = wenc.flush() { panic!("Error {:?}", e); } } } } } assert_eq!(output.data.len(), original_buf.len()); for i in 0..min(original_buf.len(), output.data.len()) { assert_eq!(output.data[i], original_buf[i]); } in_buf = original_buf; let mut compressed = UnlimitedBuffer::new(&[]); { let mut wenc = CompressorWriter::new(&mut compressed, 255, q, lgwin); while !in_buf.is_empty() { match wenc.write(&in_buf[..min(in_buf.len(), buf_size)]) { Ok(size) => { if size == 0 { break; } in_buf = &in_buf[size..]; } Err(e) => panic!("Error {:?}", e), } } } let pct_ratio = 90usize; assert!(compressed.data.len() < original_buf.len() * pct_ratio / 100); } } #[cfg(feature = "std")] fn into_inner_writer_helper(mut in_buf: &[u8], buf_size: usize, q: u32, lgwin: u32) { let orig_buf = in_buf; let mut compressed = UnlimitedBuffer::new(&[]); let mut wenc = CompressorWriter::new(&mut compressed, 255, q, lgwin); while !in_buf.is_empty() { match wenc.write(&in_buf[..min(in_buf.len(), buf_size)]) { Ok(size) => { if size == 0 { break; } in_buf = &in_buf[size..]; } Err(e) => panic!("Error {:?}", e), } } let c2 = wenc.into_inner(); let pct_ratio = 95usize; assert!(!c2.data.is_empty()); assert!(c2.data.len() < orig_buf.len() * pct_ratio / 100); let mut compressed_in = UnlimitedBuffer::new(&c2.data[..]); let mut output = UnlimitedBuffer::new(&[]); match super::decompress(&mut compressed_in, &mut output, 65536, Rebox::default()) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } for i in 0..orig_buf.len() { assert_eq!(output.data[i], orig_buf[i]); } assert_eq!(output.data.len(), orig_buf.len()); } #[cfg(feature = "std")] #[test] fn test_writer_as_you_lik() { writer_helper( include_bytes!("../../testdata/asyoulik.txt"), 17, 9, 20, false, ); } #[cfg(feature = "std")] #[test] fn test_writer_as_you_lik_into_inner() { into_inner_writer_helper(include_bytes!("../../testdata/asyoulik.txt"), 256, 4, 16); } #[cfg(feature = "std")] #[test] fn test_writer_64x() { writer_helper(include_bytes!("../../testdata/64x"), 17, 9, 20, false); } #[cfg(feature = "std")] #[test] fn test_writer_quickfox_repeated() { writer_helper( include_bytes!("../../testdata/quickfox_repeated"), 251, 9, 20, false, ); } #[cfg(feature = "std")] #[test] fn test_writer_random_then_unicode() { writer_helper( include_bytes!("../../testdata/random_then_unicode"), 277, 9, 20, false, ); } #[cfg(feature = "std")] #[test] fn test_writer_alice() { writer_helper( include_bytes!("../../testdata/alice29.txt"), 299, 9, 22, true, ); } #[test] fn test_10x_10y() { let in_buf: [u8; 12] = [ 0x1b, 0x13, 0x00, 0x00, 0xa4, 0xb0, 0xb2, 0xea, 0x81, 0x47, 0x02, 0x8a, ]; let mut input = Buffer::new(&in_buf); let mut output = Buffer::new(&[]); output.read_offset = 20; match super::decompress(&mut input, &mut output, 65536, Rebox::default()) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } let mut i: usize = 0; while i < 10 { assert_eq!(output.data[i], b'X'); assert_eq!(output.data[i + 10], b'Y'); i += 1; } assert_eq!(output.data.len(), 20); assert_eq!(input.read_offset, in_buf.len()); } #[test] fn test_10x_10y_one_out_byte() { let in_buf: [u8; 12] = [ 0x1b, 0x13, 0x00, 0x00, 0xa4, 0xb0, 0xb2, 0xea, 0x81, 0x47, 0x02, 0x8a, ]; let mut input = Buffer::new(&in_buf); let mut output = Buffer::new(&[]); output.read_offset = 20; match decompress_internal(&mut input, &mut output, 12, 1, &mut Passthrough {}) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } let mut i: usize = 0; while i < 10 { assert_eq!(output.data[i], b'X'); assert_eq!(output.data[i + 10], b'Y'); i += 1; } assert_eq!(output.data.len(), 20); assert_eq!(input.read_offset, in_buf.len()); } #[test] fn test_10x_10y_byte_by_byte() { let in_buf: [u8; 12] = [ 0x1b, 0x13, 0x00, 0x00, 0xa4, 0xb0, 0xb2, 0xea, 0x81, 0x47, 0x02, 0x8a, ]; let mut input = Buffer::new(&in_buf); let mut output = Buffer::new(&[]); output.read_offset = 20; match decompress_internal(&mut input, &mut output, 1, 1, &mut Passthrough {}) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } let mut i: usize = 0; while i < 10 { assert_eq!(output.data[i], b'X'); assert_eq!(output.data[i + 10], b'Y'); i += 1; } assert_eq!(output.data.len(), 20); assert_eq!(input.read_offset, in_buf.len()); } fn assert_decompressed_input_matches_output( input_slice: &[u8], output_slice: &[u8], input_buffer_size: usize, output_buffer_size: usize, ) { let mut input = Buffer::new(input_slice); let mut output = Buffer::new(&[]); output.read_offset = output_slice.len(); if input_buffer_size == output_buffer_size { match super::decompress(&mut input, &mut output, input_buffer_size, Rebox::default()) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } else { match decompress_internal( &mut input, &mut output, input_buffer_size, output_buffer_size, &mut Passthrough {}, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } assert_eq!(output.data.len(), output_slice.len()); assert_eq!(output.data, output_slice) } #[cfg(feature = "benchmark")] fn benchmark_decompressed_input( input_slice: &[u8], output_slice: &[u8], input_buffer_size: usize, output_buffer_size: usize, bench: &mut Bencher, ) { let mut input = Buffer::new(input_slice); let mut output = Buffer::new(&[]); output.read_offset = output_slice.len(); match decompress_internal( &mut input, &mut output, input_buffer_size, output_buffer_size, &mut BenchmarkPassthrough(bench), ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } assert_eq!(output.data.len(), output_slice.len()); assert_eq!(output.data, output_slice) } pub struct LimitedBuffer<'a> { pub data: &'a mut [u8], pub write_offset: usize, pub read_offset: usize, } impl<'a> LimitedBuffer<'a> { pub fn new(buf: &'a mut [u8]) -> Self { LimitedBuffer { data: buf, write_offset: 0, read_offset: 0, } } } impl<'a> LimitedBuffer<'a> { fn reset(&mut self) { self.write_offset = 0; self.read_offset = 0; self.data.split_at_mut(32).0.clone_from_slice(&[0u8; 32]); // clear the first 256 bits } fn reset_read(&mut self) { self.read_offset = 0; } fn written(&self) -> &[u8] { &self.data[..self.write_offset] } } impl<'a> io::Read for LimitedBuffer<'a> { fn read(&mut self, buf: &mut [u8]) -> io::Result { let bytes_to_read = min(buf.len(), self.data.len() - self.read_offset); if bytes_to_read > 0 { buf[0..bytes_to_read] .clone_from_slice(&self.data[self.read_offset..self.read_offset + bytes_to_read]); } self.read_offset += bytes_to_read; Ok(bytes_to_read) } } impl<'a> io::Write for LimitedBuffer<'a> { fn write(&mut self, buf: &[u8]) -> io::Result { let bytes_to_write = min(buf.len(), self.data.len() - self.write_offset); if bytes_to_write > 0 { self.data[self.write_offset..self.write_offset + bytes_to_write] .clone_from_slice(&buf[..bytes_to_write]); } else { return Err(io::Error::new(io::ErrorKind::WriteZero, "OutOfBufferSpace")); } self.write_offset += bytes_to_write; Ok(bytes_to_write) } fn flush(&mut self) -> io::Result<()> { Ok(()) } } fn benchmark_helper( input_slice: &[u8], compress_buffer_size: usize, decompress_buffer_size: usize, bench_compress: bool, bench_decompress: bool, bench: &mut Run, quality: i32, q9_5: bool, ) { let mut params = super::brotli::enc::BrotliEncoderInitParams(); params.quality = quality; params.q9_5 = q9_5; params.large_window = true; let mut input = UnlimitedBuffer::new(input_slice); let mut compressed_array = vec![0; input_slice.len() * 100 / 99]; let mut rt_array = vec![0; input_slice.len() + 1]; let mut compressed = LimitedBuffer::new(&mut compressed_array[..]); let mut rt = LimitedBuffer::new(&mut rt_array[..]); if !bench_compress { match super::compress( &mut input, &mut compressed, compress_buffer_size, ¶ms, &[], 1, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } bench.iter(&mut || { input.reset_read(); if bench_compress { compressed.reset(); match super::compress( &mut input, &mut compressed, compress_buffer_size, ¶ms, &[], 1, ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } if bench_decompress { compressed.reset_read(); rt.reset(); match super::decompress( &mut compressed, &mut rt, decompress_buffer_size, Rebox::default(), ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } }); if !bench_decompress { compressed.reset_read(); rt.reset(); match super::decompress( &mut compressed, &mut rt, decompress_buffer_size, Rebox::default(), ) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } } assert_eq!(rt.write_offset, input_slice.len()); assert_eq!(&rt.data[..input_slice.len()], input_slice); } fn expand_test_data(size: usize) -> Vec { let mut ret = vec![0u8; size]; let original_data = include_bytes!("../../testdata/random_then_unicode"); let mut count = 0; let mut iter = 0usize; while count < size { let to_copy = min(size - count, original_data.len()); let target = &mut ret[count..(count + to_copy)]; for (dst, src) in target.iter_mut().zip(original_data[..to_copy].iter()) { *dst = src.wrapping_add(iter as u8); } count += to_copy; iter += 1; } ret } #[test] fn test_1024k() { let td = expand_test_data(1024 * 1024); benchmark_helper( &td[..], 65536, 65536, true, true, &mut Passthrough {}, 2, false, ); } static UKKONOOA: &[u8] = include_bytes!("../../testdata/ukkonooa"); #[test] fn test_ukkonooa() { let td = UKKONOOA; benchmark_helper(td, 65536, 65536, true, true, &mut Passthrough {}, 11, false); } #[cfg(feature = "benchmark")] #[bench] fn bench_e2e_decode_q9_5_1024k(bench: &mut Bencher) { let td = expand_test_data(1024 * 1024); benchmark_helper( &td[..], 65536, 65536, false, true, &mut BenchmarkPassthrough(bench), 11, true, ); } #[cfg(feature = "benchmark")] #[bench] fn bench_e2e_decode_q11_1024k(bench: &mut Bencher) { let td = expand_test_data(1024 * 1024); benchmark_helper( &td[..], 65536, 65536, false, true, &mut BenchmarkPassthrough(bench), 11, false, ); } #[cfg(feature = "benchmark")] #[bench] fn bench_e2e_decode_q5_1024k(bench: &mut Bencher) { let td = expand_test_data(1024 * 1024); benchmark_helper( &td[..], 65536, 65536, false, true, &mut BenchmarkPassthrough(bench), 5, false, ); } #[cfg(feature = "benchmark")] #[bench] fn bench_e2e_rt_q9_5_1024k(bench: &mut Bencher) { let td = expand_test_data(1024 * 1024); benchmark_helper( &td[..], 65536, 65536, true, true, &mut BenchmarkPassthrough(bench), 11, true, ); } #[cfg(feature = "benchmark")] #[bench] fn bench_e2e_rt_q11_1024k(bench: &mut Bencher) { let td = expand_test_data(1024 * 1024); benchmark_helper( &td[..], 65536, 65536, true, true, &mut BenchmarkPassthrough(bench), 11, false, ); } #[cfg(feature = "benchmark")] #[bench] fn bench_e2e_rt_q9_1024k(bench: &mut Bencher) { let td = expand_test_data(1024 * 1024); benchmark_helper( &td[..], 65536, 65536, true, true, &mut BenchmarkPassthrough(bench), 9, false, ); } #[cfg(feature = "benchmark")] #[bench] fn bench_e2e_rt_q5_1024k(bench: &mut Bencher) { let td = expand_test_data(1024 * 1024); benchmark_helper( &td[..], 65536, 65536, true, true, &mut BenchmarkPassthrough(bench), 5, false, ); } #[test] fn test_64x() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/64x.compressed"), include_bytes!("../../testdata/64x"), 3, 3, ); } #[test] fn test_as_you_like_it() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/asyoulik.txt.compressed"), include_bytes!("../../testdata/asyoulik.txt"), 65536, 65536, ); } #[test] #[should_panic] fn test_negative_hypothesis() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/64x"), include_bytes!("../../testdata/64x"), 3, 3, ); } static ALICE29_BR: &[u8] = include_bytes!("../../testdata/alice29.txt.compressed"); static ALICE29: &[u8] = include_bytes!("../../testdata/alice29.txt"); #[test] fn test_alice29() { assert_decompressed_input_matches_output(ALICE29_BR, ALICE29, 65536, 65536); } #[cfg(feature = "benchmark")] #[bench] fn benchmark_alice29(bench: &mut Bencher) { benchmark_decompressed_input(ALICE29_BR, ALICE29, 65536, 65536, bench); } #[test] fn test_alice1() { assert_decompressed_input_matches_output(ALICE29_BR, ALICE29, 1, 65536); } #[test] fn test_backward65536() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/backward65536.compressed"), include_bytes!("../../testdata/backward65536"), 65536, 65536, ); } #[test] fn test_compressed_file() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/compressed_file.compressed"), include_bytes!("../../testdata/compressed_file"), 65536, 65536, ); } #[test] fn test_compressed_repeated() { assert_decompressed_input_matches_output( include_bytes!( "../../testdata/compressed_repeated.\ compressed" ), include_bytes!("../../testdata/compressed_repeated"), 65536, 65536, ); } #[test] fn test_empty() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty0() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.00"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty1() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.01"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty2() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.02"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty3() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.03"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty4() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.04"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty5() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.05"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty6() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.06"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty7() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.07"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty8() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.08"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty9() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.09"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty10() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.10"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty11() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.11"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty12() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.12"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty13() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.13"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty14() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.14"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty15() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.15"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty16() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.16"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty17() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.17"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } #[test] fn test_empty18() { assert_decompressed_input_matches_output( include_bytes!("../../testdata/empty.compressed.18"), include_bytes!("../../testdata/empty"), 65536, 65536, ); } pub struct SoonErrorReader(&'static [u8], bool); impl io::Read for SoonErrorReader { fn read(&mut self, data: &mut [u8]) -> io::Result { let first = self.1; self.1 = false; if first { let len = min(self.0.len(), data.len()); data[..len].clone_from_slice(&self.0[..len]); return Ok(len); } Err(io::Error::new(io::ErrorKind::PermissionDenied, "err")) } } #[test] fn test_error_returned() { static onetwothreefourfive: [u8; 5] = [1, 2, 3, 4, 5]; let params = super::brotli::enc::BrotliEncoderParams::default(); let mut erroring = SoonErrorReader(&onetwothreefourfive[..], true); let mut br = UnlimitedBuffer::new(&[]); let dict = &[]; let err = super::compress(&mut erroring, &mut br, 4096, ¶ms, dict, 1); if let Ok(_x) = err { panic!("Should have errored {:?}\n", err); } let mut output = UnlimitedBuffer::new(&[]); let mut br_copy = Buffer::new(&br.data[..]); assert_eq!(br.data.len(), 9); match decompress_internal(&mut br_copy, &mut output, 1, 1, &mut Passthrough {}) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } assert_eq!(output.data, &onetwothreefourfive[..]); } brotli-8.0.2/src/bin/test_broccoli.rs000064400000000000000000000352231046102023000156730ustar 00000000000000#![cfg(test)] #![allow(non_upper_case_globals)] #![allow(dead_code)] extern crate brotli_decompressor; extern crate core; use core::cmp::{max, min}; use brotli_decompressor::{CustomRead, CustomWrite}; use super::brotli::concat::{BroCatli, BroCatliResult}; use super::brotli::enc::BrotliEncoderParams; use super::integration_tests::UnlimitedBuffer; use super::Rebox; static RANDOM_THEN_UNICODE: &[u8] = include_bytes!("../../testdata/random_then_unicode"); static ALICE: &[u8] = include_bytes!("../../testdata/alice29.txt"); static UKKONOOA: &[u8] = include_bytes!("../../testdata/ukkonooa"); static ASYOULIKE: &[u8] = include_bytes!("../../testdata/asyoulik.txt"); static BACKWARD65536: &[u8] = include_bytes!("../../testdata/backward65536"); static DICTWORD: &[u8] = include_bytes!("../../testdata/ends_with_truncated_dictionary"); static RANDOM10K: &[u8] = include_bytes!("../../testdata/random_org_10k.bin"); static RANDOMTHENUNICODE: &[u8] = include_bytes!("../../testdata/random_then_unicode"); static QUICKFOX: &[u8] = include_bytes!("../../testdata/quickfox_repeated"); static EMPTY: &[u8] = &[]; fn concat( files: &mut [UnlimitedBuffer], brotli_files: &mut [UnlimitedBuffer], window_override: Option, bs: usize, ) { let mut obuffer = vec![0u8; bs]; let mut ibuffer = vec![0u8; bs]; let mut ooffset = 0usize; let mut ioffset; let mut uboutput = UnlimitedBuffer::new(&[]); { let mut output = super::IoWriterWrapper(&mut uboutput); let mut bro_cat_li = match window_override { Some(ws) => BroCatli::new_with_window_size(ws), None => BroCatli::new(), }; for brotli in brotli_files.iter_mut() { bro_cat_li.new_brotli_file(); { let mut input = super::IoReaderWrapper(brotli); loop { ioffset = 0; match input.read(&mut ibuffer[..]) { Err(e) => panic!("{}", e), Ok(cur_read) => { if cur_read == 0 { break; } loop { match bro_cat_li.stream( &ibuffer[..cur_read], &mut ioffset, &mut obuffer[..], &mut ooffset, ) { BroCatliResult::NeedsMoreOutput => { match output.write(&obuffer[..ooffset]) { Err(why) => panic!("couldn't write: {:}", why), Ok(count) => { assert_eq!(count, ooffset); } } ooffset = 0; } BroCatliResult::NeedsMoreInput => { break; } BroCatliResult::Success => { panic!("Unexpected state: Success when streaming before finish"); } failure => { panic!("{:?}", failure); } } } } } } } brotli.reset_read(); } loop { match bro_cat_li.finish(&mut obuffer[..], &mut ooffset) { BroCatliResult::NeedsMoreOutput => { match output.write(&obuffer[..ooffset]) { Err(why) => panic!("couldn't write\n{:}", why), Ok(count) => { assert_eq!(count, ooffset); } } ooffset = 0; } BroCatliResult::NeedsMoreInput => { panic!("Unexpected EOF"); } BroCatliResult::Success => { if ooffset != 0 { match output.write(&obuffer[..ooffset]) { Err(why) => panic!("couldn't write\n{:}", why), Ok(count) => { assert_eq!(count, ooffset); } } } break; } failure => { panic!("{:?}", failure) } } } } let mut rt = UnlimitedBuffer::new(&[]); match super::decompress(&mut uboutput, &mut rt, 65536, Rebox::default()) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } let mut offset = 0; for file in files { assert_eq!(&rt.data()[offset..offset + file.data().len()], file.data()); offset += file.data().len(); } assert_eq!(offset, rt.data().len()); } fn concat_many_subsets( files: &mut [UnlimitedBuffer], brotli_files: &mut [UnlimitedBuffer], window_override: Option, ) { let test_plans: [(usize, usize); 4] = [(brotli_files.len(), 4096 * 1024), (4, 1), (3, 3), (2, 4096)]; for plan_bs in test_plans.iter() { let files_len = files.len(); for index in 0..(brotli_files.len() - min(plan_bs.0 - 1, files_len)) { let file_subset = &mut files[index..min(index + plan_bs.0, files_len)]; let brotli_subset = &mut brotli_files[index..min(index + plan_bs.0, files_len)]; concat(file_subset, brotli_subset, window_override, plan_bs.1); } } } #[cfg(debug_assertions)] fn light_debug_test(params: &mut BrotliEncoderParams) { params.quality = 5; } #[cfg(not(debug_assertions))] fn light_debug_test(_params: &mut BrotliEncoderParams) {} #[cfg(debug_assertions)] fn medium_debug_test(params: &mut BrotliEncoderParams) { params.quality = 9; params.q9_5 = false; } #[cfg(not(debug_assertions))] fn medium_debug_test(_params: &mut BrotliEncoderParams) {} #[test] #[should_panic] fn test_appendonly_twice_fails() { let mut files = [ UnlimitedBuffer::new(UKKONOOA), UnlimitedBuffer::new(QUICKFOX), ]; let mut ufiles = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[])]; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { let mut params0 = BrotliEncoderParams::default(); params0.appendable = true; super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); } concat(&mut files[..], &mut ufiles[..], None, 2); } #[test] fn test_append_then_empty_works() { let mut files = [UnlimitedBuffer::new(UKKONOOA), UnlimitedBuffer::new(&[])]; let mut ufiles = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[])]; let mut first = true; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { let mut params0 = BrotliEncoderParams::default(); params0.appendable = first; params0.catable = !first; params0.use_dictionary = first; super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); first = false; } concat(&mut files[..], &mut ufiles[..], None, 2); } #[test] fn test_append_then_cat_works() { let mut files = [ UnlimitedBuffer::new(UKKONOOA), UnlimitedBuffer::new(QUICKFOX), ]; let mut ufiles = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[])]; let mut first = true; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { let mut params0 = BrotliEncoderParams::default(); params0.appendable = first; params0.catable = !first; params0.use_dictionary = first; super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); first = false; } concat(&mut files[..], &mut ufiles[..], None, 2); } #[test] fn test_one_byte_works() { let mut files = [UnlimitedBuffer::new(UKKONOOA), UnlimitedBuffer::new(&[8])]; let mut ufiles = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[])]; let mut first = true; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { let mut params0 = BrotliEncoderParams::default(); params0.appendable = first; params0.catable = !first; params0.use_dictionary = first; super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); first = false; } concat(&mut files[..], &mut ufiles[..], None, 2); } #[test] fn test_one_byte_before_works() { let mut files = [UnlimitedBuffer::new(&[8]), UnlimitedBuffer::new(UKKONOOA)]; let mut ufiles = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[])]; let mut first = true; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { let mut params0 = BrotliEncoderParams::default(); params0.appendable = first; params0.catable = !first; params0.use_dictionary = first; super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); first = false; } concat(&mut files[..], &mut ufiles[..], None, 2); } #[test] fn test_two_byte_works() { let mut files = [ UnlimitedBuffer::new(UKKONOOA), UnlimitedBuffer::new(&[8, 9]), ]; let mut ufiles = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[])]; let mut first = true; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { let mut params0 = BrotliEncoderParams::default(); params0.appendable = first; params0.catable = !first; params0.use_dictionary = first; super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); first = false; } concat(&mut files[..], &mut ufiles[..], None, 2); } #[test] fn test_two_byte_before_works() { let mut files = [ UnlimitedBuffer::new(&[8, 9]), UnlimitedBuffer::new(UKKONOOA), ]; let mut ufiles = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[])]; let mut first = true; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { let mut params0 = BrotliEncoderParams::default(); params0.appendable = first; params0.catable = !first; params0.use_dictionary = first; super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); first = false; } concat(&mut files[..], &mut ufiles[..], None, 2); } #[test] fn test_empty_then_cat_works() { let mut files = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(QUICKFOX)]; let mut ufiles = [UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[])]; let mut first = true; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { let mut params0 = BrotliEncoderParams::default(); params0.appendable = first; params0.catable = !first; params0.use_dictionary = first; super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); first = false; } concat(&mut files[..], &mut ufiles[..], None, 2); } #[test] fn test_concat() { let mut files = [ UnlimitedBuffer::new(ALICE), UnlimitedBuffer::new(RANDOMTHENUNICODE), UnlimitedBuffer::new(UKKONOOA), UnlimitedBuffer::new(ASYOULIKE), UnlimitedBuffer::new(BACKWARD65536), UnlimitedBuffer::new(EMPTY), UnlimitedBuffer::new(DICTWORD), UnlimitedBuffer::new(RANDOM10K), UnlimitedBuffer::new(QUICKFOX), ]; let mut params0 = BrotliEncoderParams::default(); light_debug_test(&mut params0); let mut params1 = params0.clone(); params1.quality = 9; params1.q9_5 = true; params1.lgwin = 22; params1.magic_number = true; medium_debug_test(&mut params1); let mut params2 = params0.clone(); params2.quality = if params1.q9_5 || params1.quality > 9 { 9 } else { 8 }; params2.lgwin = 19; let mut params3 = params0.clone(); params3.quality = 8; params3.lgwin = 16; params3.magic_number = true; let mut params4 = params0.clone(); params4.quality = 7; params4.lgwin = 14; let mut params4 = params0.clone(); params4.quality = 1; params4.lgwin = 10; let mut params5 = params0.clone(); params5.quality = 0; params5.lgwin = 10; params5.magic_number = true; params0.lgwin = 26; params0.large_window = true; let mut options = [params0, params1, params2, params3, params4, params5]; for option in options.iter_mut().skip(3) { let mut ufiles = [ UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), ]; let mut first = true; for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { if first { option.appendable = true; } else { option.appendable = false; option.catable = true; option.use_dictionary = false; } super::compress(src, dst, 4096, option, &[], 1).unwrap(); src.reset_read(); first = false; } concat_many_subsets(&mut files[..], &mut ufiles[..], None); return; } let mut ufiles = [ UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), ]; let options_len = options.len(); for (index, (src, dst)) in files.iter_mut().zip(ufiles.iter_mut()).enumerate() { options[min(index, options_len - 1)].catable = true; options[min(index, options_len - 1)].use_dictionary = false; options[min(index, options_len - 1)].appendable = false; options[min(index, options_len - 1)].quality = max(2, options[min(index, options_len - 1)].quality); // ^^^ there's an artificial limitation of using 18 as the minimum window size for quality 0,1 // since this test depends on different window sizes for each stream, exclude q={0,1} super::compress( src, dst, 4096, &options[min(index, options_len - 1)], &[], 1, ) .unwrap(); src.reset_read(); } concat_many_subsets(&mut files[..], &mut ufiles[..], None); concat_many_subsets(&mut files[..], &mut ufiles[..], Some(28)); // FIXME: make this 28 } brotli-8.0.2/src/bin/test_custom_dict.rs000064400000000000000000000303171046102023000164130ustar 00000000000000#![cfg(test)] #![allow(non_upper_case_globals)] #![allow(dead_code)] extern crate brotli_decompressor; extern crate core; use std::io::{Read, Write}; use super::brotli::concat::{BroCatli, BroCatliResult}; use super::brotli::enc::BrotliEncoderParams; use super::integration_tests::UnlimitedBuffer; use super::Rebox; static RANDOM_THEN_UNICODE: &[u8] = include_bytes!("../../testdata/random_then_unicode"); static ALICE: &[u8] = include_bytes!("../../testdata/alice29.txt"); #[test] fn test_custom_dict_minimal() { let mut raw = UnlimitedBuffer::new("\012345656789abcde".as_bytes()); let mut params = BrotliEncoderParams::default(); params.quality = 10; let mut br = UnlimitedBuffer::new(&[]); let mut rt = UnlimitedBuffer::new(&[]); let dict = "123456789abcde".as_bytes(); super::compress(&mut raw, &mut br, 4096, ¶ms, dict, 1).unwrap(); raw.reset_read(); eprintln!("Compressed: {:?}", &br); let mut vec = Vec::::new(); vec.extend(dict); super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)).unwrap(); assert_eq!(rt.data(), raw.data()); } #[test] fn test_custom_dict_large() { let mut params = BrotliEncoderParams::default(); params.quality = 11; let mut br = UnlimitedBuffer::new(&[]); let mut rt = UnlimitedBuffer::new(&[]); let mut dict = [0u8;256]; for (index, val) in dict[..].iter_mut().enumerate() { *val = index as u8; } let mut data_source = [0u8; 10823]; let mut counter = 0usize; for (index, val) in data_source[..].iter_mut().enumerate() { *val = counter as u8; counter += 1; if counter * 10 > index { counter -= index / 11; } } eprintln!("Uncompressed: {:?}", &data_source); let mut raw = UnlimitedBuffer::new(&data_source); super::compress(&mut raw, &mut br, 4096, ¶ms, &dict, 1).unwrap(); raw.reset_read(); eprintln!("Compressed: {:?}", &br); std::fs::File::create("/tmp/compressed.br").expect("Failed").write_all(&br.data).expect("Failed to write compressed"); std::fs::File::create("/tmp/compressed.dict").expect("Failed").write_all(&dict).expect("Failed to write dict"); std::fs::File::create("/tmp/compressed.txt").expect("Failed").write_all(&data_source).expect("Failed to write data source"); let mut vec = Vec::::new(); vec.extend(dict); super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)).unwrap(); assert_eq!(rt.data(), raw.data()); } #[test] fn test_custom_dict_medium() { let mut params = BrotliEncoderParams::default(); params.quality = 11; let mut br = UnlimitedBuffer::new(&[]); let mut rt = UnlimitedBuffer::new(&[]); let mut dict = [0u8;256]; for (index, val) in dict[..].iter_mut().enumerate() { *val = index as u8; } let mut data_source = [0u8; 323]; let mut counter = 0usize; for (index, val) in data_source[..].iter_mut().enumerate() { *val = counter as u8; counter += 1; if counter * 10 > index { counter -= index / 11; counter = counter.wrapping_sub(43); counter = usize::from(counter as u8); } } eprintln!("Uncompressed: {:?}", &data_source[72..]); let new_data_source = [148, 100, 52, 4, 5, 6, 7, 214, 165, 116, 67, 18, 225, 176, 127, 78, 29, 235, 185, 135, 85, 35, 241, 191, 141, 91, 41, 247, 196, 145, 94, 43, 248, 197, 146, 95, 44, 249, 198, 146, 94, 42, 246, 194, 142, 90, 38, 242, 190, 138, 85, 32, 235, 182, 129, 76, 23, 226, 173, 120, 67, 13, 215, 161, 107, 53, 255, 201, 147, 93, 39, 241, 186, 131, 76, 21, 222, 167, 112, 57, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 215, 158, 101, 44, 243, 186, 129, 72, 15, 16, 17, 215, 157, 99, 41, 239, 181, 123, 65, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 215, 155, 95, 35, 231, 171, 111, 51, 247, 187, 127, 66, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 216, 154, 92, 29, 222, 159, 96, 33, 226, 163, 100, 37, 230, 167, 103, 39, 231, 167, 103, 39, 231, 167, 103, 39, 231, 166, 101, 36, 227, 162, 97, 32, 223, 158, 93, 28, 218, 152, 86, 20, 21, 22, 23, 24, 25, 26, 27, 216, 149, 82, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 217, 149, 81, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 217, 147, 77, 7, 8, 9, 10, 11]; let mut raw = UnlimitedBuffer::new(&new_data_source); super::compress(&mut raw, &mut br, 4096, ¶ms, &dict, 1).unwrap(); raw.reset_read(); eprintln!("Compressed: {:?}", &br); let mut vec = Vec::::new(); vec.extend(dict); super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)).unwrap(); assert_eq!(rt.data(), raw.data()); } #[test] fn test_custom_dict_alice() { let mut raw = UnlimitedBuffer::new(ALICE); let mut params = BrotliEncoderParams::default(); params.quality = 11; let mut br = UnlimitedBuffer::new(&[]); let mut rt = UnlimitedBuffer::new(&[]); let dict = &ALICE[12515..23411]; super::compress(&mut raw, &mut br, 4096, ¶ms, dict, 1).unwrap(); raw.reset_read(); eprintln!("Dict {:?}", dict); eprintln!("Compressed: {:?}", &br); let mut vec = Vec::::new(); vec.extend(dict); super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)).unwrap(); assert_eq!(rt.data(), raw.data()); if br.data().len() != 43860 { // This is for 32 bit opts assert_eq!(br.data().len(), 43836); } } #[test] fn test_custom_dict_alice_9_5() { let mut raw = UnlimitedBuffer::new(ALICE); let mut params = BrotliEncoderParams::default(); params.quality = 11; params.q9_5 = true; let mut br = UnlimitedBuffer::new(&[]); let mut rt = UnlimitedBuffer::new(&[]); let dict = &ALICE[12515..23411]; super::compress(&mut raw, &mut br, 4096, ¶ms, dict, 1).unwrap(); raw.reset_read(); eprintln!("Dict {:?}", dict); eprintln!("Compressed: {:?}", &br); let mut vec = Vec::::new(); vec.extend(dict); super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)).unwrap(); assert_eq!(rt.data(), raw.data()); if br.data().len() != 45710 { assert_eq!(br.data().len(), 45698); } } #[test] fn test_custom_wrong_dict_fails() { let mut raw = UnlimitedBuffer::new(ALICE); let mut params = BrotliEncoderParams::default(); params.quality = 10; let mut br = UnlimitedBuffer::new(&[]); let mut rt = UnlimitedBuffer::new(&[]); let dict = &ALICE[12515..19515]; super::compress(&mut raw, &mut br, 4096, ¶ms, dict, 1).unwrap(); raw.reset_read(); let mut vec = Vec::::new(); vec.extend(&dict[1..]); // slightly offset dictionary to be wrong, and ensure the dict was being used above match super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)) { Ok(_) => panic!("Decompression should have failed"), Err(_) => {} } if rt.data() == raw.data() { panic!("they should be unequal"); } } #[test] fn test_custom_wrong_dict_fails_but_doesnt_disrupt_compression_strategy() { let mut raw = UnlimitedBuffer::new(ALICE); let mut params = BrotliEncoderParams::default(); params.quality = 6; let mut br = UnlimitedBuffer::new(&[]); let mut rt = UnlimitedBuffer::new(&[]); let dict = &ALICE[12515..19515]; super::compress(&mut raw, &mut br, 4096, ¶ms, dict, 1).unwrap(); raw.reset_read(); let mut vec = Vec::::new(); vec.extend(&dict[1..]); // slightly offset dictionary to be wrong, and ensure the dict was being used above super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)).unwrap(); if rt.data() == raw.data() { panic!("they should be unequal"); } } #[ignore = "LZ77 mode no longer is compatible with manual file splitting since it sets context to 0 instead of leaving it to the end of the dict"] #[test] fn test_custom_dict_for_multithreading() { let mut raws = [ UnlimitedBuffer::new(&ALICE[..ALICE.len() / 3]), UnlimitedBuffer::new(&ALICE[ALICE.len() / 3..2 * ALICE.len() / 3]), UnlimitedBuffer::new(&ALICE[2 * ALICE.len() / 3..]), ]; let mut params = BrotliEncoderParams::default(); params.quality = 10; params.appendable = true; let mut brs = [ UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), ]; let mut rts = [ UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), UnlimitedBuffer::new(&[]), ]; let dicts = [ &ALICE[..0], &ALICE[..ALICE.len() / 3], &ALICE[..2 * ALICE.len() / 3], ]; for (raw, (br, (rt, dict))) in raws .iter_mut() .zip(brs.iter_mut().zip(rts.iter_mut().zip(dicts.iter()))) { super::compress(raw, br, 4096, ¶ms, &[], 1).unwrap(); raw.reset_read(); let mut vec = Vec::::new(); vec.extend(*dict); super::decompress(br, rt, 4096, Rebox::from(vec)).unwrap(); assert_eq!(rt.data(), raw.data()); params.catable = true; params.use_dictionary = false; } let mut bro_cat_li = BroCatli::new(); let mut output = UnlimitedBuffer::new(&[]); let mut ibuffer = [0u8; 1]; let mut obuffer = [0u8; 1]; let mut ooffset = 0usize; for brotli in brs.iter_mut() { brotli.reset_read(); bro_cat_li.new_brotli_file(); let input = brotli; loop { let mut ioffset = 0usize; match input.read(&mut ibuffer[..]) { Err(e) => panic!("{:?}", e), Ok(cur_read) => { if cur_read == 0 { break; } loop { match bro_cat_li.stream( &ibuffer[..cur_read], &mut ioffset, &mut obuffer[..], &mut ooffset, ) { BroCatliResult::NeedsMoreOutput => { match output.write(&obuffer[..ooffset]) { Err(why) => panic!("couldn't write: {:}", why), Ok(count) => { assert_eq!(count, ooffset); } } ooffset = 0; } BroCatliResult::NeedsMoreInput => { break; } BroCatliResult::Success => { panic!("Unexpected state: Success when streaming before finish"); } failure => { panic!("{:?}", failure); } } } } } } } loop { match bro_cat_li.finish(&mut obuffer[..], &mut ooffset) { BroCatliResult::NeedsMoreOutput => { match output.write(&obuffer[..ooffset]) { Err(why) => panic!("couldn't write\n{:}", why), Ok(count) => { assert_eq!(count, ooffset); } } ooffset = 0; } BroCatliResult::NeedsMoreInput => { panic!("Unexpected EOF"); } BroCatliResult::Success => { if ooffset != 0 { match output.write(&obuffer[..ooffset]) { Err(why) => panic!("couldn't write\n{:}", why), Ok(count) => { assert_eq!(count, ooffset); } } } break; } failure => { panic!("{}", failure as i32) } } } let mut rt = UnlimitedBuffer::new(&[]); output.reset_read(); super::decompress(&mut output, &mut rt, 4096, Rebox::default()).unwrap(); assert_eq!(rt.data(), ALICE); // without setting std flag: approximation make it 4 bytes bigger if output.data().len() != 48568 { assert_eq!(output.data().len(), 48563); // as opposed to 46487 with standard settings } } brotli-8.0.2/src/bin/test_threading.rs000064400000000000000000000172761046102023000160540ustar 00000000000000#![cfg(test)] #![allow(non_upper_case_globals)] #![allow(dead_code)] extern crate brotli_decompressor; extern crate core; use brotli::enc::threading::{Owned, SendAlloc}; use brotli_decompressor::{SliceWrapper, SliceWrapperMut}; use super::brotli::enc::{ compress_multi, compress_multi_no_threadpool, BrotliEncoderMaxCompressedSizeMulti, BrotliEncoderParams, UnionHasher, }; use super::integration_tests::UnlimitedBuffer; use super::{new_brotli_heap_alloc, Rebox}; static RANDOM_THEN_UNICODE: &[u8] = include_bytes!("../../testdata/random_then_unicode"); static ALICE: &[u8] = include_bytes!("../../testdata/alice29.txt"); struct SliceRef<'a>(&'a [u8]); impl<'a> SliceWrapper for SliceRef<'a> { fn slice(&self) -> &[u8] { self.0 } } fn multi_threaded_split_compression_test( input_data: &'static [u8], num_threads: usize, quality: i32, catable: bool, expected_size: usize, ) { let mut params = BrotliEncoderParams::default(); params.quality = quality; params.magic_number = true; if catable { params.catable = true; params.use_dictionary = false; } let mut output = Rebox::from(vec![ 0u8; BrotliEncoderMaxCompressedSizeMulti( input_data.len(), num_threads ) ]); let mut alloc_per_thread = [ SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), ]; if num_threads > alloc_per_thread.len() { panic!( "Too many threads requested {} > {}", num_threads, alloc_per_thread.len() ); } let res = compress_multi( ¶ms, &mut Owned::new(SliceRef(input_data)), output.slice_mut(), &mut alloc_per_thread[..num_threads], ); let observed_size = res.unwrap(); if observed_size > expected_size { assert_eq!(observed_size, expected_size); } assert_ne!(observed_size, 0); let mut compressed_version = UnlimitedBuffer::new(&output.slice()[..observed_size]); let mut rt = UnlimitedBuffer::new(&[]); match super::decompress(&mut compressed_version, &mut rt, 65536, Rebox::default()) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } assert_eq!(rt.data(), input_data); } #[test] fn multi_threaded_split_compression_test_1() { multi_threaded_split_compression_test(RANDOM_THEN_UNICODE, 1, 3, false, 155808) } #[test] fn multi_threaded_split_compression_test_2() { multi_threaded_split_compression_test(RANDOM_THEN_UNICODE, 2, 4, false, 151857) } #[test] fn multi_threaded_split_compression_test_3() { multi_threaded_split_compression_test(RANDOM_THEN_UNICODE, 3, 5, false, 144325) } #[test] fn multi_threaded_split_compression_test_4() { multi_threaded_split_compression_test(RANDOM_THEN_UNICODE, 4, 10, true, 136812) } #[test] fn multi_threaded_split_compression_test_5() { multi_threaded_split_compression_test(RANDOM_THEN_UNICODE, 5, 9, false, 139126) } #[test] fn multi_threaded_split_compression_test_1b1() { multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..1], 5, 9, false, 139126) } #[test] fn multi_threaded_split_compression_test_1b5() { multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..1], 5, 9, false, 139125) } #[test] fn multi_threaded_split_compression_test_0b1() { multi_threaded_split_compression_test(&[], 5, 9, false, 139125) } #[test] fn multi_threaded_split_compression_test_0b5() { multi_threaded_split_compression_test(&[], 5, 9, false, 139125) } fn thread_spawn_per_job_split_compression_test( input_data: &'static [u8], num_threads: usize, quality: i32, catable: bool, expected_size: usize, ) { let mut params = BrotliEncoderParams::default(); params.quality = quality; params.magic_number = true; if catable { params.catable = true; params.use_dictionary = false; } params.favor_cpu_efficiency = true; // this should test both paths let mut output = Rebox::from(vec![ 0u8; BrotliEncoderMaxCompressedSizeMulti( input_data.len(), num_threads ) ]); let mut alloc_per_thread = [ SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), ]; if num_threads > alloc_per_thread.len() { panic!( "Too many threads requested {} > {}", num_threads, alloc_per_thread.len() ); } let res = compress_multi_no_threadpool( ¶ms, &mut Owned::new(SliceRef(input_data)), output.slice_mut(), &mut alloc_per_thread[..num_threads], ); let observed_size = res.unwrap(); if observed_size > expected_size { assert_eq!(observed_size, expected_size); } assert_ne!(observed_size, 0); let mut compressed_version = UnlimitedBuffer::new(&output.slice()[..observed_size]); let mut rt = UnlimitedBuffer::new(&[]); match super::decompress(&mut compressed_version, &mut rt, 65536, Rebox::default()) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } assert_eq!(rt.data(), input_data); } #[test] fn thread_spawn_per_job_split_compression_test_1() { thread_spawn_per_job_split_compression_test(RANDOM_THEN_UNICODE, 1, 3, false, 155808) } #[test] fn thread_spawn_per_job_split_compression_test_3() { thread_spawn_per_job_split_compression_test(RANDOM_THEN_UNICODE, 3, 5, false, 144325) } #[test] fn thread_spawn_per_job_split_compression_test_1b1() { thread_spawn_per_job_split_compression_test(&RANDOM_THEN_UNICODE[..1], 1, 3, false, 155808) } #[test] fn thread_spawn_per_job_split_compression_test_1b3() { thread_spawn_per_job_split_compression_test(&RANDOM_THEN_UNICODE[..1], 3, 5, false, 144325) } #[test] fn thread_spawn_per_job_split_compression_test_0b1() { thread_spawn_per_job_split_compression_test(&[], 1, 3, false, 155808) } #[test] fn thread_spawn_per_job_split_compression_test_0b3() { thread_spawn_per_job_split_compression_test(&[], 3, 5, false, 144325) } brotli-8.0.2/src/bin/tests.rs000064400000000000000000000061131046102023000141760ustar 00000000000000#![cfg(test)] extern crate core; use core::cmp::min; use std::io; struct Buffer { data: Vec, read_offset: usize, } impl Buffer { pub fn new(buf: &[u8]) -> Buffer { let mut ret = Buffer { data: Vec::::new(), read_offset: 0, }; ret.data.extend(buf); ret } } impl io::Read for Buffer { fn read(&mut self, buf: &mut [u8]) -> io::Result { let bytes_to_read = min(buf.len(), self.data.len() - self.read_offset); if bytes_to_read > 0 { buf[0..bytes_to_read] .clone_from_slice(&self.data[self.read_offset..self.read_offset + bytes_to_read]); } self.read_offset += bytes_to_read; Ok(bytes_to_read) } } impl io::Write for Buffer { fn write(&mut self, buf: &[u8]) -> io::Result { self.data.extend(buf); Ok(buf.len()) } fn flush(&mut self) -> io::Result<()> { Ok(()) } } fn copy_from_to(mut r: R, mut w: W) -> io::Result { let mut buffer: [u8; 65536] = [0; 65536]; let mut out_size: usize = 0; loop { match r.read(&mut buffer[..]) { Err(e) => { match e.kind() { io::ErrorKind::Interrupted => continue, _ => {} } return Err(e); } Ok(size) => { if size == 0 { break; } else { match w.write_all(&buffer[..size]) { Err(e) => { match e.kind() { io::ErrorKind::Interrupted => continue, _ => {} } return Err(e); } Ok(_) => out_size += size, } } } } } Ok(out_size) } #[test] fn test_10x_10y() { let in_buf: [u8; 12] = [ 0x1b, 0x13, 0x00, 0x00, 0xa4, 0xb0, 0xb2, 0xea, 0x81, 0x47, 0x02, 0x8a, ]; let mut output = Buffer::new(&[]); let mut input = super::BrotliDecompressor::new(Buffer::new(&in_buf), 4096); match copy_from_to(&mut input, &mut output) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } let mut i: usize = 0; while i < 10 { assert_eq!(output.data[i], b'X'); assert_eq!(output.data[i + 10], b'Y'); i += 1; } assert_eq!(output.data.len(), 20); } #[test] fn test_alice() { let in_buf = include_bytes!("../../testdata/alice29.txt.compressed"); let mut output = Buffer::new(&[]); let mut input = super::BrotliDecompressor::new(Buffer::new(in_buf), 1); match copy_from_to(&mut input, &mut output) { Ok(_) => {} Err(e) => panic!("Error {:?}", e), } let mut i: usize = 0; let truth = include_bytes!("../../testdata/alice29.txt"); while i < truth.len() { assert_eq!(output.data[i], truth[i]); i += 1; } assert_eq!(truth.len(), output.data.len()); } brotli-8.0.2/src/bin/util.rs000064400000000000000000000270141046102023000140140ustar 00000000000000use core::marker::PhantomData; use core::mem; use std; use std::collections::BTreeMap; use std::fmt; use std::thread::JoinHandle; use alloc_no_stdlib::{Allocator, SliceWrapper}; use brotli::dictionary::{ kBrotliDictionary, kBrotliDictionaryOffsetsByLength, kBrotliDictionarySizeBitsByLength, }; use brotli::enc::threading::{ AnyBoxConstructor, BatchSpawnable, BatchSpawnableLite, BrotliEncoderThreadError, InternalOwned, InternalSendAlloc, Joinable, Owned, OwnedRetriever, PoisonedThreadError, SendAlloc, }; use brotli::enc::BrotliAlloc; use brotli::interface; use brotli::transform::TransformDictionaryWord; struct HexSlice<'a>(&'a [u8]); impl<'a> fmt::Display for HexSlice<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { for byte in self.0 { if let Err(e) = write!(f, "{:02X}", byte) { return Err(e); } } Ok(()) } } pub fn permute_dictionary() -> BTreeMap, ()> { let mut ret = BTreeMap::, ()>::new(); let mut transformed = [0u8; 38]; for wordlen in 4..kBrotliDictionaryOffsetsByLength.len() { let offset = kBrotliDictionaryOffsetsByLength[wordlen] as usize; for index in 0..(1 << kBrotliDictionarySizeBitsByLength[wordlen]) { let word = &kBrotliDictionary[offset + index..offset + index + wordlen]; for transform in 0..121 { let final_size = TransformDictionaryWord(&mut transformed[..], word, wordlen as i32, transform) as usize; let vec: Vec = transformed[..final_size].to_vec(); ret.insert(vec, ()); } } } ret } pub fn print_dictionary(dict: BTreeMap, ()>) { for (key, _) in dict { println!("{}", HexSlice(&key[..])); } } macro_rules! println_stderr( ($($val:tt)*) => { { writeln!(&mut ::std::io::stderr(), $($val)*).unwrap(); } } ); fn prediction_mode_str( prediction_mode_nibble: interface::LiteralPredictionModeNibble, ) -> &'static str { match prediction_mode_nibble.prediction_mode() { interface::LITERAL_PREDICTION_MODE_SIGN => "sign", interface::LITERAL_PREDICTION_MODE_LSB6 => "lsb6", interface::LITERAL_PREDICTION_MODE_MSB6 => "msb6", interface::LITERAL_PREDICTION_MODE_UTF8 => "utf8", _ => "unknown", } } struct SliceU8Ref<'a>(pub &'a [u8]); impl<'a> fmt::LowerHex for SliceU8Ref<'a> { fn fmt(&self, fmtr: &mut fmt::Formatter) -> Result<(), fmt::Error> { for item in self.0 { fmtr.write_fmt(format_args!("{:02x}", item))? } Ok(()) } } pub fn write_one>(cmd: &interface::Command) { use std::io::Write; match cmd { interface::Command::BlockSwitchLiteral(bsl) => { println_stderr!("ltype {} {}", bsl.0.block_type(), bsl.1); } interface::Command::BlockSwitchCommand(bsc) => { println_stderr!("ctype {}", bsc.0); } interface::Command::BlockSwitchDistance(bsd) => { println_stderr!("dtype {}", bsd.0); } interface::Command::PredictionMode(prediction) => { let prediction_mode = prediction_mode_str(prediction.literal_prediction_mode()); let lit_cm = prediction .literal_context_map .slice() .iter() .fold(::std::string::String::new(), |res, &val| { res + " " + &val.to_string() }); let dist_cm = prediction .distance_context_map() .iter() .fold(::std::string::String::new(), |res, &val| { res + " " + &val.to_string() }); let mixing_values = prediction .get_mixing_values() .iter() .fold(::std::string::String::new(), |res, &val| { res + " " + &val.to_string() }); if prediction.has_context_speeds() { println_stderr!("prediction {} lcontextmap{} dcontextmap{} mixingvalues{} cmspeedinc {} {} cmspeedmax {} {} stspeedinc {} {} stspeedmax {} {} mxspeedinc {} {} mxspeedmax {} {}", prediction_mode, lit_cm, dist_cm, mixing_values, prediction.context_map_speed()[0].0, prediction.context_map_speed()[1].0, prediction.context_map_speed()[0].1, prediction.context_map_speed()[1].1, prediction.stride_context_speed()[0].0, prediction.stride_context_speed()[1].0, prediction.stride_context_speed()[0].1, prediction.stride_context_speed()[1].1, prediction.combined_stride_context_speed()[0].0, prediction.combined_stride_context_speed()[1].0, prediction.combined_stride_context_speed()[0].1, prediction.combined_stride_context_speed()[0].1, ); } else { println_stderr!( "prediction {} lcontextmap{} dcontextmap{} mixingvalues{}", prediction_mode, lit_cm, dist_cm, mixing_values, ); } } interface::Command::Copy(copy) => { println_stderr!("copy {} from {}", copy.num_bytes, copy.distance); } interface::Command::Dict(dict) => { let mut transformed_word = [0u8; 38]; let word_index = dict.word_id as usize * dict.word_size as usize + kBrotliDictionaryOffsetsByLength[dict.word_size as usize] as usize; let raw_word = &kBrotliDictionary[word_index..(word_index + dict.word_size as usize)]; let actual_copy_len = TransformDictionaryWord( &mut transformed_word[..], raw_word, dict.word_size as i32, dict.transform as i32, ) as usize; assert_eq!(dict.final_size as usize, actual_copy_len); println_stderr!( "dict {} word {},{} {:x} func {} {:x}", actual_copy_len, dict.word_size, dict.word_id, SliceU8Ref(raw_word), dict.transform, SliceU8Ref(transformed_word.split_at(actual_copy_len).0) ); } interface::Command::Literal(lit) => { println_stderr!( "{} {} {:x}", if lit.high_entropy { "rndins" } else { "insert" }, lit.data.slice().len(), SliceU8Ref(lit.data.slice()) ); } } } // in-place thread create use std::sync::RwLock; pub struct MTJoinable(JoinHandle, PhantomData); #[cfg(not(feature = "std"))] impl Joinable for MTJoinable { fn join(self) -> Result { match self.0.join() { Ok(t) => Ok(t), Err(_e) => Err(::new(())), } } } #[cfg(feature = "std")] impl Joinable for MTJoinable { fn join(self) -> Result { match self.0.join() { Ok(t) => Ok(t), Err(e) => Err(::new(e)), } } } pub struct MTOwnedRetriever(std::sync::Arc>); impl Clone for MTOwnedRetriever { fn clone(&self) -> Self { MTOwnedRetriever(self.0.clone()) } } impl OwnedRetriever for MTOwnedRetriever { fn view T>(&self, f: F) -> Result { match self.0.read() { Ok(u) => Ok(f(&*u)), Err(_) => Err(PoisonedThreadError::default()), } } fn unwrap(self) -> Result { match std::sync::Arc::try_unwrap(self.0) { Ok(rwlock) => match rwlock.into_inner() { Ok(u) => Ok(u), Err(_) => Err(PoisonedThreadError::default()), }, Err(_) => Err(PoisonedThreadError::default()), } } } #[derive(Default)] pub struct MTSpawner {} fn spawn_work< T: Send + 'static, ExtraInput: Send + 'static, F: Fn(ExtraInput, usize, usize, &U, Alloc) -> T + Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, >( extra_input: ExtraInput, index: usize, num_threads: usize, locked_input: MTOwnedRetriever, alloc: Alloc, f: F, ) -> std::thread::JoinHandle where >::AllocatedMemory: Send + 'static, { std::thread::spawn(move || { locked_input .view(move |guard: &U| -> T { f(extra_input, index, num_threads, guard, alloc) }) .unwrap() }) } impl< T: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > BatchSpawnable for MTSpawner where >::AllocatedMemory: Send + 'static, { type JoinHandle = MTJoinable; type FinalJoinHandle = MTOwnedRetriever; fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle { MTOwnedRetriever(std::sync::Arc::>::new(RwLock::new( mem::replace(input, Owned(InternalOwned::Borrowed)).unwrap(), ))) } fn spawn T + Send + 'static + Copy>( &mut self, locked_input: &mut Self::FinalJoinHandle, work: &mut SendAlloc, index: usize, num_threads: usize, f: F, ) { let (alloc, extra_input) = work.replace_with_default(); let ret = spawn_work( extra_input, index, num_threads, locked_input.clone(), alloc, f, ); *work = SendAlloc(InternalSendAlloc::Join(MTJoinable(ret, PhantomData))); } } impl< T: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > BatchSpawnableLite for MTSpawner where >::AllocatedMemory: Send + 'static, { type JoinHandle = >::JoinHandle; type FinalJoinHandle = >::FinalJoinHandle; fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle { >::make_spawner(self, input) } fn spawn( &mut self, handle: &mut Self::FinalJoinHandle, alloc_per_thread: &mut SendAlloc, index: usize, num_threads: usize, f: fn(ExtraInput, usize, usize, &U, Alloc) -> T, ) { >::spawn( self, handle, alloc_per_thread, index, num_threads, f, ) } } brotli-8.0.2/src/bin/validate.rs000064400000000000000000000127101046102023000146250ustar 00000000000000#[cfg(feature = "validation")] use core; use std::io::{self, Error, ErrorKind, Read, Write}; use alloc_no_stdlib::{Allocator, SliceWrapper}; use brotli::enc::BrotliEncoderParams; use brotli::{CustomWrite, DecompressorWriterCustomIo}; #[cfg(feature = "validation")] use sha2::{Digest, Sha256}; use super::{HeapAllocator, IoWriterWrapper, Rebox}; #[cfg(feature = "validation")] type Checksum = Sha256; struct Tee(OutputA, OutputB); impl Write for Tee { fn write(&mut self, data: &[u8]) -> Result { match self.0.write(data) { Err(err) => Err(err), Ok(size) => match self.1.write_all(&data[..size]) { Ok(_) => Ok(size), Err(err) => Err(err), }, } } fn flush(&mut self) -> Result<(), io::Error> { match self.0.flush() { Err(err) => Err(err), Ok(_) => loop { match self.1.flush() { Err(e) => match e.kind() { ErrorKind::Interrupted => continue, _ => return Err(e), }, Ok(e) => return Ok(e), } }, } } } struct DecompressAndValidate<'a, OutputType: Write + 'a>( DecompressorWriterCustomIo< io::Error, IoWriterWrapper<'a, OutputType>, Rebox, // buffer type HeapAllocator, HeapAllocator, HeapAllocator, >, ); impl<'a, OutputType: Write> Write for DecompressAndValidate<'a, OutputType> { fn write(&mut self, data: &[u8]) -> Result { self.0.write(data) } fn flush(&mut self) -> Result<(), io::Error> { self.0.flush() } } #[cfg(not(feature = "validation"))] fn make_sha_writer() -> io::Sink { io::sink() } #[cfg(not(feature = "validation"))] fn make_sha_reader(r: &mut InputType) -> &mut InputType { r } #[cfg(not(feature = "validation"))] fn sha_ok(_writer: &mut io::Sink, _reader: &mut InputType) -> bool { false } #[cfg(feature = "validation")] struct ShaReader<'a, InputType: Read + 'a> { reader: &'a mut InputType, checksum: Checksum, } #[cfg(feature = "validation")] impl<'a, InputType: Read + 'a> Read for ShaReader<'a, InputType> { fn read(&mut self, data: &mut [u8]) -> Result { match self.reader.read(data) { Err(e) => Err(e), Ok(size) => { self.checksum.update(&data[..size]); Ok(size) } } } } #[cfg(feature = "validation")] fn make_sha_reader(r: &mut InputType) -> ShaReader { ShaReader { reader: r, checksum: Checksum::default(), } } #[cfg(feature = "validation")] fn sha_ok(writer: &mut ShaWriter, reader: &mut ShaReader) -> bool { core::mem::replace(&mut writer.0, Checksum::default()).finalize() == core::mem::replace(&mut reader.checksum, Checksum::default()).finalize() } #[cfg(feature = "validation")] #[derive(Default)] struct ShaWriter(Checksum); #[cfg(feature = "validation")] impl Write for ShaWriter { fn write(&mut self, data: &[u8]) -> Result { self.0.update(data); Ok(data.len()) } fn flush(&mut self) -> Result<(), io::Error> { Ok(()) } } #[cfg(feature = "validation")] fn make_sha_writer() -> ShaWriter { ShaWriter::default() } #[cfg(feature = "validation")] const VALIDATION_FAILED: &'static str = "Validation failed"; #[cfg(not(feature = "validation"))] const VALIDATION_FAILED: &str = "Validation module not enabled: build with cargo build --features=validation"; pub fn compress_validate( r: &mut InputType, w: &mut OutputType, buffer_size: usize, params: &BrotliEncoderParams, custom_dictionary: Rebox, num_threads: usize, ) -> Result<(), io::Error> { let mut m8 = HeapAllocator::default(); let buffer = m8.alloc_cell(buffer_size); // FIXME: could reuse the dictionary to seed the compressor, but that violates the abstraction right now // also dictionaries are not very popular since they are mostly an internal concept, given their deprecation in // the standard brotli spec let mut dict = Vec::::new(); dict.extend_from_slice(custom_dictionary.slice()); let mut sha_writer = make_sha_writer(); let mut sha_reader = make_sha_reader(r); let ret; { let validate_writer = DecompressAndValidate(DecompressorWriterCustomIo::new_with_custom_dictionary( IoWriterWrapper(&mut sha_writer), buffer, m8, HeapAllocator::default(), HeapAllocator::default(), custom_dictionary, Error::new(ErrorKind::InvalidData, "Invalid Data"), )); let mut overarching_writer = Tee(validate_writer, w); ret = super::compress( &mut sha_reader, &mut overarching_writer, buffer_size, params, &dict[..], num_threads, ); } match ret { Ok(_ret) => { if sha_ok(&mut sha_writer, &mut sha_reader) { Ok(()) } else { Err(Error::new(ErrorKind::InvalidData, VALIDATION_FAILED)) } } Err(e) => Err(e), } } brotli-8.0.2/src/concat/mod.rs000064400000000000000000000662341046102023000143240ustar 00000000000000use core::cmp::min; #[repr(C)] #[derive(Debug, Clone, Copy, PartialEq)] pub enum BroCatliResult { Success = 0, NeedsMoreInput = 1, NeedsMoreOutput = 2, BrotliFileNotCraftedForAppend = 124, InvalidWindowSize = 125, WindowSizeLargerThanPreviousFile = 126, BrotliFileNotCraftedForConcatenation = 127, } const NUM_STREAM_HEADER_BYTES: usize = 5; #[derive(Clone, Copy)] struct NewStreamData { bytes_so_far: [u8; NUM_STREAM_HEADER_BYTES], num_bytes_read: u8, num_bytes_written: Option, } impl NewStreamData { pub fn new() -> NewStreamData { NewStreamData { bytes_so_far: [0, 0, 0, 0, 0], num_bytes_read: 0, num_bytes_written: None, } } fn sufficient(&self) -> bool { if self.num_bytes_read == 4 && (127 & self.bytes_so_far[0]) != 17 { return true; } self.num_bytes_read == 5 } } fn parse_window_size(bytes_so_far: &[u8]) -> Result<(u8, usize), ()> { // returns window_size and offset in stream in bits if bytes_so_far[0] & 1 == 0 { return Ok((16, 1)); } match bytes_so_far[0] & 15 { 0x3 => return Ok((18, 4)), 0x5 => return Ok((19, 4)), 0x7 => return Ok((20, 4)), 0x9 => return Ok((21, 4)), 0xb => return Ok((22, 4)), 0xd => return Ok((23, 4)), 0xf => return Ok((24, 4)), _ => match bytes_so_far[0] & 127 { 0x71 => return Ok((15, 7)), 0x61 => return Ok((14, 7)), 0x51 => return Ok((13, 7)), 0x41 => return Ok((12, 7)), 0x31 => return Ok((11, 7)), 0x21 => return Ok((10, 7)), 0x1 => return Ok((17, 7)), _ => {} }, } if (bytes_so_far[0] & 0x80) != 0 { return Err(()); } let ret = bytes_so_far[1] & 0x3f; if !(10..=30).contains(&ret) { return Err(()); } Ok((ret, 14)) } fn detect_varlen_offset(bytes_so_far: &[u8]) -> Result<(usize), ()> { // returns offfset in bits let (_, mut offset) = match parse_window_size(bytes_so_far) { Ok(x) => x, Err(_) => return Err(()), }; let mut bytes = 0u64; for (index, item) in bytes_so_far.iter().enumerate() { bytes |= u64::from(*item) << (index * 8); } bytes >>= offset; offset += 1; if (bytes & 1) != 0 { // ISLAST bytes >>= 1; offset += 1; if (bytes & 1) != 0 { // ISLASTEMPTY return Ok(offset); } } bytes >>= 1; let mut mnibbles = bytes & 3; bytes >>= 2; offset += 2; if mnibbles == 3 { // metadata block if (bytes & 1) != 0 { return Err(()); // reserved, must be zero } bytes >>= 1; offset += 1; let mskipbytes = bytes & ((1 << 2) - 1); offset += 2; offset += (mskipbytes as usize) * 8; // next item is byte aligned return Ok(offset); } mnibbles += 4; offset += (mnibbles as usize) * 4; bytes >>= mnibbles * 4; offset += 1; if (bytes & 1) == 0 { // not UNCOMPRESSED Err(()) // not valid bitstream for concatenation } else { // UNCOMPRESSED: now things are aligend Ok(offset) } } // eat your vegetables #[derive(Default)] pub struct BroCatli { last_bytes: [u8; 2], last_bytes_len: u8, last_byte_sanitized: bool, any_bytes_emitted: bool, last_byte_bit_offset: u8, // need to make sure that window sizes stay similar or get smaller window_size: u8, new_stream_pending: Option, } impl BroCatli { pub fn new() -> Self { Self::default() } pub fn deserialize_from_buffer(buffer: &[u8]) -> Result { if 16 + NUM_STREAM_HEADER_BYTES > buffer.len() { return Err(()); } let mut possible_new_stream_pending = NewStreamData { num_bytes_read: buffer[12], num_bytes_written: if (buffer[9] & (1 << 7)) != 0 { Some(buffer[13]) } else { None }, bytes_so_far: [0; NUM_STREAM_HEADER_BYTES], }; let xlen = possible_new_stream_pending.bytes_so_far.len(); possible_new_stream_pending .bytes_so_far .clone_from_slice(&buffer[16..16 + xlen]); let new_stream_pending: Option = if (buffer[9] & (1 << 6)) != 0 { Some(possible_new_stream_pending) } else { None }; let mut ret = BroCatli { last_bytes: [0, 0], last_bytes_len: buffer[8], last_byte_sanitized: (buffer[9] & 0x1) != 0, last_byte_bit_offset: buffer[10], any_bytes_emitted: (buffer[9] & (1 << 5)) != 0, window_size: buffer[11], new_stream_pending, }; if ret.last_bytes.len() > 8 { return Err(()); } let xlen = ret.last_bytes.len(); ret.last_bytes.clone_from_slice(&buffer[..xlen]); Ok(ret) } #[inline(always)] pub fn serialize_to_buffer(&self, buffer: &mut [u8]) -> Result<(), ()> { if 16 + NUM_STREAM_HEADER_BYTES > buffer.len() { return Err(()); } buffer[..self.last_bytes.len()].clone_from_slice(&self.last_bytes[..]); buffer[8] = self.last_bytes_len; buffer[9] = (self.last_byte_sanitized as u8) | ((self.new_stream_pending.is_some() as u8) << 6) | ((self.any_bytes_emitted as u8) << 5); buffer[10] = self.last_byte_bit_offset; buffer[11] = self.window_size; if let Some(new_stream_pending) = self.new_stream_pending { if new_stream_pending.num_bytes_written.is_some() { buffer[9] |= (1 << 7); } buffer[12] = new_stream_pending.num_bytes_read; buffer[13] = new_stream_pending.num_bytes_written.unwrap_or(0); // 14, 15 reserved buffer[16..16 + new_stream_pending.bytes_so_far.len()] .clone_from_slice(&new_stream_pending.bytes_so_far[..]); } Ok(()) } pub fn new_with_window_size(log_window_size: u8) -> BroCatli { // in this case setup the last_bytes of the stream to perfectly mimic what would // appear in an empty stream with the selected window size... // this means the window size followed by 2 sequential 1 bits (LAST_METABLOCK, EMPTY) // the new_stream code should naturally find the sequential 1 bits and mask them // out and then prepend the window size... then the following window sizes should // be checked to be shorter let last_bytes_len; let last_bytes; if log_window_size > 24 { last_bytes = [17u8, log_window_size | 64 | 128]; last_bytes_len = 2; } else if log_window_size == 16 { last_bytes = [1 | 2 | 4, 0]; last_bytes_len = 1; } else if log_window_size > 17 { last_bytes = [(3 + (log_window_size - 18) * 2) | (16 | 32), 0]; last_bytes_len = 1; } else { match log_window_size { 15 => last_bytes = [0x71 | 0x80, 1], 14 => last_bytes = [0x61 | 0x80, 1], 13 => last_bytes = [0x51 | 0x80, 1], 12 => last_bytes = [0x41 | 0x80, 1], 11 => last_bytes = [0x31 | 0x80, 1], 10 => last_bytes = [0x21 | 0x80, 1], _ => { assert_eq!(log_window_size, 17); last_bytes = [0x1 | 0x80, 1]; } // 17 } last_bytes_len = 2; } BroCatli { last_bytes, last_bytes_len, last_byte_bit_offset: 0, last_byte_sanitized: false, any_bytes_emitted: false, new_stream_pending: None, window_size: log_window_size, } } pub fn new_brotli_file(&mut self) { self.new_stream_pending = Some(NewStreamData::new()); } fn flush_previous_stream( &mut self, out_bytes: &mut [u8], out_offset: &mut usize, ) -> BroCatliResult { if !self.last_byte_sanitized { // if the previous stream hasn't had the last metablock (bit 1,1) sanitized if self.last_bytes_len == 0 { // first stream or otherwise sanitized self.last_byte_sanitized = true; return BroCatliResult::Success; } // create a 16 bit integer with the last 2 bytes of data let mut last_bytes = self.last_bytes[0] as u16 + ((self.last_bytes[1] as u16) << 8); let max = self.last_bytes_len * 8; let mut index = max - 1; for i in 0..max { index = max - 1 - i; if ((1 << index) & last_bytes) != 0 { break; // find the highest set bit } } if index == 0 { // if the bit is too low, return failure, since both bits could not possibly have been set return BroCatliResult::BrotliFileNotCraftedForAppend; } if (last_bytes >> (index - 1)) != 3 { // last two bits need to be set for the final metablock return BroCatliResult::BrotliFileNotCraftedForAppend; } index -= 1; // discard the final two bits last_bytes &= (1 << index) - 1; // mask them out self.last_bytes[0] = last_bytes as u8; // reset the last_bytes pair self.last_bytes[1] = (last_bytes >> 8) as u8; if index >= 8 { // if both bits and one useful bit were in the second block, then write that if out_bytes.len() > *out_offset { out_bytes[*out_offset] = self.last_bytes[0]; self.last_bytes[0] = self.last_bytes[1]; *out_offset += 1; self.any_bytes_emitted = true; index -= 8; self.last_bytes_len -= 1; } else { return BroCatliResult::NeedsMoreOutput; } } self.last_byte_bit_offset = index; assert!(index < 8); self.last_byte_sanitized = true; } BroCatliResult::Success } fn shift_and_check_new_stream_header( &mut self, mut new_stream_pending: NewStreamData, out_bytes: &mut [u8], out_offset: &mut usize, ) -> BroCatliResult { if new_stream_pending.num_bytes_written.is_none() { let (window_size, window_offset) = if let Ok(results) = parse_window_size( &new_stream_pending.bytes_so_far[..usize::from(new_stream_pending.num_bytes_read)], ) { results } else { return BroCatliResult::InvalidWindowSize; }; if self.window_size == 0 { // parse window size and just copy everything self.window_size = window_size; assert_eq!(self.last_byte_bit_offset, 0); // we are first stream out_bytes[*out_offset] = new_stream_pending.bytes_so_far[0]; new_stream_pending.num_bytes_written = Some(1); self.any_bytes_emitted = true; *out_offset += 1; } else { if window_size > self.window_size { return BroCatliResult::WindowSizeLargerThanPreviousFile; } let mut realigned_header: [u8; NUM_STREAM_HEADER_BYTES + 1] = [self.last_bytes[0], 0, 0, 0, 0, 0]; let varlen_offset = if let Ok(voffset) = detect_varlen_offset( &new_stream_pending.bytes_so_far [..usize::from(new_stream_pending.num_bytes_read)], ) { voffset } else { return BroCatliResult::BrotliFileNotCraftedForConcatenation; }; let mut bytes_so_far = 0u64; for index in 0..usize::from(new_stream_pending.num_bytes_read) { bytes_so_far |= u64::from(new_stream_pending.bytes_so_far[index]) << (index * 8); } bytes_so_far >>= window_offset; // mask out the window size bytes_so_far &= (1u64 << (varlen_offset - window_offset)) - 1; let var_len_bytes = (((varlen_offset - window_offset) + 7) / 8); for byte_index in 0..var_len_bytes { let cur_byte = (bytes_so_far >> (byte_index * 8)); realigned_header[byte_index] |= ((cur_byte & ((1 << (8 - self.last_byte_bit_offset)) - 1)) << self.last_byte_bit_offset) as u8; realigned_header[byte_index + 1] = (cur_byte >> (8 - self.last_byte_bit_offset)) as u8; } let whole_byte_destination = ((usize::from(self.last_byte_bit_offset) + varlen_offset - window_offset) + 7) / 8; let whole_byte_source = (varlen_offset + 7) / 8; let num_whole_bytes_to_copy = usize::from(new_stream_pending.num_bytes_read) - whole_byte_source; for aligned_index in 0..num_whole_bytes_to_copy { realigned_header[whole_byte_destination + aligned_index] = new_stream_pending.bytes_so_far[whole_byte_source + aligned_index]; } out_bytes[*out_offset] = realigned_header[0]; self.any_bytes_emitted = true; *out_offset += 1; // subtract one since that has just been written out and we're only copying realigned_header[1..] new_stream_pending.num_bytes_read = (whole_byte_destination + num_whole_bytes_to_copy) as u8 - 1; new_stream_pending.num_bytes_written = Some(0); new_stream_pending .bytes_so_far .clone_from_slice(&realigned_header[1..]); } } else { assert_ne!(self.window_size, 0); } let to_copy = min( out_bytes.len() - *out_offset, usize::from( new_stream_pending.num_bytes_read - new_stream_pending.num_bytes_written.unwrap(), ), ); out_bytes .split_at_mut(*out_offset) .1 .split_at_mut(to_copy) .0 .clone_from_slice( new_stream_pending .bytes_so_far .split_at(usize::from(new_stream_pending.num_bytes_written.unwrap())) .1 .split_at(to_copy) .0, ); *out_offset += to_copy; if to_copy != 0 { self.any_bytes_emitted = true; } new_stream_pending.num_bytes_written = Some((new_stream_pending.num_bytes_written.unwrap() + to_copy as u8)); if new_stream_pending.num_bytes_written.unwrap() != new_stream_pending.num_bytes_read { self.new_stream_pending = Some(new_stream_pending); return BroCatliResult::NeedsMoreOutput; } self.new_stream_pending = None; self.last_byte_sanitized = false; self.last_byte_bit_offset = 0; self.last_bytes_len = 0; self.last_bytes = [0, 0]; //now unwrite from the stream, since the last byte may need to be adjusted to be EOF *out_offset -= 1; self.last_bytes[0] = out_bytes[*out_offset]; self.last_bytes_len = 1; BroCatliResult::Success } pub fn stream( &mut self, in_bytes: &[u8], in_offset: &mut usize, out_bytes: &mut [u8], out_offset: &mut usize, ) -> BroCatliResult { if let Some(mut new_stream_pending) = self.new_stream_pending { let flush_result = self.flush_previous_stream(out_bytes, out_offset); if let BroCatliResult::Success = flush_result { if usize::from(new_stream_pending.num_bytes_read) < new_stream_pending.bytes_so_far.len() { { let dst = &mut new_stream_pending.bytes_so_far [usize::from(new_stream_pending.num_bytes_read)..]; let to_copy = min(dst.len(), in_bytes.len() - *in_offset); dst[..to_copy] .clone_from_slice(in_bytes.split_at(*in_offset).1.split_at(to_copy).0); *in_offset += to_copy; new_stream_pending.num_bytes_read += to_copy as u8; } self.new_stream_pending = Some(new_stream_pending); // write back changes } if !new_stream_pending.sufficient() { return BroCatliResult::NeedsMoreInput; } if out_bytes.len() == *out_offset { return BroCatliResult::NeedsMoreOutput; } let shift_result = self.shift_and_check_new_stream_header( new_stream_pending, out_bytes, out_offset, ); if let BroCatliResult::Success = shift_result { } else { return shift_result; } } else { return flush_result; } if *out_offset == out_bytes.len() { return BroCatliResult::NeedsMoreOutput; // need to be able to write at least one byte of data to make progress } } assert!(self.new_stream_pending.is_none()); // this should have been handled above if self.last_bytes_len != 2 { if out_bytes.len() == *out_offset { return BroCatliResult::NeedsMoreOutput; } if in_bytes.len() == *in_offset { return BroCatliResult::NeedsMoreInput; } self.last_bytes[usize::from(self.last_bytes_len)] = in_bytes[*in_offset]; *in_offset += 1; self.last_bytes_len += 1; if self.last_bytes_len != 2 { if out_bytes.len() == *out_offset { return BroCatliResult::NeedsMoreOutput; } if in_bytes.len() == *in_offset { return BroCatliResult::NeedsMoreInput; } self.last_bytes[usize::from(self.last_bytes_len)] = in_bytes[*in_offset]; self.last_bytes_len += 1; *in_offset += 1; } } if out_bytes.len() == *out_offset { return BroCatliResult::NeedsMoreOutput; } if in_bytes.len() == *in_offset { return BroCatliResult::NeedsMoreInput; } let mut to_copy = min(out_bytes.len() - *out_offset, in_bytes.len() - *in_offset); assert_ne!(to_copy, 0); if to_copy == 1 { out_bytes[*out_offset] = self.last_bytes[0]; self.last_bytes[0] = self.last_bytes[1]; self.last_bytes[1] = in_bytes[*in_offset]; *in_offset += 1; *out_offset += 1; if *out_offset == out_bytes.len() { return BroCatliResult::NeedsMoreOutput; } return BroCatliResult::NeedsMoreInput; } out_bytes .split_at_mut(*out_offset) .1 .split_at_mut(2) .0 .clone_from_slice(&self.last_bytes[..]); *out_offset += 2; let (new_in_offset, last_two) = in_bytes .split_at(*in_offset) .1 .split_at(to_copy) .0 .split_at(to_copy - 2); self.last_bytes.clone_from_slice(last_two); *in_offset += 2; // add this after the clone since we grab the last 2 bytes, not the first to_copy -= 2; out_bytes .split_at_mut(*out_offset) .1 .split_at_mut(to_copy) .0 .clone_from_slice(new_in_offset); *out_offset += to_copy; *in_offset += to_copy; if *out_offset == out_bytes.len() { return BroCatliResult::NeedsMoreOutput; } BroCatliResult::NeedsMoreInput } fn append_eof_metablock_to_last_bytes(&mut self) { assert!(self.last_byte_sanitized); let mut last_bytes = self.last_bytes[0] as u16 | ((self.last_bytes[1] as u16) << 8); let bit_end = (self.last_bytes_len - 1) * 8 + self.last_byte_bit_offset; last_bytes |= 3 << bit_end; self.last_bytes[0] = last_bytes as u8; self.last_bytes[1] = (last_bytes >> 8) as u8; self.last_byte_sanitized = false; self.last_byte_bit_offset += 2; if self.last_byte_bit_offset >= 8 { self.last_byte_bit_offset -= 8; self.last_bytes_len += 1; } } pub fn finish(&mut self, out_bytes: &mut [u8], out_offset: &mut usize) -> BroCatliResult { if self.last_byte_sanitized && self.last_bytes_len != 0 { self.append_eof_metablock_to_last_bytes(); } while self.last_bytes_len != 0 { if *out_offset == out_bytes.len() { return BroCatliResult::NeedsMoreOutput; } out_bytes[*out_offset] = self.last_bytes[0]; *out_offset += 1; self.last_bytes_len -= 1; self.last_bytes[0] = self.last_bytes[1]; self.any_bytes_emitted = true; } if !self.any_bytes_emitted { if out_bytes.len() == *out_offset { return BroCatliResult::NeedsMoreOutput; } self.any_bytes_emitted = true; out_bytes[*out_offset] = b';'; *out_offset += 1; } BroCatliResult::Success } } #[cfg(test)] mod test { use super::BroCatli; #[test] fn test_deserialization() { let broccoli = BroCatli { new_stream_pending: Some(super::NewStreamData { bytes_so_far: [0x33; super::NUM_STREAM_HEADER_BYTES], num_bytes_read: 16, num_bytes_written: Some(3), }), last_bytes: [0x45, 0x46], last_bytes_len: 1, last_byte_sanitized: true, any_bytes_emitted: false, last_byte_bit_offset: 7, window_size: 22, }; let mut buffer = [0u8; 248]; broccoli.serialize_to_buffer(&mut buffer[..]).unwrap(); let bc = BroCatli::deserialize_from_buffer(&buffer[..]).unwrap(); assert_eq!(broccoli.last_bytes, bc.last_bytes); assert_eq!(broccoli.last_bytes_len, bc.last_bytes_len); assert_eq!(broccoli.last_byte_sanitized, bc.last_byte_sanitized); assert_eq!(broccoli.last_byte_bit_offset, bc.last_byte_bit_offset); assert_eq!(broccoli.window_size, bc.window_size); assert_eq!( broccoli.new_stream_pending.unwrap().bytes_so_far, bc.new_stream_pending.unwrap().bytes_so_far ); assert_eq!( broccoli.new_stream_pending.unwrap().num_bytes_read, bc.new_stream_pending.unwrap().num_bytes_read ); assert_eq!( broccoli.new_stream_pending.unwrap().num_bytes_written, bc.new_stream_pending.unwrap().num_bytes_written ); } #[test] fn test_deserialization_any_written() { let broccoli = BroCatli { new_stream_pending: Some(super::NewStreamData { bytes_so_far: [0x33; super::NUM_STREAM_HEADER_BYTES], num_bytes_read: 16, num_bytes_written: Some(3), }), last_bytes: [0x45, 0x46], last_bytes_len: 1, last_byte_sanitized: true, any_bytes_emitted: true, last_byte_bit_offset: 7, window_size: 22, }; let mut buffer = [0u8; 248]; broccoli.serialize_to_buffer(&mut buffer[..]).unwrap(); let bc = BroCatli::deserialize_from_buffer(&buffer[..]).unwrap(); assert_eq!(broccoli.last_bytes, bc.last_bytes); assert_eq!(broccoli.last_bytes_len, bc.last_bytes_len); assert_eq!(broccoli.last_byte_sanitized, bc.last_byte_sanitized); assert_eq!(broccoli.last_byte_bit_offset, bc.last_byte_bit_offset); assert_eq!(broccoli.window_size, bc.window_size); assert_eq!( broccoli.new_stream_pending.unwrap().bytes_so_far, bc.new_stream_pending.unwrap().bytes_so_far ); assert_eq!( broccoli.new_stream_pending.unwrap().num_bytes_read, bc.new_stream_pending.unwrap().num_bytes_read ); assert_eq!( broccoli.new_stream_pending.unwrap().num_bytes_written, bc.new_stream_pending.unwrap().num_bytes_written ); } #[test] fn test_serialization() { let mut buffer = [0u8; 248]; let mut broccoli = BroCatli::deserialize_from_buffer(&buffer).unwrap(); let mut buffer2 = [0u8; 248]; broccoli.serialize_to_buffer(&mut buffer2[..]).unwrap(); assert_eq!(&buffer[..], &buffer2[..]); for (index, item) in buffer.iter_mut().enumerate() { *item = index as u8; } broccoli = BroCatli::deserialize_from_buffer(&buffer).unwrap(); broccoli.serialize_to_buffer(&mut buffer2[..]).unwrap(); broccoli = BroCatli::deserialize_from_buffer(&buffer2).unwrap(); for (_index, item) in buffer.iter_mut().enumerate() { *item = 0; } broccoli.serialize_to_buffer(&mut buffer[..]).unwrap(); assert_eq!(&buffer[..], &buffer2[..]); for (index, item) in buffer.iter_mut().enumerate() { *item = 0xff ^ index as u8; } broccoli = BroCatli::deserialize_from_buffer(&buffer).unwrap(); broccoli.serialize_to_buffer(&mut buffer2[..]).unwrap(); broccoli = BroCatli::deserialize_from_buffer(&buffer2).unwrap(); for (_index, item) in buffer.iter_mut().enumerate() { *item = 0; } broccoli.serialize_to_buffer(&mut buffer[..]).unwrap(); assert_eq!(&buffer[..], &buffer2[..]); } #[test] fn test_cat_empty_stream() { let empty_catable = [b';']; let mut bcat = super::BroCatli::default(); let mut in_offset = 0usize; let mut out_bytes = [0u8; 32]; let mut out_offset = 0usize; bcat.new_brotli_file(); let mut res = bcat.stream( &empty_catable[..], &mut in_offset, &mut out_bytes[..], &mut out_offset, ); assert_eq!(res, super::BroCatliResult::NeedsMoreInput); bcat.new_brotli_file(); in_offset = 0; res = bcat.stream( &empty_catable[..], &mut in_offset, &mut out_bytes[..], &mut out_offset, ); assert_eq!(res, super::BroCatliResult::NeedsMoreInput); res = bcat.finish(&mut out_bytes[..], &mut out_offset); assert_eq!(res, super::BroCatliResult::Success); assert_ne!(out_offset, 0); assert_eq!(&out_bytes[..out_offset], &[b';']); } } brotli-8.0.2/src/enc/backward_references/benchmark.rs000064400000000000000000000300371046102023000207440ustar 00000000000000#![cfg(feature = "benchmark")] #![cfg(feature = "std")] extern crate test; use alloc_stdlib::StandardAlloc; use super::*; static RANDOM_THEN_UNICODE: &'static [u8] = include_bytes!("../../../testdata/random_then_unicode"); static FINALIZE_DATA: &'static [u8] = &[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, ]; const TEST_LEN: usize = 256 * 1024; const DISTANCE_CACHE: &'static [i32] = &[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; // distance cache fn make_generic_hasher() -> AdvHasher { let params_hasher = BrotliHasherParams { type_: 5, block_bits: 6, bucket_bits: 15, num_last_distances_to_check: 10, hash_len: 4, literal_byte_score: 540, }; let block_size = 1u64 << params_hasher.block_bits; let bucket_size = 1u64 << params_hasher.bucket_bits; let mut alloc = StandardAlloc::default(); AdvHasher:: { buckets: alloc.alloc_cell((bucket_size * block_size) as usize), h9_opts: H9Opts::new(¶ms_hasher), num: alloc.alloc_cell(bucket_size as usize), GetHasherCommon: Struct1 { params: params_hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: H5Sub { hash_shift_: 32i32 - params_hasher.bucket_bits, bucket_size_: bucket_size as u32, block_bits_: params_hasher.block_bits as i32, block_mask_: block_size.wrapping_sub(1) as u32, }, } } fn make_specialized_hasher() -> AdvHasher { let params_hasher = BrotliHasherParams { type_: 5, block_bits: 6, bucket_bits: 15, num_last_distances_to_check: 10, hash_len: 4, literal_byte_score: 540, }; let block_size = 1u64 << params_hasher.block_bits; let bucket_size = 1u64 << params_hasher.bucket_bits; let mut alloc = StandardAlloc::default(); AdvHasher:: { buckets: alloc.alloc_cell((bucket_size * block_size) as usize), h9_opts: H9Opts::new(¶ms_hasher), num: alloc.alloc_cell(bucket_size as usize), GetHasherCommon: Struct1 { params: params_hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: HQ7Sub {}, } } #[bench] fn bench_256k_basic_generic(bench: &mut test::Bencher) { let mut hasher = make_generic_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); for i in 0..TEST_LEN { hasher.Store(testdata, usize::MAX, i); } let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_basic_specialized(bench: &mut test::Bencher) { let mut hasher = make_specialized_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); for i in 0..TEST_LEN { hasher.Store(testdata, usize::MAX, i); } let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_opt_generic(bench: &mut test::Bencher) { let mut hasher = make_generic_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRangeOptBatch(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_opt_specialized(bench: &mut test::Bencher) { let mut hasher = make_specialized_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRangeOptBatch(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_mem_fetch_generic(bench: &mut test::Bencher) { let mut hasher = make_generic_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRangeOptMemFetch(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_mem_fetch_specialized(bench: &mut test::Bencher) { let mut hasher = make_specialized_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRangeOptMemFetch(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_mem_lazy_dupe_generic(bench: &mut test::Bencher) { let mut hasher = make_generic_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRangeOptMemFetchLazyDupeUpdate(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_mem_lazy_dupe_specialized(bench: &mut test::Bencher) { let mut hasher = make_specialized_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRangeOptMemFetchLazyDupeUpdate(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_mem_random_dupe_generic(bench: &mut test::Bencher) { let mut hasher = make_generic_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRangeOptRandomDupeUpdate(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_mem_random_dupe_specialized(bench: &mut test::Bencher) { let mut hasher = make_specialized_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRangeOptRandomDupeUpdate(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_cur_generic(bench: &mut test::Bencher) { let mut hasher = make_generic_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRange(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } #[bench] fn bench_256k_cur_specialized(bench: &mut test::Bencher) { let mut hasher = make_specialized_hasher(); bench.iter(|| { let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); hasher.BulkStoreRange(testdata, usize::MAX, 0, TEST_LEN); let mut output = super::HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; hasher.FindLongestMatch( None, &[], test::black_box(FINALIZE_DATA), // data 15, // ring mask DISTANCE_CACHE, 8, // cur_x 8, 4, 4, 4, &mut output, ); }); } brotli-8.0.2/src/enc/backward_references/hash_to_binary_tree.rs000064400000000000000000000370501046102023000230240ustar 00000000000000use alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use core; use core::cmp::min; use super::{ kHashMul32, AnyHasher, BrotliEncoderParams, CloneWithAlloc, H9Opts, HasherSearchResult, HowPrepared, Struct1, fix_unbroken_len, }; use crate::enc::combined_alloc::allocate; use crate::enc::static_dict::{ BrotliDictionary, FindMatchLengthWithLimit, BROTLI_UNALIGNED_LOAD32, }; use crate::enc::util::floatX; pub const kInfinity: floatX = 1.7e38; #[derive(Clone, Copy, Debug)] pub enum Union1 { cost(floatX), next(u32), shortcut(u32), } #[derive(Clone, Copy, Debug)] pub struct ZopfliNode { //highest 7 bit is used to reconstruct the length code pub length: u32, // distance associated with the length pub distance: u32, // number of literal inserts before the copy; highest 5 bits contain distance short code + 1 (or zero if no short code) pub dcode_insert_length: u32, pub u: Union1, } impl Default for ZopfliNode { fn default() -> Self { ZopfliNode { length: 1, distance: 0, dcode_insert_length: 0, u: Union1::cost(kInfinity), } } } pub trait Allocable> { fn new(m: &mut AllocT, init: T) -> Self; fn new_uninit(m: &mut AllocT) -> Self; fn free(&mut self, m: &mut AllocT); } pub trait H10Params { fn max_tree_search_depth() -> u32; fn max_tree_comp_length() -> u32; } pub struct H10DefaultParams {} impl H10Params for H10DefaultParams { #[inline(always)] fn max_tree_search_depth() -> u32 { 64 } #[inline(always)] fn max_tree_comp_length() -> u32 { 128 } } const BUCKET_BITS: usize = 17; pub struct H10Buckets>(AllocU32::AllocatedMemory); impl> Allocable for H10Buckets { fn new(m: &mut AllocU32, initializer: u32) -> H10Buckets { let mut ret = m.alloc_cell(1 << BUCKET_BITS); for item in ret.slice_mut().iter_mut() { *item = initializer; } H10Buckets::(ret) } fn new_uninit(m: &mut AllocU32) -> H10Buckets { H10Buckets::(m.alloc_cell(1 << BUCKET_BITS)) } fn free(&mut self, m: &mut AllocU32) { m.free_cell(core::mem::take(&mut self.0)); } } impl> PartialEq> for H10Buckets { fn eq(&self, other: &H10Buckets) -> bool { return self.0.slice() == other.0.slice(); } } impl> SliceWrapper for H10Buckets { #[inline(always)] fn slice(&self) -> &[u32] { self.0.slice() } } impl> SliceWrapperMut for H10Buckets { #[inline(always)] fn slice_mut(&mut self) -> &mut [u32] { self.0.slice_mut() } } pub struct H10< AllocU32: Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, > where Buckets: PartialEq, { pub window_mask_: usize, pub ringbuffer_break: Option, pub common: Struct1, pub buckets_: Buckets, pub invalid_pos_: u32, pub forest: AllocU32::AllocatedMemory, pub _params: core::marker::PhantomData, } impl< AllocU32: Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, > PartialEq> for H10 where Buckets: PartialEq, { fn eq(&self, other: &H10) -> bool { self.window_mask_ == other.window_mask_ && self.common == other.common && self.buckets_ == other.buckets_ && self.invalid_pos_ == other.invalid_pos_ && self.forest.slice() == other.forest.slice() && self._params == other._params && self.ringbuffer_break == other.ringbuffer_break } } pub fn InitializeH10>( m32: &mut AllocU32, one_shot: bool, params: &BrotliEncoderParams, ringbuffer_break: Option, input_size: usize, ) -> H10, H10DefaultParams> { initialize_h10::>(m32, one_shot, params, input_size, ringbuffer_break) } fn initialize_h10< AllocU32: Allocator, Buckets: SliceWrapperMut + SliceWrapper + Allocable, >( m32: &mut AllocU32, one_shot: bool, params: &BrotliEncoderParams, input_size: usize, ringbuffer_break: Option, ) -> H10 where Buckets: PartialEq, { let mut num_nodes = 1 << params.lgwin; if one_shot && input_size < num_nodes { num_nodes = input_size; } let window_mask = (1 << params.lgwin) - 1; let invalid_pos = 0u32.wrapping_sub(window_mask); let buckets = >::new(m32, invalid_pos); H10:: { common: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, _params: core::marker::PhantomData::, window_mask_: window_mask as usize, invalid_pos_: invalid_pos, buckets_: buckets, forest: m32.alloc_cell(num_nodes * 2), ringbuffer_break, } } impl< AllocU32: Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, > H10 where Buckets: PartialEq, { pub fn free(&mut self, m32: &mut AllocU32) { m32.free_cell(core::mem::take(&mut self.forest)); self.buckets_.free(m32); } } impl< Alloc: Allocator + Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, > CloneWithAlloc for H10 where Buckets: PartialEq, { fn clone_with_alloc(&self, m: &mut Alloc) -> Self { let mut ret = H10:: { window_mask_: self.window_mask_, common: self.common.clone(), buckets_: Buckets::new_uninit(m), invalid_pos_: self.invalid_pos_, forest: allocate::(m, self.forest.len()), _params: core::marker::PhantomData::, ringbuffer_break: self.ringbuffer_break, }; ret.buckets_ .slice_mut() .clone_from_slice(self.buckets_.slice()); ret.forest.slice_mut().clone_from_slice(self.forest.slice()); ret } } impl< AllocU32: Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, > AnyHasher for H10 where Buckets: PartialEq, { /* fn GetH10Tree(&mut self) -> Option<&mut H10> { Some(self) }*/ #[inline(always)] fn Opts(&self) -> H9Opts { H9Opts { literal_byte_score: 340, } } #[inline(always)] fn PrepareDistanceCache(&self, _distance_cache: &mut [i32]) {} #[inline(always)] fn HashTypeLength(&self) -> usize { 4 } #[inline(always)] fn StoreLookahead(&self) -> usize { Params::max_tree_comp_length() as usize } fn StitchToPreviousBlock( &mut self, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ) { super::hq::StitchToPreviousBlockH10(self, num_bytes, position, ringbuffer, ringbuffer_mask, self.ringbuffer_break) } #[inline(always)] fn GetHasherCommon(&mut self) -> &mut Struct1 { &mut self.common } #[inline(always)] fn HashBytes(&self, data: &[u8]) -> usize { let h = BROTLI_UNALIGNED_LOAD32(data).wrapping_mul(kHashMul32); (h >> (32i32 - BUCKET_BITS as i32)) as usize } #[inline(always)] fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { let max_backward: usize = self.window_mask_.wrapping_sub(16).wrapping_add(1); StoreAndFindMatchesH10( self, data, ix, mask, self.ringbuffer_break, Params::max_tree_comp_length() as usize, max_backward, &mut 0, &mut [], ); } fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { let mut i: usize = ix_start; let mut j: usize = ix_start; if ix_start.wrapping_add(63) <= ix_end { i = ix_end.wrapping_sub(63); } if ix_start.wrapping_add(512) <= i { while j < i { { self.Store(data, mask, j); } j = j.wrapping_add(8); } } while i < ix_end { { self.Store(data, mask, i); } i = i.wrapping_add(1); } } fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { for i in ix_start..ix_end { self.Store(data, mask, i); } } fn Prepare(&mut self, _one_shot: bool, _input_size: usize, _data: &[u8]) -> HowPrepared { if self.common.is_prepared_ != 0 { return HowPrepared::ALREADY_PREPARED; } let invalid_pos = self.invalid_pos_; for bucket in self.buckets_.slice_mut().iter_mut() { *bucket = invalid_pos; } self.common.is_prepared_ = 1; HowPrepared::NEWLY_PREPARED } fn FindLongestMatch( &mut self, _dictionary: Option<&BrotliDictionary>, _dictionary_hash: &[u16], _data: &[u8], _ring_buffer_mask: usize, _ring_buffer_break: Option, _distance_cache: &[i32], _cur_ix: usize, _max_length: usize, _max_backward: usize, _gap: usize, _max_distance: usize, _out: &mut HasherSearchResult, ) -> bool { unimplemented!(); } } pub struct BackwardMatch(pub u64); // pub distance : u32, // pub length_and_code : u32, impl BackwardMatch { #[inline(always)] pub fn distance(&self) -> u32 { self.0 as u32 } #[inline(always)] pub fn length_and_code(&self) -> u32 { (self.0 >> 32) as u32 } } pub struct BackwardMatchMut<'a>(pub &'a mut u64); // pub distance : u32, // pub length_and_code : u32, impl<'a> BackwardMatchMut<'a> { #[inline(always)] pub fn distance(&self) -> u32 { *self.0 as u32 } #[inline(always)] pub fn length_and_code(&self) -> u32 { (*self.0 >> 32) as u32 } #[inline(always)] pub fn set_distance(&mut self, data: u32) { *self.0 &= 0xffffffff00000000; *self.0 |= u64::from(data) } #[inline(always)] pub fn set_length_and_code(&mut self, data: u32) { *self.0 = u64::from((*self.0) as u32) | (u64::from(data) << 32); } #[inline(always)] pub fn init(&mut self, dist: usize, len: usize) { self.set_distance(dist as u32); self.set_length_and_code((len << 5) as u32); } #[inline(always)] pub(crate) fn init_dictionary(&mut self, dist: usize, len: usize, len_code: usize) { self.set_distance(dist as u32); self.set_length_and_code((len << 5 | if len == len_code { 0 } else { len_code }) as u32); } } macro_rules! LeftChildIndexH10 { ($xself: expr, $pos: expr) => { (2usize).wrapping_mul($pos & (*$xself).window_mask_) }; } macro_rules! RightChildIndexH10 { ($xself: expr, $pos: expr) => { (2usize) .wrapping_mul($pos & (*$xself).window_mask_) .wrapping_add(1) }; } /* fn LeftChildIndexH10, Buckets: Allocable+SliceWrapperMut+SliceWrapper, Params:H10Params>( mut xself : &mut H10, pos : usize ) -> usize { (2usize).wrapping_mul(pos & xself.window_mask_) } fn RightChildIndexH10, Buckets: Allocable+SliceWrapperMut+SliceWrapper, Params:H10Params>( mut xself : &mut H10, pos : usize ) -> usize { (2usize).wrapping_mul( pos & xself.window_mask_ ).wrapping_add( 1 ) } */ pub fn StoreAndFindMatchesH10< AllocU32: Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, >( xself: &mut H10, data: &[u8], cur_ix: usize, ring_buffer_mask: usize, ringbuffer_break: Option, max_length: usize, max_backward: usize, best_len: &mut usize, matches: &mut [u64], ) -> usize where Buckets: PartialEq, { let mut matches_offset = 0_usize; let cur_ix_masked = cur_ix & ring_buffer_mask; let max_comp_len = min(max_length, 128); let should_reroot_tree = max_length >= 128; let key = xself.HashBytes(&data[cur_ix_masked..]); let forest = xself.forest.slice_mut(); let mut prev_ix = xself.buckets_.slice()[key] as usize; let mut node_left = LeftChildIndexH10!(xself, cur_ix); let mut node_right = RightChildIndexH10!(xself, cur_ix); let mut best_len_left = 0_usize; let mut best_len_right = 0_usize; let mut depth_remaining = 64_usize; if should_reroot_tree { xself.buckets_.slice_mut()[key] = cur_ix as u32; } loop { let backward = cur_ix.wrapping_sub(prev_ix); let prev_ix_masked = prev_ix & ring_buffer_mask; if backward == 0 || backward > max_backward || depth_remaining == 0 { if should_reroot_tree { forest[node_left] = xself.invalid_pos_; forest[node_right] = xself.invalid_pos_; } break; } let cur_len = min(best_len_left, best_len_right); let len = fix_unbroken_len( cur_len.wrapping_add(FindMatchLengthWithLimit( &data[cur_ix_masked.wrapping_add(cur_len)..], &data[prev_ix_masked.wrapping_add(cur_len)..], max_length.wrapping_sub(cur_len), )), prev_ix_masked, cur_ix_masked, ringbuffer_break); if matches_offset != matches.len() && len > *best_len { *best_len = len; BackwardMatchMut(&mut matches[matches_offset]).init(backward, len); matches_offset += 1; } if len >= max_comp_len { if should_reroot_tree { forest[node_left] = forest[LeftChildIndexH10!(xself, prev_ix)]; forest[node_right] = forest[RightChildIndexH10!(xself, prev_ix)]; } break; } if data[cur_ix_masked.wrapping_add(len)] > data[prev_ix_masked.wrapping_add(len)] { best_len_left = len; if should_reroot_tree { forest[node_left] = prev_ix as u32; } node_left = RightChildIndexH10!(xself, prev_ix); prev_ix = forest[node_left] as usize; } else { best_len_right = len; if should_reroot_tree { forest[node_right] = prev_ix as u32; } node_right = LeftChildIndexH10!(xself, prev_ix); prev_ix = forest[node_right] as usize; } depth_remaining = depth_remaining.wrapping_sub(1); } matches_offset } brotli-8.0.2/src/enc/backward_references/hq.rs000064400000000000000000001361131046102023000174240ustar 00000000000000use alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use core; use core::cmp::{max, min}; use super::hash_to_binary_tree::{ kInfinity, Allocable, BackwardMatch, BackwardMatchMut, H10Params, StoreAndFindMatchesH10, Union1, ZopfliNode, H10, }; use super::{ kDistanceCacheIndex, kDistanceCacheOffset, kInvalidMatch, AnyHasher, BrotliEncoderParams, fix_unbroken_len, }; use crate::enc::combined_alloc::{alloc_if, alloc_or_default}; use crate::enc::command::{ combine_length_codes, BrotliDistanceParams, Command, GetCopyLengthCode, GetInsertLengthCode, PrefixEncodeCopyDistance, }; use crate::enc::constants::{kCopyExtra, kInsExtra}; use crate::enc::encode; use crate::enc::literal_cost::BrotliEstimateBitCostsForLiterals; use crate::enc::static_dict::{ BrotliDictionary, BrotliFindAllStaticDictionaryMatches, FindMatchLengthWithLimit, }; use crate::enc::util::{floatX, FastLog2, FastLog2f64}; const BROTLI_WINDOW_GAP: usize = 16; const BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN: usize = 37; /* static kBrotliMinWindowBits: i32 = 10i32; static kBrotliMaxWindowBits: i32 = 24i32; static kInvalidMatch: u32 = 0xfffffffu32; static kCutoffTransformsCount: u32 = 10u32; static kCutoffTransforms: u64 = 0x71b520au64 << 32 | 0xda2d3200u32 as (u64); pub static kHashMul32: u32 = 0x1e35a7bdu32; pub static kHashMul64: u64 = 0x1e35a7bdu64 << 32 | 0x1e35a7bdu64; pub static kHashMul64Long: u64 = 0x1fe35a7bu32 as (u64) << 32 | 0xd3579bd3u32 as (u64); */ pub const BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE: usize = 544; pub const BROTLI_NUM_LITERAL_SYMBOLS: usize = 256; pub const BROTLI_NUM_COMMAND_SYMBOLS: usize = 704; pub const BROTLI_SIMPLE_DISTANCE_ALPHABET_SIZE: usize = encode::BROTLI_NUM_DISTANCE_SHORT_CODES as usize + (2 * encode::BROTLI_LARGE_MAX_DISTANCE_BITS as usize); const STORE_LOOKAHEAD_H_10: usize = 128; #[inline(always)] pub fn BrotliInitZopfliNodes(array: &mut [ZopfliNode], length: usize) { let stub = ZopfliNode::default(); let mut i: usize; i = 0usize; while i < length { array[i] = stub; i = i.wrapping_add(1); } } impl ZopfliNode { #[inline(always)] fn copy_length(&self) -> u32 { self.length & 0x01ff_ffff } #[inline(always)] fn copy_distance(&self) -> u32 { self.distance } #[inline(always)] fn length_code(&self) -> u32 { self.copy_length() .wrapping_add(9) .wrapping_sub(self.length >> 25) } #[inline(always)] fn distance_code(&self) -> u32 { let short_code: u32 = self.dcode_insert_length >> 27; if short_code == 0u32 { self.copy_distance().wrapping_add(16).wrapping_sub(1) } else { short_code.wrapping_sub(1) } } } pub fn BrotliZopfliCreateCommands( num_bytes: usize, block_start: usize, max_backward_limit: usize, nodes: &[ZopfliNode], dist_cache: &mut [i32], last_insert_len: &mut usize, params: &BrotliEncoderParams, commands: &mut [Command], num_literals: &mut usize, ) { let mut pos: usize = 0usize; let mut offset: u32 = match (nodes[0]).u { Union1::next(off) => off, _ => 0, }; let mut i: usize; let gap: usize = 0usize; i = 0usize; while offset != !(0u32) { { let next: &ZopfliNode = &nodes[pos.wrapping_add(offset as usize)]; let copy_length = next.copy_length() as usize; let mut insert_length: usize = (next.dcode_insert_length & 0x07ff_ffff) as usize; pos = pos.wrapping_add(insert_length); offset = match next.u { Union1::next(off) => off, _ => 0, }; if i == 0usize { insert_length = insert_length.wrapping_add(*last_insert_len); *last_insert_len = 0usize; } { let distance: usize = next.copy_distance() as usize; let len_code: usize = next.length_code() as usize; let max_distance: usize = min(block_start.wrapping_add(pos), max_backward_limit); let is_dictionary = distance > max_distance.wrapping_add(gap); let dist_code: usize = next.distance_code() as usize; commands[i].init( ¶ms.dist, insert_length, copy_length, len_code, dist_code, ); if !is_dictionary && dist_code > 0 { dist_cache[3] = dist_cache[2]; dist_cache[2] = dist_cache[1]; dist_cache[1] = dist_cache[0]; dist_cache[0] = distance as i32; } } *num_literals = num_literals.wrapping_add(insert_length); pos = pos.wrapping_add(copy_length); } i = i.wrapping_add(1); } *last_insert_len = last_insert_len.wrapping_add(num_bytes.wrapping_sub(pos)); } #[inline(always)] fn MaxZopfliLen(params: &BrotliEncoderParams) -> usize { (if params.quality <= 10i32 { 150i32 } else { 325i32 }) as usize } pub struct ZopfliCostModel> { pub cost_cmd_: [floatX; BROTLI_NUM_COMMAND_SYMBOLS], pub cost_dist_: AllocF::AllocatedMemory, pub distance_histogram_size: u32, pub literal_costs_: AllocF::AllocatedMemory, pub min_cost_cmd_: floatX, pub num_bytes_: usize, } #[derive(Copy, Clone, Debug)] pub struct PosData { pub pos: usize, pub distance_cache: [i32; 4], pub costdiff: floatX, pub cost: floatX, } #[derive(Copy, Clone, Debug)] pub struct StartPosQueue { pub q_: [PosData; 8], pub idx_: usize, } impl Default for StartPosQueue { #[inline(always)] fn default() -> Self { StartPosQueue { q_: [PosData { pos: 0, distance_cache: [0; 4], costdiff: 0.0, cost: 0.0, }; 8], idx_: 0, } } } impl> ZopfliCostModel { fn init(m: &mut AllocF, dist: &BrotliDistanceParams, num_bytes: usize) -> Self { Self { num_bytes_: num_bytes, cost_cmd_: [0.0; 704], min_cost_cmd_: 0.0, // FIXME: makes little sense to test if N+2 > 0 -- always true unless wrapping. Perhaps use allocate() instead? literal_costs_: alloc_or_default::(m, num_bytes + 2), // FIXME: possible bug because allocation size is different from the condition cost_dist_: alloc_if::( dist.alphabet_size > 0, m, num_bytes + dist.alphabet_size as usize, ), distance_histogram_size: min(dist.alphabet_size, 544), } } fn set_from_literal_costs( &mut self, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ) { let literal_costs = self.literal_costs_.slice_mut(); let mut literal_carry: floatX = 0.0; let cost_dist = self.cost_dist_.slice_mut(); let cost_cmd = &mut self.cost_cmd_[..]; let num_bytes: usize = self.num_bytes_; BrotliEstimateBitCostsForLiterals( position, num_bytes, ringbuffer_mask, ringbuffer, &mut literal_costs[1..], ); literal_costs[0] = 0.0 as (floatX); for i in 0usize..num_bytes { literal_carry = literal_carry + literal_costs[i.wrapping_add(1)]; literal_costs[i.wrapping_add(1)] = literal_costs[i] + literal_carry; literal_carry -= literal_costs[i.wrapping_add(1)] - literal_costs[i]; } for i in 0..BROTLI_NUM_COMMAND_SYMBOLS { cost_cmd[i] = FastLog2(11 + i as u64); } for i in 0usize..self.distance_histogram_size as usize { cost_dist[i] = FastLog2((20u64).wrapping_add(i as (u64))) as (floatX); } self.min_cost_cmd_ = FastLog2(11) as (floatX); } } pub fn StitchToPreviousBlockH10< AllocU32: Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, >( handle: &mut H10, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ringbuffer_break: Option, ) where Buckets: PartialEq, { if (num_bytes >= handle.HashTypeLength() - 1 && position >= Params::max_tree_comp_length() as usize) { /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher. These could not be calculated before, since they require knowledge of both the previous and the current block. */ let i_start = position - Params::max_tree_comp_length() as usize; let i_end = min(position, i_start.wrapping_add(num_bytes)); for i in i_start..i_end { /* Maximum distance is window size - 16, see section 9.1. of the spec. Furthermore, we have to make sure that we don't look further back from the start of the next block than the window size, otherwise we could access already overwritten areas of the ring-buffer. */ let max_backward = handle.window_mask_ - max(BROTLI_WINDOW_GAP - 1, position - i); let mut _best_len = 0; /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the end of the current block and that we have at least MAX_TREE_COMP_LENGTH tail in the ring-buffer. */ StoreAndFindMatchesH10( handle, ringbuffer, i, ringbuffer_mask, ringbuffer_break, ::max_tree_comp_length() as usize, max_backward, &mut _best_len, &mut [], ); } } } fn FindAllMatchesH10< AllocU32: Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, >( handle: &mut H10, dictionary: Option<&BrotliDictionary>, data: &[u8], ring_buffer_mask: usize, ring_buffer_break: Option, cur_ix: usize, max_length: usize, max_backward: usize, gap: usize, params: &BrotliEncoderParams, matches: &mut [u64], ) -> usize where Buckets: PartialEq, { let mut matches_offset = 0usize; let cur_ix_masked: usize = cur_ix & ring_buffer_mask; let mut best_len: usize = 1usize; let short_match_max_backward: usize = (if params.quality != 11i32 { 16i32 } else { 64i32 }) as usize; let mut stop: usize = cur_ix.wrapping_sub(short_match_max_backward); let mut dict_matches = [kInvalidMatch; BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1]; let mut i: usize; if cur_ix < short_match_max_backward { stop = 0usize; } i = cur_ix.wrapping_sub(1); while i > stop && best_len <= 2 { let mut prev_ix: usize = i; let backward: usize = cur_ix.wrapping_sub(prev_ix); if backward > max_backward { break; } prev_ix &= ring_buffer_mask; if data[cur_ix_masked] == data[prev_ix] && data[cur_ix_masked.wrapping_add(1)] == data[prev_ix.wrapping_add(1)] { let len = FindMatchLengthWithLimit(&data[prev_ix..], &data[cur_ix_masked..], max_length); if len > best_len { best_len = len; BackwardMatchMut(&mut matches[matches_offset]).init(backward, len); matches_offset += 1; } } i = i.wrapping_sub(1); } if best_len < max_length { let loc_offset = StoreAndFindMatchesH10( handle, data, cur_ix, ring_buffer_mask, ring_buffer_break, max_length, max_backward, &mut best_len, matches.split_at_mut(matches_offset).1, ); matches_offset += loc_offset; } for i in 0..=37 { dict_matches[i] = kInvalidMatch } { let minlen = max(4, best_len.wrapping_add(1)); if dictionary.is_some() && BrotliFindAllStaticDictionaryMatches( dictionary.unwrap(), &data[cur_ix_masked..], minlen, max_length, &mut dict_matches[..], ) != 0 { assert!(params.use_dictionary); let maxlen = min(37, max_length); for l in minlen..=maxlen { let dict_id: u32 = dict_matches[l]; if dict_id < kInvalidMatch { let distance: usize = max_backward .wrapping_add(gap) .wrapping_add((dict_id >> 5) as usize) .wrapping_add(1); if distance <= params.dist.max_distance { BackwardMatchMut(&mut matches[matches_offset]).init_dictionary( distance, l, (dict_id & 31u32) as usize, ); matches_offset += 1; } } } } } matches_offset } impl BackwardMatch { #[inline(always)] fn length(&self) -> usize { (self.length_and_code() >> 5) as usize } } #[inline(always)] fn MaxZopfliCandidates(params: &BrotliEncoderParams) -> usize { (if params.quality <= 10i32 { 1i32 } else { 5i32 }) as usize } #[inline(always)] fn ComputeDistanceShortcut( block_start: usize, pos: usize, max_backward: usize, gap: usize, nodes: &[ZopfliNode], ) -> u32 { let clen: usize = nodes[pos].copy_length() as usize; let ilen: usize = ((nodes[pos]).dcode_insert_length) as usize & 0x07ff_ffff; let dist: usize = nodes[pos].copy_distance() as usize; if pos == 0usize { 0u32 } else if dist.wrapping_add(clen) <= block_start.wrapping_add(pos).wrapping_add(gap) && dist <= max_backward.wrapping_add(gap) && nodes[pos].distance_code() > 0 { pos as u32 } else { match (nodes[(pos.wrapping_sub(clen).wrapping_sub(ilen) as usize)]).u { Union1::shortcut(shrt) => shrt, _ => 0, } } } impl> ZopfliCostModel { #[inline(always)] fn get_literal_costs(&self, from: usize, to: usize) -> floatX { self.literal_costs_.slice()[to] - self.literal_costs_.slice()[from] } } fn ComputeDistanceCache( pos: usize, mut starting_dist_cache: &[i32], nodes: &[ZopfliNode], dist_cache: &mut [i32], ) { let mut idx: i32 = 0i32; let mut p: usize = match (nodes[pos]).u { Union1::shortcut(shrt) => shrt, _ => 0, } as usize; while idx < 4i32 && (p > 0usize) { let ilen: usize = ((nodes[p]).dcode_insert_length) as usize & 0x07ff_ffff; let clen = nodes[p].copy_length() as usize; let dist = nodes[p].copy_distance() as usize; dist_cache[({ let _old = idx; idx += 1; _old } as usize)] = dist as i32; p = match (nodes[(p.wrapping_sub(clen).wrapping_sub(ilen) as usize)]).u { Union1::shortcut(shrt) => shrt, _ => 0, } as usize; } while idx < 4i32 { { dist_cache[(idx as usize)] = { let (_old, _upper) = starting_dist_cache.split_at(1); starting_dist_cache = _upper; _old[0] }; } idx += 1; } } impl StartPosQueue { #[inline(always)] fn size(&self) -> usize { min(self.idx_, 8) } fn push(&mut self, posdata: &PosData) { let mut offset: usize = !self.idx_ & 7usize; self.idx_ = self.idx_.wrapping_add(1); let len: usize = self.size(); let q: &mut [PosData; 8] = &mut self.q_; q[offset] = *posdata; for _i in 1..len { if q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff { q.swap(offset & 7, (offset + 1) & 7); } offset = offset.wrapping_add(1); } } } fn EvaluateNode>( block_start: usize, pos: usize, max_backward_limit: usize, gap: usize, starting_dist_cache: &[i32], model: &ZopfliCostModel, queue: &mut StartPosQueue, nodes: &mut [ZopfliNode], ) { let node_cost: floatX = match (nodes[pos]).u { Union1::cost(cst) => cst, _ => 0.0, }; (nodes[pos]).u = Union1::shortcut(ComputeDistanceShortcut( block_start, pos, max_backward_limit, gap, nodes, )); if node_cost <= model.get_literal_costs(0, pos) { let mut posdata = PosData { pos, cost: node_cost, costdiff: node_cost - model.get_literal_costs(0, pos), distance_cache: [0; 4], }; ComputeDistanceCache( pos, starting_dist_cache, nodes, &mut posdata.distance_cache[..], ); queue.push(&mut posdata); } } impl StartPosQueue { #[inline(always)] fn at(&self, k: usize) -> &PosData { &self.q_[k.wrapping_sub(self.idx_) & 7usize] } } impl> ZopfliCostModel { #[inline(always)] fn get_min_cost_cmd(&self) -> floatX { self.min_cost_cmd_ } } #[inline(always)] fn ComputeMinimumCopyLength( start_cost: floatX, nodes: &[ZopfliNode], num_bytes: usize, pos: usize, ) -> usize { let mut min_cost: floatX = start_cost; let mut len: usize = 2usize; let mut next_len_bucket: usize = 4usize; let mut next_len_offset: usize = 10usize; while pos.wrapping_add(len) <= num_bytes && (match (nodes[pos.wrapping_add(len)]).u { Union1::cost(cst) => cst, _ => 0.0, } <= min_cost) { len = len.wrapping_add(1); if len == next_len_offset { min_cost += 1.0; next_len_offset = next_len_offset.wrapping_add(next_len_bucket); next_len_bucket = next_len_bucket.wrapping_mul(2); } } len } #[inline(always)] fn GetInsertExtra(inscode: u16) -> u32 { kInsExtra[(inscode as usize)] } impl> ZopfliCostModel { #[inline(always)] fn get_distance_cost(&self, distcode: usize) -> floatX { self.cost_dist_.slice()[distcode] } } #[inline(always)] fn GetCopyExtra(copycode: u16) -> u32 { kCopyExtra[(copycode as usize)] } impl> ZopfliCostModel { #[inline(always)] fn get_command_cost(&self, cmdcode: u16) -> floatX { self.cost_cmd_[cmdcode as usize] } } #[inline(always)] fn UpdateZopfliNode( nodes: &mut [ZopfliNode], pos: usize, start_pos: usize, len: usize, len_code: usize, dist: usize, short_code: usize, cost: floatX, ) { let next = &mut nodes[pos.wrapping_add(len)]; next.length = (len | len.wrapping_add(9u32 as usize).wrapping_sub(len_code) << 25) as u32; next.distance = dist as u32; next.dcode_insert_length = pos.wrapping_sub(start_pos) as u32 | (short_code << 27) as u32; next.u = Union1::cost(cost); } impl BackwardMatch { #[inline(always)] fn length_code(&self) -> usize { let code = (self.length_and_code() & 31u32) as usize; if code != 0 { code } else { self.length() } } } fn UpdateNodes>( num_bytes: usize, block_start: usize, pos: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ringbuffer_break: Option, params: &BrotliEncoderParams, max_backward_limit: usize, starting_dist_cache: &[i32], num_matches: usize, matches: &[u64], model: &ZopfliCostModel, queue: &mut StartPosQueue, nodes: &mut [ZopfliNode], ) -> usize { let cur_ix: usize = block_start.wrapping_add(pos); let cur_ix_masked: usize = cur_ix & ringbuffer_mask; let max_distance: usize = min(cur_ix, max_backward_limit); let max_len: usize = num_bytes.wrapping_sub(pos); let max_zopfli_len: usize = MaxZopfliLen(params); let min_len: usize; let mut result: usize = 0usize; let gap: usize = 0usize; EvaluateNode( block_start, pos, max_backward_limit, gap, starting_dist_cache, model, queue, nodes, ); { let posdata = queue.at(0); let min_cost = posdata.cost + model.get_min_cost_cmd() + model.get_literal_costs(posdata.pos, pos); min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos); } for k in 0..min(MaxZopfliCandidates(params), queue.size()) { let posdata = queue.at(k); let start: usize = posdata.pos; let inscode: u16 = GetInsertLengthCode(pos.wrapping_sub(start)); let start_costdiff: floatX = posdata.costdiff; let base_cost: floatX = start_costdiff + GetInsertExtra(inscode) as (floatX) + model.get_literal_costs(0, pos); let mut best_len: usize = min_len.wrapping_sub(1); for j in 0..16 { if best_len >= max_len { break; } let idx: usize = kDistanceCacheIndex[j] as usize; let distance_cache_len_minus_1 = 3; debug_assert_eq!(distance_cache_len_minus_1 + 1, posdata.distance_cache.len()); let backward: usize = (posdata.distance_cache[(idx & distance_cache_len_minus_1)] + i32::from(kDistanceCacheOffset[j])) as usize; let mut prev_ix: usize = cur_ix.wrapping_sub(backward); let len: usize; let continuation: u8 = ringbuffer[cur_ix_masked.wrapping_add(best_len)]; /* if let Some(breakpoint) = ringbuffer_break { if prev_ix < usize::from(breakpoint) && cur_ix_masked.wrapping_add(best_len) > usize::from(breakpoint) { break; } let tmp_ix = prev_ix & ringbuffer_mask; if tmp_ix < usize::from(breakpoint) && tmp_ix.wrapping_add(best_len) > breakpoint { continue; } }*/ if cur_ix_masked.wrapping_add(best_len) > ringbuffer_mask { break; } if backward > max_distance.wrapping_add(gap) { continue; } if backward > max_distance { continue; } if prev_ix >= cur_ix { continue; } prev_ix &= ringbuffer_mask; if prev_ix.wrapping_add(best_len) > ringbuffer_mask || continuation != ringbuffer[prev_ix.wrapping_add(best_len)] { continue; } len = fix_unbroken_len( FindMatchLengthWithLimit( &ringbuffer[prev_ix..], &ringbuffer[cur_ix_masked..], max_len, ), prev_ix, cur_ix_masked, ringbuffer_break); let dist_cost = base_cost + model.get_distance_cost(j); for l in best_len.wrapping_add(1)..=len { let copycode: u16 = GetCopyLengthCode(l); let cmdcode = combine_length_codes(inscode, copycode, j == 0); let cost: floatX = (if cmdcode < 128 { base_cost } else { dist_cost }) + (GetCopyExtra(copycode) as floatX) + model.get_command_cost(cmdcode); if cost < match nodes[pos.wrapping_add(l)].u { Union1::cost(cost) => cost, _ => 0.0, } { UpdateZopfliNode(nodes, pos, start, l, l, backward, j.wrapping_add(1), cost); result = max(result, l); } best_len = l; } } if k >= 2 { continue; } let mut len: usize = min_len; for j in 0usize..num_matches { let match_ = BackwardMatch(matches[j]); let dist: usize = match_.distance() as usize; let is_dictionary_match = dist > max_distance.wrapping_add(gap); let dist_code: usize = dist.wrapping_add(16).wrapping_sub(1); let mut dist_symbol: u16 = 0; let mut distextra: u32 = 0; PrefixEncodeCopyDistance( dist_code, params.dist.num_direct_distance_codes as usize, u64::from(params.dist.distance_postfix_bits), &mut dist_symbol, &mut distextra, ); let distnumextra: u32 = u32::from(dist_symbol) >> 10; let dist_cost = base_cost + (distnumextra as floatX) + model.get_distance_cost((dist_symbol as i32 & 0x03ff) as usize); let max_match_len = match_.length(); if len < max_match_len && (is_dictionary_match || max_match_len > max_zopfli_len) { len = max_match_len; } while len <= max_match_len { { let len_code: usize = if is_dictionary_match { match_.length_code() } else { len }; let copycode: u16 = GetCopyLengthCode(len_code); let cmdcode = combine_length_codes(inscode, copycode, false); let cost: floatX = dist_cost + GetCopyExtra(copycode) as (floatX) + model.get_command_cost(cmdcode); if let Union1::cost(nodeCost) = (nodes[pos.wrapping_add(len)]).u { if cost < nodeCost { UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0usize, cost); result = max(result, len); } } } len = len.wrapping_add(1); } } } result } impl> ZopfliCostModel { #[inline(always)] fn cleanup(&mut self, m: &mut AllocF) { m.free_cell(core::mem::take(&mut self.literal_costs_)); m.free_cell(core::mem::take(&mut self.cost_dist_)); } } impl ZopfliNode { #[inline(always)] fn command_length(&self) -> u32 { self.copy_length() .wrapping_add(self.dcode_insert_length & 0x07ff_ffff) } } #[inline(always)] fn ComputeShortestPathFromNodes(num_bytes: usize, nodes: &mut [ZopfliNode]) -> usize { let mut index: usize = num_bytes; let mut num_commands: usize = 0usize; while (nodes[index].dcode_insert_length & 0x07ff_ffff) == 0 && nodes[index].length == 1 { index = index.wrapping_sub(1); } nodes[index].u = Union1::next(!(0u32)); while index != 0 { let len = nodes[index].command_length() as usize; index = index.wrapping_sub(len); (nodes[index]).u = Union1::next(len as u32); num_commands = num_commands.wrapping_add(1); } num_commands } const MAX_NUM_MATCHES_H10: usize = 128; pub fn BrotliZopfliComputeShortestPath< AllocU32: Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, AllocF: Allocator, >( m: &mut AllocF, dictionary: Option<&BrotliDictionary>, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ringbuffer_break: Option, params: &BrotliEncoderParams, max_backward_limit: usize, dist_cache: &[i32], handle: &mut H10, nodes: &mut [ZopfliNode], ) -> usize where Buckets: PartialEq, { let max_zopfli_len: usize = MaxZopfliLen(params); let mut model: ZopfliCostModel; let mut queue: StartPosQueue; let mut matches = [0; MAX_NUM_MATCHES_H10]; let store_end: usize = if num_bytes >= STORE_LOOKAHEAD_H_10 { position .wrapping_add(num_bytes) .wrapping_sub(STORE_LOOKAHEAD_H_10) .wrapping_add(1) } else { position }; let mut i: usize; let gap: usize = 0usize; let lz_matches_offset: usize = 0usize; (nodes[0]).length = 0u32; (nodes[0]).u = Union1::cost(0.0); model = ZopfliCostModel::init(m, ¶ms.dist, num_bytes); if !(0i32 == 0) { return 0usize; } model.set_from_literal_costs(position, ringbuffer, ringbuffer_mask); queue = StartPosQueue::default(); i = 0usize; while i.wrapping_add(handle.HashTypeLength()).wrapping_sub(1) < num_bytes { { let pos: usize = position.wrapping_add(i); let max_distance: usize = min(pos, max_backward_limit); let mut skip: usize; let mut num_matches: usize = FindAllMatchesH10( handle, dictionary, ringbuffer, ringbuffer_mask, ringbuffer_break, pos, num_bytes.wrapping_sub(i), max_distance, gap, params, &mut matches[lz_matches_offset..], ); if num_matches > 0 && BackwardMatch(matches[num_matches.wrapping_sub(1)]).length() > max_zopfli_len { matches[0] = matches[num_matches.wrapping_sub(1)]; num_matches = 1usize; } skip = UpdateNodes( num_bytes, position, i, ringbuffer, ringbuffer_mask, ringbuffer_break, params, max_backward_limit, dist_cache, num_matches, &matches[..], &mut model, &mut queue, nodes, ); if skip < 16384usize { skip = 0usize; } if num_matches == 1 && BackwardMatch(matches[0]).length() > max_zopfli_len { skip = max(BackwardMatch(matches[0]).length(), skip); } if skip > 1usize { handle.StoreRange( ringbuffer, ringbuffer_mask, pos.wrapping_add(1), min(pos.wrapping_add(skip), store_end), ); skip = skip.wrapping_sub(1); while skip != 0 { i = i.wrapping_add(1); if i.wrapping_add(handle.HashTypeLength()).wrapping_sub(1) >= num_bytes { break; } EvaluateNode( position, i, max_backward_limit, gap, dist_cache, &mut model, &mut queue, nodes, ); skip = skip.wrapping_sub(1); } } } i = i.wrapping_add(1); } model.cleanup(m); ComputeShortestPathFromNodes(num_bytes, nodes) } pub fn BrotliCreateZopfliBackwardReferences< Alloc: Allocator + Allocator + Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, >( alloc: &mut Alloc, dictionary: Option<&BrotliDictionary>, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ringbuffer_break: Option, params: &BrotliEncoderParams, hasher: &mut H10, dist_cache: &mut [i32], last_insert_len: &mut usize, commands: &mut [Command], num_commands: &mut usize, num_literals: &mut usize, ) where Buckets: PartialEq, { let max_backward_limit: usize = (1usize << params.lgwin).wrapping_sub(16); // FIXME: makes little sense to test if N+1 > 0 -- always true unless wrapping. Perhaps use allocate() instead? let mut nodes = alloc_or_default::(alloc, num_bytes + 1); if !(0i32 == 0) { return; } BrotliInitZopfliNodes(nodes.slice_mut(), num_bytes.wrapping_add(1)); *num_commands = num_commands.wrapping_add(BrotliZopfliComputeShortestPath( alloc, dictionary, num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, max_backward_limit, dist_cache, hasher, nodes.slice_mut(), )); if !(0i32 == 0) { return; } BrotliZopfliCreateCommands( num_bytes, position, max_backward_limit, nodes.slice(), dist_cache, last_insert_len, params, commands, num_literals, ); { >::free_cell(alloc, core::mem::take(&mut nodes)); } } fn SetCost(histogram: &[u32], histogram_size: usize, literal_histogram: bool, cost: &mut [floatX]) { let mut sum: u64 = 0; for i in 0..histogram_size { sum = sum.wrapping_add(u64::from(histogram[i])); } let log2sum = FastLog2(sum); let mut missing_symbol_sum = sum; if !literal_histogram { for i in 0..histogram_size { if histogram[i] == 0 { missing_symbol_sum = missing_symbol_sum.wrapping_add(1); } } } let missing_symbol_cost = FastLog2f64(missing_symbol_sum) + 2.0; for i in 0..histogram_size { if histogram[i] == 0 { cost[i] = missing_symbol_cost; } else { cost[i] = log2sum - FastLog2(u64::from(histogram[i])); if cost[i] < 1.0 { cost[i] = 1.0; } } } } impl> ZopfliCostModel { fn set_from_commands( &mut self, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, commands: &[Command], num_commands: usize, last_insert_len: usize, ) { let mut histogram_literal = [0u32; BROTLI_NUM_LITERAL_SYMBOLS]; let mut histogram_cmd = [0u32; BROTLI_NUM_COMMAND_SYMBOLS]; let mut histogram_dist = [0u32; BROTLI_SIMPLE_DISTANCE_ALPHABET_SIZE]; let mut cost_literal = [0.0; BROTLI_NUM_LITERAL_SYMBOLS]; let mut pos: usize = position.wrapping_sub(last_insert_len); let mut min_cost_cmd: floatX = kInfinity; let mut i: usize; let cost_cmd: &mut [floatX] = &mut self.cost_cmd_[..]; i = 0usize; while i < num_commands { { let inslength: usize = (commands[i]).insert_len_ as usize; let copylength: usize = commands[i].copy_len() as usize; let distcode: usize = (commands[i].dist_prefix_ as i32 & 0x03ff) as usize; let cmdcode: usize = (commands[i]).cmd_prefix_ as usize; { let _rhs = 1; let _lhs = &mut histogram_cmd[cmdcode]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } if cmdcode >= 128usize { let _rhs = 1; let _lhs = &mut histogram_dist[distcode]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } for j in 0usize..inslength { let _rhs = 1; let _lhs = &mut histogram_literal [(ringbuffer[(pos.wrapping_add(j) & ringbuffer_mask)] as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } pos = pos.wrapping_add(inslength.wrapping_add(copylength)); } i = i.wrapping_add(1); } SetCost( &histogram_literal[..], BROTLI_NUM_LITERAL_SYMBOLS, true, &mut cost_literal, ); SetCost( &histogram_cmd[..], BROTLI_NUM_COMMAND_SYMBOLS, false, &mut cost_cmd[..], ); SetCost( &histogram_dist[..], self.distance_histogram_size as usize, false, self.cost_dist_.slice_mut(), ); for i in 0usize..704usize { min_cost_cmd = min_cost_cmd.min(cost_cmd[i]); } self.min_cost_cmd_ = min_cost_cmd; { let literal_costs: &mut [floatX] = self.literal_costs_.slice_mut(); let mut literal_carry: floatX = 0.0; let num_bytes: usize = self.num_bytes_; literal_costs[0] = 0.0 as (floatX); for i in 0usize..num_bytes { literal_carry += cost_literal[ringbuffer[position.wrapping_add(i) & ringbuffer_mask] as usize]; literal_costs[i.wrapping_add(1)] = literal_costs[i] + literal_carry; literal_carry -= literal_costs[i.wrapping_add(1)] - literal_costs[i]; } } } } fn ZopfliIterate>( num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ringbuffer_break: Option, params: &BrotliEncoderParams, max_backward_limit: usize, gap: usize, dist_cache: &[i32], model: &ZopfliCostModel, num_matches: &[u32], matches: &[u64], nodes: &mut [ZopfliNode], ) -> usize { let max_zopfli_len: usize = MaxZopfliLen(params); let mut queue: StartPosQueue; let mut cur_match_pos: usize = 0usize; let mut i: usize; (nodes[0]).length = 0u32; (nodes[0]).u = Union1::cost(0.0); queue = StartPosQueue::default(); i = 0usize; while i.wrapping_add(3) < num_bytes { { let mut skip: usize = UpdateNodes( num_bytes, position, i, ringbuffer, ringbuffer_mask, ringbuffer_break, params, max_backward_limit, dist_cache, num_matches[i] as usize, &matches[cur_match_pos..], model, &mut queue, nodes, ); if skip < 16384usize { skip = 0usize; } cur_match_pos = cur_match_pos.wrapping_add(num_matches[i] as usize); if num_matches[i] == 1 && BackwardMatch(matches[cur_match_pos.wrapping_sub(1)]).length() > max_zopfli_len { skip = max( BackwardMatch(matches[cur_match_pos.wrapping_sub(1)]).length(), skip, ); } if skip > 1usize { skip = skip.wrapping_sub(1); while skip != 0 { i = i.wrapping_add(1); if i.wrapping_add(3) >= num_bytes { break; } EvaluateNode( position, i, max_backward_limit, gap, dist_cache, model, &mut queue, nodes, ); cur_match_pos = cur_match_pos.wrapping_add(num_matches[i] as usize); skip = skip.wrapping_sub(1); } } } i = i.wrapping_add(1); } ComputeShortestPathFromNodes(num_bytes, nodes) } pub fn BrotliCreateHqZopfliBackwardReferences< Alloc: Allocator + Allocator + Allocator + Allocator, Buckets: Allocable + SliceWrapperMut + SliceWrapper, Params: H10Params, >( alloc: &mut Alloc, dictionary: Option<&BrotliDictionary>, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ringbuffer_break: Option, params: &BrotliEncoderParams, hasher: &mut H10, dist_cache: &mut [i32], last_insert_len: &mut usize, commands: &mut [Command], num_commands: &mut usize, num_literals: &mut usize, ) where Buckets: PartialEq, { let max_backward_limit: usize = (1usize << params.lgwin).wrapping_sub(16); let mut num_matches = alloc_or_default::(alloc, num_bytes); let mut matches_size: usize = (4usize).wrapping_mul(num_bytes); let store_end: usize = if num_bytes >= STORE_LOOKAHEAD_H_10 { position .wrapping_add(num_bytes) .wrapping_sub(STORE_LOOKAHEAD_H_10) .wrapping_add(1) } else { position }; let mut cur_match_pos: usize = 0usize; let mut i: usize; let mut orig_dist_cache = [0i32; 4]; let mut model: ZopfliCostModel; let mut matches = alloc_or_default::(alloc, matches_size); let gap: usize = 0usize; let shadow_matches: usize = 0usize; i = 0usize; while i.wrapping_add(hasher.HashTypeLength()).wrapping_sub(1) < num_bytes { { let pos: usize = position.wrapping_add(i); let max_distance: usize = min(pos, max_backward_limit); let max_length: usize = num_bytes.wrapping_sub(i); let mut j: usize; { if matches_size < cur_match_pos.wrapping_add(128).wrapping_add(shadow_matches) { let mut new_size: usize = if matches_size == 0usize { cur_match_pos.wrapping_add(128).wrapping_add(shadow_matches) } else { matches_size }; while new_size < cur_match_pos.wrapping_add(128).wrapping_add(shadow_matches) { new_size = new_size.wrapping_mul(2); } let mut new_array = alloc_or_default::(alloc, new_size); if matches_size != 0 { for (dst, src) in new_array .slice_mut() .split_at_mut(matches_size) .0 .iter_mut() .zip(matches.slice().split_at(matches_size).0.iter()) { *dst = *src; } } { >::free_cell(alloc, core::mem::take(&mut matches)); } matches = new_array; matches_size = new_size; } } if !(0i32 == 0) { return; } let num_found_matches: usize = FindAllMatchesH10( hasher, dictionary, //¶ms.dictionary , ringbuffer, ringbuffer_mask, ringbuffer_break, pos, max_length, max_distance, gap, params, &mut matches.slice_mut()[cur_match_pos.wrapping_add(shadow_matches)..], ); let cur_match_end: usize = cur_match_pos.wrapping_add(num_found_matches); j = cur_match_pos; while j.wrapping_add(1) < cur_match_end { {} j = j.wrapping_add(1); } num_matches.slice_mut()[i] = num_found_matches as u32; if num_found_matches > 0usize { let match_len = BackwardMatch(matches.slice()[cur_match_end.wrapping_sub(1)]).length(); if match_len > 325usize { let skip: usize = match_len.wrapping_sub(1); let tmp = matches.slice()[(cur_match_end.wrapping_sub(1) as usize)]; matches.slice_mut()[cur_match_pos] = tmp; cur_match_pos = cur_match_pos.wrapping_add(1); num_matches.slice_mut()[i] = 1u32; hasher.StoreRange( ringbuffer, ringbuffer_mask, pos.wrapping_add(1), min(pos.wrapping_add(match_len), store_end), ); for item in num_matches .slice_mut() .split_at_mut(i.wrapping_add(1)) .1 .split_at_mut(skip) .0 .iter_mut() { *item = 0; } i = i.wrapping_add(skip); } else { cur_match_pos = cur_match_end; } } } i = i.wrapping_add(1); } let orig_num_literals: usize = *num_literals; let orig_last_insert_len: usize = *last_insert_len; for (i, j) in orig_dist_cache .split_at_mut(4) .0 .iter_mut() .zip(dist_cache.split_at(4).0) { *i = *j; } let orig_num_commands: usize = *num_commands; // FIXME: makes little sense to test if N+1 > 0 -- always true unless wrapping. Perhaps use allocate() instead? let mut nodes = alloc_or_default::(alloc, num_bytes + 1); if !(0i32 == 0) { return; } model = ZopfliCostModel::init(alloc, ¶ms.dist, num_bytes); if !(0i32 == 0) { return; } for i in 0usize..2usize { BrotliInitZopfliNodes(nodes.slice_mut(), num_bytes.wrapping_add(1)); if i == 0usize { model.set_from_literal_costs(position, ringbuffer, ringbuffer_mask); } else { model.set_from_commands( position, ringbuffer, ringbuffer_mask, commands, num_commands.wrapping_sub(orig_num_commands), orig_last_insert_len, ); } *num_commands = orig_num_commands; *num_literals = orig_num_literals; *last_insert_len = orig_last_insert_len; for (i, j) in dist_cache .split_at_mut(4) .0 .iter_mut() .zip(orig_dist_cache.split_at(4).0) { *i = *j; } *num_commands = num_commands.wrapping_add(ZopfliIterate( num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, max_backward_limit, gap, dist_cache, &mut model, num_matches.slice(), matches.slice(), nodes.slice_mut(), )); BrotliZopfliCreateCommands( num_bytes, position, max_backward_limit, nodes.slice(), dist_cache, last_insert_len, params, commands, num_literals, ); } model.cleanup(alloc); >::free_cell(alloc, nodes); >::free_cell(alloc, matches); >::free_cell(alloc, num_matches); } brotli-8.0.2/src/enc/backward_references/mod.rs000064400000000000000000003162341046102023000175770ustar 00000000000000mod benchmark; pub mod hash_to_binary_tree; pub mod hq; mod test; use core::cmp::{max, min}; use super::super::alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use super::command::{BrotliDistanceParams, Command, ComputeDistanceCode}; use super::dictionary_hash::kStaticDictionaryHash; use super::hash_to_binary_tree::{H10Buckets, H10DefaultParams, ZopfliNode, H10}; use super::static_dict::{ BrotliDictionary, FindMatchLengthWithLimit, FindMatchLengthWithLimitMin4, BROTLI_UNALIGNED_LOAD32, BROTLI_UNALIGNED_LOAD64, }; use super::util::{floatX, Log2FloorNonZero}; use crate::enc::combined_alloc::allocate; pub static kInvalidMatch: u32 = 0x0fff_ffff; static kCutoffTransformsCount: u32 = 10; static kCutoffTransforms: u64 = 0x071b_520a_da2d_3200; pub static kHashMul32: u32 = 0x1e35_a7bd; pub static kHashMul64: u64 = 0x1e35_a7bd_1e35_a7bd; pub static kHashMul64Long: u64 = 0x1fe3_5a7b_d357_9bd3; #[derive(PartialEq, Eq, Copy, Clone, Debug)] #[repr(C)] pub enum BrotliEncoderMode { BROTLI_MODE_GENERIC = 0, BROTLI_MODE_TEXT = 1, BROTLI_MODE_FONT = 2, BROTLI_FORCE_LSB_PRIOR = 3, BROTLI_FORCE_MSB_PRIOR = 4, BROTLI_FORCE_UTF8_PRIOR = 5, BROTLI_FORCE_SIGNED_PRIOR = 6, } /// This code takes a length and checks if there's an "end of dictionary" marker at the /// "ring_buffer_break"point. This marks where a backwards reference cannot pull data through. /// A match must stop at the end of the dictionary and cannot span the end of the dictionary /// and beginning of the file. ring_buffer_break is only set true for custom LZ77 dictionary. fn fix_unbroken_len(unbroken_len: usize, prev_ix: usize, _cur_ix_masked: usize, ring_buffer_break: Option) -> usize { if let Some(br) = ring_buffer_break { if prev_ix < usize::from(br) && prev_ix + unbroken_len > usize::from(br) { return usize::from(br) - prev_ix; } } return unbroken_len; } #[derive(Clone, Copy, Debug, PartialEq)] pub struct BrotliHasherParams { /// type of hasher to use (default: type 6, but others have tradeoffs of speed/memory) pub type_: i32, /// number of the number of buckets to have in the hash table (defaults to quality - 1) pub bucket_bits: i32, /// number of potential matches to hold per bucket (hash collisions) pub block_bits: i32, /// number of bytes of a potential match to hash pub hash_len: i32, /// number of previous distance matches to check for future matches (defaults to 16) pub num_last_distances_to_check: i32, /// how much to weigh distance vs an extra byte of copy match when comparing possible copy srcs pub literal_byte_score: i32, } #[derive(Clone, Debug)] pub struct BrotliEncoderParams { pub dist: BrotliDistanceParams, /// if this brotli file is generic, font or specifically text pub mode: BrotliEncoderMode, /// quality param between 0 and 11 (11 is smallest but takes longest to encode) pub quality: i32, pub q9_5: bool, /// log of how big the ring buffer should be for copying prior data pub lgwin: i32, /// log of how often metablocks should be serialized pub lgblock: i32, /// how big the source file is (or 0 if no hint is provided) pub size_hint: usize, // FIXME: this should be bool /// avoid serializing out priors for literal sections in the favor of decode speed pub disable_literal_context_modeling: i32, pub hasher: BrotliHasherParams, /// produce an IR of the compression file pub log_meta_block: bool, /// attempt to detect how many bytes before the current byte generates the best prediction of it /// * 0 = off (stride 1 always) /// * 1 = on per 16th of a file /// * 2 = on per block type switch pub stride_detection_quality: u8, /// if nonzero, will search for high entropy strings and log them differently to the IR pub high_entropy_detection_quality: u8, /// if nonzero it will search for the temporal locality and effectiveness of the priors /// for literals. The best adaptation and forgetfulness will be logged per metablock to the IR pub cdf_adaptation_detection: u8, /// whether to search for whether the previous byte or the context_map are better predictors on a per-context-map basis pub prior_bitmask_detection: u8, /// for prior bitmask detection: stride_low, stride_speed, cm_low, cm_speed pub literal_adaptation: [(u16, u16); 4], pub large_window: bool, /// avoid search for the best ndirect vs npostfix parameters for distance pub avoid_distance_prefix_search: bool, /// construct brotli in such a way that it may be concatenated with another brotli file using appropriate bit ops pub catable: bool, /// can use the dictionary (default yes unless catable is set) pub use_dictionary: bool, /// construct brotli in such a way that another concatable brotli file may be appended pub appendable: bool, /// include a magic number and version number and size_hint at the beginning pub magic_number: bool, /// prefer to compute the map of previously seen strings /// just once for all the threads at the beginning, since they overlap significantly pub favor_cpu_efficiency: bool, } impl Default for BrotliEncoderParams { fn default() -> BrotliEncoderParams { super::encode::BrotliEncoderInitParams() } } #[derive(Clone, Copy, Default, PartialEq)] pub struct H9Opts { pub literal_byte_score: u32, } pub enum HowPrepared { ALREADY_PREPARED, NEWLY_PREPARED, } #[derive(Clone, PartialEq)] pub struct Struct1 { pub params: BrotliHasherParams, /// FIXME: this should be bool pub is_prepared_: i32, pub dict_num_lookups: usize, pub dict_num_matches: usize, } fn LiteralSpreeLengthForSparseSearch(params: &BrotliEncoderParams) -> usize { (if params.quality < 9 { 64i32 } else { 512i32 }) as usize } pub struct HasherSearchResult { pub len: usize, pub len_x_code: usize, pub distance: usize, pub score: u64, } pub trait CloneWithAlloc + alloc::Allocator> { fn clone_with_alloc(&self, m: &mut Alloc) -> Self; } pub trait AnyHasher { fn Opts(&self) -> H9Opts; fn GetHasherCommon(&mut self) -> &mut Struct1; fn HashBytes(&self, data: &[u8]) -> usize; fn HashTypeLength(&self) -> usize; fn StoreLookahead(&self) -> usize; fn PrepareDistanceCache(&self, distance_cache: &mut [i32]); fn FindLongestMatch( &mut self, dictionary: Option<&BrotliDictionary>, dictionary_hash: &[u16], data: &[u8], ring_buffer_mask: usize, ring_buffer_break: Option, distance_cache: &[i32], cur_ix: usize, max_length: usize, max_backward: usize, gap: usize, max_distance: usize, out: &mut HasherSearchResult, ) -> bool; fn Store(&mut self, data: &[u8], mask: usize, ix: usize); fn Store4Vec4(&mut self, data: &[u8], mask: usize, ix: usize) { for i in 0..4 { self.Store(data, mask, ix + i * 4); } } fn StoreEvenVec4(&mut self, data: &[u8], mask: usize, ix: usize) { for i in 0..4 { self.Store(data, mask, ix + i * 2); } } fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize); fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize); fn Prepare(&mut self, one_shot: bool, input_size: usize, data: &[u8]) -> HowPrepared; fn StitchToPreviousBlock( &mut self, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ); } pub fn StitchToPreviousBlockInternal( handle: &mut T, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ) { if num_bytes >= handle.HashTypeLength().wrapping_sub(1) && (position >= 3) { handle.Store(ringbuffer, ringbuffer_mask, position.wrapping_sub(3)); handle.Store(ringbuffer, ringbuffer_mask, position.wrapping_sub(2)); handle.Store(ringbuffer, ringbuffer_mask, position.wrapping_sub(1)); } } pub fn StoreLookaheadThenStore(hasher: &mut T, size: usize, dict: &[u8]) { let overlap = hasher.StoreLookahead().wrapping_sub(1); if size > overlap { hasher.BulkStoreRange(dict, usize::MAX, 0, size - overlap); } } pub trait BasicHashComputer { fn HashBytes(&self, data: &[u8]) -> u32; fn BUCKET_BITS(&self) -> i32; fn USE_DICTIONARY(&self) -> i32; fn BUCKET_SWEEP(&self) -> i32; } pub struct BasicHasher + SliceWrapper + BasicHashComputer> { pub GetHasherCommon: Struct1, pub buckets_: Buckets, pub h9_opts: H9Opts, } impl + SliceWrapper + BasicHashComputer> PartialEq> for BasicHasher { fn eq(&self, other: &BasicHasher) -> bool { self.GetHasherCommon == other.GetHasherCommon && self.h9_opts == other.h9_opts && self.buckets_.slice() == other.buckets_.slice() } } impl + SliceWrapper + BasicHashComputer> BasicHasher { fn StoreRangeOptBasic( &mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize, ) -> usize { let lookahead = 8; if ix_end >= ix_start + lookahead * 2 { let chunk_count = (ix_end - ix_start) / 4; for chunk_id in 0..chunk_count { let i = (ix_start + chunk_id * 4) & mask; let word11 = data.split_at(i).1.split_at(11).0; let mixed0 = self.HashBytes(word11); let mixed1 = self.HashBytes(word11.split_at(1).1); let mixed2 = self.HashBytes(word11.split_at(2).1); let mixed3 = self.HashBytes(word11.split_at(3).1); let off: u32 = (i >> 3).wrapping_rem(self.buckets_.BUCKET_SWEEP() as usize) as u32; let offset0: usize = mixed0 + off as usize; let offset1: usize = mixed1 + off as usize; let offset2: usize = mixed2 + off as usize; let offset3: usize = mixed3 + off as usize; self.buckets_.slice_mut()[offset0] = i as u32; self.buckets_.slice_mut()[offset1] = i as u32 + 1; self.buckets_.slice_mut()[offset2] = i as u32 + 2; self.buckets_.slice_mut()[offset3] = i as u32 + 3; } return ix_start + chunk_count * 4; } ix_start } } pub struct H2Sub> { pub buckets_: AllocU32::AllocatedMemory, // 65537 } impl + SliceWrapper + BasicHashComputer> AnyHasher for BasicHasher { #[inline(always)] fn Opts(&self) -> H9Opts { self.h9_opts } #[allow(unused_variables)] fn PrepareDistanceCache(&self, distance_cache: &mut [i32]) {} #[inline(always)] fn HashTypeLength(&self) -> usize { 8 } #[inline(always)] fn StoreLookahead(&self) -> usize { 8 } fn StitchToPreviousBlock( &mut self, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ) { StitchToPreviousBlockInternal(self, num_bytes, position, ringbuffer, ringbuffer_mask); } #[inline(always)] fn GetHasherCommon(&mut self) -> &mut Struct1 { &mut self.GetHasherCommon } #[inline(always)] fn HashBytes(&self, data: &[u8]) -> usize { self.buckets_.HashBytes(data) as usize } fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { let (_, data_window) = data.split_at((ix & mask)); let key: u32 = self.HashBytes(data_window) as u32; let off: u32 = (ix >> 3).wrapping_rem(self.buckets_.BUCKET_SWEEP() as usize) as u32; self.buckets_.slice_mut()[key.wrapping_add(off) as usize] = ix as u32; } fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { for i in self.StoreRangeOptBasic(data, mask, ix_start, ix_end)..ix_end { self.Store(data, mask, i); } } fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { self.StoreRange(data, mask, ix_start, ix_end); } fn Prepare(&mut self, one_shot: bool, input_size: usize, data: &[u8]) -> HowPrepared { if self.GetHasherCommon.is_prepared_ != 0 { return HowPrepared::ALREADY_PREPARED; } let partial_prepare_threshold = (4 << self.buckets_.BUCKET_BITS()) >> 7; if one_shot && input_size <= partial_prepare_threshold { for i in 0..input_size { let key = self.HashBytes(&data[i..]); let bs = self.buckets_.BUCKET_SWEEP() as usize; for item in self.buckets_.slice_mut()[key..(key + bs)].iter_mut() { *item = 0; } } } else { for item in self.buckets_.slice_mut().iter_mut() { *item = 0; } } self.GetHasherCommon.is_prepared_ = 1; HowPrepared::NEWLY_PREPARED } fn FindLongestMatch( &mut self, dictionary: Option<&BrotliDictionary>, dictionary_hash: &[u16], data: &[u8], ring_buffer_mask: usize, ring_buffer_break: Option, distance_cache: &[i32], cur_ix: usize, max_length: usize, max_backward: usize, gap: usize, max_distance: usize, out: &mut HasherSearchResult, ) -> bool { let opts = self.Opts(); let best_len_in: usize = out.len; let cur_ix_masked: usize = cur_ix & ring_buffer_mask; let key: u32 = self.HashBytes(&data[cur_ix_masked..]) as u32; let mut compare_char: i32 = data[cur_ix_masked.wrapping_add(best_len_in)] as i32; let mut best_score: u64 = out.score; let mut best_len: usize = best_len_in; let cached_backward: usize = distance_cache[0] as usize; let mut prev_ix: usize = cur_ix.wrapping_sub(cached_backward); let mut is_match_found = false; out.len_x_code = 0usize; if prev_ix < cur_ix { prev_ix &= ring_buffer_mask as u32 as usize; if compare_char == data[prev_ix.wrapping_add(best_len)] as i32 { let unbroken_len: usize = FindMatchLengthWithLimitMin4( &data[prev_ix..], &data[cur_ix_masked..], max_length, ); if unbroken_len != 0 { let len = fix_unbroken_len(unbroken_len, prev_ix, cur_ix_masked, ring_buffer_break); best_score = BackwardReferenceScoreUsingLastDistance(len, opts); best_len = len; out.len = len; out.distance = cached_backward; out.score = best_score; compare_char = data[cur_ix_masked.wrapping_add(best_len)] as i32; if self.buckets_.BUCKET_SWEEP() == 1i32 { self.buckets_.slice_mut()[key as usize] = cur_ix as u32; return true; } else { is_match_found = true; } } } } let bucket_sweep = self.buckets_.BUCKET_SWEEP(); if bucket_sweep == 1i32 { prev_ix = self.buckets_.slice()[key as usize] as usize; self.buckets_.slice_mut()[key as usize] = cur_ix as u32; let backward: usize = cur_ix.wrapping_sub(prev_ix); prev_ix &= ring_buffer_mask as u32 as usize; if compare_char != data[prev_ix.wrapping_add(best_len_in)] as i32 { return false; } if backward == 0usize || backward > max_backward { return false; } let unbroken_len: usize = FindMatchLengthWithLimitMin4(&data[prev_ix..], &data[cur_ix_masked..], max_length); if unbroken_len != 0 { let len = fix_unbroken_len(unbroken_len, prev_ix, cur_ix_masked, ring_buffer_break); out.len = len; out.distance = backward; out.score = BackwardReferenceScore(len, backward, opts); return true; } } else { for prev_ix_ref in self.buckets_.slice().split_at(key as usize).1[..bucket_sweep as usize].iter() { let mut prev_ix = *prev_ix_ref as usize; let backward: usize = cur_ix.wrapping_sub(prev_ix); prev_ix &= ring_buffer_mask as u32 as usize; if compare_char != data[prev_ix.wrapping_add(best_len)] as i32 { continue; } if backward == 0usize || backward > max_backward { continue; } let unbroken_len = FindMatchLengthWithLimitMin4( &data[prev_ix..], &data[cur_ix_masked..], max_length, ); if unbroken_len != 0 { let len = fix_unbroken_len(unbroken_len, prev_ix, cur_ix_masked, ring_buffer_break); let score: u64 = BackwardReferenceScore(len, backward, opts); if best_score < score { best_score = score; best_len = len; out.len = best_len; out.distance = backward; out.score = score; compare_char = data[cur_ix_masked.wrapping_add(best_len)] as i32; is_match_found = true; } } } } if dictionary.is_some() && self.buckets_.USE_DICTIONARY() != 0 && !is_match_found { is_match_found = SearchInStaticDictionary( dictionary.unwrap(), dictionary_hash, self, &data[cur_ix_masked..], max_length, max_backward.wrapping_add(gap), max_distance, out, true, ); } self.buckets_.slice_mut() [(key as usize).wrapping_add((cur_ix >> 3).wrapping_rem(bucket_sweep as usize))] = cur_ix as u32; is_match_found } } impl> BasicHashComputer for H2Sub { fn HashBytes(&self, data: &[u8]) -> u32 { let h: u64 = (BROTLI_UNALIGNED_LOAD64(data) << (64i32 - 8i32 * 5i32)).wrapping_mul(kHashMul64); (h >> (64i32 - 16i32)) as u32 } fn BUCKET_BITS(&self) -> i32 { 16 } fn BUCKET_SWEEP(&self) -> i32 { 1 } fn USE_DICTIONARY(&self) -> i32 { 1 } } impl> SliceWrapperMut for H2Sub { fn slice_mut(&mut self) -> &mut [u32] { return self.buckets_.slice_mut(); } } impl> SliceWrapper for H2Sub { fn slice(&self) -> &[u32] { return self.buckets_.slice(); } } pub struct H3Sub> { pub buckets_: AllocU32::AllocatedMemory, // 65538 } impl> SliceWrapperMut for H3Sub { fn slice_mut(&mut self) -> &mut [u32] { return self.buckets_.slice_mut(); } } impl> SliceWrapper for H3Sub { fn slice(&self) -> &[u32] { return self.buckets_.slice(); } } impl> BasicHashComputer for H3Sub { fn BUCKET_BITS(&self) -> i32 { 16 } fn BUCKET_SWEEP(&self) -> i32 { 2 } fn USE_DICTIONARY(&self) -> i32 { 0 } fn HashBytes(&self, data: &[u8]) -> u32 { let h: u64 = (BROTLI_UNALIGNED_LOAD64(data) << (64i32 - 8i32 * 5i32)).wrapping_mul(kHashMul64); (h >> (64i32 - 16i32)) as u32 } } pub struct H4Sub> { pub buckets_: AllocU32::AllocatedMemory, // 131076 } impl> BasicHashComputer for H4Sub { fn BUCKET_BITS(&self) -> i32 { 17 } fn BUCKET_SWEEP(&self) -> i32 { 4 } fn USE_DICTIONARY(&self) -> i32 { 1 } fn HashBytes(&self, data: &[u8]) -> u32 { let h: u64 = (BROTLI_UNALIGNED_LOAD64(data) << (64i32 - 8i32 * 5i32)).wrapping_mul(kHashMul64); (h >> (64i32 - 17i32)) as u32 } } impl> SliceWrapperMut for H4Sub { fn slice_mut(&mut self) -> &mut [u32] { return self.buckets_.slice_mut(); } } impl> SliceWrapper for H4Sub { fn slice(&self) -> &[u32] { return self.buckets_.slice(); } } pub struct H54Sub> { pub buckets_: AllocU32::AllocatedMemory, } impl> BasicHashComputer for H54Sub { fn BUCKET_BITS(&self) -> i32 { 20 } fn BUCKET_SWEEP(&self) -> i32 { 4 } fn USE_DICTIONARY(&self) -> i32 { 0 } fn HashBytes(&self, data: &[u8]) -> u32 { let h: u64 = (BROTLI_UNALIGNED_LOAD64(data) << (64i32 - 8i32 * 7i32)).wrapping_mul(kHashMul64); (h >> (64i32 - 20i32)) as u32 } } impl> SliceWrapperMut for H54Sub { fn slice_mut(&mut self) -> &mut [u32] { return self.buckets_.slice_mut(); } } impl> SliceWrapper for H54Sub { fn slice(&self) -> &[u32] { return self.buckets_.slice(); } } pub const H9_BUCKET_BITS: usize = 15; pub const H9_BLOCK_BITS: usize = 8; pub const H9_NUM_LAST_DISTANCES_TO_CHECK: usize = 16; pub const H9_BLOCK_SIZE: usize = 1 << H9_BLOCK_BITS; const H9_BLOCK_MASK: usize = (1 << H9_BLOCK_BITS) - 1; impl H9Opts { pub fn new(params: &BrotliHasherParams) -> H9Opts { H9Opts { literal_byte_score: if params.literal_byte_score != 0 { params.literal_byte_score as u32 } else { 540 }, } } } pub struct H9 + alloc::Allocator> { pub num_: >::AllocatedMemory, //[u16;1 << H9_BUCKET_BITS], pub buckets_: >::AllocatedMemory, //[u32; H9_BLOCK_SIZE << H9_BUCKET_BITS], pub dict_search_stats_: Struct1, pub h9_opts: H9Opts, } impl + alloc::Allocator> PartialEq> for H9 { fn eq(&self, other: &H9) -> bool { self.dict_search_stats_ == other.dict_search_stats_ && self.num_.slice() == other.num_.slice() && self.buckets_.slice() == other.buckets_.slice() && self.h9_opts == other.h9_opts } } fn adv_prepare_distance_cache(distance_cache: &mut [i32], num_distances: i32) { if num_distances > 4i32 { let last_distance: i32 = distance_cache[0]; distance_cache[4] = last_distance - 1i32; distance_cache[5] = last_distance + 1i32; distance_cache[6] = last_distance - 2i32; distance_cache[7] = last_distance + 2i32; distance_cache[8] = last_distance - 3i32; distance_cache[9] = last_distance + 3i32; if num_distances > 10i32 { let next_last_distance: i32 = distance_cache[1]; distance_cache[10] = next_last_distance - 1i32; distance_cache[11] = next_last_distance + 1i32; distance_cache[12] = next_last_distance - 2i32; distance_cache[13] = next_last_distance + 2i32; distance_cache[14] = next_last_distance - 3i32; distance_cache[15] = next_last_distance + 3i32; } } } pub const kDistanceCacheIndex: [u8; 16] = [0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]; pub const kDistanceCacheOffset: [i8; 16] = [0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]; //const BROTLI_LITERAL_BYTE_SCORE: u64 = 540; const BROTLI_DISTANCE_BIT_PENALTY: u32 = 120; // Score must be positive after applying maximal penalty. const BROTLI_SCORE_BASE: u32 = (BROTLI_DISTANCE_BIT_PENALTY * 8 * 8/* sizeof usize*/); const kDistanceShortCodeCost: [u32; 16] = [ /* Repeat last */ BROTLI_SCORE_BASE + 60, /* 2nd, 3rd, 4th last */ BROTLI_SCORE_BASE - 95, BROTLI_SCORE_BASE - 117, BROTLI_SCORE_BASE - 127, /* Last with offset */ BROTLI_SCORE_BASE - 93, BROTLI_SCORE_BASE - 93, BROTLI_SCORE_BASE - 96, BROTLI_SCORE_BASE - 96, BROTLI_SCORE_BASE - 99, BROTLI_SCORE_BASE - 99, /* 2nd last with offset */ BROTLI_SCORE_BASE - 105, BROTLI_SCORE_BASE - 105, BROTLI_SCORE_BASE - 115, BROTLI_SCORE_BASE - 115, BROTLI_SCORE_BASE - 125, BROTLI_SCORE_BASE - 125, ]; fn BackwardReferenceScoreH9( copy_length: usize, backward_reference_offset: usize, h9_opts: H9Opts, ) -> u64 { (u64::from(BROTLI_SCORE_BASE) .wrapping_add((h9_opts.literal_byte_score as u64).wrapping_mul(copy_length as u64)) .wrapping_sub( (BROTLI_DISTANCE_BIT_PENALTY as u64) .wrapping_mul(Log2FloorNonZero(backward_reference_offset as u64) as u64), )) >> 2 } fn BackwardReferenceScoreUsingLastDistanceH9( copy_length: usize, distance_short_code: usize, h9_opts: H9Opts, ) -> u64 { ((h9_opts.literal_byte_score as u64) .wrapping_mul(copy_length as u64) .wrapping_add(u64::from(kDistanceShortCodeCost[distance_short_code]))) >> 2 } impl + alloc::Allocator> AnyHasher for H9 { #[inline(always)] fn Opts(&self) -> H9Opts { self.h9_opts } #[inline(always)] fn GetHasherCommon(&mut self) -> &mut Struct1 { &mut self.dict_search_stats_ } #[inline(always)] fn HashBytes(&self, data: &[u8]) -> usize { let h: u32 = BROTLI_UNALIGNED_LOAD32(data).wrapping_mul(kHashMul32); let thirty_two: usize = 32; (h >> (thirty_two.wrapping_sub(H9_BUCKET_BITS))) as usize } #[inline(always)] fn HashTypeLength(&self) -> usize { 4 } #[inline(always)] fn StoreLookahead(&self) -> usize { 4 } fn PrepareDistanceCache(&self, distance_cache: &mut [i32]) { let num_distances = H9_NUM_LAST_DISTANCES_TO_CHECK as i32; adv_prepare_distance_cache(distance_cache, num_distances); } fn FindLongestMatch( &mut self, dictionary: Option<&BrotliDictionary>, dictionary_hash: &[u16], data: &[u8], ring_buffer_mask: usize, ring_buffer_break: Option, distance_cache: &[i32], cur_ix: usize, max_length: usize, max_backward: usize, gap: usize, max_distance: usize, out: &mut HasherSearchResult, ) -> bool { let best_len_in: usize = out.len; let cur_ix_masked: usize = cur_ix & ring_buffer_mask; let mut best_score: u64 = out.score; let mut best_len: usize = best_len_in; let mut is_match_found = false; out.len_x_code = 0usize; for i in 0..H9_NUM_LAST_DISTANCES_TO_CHECK { let idx = kDistanceCacheIndex[i] as usize; let backward = (distance_cache[idx] as usize).wrapping_add(kDistanceCacheOffset[i] as usize); let mut prev_ix = cur_ix.wrapping_sub(backward); if prev_ix >= cur_ix { continue; } if backward > max_backward { continue; } prev_ix &= ring_buffer_mask; if cur_ix_masked.wrapping_add(best_len) > ring_buffer_mask || prev_ix.wrapping_add(best_len) > ring_buffer_mask || data[cur_ix_masked.wrapping_add(best_len)] != data[prev_ix.wrapping_add(best_len)] { continue; } { let unbroken_len: usize = FindMatchLengthWithLimit(&data[prev_ix..], &data[cur_ix_masked..], max_length); if unbroken_len >= 3 || (unbroken_len == 2 && i < 2) { let len = fix_unbroken_len(unbroken_len, prev_ix, cur_ix_masked, ring_buffer_break); let score = BackwardReferenceScoreUsingLastDistanceH9(len, i, self.h9_opts); if best_score < score { best_score = score; best_len = len; out.len = best_len; out.distance = backward; out.score = best_score; is_match_found = true; } } } } if max_length >= 4 && cur_ix_masked.wrapping_add(best_len) <= ring_buffer_mask { let key = self.HashBytes(data.split_at(cur_ix_masked).1); let bucket = &mut self .buckets_ .slice_mut() .split_at_mut(key << H9_BLOCK_BITS) .1 .split_at_mut(H9_BLOCK_SIZE) .0; assert!(bucket.len() > H9_BLOCK_MASK); assert_eq!(bucket.len(), H9_BLOCK_MASK + 1); let self_num_key = &mut self.num_.slice_mut()[key]; let down = if *self_num_key > H9_BLOCK_SIZE as u16 { (*self_num_key as usize) - H9_BLOCK_SIZE } else { 0usize }; let mut i: usize = *self_num_key as usize; let mut prev_best_val = data[cur_ix_masked.wrapping_add(best_len)]; while i > down { i -= 1; let mut prev_ix = bucket[i & H9_BLOCK_MASK] as usize; let backward = cur_ix.wrapping_sub(prev_ix); if (backward > max_backward) { break; } prev_ix &= ring_buffer_mask; if (prev_ix.wrapping_add(best_len) > ring_buffer_mask || prev_best_val != data[prev_ix.wrapping_add(best_len)]) { continue; } { let unbroken_len = FindMatchLengthWithLimit( data.split_at(prev_ix).1, data.split_at(cur_ix_masked).1, max_length, ); if (unbroken_len >= 4) { let len = fix_unbroken_len(unbroken_len, prev_ix, cur_ix_masked, ring_buffer_break); /* Comparing for >= 3 does not change the semantics, but just saves for a few unnecessary binary logarithms in backward reference score, since we are not interested in such short matches. */ let score = BackwardReferenceScoreH9(len, backward, self.h9_opts); if (best_score < score) { best_score = score; best_len = len; out.len = best_len; out.distance = backward; out.score = best_score; is_match_found = true; if cur_ix_masked.wrapping_add(best_len) > ring_buffer_mask { break; } prev_best_val = data[cur_ix_masked.wrapping_add(best_len)]; } } } } bucket[*self_num_key as usize & H9_BLOCK_MASK] = cur_ix as u32; *self_num_key = self_num_key.wrapping_add(1); } if !is_match_found && dictionary.is_some() { let (_, cur_data) = data.split_at(cur_ix_masked); is_match_found = SearchInStaticDictionary( dictionary.unwrap(), dictionary_hash, self, cur_data, max_length, max_backward.wrapping_add(gap), max_distance, out, false, ); } is_match_found } fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { let (_, data_window) = data.split_at((ix & mask)); let key: u32 = self.HashBytes(data_window) as u32; let self_num_key = &mut self.num_.slice_mut()[key as usize]; let minor_ix: usize = (*self_num_key as usize & H9_BLOCK_MASK); self.buckets_.slice_mut()[minor_ix.wrapping_add((key as usize) << H9_BLOCK_BITS)] = ix as u32; *self_num_key = self_num_key.wrapping_add(1); } fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { for i in ix_start..ix_end { self.Store(data, mask, i); } } fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { for i in ix_start..ix_end { self.Store(data, mask, i); } } fn Prepare(&mut self, _one_shot: bool, _input_size: usize, _data: &[u8]) -> HowPrepared { if self.GetHasherCommon().is_prepared_ != 0 { return HowPrepared::ALREADY_PREPARED; } for item in self.num_.slice_mut().iter_mut() { *item = 0; } self.GetHasherCommon().is_prepared_ = 1; HowPrepared::NEWLY_PREPARED } fn StitchToPreviousBlock( &mut self, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ) { StitchToPreviousBlockInternal(self, num_bytes, position, ringbuffer, ringbuffer_mask) } } pub trait AdvHashSpecialization: PartialEq { fn get_hash_mask(&self) -> u64; fn set_hash_mask(&mut self, params_hash_len: i32); fn get_k_hash_mul(&self) -> u64; fn HashTypeLength(&self) -> usize; fn StoreLookahead(&self) -> usize; fn load_and_mix_word(&self, data: &[u8]) -> u64; fn hash_shift(&self) -> i32; fn bucket_size(&self) -> u32; fn block_mask(&self) -> u32; fn block_size(&self) -> u32; fn block_bits(&self) -> i32; } pub struct AdvHasher< Specialization: AdvHashSpecialization + Sized + Clone, Alloc: alloc::Allocator + alloc::Allocator, > { pub GetHasherCommon: Struct1, pub specialization: Specialization, // contains hash_mask_ pub num: >::AllocatedMemory, pub buckets: >::AllocatedMemory, pub h9_opts: H9Opts, } impl< Specialization: AdvHashSpecialization + Sized + Clone, Alloc: alloc::Allocator + alloc::Allocator, > PartialEq> for AdvHasher { fn eq(&self, other: &Self) -> bool { self.GetHasherCommon == other.GetHasherCommon && self.specialization == other.specialization && self.num.slice() == other.num.slice() && self.buckets.slice() == other.buckets.slice() && self.h9_opts == other.h9_opts } } #[derive(Clone, PartialEq)] pub struct HQ5Sub {} impl AdvHashSpecialization for HQ5Sub { #[inline(always)] fn hash_shift(&self) -> i32 { 32i32 - 14 // 32 - bucket_bits } #[inline(always)] fn bucket_size(&self) -> u32 { 1 << 14 } #[inline(always)] fn block_bits(&self) -> i32 { 4 } #[inline(always)] fn block_size(&self) -> u32 { 1 << 4 } #[inline(always)] fn block_mask(&self) -> u32 { (1 << 4) - 1 } #[inline(always)] fn get_hash_mask(&self) -> u64 { //return 0xffff_ffff_ffff_ffff; 0xffff_ffff // make it 32 bit } #[inline(always)] fn get_k_hash_mul(&self) -> u64 { kHashMul32 as u64 } #[inline(always)] fn load_and_mix_word(&self, data: &[u8]) -> u64 { (BROTLI_UNALIGNED_LOAD32(data) as u64 * self.get_k_hash_mul()) & self.get_hash_mask() } #[inline(always)] fn set_hash_mask(&mut self, _params_hash_len: i32) {} fn HashTypeLength(&self) -> usize { 4 } #[inline(always)] fn StoreLookahead(&self) -> usize { 4 } } #[derive(Clone, PartialEq)] pub struct HQ7Sub {} impl AdvHashSpecialization for HQ7Sub { #[inline(always)] fn hash_shift(&self) -> i32 { 32i32 - 15 // 32 - bucket_bits } #[inline(always)] fn bucket_size(&self) -> u32 { 1 << 15 } #[inline(always)] fn block_bits(&self) -> i32 { 6 } #[inline(always)] fn block_size(&self) -> u32 { 1 << 6 } #[inline(always)] fn block_mask(&self) -> u32 { (1 << 6) - 1 } #[inline(always)] fn get_hash_mask(&self) -> u64 { //return 0xffff_ffff_ffff_ffff; 0xffff_ffff // make it 32 bit } #[inline(always)] fn get_k_hash_mul(&self) -> u64 { kHashMul32 as u64 } #[inline(always)] fn load_and_mix_word(&self, data: &[u8]) -> u64 { (BROTLI_UNALIGNED_LOAD32(data) as u64 * self.get_k_hash_mul()) & self.get_hash_mask() } #[inline(always)] fn set_hash_mask(&mut self, _params_hash_len: i32) {} fn HashTypeLength(&self) -> usize { 4 } #[inline(always)] fn StoreLookahead(&self) -> usize { 4 } } #[derive(Clone, PartialEq)] pub struct H5Sub { pub hash_shift_: i32, pub bucket_size_: u32, pub block_mask_: u32, pub block_bits_: i32, } impl AdvHashSpecialization for H5Sub { #[inline(always)] fn hash_shift(&self) -> i32 { self.hash_shift_ } fn bucket_size(&self) -> u32 { self.bucket_size_ } fn block_bits(&self) -> i32 { self.block_bits_ } fn block_size(&self) -> u32 { 1 << self.block_bits_ } fn block_mask(&self) -> u32 { self.block_mask_ } fn get_hash_mask(&self) -> u64 { //return 0xffff_ffff_ffff_ffff; 0xffff_ffff // make it 32 bit } fn get_k_hash_mul(&self) -> u64 { kHashMul32 as u64 } fn load_and_mix_word(&self, data: &[u8]) -> u64 { (BROTLI_UNALIGNED_LOAD32(data) as u64 * self.get_k_hash_mul()) & self.get_hash_mask() } #[allow(unused_variables)] fn set_hash_mask(&mut self, params_hash_len: i32) {} fn HashTypeLength(&self) -> usize { 4 } fn StoreLookahead(&self) -> usize { 4 } } #[derive(Clone, PartialEq)] pub struct H6Sub { pub hash_mask: u64, pub hash_shift_: i32, pub bucket_size_: u32, pub block_mask_: u32, pub block_bits_: i32, } impl AdvHashSpecialization for H6Sub { #[inline(always)] fn hash_shift(&self) -> i32 { self.hash_shift_ } #[inline(always)] fn bucket_size(&self) -> u32 { self.bucket_size_ } fn block_bits(&self) -> i32 { self.block_bits_ } fn block_size(&self) -> u32 { 1 << self.block_bits_ } #[inline(always)] fn block_mask(&self) -> u32 { self.block_mask_ } #[inline(always)] fn get_hash_mask(&self) -> u64 { self.hash_mask } #[inline(always)] fn set_hash_mask(&mut self, params_hash_len: i32) { // FIXME: this assumes params_hash_len is fairly small, or else it may result in a negative shift value self.hash_mask = u64::MAX >> (64i32 - 8i32 * params_hash_len); } #[inline(always)] fn get_k_hash_mul(&self) -> u64 { kHashMul64Long } #[inline(always)] fn load_and_mix_word(&self, data: &[u8]) -> u64 { (BROTLI_UNALIGNED_LOAD64(data) & self.get_hash_mask()).wrapping_mul(self.get_k_hash_mul()) } #[inline(always)] fn HashTypeLength(&self) -> usize { 8 } #[inline(always)] fn StoreLookahead(&self) -> usize { 8 } } fn BackwardReferencePenaltyUsingLastDistance(distance_short_code: usize) -> u64 { // FIXME?: double bitwise AND with the same value? (39u64).wrapping_add((0x0001_ca10_u64 >> (distance_short_code & 0x0e) & 0x0e)) } impl< Specialization: AdvHashSpecialization + Clone, Alloc: alloc::Allocator + alloc::Allocator, > AdvHasher { // 7 opt // returns a new ix_start fn StoreRangeOptBatch( &mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize, ) -> usize { let lookahead = self.specialization.StoreLookahead(); if ix_end >= ix_start + lookahead * 2 && lookahead == 4 { let num = self.num.slice_mut(); let buckets = self.buckets.slice_mut(); assert_eq!(num.len(), self.specialization.bucket_size() as usize); assert_eq!( buckets.len(), self.specialization.bucket_size() as usize * self.specialization.block_size() as usize ); let shift = self.specialization.hash_shift(); let chunk_count = (ix_end - ix_start) / 4; for chunk_id in 0..chunk_count { let i = (ix_start + chunk_id * 4) & mask; let ffffffff = 0xffff_ffff; let word = u64::from(data[i]) | (u64::from(data[i + 1]) << 8) | (u64::from(data[i + 2]) << 16) | (u64::from(data[i + 3]) << 24) | (u64::from(data[i + 4]) << 32) | (u64::from(data[i + 5]) << 40) | (u64::from(data[i + 6]) << 48); let mixed0 = ((((word & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed1 = (((((word >> 8) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed2 = (((((word >> 16) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed3 = (((((word >> 24) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mut num_ref0 = u32::from(num[mixed0]); num[mixed0] = num_ref0.wrapping_add(1) as u16; num_ref0 &= self.specialization.block_mask(); let mut num_ref1 = u32::from(num[mixed1]); num[mixed1] = num_ref1.wrapping_add(1) as u16; num_ref1 &= self.specialization.block_mask(); let mut num_ref2 = u32::from(num[mixed2]); num[mixed2] = num_ref2.wrapping_add(1) as u16; num_ref2 &= self.specialization.block_mask(); let mut num_ref3 = u32::from(num[mixed3]); num[mixed3] = num_ref3.wrapping_add(1) as u16; num_ref3 &= self.specialization.block_mask(); let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; buckets[offset0] = (i) as u32; buckets[offset1] = (i + 1) as u32; buckets[offset2] = (i + 2) as u32; buckets[offset3] = (i + 3) as u32; } return ix_start + chunk_count * 4; } ix_start } fn BulkStoreRangeOptMemFetch( &mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize, ) -> usize { const REG_SIZE: usize = 32usize; let lookahead = self.specialization.StoreLookahead(); if mask == usize::MAX && ix_end > ix_start + REG_SIZE && lookahead == 4 { const lookahead4: usize = 4; assert_eq!(lookahead4, lookahead); let mut data64 = [0u8; REG_SIZE + lookahead4 - 1]; let del = (ix_end - ix_start) / REG_SIZE; let num = self.num.slice_mut(); let buckets = self.buckets.slice_mut(); assert_eq!(num.len(), self.specialization.bucket_size() as usize); assert_eq!( buckets.len(), self.specialization.bucket_size() as usize * self.specialization.block_size() as usize ); let shift = self.specialization.hash_shift(); for chunk_id in 0..del { let ix_offset = ix_start + chunk_id * REG_SIZE; data64[..REG_SIZE + lookahead4 - 1].clone_from_slice( data.split_at(ix_offset) .1 .split_at(REG_SIZE + lookahead4 - 1) .0, ); for quad_index in 0..(REG_SIZE >> 2) { let i = quad_index << 2; let ffffffff = 0xffff_ffff; let word = u64::from(data64[i]) | (u64::from(data64[i + 1]) << 8) | (u64::from(data64[i + 2]) << 16) | (u64::from(data64[i + 3]) << 24) | (u64::from(data64[i + 4]) << 32) | (u64::from(data64[i + 5]) << 40) | (u64::from(data64[i + 6]) << 48); let mixed0 = ((((word & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed1 = (((((word >> 8) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed2 = (((((word >> 16) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed3 = (((((word >> 24) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mut num_ref0 = u32::from(num[mixed0]); num[mixed0] = num_ref0.wrapping_add(1) as u16; num_ref0 &= self.specialization.block_mask(); let mut num_ref1 = u32::from(num[mixed1]); num[mixed1] = num_ref1.wrapping_add(1) as u16; num_ref1 &= self.specialization.block_mask(); let mut num_ref2 = u32::from(num[mixed2]); num[mixed2] = num_ref2.wrapping_add(1) as u16; num_ref2 &= self.specialization.block_mask(); let mut num_ref3 = u32::from(num[mixed3]); num[mixed3] = num_ref3.wrapping_add(1) as u16; num_ref3 &= self.specialization.block_mask(); let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; buckets[offset0] = (ix_offset + i) as u32; buckets[offset1] = (ix_offset + i + 1) as u32; buckets[offset2] = (ix_offset + i + 2) as u32; buckets[offset3] = (ix_offset + i + 3) as u32; } } return ix_start + del * REG_SIZE; } ix_start } #[cfg(feature = "benchmark")] fn BulkStoreRangeOptMemFetchLazyDupeUpdate( &mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize, ) -> usize { const REG_SIZE: usize = 32usize; let lookahead = self.specialization.StoreLookahead(); if mask == usize::MAX && ix_end > ix_start + REG_SIZE && lookahead == 4 { const lookahead4: usize = 4; assert_eq!(lookahead4, lookahead); let mut data64 = [0u8; REG_SIZE + lookahead4]; let del = (ix_end - ix_start) / REG_SIZE; let num = self.num.slice_mut(); let buckets = self.buckets.slice_mut(); assert_eq!(num.len(), self.specialization.bucket_size() as usize); assert_eq!( buckets.len(), self.specialization.bucket_size() as usize * self.specialization.block_size() as usize ); let shift = self.specialization.hash_shift(); for chunk_id in 0..del { let ix_offset = ix_start + chunk_id * REG_SIZE; data64[..REG_SIZE + lookahead4] .clone_from_slice(data.split_at(ix_offset).1.split_at(REG_SIZE + lookahead4).0); for quad_index in 0..(REG_SIZE >> 2) { let i = quad_index << 2; let ffffffff = 0xffff_ffff; let word = u64::from(data64[i]) | (u64::from(data64[i + 1]) << 8) | (u64::from(data64[i + 2]) << 16) | (u64::from(data64[i + 3]) << 24) | (u64::from(data64[i + 4]) << 32) | (u64::from(data64[i + 5]) << 40) | (u64::from(data64[i + 6]) << 48); let mixed0 = ((((word & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed1 = (((((word >> 8) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed2 = (((((word >> 16) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed3 = (((((word >> 24) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mut num_ref0 = u32::from(num[mixed0]); let mut num_ref1 = u32::from(num[mixed1]); let mut num_ref2 = u32::from(num[mixed2]); let mut num_ref3 = u32::from(num[mixed3]); num[mixed0] = num_ref0.wrapping_add(1) as u16; num[mixed1] = num_ref1.wrapping_add(1) as u16; num[mixed2] = num_ref2.wrapping_add(1) as u16; num[mixed3] = num_ref3.wrapping_add(1) as u16; num_ref0 &= self.specialization.block_mask(); num_ref1 &= self.specialization.block_mask(); num_ref2 &= self.specialization.block_mask(); num_ref3 &= self.specialization.block_mask(); let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; buckets[offset0] = (ix_offset + i) as u32; buckets[offset1] = (ix_offset + i + 1) as u32; buckets[offset2] = (ix_offset + i + 2) as u32; buckets[offset3] = (ix_offset + i + 3) as u32; } } return ix_start + del * REG_SIZE; } ix_start } #[cfg(feature = "benchmark")] fn BulkStoreRangeOptRandomDupeUpdate( &mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize, ) -> usize { const REG_SIZE: usize = 32usize; let lookahead = self.specialization.StoreLookahead(); if mask == usize::MAX && ix_end > ix_start + REG_SIZE && lookahead == 4 { const lookahead4: usize = 4; assert_eq!(lookahead4, lookahead); let mut data64 = [0u8; REG_SIZE + lookahead4]; let del = (ix_end - ix_start) / REG_SIZE; let num = self.num.slice_mut(); let buckets = self.buckets.slice_mut(); assert_eq!(num.len(), self.specialization.bucket_size() as usize); assert_eq!( buckets.len(), self.specialization.bucket_size() as usize * self.specialization.block_size() as usize ); let shift = self.specialization.hash_shift(); for chunk_id in 0..del { let ix_offset = ix_start + chunk_id * REG_SIZE; data64[..REG_SIZE + lookahead4] .clone_from_slice(data.split_at(ix_offset).1.split_at(REG_SIZE + lookahead4).0); for i in 0..REG_SIZE { let mixed_word = ((u32::from(data64[i]) | (u32::from(data64[i + 1]) << 8) | (u32::from(data64[i + 2]) << 16) | (u32::from(data64[i + 3]) << 24)) as u64 * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask(); let key = mixed_word >> shift; let minor_ix: usize = chunk_id & self.specialization.block_mask() as usize; // *num_ref as usize & self.specialization.block_mask() as usize; //GIGANTIC HAX: overwrite firsst option let offset: usize = minor_ix + (key << self.specialization.block_bits()) as usize; buckets[offset] = (ix_offset + i) as u32; } } for (bucket_index, num_ref) in num.iter_mut().enumerate() { let region = buckets .split_at_mut(bucket_index << self.specialization.block_bits()) .1 .split_at_mut(self.specialization.block_size() as usize) .0; let mut lnum = 0usize; for block_index in 0..self.specialization.block_size() as usize { if region[block_index] != 0 { let byte_addr = region[block_index]; region[lnum] = byte_addr; lnum += 1; } } *num_ref = lnum as u16; } return ix_start + del * REG_SIZE; } ix_start } } impl< Specialization: AdvHashSpecialization + Clone, Alloc: alloc::Allocator + alloc::Allocator, > AnyHasher for AdvHasher { fn Opts(&self) -> H9Opts { self.h9_opts } fn PrepareDistanceCache(&self, distance_cache: &mut [i32]) { let num_distances = self.GetHasherCommon.params.num_last_distances_to_check; adv_prepare_distance_cache(distance_cache, num_distances); } fn StitchToPreviousBlock( &mut self, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ) { StitchToPreviousBlockInternal(self, num_bytes, position, ringbuffer, ringbuffer_mask); } fn Prepare(&mut self, one_shot: bool, input_size: usize, data: &[u8]) -> HowPrepared { if self.GetHasherCommon.is_prepared_ != 0 { return HowPrepared::ALREADY_PREPARED; } let partial_prepare_threshold = self.specialization.bucket_size() as usize >> 6; if one_shot && input_size <= partial_prepare_threshold { for i in 0..input_size { let key = self.HashBytes(&data[i..]); self.num.slice_mut()[key] = 0; } } else { for item in self.num.slice_mut()[..(self.specialization.bucket_size() as usize)].iter_mut() { *item = 0; } } self.GetHasherCommon.is_prepared_ = 1; HowPrepared::NEWLY_PREPARED } fn GetHasherCommon(&mut self) -> &mut Struct1 { &mut self.GetHasherCommon } fn HashTypeLength(&self) -> usize { self.specialization.HashTypeLength() } fn StoreLookahead(&self) -> usize { self.specialization.StoreLookahead() } fn HashBytes(&self, data: &[u8]) -> usize { let shift = self.specialization.hash_shift(); let h: u64 = self.specialization.load_and_mix_word(data); (h >> shift) as u32 as usize } fn StoreEvenVec4(&mut self, data: &[u8], mask: usize, ix: usize) { if self.specialization.StoreLookahead() != 4 { for i in 0..4 { self.Store(data, mask, ix + i * 2); } return; } let shift = self.specialization.hash_shift(); let num = self.num.slice_mut(); let buckets = self.buckets.slice_mut(); let li = ix & mask; let lword = u64::from(data[li]) | (u64::from(data[li + 1]) << 8) | (u64::from(data[li + 2]) << 16) | (u64::from(data[li + 3]) << 24) | (u64::from(data[li + 4]) << 32) | (u64::from(data[li + 5]) << 40) | (u64::from(data[li + 6]) << 48) | (u64::from(data[li + 7]) << 56); let hi = (ix + 8) & mask; let hword = u64::from(data[hi]) | (u64::from(data[hi + 1]) << 8); let mixed0 = ((((lword & 0xffff_ffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed1 = (((((lword >> 16) & 0xffff_ffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed2 = (((((lword >> 32) & 0xffff_ffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed3 = ((((((hword & 0xffff) << 16) | ((lword >> 48) & 0xffff)) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mut num_ref0 = u32::from(num[mixed0]); num[mixed0] = num_ref0.wrapping_add(1) as u16; num_ref0 &= self.specialization.block_mask(); let mut num_ref1 = u32::from(num[mixed1]); num[mixed1] = num_ref1.wrapping_add(1) as u16; num_ref1 &= self.specialization.block_mask(); let mut num_ref2 = u32::from(num[mixed2]); num[mixed2] = num_ref2.wrapping_add(1) as u16; num_ref2 &= self.specialization.block_mask(); let mut num_ref3 = u32::from(num[mixed3]); num[mixed3] = num_ref3.wrapping_add(1) as u16; num_ref3 &= self.specialization.block_mask(); let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; buckets[offset0] = ix as u32; buckets[offset1] = (ix + 2) as u32; buckets[offset2] = (ix + 4) as u32; buckets[offset3] = (ix + 6) as u32; } fn Store4Vec4(&mut self, data: &[u8], mask: usize, ix: usize) { if self.specialization.StoreLookahead() != 4 { for i in 0..4 { self.Store(data, mask, ix + i * 4); } return; } let shift = self.specialization.hash_shift(); let num = self.num.slice_mut(); let buckets = self.buckets.slice_mut(); let li = ix & mask; let llword = u32::from(data[li]) | (u32::from(data[li + 1]) << 8) | (u32::from(data[li + 2]) << 16) | (u32::from(data[li + 3]) << 24); let luword = u32::from(data[li + 4]) | (u32::from(data[li + 5]) << 8) | (u32::from(data[li + 6]) << 16) | (u32::from(data[li + 7]) << 24); let ui = (ix + 8) & mask; let ulword = u32::from(data[ui]) | (u32::from(data[ui + 1]) << 8) | (u32::from(data[ui + 2]) << 16) | (u32::from(data[ui + 3]) << 24); let uuword = u32::from(data[ui + 4]) | (u32::from(data[ui + 5]) << 8) | (u32::from(data[ui + 6]) << 16) | (u32::from(data[ui + 7]) << 24); let mixed0 = (((u64::from(llword) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed1 = (((u64::from(luword) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed2 = (((u64::from(ulword) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mixed3 = (((u64::from(uuword) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; let mut num_ref0 = u32::from(num[mixed0]); num[mixed0] = num_ref0.wrapping_add(1) as u16; num_ref0 &= self.specialization.block_mask(); let mut num_ref1 = u32::from(num[mixed1]); num[mixed1] = num_ref1.wrapping_add(1) as u16; num_ref1 &= self.specialization.block_mask(); let mut num_ref2 = u32::from(num[mixed2]); num[mixed2] = num_ref2.wrapping_add(1) as u16; num_ref2 &= self.specialization.block_mask(); let mut num_ref3 = u32::from(num[mixed3]); num[mixed3] = num_ref3.wrapping_add(1) as u16; num_ref3 &= self.specialization.block_mask(); let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; buckets[offset0] = ix as u32; buckets[offset1] = (ix + 4) as u32; buckets[offset2] = (ix + 8) as u32; buckets[offset3] = (ix + 12) as u32; } fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { let (_, data_window) = data.split_at((ix & mask)); let key: u32 = self.HashBytes(data_window) as u32; let minor_ix: usize = (self.num.slice()[(key as usize)] as u32 & self.specialization.block_mask()) as usize; let offset: usize = minor_ix.wrapping_add((key << self.specialization.block_bits()) as usize); self.buckets.slice_mut()[offset] = ix as u32; { let _lhs = &mut self.num.slice_mut()[(key as usize)]; *_lhs = (*_lhs as i32 + 1) as u16; } } fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { for i in self.StoreRangeOptBatch(data, mask, ix_start, ix_end)..ix_end { self.Store(data, mask, i); } } fn BulkStoreRange(&mut self, data: &[u8], mask: usize, mut ix_start: usize, ix_end: usize) { /* if ix_start + 4096 < ix_end { for vec_offset in 0..(ix_end - ix_start - 4096) / 16 { self.Store4Vec4(data, mask, ix_start + vec_offset * 16); } ix_start += 16 * ((ix_end - ix_start - 4096) / 16); } if ix_start + 512 < ix_end { for vec_offset in 0..(ix_end - ix_start - 512) / 8 { self.StoreEvenVec4(data, mask, ix_start + vec_offset * 8); //self.StoreRange(data, mask, ix_start + vec_offset * 8, ix_start + (1+ vec_offset) * 8); } ix_start += 8 * ((ix_end - ix_start - 512) / 8); } */ ix_start = self.BulkStoreRangeOptMemFetch(data, mask, ix_start, ix_end); for i in ix_start..ix_end { self.Store(data, mask, i); } } fn FindLongestMatch( &mut self, dictionary: Option<&BrotliDictionary>, dictionary_hash: &[u16], data: &[u8], ring_buffer_mask: usize, ring_buffer_break: Option, distance_cache: &[i32], cur_ix: usize, max_length: usize, max_backward: usize, gap: usize, max_distance: usize, out: &mut HasherSearchResult, ) -> bool { let opts = self.Opts(); let cur_ix_masked: usize = cur_ix & ring_buffer_mask; let mut is_match_found = false; let mut best_score: u64 = out.score; let mut best_len: usize = out.len; out.len = 0usize; out.len_x_code = 0usize; let cur_data = data.split_at(cur_ix_masked).1; for i in 0..self.GetHasherCommon.params.num_last_distances_to_check as usize { let backward: usize = distance_cache[i] as usize; let mut prev_ix: usize = cur_ix.wrapping_sub(backward); if prev_ix >= cur_ix || backward > max_backward { continue; } prev_ix &= ring_buffer_mask; if (cur_ix_masked.wrapping_add(best_len) > ring_buffer_mask || prev_ix.wrapping_add(best_len) > ring_buffer_mask || cur_data[best_len] != data[prev_ix.wrapping_add(best_len)]) { continue; } let prev_data = data.split_at(prev_ix).1; let unbroken_len = FindMatchLengthWithLimit(prev_data, cur_data, max_length); if unbroken_len >= 3 || (unbroken_len == 2 && i < 2) { let len = fix_unbroken_len(unbroken_len, prev_ix, cur_ix_masked, ring_buffer_break); let mut score: u64 = BackwardReferenceScoreUsingLastDistance(len, opts); if best_score < score { if i != 0 { score = score.wrapping_sub(BackwardReferencePenaltyUsingLastDistance(i)); } if best_score < score { best_score = score; best_len = len; out.len = best_len; out.distance = backward; out.score = best_score; is_match_found = true; } } } } let key: u32 = self.HashBytes(cur_data) as u32; let common_block_bits = self.specialization.block_bits(); let num_ref_mut = &mut self.num.slice_mut()[key as usize]; let num_copy = *num_ref_mut; let bucket: &mut [u32] = self .buckets .slice_mut() .split_at_mut((key << common_block_bits) as usize) .1 .split_at_mut(self.specialization.block_size() as usize) .0; assert!(bucket.len() > self.specialization.block_mask() as usize); if num_copy != 0 { let down: usize = max( i32::from(num_copy) - self.specialization.block_size() as i32, 0, ) as usize; let mut i = num_copy as usize; while i > down { i -= 1; let mut prev_ix = bucket[i & self.specialization.block_mask() as usize] as usize; let backward = cur_ix.wrapping_sub(prev_ix); prev_ix &= ring_buffer_mask; if (cur_ix_masked.wrapping_add(best_len) > ring_buffer_mask || prev_ix.wrapping_add(best_len) > ring_buffer_mask || cur_data[best_len] != data[prev_ix.wrapping_add(best_len)]) { if backward > max_backward { break; } continue; } if backward > max_backward { break; } let prev_data = data.split_at(prev_ix).1; let unbroken_len = FindMatchLengthWithLimitMin4(prev_data, cur_data, max_length); if unbroken_len != 0 { let len = fix_unbroken_len(unbroken_len, prev_ix, cur_ix_masked, ring_buffer_break); let score: u64 = BackwardReferenceScore(len, backward, opts); if best_score < score { best_score = score; best_len = len; out.len = best_len; out.distance = backward; out.score = best_score; is_match_found = true; } } } } bucket[(num_copy as u32 & self.specialization.block_mask()) as usize] = cur_ix as u32; *num_ref_mut = num_ref_mut.wrapping_add(1); if !is_match_found && dictionary.is_some() { let (_, cur_data) = data.split_at(cur_ix_masked); is_match_found = SearchInStaticDictionary( dictionary.unwrap(), dictionary_hash, self, cur_data, max_length, max_backward.wrapping_add(gap), max_distance, out, false, ); } is_match_found } } pub struct BankH40 { pub slots: [SlotH40; 65536], } pub struct BankH41 { pub slots: [SlotH41; 65536], } pub struct BankH42 { pub slots: [SlotH42; 512], } pub struct SlotH40 { pub delta: u16, pub next: u16, } pub struct SlotH41 { pub delta: u16, pub next: u16, } pub struct SlotH42 { pub delta: u16, pub next: u16, } // UNSUPPORTED, for now. pub struct H40 { pub common: Struct1, pub addr: [u32; 32768], pub head: [u16; 32768], pub tiny_hash: [u8; 65536], pub banks: [BankH40; 1], pub free_slot_idx: [u16; 1], pub max_hops: usize, } pub struct H41 { pub common: Struct1, pub addr: [u32; 32768], pub head: [u16; 32768], pub tiny_hash: [u8; 65536], pub banks: [BankH41; 1], pub free_slot_idx: [u16; 1], pub max_hops: usize, } pub struct H42 { pub common: Struct1, pub addr: [u32; 32768], pub head: [u16; 32768], pub tiny_hash: [u8; 65536], pub banks: [BankH42; 512], pub max_hops: usize, } fn BackwardReferenceScoreUsingLastDistance(copy_length: usize, h9_opts: H9Opts) -> u64 { ((h9_opts.literal_byte_score as u64) >> 2) .wrapping_mul(copy_length as u64) .wrapping_add((30u64 * 8u64).wrapping_mul(::core::mem::size_of::() as u64)) .wrapping_add(15) } fn BackwardReferenceScore( copy_length: usize, backward_reference_offset: usize, h9_opts: H9Opts, ) -> u64 { (30u64 * 8u64) .wrapping_mul(::core::mem::size_of::() as u64) .wrapping_add(((h9_opts.literal_byte_score as usize) >> 2).wrapping_mul(copy_length) as u64) .wrapping_sub( (30u64).wrapping_mul(Log2FloorNonZero(backward_reference_offset as u64) as u64), ) } fn Hash14(data: &[u8]) -> u32 { let h: u32 = BROTLI_UNALIGNED_LOAD32(data).wrapping_mul(kHashMul32); h >> (32i32 - 14i32) } fn TestStaticDictionaryItem( dictionary: &BrotliDictionary, item: usize, data: &[u8], max_length: usize, max_backward: usize, max_distance: usize, h9_opts: H9Opts, out: &mut HasherSearchResult, ) -> i32 { let backward: usize; let len: usize = item & 0x1fusize; let dist: usize = item >> 5; let offset: usize = (dictionary.offsets_by_length[len] as usize).wrapping_add(len.wrapping_mul(dist)); if len > max_length { return 0i32; } let matchlen: usize = FindMatchLengthWithLimit(data, &dictionary.data[offset..], len); if matchlen.wrapping_add(kCutoffTransformsCount as usize) <= len || matchlen == 0usize { return 0i32; } { let cut: u64 = len.wrapping_sub(matchlen) as u64; let transform_id: usize = (cut << 2).wrapping_add(kCutoffTransforms >> cut.wrapping_mul(6) & 0x3f) as usize; backward = max_backward .wrapping_add(dist) .wrapping_add(1) .wrapping_add(transform_id << dictionary.size_bits_by_length[len] as i32); } if backward > max_distance { return 0i32; } let score: u64 = BackwardReferenceScore(matchlen, backward, h9_opts); if score < out.score { return 0i32; } out.len = matchlen; out.len_x_code = len ^ matchlen; out.distance = backward; out.score = score; 1i32 } fn SearchInStaticDictionary( dictionary: &BrotliDictionary, dictionary_hash: &[u16], handle: &mut HasherType, data: &[u8], max_length: usize, max_backward: usize, max_distance: usize, out: &mut HasherSearchResult, shallow: bool, ) -> bool { let mut key: usize; let mut i: usize; let mut is_match_found = false; let opts = handle.Opts(); let xself: &mut Struct1 = handle.GetHasherCommon(); if xself.dict_num_matches < xself.dict_num_lookups >> 7 { return false; } key = (Hash14(data) << 1) as usize; //FIXME: works for any kind of hasher?? i = 0usize; while i < if shallow { 1 } else { 2 } { { let item: usize = dictionary_hash[key] as usize; xself.dict_num_lookups = xself.dict_num_lookups.wrapping_add(1); if item != 0usize { let item_matches: i32 = TestStaticDictionaryItem( dictionary, item, data, max_length, max_backward, max_distance, opts, out, ); if item_matches != 0 { xself.dict_num_matches = xself.dict_num_matches.wrapping_add(1); is_match_found = true; } } } i = i.wrapping_add(1); key = key.wrapping_add(1); } is_match_found } impl + alloc::Allocator> CloneWithAlloc for BasicHasher> { fn clone_with_alloc(&self, m: &mut Alloc) -> Self { let mut ret = BasicHasher::> { GetHasherCommon: self.GetHasherCommon.clone(), buckets_: H2Sub { buckets_: allocate::(m, self.buckets_.buckets_.len()), }, h9_opts: self.h9_opts, }; ret.buckets_ .buckets_ .slice_mut() .clone_from_slice(self.buckets_.buckets_.slice()); ret } } impl + alloc::Allocator> CloneWithAlloc for BasicHasher> { fn clone_with_alloc(&self, m: &mut Alloc) -> Self { let mut ret = BasicHasher::> { GetHasherCommon: self.GetHasherCommon.clone(), buckets_: H3Sub:: { buckets_: allocate::(m, self.buckets_.buckets_.len()), }, h9_opts: self.h9_opts, }; ret.buckets_ .buckets_ .slice_mut() .clone_from_slice(self.buckets_.buckets_.slice()); ret } } impl + alloc::Allocator> CloneWithAlloc for BasicHasher> { fn clone_with_alloc(&self, m: &mut Alloc) -> Self { let mut ret = BasicHasher::> { GetHasherCommon: self.GetHasherCommon.clone(), buckets_: H4Sub:: { buckets_: allocate::(m, self.buckets_.buckets_.len()), }, h9_opts: self.h9_opts, }; ret.buckets_ .buckets_ .slice_mut() .clone_from_slice(self.buckets_.buckets_.slice()); ret } } impl + alloc::Allocator> CloneWithAlloc for BasicHasher> { fn clone_with_alloc(&self, m: &mut Alloc) -> Self { let mut ret = BasicHasher::> { GetHasherCommon: self.GetHasherCommon.clone(), buckets_: H54Sub:: { buckets_: allocate::(m, self.buckets_.len()), }, h9_opts: self.h9_opts, }; ret.buckets_ .buckets_ .slice_mut() .clone_from_slice(self.buckets_.buckets_.slice()); ret } } impl + alloc::Allocator> CloneWithAlloc for H9 { fn clone_with_alloc(&self, m: &mut Alloc) -> Self { let mut num = allocate::(m, self.num_.len()); num.slice_mut().clone_from_slice(self.num_.slice()); let mut buckets = allocate::(m, self.buckets_.len()); buckets.slice_mut().clone_from_slice(self.buckets_.slice()); H9:: { num_: num, buckets_: buckets, dict_search_stats_: self.dict_search_stats_.clone(), h9_opts: self.h9_opts, } } } impl< Alloc: alloc::Allocator + alloc::Allocator, Special: AdvHashSpecialization + Sized + Clone, > CloneWithAlloc for AdvHasher { fn clone_with_alloc(&self, m: &mut Alloc) -> Self { let mut num = allocate::(m, self.num.len()); num.slice_mut().clone_from_slice(self.num.slice()); let mut buckets = allocate::(m, self.buckets.len()); buckets.slice_mut().clone_from_slice(self.buckets.slice()); AdvHasher:: { GetHasherCommon: self.GetHasherCommon.clone(), specialization: self.specialization.clone(), num, buckets, h9_opts: self.h9_opts, } } } pub enum UnionHasher + alloc::Allocator> { Uninit, H2(BasicHasher>), H3(BasicHasher>), H4(BasicHasher>), H54(BasicHasher>), H5(AdvHasher), H5q7(AdvHasher), H5q5(AdvHasher), H6(AdvHasher), H9(H9), H10(H10, H10DefaultParams>), } impl + alloc::Allocator> PartialEq> for UnionHasher { fn eq(&self, other: &UnionHasher) -> bool { match *self { UnionHasher::H2(ref hasher) => match *other { UnionHasher::H2(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H3(ref hasher) => match *other { UnionHasher::H3(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H4(ref hasher) => match *other { UnionHasher::H4(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H54(ref hasher) => match *other { UnionHasher::H54(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H5(ref hasher) => match *other { UnionHasher::H5(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H5q7(ref hasher) => match *other { UnionHasher::H5q7(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H5q5(ref hasher) => match *other { UnionHasher::H5q5(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H6(ref hasher) => match *other { UnionHasher::H6(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H9(ref hasher) => match *other { UnionHasher::H9(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::H10(ref hasher) => match *other { UnionHasher::H10(ref otherh) => *hasher == *otherh, _ => false, }, UnionHasher::Uninit => match *other { UnionHasher::Uninit => true, _ => false, }, } } } impl + alloc::Allocator> CloneWithAlloc for UnionHasher { fn clone_with_alloc(&self, m: &mut Alloc) -> Self { match *self { UnionHasher::H2(ref hasher) => UnionHasher::H2(hasher.clone_with_alloc(m)), UnionHasher::H3(ref hasher) => UnionHasher::H3(hasher.clone_with_alloc(m)), UnionHasher::H4(ref hasher) => UnionHasher::H4(hasher.clone_with_alloc(m)), UnionHasher::H5(ref hasher) => UnionHasher::H5(hasher.clone_with_alloc(m)), UnionHasher::H5q7(ref hasher) => UnionHasher::H5q7(hasher.clone_with_alloc(m)), UnionHasher::H5q5(ref hasher) => UnionHasher::H5q5(hasher.clone_with_alloc(m)), UnionHasher::H6(ref hasher) => UnionHasher::H6(hasher.clone_with_alloc(m)), UnionHasher::H54(ref hasher) => UnionHasher::H54(hasher.clone_with_alloc(m)), UnionHasher::H9(ref hasher) => UnionHasher::H9(hasher.clone_with_alloc(m)), UnionHasher::H10(ref hasher) => UnionHasher::H10(hasher.clone_with_alloc(m)), UnionHasher::Uninit => UnionHasher::Uninit, } } } macro_rules! match_all_hashers_mut { ($xself : expr, $func_call : ident, $( $args:expr),*) => { match $xself { &mut UnionHasher::H2(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H3(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H4(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H5(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H5q7(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H5q5(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H6(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H54(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H9(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::H10(ref mut hasher) => hasher.$func_call($($args),*), &mut UnionHasher::Uninit => panic!("UNINTIALIZED"), } }; } macro_rules! match_all_hashers { ($xself : expr, $func_call : ident, $( $args:expr),*) => { match $xself { &UnionHasher::H2(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H3(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H4(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H5(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H5q7(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H5q5(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H6(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H54(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H9(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::H10(ref hasher) => hasher.$func_call($($args),*), &UnionHasher::Uninit => panic!("UNINTIALIZED"), } }; } impl + alloc::Allocator> AnyHasher for UnionHasher { fn Opts(&self) -> H9Opts { match_all_hashers!(self, Opts,) } fn GetHasherCommon(&mut self) -> &mut Struct1 { match_all_hashers_mut!(self, GetHasherCommon,) } /* fn GetH10Tree(&mut self) -> Option<&mut H10> { return match_all_hashers_mut!(self, GetH10Tree,); }*/ fn Prepare(&mut self, one_shot: bool, input_size: usize, data: &[u8]) -> HowPrepared { match_all_hashers_mut!(self, Prepare, one_shot, input_size, data) } fn HashBytes(&self, data: &[u8]) -> usize { match_all_hashers!(self, HashBytes, data) } fn HashTypeLength(&self) -> usize { match_all_hashers!(self, HashTypeLength,) } fn StoreLookahead(&self) -> usize { match_all_hashers!(self, StoreLookahead,) } fn PrepareDistanceCache(&self, distance_cache: &mut [i32]) { match_all_hashers!(self, PrepareDistanceCache, distance_cache) } fn StitchToPreviousBlock( &mut self, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ) { match_all_hashers_mut!( self, StitchToPreviousBlock, num_bytes, position, ringbuffer, ringbuffer_mask ) } fn FindLongestMatch( &mut self, dictionary: Option<&BrotliDictionary>, dictionary_hash: &[u16], data: &[u8], ring_buffer_mask: usize, ring_buffer_break: Option, distance_cache: &[i32], cur_ix: usize, max_length: usize, max_backward: usize, gap: usize, max_distance: usize, out: &mut HasherSearchResult, ) -> bool { match_all_hashers_mut!( self, FindLongestMatch, dictionary, dictionary_hash, data, ring_buffer_mask, ring_buffer_break, distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out ) } fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { match_all_hashers_mut!(self, Store, data, mask, ix) } fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { match_all_hashers_mut!(self, StoreRange, data, mask, ix_start, ix_end) } fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { match_all_hashers_mut!(self, BulkStoreRange, data, mask, ix_start, ix_end) } } impl + alloc::Allocator> UnionHasher { pub fn free(&mut self, alloc: &mut Alloc) { match self { &mut UnionHasher::H2(ref mut hasher) => { >::free_cell( alloc, core::mem::take(&mut hasher.buckets_.buckets_), ); } &mut UnionHasher::H3(ref mut hasher) => { >::free_cell( alloc, core::mem::take(&mut hasher.buckets_.buckets_), ); } &mut UnionHasher::H4(ref mut hasher) => { >::free_cell( alloc, core::mem::take(&mut hasher.buckets_.buckets_), ); } &mut UnionHasher::H54(ref mut hasher) => { >::free_cell( alloc, core::mem::take(&mut hasher.buckets_.buckets_), ); } &mut UnionHasher::H5q7(ref mut hasher) => { >::free_cell(alloc, core::mem::take(&mut hasher.num)); >::free_cell(alloc, core::mem::take(&mut hasher.buckets)); } &mut UnionHasher::H5q5(ref mut hasher) => { >::free_cell(alloc, core::mem::take(&mut hasher.num)); >::free_cell(alloc, core::mem::take(&mut hasher.buckets)); } &mut UnionHasher::H5(ref mut hasher) => { >::free_cell(alloc, core::mem::take(&mut hasher.num)); >::free_cell(alloc, core::mem::take(&mut hasher.buckets)); } &mut UnionHasher::H6(ref mut hasher) => { >::free_cell(alloc, core::mem::take(&mut hasher.num)); >::free_cell(alloc, core::mem::take(&mut hasher.buckets)); } &mut UnionHasher::H9(ref mut hasher) => { >::free_cell(alloc, core::mem::take(&mut hasher.num_)); >::free_cell(alloc, core::mem::take(&mut hasher.buckets_)); } &mut UnionHasher::H10(ref mut hasher) => { hasher.free(alloc); } &mut UnionHasher::Uninit => {} } *self = UnionHasher::::default(); } } impl + alloc::Allocator> Default for UnionHasher { fn default() -> Self { UnionHasher::Uninit } } /*UnionHasher::H2(BasicHasher { GetHasherCommon:Struct1{params:BrotliHasherParams{ type_:2, block_bits: 8, bucket_bits:16, hash_len: 4, num_last_distances_to_check:0}, is_prepared_:0, dict_num_lookups:0, dict_num_matches:0, }, buckets_:H2Sub{ buckets_:[0;65537], }, }) */ fn CreateBackwardReferences( dictionary: Option<&BrotliDictionary>, dictionary_hash: &[u16], num_bytes: usize, mut position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ringbuffer_break: Option, params: &BrotliEncoderParams, hasher: &mut AH, dist_cache: &mut [i32], last_insert_len: &mut usize, mut commands: &mut [Command], num_commands: &mut usize, num_literals: &mut usize, ) { let gap = 0usize; let max_backward_limit: usize = (1usize << params.lgwin).wrapping_sub(16); let mut new_commands_count: usize = 0; let mut insert_length: usize = *last_insert_len; let pos_end: usize = position.wrapping_add(num_bytes); let store_end: usize = if num_bytes >= hasher.StoreLookahead() { position .wrapping_add(num_bytes) .wrapping_sub(hasher.StoreLookahead()) .wrapping_add(1) } else { position }; let random_heuristics_window_size: usize = LiteralSpreeLengthForSparseSearch(params); let mut apply_random_heuristics: usize = position.wrapping_add(random_heuristics_window_size); let kMinScore: u64 = (30u64 * 8) .wrapping_mul(::core::mem::size_of::() as u64) .wrapping_add(100); hasher.PrepareDistanceCache(dist_cache); while position.wrapping_add(hasher.HashTypeLength()) < pos_end { let mut max_length: usize = pos_end.wrapping_sub(position); let mut max_distance: usize = min(position, max_backward_limit); let mut sr = HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; sr.len = 0usize; sr.len_x_code = 0usize; sr.distance = 0usize; sr.score = kMinScore; if hasher.FindLongestMatch( dictionary, dictionary_hash, ringbuffer, ringbuffer_mask, ringbuffer_break, dist_cache, position, max_length, max_distance, gap, params.dist.max_distance, &mut sr, ) { let mut delayed_backward_references_in_row: i32 = 0i32; max_length = max_length.wrapping_sub(1); 'break6: loop { 'continue7: loop { let cost_diff_lazy: u64 = 175; let mut sr2 = HasherSearchResult { len: 0, len_x_code: 0, distance: 0, score: 0, }; sr2.len = if params.quality < 5 { min(sr.len.wrapping_sub(1), max_length) } else { 0usize }; sr2.len_x_code = 0usize; sr2.distance = 0usize; sr2.score = kMinScore; max_distance = min(position.wrapping_add(1), max_backward_limit); let is_match_found: bool = hasher.FindLongestMatch( dictionary, dictionary_hash, ringbuffer, ringbuffer_mask, ringbuffer_break, dist_cache, position.wrapping_add(1), max_length, max_distance, gap, params.dist.max_distance, &mut sr2, ); if is_match_found && (sr2.score >= sr.score.wrapping_add(cost_diff_lazy)) { position = position.wrapping_add(1); insert_length = insert_length.wrapping_add(1); sr = sr2; if { delayed_backward_references_in_row += 1; delayed_backward_references_in_row } < 4i32 && (position.wrapping_add(hasher.HashTypeLength()) < pos_end) { break 'continue7; } } break 'break6; } max_length = max_length.wrapping_sub(1); } apply_random_heuristics = position .wrapping_add((2usize).wrapping_mul(sr.len)) .wrapping_add(random_heuristics_window_size); max_distance = min(position, max_backward_limit); { let distance_code: usize = ComputeDistanceCode(sr.distance, max_distance, dist_cache); if sr.distance <= max_distance && (distance_code > 0usize) { dist_cache[3] = dist_cache[2]; dist_cache[2] = dist_cache[1]; dist_cache[1] = dist_cache[0]; dist_cache[0] = sr.distance as i32; hasher.PrepareDistanceCache(dist_cache); } new_commands_count += 1; let (old, new_commands) = core::mem::take(&mut commands).split_at_mut(1); commands = new_commands; old[0].init( ¶ms.dist, insert_length, sr.len, sr.len ^ sr.len_x_code, distance_code, ); } *num_literals = num_literals.wrapping_add(insert_length); insert_length = 0usize; hasher.StoreRange( ringbuffer, ringbuffer_mask, position.wrapping_add(2), min(position.wrapping_add(sr.len), store_end), ); position = position.wrapping_add(sr.len); } else { insert_length = insert_length.wrapping_add(1); position = position.wrapping_add(1); if position > apply_random_heuristics { let kMargin: usize = max(hasher.StoreLookahead().wrapping_sub(1), 4); if position.wrapping_add(16) >= pos_end.wrapping_sub(kMargin) { insert_length = insert_length.wrapping_add(pos_end - position); position = pos_end; } else if position > apply_random_heuristics .wrapping_add((4usize).wrapping_mul(random_heuristics_window_size)) { hasher.Store4Vec4(ringbuffer, ringbuffer_mask, position); insert_length = insert_length.wrapping_add(16); position = position.wrapping_add(16); } else { hasher.StoreEvenVec4(ringbuffer, ringbuffer_mask, position); insert_length = insert_length.wrapping_add(8); position = position.wrapping_add(8); } } } } insert_length = insert_length.wrapping_add(pos_end.wrapping_sub(position)); *last_insert_len = insert_length; *num_commands = num_commands.wrapping_add(new_commands_count); } pub fn BrotliCreateBackwardReferences< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, >( alloc: &mut Alloc, dictionary: &BrotliDictionary, num_bytes: usize, position: usize, ringbuffer: &[u8], ringbuffer_mask: usize, ringbuffer_break: Option , params: &BrotliEncoderParams, hasher_union: &mut UnionHasher, dist_cache: &mut [i32], last_insert_len: &mut usize, commands: &mut [Command], num_commands: &mut usize, num_literals: &mut usize, ) { match (hasher_union) { &mut UnionHasher::Uninit => panic!("working with uninitialized hash map"), &mut UnionHasher::H10(ref mut hasher) => { if params.quality >= 11 { super::backward_references_hq::BrotliCreateHqZopfliBackwardReferences( alloc, if params.use_dictionary { Some(dictionary) } else { None }, num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ) } else { super::backward_references_hq::BrotliCreateZopfliBackwardReferences( alloc, if params.use_dictionary { Some(dictionary) } else { None }, num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ) } } &mut UnionHasher::H2(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), &mut UnionHasher::H3(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), &mut UnionHasher::H4(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), &mut UnionHasher::H5(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), &mut UnionHasher::H5q7(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), &mut UnionHasher::H5q5(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), &mut UnionHasher::H6(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), &mut UnionHasher::H9(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), &mut UnionHasher::H54(ref mut hasher) => CreateBackwardReferences( if params.use_dictionary { Some(dictionary) } else { None }, &kStaticDictionaryHash[..], num_bytes, position, ringbuffer, ringbuffer_mask, ringbuffer_break, params, hasher, dist_cache, last_insert_len, commands, num_commands, num_literals, ), } } brotli-8.0.2/src/enc/backward_references/test.rs000064400000000000000000000240131046102023000177660ustar 00000000000000#![cfg(test)] #![cfg(feature = "std")] use alloc_stdlib::StandardAlloc; use super::{ AdvHasher, AnyHasher, BrotliHasherParams, CloneWithAlloc, H5Sub, H9Opts, HQ7Sub, Struct1, }; use crate::enc::combined_alloc::allocate; use crate::enc::{Allocator, SliceWrapper}; static RANDOM_THEN_UNICODE: &[u8] = include_bytes!("../../../testdata/random_then_unicode"); //&[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55]; #[cfg(feature = "std")] #[test] fn test_bulk_store_range() { let params_hasher = BrotliHasherParams { type_: 5, block_bits: 6, bucket_bits: 15, num_last_distances_to_check: 10, hash_len: 4, literal_byte_score: 540, }; let block_size = 1u64 << params_hasher.block_bits; let bucket_size = 1u64 << params_hasher.bucket_bits; let mut alloc = StandardAlloc::default(); let mut buckets = allocate::(&mut alloc, (bucket_size * block_size) as usize); let mut num = alloc.alloc_cell(bucket_size as usize); let mut hasher_a = AdvHasher:: { buckets, h9_opts: H9Opts::new(¶ms_hasher), num, GetHasherCommon: Struct1 { params: params_hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: H5Sub { hash_shift_: 32i32 - params_hasher.bucket_bits, bucket_size_: bucket_size as u32, block_bits_: params_hasher.block_bits, block_mask_: block_size.wrapping_sub(1) as u32, }, }; buckets = allocate::(&mut alloc, (bucket_size * block_size) as usize); num = alloc.alloc_cell(bucket_size as usize); let mut hasher_b = hasher_a.clone_with_alloc(&mut alloc); assert!(hasher_a == hasher_b); let mut hasher_e = hasher_a.clone_with_alloc(&mut alloc); let mut hasher_c = AdvHasher:: { buckets, h9_opts: H9Opts::new(¶ms_hasher), num, GetHasherCommon: Struct1 { params: params_hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: HQ7Sub {}, }; let mut hasher_d = hasher_c.clone_with_alloc(&mut alloc); assert!(hasher_d == hasher_c); hasher_a.BulkStoreRange( RANDOM_THEN_UNICODE, usize::MAX, 15, RANDOM_THEN_UNICODE.len() - 8, ); hasher_c.BulkStoreRange( RANDOM_THEN_UNICODE, usize::MAX, 15, RANDOM_THEN_UNICODE.len() - 8, ); for i in 15..RANDOM_THEN_UNICODE.len() - 8 { hasher_b.Store(RANDOM_THEN_UNICODE, usize::MAX, i); } hasher_d.StoreRange( RANDOM_THEN_UNICODE, usize::MAX, 15, RANDOM_THEN_UNICODE.len() - 8, ); let ret_start = hasher_e.StoreRangeOptBatch( RANDOM_THEN_UNICODE, usize::MAX, 15, RANDOM_THEN_UNICODE.len() - 8, ); assert!(ret_start > 15); hasher_e.BulkStoreRange( RANDOM_THEN_UNICODE, usize::MAX, ret_start, RANDOM_THEN_UNICODE.len() - 8, ); assert_eq!(hasher_a.buckets.slice(), hasher_c.buckets.slice()); assert_eq!(hasher_b.buckets.slice(), hasher_d.buckets.slice()); assert_eq!(hasher_a.num.slice(), hasher_c.num.slice()); assert_eq!(hasher_b.num.slice(), hasher_d.num.slice()); assert_eq!(hasher_a.buckets.slice(), hasher_b.buckets.slice()); assert_eq!(hasher_c.buckets.slice(), hasher_d.buckets.slice()); assert_eq!(hasher_a.num.slice(), hasher_b.num.slice()); assert_eq!(hasher_c.num.slice(), hasher_d.num.slice()); assert!(hasher_a == hasher_b); assert!(hasher_d == hasher_c); assert!(hasher_a == hasher_e); } #[cfg(feature = "std")] #[test] // does not use the fancy optimizations for q7 fn test_bulk_store_range_off_spec() { let params_hasher = BrotliHasherParams { type_: 5, block_bits: 6, bucket_bits: 15, num_last_distances_to_check: 10, hash_len: 4, literal_byte_score: 540, }; let block_size = 1u64 << params_hasher.block_bits; let bucket_size = 1u64 << params_hasher.bucket_bits; let mut alloc = StandardAlloc::default(); let mut buckets = allocate::(&mut alloc, (bucket_size * block_size) as usize); let mut num = alloc.alloc_cell(bucket_size as usize); let mut hasher_a = AdvHasher:: { buckets, h9_opts: H9Opts::new(¶ms_hasher), num, GetHasherCommon: Struct1 { params: params_hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: H5Sub { hash_shift_: 32i32 - params_hasher.bucket_bits, bucket_size_: bucket_size as u32, block_bits_: params_hasher.block_bits, block_mask_: block_size.wrapping_sub(1) as u32, }, }; buckets = allocate::(&mut alloc, (bucket_size * block_size) as usize); num = alloc.alloc_cell(bucket_size as usize); let mut hasher_b = hasher_a.clone_with_alloc(&mut alloc); assert!(hasher_a == hasher_b); let mut hasher_c = AdvHasher:: { buckets, h9_opts: H9Opts::new(¶ms_hasher), num, GetHasherCommon: Struct1 { params: params_hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: HQ7Sub {}, }; let mut hasher_d = hasher_c.clone_with_alloc(&mut alloc); assert!(hasher_d == hasher_c); hasher_a.BulkStoreRange( RANDOM_THEN_UNICODE, 0x0fff, 15, RANDOM_THEN_UNICODE.len() - 8, ); hasher_c.BulkStoreRange( RANDOM_THEN_UNICODE, 0x0fff, 15, RANDOM_THEN_UNICODE.len() - 8, ); hasher_c.BulkStoreRange( RANDOM_THEN_UNICODE, 0x0fff, RANDOM_THEN_UNICODE.len(), RANDOM_THEN_UNICODE.len() - 8, ); // noop for i in 15..RANDOM_THEN_UNICODE.len() - 8 { hasher_b.Store(RANDOM_THEN_UNICODE, 0x0fff, i); hasher_d.Store(RANDOM_THEN_UNICODE, 0x0fff, i); } assert_eq!(hasher_a.buckets.slice(), hasher_c.buckets.slice()); assert_eq!(hasher_b.buckets.slice(), hasher_d.buckets.slice()); assert_eq!(hasher_a.num.slice(), hasher_c.num.slice()); assert_eq!(hasher_b.num.slice(), hasher_d.num.slice()); assert!(hasher_a == hasher_b); assert!(hasher_d == hasher_c); } #[cfg(feature = "std")] #[test] fn test_bulk_store_range_pow2() { let params_hasher = BrotliHasherParams { type_: 5, block_bits: 6, bucket_bits: 15, num_last_distances_to_check: 10, hash_len: 4, literal_byte_score: 540, }; let block_size = 1u64 << params_hasher.block_bits; let bucket_size = 1u64 << params_hasher.bucket_bits; let mut alloc = StandardAlloc::default(); let mut buckets = allocate::(&mut alloc, (bucket_size * block_size) as usize); let mut num = alloc.alloc_cell(bucket_size as usize); let mut hasher_a = AdvHasher:: { buckets, h9_opts: H9Opts::new(¶ms_hasher), num, GetHasherCommon: Struct1 { params: params_hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: H5Sub { hash_shift_: 32i32 - params_hasher.bucket_bits, bucket_size_: bucket_size as u32, block_bits_: params_hasher.block_bits, block_mask_: block_size.wrapping_sub(1) as u32, }, }; buckets = allocate::(&mut alloc, (bucket_size * block_size) as usize); num = alloc.alloc_cell(bucket_size as usize); let mut hasher_b = hasher_a.clone_with_alloc(&mut alloc); assert!(hasher_a == hasher_b); let mut hasher_e = hasher_a.clone_with_alloc(&mut alloc); let mut hasher_c = AdvHasher:: { buckets, h9_opts: H9Opts::new(¶ms_hasher), num, GetHasherCommon: Struct1 { params: params_hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: HQ7Sub {}, }; let mut hasher_d = hasher_c.clone_with_alloc(&mut alloc); assert!(hasher_d == hasher_c); hasher_a.BulkStoreRange( RANDOM_THEN_UNICODE, usize::MAX, RANDOM_THEN_UNICODE.len() - 64 - 3, RANDOM_THEN_UNICODE.len() - 3, ); hasher_c.BulkStoreRange( RANDOM_THEN_UNICODE, usize::MAX, RANDOM_THEN_UNICODE.len() - 64 - 3, RANDOM_THEN_UNICODE.len() - 3, ); for i in RANDOM_THEN_UNICODE.len() - 64 - 3..RANDOM_THEN_UNICODE.len() - 3 { hasher_b.Store(RANDOM_THEN_UNICODE, usize::MAX, i); } hasher_d.StoreRange( RANDOM_THEN_UNICODE, usize::MAX, RANDOM_THEN_UNICODE.len() - 64 - 3, RANDOM_THEN_UNICODE.len() - 3, ); let ret_start = hasher_e.StoreRangeOptBatch( RANDOM_THEN_UNICODE, usize::MAX, RANDOM_THEN_UNICODE.len() - 64 - 3, RANDOM_THEN_UNICODE.len() - 3, ); assert!(ret_start > 15); hasher_e.BulkStoreRange( RANDOM_THEN_UNICODE, usize::MAX, ret_start, RANDOM_THEN_UNICODE.len() - 3, ); assert_eq!(hasher_a.buckets.slice(), hasher_c.buckets.slice()); assert_eq!(hasher_b.buckets.slice(), hasher_d.buckets.slice()); assert_eq!(hasher_a.num.slice(), hasher_c.num.slice()); assert_eq!(hasher_b.num.slice(), hasher_d.num.slice()); assert_eq!(hasher_a.buckets.slice(), hasher_b.buckets.slice()); assert_eq!(hasher_c.buckets.slice(), hasher_d.buckets.slice()); assert_eq!(hasher_a.num.slice(), hasher_b.num.slice()); assert_eq!(hasher_c.num.slice(), hasher_d.num.slice()); assert!(hasher_a == hasher_b); assert!(hasher_d == hasher_c); assert!(hasher_a == hasher_e); } brotli-8.0.2/src/enc/bit_cost.rs000064400000000000000000000164541046102023000146500ustar 00000000000000use alloc::SliceWrapperMut; use core::cmp::{max, min}; use super::super::alloc::SliceWrapper; use super::histogram::CostAccessors; use super::util::{FastLog2, FastLog2u16}; use super::vectorization::Mem256i; use crate::enc::floatX; const BROTLI_REPEAT_ZERO_CODE_LENGTH: usize = 17; const BROTLI_CODE_LENGTH_CODES: usize = BROTLI_REPEAT_ZERO_CODE_LENGTH + 1; pub(crate) fn shannon_entropy(mut population: &[u32], size: usize) -> (floatX, usize) { let mut sum: usize = 0; let mut retval: floatX = 0.0; if (size & 1) != 0 && !population.is_empty() { let p = population[0] as usize; population = population.split_at(1).1; sum = sum.wrapping_add(p); retval -= p as floatX * FastLog2u16(p as u16); } for pop_iter in population.split_at((size >> 1) << 1).0 { let p = *pop_iter as usize; sum = sum.wrapping_add(p); retval -= p as floatX * FastLog2u16(p as u16); } if sum != 0 { retval += sum as floatX * FastLog2(sum as u64); // not sure it's 16 bit } (retval, sum) } #[inline(always)] pub fn BitsEntropy(population: &[u32], size: usize) -> floatX { let (mut retval, sum) = shannon_entropy(population, size); if retval < sum as floatX { retval = sum as floatX; } retval } #[allow(clippy::excessive_precision)] fn CostComputation>( depth_histo: &mut [u32; BROTLI_CODE_LENGTH_CODES], nnz_data: &T, nnz: usize, _total_count: floatX, log2total: floatX, ) -> floatX { let mut bits: floatX = 0.0; let mut max_depth: usize = 1; for i in 0..nnz { // Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = // = log2(total_count) - log2(count(symbol)) let element = nnz_data.slice()[i >> 3][i & 7]; let log2p = log2total - FastLog2u16(element as u16); // Approximate the bit depth by round(-log2(P(symbol))) let depth = min((log2p + 0.5) as u8, 15u8); bits += (element as floatX) * log2p; if (depth as usize) > max_depth { max_depth = depth as usize; } depth_histo[depth as usize] += 1; } // Add the estimated encoding cost of the code length code histogram. bits += (18 + 2 * max_depth) as floatX; // Add the entropy of the code length code histogram. bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES); //println_stderr!("{:?} {:?}", &depth_histo[..], bits); bits } pub fn BrotliPopulationCost + CostAccessors>( histogram: &HistogramType, nnz_data: &mut HistogramType::i32vec, ) -> floatX { static kOneSymbolHistogramCost: floatX = 12.0; static kTwoSymbolHistogramCost: floatX = 20.0; static kThreeSymbolHistogramCost: floatX = 28.0; static kFourSymbolHistogramCost: floatX = 37.0; let data_size: usize = histogram.slice().len(); let mut count = 0; let mut s: [usize; 5] = [0; 5]; let mut bits: floatX = 0.0; if histogram.total_count() == 0 { return kOneSymbolHistogramCost; } for i in 0..data_size { if histogram.slice()[i] > 0 { s[count] = i; count += 1; if count > 4 { break; } } } match count { 1 => return kOneSymbolHistogramCost, 2 => return kTwoSymbolHistogramCost + histogram.total_count() as floatX, 3 => { let histo0: u32 = histogram.slice()[s[0]]; let histo1: u32 = histogram.slice()[s[1]]; let histo2: u32 = histogram.slice()[s[2]]; let histomax: u32 = max(histo0, max(histo1, histo2)); return kThreeSymbolHistogramCost + (2u32).wrapping_mul(histo0.wrapping_add(histo1).wrapping_add(histo2)) as floatX - histomax as floatX; } 4 => { let mut histo: [u32; 4] = [0; 4]; for i in 0..4 { histo[i] = histogram.slice()[s[i]]; } for i in 0..4 { for j in i + 1..4 { if histo[j] > histo[i] { histo.swap(j, i); } } } let h23: u32 = histo[2].wrapping_add(histo[3]); let histomax: u32 = max(h23, histo[0]); return kFourSymbolHistogramCost + (3u32).wrapping_mul(h23) as floatX + (2u32).wrapping_mul(histo[0].wrapping_add(histo[1])) as floatX - histomax as floatX; } _ => {} } if cfg!(feature = "vector_scratch_space") { // vectorization failed: it's faster to do things inline than split into two loops let mut nnz: usize = 0; let mut depth_histo = [0u32; 18]; let total_count = histogram.total_count() as floatX; let log2total = FastLog2(histogram.total_count() as u64); let mut i: usize = 0; while i < data_size { if histogram.slice()[i] > 0 { let nnz_val = &mut nnz_data.slice_mut()[nnz >> 3]; nnz_val[nnz & 7] = histogram.slice()[i] as i32; i += 1; nnz += 1; } else { let mut reps: u32 = 1; for hd in histogram.slice()[i + 1..data_size].iter() { if *hd != 0 { break; } reps += 1 } i += reps as usize; if i == data_size { break; } if reps < 3 { depth_histo[0] += reps; } else { reps -= 2; let mut depth_histo_adds: u32 = 0; while reps > 0 { depth_histo_adds += 1; bits += 3.0; reps >>= 3; } depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH] += depth_histo_adds; } } } bits += CostComputation(&mut depth_histo, nnz_data, nnz, total_count, log2total); } else { let mut max_depth: usize = 1; let mut depth_histo = [0u32; 18]; let log2total: floatX = FastLog2(histogram.total_count() as u64); // 64 bit here let mut reps: u32 = 0; for histo in histogram.slice()[..data_size].iter() { if *histo != 0 { if reps != 0 { if reps < 3 { depth_histo[0] += reps; } else { reps -= 2; while reps > 0 { depth_histo[17] += 1; bits += 3.0; reps >>= 3; } } reps = 0; } let log2p = log2total - FastLog2u16(*histo as u16); let mut depth = (log2p + 0.5) as usize; bits += *histo as floatX * log2p; depth = min(depth, 15); max_depth = max(depth, max_depth); depth_histo[depth] += 1; } else { reps += 1; } } bits += (18usize).wrapping_add((2usize).wrapping_mul(max_depth)) as floatX; bits += BitsEntropy(&depth_histo[..], 18); } bits } brotli-8.0.2/src/enc/block_split.rs000064400000000000000000000024031046102023000153340ustar 00000000000000use super::super::alloc; use super::super::alloc::{Allocator, SliceWrapper}; use crate::enc::combined_alloc::alloc_default; pub struct BlockSplit + alloc::Allocator> { pub num_types: usize, pub num_blocks: usize, pub types: >::AllocatedMemory, pub lengths: >::AllocatedMemory, } impl + alloc::Allocator> Default for BlockSplit { fn default() -> Self { Self { num_types: 0, num_blocks: 0, types: alloc_default::(), lengths: alloc_default::(), } } } impl + alloc::Allocator> BlockSplit { pub fn new() -> BlockSplit { Self::default() } pub fn destroy(&mut self, m: &mut Alloc) { >::free_cell(m, core::mem::take(&mut self.types)); >::free_cell(m, core::mem::take(&mut self.lengths)); self.num_blocks = 0; self.num_types = 0; } pub fn types_alloc_size(&self) -> usize { self.types.slice().len() } pub fn lengths_alloc_size(&self) -> usize { self.lengths.slice().len() } } brotli-8.0.2/src/enc/block_splitter.rs000064400000000000000000001020441046102023000160510ustar 00000000000000use core; use core::cmp::{max, min}; #[cfg(feature = "simd")] use core::simd::prelude::{SimdFloat, SimdPartialOrd}; use super::super::alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use super::backward_references::BrotliEncoderParams; use super::bit_cost::BrotliPopulationCost; use super::block_split::BlockSplit; use super::cluster::{BrotliHistogramBitCostDistance, BrotliHistogramCombine, HistogramPair}; use super::command::Command; use super::histogram::{ ClearHistograms, CostAccessors, HistogramAddHistogram, HistogramAddItem, HistogramAddVector, HistogramClear, HistogramCommand, HistogramDistance, HistogramLiteral, }; use super::util::FastLog2; use super::vectorization::{sum8i, v256, v256i, Mem256f}; use crate::enc::combined_alloc::allocate; use crate::enc::floatX; static kMaxLiteralHistograms: usize = 100usize; static kMaxCommandHistograms: usize = 50usize; static kLiteralBlockSwitchCost: floatX = 28.1; static kCommandBlockSwitchCost: floatX = 13.5; static kDistanceBlockSwitchCost: floatX = 14.6; static kLiteralStrideLength: usize = 70usize; static kCommandStrideLength: usize = 40usize; static kSymbolsPerLiteralHistogram: usize = 544usize; static kSymbolsPerCommandHistogram: usize = 530usize; static kSymbolsPerDistanceHistogram: usize = 544usize; static kMinLengthForBlockSplitting: usize = 128usize; static kIterMulForRefining: usize = 2usize; static kMinItersForRefining: usize = 100usize; #[inline(always)] fn update_cost_and_signal( num_histograms32: u32, ix: usize, min_cost: floatX, block_switch_cost: floatX, cost: &mut [Mem256f], switch_signal: &mut [u8], ) { let ymm_min_cost = v256::splat(min_cost); let ymm_block_switch_cost = v256::splat(block_switch_cost); let ymm_and_mask = v256i::from([ 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7, ]); for (index, cost_it) in cost[..((num_histograms32 as usize + 7) >> 3)] .iter_mut() .enumerate() { let mut ymm_cost = *cost_it; let costk_minus_min_cost = ymm_cost - ymm_min_cost; let ymm_cmpge: v256i = costk_minus_min_cost.simd_ge(ymm_block_switch_cost).to_int(); let ymm_bits = ymm_cmpge & ymm_and_mask; let result = sum8i(ymm_bits); //super::vectorization::sum8(ymm_bits) as u8; switch_signal[ix + index] |= result as u8; ymm_cost = costk_minus_min_cost.simd_min(ymm_block_switch_cost); *cost_it = Mem256f::from(ymm_cost); //println_stderr!("{:} ss {:} c {:?}", (index << 3) + 7, switch_signal[ix + index],*cost_it); } } fn CountLiterals(cmds: &[Command], num_commands: usize) -> usize { let mut total_length: usize = 0usize; for i in 0usize..num_commands { total_length = total_length.wrapping_add((cmds[i]).insert_len_ as usize); } total_length } fn CopyLiteralsToByteArray( cmds: &[Command], num_commands: usize, data: &[u8], offset: usize, mask: usize, literals: &mut [u8], ) { let mut pos: usize = 0usize; let mut from_pos: usize = offset & mask; for i in 0usize..num_commands { let mut insert_len: usize = (cmds[i]).insert_len_ as usize; if from_pos.wrapping_add(insert_len) > mask { let head_size: usize = mask.wrapping_add(1).wrapping_sub(from_pos); literals[pos..(pos + head_size)] .clone_from_slice(&data[from_pos..(from_pos + head_size)]); from_pos = 0usize; pos = pos.wrapping_add(head_size); insert_len = insert_len.wrapping_sub(head_size); } if insert_len > 0usize { literals[pos..(pos + insert_len)] .clone_from_slice(&data[from_pos..(from_pos + insert_len)]); pos = pos.wrapping_add(insert_len); } from_pos = from_pos .wrapping_add(insert_len) .wrapping_add(cmds[i].copy_len() as usize) & mask; } } fn MyRand(seed: &mut u32) -> u32 { *seed = seed.wrapping_mul(16807); if *seed == 0u32 { *seed = 1u32; } *seed } fn InitialEntropyCodes< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors, IntegerType: Sized + Clone, >( data: &[IntegerType], length: usize, stride: usize, num_histograms: usize, histograms: &mut [HistogramType], ) where u64: core::convert::From, { let mut seed: u32 = 7u32; let block_length: usize = length.wrapping_div(num_histograms); ClearHistograms(histograms, num_histograms); for i in 0usize..num_histograms { let mut pos: usize = length.wrapping_mul(i).wrapping_div(num_histograms); if i != 0usize { pos = pos.wrapping_add((MyRand(&mut seed) as usize).wrapping_rem(block_length)); } if pos.wrapping_add(stride) >= length { pos = length.wrapping_sub(stride).wrapping_sub(1); } HistogramAddVector(&mut histograms[i], &data[pos..], stride); } } fn RandomSample< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors, IntegerType: Sized + Clone, >( seed: &mut u32, data: &[IntegerType], length: usize, mut stride: usize, sample: &mut HistogramType, ) where u64: core::convert::From, { let pos: usize; if stride >= length { pos = 0usize; stride = length; } else { pos = (MyRand(seed) as usize).wrapping_rem(length.wrapping_sub(stride).wrapping_add(1)); } HistogramAddVector(sample, &data[pos..], stride); } fn RefineEntropyCodes< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors + core::default::Default, IntegerType: Sized + Clone, >( data: &[IntegerType], length: usize, stride: usize, num_histograms: usize, histograms: &mut [HistogramType], ) where u64: core::convert::From, { let mut iters: usize = kIterMulForRefining .wrapping_mul(length) .wrapping_div(stride) .wrapping_add(kMinItersForRefining); let mut seed: u32 = 7u32; iters = iters .wrapping_add(num_histograms) .wrapping_sub(1) .wrapping_div(num_histograms) .wrapping_mul(num_histograms); for iter in 0usize..iters { let mut sample = HistogramType::default(); HistogramClear(&mut sample); RandomSample(&mut seed, data, length, stride, &mut sample); HistogramAddHistogram( &mut histograms[iter.wrapping_rem(num_histograms)], &mut sample, ); } } fn BitCost(count: usize) -> floatX { if count == 0usize { -2.0 } else { FastLog2(count as u64) } } fn FindBlocks< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors, IntegerType: Sized + Clone, >( data: &[IntegerType], length: usize, block_switch_bitcost: floatX, num_histograms: usize, histograms: &[HistogramType], insert_cost: &mut [floatX], cost: &mut [Mem256f], switch_signal: &mut [u8], block_id: &mut [u8], ) -> usize where u64: core::convert::From, { if num_histograms == 0 { return 0; } let data_size: usize = histograms[0].slice().len(); let bitmaplen: usize = num_histograms.wrapping_add(7) >> 3; let mut num_blocks: usize = 1; let mut i: usize; if num_histograms <= 1 { for i in 0usize..length { block_id[i] = 0u8; } return 1; } for item in insert_cost[..(data_size * num_histograms)].iter_mut() { *item = 0.0; } for i in 0usize..num_histograms { insert_cost[i] = FastLog2((histograms[i]).total_count() as u32 as (u64)); } i = data_size; while i != 0usize { i = i.wrapping_sub(1); for j in 0usize..num_histograms { insert_cost[i.wrapping_mul(num_histograms).wrapping_add(j)] = insert_cost[j] - BitCost((histograms[j]).slice()[i] as usize); } } for item in cost.iter_mut() { *item = Mem256f::default(); } for item in switch_signal[..(length * bitmaplen)].iter_mut() { *item = 0; } for (byte_ix, data_byte_ix) in data[..length].iter().enumerate() { let block_id_ptr = &mut block_id[byte_ix]; let ix: usize = byte_ix.wrapping_mul(bitmaplen); let insert_cost_ix: usize = u64::from(data_byte_ix.clone()).wrapping_mul(num_histograms as u64) as usize; let mut min_cost: floatX = 1e38; let mut block_switch_cost: floatX = block_switch_bitcost; // main (vectorized) loop let insert_cost_slice = insert_cost.split_at(insert_cost_ix).1; for (v_index, cost_iter) in cost .split_at_mut(num_histograms >> 3) .0 .iter_mut() .enumerate() { let base_index = v_index << 3; let mut local_insert_cost = [0.0; 8]; local_insert_cost .clone_from_slice(insert_cost_slice.split_at(base_index).1.split_at(8).0); for sub_index in 0usize..8usize { cost_iter[sub_index] += local_insert_cost[sub_index]; let final_cost = cost_iter[sub_index]; if final_cost < min_cost { min_cost = final_cost; *block_id_ptr = (base_index + sub_index) as u8; } } } let vectorized_offset = ((num_histograms >> 3) << 3); let mut k = vectorized_offset; //remainder loop for for insert_cost_iter in insert_cost .split_at(insert_cost_ix + vectorized_offset) .1 .split_at(num_histograms & 7) .0 .iter() { let cost_iter = &mut cost[(k >> 3)]; cost_iter[k & 7] += *insert_cost_iter; if cost_iter[k & 7] < min_cost { min_cost = cost_iter[k & 7]; *block_id_ptr = k as u8; } k += 1; } if byte_ix < 2000usize { block_switch_cost *= (0.77 + 0.07 * (byte_ix as floatX) / 2000.0); } update_cost_and_signal( num_histograms as u32, ix, min_cost, block_switch_cost, cost, switch_signal, ); } { let mut byte_ix: usize = length.wrapping_sub(1); let mut ix: usize = byte_ix.wrapping_mul(bitmaplen); let mut cur_id: u8 = block_id[byte_ix]; while byte_ix > 0usize { let mask: u8 = (1u32 << (cur_id as i32 & 7i32)) as u8; byte_ix -= 1; ix = ix.wrapping_sub(bitmaplen); if switch_signal[ix.wrapping_add((cur_id as i32 >> 3) as usize)] as i32 & mask as i32 != 0 && cur_id as i32 != block_id[byte_ix] as i32 { cur_id = block_id[byte_ix]; num_blocks = num_blocks.wrapping_add(1); } block_id[byte_ix] = cur_id; } } num_blocks } fn RemapBlockIds( block_ids: &mut [u8], length: usize, new_id: &mut [u16], num_histograms: usize, ) -> usize { static kInvalidId: u16 = 256u16; let mut next_id: u16 = 0u16; for i in 0usize..num_histograms { new_id[i] = kInvalidId; } for i in 0usize..length { if new_id[(block_ids[i] as usize)] as i32 == kInvalidId as i32 { new_id[(block_ids[i] as usize)] = { let _old = next_id; next_id = (next_id as i32 + 1) as u16; _old }; } } for i in 0usize..length { block_ids[i] = new_id[(block_ids[i] as usize)] as u8; } next_id as usize } fn BuildBlockHistograms< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors, IntegerType: Sized + Clone, >( data: &[IntegerType], length: usize, block_ids: &[u8], num_histograms: usize, histograms: &mut [HistogramType], ) where u64: core::convert::From, { ClearHistograms(histograms, num_histograms); for i in 0usize..length { HistogramAddItem( &mut histograms[(block_ids[i] as usize)], u64::from(data[i].clone()) as usize, ); } } fn ClusterBlocks< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors + core::default::Default + Clone, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, IntegerType: Sized + Clone, >( alloc: &mut Alloc, data: &[IntegerType], length: usize, num_blocks: usize, scratch_space: &mut HistogramType::i32vec, block_ids: &mut [u8], split: &mut BlockSplit, ) where u64: core::convert::From, { let mut histogram_symbols = allocate::(alloc, num_blocks); let mut block_lengths = allocate::(alloc, num_blocks); let expected_num_clusters: usize = (16usize) .wrapping_mul(num_blocks.wrapping_add(64).wrapping_sub(1)) .wrapping_div(64); let mut all_histograms_size: usize = 0usize; let mut all_histograms_capacity: usize = expected_num_clusters; let mut all_histograms = allocate::(alloc, all_histograms_capacity); let mut cluster_size_size: usize = 0usize; let mut cluster_size_capacity: usize = expected_num_clusters; let mut cluster_size = allocate::(alloc, cluster_size_capacity); let mut num_clusters: usize = 0usize; let mut histograms = allocate::(alloc, min(num_blocks, 64)); let mut max_num_pairs: usize = (64i32 * 64i32 / 2i32) as usize; let pairs_capacity: usize = max_num_pairs.wrapping_add(1); let mut pairs = allocate::(alloc, pairs_capacity); let mut pos: usize = 0usize; let mut clusters: >::AllocatedMemory; static kInvalidIndex: u32 = u32::MAX; let mut i: usize; let mut sizes: [u32; 64] = [0; 64]; let mut new_clusters: [u32; 64] = [0; 64]; let mut symbols: [u32; 64] = [0; 64]; let mut remap: [u32; 64] = [0; 64]; { let mut block_idx: usize = 0usize; i = 0usize; while i < length { { { let _rhs = 1; let _lhs = &mut block_lengths.slice_mut()[block_idx]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } if i.wrapping_add(1) == length || block_ids[i] as i32 != block_ids[i.wrapping_add(1)] as i32 { block_idx = block_idx.wrapping_add(1); } } i = i.wrapping_add(1); } } i = 0usize; while i < num_blocks { { let num_to_combine: usize = min(num_blocks.wrapping_sub(i), 64); for j in 0usize..num_to_combine { HistogramClear(&mut histograms.slice_mut()[j]); for _k in 0usize..block_lengths.slice()[i.wrapping_add(j)] as usize { HistogramAddItem( &mut histograms.slice_mut()[j], u64::from(data[pos].clone()) as usize, ); pos = pos.wrapping_add(1); } let new_cost = BrotliPopulationCost(&histograms.slice()[j], scratch_space); (histograms.slice_mut()[j]).set_bit_cost(new_cost); new_clusters[j] = j as u32; symbols[j] = j as u32; sizes[j] = 1u32; } let num_new_clusters: usize = BrotliHistogramCombine( histograms.slice_mut(), &mut sizes[..], &mut symbols[..], &mut new_clusters[..], pairs.slice_mut(), num_to_combine, num_to_combine, 64usize, max_num_pairs, scratch_space, ); { if all_histograms_capacity < all_histograms_size.wrapping_add(num_new_clusters) { let mut _new_size: usize = if all_histograms_capacity == 0usize { all_histograms_size.wrapping_add(num_new_clusters) } else { all_histograms_capacity }; while _new_size < all_histograms_size.wrapping_add(num_new_clusters) { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); new_array.slice_mut()[..all_histograms_capacity] .clone_from_slice(&all_histograms.slice()[..all_histograms_capacity]); >::free_cell( alloc, core::mem::replace(&mut all_histograms, new_array), ); all_histograms_capacity = _new_size; } } { if cluster_size_capacity < cluster_size_size.wrapping_add(num_new_clusters) { let mut _new_size: usize = if cluster_size_capacity == 0usize { cluster_size_size.wrapping_add(num_new_clusters) } else { cluster_size_capacity }; while _new_size < cluster_size_size.wrapping_add(num_new_clusters) { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); new_array.slice_mut()[..cluster_size_capacity] .clone_from_slice(&cluster_size.slice()[..cluster_size_capacity]); >::free_cell( alloc, core::mem::replace(&mut cluster_size, new_array), ); cluster_size_capacity = _new_size; } } for j in 0usize..num_new_clusters { all_histograms.slice_mut()[all_histograms_size] = histograms.slice()[new_clusters[j] as usize].clone(); all_histograms_size = all_histograms_size.wrapping_add(1); cluster_size.slice_mut()[cluster_size_size] = sizes[new_clusters[j] as usize]; cluster_size_size = cluster_size_size.wrapping_add(1); remap[new_clusters[j] as usize] = j as u32; } for j in 0usize..num_to_combine { histogram_symbols.slice_mut()[i.wrapping_add(j)] = (num_clusters as u32).wrapping_add(remap[symbols[j] as usize]); } num_clusters = num_clusters.wrapping_add(num_new_clusters); } i = i.wrapping_add(64); } >::free_cell(alloc, core::mem::take(&mut histograms)); max_num_pairs = min( (64usize).wrapping_mul(num_clusters), num_clusters.wrapping_div(2).wrapping_mul(num_clusters), ); if pairs_capacity < max_num_pairs.wrapping_add(1) { let new_cell = allocate::(alloc, max_num_pairs.wrapping_add(1)); >::free_cell( alloc, core::mem::replace(&mut pairs, new_cell), ); } clusters = allocate::(alloc, num_clusters); i = 0usize; for item in clusters.slice_mut()[..num_clusters].iter_mut() { *item = i as u32; i = i.wrapping_add(1); } let num_final_clusters: usize = BrotliHistogramCombine( all_histograms.slice_mut(), cluster_size.slice_mut(), histogram_symbols.slice_mut(), clusters.slice_mut(), pairs.slice_mut(), num_clusters, num_blocks, 256usize, max_num_pairs, scratch_space, ); >::free_cell(alloc, core::mem::take(&mut pairs)); >::free_cell(alloc, core::mem::take(&mut cluster_size)); let mut new_index = allocate::(alloc, num_clusters); for item in new_index.slice_mut().iter_mut() { *item = kInvalidIndex; } pos = 0usize; { let mut next_index: u32 = 0u32; for i in 0usize..num_blocks { let mut histo: HistogramType = HistogramType::default(); let mut best_out: u32; let mut best_bits: floatX; HistogramClear(&mut histo); for _j in 0usize..block_lengths.slice()[i] as usize { HistogramAddItem(&mut histo, u64::from(data[pos].clone()) as usize); pos = pos.wrapping_add(1); } best_out = if i == 0usize { histogram_symbols.slice()[0] } else { histogram_symbols.slice()[i.wrapping_sub(1)] }; best_bits = BrotliHistogramBitCostDistance( &mut histo, &mut all_histograms.slice_mut()[(best_out as usize)], scratch_space, ); for j in 0usize..num_final_clusters { let cur_bits: floatX = BrotliHistogramBitCostDistance( &mut histo, &mut all_histograms.slice_mut()[(clusters.slice()[j] as usize)], scratch_space, ); if cur_bits < best_bits { best_bits = cur_bits; best_out = clusters.slice()[j]; } } histogram_symbols.slice_mut()[i] = best_out; if new_index.slice()[best_out as usize] == kInvalidIndex { new_index.slice_mut()[best_out as usize] = next_index; next_index = next_index.wrapping_add(1); } } } >::free_cell(alloc, core::mem::take(&mut clusters)); >::free_cell(alloc, core::mem::take(&mut all_histograms)); { if split.types_alloc_size() < num_blocks { let mut _new_size: usize = if split.types_alloc_size() == 0usize { num_blocks } else { split.types_alloc_size() }; while _new_size < num_blocks { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); new_array.slice_mut()[..split.types_alloc_size()] .clone_from_slice(&split.types.slice()[..split.types_alloc_size()]); >::free_cell( alloc, core::mem::replace(&mut split.types, new_array), ); } } { if split.lengths_alloc_size() < num_blocks { let mut _new_size: usize = if split.lengths_alloc_size() == 0usize { num_blocks } else { split.lengths_alloc_size() }; while _new_size < num_blocks { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); new_array.slice_mut()[..split.lengths_alloc_size()] .clone_from_slice(split.lengths.slice()); >::free_cell( alloc, core::mem::replace(&mut split.lengths, new_array), ); } } { let mut cur_length: u32 = 0u32; let mut block_idx: usize = 0usize; let mut max_type: u8 = 0u8; for i in 0usize..num_blocks { cur_length = cur_length.wrapping_add(block_lengths.slice()[i]); if i.wrapping_add(1) == num_blocks || histogram_symbols.slice()[i] != histogram_symbols.slice()[i.wrapping_add(1)] { let id: u8 = new_index.slice()[(histogram_symbols.slice()[i] as usize)] as u8; split.types.slice_mut()[block_idx] = id; split.lengths.slice_mut()[block_idx] = cur_length; max_type = max(max_type, id); cur_length = 0u32; block_idx = block_idx.wrapping_add(1); } } split.num_blocks = block_idx; split.num_types = (max_type as usize).wrapping_add(1); } >::free_cell(alloc, new_index); >::free_cell(alloc, block_lengths); >::free_cell(alloc, histogram_symbols); } fn SplitByteVector< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors + core::default::Default + Clone, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, IntegerType: Sized + Clone, >( alloc: &mut Alloc, data: &[IntegerType], length: usize, literals_per_histogram: usize, max_histograms: usize, sampling_stride_length: usize, block_switch_cost: floatX, params: &BrotliEncoderParams, scratch_space: &mut HistogramType::i32vec, split: &mut BlockSplit, ) where u64: core::convert::From, { let data_size: usize = HistogramType::default().slice().len(); let mut num_histograms: usize = length.wrapping_div(literals_per_histogram).wrapping_add(1); if num_histograms > max_histograms { num_histograms = max_histograms; } if length == 0usize { split.num_types = 1; return; } else if length < kMinLengthForBlockSplitting { { if split.types_alloc_size() < split.num_blocks.wrapping_add(1) { let mut _new_size: usize = if split.types_alloc_size() == 0usize { split.num_blocks.wrapping_add(1) } else { split.types_alloc_size() }; while _new_size < split.num_blocks.wrapping_add(1) { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); new_array.slice_mut()[..split.types_alloc_size()] .clone_from_slice(&split.types.slice()[..split.types_alloc_size()]); >::free_cell( alloc, core::mem::replace(&mut split.types, new_array), ); } } { if split.lengths_alloc_size() < split.num_blocks.wrapping_add(1) { let mut _new_size: usize = if split.lengths_alloc_size() == 0usize { split.num_blocks.wrapping_add(1) } else { split.lengths_alloc_size() }; while _new_size < split.num_blocks.wrapping_add(1) { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); new_array.slice_mut()[..split.lengths_alloc_size()] .clone_from_slice(&split.lengths.slice()[..split.lengths_alloc_size()]); >::free_cell( alloc, core::mem::replace(&mut split.lengths, new_array), ); } } split.num_types = 1; split.types.slice_mut()[split.num_blocks] = 0u8; split.lengths.slice_mut()[split.num_blocks] = length as u32; split.num_blocks = split.num_blocks.wrapping_add(1); return; } let mut histograms = allocate::(alloc, num_histograms); InitialEntropyCodes( data, length, sampling_stride_length, num_histograms, histograms.slice_mut(), ); RefineEntropyCodes( data, length, sampling_stride_length, num_histograms, histograms.slice_mut(), ); { let mut block_ids = allocate::(alloc, length); let mut num_blocks: usize = 0usize; let bitmaplen: usize = num_histograms.wrapping_add(7) >> 3; let mut insert_cost = allocate::(alloc, data_size.wrapping_mul(num_histograms)); let mut cost = allocate::(alloc, ((num_histograms + 7) >> 3)); let mut switch_signal = allocate::(alloc, length.wrapping_mul(bitmaplen)); let mut new_id = allocate::(alloc, num_histograms); let iters: usize = (if params.quality <= 11 { 3i32 } else { 10i32 }) as usize; for _i in 0usize..iters { num_blocks = FindBlocks( data, length, block_switch_cost, num_histograms, histograms.slice_mut(), insert_cost.slice_mut(), cost.slice_mut(), switch_signal.slice_mut(), block_ids.slice_mut(), ); num_histograms = RemapBlockIds( block_ids.slice_mut(), length, new_id.slice_mut(), num_histograms, ); BuildBlockHistograms( data, length, block_ids.slice(), num_histograms, histograms.slice_mut(), ); } >::free_cell(alloc, insert_cost); >::free_cell(alloc, cost); >::free_cell(alloc, switch_signal); >::free_cell(alloc, new_id); >::free_cell(alloc, histograms); ClusterBlocks::( alloc, data, length, num_blocks, scratch_space, block_ids.slice_mut(), split, ); >::free_cell(alloc, block_ids); } } pub fn BrotliSplitBlock< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, >( alloc: &mut Alloc, cmds: &[Command], num_commands: usize, data: &[u8], pos: usize, mask: usize, params: &BrotliEncoderParams, lit_scratch_space: &mut ::i32vec, cmd_scratch_space: &mut ::i32vec, dst_scratch_space: &mut ::i32vec, literal_split: &mut BlockSplit, insert_and_copy_split: &mut BlockSplit, dist_split: &mut BlockSplit, ) { { /*for (i, cmd) in cmds[..num_commands].iter().enumerate() { println_stderr!("C {:} {:} {:} {:} {:} {:}", i, cmd.insert_len_, cmd.copy_len_, cmd.dist_extra_, cmd.cmd_prefix_, cmd.dist_prefix_); }*/ let literals_count: usize = CountLiterals(cmds, num_commands); let mut literals = allocate::(alloc, literals_count); CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals.slice_mut()); SplitByteVector::( alloc, literals.slice(), literals_count, kSymbolsPerLiteralHistogram, kMaxLiteralHistograms, kLiteralStrideLength, kLiteralBlockSwitchCost, params, lit_scratch_space, literal_split, ); >::free_cell(alloc, literals); } { let mut insert_and_copy_codes = allocate::(alloc, num_commands); for i in 0..min(num_commands, cmds.len()) { insert_and_copy_codes.slice_mut()[i] = (cmds[i]).cmd_prefix_; } SplitByteVector::( alloc, insert_and_copy_codes.slice(), num_commands, kSymbolsPerCommandHistogram, kMaxCommandHistograms, kCommandStrideLength, kCommandBlockSwitchCost, params, cmd_scratch_space, insert_and_copy_split, ); >::free_cell(alloc, insert_and_copy_codes); } { let mut distance_prefixes = allocate::(alloc, num_commands); let mut j: usize = 0usize; for i in 0usize..num_commands { let cmd = &cmds[i]; if cmd.copy_len() != 0 && cmd.cmd_prefix_ >= 128 { distance_prefixes.slice_mut()[j] = cmd.dist_prefix_ & 0x03ff; j = j.wrapping_add(1); } } SplitByteVector::( alloc, distance_prefixes.slice(), j, kSymbolsPerDistanceHistogram, kMaxCommandHistograms, kCommandStrideLength, kDistanceBlockSwitchCost, params, dst_scratch_space, dist_split, ); >::free_cell(alloc, distance_prefixes); } } brotli-8.0.2/src/enc/brotli_bit_stream.rs000064400000000000000000003004621046102023000165410ustar 00000000000000#![allow(unknown_lints)] #![allow(unused_macros)] use core::cmp::{max, min}; #[cfg(feature = "std")] use std::io::Write; use super::super::alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use super::super::dictionary::{ kBrotliDictionary, kBrotliDictionaryOffsetsByLength, kBrotliDictionarySizeBitsByLength, }; use super::super::transform::TransformDictionaryWord; use super::super::{alloc, core}; use super::block_split::BlockSplit; use super::combined_alloc::BrotliAlloc; use super::command::{Command, GetCopyLengthCode, GetInsertLengthCode}; use super::constants::{ kCodeLengthBits, kCodeLengthDepth, kCopyBase, kCopyExtra, kInsBase, kInsExtra, kNonZeroRepsBits, kNonZeroRepsDepth, kSigned3BitContextLookup, kStaticCommandCodeBits, kStaticCommandCodeDepth, kStaticDistanceCodeBits, kStaticDistanceCodeDepth, kUTF8ContextLookup, kZeroRepsBits, kZeroRepsDepth, BROTLI_CONTEXT_LUT, BROTLI_NUM_BLOCK_LEN_SYMBOLS, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS, BROTLI_NUM_LITERAL_SYMBOLS, }; use super::context_map_entropy::{speed_to_tuple, ContextMapEntropy, SpeedAndMax}; use super::entropy_encode::{ BrotliConvertBitDepthsToSymbols, BrotliCreateHuffmanTree, BrotliSetDepth, BrotliWriteHuffmanTree, HuffmanComparator, HuffmanTree, SortHuffmanTreeItems, }; use super::histogram::{ ContextType, HistogramAddItem, HistogramCommand, HistogramDistance, HistogramLiteral, }; use super::input_pair::{InputPair, InputReference, InputReferenceMut}; use super::interface::StaticCommand; use super::static_dict::kNumDistanceCacheEntries; use super::util::floatX; use super::{find_stride, interface, prior_eval, stride_eval}; use crate::enc::backward_references::BrotliEncoderParams; use crate::enc::combined_alloc::{alloc_default, alloc_or_default, allocate}; use crate::VERSION; pub struct PrefixCodeRange { pub offset: u32, pub nbits: u32, } pub const MAX_SIMPLE_DISTANCE_ALPHABET_SIZE: usize = 140; fn window_size_from_lgwin(lgwin: i32) -> usize { (1 << lgwin) - 16usize } struct CommandQueue<'a, Alloc: BrotliAlloc + 'a> { mb: InputPair<'a>, // TODO: delete unused fields #[allow(dead_code)] mb_byte_offset: usize, mc: &'a mut Alloc, queue: >::AllocatedMemory, pred_mode: interface::PredictionModeContextMap>, loc: usize, entropy_tally_scratch: find_stride::EntropyTally, best_strides_per_block_type: >::AllocatedMemory, entropy_pyramid: find_stride::EntropyPyramid, context_map_entropy: ContextMapEntropy<'a, Alloc>, #[allow(dead_code)] stride_detection_quality: u8, #[allow(dead_code)] high_entropy_detection_quality: u8, block_type_literal: u8, #[allow(dead_code)] best_stride_index: usize, overfull: bool, } impl<'a, Alloc: BrotliAlloc> CommandQueue<'a, Alloc> { fn new( alloc: &'a mut Alloc, num_commands: usize, pred_mode: interface::PredictionModeContextMap>, mb: InputPair<'a>, stride_detection_quality: u8, high_entropy_detection_quality: u8, context_map_entropy: ContextMapEntropy<'a, Alloc>, best_strides: >::AllocatedMemory, entropy_tally_scratch: find_stride::EntropyTally, entropy_pyramid: find_stride::EntropyPyramid, ) -> CommandQueue<'a, Alloc> { // assume no more than 1/16 of the stream is block_types which may chop up literals // also there's the first btypel and a potential wrap around the ring buffer let queue = allocate::(alloc, num_commands * 17 / 16 + 4); CommandQueue { mc: alloc, queue, // always need a spare command in case the ring buffer splits a literal into two pred_mode, mb, mb_byte_offset: 0, loc: 0, best_strides_per_block_type: best_strides, entropy_tally_scratch, entropy_pyramid, stride_detection_quality, high_entropy_detection_quality, context_map_entropy, block_type_literal: 0, best_stride_index: 0, overfull: false, } } fn full(&self) -> bool { self.loc == self.queue.len() } fn error_if_full(&mut self) { if self.full() { self.overfull = true; } } fn clear(&mut self) { self.loc = 0; self.block_type_literal = 0; } fn free(&mut self, callback: &mut Cb) -> Result<(), ()> where Cb: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], InputPair, &mut Alloc, ), { callback( &mut self.pred_mode, self.queue.slice_mut().split_at_mut(self.loc).0, self.mb, self.mc, ); self.clear(); self.entropy_tally_scratch.free(self.mc); self.entropy_pyramid.free(self.mc); self.context_map_entropy.free(self.mc); >::free_cell(self.mc, core::mem::take(&mut self.queue)); >::free_cell( self.mc, core::mem::take(&mut self.best_strides_per_block_type), ); if self.overfull { return Err(()); } Ok(()) } } impl<'a, Alloc: BrotliAlloc> interface::CommandProcessor<'a> for CommandQueue<'a, Alloc> { fn push(&mut self, val: interface::Command>) { if self.full() { let mut tmp = allocate::(self.mc, self.queue.slice().len() * 2); tmp.slice_mut() .split_at_mut(self.queue.slice().len()) .0 .clone_from_slice(self.queue.slice()); >::free_cell( self.mc, core::mem::replace(&mut self.queue, tmp), ); } if !self.full() { self.queue.slice_mut()[self.loc] = val.freeze(); self.loc += 1; } else { self.error_if_full(); } } fn push_block_switch_literal(&mut self, block_type: u8) { self.push(interface::Command::BlockSwitchLiteral( interface::LiteralBlockSwitch::new(block_type, 0), )) } } #[cfg(feature = "std")] fn warn_on_missing_free() { let _err = ::std::io::stderr() .write(b"Need to free entropy_tally_scratch before dropping CommandQueue\n"); } #[cfg(not(feature = "std"))] fn warn_on_missing_free() { // no way to warn in this case } impl<'a, Alloc: BrotliAlloc> Drop for CommandQueue<'a, Alloc> { fn drop(&mut self) { if !self.entropy_tally_scratch.is_free() { warn_on_missing_free(); } } } #[cfg(not(feature = "billing"))] fn best_singleton_speed_log(_name: &str, _data: &[SpeedAndMax; 2], _cost: &[floatX; 2]) {} #[cfg(feature = "billing")] fn best_singleton_speed_log(name: &str, data: &[SpeedAndMax; 2], cost: &[floatX; 2]) { println!( "{} hi cost: {} lo cost: {} speeds {:?} {:?}", name, cost[1], cost[0], data[1], data[0] ); } #[cfg(not(feature = "billing"))] fn best_speed_log(_name: &str, _data: &[SpeedAndMax; 2], _cost: &[floatX; 2]) {} #[cfg(feature = "billing")] fn best_speed_log(name: &str, data: &[SpeedAndMax; 2], cost: &[floatX; 2]) { for high in 0..2 { println!( "{} Speed [ inc: {}, max: {}, algo: {} ] cost: {}", name, if high != 0 { "hi" } else { "lo" }, data[high].0, data[high].1, cost[high] ); } } fn process_command_queue<'a, CmdProcessor: interface::CommandProcessor<'a>>( command_queue: &mut CmdProcessor, input: InputPair<'a>, commands: &[Command], dist_cache: &[i32; kNumDistanceCacheEntries], mut recoder_state: RecoderState, block_type: &MetaBlockSplitRefs, params: &BrotliEncoderParams, context_type: Option, ) -> RecoderState { let mut input_iter = input; let mut local_dist_cache = [0i32; kNumDistanceCacheEntries]; local_dist_cache.clone_from_slice(&dist_cache[..]); let mut btypel_counter = 0usize; let mut btypec_counter = 0usize; let mut btyped_counter = 0usize; let mut btypel_sub = if block_type.btypel.num_types == 1 { 1u32 << 31 } else { block_type.btypel.lengths[0] }; let mut btypec_sub = if block_type.btypec.num_types == 1 { 1u32 << 31 } else { block_type.btypec.lengths[0] }; let mut btyped_sub = if block_type.btyped.num_types == 1 { 1u32 << 31 } else { block_type.btyped.lengths[0] }; { command_queue.push_block_switch_literal(0); } let mut mb_len = input.len(); for cmd in commands.iter() { let (inserts, interim) = input_iter.split_at(min(cmd.insert_len_ as usize, mb_len)); recoder_state.num_bytes_encoded += inserts.len(); let _copy_cursor = input.len() - interim.len(); // let distance_context = cmd.distance_context(); let copylen_code = cmd.copy_len_code(); let (prev_dist_index, dist_offset) = cmd.distance_index_and_offset(¶ms.dist); let final_distance: usize; if prev_dist_index == 0 { final_distance = dist_offset as usize; } else { final_distance = (local_dist_cache[prev_dist_index - 1] as isize + dist_offset) as usize; } let copy_len = copylen_code as usize; let actual_copy_len: usize; let max_distance = min( recoder_state.num_bytes_encoded, window_size_from_lgwin(params.lgwin), ); assert!(inserts.len() <= mb_len); if inserts.len() != 0 { let mut tmp_inserts = inserts; while tmp_inserts.len() > btypel_sub as usize { // we have to divide some: let (in_a, in_b) = tmp_inserts.split_at(btypel_sub as usize); if in_a.len() != 0 { if context_type.is_some() { command_queue.push_literals(&in_a); } else if params.high_entropy_detection_quality == 0 { command_queue.push_literals(&in_a); } else { command_queue.push_rand_literals(&in_a); } } mb_len -= in_a.len(); tmp_inserts = in_b; btypel_counter += 1; if block_type.btypel.types.len() > btypel_counter { btypel_sub = block_type.btypel.lengths[btypel_counter]; command_queue .push_block_switch_literal(block_type.btypel.types[btypel_counter]); } else { btypel_sub = 1u32 << 31; } } if context_type.is_some() { command_queue.push_literals(&tmp_inserts); } else if params.high_entropy_detection_quality == 0 { command_queue.push_literals(&tmp_inserts); } else { command_queue.push_rand_literals(&tmp_inserts); } if tmp_inserts.len() != 0 { mb_len -= tmp_inserts.len(); btypel_sub -= tmp_inserts.len() as u32; } } if final_distance > max_distance { // is dictionary assert!(copy_len >= 4); assert!(copy_len < 25); let dictionary_offset = final_distance - max_distance - 1; let ndbits = kBrotliDictionarySizeBitsByLength[copy_len] as usize; let action = dictionary_offset >> ndbits; let word_sub_index = dictionary_offset & ((1 << ndbits) - 1); let word_index = word_sub_index * copy_len + kBrotliDictionaryOffsetsByLength[copy_len] as usize; let raw_word = &kBrotliDictionary[word_index..word_index + copy_len]; let mut transformed_word = [0u8; 38]; actual_copy_len = TransformDictionaryWord( &mut transformed_word[..], raw_word, copy_len as i32, action as i32, ) as usize; if actual_copy_len <= mb_len { command_queue.push(interface::Command::Dict(interface::DictCommand { word_size: copy_len as u8, transform: action as u8, final_size: actual_copy_len as u8, empty: 0, word_id: word_sub_index as u32, })); mb_len -= actual_copy_len; assert_eq!( InputPair( InputReference { data: transformed_word.split_at(actual_copy_len).0, orig_offset: 0 }, InputReference::default() ), interim.split_at(actual_copy_len).0 ); } else if mb_len != 0 { // truncated dictionary word: represent it as literals instead // won't be random noise since it fits in the dictionary, so we won't check for rand command_queue.push_literals(&interim.split_at(mb_len).0); mb_len = 0; assert_eq!( InputPair( InputReference { data: transformed_word.split_at(mb_len).0, orig_offset: 0 }, InputReference::default() ), interim.split_at(mb_len).0 ); } } else { actual_copy_len = min(mb_len, copy_len); if actual_copy_len != 0 { command_queue.push(interface::Command::Copy(interface::CopyCommand { distance: final_distance as u32, num_bytes: actual_copy_len as u32, })); } mb_len -= actual_copy_len; if prev_dist_index != 1 || dist_offset != 0 { // update distance cache unless it's the "0 distance symbol" let mut tmp_dist_cache = [0i32; kNumDistanceCacheEntries - 1]; tmp_dist_cache.clone_from_slice(&local_dist_cache[..kNumDistanceCacheEntries - 1]); local_dist_cache[1..].clone_from_slice(&tmp_dist_cache[..]); local_dist_cache[0] = final_distance as i32; } } { btypec_sub -= 1; if btypec_sub == 0 { btypec_counter += 1; if block_type.btypec.types.len() > btypec_counter { btypec_sub = block_type.btypec.lengths[btypec_counter]; command_queue.push(interface::Command::BlockSwitchCommand( interface::BlockSwitch(block_type.btypec.types[btypec_counter]), )); } else { btypec_sub = 1u32 << 31; } } } if copy_len != 0 && cmd.cmd_prefix_ >= 128 { btyped_sub -= 1; if btyped_sub == 0 { btyped_counter += 1; if block_type.btyped.types.len() > btyped_counter { btyped_sub = block_type.btyped.lengths[btyped_counter]; command_queue.push(interface::Command::BlockSwitchDistance( interface::BlockSwitch(block_type.btyped.types[btyped_counter]), )); } else { btyped_sub = 1u32 << 31; } } } let (copied, remainder) = interim.split_at(actual_copy_len); recoder_state.num_bytes_encoded += copied.len(); input_iter = remainder; } recoder_state } fn LogMetaBlock<'a, Alloc: BrotliAlloc, Cb>( alloc: &mut Alloc, commands: &[Command], input0: &'a [u8], input1: &'a [u8], dist_cache: &[i32; kNumDistanceCacheEntries], recoder_state: &mut RecoderState, block_type: MetaBlockSplitRefs, params: &BrotliEncoderParams, context_type: Option, callback: &mut Cb, ) where Cb: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], InputPair, &mut Alloc, ), { let mut local_literal_context_map = [0u8; 256 * 64]; let mut local_distance_context_map = [0u8; 256 * 64 + interface::DISTANCE_CONTEXT_MAP_OFFSET]; assert_eq!( *block_type.btypel.types.iter().max().unwrap_or(&0) as u32 + 1, block_type.btypel.num_types ); assert_eq!( *block_type.btypec.types.iter().max().unwrap_or(&0) as u32 + 1, block_type.btypec.num_types ); assert_eq!( *block_type.btyped.types.iter().max().unwrap_or(&0) as u32 + 1, block_type.btyped.num_types ); if block_type.literal_context_map.len() <= 256 * 64 { for (index, item) in block_type.literal_context_map.iter().enumerate() { local_literal_context_map[index] = *item as u8; } } if block_type.distance_context_map.len() <= 256 * 64 { for (index, item) in block_type.distance_context_map.iter().enumerate() { local_distance_context_map[interface::DISTANCE_CONTEXT_MAP_OFFSET + index] = *item as u8; } } let mut prediction_mode = interface::PredictionModeContextMap:: { literal_context_map: InputReferenceMut { data: local_literal_context_map .split_at_mut(block_type.literal_context_map.len()) .0, orig_offset: 0, }, predmode_speed_and_distance_context_map: InputReferenceMut { data: local_distance_context_map .split_at_mut( interface::PredictionModeContextMap::::size_of_combined_array( block_type.distance_context_map.len(), ), ) .0, orig_offset: 0, }, }; for item in prediction_mode.get_mixing_values_mut().iter_mut() { *item = prior_eval::WhichPrior::STRIDE1 as u8; } prediction_mode .set_stride_context_speed([params.literal_adaptation[2], params.literal_adaptation[3]]); prediction_mode .set_context_map_speed([params.literal_adaptation[0], params.literal_adaptation[1]]); prediction_mode.set_combined_stride_context_speed([ params.literal_adaptation[0], params.literal_adaptation[1], ]); prediction_mode.set_literal_prediction_mode(interface::LiteralPredictionModeNibble( context_type.unwrap_or(ContextType::CONTEXT_LSB6) as u8, )); let mut entropy_tally_scratch; let mut entropy_pyramid; if params.stride_detection_quality == 1 || params.stride_detection_quality == 2 { entropy_tally_scratch = find_stride::EntropyTally::::new(alloc, None); entropy_pyramid = find_stride::EntropyPyramid::::new(alloc); entropy_pyramid.populate(input0, input1, &mut entropy_tally_scratch); } else { entropy_tally_scratch = find_stride::EntropyTally::::disabled_placeholder(alloc); entropy_pyramid = find_stride::EntropyPyramid::::disabled_placeholder(alloc); } let input = InputPair( InputReference { data: input0, orig_offset: 0, }, InputReference { data: input1, orig_offset: input0.len(), }, ); let mut best_strides = alloc_default::(); if params.stride_detection_quality > 2 { let mut stride_selector = stride_eval::StrideEval::::new(alloc, input, &prediction_mode, params); process_command_queue( &mut stride_selector, input, commands, dist_cache, *recoder_state, &block_type, params, context_type, ); let ntypes = stride_selector.num_types(); best_strides = allocate::(stride_selector.alloc(), ntypes); stride_selector.choose_stride(best_strides.slice_mut()); } let mut context_map_entropy = ContextMapEntropy::::new( alloc, input, entropy_pyramid.stride_last_level_range(), prediction_mode, params.cdf_adaptation_detection, ); if params.cdf_adaptation_detection != 0 { process_command_queue( &mut context_map_entropy, input, commands, dist_cache, *recoder_state, &block_type, params, context_type, ); { let (cm_speed, cm_cost) = context_map_entropy.best_singleton_speeds(true, false); let (stride_speed, stride_cost) = context_map_entropy.best_singleton_speeds(false, false); let (combined_speed, combined_cost) = context_map_entropy.best_singleton_speeds(false, true); best_singleton_speed_log("CM", &cm_speed, &cm_cost); best_singleton_speed_log("stride", &stride_speed, &stride_cost); best_singleton_speed_log("combined", &combined_speed, &combined_cost); } let cm_speed = context_map_entropy.best_speeds(true, false); let stride_speed = context_map_entropy.best_speeds(false, false); let combined_speed = context_map_entropy.best_speeds(false, true); let acost = context_map_entropy.best_speeds_costs(true, false); let bcost = context_map_entropy.best_speeds_costs(false, false); let ccost = context_map_entropy.best_speeds_costs(false, true); context_map_entropy .prediction_mode_mut() .set_stride_context_speed(speed_to_tuple(stride_speed)); context_map_entropy .prediction_mode_mut() .set_context_map_speed(speed_to_tuple(cm_speed)); context_map_entropy .prediction_mode_mut() .set_combined_stride_context_speed(speed_to_tuple(combined_speed)); best_speed_log("CM", &cm_speed, &acost); best_speed_log("Stride", &stride_speed, &bcost); best_speed_log("StrideCombined", &combined_speed, &ccost); } let mut prior_selector = prior_eval::PriorEval::::new( alloc, input, entropy_pyramid.stride_last_level_range(), context_map_entropy.take_prediction_mode(), params, ); if params.prior_bitmask_detection != 0 { process_command_queue( &mut prior_selector, input, commands, dist_cache, *recoder_state, &block_type, params, context_type, ); prior_selector.choose_bitmask(); } let prediction_mode = prior_selector.take_prediction_mode(); prior_selector.free(alloc); let mut command_queue = CommandQueue::new( alloc, commands.len(), prediction_mode, input, params.stride_detection_quality, params.high_entropy_detection_quality, context_map_entropy, best_strides, entropy_tally_scratch, entropy_pyramid, ); *recoder_state = process_command_queue( &mut command_queue, input, commands, dist_cache, *recoder_state, &block_type, params, context_type, ); command_queue.free(callback).unwrap(); // ::std::io::stderr().write(input0).unwrap(); // ::std::io::stderr().write(input1).unwrap(); } static kBlockLengthPrefixCode: [PrefixCodeRange; BROTLI_NUM_BLOCK_LEN_SYMBOLS] = [ PrefixCodeRange { offset: 1u32, nbits: 2u32, }, PrefixCodeRange { offset: 5u32, nbits: 2u32, }, PrefixCodeRange { offset: 9u32, nbits: 2u32, }, PrefixCodeRange { offset: 13u32, nbits: 2u32, }, PrefixCodeRange { offset: 17u32, nbits: 3u32, }, PrefixCodeRange { offset: 25u32, nbits: 3u32, }, PrefixCodeRange { offset: 33u32, nbits: 3u32, }, PrefixCodeRange { offset: 41u32, nbits: 3u32, }, PrefixCodeRange { offset: 49u32, nbits: 4u32, }, PrefixCodeRange { offset: 65u32, nbits: 4u32, }, PrefixCodeRange { offset: 81u32, nbits: 4u32, }, PrefixCodeRange { offset: 97u32, nbits: 4u32, }, PrefixCodeRange { offset: 113u32, nbits: 5u32, }, PrefixCodeRange { offset: 145u32, nbits: 5u32, }, PrefixCodeRange { offset: 177u32, nbits: 5u32, }, PrefixCodeRange { offset: 209u32, nbits: 5u32, }, PrefixCodeRange { offset: 241u32, nbits: 6u32, }, PrefixCodeRange { offset: 305u32, nbits: 6u32, }, PrefixCodeRange { offset: 369u32, nbits: 7u32, }, PrefixCodeRange { offset: 497u32, nbits: 8u32, }, PrefixCodeRange { offset: 753u32, nbits: 9u32, }, PrefixCodeRange { offset: 1265u32, nbits: 10u32, }, PrefixCodeRange { offset: 2289u32, nbits: 11u32, }, PrefixCodeRange { offset: 4337u32, nbits: 12u32, }, PrefixCodeRange { offset: 8433u32, nbits: 13u32, }, PrefixCodeRange { offset: 16625u32, nbits: 24u32, }, ]; fn BrotliWriteBits(n_bits: u8, bits: u64, pos: &mut usize, array: &mut [u8]) { assert_eq!(bits >> n_bits, 0); assert!(n_bits <= 56); let ptr_offset: usize = ((*pos >> 3) as u32) as usize; let mut v = array[ptr_offset] as u64; v |= bits << ((*pos) as u64 & 7); array[ptr_offset + 7] = (v >> 56) as u8; array[ptr_offset + 6] = ((v >> 48) & 0xff) as u8; array[ptr_offset + 5] = ((v >> 40) & 0xff) as u8; array[ptr_offset + 4] = ((v >> 32) & 0xff) as u8; array[ptr_offset + 3] = ((v >> 24) & 0xff) as u8; array[ptr_offset + 2] = ((v >> 16) & 0xff) as u8; array[ptr_offset + 1] = ((v >> 8) & 0xff) as u8; array[ptr_offset] = (v & 0xff) as u8; *pos += n_bits as usize } fn BrotliWriteBitsPrepareStorage(pos: usize, array: &mut [u8]) { assert_eq!(pos & 7, 0); array[pos >> 3] = 0; } fn BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask( num_codes: i32, code_length_bitdepth: &[u8], storage_ix: &mut usize, storage: &mut [u8], ) { static kStorageOrder: [u8; 18] = [1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]; static kHuffmanBitLengthHuffmanCodeSymbols: [u8; 6] = [0, 7, 3, 2, 1, 15]; static kHuffmanBitLengthHuffmanCodeBitLengths: [u8; 6] = [2, 4, 3, 2, 2, 4]; let mut skip_some: u64 = 0u64; let mut codes_to_store: u64 = 18; if num_codes > 1i32 { 'break5: while codes_to_store > 0 { { if code_length_bitdepth [(kStorageOrder[codes_to_store.wrapping_sub(1) as usize] as usize)] as i32 != 0i32 { break 'break5; } } codes_to_store = codes_to_store.wrapping_sub(1); } } if code_length_bitdepth[(kStorageOrder[0] as usize)] as i32 == 0i32 && (code_length_bitdepth[(kStorageOrder[1] as usize)] as i32 == 0i32) { skip_some = 2; if code_length_bitdepth[(kStorageOrder[2] as usize)] as i32 == 0i32 { skip_some = 3; } } BrotliWriteBits(2, skip_some, storage_ix, storage); for i in skip_some..codes_to_store { let l = code_length_bitdepth[kStorageOrder[i as usize] as usize] as usize; BrotliWriteBits( kHuffmanBitLengthHuffmanCodeBitLengths[l], kHuffmanBitLengthHuffmanCodeSymbols[l] as u64, storage_ix, storage, ); } } fn BrotliStoreHuffmanTreeToBitMask( huffman_tree_size: usize, huffman_tree: &[u8], huffman_tree_extra_bits: &[u8], code_length_bitdepth: &[u8], code_length_bitdepth_symbols: &[u16], storage_ix: &mut usize, storage: &mut [u8], ) { for i in 0usize..huffman_tree_size { let ix: usize = huffman_tree[i] as usize; BrotliWriteBits( code_length_bitdepth[ix], code_length_bitdepth_symbols[ix] as (u64), storage_ix, storage, ); if ix == 16usize { BrotliWriteBits(2, huffman_tree_extra_bits[i] as (u64), storage_ix, storage); } else if ix == 17usize { BrotliWriteBits(3, huffman_tree_extra_bits[i] as (u64), storage_ix, storage); } } } pub fn BrotliStoreHuffmanTree( depths: &[u8], num: usize, tree: &mut [HuffmanTree], storage_ix: &mut usize, storage: &mut [u8], ) { let mut huffman_tree = [0u8; 704]; let mut huffman_tree_extra_bits = [0u8; 704]; let mut huffman_tree_size = 0usize; let mut code_length_bitdepth = [0u8; 18]; let mut code_length_bitdepth_symbols = [0u16; 18]; let mut huffman_tree_histogram = [0u32; 18]; let mut i: usize; let mut num_codes: i32 = 0i32; let mut code: usize = 0usize; BrotliWriteHuffmanTree( depths, num, &mut huffman_tree_size, &mut huffman_tree[..], &mut huffman_tree_extra_bits[..], ); for i in 0usize..huffman_tree_size { let _rhs = 1; let _lhs = &mut huffman_tree_histogram[huffman_tree[i] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } i = 0usize; 'break3: while i < 18usize { { if huffman_tree_histogram[i] != 0 { if num_codes == 0i32 { code = i; num_codes = 1i32; } else if num_codes == 1i32 { num_codes = 2i32; { break 'break3; } } } } i = i.wrapping_add(1); } BrotliCreateHuffmanTree( &mut huffman_tree_histogram, 18usize, 5i32, tree, &mut code_length_bitdepth, ); BrotliConvertBitDepthsToSymbols( &mut code_length_bitdepth, 18usize, &mut code_length_bitdepth_symbols, ); BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask( num_codes, &code_length_bitdepth, storage_ix, storage, ); if num_codes == 1i32 { code_length_bitdepth[code] = 0u8; } BrotliStoreHuffmanTreeToBitMask( huffman_tree_size, &huffman_tree, &huffman_tree_extra_bits, &code_length_bitdepth, &code_length_bitdepth_symbols, storage_ix, storage, ); } fn StoreStaticCodeLengthCode(storage_ix: &mut usize, storage: &mut [u8]) { BrotliWriteBits(40, 0xff_5555_5554, storage_ix, storage); } pub struct SimpleSortHuffmanTree {} impl HuffmanComparator for SimpleSortHuffmanTree { fn Cmp(&self, v0: &HuffmanTree, v1: &HuffmanTree) -> bool { v0.total_count_ < v1.total_count_ } } pub fn BrotliBuildAndStoreHuffmanTreeFast>( m: &mut AllocHT, histogram: &[u32], histogram_total: usize, max_bits: usize, depth: &mut [u8], bits: &mut [u16], storage_ix: &mut usize, storage: &mut [u8], ) { let mut count: u64 = 0; let mut symbols: [u64; 4] = [0; 4]; let mut length: u64 = 0; let mut total: usize = histogram_total; while total != 0usize { if histogram[(length as usize)] != 0 { if count < 4 { symbols[count as usize] = length; } count = count.wrapping_add(1); total = total.wrapping_sub(histogram[(length as usize)] as usize); } length = length.wrapping_add(1); } if count <= 1 { BrotliWriteBits(4, 1, storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[0], storage_ix, storage); depth[symbols[0] as usize] = 0u8; bits[symbols[0] as usize] = 0u16; return; } for depth_elem in depth[..(length as usize)].iter_mut() { *depth_elem = 0; // memset } { // FIXME: computation in u64, followed by allocation which might be less than u64 let max_tree_size: u64 = (2u64).wrapping_mul(length).wrapping_add(1); // FIXME: makes little sense to test if N+1 > 0 -- always true unless wrapping. Perhaps use allocate() instead? let mut tree = alloc_or_default::(m, max_tree_size as usize); let mut count_limit: u32; count_limit = 1u32; 'break11: loop { { let mut node_index: u32 = 0u32; let mut l: u64; l = length; while l != 0 { l = l.wrapping_sub(1); if histogram[l as usize] != 0 { if histogram[l as usize] >= count_limit { tree.slice_mut()[node_index as usize] = HuffmanTree::new(histogram[l as usize], -1, l as i16); } else { tree.slice_mut()[node_index as usize] = HuffmanTree::new(count_limit, -1, l as i16); } node_index = node_index.wrapping_add(1); } } { let n: i32 = node_index as i32; let mut i: i32 = 0i32; let mut j: i32 = n + 1i32; let mut k: i32; SortHuffmanTreeItems(tree.slice_mut(), n as usize, SimpleSortHuffmanTree {}); let sentinel = HuffmanTree::new(u32::MAX, -1, -1); tree.slice_mut()[(node_index.wrapping_add(1) as usize)] = sentinel; tree.slice_mut()[(node_index as usize)] = sentinel; node_index = node_index.wrapping_add(2); k = n - 1i32; while k > 0i32 { { let left: i32; let right: i32; if (tree.slice()[(i as usize)]).total_count_ <= (tree.slice()[(j as usize)]).total_count_ { left = i; i += 1; } else { left = j; j += 1; } if (tree.slice()[(i as usize)]).total_count_ <= (tree.slice()[(j as usize)]).total_count_ { right = i; i += 1; } else { right = j; j += 1; } let sum_total = (tree.slice()[(left as usize)]) .total_count_ .wrapping_add((tree.slice()[(right as usize)]).total_count_); let tree_ind = (node_index.wrapping_sub(1) as usize); (tree.slice_mut()[tree_ind]).total_count_ = sum_total; (tree.slice_mut()[tree_ind]).index_left_ = left as i16; (tree.slice_mut()[tree_ind]).index_right_or_value_ = right as i16; tree.slice_mut()[(node_index as usize)] = sentinel; node_index = node_index.wrapping_add(1); } k -= 1; } if BrotliSetDepth(2i32 * n - 1i32, tree.slice_mut(), depth, 14i32) { break 'break11; } } } count_limit = count_limit.wrapping_mul(2); } { m.free_cell(core::mem::take(&mut tree)); } } BrotliConvertBitDepthsToSymbols(depth, length as usize, bits); if count <= 4 { BrotliWriteBits(2, 1, storage_ix, storage); BrotliWriteBits(2, count.wrapping_sub(1), storage_ix, storage); for i in 0..count as usize { for j in i + 1..count as usize { if depth[symbols[j] as usize] < depth[symbols[i] as usize] { symbols.swap(j, i); } } } if count == 2 { BrotliWriteBits(max_bits as u8, symbols[0], storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[1], storage_ix, storage); } else if count == 3 { BrotliWriteBits(max_bits as u8, symbols[0], storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[1], storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[2], storage_ix, storage); } else { BrotliWriteBits(max_bits as u8, symbols[0], storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[1], storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[2], storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[3], storage_ix, storage); BrotliWriteBits( 1, if depth[(symbols[0] as usize)] as i32 == 1i32 { 1i32 } else { 0i32 } as (u64), storage_ix, storage, ); } } else { let mut previous_value: u8 = 8u8; let mut i: u64; StoreStaticCodeLengthCode(storage_ix, storage); i = 0; while i < length { let value: u8 = depth[(i as usize)]; let mut reps: u64 = 1; let mut k: u64; k = i.wrapping_add(1); while k < length && (depth[(k as usize)] as i32 == value as i32) { { reps = reps.wrapping_add(1); } k = k.wrapping_add(1); } i = i.wrapping_add(reps); if value as i32 == 0i32 { BrotliWriteBits( kZeroRepsDepth[reps as usize] as u8, kZeroRepsBits[reps as usize] as u64, storage_ix, storage, ); } else { if previous_value as i32 != value as i32 { BrotliWriteBits( kCodeLengthDepth[value as usize], kCodeLengthBits[value as usize] as (u64), storage_ix, storage, ); reps = reps.wrapping_sub(1); } if reps < 3 { while reps != 0 { reps = reps.wrapping_sub(1); BrotliWriteBits( kCodeLengthDepth[value as usize], kCodeLengthBits[value as usize] as (u64), storage_ix, storage, ); } } else { reps = reps.wrapping_sub(3); BrotliWriteBits( kNonZeroRepsDepth[reps as usize] as u8, kNonZeroRepsBits[reps as usize] as u64, storage_ix, storage, ); } previous_value = value; } } } } pub struct MetaBlockSplit< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, > { pub literal_split: BlockSplit, pub command_split: BlockSplit, pub distance_split: BlockSplit, pub literal_context_map: >::AllocatedMemory, pub literal_context_map_size: usize, pub distance_context_map: >::AllocatedMemory, pub distance_context_map_size: usize, pub literal_histograms: >::AllocatedMemory, pub literal_histograms_size: usize, pub command_histograms: >::AllocatedMemory, pub command_histograms_size: usize, pub distance_histograms: >::AllocatedMemory, pub distance_histograms_size: usize, } impl< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, > Default for MetaBlockSplit { fn default() -> Self { Self { literal_split: BlockSplit::default(), command_split: BlockSplit::default(), distance_split: BlockSplit::default(), literal_context_map: alloc_default::(), literal_context_map_size: 0, distance_context_map: alloc_default::(), distance_context_map_size: 0, literal_histograms: alloc_default::(), literal_histograms_size: 0, command_histograms: alloc_default::(), command_histograms_size: 0, distance_histograms: alloc_default::(), distance_histograms_size: 0, } } } impl< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, > MetaBlockSplit { pub fn new() -> Self { Self::default() } pub fn destroy(&mut self, alloc: &mut Alloc) { self.literal_split.destroy(alloc); self.command_split.destroy(alloc); self.distance_split.destroy(alloc); >::free_cell(alloc, core::mem::take(&mut self.literal_context_map)); self.literal_context_map_size = 0; >::free_cell( alloc, core::mem::take(&mut self.distance_context_map), ); self.distance_context_map_size = 0; >::free_cell( alloc, core::mem::take(&mut self.literal_histograms), ); self.literal_histograms_size = 0; >::free_cell( alloc, core::mem::take(&mut self.command_histograms), ); self.command_histograms_size = 0; >::free_cell( alloc, core::mem::take(&mut self.distance_histograms), ); self.distance_histograms_size = 0; } } #[derive(Clone, Copy)] pub struct BlockTypeCodeCalculator { pub last_type: usize, pub second_last_type: usize, } pub struct BlockSplitCode { pub type_code_calculator: BlockTypeCodeCalculator, pub type_depths: [u8; 258], pub type_bits: [u16; 258], pub length_depths: [u8; 26], pub length_bits: [u16; 26], } pub struct BlockEncoder<'a, Alloc: alloc::Allocator + alloc::Allocator> { /* pub alloc_u8 : AllocU8, pub alloc_u16 : AllocU16, pub alloc_u32 : AllocU32, pub alloc_ht : AllocHT,*/ pub histogram_length_: usize, pub num_block_types_: usize, pub block_types_: &'a [u8], pub block_lengths_: &'a [u32], pub num_blocks_: usize, pub block_split_code_: BlockSplitCode, pub block_ix_: usize, pub block_len_: usize, pub entropy_ix_: usize, pub depths_: >::AllocatedMemory, pub bits_: >::AllocatedMemory, } fn Log2FloorNonZero(mut n: u64) -> u32 { let mut result: u32 = 0u32; 'loop1: loop { if { n >>= 1i32; n } != 0 { result = result.wrapping_add(1); continue 'loop1; } else { break 'loop1; } } result } fn BrotliEncodeMlen(length: u32, bits: &mut u64, numbits: &mut u32, nibblesbits: &mut u32) { let lg: u32 = (if length == 1u32 { 1u32 } else { Log2FloorNonZero(length.wrapping_sub(1) as (u64)).wrapping_add(1) }); let mnibbles: u32 = (if lg < 16u32 { 16u32 } else { lg.wrapping_add(3) }) .wrapping_div(4); assert!(length > 0); assert!(length <= (1 << 24)); assert!(lg <= 24); *nibblesbits = mnibbles.wrapping_sub(4); *numbits = mnibbles.wrapping_mul(4); *bits = length.wrapping_sub(1) as u64; } fn StoreCompressedMetaBlockHeader( is_final_block: bool, length: usize, storage_ix: &mut usize, storage: &mut [u8], ) { let mut lenbits: u64 = 0; let mut nlenbits: u32 = 0; let mut nibblesbits: u32 = 0; BrotliWriteBits(1, is_final_block.into(), storage_ix, storage); if is_final_block { BrotliWriteBits(1, 0, storage_ix, storage); } BrotliEncodeMlen(length as u32, &mut lenbits, &mut nlenbits, &mut nibblesbits); BrotliWriteBits(2, nibblesbits as u64, storage_ix, storage); BrotliWriteBits(nlenbits as u8, lenbits, storage_ix, storage); if !is_final_block { BrotliWriteBits(1, 0, storage_ix, storage); } } impl BlockTypeCodeCalculator { fn new() -> Self { Self { last_type: 1, second_last_type: 0, } } } impl<'a, Alloc: Allocator + Allocator> BlockEncoder<'a, Alloc> { fn new( histogram_length: usize, num_block_types: usize, block_types: &'a [u8], block_lengths: &'a [u32], num_blocks: usize, ) -> Self { let block_len = if num_blocks != 0 && !block_lengths.is_empty() { block_lengths[0] as usize } else { 0 }; Self { histogram_length_: histogram_length, num_block_types_: num_block_types, block_types_: block_types, block_lengths_: block_lengths, num_blocks_: num_blocks, block_split_code_: BlockSplitCode { type_code_calculator: BlockTypeCodeCalculator::new(), type_depths: [0; 258], type_bits: [0; 258], length_depths: [0; 26], length_bits: [0; 26], }, block_ix_: 0, block_len_: block_len, entropy_ix_: 0, depths_: alloc_default::(), bits_: alloc_default::(), } } } fn NextBlockTypeCode(calculator: &mut BlockTypeCodeCalculator, type_: u8) -> usize { let type_code: usize = (if type_ as usize == calculator.last_type.wrapping_add(1) { 1u32 } else if type_ as usize == calculator.second_last_type { 0u32 } else { (type_ as u32).wrapping_add(2) }) as usize; calculator.second_last_type = calculator.last_type; calculator.last_type = type_ as usize; type_code } fn BlockLengthPrefixCode(len: u32) -> u32 { let mut code: u32 = (if len >= 177u32 { if len >= 753u32 { 20i32 } else { 14i32 } } else if len >= 41u32 { 7i32 } else { 0i32 }) as u32; while code < (26i32 - 1i32) as u32 && (len >= kBlockLengthPrefixCode[code.wrapping_add(1) as usize].offset) { code = code.wrapping_add(1); } code } fn StoreVarLenUint8(n: u64, storage_ix: &mut usize, storage: &mut [u8]) { if n == 0 { BrotliWriteBits(1, 0, storage_ix, storage); } else { let nbits: u8 = Log2FloorNonZero(n) as u8; BrotliWriteBits(1, 1, storage_ix, storage); BrotliWriteBits(3, nbits as u64, storage_ix, storage); BrotliWriteBits(nbits, n.wrapping_sub(1u64 << nbits), storage_ix, storage); } } fn StoreSimpleHuffmanTree( depths: &[u8], symbols: &mut [usize], num_symbols: usize, max_bits: usize, storage_ix: &mut usize, storage: &mut [u8], ) { BrotliWriteBits(2, 1, storage_ix, storage); BrotliWriteBits(2, num_symbols.wrapping_sub(1) as u64, storage_ix, storage); { for i in 0..num_symbols { for j in i + 1..num_symbols { if depths[symbols[j]] < depths[symbols[i]] { symbols.swap(j, i); } } } } if num_symbols == 2usize { BrotliWriteBits(max_bits as u8, symbols[0] as u64, storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[1] as u64, storage_ix, storage); } else if num_symbols == 3usize { BrotliWriteBits(max_bits as u8, symbols[0] as u64, storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[1] as u64, storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[2] as u64, storage_ix, storage); } else { BrotliWriteBits(max_bits as u8, symbols[0] as u64, storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[1] as u64, storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[2] as u64, storage_ix, storage); BrotliWriteBits(max_bits as u8, symbols[3] as u64, storage_ix, storage); BrotliWriteBits( 1, if depths[symbols[0]] as i32 == 1i32 { 1i32 } else { 0i32 } as (u64), storage_ix, storage, ); } } fn BuildAndStoreHuffmanTree( histogram: &[u32], histogram_length: usize, alphabet_size: usize, tree: &mut [HuffmanTree], depth: &mut [u8], bits: &mut [u16], storage_ix: &mut usize, storage: &mut [u8], ) { let mut count: usize = 0usize; let mut s4 = [0usize; 4]; let mut i: usize; let mut max_bits: usize = 0usize; i = 0usize; 'break31: while i < histogram_length { { if histogram[i] != 0 { if count < 4usize { s4[count] = i; } else if count > 4usize { break 'break31; } count = count.wrapping_add(1); } } i = i.wrapping_add(1); } { let mut max_bits_counter: usize = alphabet_size.wrapping_sub(1); while max_bits_counter != 0 { max_bits_counter >>= 1i32; max_bits = max_bits.wrapping_add(1); } } if count <= 1 { BrotliWriteBits(4, 1, storage_ix, storage); BrotliWriteBits(max_bits as u8, s4[0] as u64, storage_ix, storage); depth[s4[0]] = 0u8; bits[s4[0]] = 0u16; return; } for depth_elem in depth[..histogram_length].iter_mut() { *depth_elem = 0; // memset } BrotliCreateHuffmanTree(histogram, histogram_length, 15i32, tree, depth); BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits); if count <= 4usize { StoreSimpleHuffmanTree(depth, &mut s4[..], count, max_bits, storage_ix, storage); } else { BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, storage); } } fn GetBlockLengthPrefixCode(len: u32, code: &mut usize, n_extra: &mut u32, extra: &mut u32) { *code = BlockLengthPrefixCode(len) as usize; *n_extra = kBlockLengthPrefixCode[*code].nbits; *extra = len.wrapping_sub(kBlockLengthPrefixCode[*code].offset); } fn StoreBlockSwitch( code: &mut BlockSplitCode, block_len: u32, block_type: u8, is_first_block: bool, storage_ix: &mut usize, storage: &mut [u8], ) { let typecode: usize = NextBlockTypeCode(&mut code.type_code_calculator, block_type); let mut lencode: usize = 0; let mut len_nextra: u32 = 0; let mut len_extra: u32 = 0; if !is_first_block { BrotliWriteBits( code.type_depths[typecode] as u8, code.type_bits[typecode] as (u64), storage_ix, storage, ); } GetBlockLengthPrefixCode(block_len, &mut lencode, &mut len_nextra, &mut len_extra); BrotliWriteBits( code.length_depths[lencode], code.length_bits[lencode] as (u64), storage_ix, storage, ); BrotliWriteBits(len_nextra as u8, len_extra as (u64), storage_ix, storage); } fn BuildAndStoreBlockSplitCode( types: &[u8], lengths: &[u32], num_blocks: usize, num_types: usize, tree: &mut [HuffmanTree], code: &mut BlockSplitCode, storage_ix: &mut usize, storage: &mut [u8], ) { let mut type_histo: [u32; 258] = [0; 258]; let mut length_histo: [u32; 26] = [0; 26]; let mut i: usize; let mut type_code_calculator = BlockTypeCodeCalculator::new(); i = 0usize; while i < num_blocks { { let type_code: usize = NextBlockTypeCode(&mut type_code_calculator, types[i]); if i != 0usize { let _rhs = 1; let _lhs = &mut type_histo[type_code]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } { let _rhs = 1; let _lhs = &mut length_histo[BlockLengthPrefixCode(lengths[i]) as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } i = i.wrapping_add(1); } StoreVarLenUint8(num_types.wrapping_sub(1) as u64, storage_ix, storage); if num_types > 1 { BuildAndStoreHuffmanTree( &mut type_histo[0..], num_types.wrapping_add(2), num_types.wrapping_add(2), tree, &mut code.type_depths[0..], &mut code.type_bits[0..], storage_ix, storage, ); BuildAndStoreHuffmanTree( &mut length_histo[0..], super::constants::BROTLI_NUM_BLOCK_LEN_SYMBOLS, // 26 super::constants::BROTLI_NUM_BLOCK_LEN_SYMBOLS, tree, &mut code.length_depths[0..], &mut code.length_bits[0..], storage_ix, storage, ); StoreBlockSwitch(code, lengths[0], types[0], true, storage_ix, storage); } } impl + Allocator> BlockEncoder<'_, Alloc> { fn build_and_store_block_switch_entropy_codes( &mut self, tree: &mut [HuffmanTree], storage_ix: &mut usize, storage: &mut [u8], ) { BuildAndStoreBlockSplitCode( self.block_types_, self.block_lengths_, self.num_blocks_, self.num_block_types_, tree, &mut self.block_split_code_, storage_ix, storage, ); } } fn StoreTrivialContextMap( num_types: usize, context_bits: usize, tree: &mut [HuffmanTree], storage_ix: &mut usize, storage: &mut [u8], ) { StoreVarLenUint8(num_types.wrapping_sub(1) as u64, storage_ix, storage); if num_types > 1 { let repeat_code: usize = context_bits.wrapping_sub(1u32 as usize); let repeat_bits: usize = (1u32 << repeat_code).wrapping_sub(1) as usize; let alphabet_size: usize = num_types.wrapping_add(repeat_code); let mut histogram: [u32; 272] = [0; 272]; let mut depths: [u8; 272] = [0; 272]; let mut bits: [u16; 272] = [0; 272]; BrotliWriteBits(1u8, 1u64, storage_ix, storage); BrotliWriteBits(4u8, repeat_code.wrapping_sub(1) as u64, storage_ix, storage); histogram[repeat_code] = num_types as u32; histogram[0] = 1; for i in context_bits..alphabet_size { histogram[i] = 1; } BuildAndStoreHuffmanTree( &mut histogram[..], alphabet_size, alphabet_size, tree, &mut depths[..], &mut bits[..], storage_ix, storage, ); for i in 0usize..num_types { let code: usize = if i == 0usize { 0usize } else { i.wrapping_add(context_bits).wrapping_sub(1) }; BrotliWriteBits(depths[code], bits[code] as (u64), storage_ix, storage); BrotliWriteBits( depths[repeat_code], bits[repeat_code] as (u64), storage_ix, storage, ); BrotliWriteBits(repeat_code as u8, repeat_bits as u64, storage_ix, storage); } BrotliWriteBits(1, 1, storage_ix, storage); } } fn IndexOf(v: &[u8], v_size: usize, value: u8) -> usize { let mut i: usize = 0usize; while i < v_size { { if v[i] as i32 == value as i32 { return i; } } i = i.wrapping_add(1); } i } fn MoveToFront(v: &mut [u8], index: usize) { let value: u8 = v[index]; let mut i: usize; i = index; while i != 0usize { { v[i] = v[i.wrapping_sub(1)]; } i = i.wrapping_sub(1); } v[0] = value; } fn MoveToFrontTransform(v_in: &[u32], v_size: usize, v_out: &mut [u32]) { let mut mtf: [u8; 256] = [0; 256]; let mut max_value: u32; if v_size == 0usize { return; } max_value = v_in[0]; for i in 1..v_size { if v_in[i] > max_value { max_value = v_in[i]; } } for i in 0..=max_value as usize { mtf[i] = i as u8; } { let mtf_size: usize = max_value.wrapping_add(1) as usize; for i in 0usize..v_size { let index: usize = IndexOf(&mtf[..], mtf_size, v_in[i] as u8); v_out[i] = index as u32; MoveToFront(&mut mtf[..], index); } } } fn RunLengthCodeZeros( in_size: usize, v: &mut [u32], out_size: &mut usize, max_run_length_prefix: &mut u32, ) { let mut max_reps: u32 = 0u32; let mut i: usize; let mut max_prefix: u32; i = 0usize; while i < in_size { let mut reps: u32 = 0u32; while i < in_size && (v[i] != 0u32) { i = i.wrapping_add(1); } while i < in_size && (v[i] == 0u32) { { reps = reps.wrapping_add(1); } i = i.wrapping_add(1); } max_reps = max(reps, max_reps); } max_prefix = if max_reps > 0u32 { Log2FloorNonZero(max_reps as (u64)) } else { 0u32 }; max_prefix = min(max_prefix, *max_run_length_prefix); *max_run_length_prefix = max_prefix; *out_size = 0usize; i = 0usize; while i < in_size { if v[i] != 0u32 { v[*out_size] = (v[i]).wrapping_add(*max_run_length_prefix); i = i.wrapping_add(1); *out_size = out_size.wrapping_add(1); } else { let mut reps: u32 = 1u32; let mut k: usize; k = i.wrapping_add(1); while k < in_size && (v[k] == 0u32) { { reps = reps.wrapping_add(1); } k = k.wrapping_add(1); } i = i.wrapping_add(reps as usize); while reps != 0u32 { if reps < 2u32 << max_prefix { let run_length_prefix: u32 = Log2FloorNonZero(reps as (u64)); let extra_bits: u32 = reps.wrapping_sub(1u32 << run_length_prefix); v[*out_size] = run_length_prefix.wrapping_add(extra_bits << 9); *out_size = out_size.wrapping_add(1); { break; } } else { let extra_bits: u32 = (1u32 << max_prefix).wrapping_sub(1); v[*out_size] = max_prefix.wrapping_add(extra_bits << 9); reps = reps.wrapping_sub((2u32 << max_prefix).wrapping_sub(1)); *out_size = out_size.wrapping_add(1); } } } } } fn EncodeContextMap>( m: &mut AllocU32, context_map: &[u32], context_map_size: usize, num_clusters: usize, tree: &mut [HuffmanTree], storage_ix: &mut usize, storage: &mut [u8], ) { let mut rle_symbols: AllocU32::AllocatedMemory; let mut max_run_length_prefix: u32 = 6u32; let mut num_rle_symbols: usize = 0usize; static kSymbolMask: u32 = (1u32 << 9) - 1; let mut depths: [u8; 272] = [0; 272]; let mut bits: [u16; 272] = [0; 272]; StoreVarLenUint8(num_clusters.wrapping_sub(1) as u64, storage_ix, storage); if num_clusters == 1 { return; } rle_symbols = alloc_or_default::(m, context_map_size); MoveToFrontTransform(context_map, context_map_size, rle_symbols.slice_mut()); RunLengthCodeZeros( context_map_size, rle_symbols.slice_mut(), &mut num_rle_symbols, &mut max_run_length_prefix, ); let mut histogram: [u32; 272] = [0; 272]; for i in 0usize..num_rle_symbols { let _rhs = 1; let _lhs = &mut histogram[(rle_symbols.slice()[i] & kSymbolMask) as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } { let use_rle = max_run_length_prefix > 0; BrotliWriteBits(1, u64::from(use_rle), storage_ix, storage); if use_rle { BrotliWriteBits( 4, max_run_length_prefix.wrapping_sub(1) as (u64), storage_ix, storage, ); } } BuildAndStoreHuffmanTree( &mut histogram[..], num_clusters.wrapping_add(max_run_length_prefix as usize), num_clusters.wrapping_add(max_run_length_prefix as usize), tree, &mut depths[..], &mut bits[..], storage_ix, storage, ); for i in 0usize..num_rle_symbols { let rle_symbol: u32 = rle_symbols.slice()[i] & kSymbolMask; let extra_bits_val: u32 = rle_symbols.slice()[i] >> 9; BrotliWriteBits( depths[rle_symbol as usize], bits[rle_symbol as usize] as (u64), storage_ix, storage, ); if rle_symbol > 0u32 && (rle_symbol <= max_run_length_prefix) { BrotliWriteBits( rle_symbol as u8, extra_bits_val as (u64), storage_ix, storage, ); } } BrotliWriteBits(1, 1, storage_ix, storage); m.free_cell(rle_symbols); } impl + Allocator> BlockEncoder<'_, Alloc> { fn build_and_store_entropy_codes>( &mut self, m: &mut Alloc, histograms: &[HistogramType], histograms_size: usize, alphabet_size: usize, tree: &mut [HuffmanTree], storage_ix: &mut usize, storage: &mut [u8], ) { let table_size: usize = histograms_size.wrapping_mul(self.histogram_length_); self.depths_ = alloc_or_default::(m, table_size); self.bits_ = alloc_or_default::(m, table_size); { for i in 0usize..histograms_size { let ix: usize = i.wrapping_mul(self.histogram_length_); BuildAndStoreHuffmanTree( &(histograms[i]).slice()[0..], self.histogram_length_, alphabet_size, tree, &mut self.depths_.slice_mut()[ix..], &mut self.bits_.slice_mut()[ix..], storage_ix, storage, ); } } } fn store_symbol(&mut self, symbol: usize, storage_ix: &mut usize, storage: &mut [u8]) { if self.block_len_ == 0usize { let block_ix: usize = { self.block_ix_ = self.block_ix_.wrapping_add(1); self.block_ix_ }; let block_len: u32 = self.block_lengths_[block_ix]; let block_type: u8 = self.block_types_[block_ix]; self.block_len_ = block_len as usize; self.entropy_ix_ = (block_type as usize).wrapping_mul(self.histogram_length_); StoreBlockSwitch( &mut self.block_split_code_, block_len, block_type, false, storage_ix, storage, ); } self.block_len_ = self.block_len_.wrapping_sub(1); { let ix: usize = self.entropy_ix_.wrapping_add(symbol); BrotliWriteBits( self.depths_.slice()[ix], self.bits_.slice()[ix] as (u64), storage_ix, storage, ); } } } impl Command { fn copy_len_code(&self) -> u32 { let modifier = self.copy_len_ >> 25; let delta: i32 = ((modifier | ((modifier & 0x40) << 1)) as u8) as i8 as i32; ((self.copy_len_ & 0x01ff_ffff) as i32 + delta) as u32 } } fn GetInsertExtra(inscode: u16) -> u32 { kInsExtra[inscode as usize] } fn GetInsertBase(inscode: u16) -> u32 { kInsBase[inscode as usize] } fn GetCopyBase(copycode: u16) -> u32 { kCopyBase[copycode as usize] } fn GetCopyExtra(copycode: u16) -> u32 { kCopyExtra[copycode as usize] } fn StoreCommandExtra(cmd: &Command, storage_ix: &mut usize, storage: &mut [u8]) { let copylen_code = cmd.copy_len_code(); let inscode: u16 = GetInsertLengthCode(cmd.insert_len_ as usize); let copycode: u16 = GetCopyLengthCode(copylen_code as usize); let insnumextra: u32 = GetInsertExtra(inscode); let insextraval: u64 = cmd.insert_len_.wrapping_sub(GetInsertBase(inscode)) as (u64); let copyextraval: u64 = copylen_code.wrapping_sub(GetCopyBase(copycode)) as (u64); let bits: u64 = copyextraval << insnumextra | insextraval; BrotliWriteBits( insnumextra.wrapping_add(GetCopyExtra(copycode)) as u8, bits, storage_ix, storage, ); } fn Context(p1: u8, p2: u8, mode: ContextType) -> u8 { match mode { ContextType::CONTEXT_LSB6 => (p1 as i32 & 0x3fi32) as u8, ContextType::CONTEXT_MSB6 => (p1 as i32 >> 2) as u8, ContextType::CONTEXT_UTF8 => { (kUTF8ContextLookup[p1 as usize] as i32 | kUTF8ContextLookup[(p2 as i32 + 256i32) as usize] as i32) as u8 } ContextType::CONTEXT_SIGNED => { (((kSigned3BitContextLookup[p1 as usize] as i32) << 3) + kSigned3BitContextLookup[p2 as usize] as i32) as u8 } } // 0u8 } impl + Allocator> BlockEncoder<'_, Alloc> { fn store_symbol_with_context( &mut self, symbol: usize, context: usize, context_map: &[u32], storage_ix: &mut usize, storage: &mut [u8], context_bits: usize, ) { if self.block_len_ == 0 { let block_ix: usize = { self.block_ix_ = self.block_ix_.wrapping_add(1); self.block_ix_ }; let block_len: u32 = self.block_lengths_[block_ix]; let block_type: u8 = self.block_types_[block_ix]; self.block_len_ = block_len as usize; self.entropy_ix_ = (block_type as usize) << context_bits; StoreBlockSwitch( &mut self.block_split_code_, block_len, block_type, false, storage_ix, storage, ); } self.block_len_ = self.block_len_.wrapping_sub(1); { let histo_ix: usize = context_map[self.entropy_ix_.wrapping_add(context)] as usize; let ix: usize = histo_ix .wrapping_mul(self.histogram_length_) .wrapping_add(symbol); BrotliWriteBits( self.depths_.slice()[ix], self.bits_.slice()[ix] as (u64), storage_ix, storage, ); } } } impl + Allocator> BlockEncoder<'_, Alloc> { fn cleanup(&mut self, m: &mut Alloc) { >::free_cell(m, core::mem::take(&mut self.depths_)); >::free_cell(m, core::mem::take(&mut self.bits_)); } } pub fn JumpToByteBoundary(storage_ix: &mut usize, storage: &mut [u8]) { *storage_ix = storage_ix.wrapping_add(7u32 as usize) & !7u32 as usize; storage[(*storage_ix >> 3)] = 0u8; } pub(crate) fn store_meta_block( alloc: &mut Alloc, input: &[u8], start_pos: usize, length: usize, mask: usize, mut prev_byte: u8, mut prev_byte2: u8, is_last: bool, params: &BrotliEncoderParams, literal_context_mode: ContextType, distance_cache: &[i32; kNumDistanceCacheEntries], commands: &[Command], n_commands: usize, mb: &mut MetaBlockSplit, recoder_state: &mut RecoderState, storage_ix: &mut usize, storage: &mut [u8], callback: &mut Cb, ) where Cb: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], InputPair, &mut Alloc, ), { let (input0, input1) = InputPairFromMaskedInput(input, start_pos, length, mask); if params.log_meta_block { LogMetaBlock( alloc, commands.split_at(n_commands).0, input0, input1, distance_cache, recoder_state, block_split_reference(mb), params, Some(literal_context_mode), callback, ); } let mut pos: usize = start_pos; let num_distance_symbols = params.dist.alphabet_size; let mut num_effective_distance_symbols = num_distance_symbols as usize; let _literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode); let mut literal_enc: BlockEncoder; let mut command_enc: BlockEncoder; let mut distance_enc: BlockEncoder; let dist = ¶ms.dist; if params.large_window && num_effective_distance_symbols > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS { num_effective_distance_symbols = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS; } StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); let mut tree = allocate::(alloc, 2 * 704 + 1); literal_enc = BlockEncoder::new( BROTLI_NUM_LITERAL_SYMBOLS, mb.literal_split.num_types, mb.literal_split.types.slice(), mb.literal_split.lengths.slice(), mb.literal_split.num_blocks, ); command_enc = BlockEncoder::new( BROTLI_NUM_COMMAND_SYMBOLS, mb.command_split.num_types, mb.command_split.types.slice(), mb.command_split.lengths.slice(), mb.command_split.num_blocks, ); distance_enc = BlockEncoder::new( num_effective_distance_symbols, mb.distance_split.num_types, mb.distance_split.types.slice(), mb.distance_split.lengths.slice(), mb.distance_split.num_blocks, ); literal_enc.build_and_store_block_switch_entropy_codes(tree.slice_mut(), storage_ix, storage); command_enc.build_and_store_block_switch_entropy_codes(tree.slice_mut(), storage_ix, storage); distance_enc.build_and_store_block_switch_entropy_codes(tree.slice_mut(), storage_ix, storage); BrotliWriteBits(2, dist.distance_postfix_bits as (u64), storage_ix, storage); BrotliWriteBits( 4, (dist.num_direct_distance_codes >> dist.distance_postfix_bits) as (u64), storage_ix, storage, ); for _i in 0usize..mb.literal_split.num_types { BrotliWriteBits(2, literal_context_mode as (u64), storage_ix, storage); } if mb.literal_context_map_size == 0usize { StoreTrivialContextMap( mb.literal_histograms_size, 6, tree.slice_mut(), storage_ix, storage, ); } else { EncodeContextMap( alloc, mb.literal_context_map.slice(), mb.literal_context_map_size, mb.literal_histograms_size, tree.slice_mut(), storage_ix, storage, ); } if mb.distance_context_map_size == 0usize { StoreTrivialContextMap( mb.distance_histograms_size, 2usize, tree.slice_mut(), storage_ix, storage, ); } else { EncodeContextMap( alloc, mb.distance_context_map.slice(), mb.distance_context_map_size, mb.distance_histograms_size, tree.slice_mut(), storage_ix, storage, ); } literal_enc.build_and_store_entropy_codes( alloc, mb.literal_histograms.slice(), mb.literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree.slice_mut(), storage_ix, storage, ); command_enc.build_and_store_entropy_codes( alloc, mb.command_histograms.slice(), mb.command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS, tree.slice_mut(), storage_ix, storage, ); distance_enc.build_and_store_entropy_codes( alloc, mb.distance_histograms.slice(), mb.distance_histograms_size, num_distance_symbols as usize, tree.slice_mut(), storage_ix, storage, ); { >::free_cell(alloc, core::mem::take(&mut tree)); } for i in 0usize..n_commands { let cmd: Command = commands[i]; let cmd_code: usize = cmd.cmd_prefix_ as usize; command_enc.store_symbol(cmd_code, storage_ix, storage); StoreCommandExtra(&cmd, storage_ix, storage); if mb.literal_context_map_size == 0usize { let mut j: usize; j = cmd.insert_len_ as usize; while j != 0usize { { literal_enc.store_symbol(input[(pos & mask)] as usize, storage_ix, storage); pos = pos.wrapping_add(1); } j = j.wrapping_sub(1); } } else { let mut j: usize; j = cmd.insert_len_ as usize; while j != 0usize { { let context: usize = Context(prev_byte, prev_byte2, literal_context_mode) as usize; let literal: u8 = input[(pos & mask)]; literal_enc.store_symbol_with_context( literal as usize, context, mb.literal_context_map.slice(), storage_ix, storage, 6usize, ); prev_byte2 = prev_byte; prev_byte = literal; pos = pos.wrapping_add(1); } j = j.wrapping_sub(1); } } pos = pos.wrapping_add(cmd.copy_len() as usize); if cmd.copy_len() != 0 { prev_byte2 = input[(pos.wrapping_sub(2) & mask)]; prev_byte = input[(pos.wrapping_sub(1) & mask)]; if cmd.cmd_prefix_ as i32 >= 128i32 { let dist_code: usize = cmd.dist_prefix_ as usize & 0x03ff; let distnumextra: u32 = u32::from(cmd.dist_prefix_) >> 10; //FIXME: from command let distextra: u64 = cmd.dist_extra_ as (u64); if mb.distance_context_map_size == 0usize { distance_enc.store_symbol(dist_code, storage_ix, storage); } else { distance_enc.store_symbol_with_context( dist_code, cmd.distance_context() as usize, mb.distance_context_map.slice(), storage_ix, storage, 2usize, ); } BrotliWriteBits(distnumextra as u8, distextra, storage_ix, storage); } } } distance_enc.cleanup(alloc); command_enc.cleanup(alloc); literal_enc.cleanup(alloc); if is_last { JumpToByteBoundary(storage_ix, storage); } } fn BuildHistograms( input: &[u8], start_pos: usize, mask: usize, commands: &[Command], n_commands: usize, lit_histo: &mut HistogramLiteral, cmd_histo: &mut HistogramCommand, dist_histo: &mut HistogramDistance, ) { let mut pos: usize = start_pos; for i in 0usize..n_commands { let cmd: Command = commands[i]; let mut j: usize; HistogramAddItem(cmd_histo, cmd.cmd_prefix_ as usize); j = cmd.insert_len_ as usize; while j != 0usize { { HistogramAddItem(lit_histo, input[(pos & mask)] as usize); pos = pos.wrapping_add(1); } j = j.wrapping_sub(1); } pos = pos.wrapping_add(cmd.copy_len() as usize); if cmd.copy_len() != 0 && cmd.cmd_prefix_ >= 128 { HistogramAddItem(dist_histo, cmd.dist_prefix_ as usize & 0x03ff); } } } fn StoreDataWithHuffmanCodes( input: &[u8], start_pos: usize, mask: usize, commands: &[Command], n_commands: usize, lit_depth: &[u8], lit_bits: &[u16], cmd_depth: &[u8], cmd_bits: &[u16], dist_depth: &[u8], dist_bits: &[u16], storage_ix: &mut usize, storage: &mut [u8], ) { let mut pos: usize = start_pos; for i in 0usize..n_commands { let cmd: Command = commands[i]; let cmd_code: usize = cmd.cmd_prefix_ as usize; let mut j: usize; BrotliWriteBits( cmd_depth[cmd_code], cmd_bits[cmd_code] as (u64), storage_ix, storage, ); StoreCommandExtra(&cmd, storage_ix, storage); j = cmd.insert_len_ as usize; while j != 0usize { { let literal: u8 = input[(pos & mask)]; BrotliWriteBits( lit_depth[(literal as usize)], lit_bits[(literal as usize)] as (u64), storage_ix, storage, ); pos = pos.wrapping_add(1); } j = j.wrapping_sub(1); } pos = pos.wrapping_add(cmd.copy_len() as usize); if cmd.copy_len() != 0 && cmd.cmd_prefix_ >= 128 { let dist_code: usize = cmd.dist_prefix_ as usize & 0x03ff; let distnumextra: u32 = u32::from(cmd.dist_prefix_) >> 10; let distextra: u32 = cmd.dist_extra_; BrotliWriteBits( dist_depth[dist_code], dist_bits[dist_code] as (u64), storage_ix, storage, ); BrotliWriteBits(distnumextra as u8, distextra as (u64), storage_ix, storage); } } } pub(crate) fn store_meta_block_trivial( alloc: &mut Alloc, input: &[u8], start_pos: usize, length: usize, mask: usize, is_last: bool, params: &BrotliEncoderParams, distance_cache: &[i32; kNumDistanceCacheEntries], commands: &[Command], n_commands: usize, recoder_state: &mut RecoderState, storage_ix: &mut usize, storage: &mut [u8], f: &mut Cb, ) where Cb: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], InputPair, &mut Alloc, ), { let (input0, input1) = InputPairFromMaskedInput(input, start_pos, length, mask); if params.log_meta_block { LogMetaBlock( alloc, commands.split_at(n_commands).0, input0, input1, distance_cache, recoder_state, block_split_nop(), params, Some(ContextType::CONTEXT_LSB6), f, ); } let mut lit_histo: HistogramLiteral = HistogramLiteral::default(); let mut cmd_histo: HistogramCommand = HistogramCommand::default(); let mut dist_histo: HistogramDistance = HistogramDistance::default(); let mut lit_depth: [u8; 256] = [0; 256]; let mut lit_bits: [u16; 256] = [0; 256]; let mut cmd_depth: [u8; 704] = [0; 704]; let mut cmd_bits: [u16; 704] = [0; 704]; let mut dist_depth: [u8; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE] = [0; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; let mut dist_bits: [u16; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE] = [0; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; const MAX_HUFFMAN_TREE_SIZE: usize = (2i32 * 704i32 + 1i32) as usize; let mut tree: [HuffmanTree; MAX_HUFFMAN_TREE_SIZE] = [HuffmanTree { total_count_: 0, index_left_: 0, index_right_or_value_: 0, }; MAX_HUFFMAN_TREE_SIZE]; let num_distance_symbols = params.dist.alphabet_size; StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); BuildHistograms( input, start_pos, mask, commands, n_commands, &mut lit_histo, &mut cmd_histo, &mut dist_histo, ); BrotliWriteBits(13, 0, storage_ix, storage); BuildAndStoreHuffmanTree( lit_histo.slice_mut(), BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_NUM_LITERAL_SYMBOLS, &mut tree[..], &mut lit_depth[..], &mut lit_bits[..], storage_ix, storage, ); BuildAndStoreHuffmanTree( cmd_histo.slice_mut(), BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_NUM_COMMAND_SYMBOLS, &mut tree[..], &mut cmd_depth[..], &mut cmd_bits[..], storage_ix, storage, ); BuildAndStoreHuffmanTree( dist_histo.slice_mut(), MAX_SIMPLE_DISTANCE_ALPHABET_SIZE, num_distance_symbols as usize, &mut tree[..], &mut dist_depth[..], &mut dist_bits[..], storage_ix, storage, ); StoreDataWithHuffmanCodes( input, start_pos, mask, commands, n_commands, &mut lit_depth[..], &mut lit_bits[..], &mut cmd_depth[..], &mut cmd_bits[..], &mut dist_depth[..], &mut dist_bits[..], storage_ix, storage, ); if is_last { JumpToByteBoundary(storage_ix, storage); } } fn StoreStaticCommandHuffmanTree(storage_ix: &mut usize, storage: &mut [u8]) { BrotliWriteBits(56, 0x0092_6244_1630_7003, storage_ix, storage); BrotliWriteBits(3, 0, storage_ix, storage); } fn StoreStaticDistanceHuffmanTree(storage_ix: &mut usize, storage: &mut [u8]) { BrotliWriteBits(28, 0x0369_dc03, storage_ix, storage); } struct BlockSplitRef<'a> { types: &'a [u8], lengths: &'a [u32], num_types: u32, } impl<'a> Default for BlockSplitRef<'a> { fn default() -> Self { BlockSplitRef { types: &[], lengths: &[], num_types: 1, } } } #[derive(Default)] struct MetaBlockSplitRefs<'a> { btypel: BlockSplitRef<'a>, literal_context_map: &'a [u32], btypec: BlockSplitRef<'a>, btyped: BlockSplitRef<'a>, distance_context_map: &'a [u32], } fn block_split_nop() -> MetaBlockSplitRefs<'static> { MetaBlockSplitRefs::default() } fn block_split_reference<'a, Alloc: BrotliAlloc>( mb: &'a MetaBlockSplit, ) -> MetaBlockSplitRefs<'a> { return MetaBlockSplitRefs::<'a> { btypel: BlockSplitRef { types: mb .literal_split .types .slice() .split_at(mb.literal_split.num_blocks) .0, lengths: mb .literal_split .lengths .slice() .split_at(mb.literal_split.num_blocks) .0, num_types: mb.literal_split.num_types as u32, }, literal_context_map: mb .literal_context_map .slice() .split_at(mb.literal_context_map_size) .0, btypec: BlockSplitRef { types: mb .command_split .types .slice() .split_at(mb.command_split.num_blocks) .0, lengths: mb .command_split .lengths .slice() .split_at(mb.command_split.num_blocks) .0, num_types: mb.command_split.num_types as u32, }, btyped: BlockSplitRef { types: mb .distance_split .types .slice() .split_at(mb.distance_split.num_blocks) .0, lengths: mb .distance_split .lengths .slice() .split_at(mb.distance_split.num_blocks) .0, num_types: mb.distance_split.num_types as u32, }, distance_context_map: mb .distance_context_map .slice() .split_at(mb.distance_context_map_size) .0, }; } #[derive(Clone, Copy, Default)] pub struct RecoderState { pub num_bytes_encoded: usize, } impl RecoderState { pub fn new() -> Self { Self::default() } } pub(crate) fn store_meta_block_fast( m: &mut Alloc, input: &[u8], start_pos: usize, length: usize, mask: usize, is_last: bool, params: &BrotliEncoderParams, dist_cache: &[i32; kNumDistanceCacheEntries], commands: &[Command], n_commands: usize, recoder_state: &mut RecoderState, storage_ix: &mut usize, storage: &mut [u8], cb: &mut Cb, ) where Cb: FnMut( &mut interface::PredictionModeContextMap, &mut [StaticCommand], InputPair, &mut Alloc, ), { let (input0, input1) = InputPairFromMaskedInput(input, start_pos, length, mask); if params.log_meta_block { LogMetaBlock( m, commands.split_at(n_commands).0, input0, input1, dist_cache, recoder_state, block_split_nop(), params, Some(ContextType::CONTEXT_LSB6), cb, ); } let num_distance_symbols = params.dist.alphabet_size; let distance_alphabet_bits = Log2FloorNonZero(u64::from(num_distance_symbols) - 1) + 1; StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); BrotliWriteBits(13, 0, storage_ix, storage); if n_commands <= 128usize { let mut histogram: [u32; 256] = [0; 256]; let mut pos: usize = start_pos; let mut num_literals: usize = 0usize; let mut lit_depth: [u8; 256] = [0; 256]; let mut lit_bits: [u16; 256] = [0; 256]; for i in 0usize..n_commands { let cmd: Command = commands[i]; let mut j: usize; j = cmd.insert_len_ as usize; while j != 0usize { { { let _rhs = 1; let _lhs = &mut histogram[input[(pos & mask)] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } pos = pos.wrapping_add(1); } j = j.wrapping_sub(1); } num_literals = num_literals.wrapping_add(cmd.insert_len_ as usize); pos = pos.wrapping_add(cmd.copy_len() as usize); } BrotliBuildAndStoreHuffmanTreeFast( m, &mut histogram[..], num_literals, 8usize, &mut lit_depth[..], &mut lit_bits[..], storage_ix, storage, ); StoreStaticCommandHuffmanTree(storage_ix, storage); StoreStaticDistanceHuffmanTree(storage_ix, storage); StoreDataWithHuffmanCodes( input, start_pos, mask, commands, n_commands, &mut lit_depth[..], &mut lit_bits[..], &kStaticCommandCodeDepth[..], &kStaticCommandCodeBits[..], &kStaticDistanceCodeDepth[..], &kStaticDistanceCodeBits[..], storage_ix, storage, ); } else { let mut lit_histo: HistogramLiteral = HistogramLiteral::default(); let mut cmd_histo: HistogramCommand = HistogramCommand::default(); let mut dist_histo: HistogramDistance = HistogramDistance::default(); let mut lit_depth: [u8; 256] = [0; 256]; let mut lit_bits: [u16; 256] = [0; 256]; let mut cmd_depth: [u8; 704] = [0; 704]; let mut cmd_bits: [u16; 704] = [0; 704]; let mut dist_depth: [u8; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE] = [0; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; let mut dist_bits: [u16; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE] = [0; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; BuildHistograms( input, start_pos, mask, commands, n_commands, &mut lit_histo, &mut cmd_histo, &mut dist_histo, ); BrotliBuildAndStoreHuffmanTreeFast( m, lit_histo.slice(), lit_histo.total_count_, 8usize, &mut lit_depth[..], &mut lit_bits[..], storage_ix, storage, ); BrotliBuildAndStoreHuffmanTreeFast( m, cmd_histo.slice(), cmd_histo.total_count_, 10usize, &mut cmd_depth[..], &mut cmd_bits[..], storage_ix, storage, ); BrotliBuildAndStoreHuffmanTreeFast( m, dist_histo.slice(), dist_histo.total_count_, distance_alphabet_bits as usize, &mut dist_depth[..], &mut dist_bits[..], storage_ix, storage, ); StoreDataWithHuffmanCodes( input, start_pos, mask, commands, n_commands, &mut lit_depth[..], &mut lit_bits[..], &mut cmd_depth[..], &mut cmd_bits[..], &mut dist_depth[..], &mut dist_bits[..], storage_ix, storage, ); } if is_last { JumpToByteBoundary(storage_ix, storage); } } fn BrotliStoreUncompressedMetaBlockHeader( length: usize, storage_ix: &mut usize, storage: &mut [u8], ) { let mut lenbits: u64 = 0; let mut nlenbits: u32 = 0; let mut nibblesbits: u32 = 0; BrotliWriteBits(1, 0, storage_ix, storage); BrotliEncodeMlen(length as u32, &mut lenbits, &mut nlenbits, &mut nibblesbits); BrotliWriteBits(2, nibblesbits as u64, storage_ix, storage); BrotliWriteBits(nlenbits as u8, lenbits, storage_ix, storage); BrotliWriteBits(1, 1, storage_ix, storage); } fn InputPairFromMaskedInput( input: &[u8], position: usize, len: usize, mask: usize, ) -> (&[u8], &[u8]) { let masked_pos: usize = position & mask; if masked_pos.wrapping_add(len) > mask.wrapping_add(1) { let len1: usize = mask.wrapping_add(1).wrapping_sub(masked_pos); return ( &input[masked_pos..(masked_pos + len1)], &input[0..len.wrapping_sub(len1)], ); } (&input[masked_pos..masked_pos + len], &[]) } pub(crate) fn store_uncompressed_meta_block( alloc: &mut Alloc, is_final_block: bool, input: &[u8], position: usize, mask: usize, params: &BrotliEncoderParams, len: usize, recoder_state: &mut RecoderState, storage_ix: &mut usize, storage: &mut [u8], suppress_meta_block_logging: bool, cb: &mut Cb, ) where Cb: FnMut( &mut interface::PredictionModeContextMap, &mut [StaticCommand], InputPair, &mut Alloc, ), { let (input0, input1) = InputPairFromMaskedInput(input, position, len, mask); BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage); JumpToByteBoundary(storage_ix, storage); let dst_start0 = (*storage_ix >> 3); storage[dst_start0..(dst_start0 + input0.len())].clone_from_slice(input0); *storage_ix = storage_ix.wrapping_add(input0.len() << 3); let dst_start1 = (*storage_ix >> 3); storage[dst_start1..(dst_start1 + input1.len())].clone_from_slice(input1); *storage_ix = storage_ix.wrapping_add(input1.len() << 3); BrotliWriteBitsPrepareStorage(*storage_ix, storage); if params.log_meta_block && !suppress_meta_block_logging { let cmds = [Command { insert_len_: len as u32, copy_len_: 0, dist_extra_: 0, cmd_prefix_: 0, dist_prefix_: 0, }]; LogMetaBlock( alloc, &cmds, input0, input1, &[0, 0, 0, 0], recoder_state, block_split_nop(), params, None, cb, ); } if is_final_block { BrotliWriteBits(1u8, 1u64, storage_ix, storage); BrotliWriteBits(1u8, 1u64, storage_ix, storage); JumpToByteBoundary(storage_ix, storage); } } pub fn BrotliStoreSyncMetaBlock(storage_ix: &mut usize, storage: &mut [u8]) { BrotliWriteBits(6, 6, storage_ix, storage); JumpToByteBoundary(storage_ix, storage); } pub fn BrotliWriteEmptyLastMetaBlock(storage_ix: &mut usize, storage: &mut [u8]) { BrotliWriteBits(1u8, 1u64, storage_ix, storage); BrotliWriteBits(1u8, 1u64, storage_ix, storage); JumpToByteBoundary(storage_ix, storage); } const MAX_SIZE_ENCODING: usize = 10; fn encode_base_128(mut value: u64) -> (usize, [u8; MAX_SIZE_ENCODING]) { let mut ret = [0u8; MAX_SIZE_ENCODING]; for index in 0..ret.len() { ret[index] = (value & 0x7f) as u8; value >>= 7; if value != 0 { ret[index] |= 0x80; } else { return (index + 1, ret); } } (ret.len(), ret) } pub fn BrotliWriteMetadataMetaBlock( params: &BrotliEncoderParams, storage_ix: &mut usize, storage: &mut [u8], ) { BrotliWriteBits(1u8, 0u64, storage_ix, storage); // not last BrotliWriteBits(2u8, 3u64, storage_ix, storage); // MNIBBLES = 0 (pattern 1,1) BrotliWriteBits(1u8, 0u64, storage_ix, storage); // reserved BrotliWriteBits(2u8, 1u64, storage_ix, storage); // num bytes for length of magic number header let (size_hint_count, size_hint_b128) = encode_base_128(params.size_hint as u64); BrotliWriteBits(8u8, 3 + size_hint_count as u64, storage_ix, storage); // 1 byte of data: writing 12 for the magic number header JumpToByteBoundary(storage_ix, storage); let magic_number: [u8; 3] = if params.catable && !params.use_dictionary { [0xe1, 0x97, 0x81] } else if params.appendable { [0xe1, 0x97, 0x82] } else { [0xe1, 0x97, 0x80] }; for magic in magic_number.iter() { BrotliWriteBits(8u8, u64::from(*magic), storage_ix, storage); } BrotliWriteBits(8u8, u64::from(VERSION), storage_ix, storage); for sh in size_hint_b128[..size_hint_count].iter() { BrotliWriteBits(8u8, u64::from(*sh), storage_ix, storage); } } #[cfg(test)] mod test { use crate::enc::brotli_bit_stream::{encode_base_128, MAX_SIZE_ENCODING}; #[test] fn test_encode_base_128() { assert_eq!(encode_base_128(0), (1, [0u8; MAX_SIZE_ENCODING])); assert_eq!(encode_base_128(1), (1, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0])); assert_eq!(encode_base_128(127), (1, [0x7f, 0, 0, 0, 0, 0, 0, 0, 0, 0])); assert_eq!( encode_base_128(128), (2, [0x80, 0x1, 0, 0, 0, 0, 0, 0, 0, 0]) ); assert_eq!( encode_base_128(16383), (2, [0xff, 0x7f, 0, 0, 0, 0, 0, 0, 0, 0]) ); assert_eq!( encode_base_128(16384), (3, [0x80, 0x80, 0x1, 0, 0, 0, 0, 0, 0, 0]) ); assert_eq!( encode_base_128(2097151), (3, [0xff, 0xff, 0x7f, 0, 0, 0, 0, 0, 0, 0]) ); assert_eq!( encode_base_128(2097152), (4, [0x80, 0x80, 0x80, 0x1, 0, 0, 0, 0, 0, 0]) ); assert_eq!( encode_base_128(4194303), (4, [0xff, 0xff, 0xff, 0x1, 0, 0, 0, 0, 0, 0]) ); assert_eq!( encode_base_128(4294967295), (5, [0xff, 0xff, 0xff, 0xff, 0xf, 0, 0, 0, 0, 0]) ); assert_eq!( encode_base_128(4294967296), (5, [0x80, 0x80, 0x80, 0x80, 0x10, 0, 0, 0, 0, 0]) ); assert_eq!( encode_base_128(9223372036854775808), ( 10, [0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x1] ) ); assert_eq!( encode_base_128(18446744073709551615), ( 10, [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1] ) ); } } brotli-8.0.2/src/enc/cluster.rs000064400000000000000000000402021046102023000145070ustar 00000000000000use alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use core::cmp::min; use {alloc, core}; use super::bit_cost::BrotliPopulationCost; use super::histogram::{ CostAccessors, HistogramAddHistogram, HistogramClear, HistogramSelfAddHistogram, }; use super::util::FastLog2; use crate::enc::combined_alloc::{alloc_or_default, allocate}; #[derive(Clone, Copy)] pub struct HistogramPair { pub idx1: u32, pub idx2: u32, pub cost_combo: super::util::floatX, pub cost_diff: super::util::floatX, } impl Default for HistogramPair { #[inline(always)] fn default() -> HistogramPair { HistogramPair { idx1: 0, idx2: 0, cost_combo: 0.0, cost_diff: 0.0, } } } /* Returns entropy reduction of the context map when we combine two clusters. */ #[inline(always)] fn ClusterCostDiff(size_a: usize, size_b: usize) -> super::util::floatX { let size_c: usize = size_a.wrapping_add(size_b); size_a as (super::util::floatX) * FastLog2(size_a as u64) + size_b as (super::util::floatX) * FastLog2(size_b as u64) - size_c as (super::util::floatX) * FastLog2(size_c as u64) } #[inline(always)] fn HistogramPairIsLess(p1: &HistogramPair, p2: &HistogramPair) -> bool { if p1.cost_diff != p2.cost_diff { p1.cost_diff > p2.cost_diff } else { p1.idx2.wrapping_sub(p1.idx1) > p2.idx2.wrapping_sub(p2.idx1) } } /* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */ fn BrotliCompareAndPushToQueue< HistogramType: SliceWrapperMut + SliceWrapper + CostAccessors + Clone, >( out: &[HistogramType], cluster_size: &[u32], mut idx1: u32, mut idx2: u32, max_num_pairs: usize, scratch_space: &mut HistogramType::i32vec, pairs: &mut [HistogramPair], num_pairs: &mut usize, ) { let mut is_good_pair = false; let mut p: HistogramPair = HistogramPair { idx1: 0, idx2: 0, cost_combo: 0.0, cost_diff: 0.0, }; if idx1 == idx2 { } else { if idx2 < idx1 { core::mem::swap(&mut idx2, &mut idx1); } p.idx1 = idx1; p.idx2 = idx2; p.cost_diff = 0.5 * ClusterCostDiff( cluster_size[idx1 as usize] as usize, cluster_size[idx2 as usize] as usize, ); p.cost_diff -= (out[idx1 as usize]).bit_cost(); p.cost_diff -= (out[idx2 as usize]).bit_cost(); if (out[idx1 as usize]).total_count() == 0usize { p.cost_combo = (out[idx2 as usize]).bit_cost(); is_good_pair = true; } else if (out[idx2 as usize]).total_count() == 0usize { p.cost_combo = (out[idx1 as usize]).bit_cost(); is_good_pair = true; } else { let threshold = if *num_pairs == 0 { 1e38 } else { pairs[0].cost_diff.max(0.0) }; let mut combo: HistogramType = out[idx1 as usize].clone(); HistogramAddHistogram(&mut combo, &out[idx2 as usize]); let cost_combo: super::util::floatX = BrotliPopulationCost(&combo, scratch_space); if cost_combo < threshold - p.cost_diff { p.cost_combo = cost_combo; is_good_pair = true; } } if is_good_pair { p.cost_diff += p.cost_combo; if *num_pairs > 0usize && HistogramPairIsLess(&pairs[0], &p) { /* Replace the top of the queue if needed. */ if *num_pairs < max_num_pairs { pairs[*num_pairs] = pairs[0]; *num_pairs = num_pairs.wrapping_add(1); } pairs[0] = p; } else if *num_pairs < max_num_pairs { pairs[*num_pairs] = p; *num_pairs = num_pairs.wrapping_add(1); } } } } pub fn BrotliHistogramCombine< HistogramType: SliceWrapperMut + SliceWrapper + CostAccessors + Clone, >( out: &mut [HistogramType], cluster_size: &mut [u32], symbols: &mut [u32], clusters: &mut [u32], pairs: &mut [HistogramPair], mut num_clusters: usize, symbols_size: usize, max_clusters: usize, max_num_pairs: usize, scratch_space: &mut HistogramType::i32vec, ) -> usize { let mut cost_diff_threshold: super::util::floatX = 0.0; let mut min_cluster_size: usize = 1; let mut num_pairs: usize = 0usize; { /* We maintain a vector of histogram pairs, with the property that the pair with the maximum bit cost reduction is the first. */ for idx1 in 0..num_clusters { for idx2 in idx1 + 1..num_clusters { BrotliCompareAndPushToQueue( out, cluster_size, clusters[idx1], clusters[idx2], max_num_pairs, scratch_space, pairs, &mut num_pairs, ); } } } while num_clusters > min_cluster_size { let mut i: usize; if (pairs[0]).cost_diff >= cost_diff_threshold { cost_diff_threshold = 1e38; min_cluster_size = max_clusters; { continue; } } /* Take the best pair from the top of heap. */ let best_idx1: u32 = (pairs[0]).idx1; let best_idx2: u32 = (pairs[0]).idx2; HistogramSelfAddHistogram(out, (best_idx1 as usize), (best_idx2 as usize)); (out[(best_idx1 as usize)]).set_bit_cost((pairs[0]).cost_combo); { let _rhs = cluster_size[(best_idx2 as usize)]; let _lhs = &mut cluster_size[(best_idx1 as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs); } for i in 0usize..symbols_size { if symbols[i] == best_idx2 { symbols[i] = best_idx1; } } i = 0usize; 'break9: while i < num_clusters { { if clusters[i] == best_idx2 { for offset in 0..(num_clusters - i - 1) { clusters[i + offset] = clusters[i + 1 + offset]; } break 'break9; } } i = i.wrapping_add(1); } num_clusters = num_clusters.wrapping_sub(1); { /* Remove pairs intersecting the just combined best pair. */ let mut copy_to_idx: usize = 0usize; i = 0usize; while i < num_pairs { 'continue12: loop { { let p: HistogramPair = pairs[i]; if (p).idx1 == best_idx1 || (p).idx2 == best_idx1 || (p).idx1 == best_idx2 || (p).idx2 == best_idx2 { /* Remove invalid pair from the queue. */ break 'continue12; } if HistogramPairIsLess(&pairs[0], &p) { /* Replace the top of the queue if needed. */ let front: HistogramPair = pairs[0]; pairs[0] = p; pairs[copy_to_idx] = front; } else { pairs[copy_to_idx] = p; } copy_to_idx = copy_to_idx.wrapping_add(1); } break; } i = i.wrapping_add(1); } num_pairs = copy_to_idx; } for i in 0usize..num_clusters { BrotliCompareAndPushToQueue( out, cluster_size, best_idx1, clusters[i], max_num_pairs, scratch_space, pairs, &mut num_pairs, ); } } num_clusters } /* What is the bit cost of moving histogram from cur_symbol to candidate. */ #[inline(always)] pub fn BrotliHistogramBitCostDistance< HistogramType: SliceWrapperMut + SliceWrapper + CostAccessors + Clone, >( histogram: &HistogramType, candidate: &HistogramType, scratch_space: &mut HistogramType::i32vec, ) -> super::util::floatX { if histogram.total_count() == 0usize { 0.0 } else { let mut tmp: HistogramType = histogram.clone(); HistogramAddHistogram(&mut tmp, candidate); BrotliPopulationCost(&tmp, scratch_space) - candidate.bit_cost() } } /* Find the best 'out' histogram for each of the 'in' histograms. When called, clusters[0..num_clusters) contains the unique values from symbols[0..in_size), but this property is not preserved in this function. Note: we assume that out[]->bit_cost_ is already up-to-date. */ pub fn BrotliHistogramRemap< HistogramType: SliceWrapperMut + SliceWrapper + CostAccessors + Clone, >( inp: &[HistogramType], in_size: usize, clusters: &[u32], num_clusters: usize, scratch_space: &mut HistogramType::i32vec, out: &mut [HistogramType], symbols: &mut [u32], ) { for i in 0usize..in_size { let mut best_out: u32 = if i == 0usize { symbols[0] } else { symbols[i.wrapping_sub(1)] }; let mut best_bits: super::util::floatX = BrotliHistogramBitCostDistance(&inp[i], &mut out[(best_out as usize)], scratch_space); for j in 0usize..num_clusters { let cur_bits: super::util::floatX = BrotliHistogramBitCostDistance( &inp[i], &mut out[(clusters[j] as usize)], scratch_space, ); if cur_bits < best_bits { best_bits = cur_bits; best_out = clusters[j]; } } symbols[i] = best_out; } for i in 0usize..num_clusters { HistogramClear(&mut out[(clusters[i] as usize)]); } for i in 0usize..in_size { HistogramAddHistogram(&mut out[(symbols[i] as usize)], &inp[i]); } } /* Reorders elements of the out[0..length) array and changes values in symbols[0..length) array in the following way: * when called, symbols[] contains indexes into out[], and has N unique values (possibly N < length) * on return, symbols'[i] = f(symbols[i]) and out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length, where f is a bijection between the range of symbols[] and [0..N), and the first occurrences of values in symbols'[i] come in consecutive increasing order. Returns N, the number of unique values in symbols[]. */ pub fn BrotliHistogramReindex< HistogramType: SliceWrapperMut + SliceWrapper + CostAccessors + Clone, Alloc: alloc::Allocator + alloc::Allocator, >( alloc: &mut Alloc, out: &mut [HistogramType], symbols: &mut [u32], length: usize, ) -> usize { static kInvalidIndex: u32 = u32::MAX; let mut new_index = alloc_or_default::(alloc, length); let mut next_index: u32; let mut tmp: >::AllocatedMemory; for i in 0usize..length { new_index.slice_mut()[i] = kInvalidIndex; } next_index = 0u32; for i in 0usize..length { if new_index.slice()[(symbols[i] as usize)] == kInvalidIndex { new_index.slice_mut()[(symbols[i] as usize)] = next_index; next_index = next_index.wrapping_add(1); } } tmp = alloc_or_default::(alloc, next_index as usize); next_index = 0u32; for i in 0usize..length { if new_index.slice()[(symbols[i] as usize)] == next_index { tmp.slice_mut()[(next_index as usize)] = out[(symbols[i] as usize)].clone(); next_index = next_index.wrapping_add(1); } symbols[i] = new_index.slice()[(symbols[i] as usize)]; } { >::free_cell(alloc, new_index); } for i in 0usize..next_index as usize { out[i] = tmp.slice()[i].clone(); } { >::free_cell(alloc, tmp) } next_index as usize } pub fn BrotliClusterHistograms< HistogramType: SliceWrapperMut + SliceWrapper + CostAccessors + Clone, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator, >( alloc: &mut Alloc, inp: &[HistogramType], in_size: usize, max_histograms: usize, scratch_space: &mut HistogramType::i32vec, out: &mut [HistogramType], out_size: &mut usize, histogram_symbols: &mut [u32], ) { let mut cluster_size = alloc_or_default::(alloc, in_size); let mut clusters = alloc_or_default::(alloc, in_size); let mut num_clusters: usize = 0usize; let max_input_histograms: usize = 64usize; let pairs_capacity: usize = max_input_histograms .wrapping_mul(max_input_histograms) .wrapping_div(2); let mut pairs = allocate::(alloc, pairs_capacity.wrapping_add(1)); let mut i: usize; for i in 0usize..in_size { cluster_size.slice_mut()[i] = 1u32; } for i in 0usize..in_size { out[i] = inp[i].clone(); (out[i]).set_bit_cost(BrotliPopulationCost(&inp[i], scratch_space)); histogram_symbols[i] = i as u32; } i = 0usize; while i < in_size { { let num_to_combine: usize = min(in_size.wrapping_sub(i), max_input_histograms); for j in 0usize..num_to_combine { clusters.slice_mut()[num_clusters.wrapping_add(j)] = i.wrapping_add(j) as u32; } let num_new_clusters: usize = BrotliHistogramCombine( out, cluster_size.slice_mut(), &mut histogram_symbols[i..], &mut clusters.slice_mut()[num_clusters..], pairs.slice_mut(), num_to_combine, num_to_combine, max_histograms, pairs_capacity, scratch_space, ); num_clusters = num_clusters.wrapping_add(num_new_clusters); } i = i.wrapping_add(max_input_histograms); } { let max_num_pairs: usize = min( (64usize).wrapping_mul(num_clusters), num_clusters.wrapping_div(2).wrapping_mul(num_clusters), ); { if pairs_capacity < max_num_pairs.wrapping_add(1) { let mut _new_size: usize = if pairs_capacity == 0usize { max_num_pairs.wrapping_add(1) } else { pairs_capacity }; let mut new_array: >::AllocatedMemory; while _new_size < max_num_pairs.wrapping_add(1) { _new_size = _new_size.wrapping_mul(2); } new_array = alloc_or_default::(alloc, _new_size); new_array.slice_mut()[..pairs_capacity] .clone_from_slice(&pairs.slice()[..pairs_capacity]); >::free_cell( alloc, core::mem::replace(&mut pairs, new_array), ); } } num_clusters = BrotliHistogramCombine( out, cluster_size.slice_mut(), histogram_symbols, clusters.slice_mut(), pairs.slice_mut(), num_clusters, in_size, max_histograms, max_num_pairs, scratch_space, ); } >::free_cell(alloc, pairs); >::free_cell(alloc, cluster_size); BrotliHistogramRemap( inp, in_size, clusters.slice(), num_clusters, scratch_space, out, histogram_symbols, ); >::free_cell(alloc, clusters); *out_size = BrotliHistogramReindex(alloc, out, histogram_symbols, in_size); } /////////// DONE ////////////////////////// brotli-8.0.2/src/enc/combined_alloc.rs000064400000000000000000000417271046102023000157750ustar 00000000000000pub use alloc::Allocator; #[cfg(feature = "std")] use alloc_stdlib::StandardAlloc; use super::cluster::HistogramPair; use super::command::Command; use super::entropy_encode::HuffmanTree; use super::hash_to_binary_tree::ZopfliNode; use super::histogram::{ContextType, HistogramCommand, HistogramDistance, HistogramLiteral}; use super::interface::StaticCommand; use super::util::floatX; use super::{s16, v8, PDF}; /* struct CombiningAllocator, AllocT2:Allocator>(AllocT1, AllocT2); impl , AllocT2:Allocator> CombiningAllocator { pub fn new(a: AllocT1, b: AllocT2) -> Self { CombiningAllocator(a, b) } } impl , AllocT2:Allocator> Allocator for CombiningAllocator { } impl , AllocT2:Allocator> Allocator for CombiningAllocator { } */ pub trait BrotliAlloc: Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator { } #[cfg(feature = "std")] impl BrotliAlloc for StandardAlloc {} pub struct CombiningAllocator< AllocU8: Allocator, AllocU16: Allocator, AllocI32: Allocator, AllocU32: Allocator, AllocU64: Allocator, AllocCommand: Allocator, AllocFloatX: Allocator, AllocV8: Allocator, AllocS16: Allocator, AllocPDF: Allocator, AllocStaticCommand: Allocator, AllocHistogramLiteral: Allocator, AllocHistogramCommand: Allocator, AllocHistogramDistance: Allocator, AllocHistogramPair: Allocator, AllocContextType: Allocator, AllocHuffmanTree: Allocator, AllocZopfliNode: Allocator, > { alloc_u8: AllocU8, alloc_u16: AllocU16, alloc_i32: AllocI32, alloc_u32: AllocU32, alloc_u64: AllocU64, alloc_c: AllocCommand, alloc_f: AllocFloatX, alloc_f32x8: AllocV8, alloc_i16x16: AllocS16, alloc_pdf: AllocPDF, alloc_sc: AllocStaticCommand, alloc_hl: AllocHistogramLiteral, alloc_hc: AllocHistogramCommand, alloc_hd: AllocHistogramDistance, alloc_hp: AllocHistogramPair, alloc_ct: AllocContextType, alloc_ht: AllocHuffmanTree, alloc_zn: AllocZopfliNode, } impl< AllocU8: Allocator, AllocU16: Allocator, AllocI32: Allocator, AllocU32: Allocator, AllocU64: Allocator, AllocCommand: Allocator, AllocFloatX: Allocator, AllocV8: Allocator, AllocS16: Allocator, AllocPDF: Allocator, AllocStaticCommand: Allocator, AllocHistogramLiteral: Allocator, AllocHistogramCommand: Allocator, AllocHistogramDistance: Allocator, AllocHistogramPair: Allocator, AllocContextType: Allocator, AllocHuffmanTree: Allocator, AllocZopfliNode: Allocator, > CombiningAllocator< AllocU8, AllocU16, AllocI32, AllocU32, AllocU64, AllocCommand, AllocFloatX, AllocV8, AllocS16, AllocPDF, AllocStaticCommand, AllocHistogramLiteral, AllocHistogramCommand, AllocHistogramDistance, AllocHistogramPair, AllocContextType, AllocHuffmanTree, AllocZopfliNode, > { pub fn new( alloc_u8: AllocU8, alloc_u16: AllocU16, alloc_i32: AllocI32, alloc_u32: AllocU32, alloc_u64: AllocU64, alloc_c: AllocCommand, alloc_f: AllocFloatX, alloc_f32x8: AllocV8, alloc_i16x16: AllocS16, alloc_pdf: AllocPDF, alloc_sc: AllocStaticCommand, alloc_hl: AllocHistogramLiteral, alloc_hc: AllocHistogramCommand, alloc_hd: AllocHistogramDistance, alloc_hp: AllocHistogramPair, alloc_ct: AllocContextType, alloc_ht: AllocHuffmanTree, alloc_zn: AllocZopfliNode, ) -> Self { CombiningAllocator { alloc_u8, alloc_u16, alloc_i32, alloc_u32, alloc_u64, alloc_c, alloc_f, alloc_f32x8, alloc_i16x16, alloc_pdf, alloc_sc, alloc_hl, alloc_hc, alloc_hd, alloc_hp, alloc_ct, alloc_ht, alloc_zn, } } } impl< AllocU8: Allocator, AllocU16: Allocator, AllocI32: Allocator, AllocU32: Allocator, AllocU64: Allocator, AllocCommand: Allocator, AllocFloatX: Allocator, AllocV8: Allocator, AllocS16: Allocator, AllocPDF: Allocator, AllocStaticCommand: Allocator, AllocHistogramLiteral: Allocator, AllocHistogramCommand: Allocator, AllocHistogramDistance: Allocator, AllocHistogramPair: Allocator, AllocContextType: Allocator, AllocHuffmanTree: Allocator, AllocZopfliNode: Allocator, > BrotliAlloc for CombiningAllocator< AllocU8, AllocU16, AllocI32, AllocU32, AllocU64, AllocCommand, AllocFloatX, AllocV8, AllocS16, AllocPDF, AllocStaticCommand, AllocHistogramLiteral, AllocHistogramCommand, AllocHistogramDistance, AllocHistogramPair, AllocContextType, AllocHuffmanTree, AllocZopfliNode, > { } impl< AllocU8: Allocator + Default, AllocU16: Allocator + Default, AllocI32: Allocator + Default, AllocU32: Allocator + Default, AllocU64: Allocator + Default, AllocCommand: Allocator + Default, AllocFloatX: Allocator + Default, AllocV8: Allocator + Default, AllocS16: Allocator + Default, AllocPDF: Allocator + Default, AllocStaticCommand: Allocator + Default, AllocHistogramLiteral: Allocator + Default, AllocHistogramCommand: Allocator + Default, AllocHistogramDistance: Allocator + Default, AllocHistogramPair: Allocator + Default, AllocContextType: Allocator + Default, AllocHuffmanTree: Allocator + Default, AllocZopfliNode: Allocator + Default, > Default for CombiningAllocator< AllocU8, AllocU16, AllocI32, AllocU32, AllocU64, AllocCommand, AllocFloatX, AllocV8, AllocS16, AllocPDF, AllocStaticCommand, AllocHistogramLiteral, AllocHistogramCommand, AllocHistogramDistance, AllocHistogramPair, AllocContextType, AllocHuffmanTree, AllocZopfliNode, > { fn default() -> Self { CombiningAllocator { alloc_u8: AllocU8::default(), alloc_u16: AllocU16::default(), alloc_i32: AllocI32::default(), alloc_u32: AllocU32::default(), alloc_u64: AllocU64::default(), alloc_c: AllocCommand::default(), alloc_f: AllocFloatX::default(), alloc_f32x8: AllocV8::default(), alloc_i16x16: AllocS16::default(), alloc_pdf: AllocPDF::default(), alloc_sc: AllocStaticCommand::default(), alloc_hl: AllocHistogramLiteral::default(), alloc_hc: AllocHistogramCommand::default(), alloc_hd: AllocHistogramDistance::default(), alloc_hp: AllocHistogramPair::default(), alloc_ct: AllocContextType::default(), alloc_ht: AllocHuffmanTree::default(), alloc_zn: AllocZopfliNode::default(), } } } impl< AllocU8: Allocator + Clone, AllocU16: Allocator + Clone, AllocI32: Allocator + Clone, AllocU32: Allocator + Clone, AllocU64: Allocator + Clone, AllocCommand: Allocator + Clone, AllocFloatX: Allocator + Clone, AllocV8: Allocator + Clone, AllocS16: Allocator + Clone, AllocPDF: Allocator + Clone, AllocStaticCommand: Allocator + Clone, AllocHistogramLiteral: Allocator + Clone, AllocHistogramCommand: Allocator + Clone, AllocHistogramDistance: Allocator + Clone, AllocHistogramPair: Allocator + Clone, AllocContextType: Allocator + Clone, AllocHuffmanTree: Allocator + Clone, AllocZopfliNode: Allocator + Clone, > Clone for CombiningAllocator< AllocU8, AllocU16, AllocI32, AllocU32, AllocU64, AllocCommand, AllocFloatX, AllocV8, AllocS16, AllocPDF, AllocStaticCommand, AllocHistogramLiteral, AllocHistogramCommand, AllocHistogramDistance, AllocHistogramPair, AllocContextType, AllocHuffmanTree, AllocZopfliNode, > { fn clone(&self) -> Self { CombiningAllocator { alloc_u8: self.alloc_u8.clone(), alloc_u16: self.alloc_u16.clone(), alloc_i32: self.alloc_i32.clone(), alloc_u32: self.alloc_u32.clone(), alloc_u64: self.alloc_u64.clone(), alloc_c: self.alloc_c.clone(), alloc_f: self.alloc_f.clone(), alloc_f32x8: self.alloc_f32x8.clone(), alloc_i16x16: self.alloc_i16x16.clone(), alloc_pdf: self.alloc_pdf.clone(), alloc_sc: self.alloc_sc.clone(), alloc_hl: self.alloc_hl.clone(), alloc_hc: self.alloc_hc.clone(), alloc_hd: self.alloc_hd.clone(), alloc_hp: self.alloc_hp.clone(), alloc_ct: self.alloc_ct.clone(), alloc_ht: self.alloc_ht.clone(), alloc_zn: self.alloc_zn.clone(), } } } impl< AllocU8: Allocator + Copy, AllocU16: Allocator + Copy, AllocI32: Allocator + Copy, AllocU32: Allocator + Copy, AllocU64: Allocator + Copy, AllocCommand: Allocator + Copy, AllocFloatX: Allocator + Copy, AllocV8: Allocator + Copy, AllocS16: Allocator + Copy, AllocPDF: Allocator + Copy, AllocStaticCommand: Allocator + Copy, AllocHistogramLiteral: Allocator + Copy, AllocHistogramCommand: Allocator + Copy, AllocHistogramDistance: Allocator + Copy, AllocHistogramPair: Allocator + Copy, AllocContextType: Allocator + Copy, AllocHuffmanTree: Allocator + Copy, AllocZopfliNode: Allocator + Copy, > Copy for CombiningAllocator< AllocU8, AllocU16, AllocI32, AllocU32, AllocU64, AllocCommand, AllocFloatX, AllocV8, AllocS16, AllocPDF, AllocStaticCommand, AllocHistogramLiteral, AllocHistogramCommand, AllocHistogramDistance, AllocHistogramPair, AllocContextType, AllocHuffmanTree, AllocZopfliNode, > { } macro_rules! implement_allocator { ($bound_name: ty, $type_name: ty, $sub_type_name: ty, $local_name: ident) => { impl< AllocU8: Allocator, AllocU16: Allocator, AllocI32: Allocator, AllocU32: Allocator, AllocU64: Allocator, AllocCommand: Allocator, AllocFloatX: Allocator, AllocV8: Allocator, AllocS16: Allocator, AllocPDF: Allocator, AllocStaticCommand: Allocator, AllocHistogramLiteral: Allocator, AllocHistogramCommand: Allocator, AllocHistogramDistance: Allocator, AllocHistogramPair: Allocator, AllocContextType: Allocator, AllocHuffmanTree: Allocator, AllocZopfliNode: Allocator, > Allocator<$type_name> for CombiningAllocator< AllocU8, AllocU16, AllocI32, AllocU32, AllocU64, AllocCommand, AllocFloatX, AllocV8, AllocS16, AllocPDF, AllocStaticCommand, AllocHistogramLiteral, AllocHistogramCommand, AllocHistogramDistance, AllocHistogramPair, AllocContextType, AllocHuffmanTree, AllocZopfliNode, > { type AllocatedMemory = $sub_type_name; fn alloc_cell( &mut self, size: usize, ) -> >::AllocatedMemory { self.$local_name.alloc_cell(size) } fn free_cell(&mut self, data: >::AllocatedMemory) { self.$local_name.free_cell(data) } } }; } implement_allocator!(AllocU8, u8, AllocU8::AllocatedMemory, alloc_u8); implement_allocator!(AllocU16, u16, AllocU16::AllocatedMemory, alloc_u16); implement_allocator!(AllocI32, i32, AllocI32::AllocatedMemory, alloc_i32); implement_allocator!(AllocU32, u32, AllocU32::AllocatedMemory, alloc_u32); implement_allocator!(AllocU64, u64, AllocU64::AllocatedMemory, alloc_u64); implement_allocator!( AllocCommand, Command, AllocCommand::AllocatedMemory, alloc_c ); implement_allocator!(AllocFloatX, floatX, AllocFloatX::AllocatedMemory, alloc_f); implement_allocator!(AllocV8, v8, AllocV8::AllocatedMemory, alloc_f32x8); implement_allocator!(AllocS16, s16, AllocS16::AllocatedMemory, alloc_i16x16); implement_allocator!(AllocPDF, PDF, AllocPDF::AllocatedMemory, alloc_pdf); implement_allocator!( AllocStaticCommand, StaticCommand, AllocStaticCommand::AllocatedMemory, alloc_sc ); implement_allocator!( AllocHistogramLiteral, HistogramLiteral, AllocHistogramLiteral::AllocatedMemory, alloc_hl ); implement_allocator!( AllocHistogramCommand, HistogramCommand, AllocHistogramCommand::AllocatedMemory, alloc_hc ); implement_allocator!( AllocHistogramDistance, HistogramDistance, AllocHistogramDistance::AllocatedMemory, alloc_hd ); implement_allocator!( AllocHistogramPair, HistogramPair, AllocHistogramPair::AllocatedMemory, alloc_hp ); implement_allocator!( AllocContextType, ContextType, AllocContextType::AllocatedMemory, alloc_ct ); implement_allocator!( AllocHuffmanTree, HuffmanTree, AllocHuffmanTree::AllocatedMemory, alloc_ht ); implement_allocator!( AllocZopfliNode, ZopfliNode, AllocZopfliNode::AllocatedMemory, alloc_zn ); /// Helper function to allocate memory with the given allocator (may crash if the `len` is 0). pub(crate) fn allocate>(alloc: &mut A, len: usize) -> A::AllocatedMemory { A::alloc_cell(alloc, len) } /// Helper function to create an empty allocator object pub(crate) fn alloc_default>() -> A::AllocatedMemory { A::AllocatedMemory::default() } /// Helper function to allocate memory or return a default value if the condition is false pub(crate) fn alloc_if>( condition: bool, alloc: &mut A, len: usize, ) -> A::AllocatedMemory { if condition { allocate(alloc, len) } else { alloc_default::() } } /// Helper function to allocate memory or return a default value when the size is 0. pub(crate) fn alloc_or_default>( alloc: &mut A, len: usize, ) -> A::AllocatedMemory { alloc_if(len > 0, alloc, len) } brotli-8.0.2/src/enc/command.rs000064400000000000000000000366641046102023000144650ustar 00000000000000use super::encode::BROTLI_NUM_DISTANCE_SHORT_CODES; use super::util::Log2FloorNonZero; #[derive(Copy, Clone, Debug)] pub struct BrotliDistanceParams { pub distance_postfix_bits: u32, pub num_direct_distance_codes: u32, pub alphabet_size: u32, pub max_distance: usize, } #[derive(Clone, Copy, Debug, Default)] pub struct Command { // stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit pub insert_len_: u32, pub copy_len_: u32, //stores distance_extra bits pub dist_extra_: u32, pub cmd_prefix_: u16, // stores distance code in low 10 bits and num extra bits in high 6 bits pub dist_prefix_: u16, } impl Command { pub fn copy_len(&self) -> u32 { self.copy_len_ & 0x01ff_ffff } pub fn distance_context(&self) -> u32 { let r: u32 = (self.cmd_prefix_ as i32 >> 6) as u32; let c: u32 = (self.cmd_prefix_ as i32 & 7i32) as u32; if (r == 0 || r == 2 || r == 4 || r == 7) && c <= 2 { c } else { 3 } } pub fn init_insert(&mut self, insertlen: usize) { self.insert_len_ = insertlen as u32; self.copy_len_ = (4i32 << 25) as u32; self.dist_extra_ = 0u32; self.dist_prefix_ = (1u16 << 10) | BROTLI_NUM_DISTANCE_SHORT_CODES as u16; get_length_code(insertlen, 4usize, false, &mut self.cmd_prefix_); } } #[inline(always)] pub fn ComputeDistanceCode(distance: usize, max_distance: usize, dist_cache: &[i32]) -> usize { if distance <= max_distance { let distance_plus_3: usize = distance.wrapping_add(3); let offset0: usize = distance_plus_3.wrapping_sub(dist_cache[0] as usize); let offset1: usize = distance_plus_3.wrapping_sub(dist_cache[1] as usize); if distance == dist_cache[0] as usize { return 0usize; } else if distance == dist_cache[1] as usize { return 1; } else if offset0 < 7usize { return (0x0975_0468_i32 >> (4usize).wrapping_mul(offset0) & 0xfi32) as usize; } else if offset1 < 7usize { return (0x0fdb_1ace_i32 >> (4usize).wrapping_mul(offset1) & 0xfi32) as usize; } else if distance == dist_cache[2] as usize { return 2usize; } else if distance == dist_cache[3] as usize { return 3usize; } } distance.wrapping_add(16).wrapping_sub(1) } #[inline(always)] pub fn GetInsertLengthCode(insertlen: usize) -> u16 { if insertlen < 6usize { insertlen as u16 } else if insertlen < 130usize { let nbits: u32 = Log2FloorNonZero(insertlen.wrapping_sub(2) as u64).wrapping_sub(1); ((nbits << 1) as usize) .wrapping_add(insertlen.wrapping_sub(2) >> nbits) .wrapping_add(2) as u16 } else if insertlen < 2114usize { Log2FloorNonZero(insertlen.wrapping_sub(66) as u64).wrapping_add(10) as u16 } else if insertlen < 6210usize { 21u32 as u16 } else if insertlen < 22594usize { 22u32 as u16 } else { 23u32 as u16 } } #[inline(always)] pub fn GetCopyLengthCode(copylen: usize) -> u16 { if copylen < 10usize { copylen.wrapping_sub(2) as u16 } else if copylen < 134usize { let nbits: u32 = Log2FloorNonZero(copylen.wrapping_sub(6) as u64).wrapping_sub(1); ((nbits << 1) as usize) .wrapping_add(copylen.wrapping_sub(6) >> nbits) .wrapping_add(4) as u16 } else if copylen < 2118usize { Log2FloorNonZero(copylen.wrapping_sub(70) as u64).wrapping_add(12) as u16 } else { 23u32 as u16 } } #[inline(always)] pub(crate) fn combine_length_codes(inscode: u16, copycode: u16, use_last_distance: bool) -> u16 { let bits64: u16 = (copycode as u32 & 0x7u32 | (inscode as u32 & 0x7u32) << 3) as u16; if use_last_distance && inscode < 8 && copycode < 16 { if (copycode as i32) < 8i32 { bits64 } else { let s64: u16 = 64u16; (bits64 as i32 | s64 as i32) as u16 } } else { let sub_offset: i32 = 2i32 * ((copycode as i32 >> 3) + 3i32 * (inscode as i32 >> 3)); let offset = (sub_offset << 5) + 0x40i32 + (0x520d40i32 >> sub_offset & 0xc0i32); (offset as u16 as i32 | bits64 as i32) as u16 } } #[inline(always)] pub(crate) fn get_length_code( insertlen: usize, copylen: usize, use_last_distance: bool, code: &mut u16, ) { let inscode: u16 = GetInsertLengthCode(insertlen); let copycode: u16 = GetCopyLengthCode(copylen); *code = combine_length_codes(inscode, copycode, use_last_distance); } pub fn PrefixEncodeCopyDistance( distance_code: usize, num_direct_codes: usize, postfix_bits: u64, code: &mut u16, extra_bits: &mut u32, ) { if distance_code < (BROTLI_NUM_DISTANCE_SHORT_CODES as usize).wrapping_add(num_direct_codes) { *code = distance_code as u16; *extra_bits = 0u32; } else { let dist: u64 = (1u64 << postfix_bits.wrapping_add(2u32 as (u64))).wrapping_add( (distance_code as u64) .wrapping_sub(BROTLI_NUM_DISTANCE_SHORT_CODES as u64) .wrapping_sub(num_direct_codes as u64), ); let bucket: u64 = Log2FloorNonZero(dist).wrapping_sub(1) as (u64); let postfix_mask: u64 = (1u32 << postfix_bits).wrapping_sub(1) as (u64); let postfix: u64 = dist & postfix_mask; let prefix: u64 = (dist >> bucket) & 1; let offset: u64 = (2u64).wrapping_add(prefix) << bucket; let nbits: u64 = bucket.wrapping_sub(postfix_bits); *code = ((nbits << 10) | ((BROTLI_NUM_DISTANCE_SHORT_CODES as u64) .wrapping_add(num_direct_codes as u64) .wrapping_add( 2u64.wrapping_mul(nbits.wrapping_sub(1)) .wrapping_add(prefix) << postfix_bits, ) .wrapping_add(postfix))) as u16; *extra_bits = (dist.wrapping_sub(offset) >> postfix_bits) as u32; /*(16u64) .wrapping_add(num_direct_codes as u64) .wrapping_add((2u64).wrapping_mul(nbits.wrapping_sub(1)).wrapping_add(prefix) << postfix_bits) .wrapping_add(postfix) as u16;*/ //*extra_bits = (nbits << 24 | dist.wrapping_sub(offset) >> postfix_bits) as u32; } } impl Command { pub fn restore_distance_code(&self, dist: &BrotliDistanceParams) -> u32 { if (self.dist_prefix_ as i32 & 0x3ff) < BROTLI_NUM_DISTANCE_SHORT_CODES as i32 + dist.num_direct_distance_codes as i32 { self.dist_prefix_ as u32 & 0x3ff } else { let dcode = self.dist_prefix_ as u32 & 0x3ff; let nbits: u32 = u32::from(self.dist_prefix_ >> 10); let extra: u32 = self.dist_extra_; let postfix_mask = (1u32 << dist.distance_postfix_bits) - 1; let hcode = dcode .wrapping_sub(dist.num_direct_distance_codes) .wrapping_sub(BROTLI_NUM_DISTANCE_SHORT_CODES) >> dist.distance_postfix_bits; let lcode = dcode .wrapping_sub(dist.num_direct_distance_codes) .wrapping_sub(BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask; let offset = (2u32.wrapping_add((hcode & 1)) << nbits).wrapping_sub(4); (offset.wrapping_add(extra) << dist.distance_postfix_bits) .wrapping_add(lcode) .wrapping_add(dist.num_direct_distance_codes) .wrapping_add(BROTLI_NUM_DISTANCE_SHORT_CODES) } } // returns which distance code to use ( 0 means none, 1 means last, 2 means penultimate, 3 means the prior to penultimate pub fn distance_index_and_offset(&self, dist: &BrotliDistanceParams) -> (usize, isize) { let n_postfix = dist.distance_postfix_bits; let n_direct = dist.num_direct_distance_codes; let dextra = self.dist_extra_; let dprefix = self.dist_prefix_ & 0x3ff; let n_dist_bits = self.dist_prefix_ >> 10; if u32::from(dprefix) < BROTLI_NUM_DISTANCE_SHORT_CODES { let table: [(usize, isize); 16] = [ (1, 0), (2, 0), (3, 0), (4, 0), (1, -1), (1, 1), (1, -2), (1, 2), (1, -3), (1, 3), (2, -1), (2, 1), (2, -2), (2, 2), (2, -3), (2, 3), ]; //eprint!("AA {:?} {:?} -> {:?}\n",*self, *dist, table[dprefix as usize]); return table[dprefix as usize]; } if (dprefix as usize) < BROTLI_NUM_DISTANCE_SHORT_CODES as usize + n_direct as usize { let ret = dprefix as isize + 1 - BROTLI_NUM_DISTANCE_SHORT_CODES as isize; //eprint!("BB {:?} {:?} -> {:?}\n",*self, *dist, ret); return (0, ret); } let postfix_mask = (1 << n_postfix) - 1; let dcode = dprefix as u32 - BROTLI_NUM_DISTANCE_SHORT_CODES - n_direct; let hcode = dcode >> n_postfix; let lcode = dcode & postfix_mask; let offset = ((2 + (hcode & 1)) << n_dist_bits) - 4; let ret = (((offset + dextra) << n_postfix) + lcode + n_direct + 1) as isize; //assert!(ret != 0); (0, ret) } } pub fn RecomputeDistancePrefixes( cmds: &mut [Command], num_commands: usize, num_direct_distance_codes: u32, distance_postfix_bits: u32, dist: &BrotliDistanceParams, ) { if num_direct_distance_codes == 0u32 && (distance_postfix_bits == 0u32) { return; } for i in 0usize..num_commands { let cmd: &mut Command = &mut cmds[i]; if cmd.copy_len() != 0 && cmd.cmd_prefix_ >= 128 { PrefixEncodeCopyDistance( cmd.restore_distance_code(dist) as usize, num_direct_distance_codes as usize, distance_postfix_bits as (u64), &mut cmd.dist_prefix_, &mut cmd.dist_extra_, ); } } } impl Command { pub fn init( &mut self, dist: &BrotliDistanceParams, insertlen: usize, copylen: usize, copylen_code: usize, distance_code: usize, ) { self.insert_len_ = insertlen as u32; let copylen_code_delta = (copylen_code as i32 - copylen as i32) as i8; self.copy_len_ = (copylen as u32 | (u32::from(copylen_code_delta as u8) << 25)); PrefixEncodeCopyDistance( distance_code, dist.num_direct_distance_codes as usize, u64::from(dist.distance_postfix_bits), &mut self.dist_prefix_, &mut self.dist_extra_, ); get_length_code( insertlen, copylen_code, (self.dist_prefix_ & 0x3ff) == 0, &mut self.cmd_prefix_, ); } pub fn new( dist: &BrotliDistanceParams, insertlen: usize, copylen: usize, copylen_code: usize, distance_code: usize, ) -> Self { let mut cmd = Command { insert_len_: insertlen as u32, copy_len_: (copylen | ((copylen_code ^ copylen) << 25)) as u32, dist_extra_: 0, cmd_prefix_: 0, dist_prefix_: 0, }; cmd.init(dist, insertlen, copylen, copylen_code, distance_code); cmd } } #[cfg(test)] mod test { // returns which distance code to use ( 0 means none, 1 means last, 2 means penultimate, 3 means the prior to penultimate pub fn helperCommandDistanceIndexAndOffset( cmd: &super::Command, dist: &super::BrotliDistanceParams, ) -> (usize, isize) { let n_postfix = dist.distance_postfix_bits; let n_direct = dist.num_direct_distance_codes; let dextra = cmd.dist_extra_; let dist_prefix = cmd.dist_prefix_ & 0x3ff; if dist_prefix < 16 { let table: [(usize, isize); 16] = [ (1, 0), (2, 0), (3, 0), (4, 0), (1, -1), (1, 1), (1, -2), (1, 2), (1, -3), (1, 3), (2, -1), (2, 1), (2, -2), (2, 2), (2, -3), (2, 3), ]; return table[cmd.dist_prefix_ as usize]; } if (dist_prefix as usize) < 16 + n_direct as usize { return (0, dist_prefix as isize + 1 - 16); } let postfix_mask = (1 << n_postfix) - 1; let dcode = dist_prefix as u32 - 16 - n_direct; let n_dist_bits = 1 + (dcode >> (n_postfix + 1)); let hcode = dcode >> n_postfix; let lcode = dcode & postfix_mask; let offset = ((2 + (hcode & 1)) << n_dist_bits) - 4; ( 0, (((offset + dextra) << n_postfix) + lcode + n_direct + 1) as isize, ) } #[test] fn test_command_return_distance_index_offset() { let param = super::BrotliDistanceParams { distance_postfix_bits: 2, num_direct_distance_codes: 16, alphabet_size: 224, max_distance: 268435456, }; let mut cmd = super::Command::default(); cmd.insert_len_ = 63; cmd.copy_len_ = 3; cmd.dist_extra_ = 3; cmd.cmd_prefix_ = 297; cmd.dist_prefix_ = 2089; assert_eq!(cmd.distance_index_and_offset(¶m), (0, 46)); assert_eq!( cmd.distance_index_and_offset(¶m), helperCommandDistanceIndexAndOffset(&cmd, ¶m) ); cmd = super::Command { insert_len_: 27, copy_len_: 3, dist_extra_: 0, cmd_prefix_: 281, dist_prefix_: 6, }; assert_eq!(cmd.distance_index_and_offset(¶m), (1, -2)); assert_eq!( cmd.distance_index_and_offset(¶m), helperCommandDistanceIndexAndOffset(&cmd, ¶m) ); cmd = super::Command { insert_len_: 1, copy_len_: 3, dist_extra_: 0, cmd_prefix_: 137, dist_prefix_: 27, }; assert_eq!(cmd.distance_index_and_offset(¶m), (0, 12)); assert_eq!( cmd.distance_index_and_offset(¶m), helperCommandDistanceIndexAndOffset(&cmd, ¶m) ); cmd = super::Command { insert_len_: 5, copy_len_: 4, dist_extra_: 297, cmd_prefix_: 170, dist_prefix_: 11377, }; assert_eq!(cmd.distance_index_and_offset(¶m), (0, 17574)); assert_eq!( cmd.distance_index_and_offset(¶m), helperCommandDistanceIndexAndOffset(&cmd, ¶m) ); cmd.init_insert(24); assert_eq!(cmd.distance_index_and_offset(¶m), (0, 1)); } /* #[test] fn test_restore_distance_code() { for dist_code in 0..50000 { let mut cmd = super::Command::default(); let param =super::BrotliDistanceParams{ distance_postfix_bits:2, num_direct_distance_codes:16, alphabet_size:224, max_distance:268435456, }; super::InitCommand(&mut cmd, ¶m, 4, 4, 4, dist_code); let exp_dist_code = super::CommandRestoreDistanceCode(&cmd, ¶m); assert_eq!(exp_dist_code as u32, dist_code as u32); } }*/ } brotli-8.0.2/src/enc/compat.rs000064400000000000000000000245621046102023000143240ustar 00000000000000#![cfg_attr(feature = "simd", allow(unused))] use core::ops::{Add, AddAssign, BitAnd, Index, IndexMut, Mul, Shr, Sub}; #[derive(Default, Copy, Clone, Debug)] pub struct Compat16x16([i16; 16]); impl Compat16x16 { #[inline(always)] pub fn splat(a: i16) -> Compat16x16 { Compat16x16([a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a]) } #[inline(always)] pub fn to_int(&self) -> Self { *self } #[inline(always)] pub fn simd_gt(&self, rhs: Compat16x16) -> Compat16x16 { Self([ -((self[0] > rhs[0]) as i16), -((self[1] > rhs[1]) as i16), -((self[2] > rhs[2]) as i16), -((self[3] > rhs[3]) as i16), -((self[4] > rhs[4]) as i16), -((self[5] > rhs[5]) as i16), -((self[6] > rhs[6]) as i16), -((self[7] > rhs[7]) as i16), -((self[8] > rhs[8]) as i16), -((self[9] > rhs[9]) as i16), -((self[10] > rhs[10]) as i16), -((self[11] > rhs[11]) as i16), -((self[12] > rhs[12]) as i16), -((self[13] > rhs[13]) as i16), -((self[14] > rhs[14]) as i16), -((self[15] > rhs[15]) as i16), ]) } } macro_rules! op16 { ($a: expr, $b: expr, $op: expr) => { Compat16x16([ $op($a[0], $b[0]), $op($a[1], $b[1]), $op($a[2], $b[2]), $op($a[3], $b[3]), $op($a[4], $b[4]), $op($a[5], $b[5]), $op($a[6], $b[6]), $op($a[7], $b[7]), $op($a[8], $b[8]), $op($a[9], $b[9]), $op($a[10], $b[10]), $op($a[11], $b[11]), $op($a[12], $b[12]), $op($a[13], $b[13]), $op($a[14], $b[14]), $op($a[15], $b[15]), ]) }; } macro_rules! scalar_op16 { ($a: expr, $b: expr, $op: expr) => { Compat16x16([ $op($a[0], $b), $op($a[1], $b), $op($a[2], $b), $op($a[3], $b), $op($a[4], $b), $op($a[5], $b), $op($a[6], $b), $op($a[7], $b), $op($a[8], $b), $op($a[9], $b), $op($a[10], $b), $op($a[11], $b), $op($a[12], $b), $op($a[13], $b), $op($a[14], $b), $op($a[15], $b), ]) }; } #[inline(always)] fn wrapping_i16_add(a: i16, b: i16) -> i16 { a.wrapping_add(b) } #[inline(always)] fn wrapping_i16_sub(a: i16, b: i16) -> i16 { a.wrapping_sub(b) } #[inline(always)] fn i16_bitand(a: i16, b: i16) -> i16 { a & b } #[inline(always)] fn shift16(a: i16, b: Scalar) -> i16 where i64: From, { a >> i64::from(b) } impl Add for Compat16x16 { type Output = Compat16x16; #[inline(always)] fn add(self, other: Compat16x16) -> Compat16x16 { op16!(self.0, other.0, wrapping_i16_add) } } impl Sub for Compat16x16 { type Output = Compat16x16; #[inline(always)] fn sub(self, other: Compat16x16) -> Compat16x16 { op16!(self.0, other.0, wrapping_i16_sub) } } impl BitAnd for Compat16x16 { type Output = Compat16x16; #[inline(always)] fn bitand(self, other: Compat16x16) -> Compat16x16 { op16!(self.0, other.0, i16_bitand) } } impl From<[i16; 16]> for Compat16x16 { fn from(value: [i16; 16]) -> Self { Self(value) } } impl Index for Compat16x16 where I: core::slice::SliceIndex<[i16]>, { type Output = I::Output; fn index(&self, index: I) -> &Self::Output { &self.0[index] } } impl IndexMut for Compat16x16 where I: core::slice::SliceIndex<[i16]>, { fn index_mut(&mut self, index: I) -> &mut Self::Output { &mut self.0[index] } } impl Shr for Compat16x16 where i64: From, { type Output = Compat16x16; #[inline(always)] fn shr(self, other: Scalar) -> Compat16x16 { scalar_op16!(self.0, other.clone(), shift16) } } #[derive(Default, Copy, Clone, Debug)] pub struct Compat32x8([i32; 8]); impl Compat32x8 { #[inline(always)] pub fn splat(a: i32) -> Compat32x8 { Compat32x8([a, a, a, a, a, a, a, a]) } #[inline(always)] pub fn simd_gt(&self, rhs: Compat32x8) -> Compat32x8 { Self([ -((self[0] > rhs[0]) as i32), -((self[1] > rhs[1]) as i32), -((self[2] > rhs[2]) as i32), -((self[3] > rhs[3]) as i32), -((self[4] > rhs[4]) as i32), -((self[5] > rhs[5]) as i32), -((self[6] > rhs[6]) as i32), -((self[7] > rhs[7]) as i32), ]) } #[inline(always)] pub fn simd_ge(&self, rhs: Compat32x8) -> Compat32x8 { Self([ -((self[0] >= rhs[0]) as i32), -((self[1] >= rhs[1]) as i32), -((self[2] >= rhs[2]) as i32), -((self[3] >= rhs[3]) as i32), -((self[4] >= rhs[4]) as i32), -((self[5] >= rhs[5]) as i32), -((self[6] >= rhs[6]) as i32), -((self[7] >= rhs[7]) as i32), ]) } pub fn to_int(&self) -> Self { *self } } #[inline(always)] fn fmin(a: f32, b: f32) -> f32 { if a < b { a } else { b } } #[derive(Default, Copy, Clone, Debug)] pub struct CompatF8([f32; 8]); impl CompatF8 { #[inline(always)] pub fn splat(a: f32) -> CompatF8 { CompatF8([a, a, a, a, a, a, a, a]) } #[inline(always)] pub fn simd_ge(&self, rhs: CompatF8) -> Compat32x8 { Compat32x8([ -((self[0] >= rhs[0]) as i32), -((self[1] >= rhs[1]) as i32), -((self[2] >= rhs[2]) as i32), -((self[3] >= rhs[3]) as i32), -((self[4] >= rhs[4]) as i32), -((self[5] >= rhs[5]) as i32), -((self[6] >= rhs[6]) as i32), -((self[7] >= rhs[7]) as i32), ]) } #[inline(always)] pub fn simd_min(&self, rhs: CompatF8) -> CompatF8 { Self([ fmin(self[0], rhs[0]), fmin(self[1], rhs[1]), fmin(self[2], rhs[2]), fmin(self[3], rhs[3]), fmin(self[4], rhs[4]), fmin(self[5], rhs[5]), fmin(self[6], rhs[6]), fmin(self[7], rhs[7]), ]) } } impl Add for Compat32x8 { type Output = Compat32x8; #[inline(always)] fn add(self, other: Compat32x8) -> Compat32x8 { Compat32x8([ self.0[0].wrapping_add(other.0[0]), self.0[1].wrapping_add(other.0[1]), self.0[2].wrapping_add(other.0[2]), self.0[3].wrapping_add(other.0[3]), self.0[4].wrapping_add(other.0[4]), self.0[5].wrapping_add(other.0[5]), self.0[6].wrapping_add(other.0[6]), self.0[7].wrapping_add(other.0[7]), ]) } } impl BitAnd for Compat32x8 { type Output = Compat32x8; #[inline(always)] fn bitand(self, other: Compat32x8) -> Compat32x8 { Compat32x8([ self.0[0] & other.0[0], self.0[1] & other.0[1], self.0[2] & other.0[2], self.0[3] & other.0[3], self.0[4] & other.0[4], self.0[5] & other.0[5], self.0[6] & other.0[6], self.0[7] & other.0[7], ]) } } impl Mul for Compat32x8 { type Output = Compat32x8; #[inline(always)] fn mul(self, other: Compat32x8) -> Compat32x8 { Compat32x8([ self.0[0].wrapping_mul(other.0[0]), self.0[1].wrapping_mul(other.0[1]), self.0[2].wrapping_mul(other.0[2]), self.0[3].wrapping_mul(other.0[3]), self.0[4].wrapping_mul(other.0[4]), self.0[5].wrapping_mul(other.0[5]), self.0[6].wrapping_mul(other.0[6]), self.0[7].wrapping_mul(other.0[7]), ]) } } impl From<[i32; 8]> for Compat32x8 { fn from(value: [i32; 8]) -> Self { Self(value) } } impl Index for Compat32x8 where I: core::slice::SliceIndex<[i32]>, { type Output = I::Output; fn index(&self, index: I) -> &Self::Output { &self.0[index] } } impl IndexMut for Compat32x8 where I: core::slice::SliceIndex<[i32]>, { fn index_mut(&mut self, index: I) -> &mut Self::Output { &mut self.0[index] } } impl Add for CompatF8 { type Output = CompatF8; #[inline(always)] fn add(self, other: CompatF8) -> CompatF8 { CompatF8([ self.0[0] + other.0[0], self.0[1] + other.0[1], self.0[2] + other.0[2], self.0[3] + other.0[3], self.0[4] + other.0[4], self.0[5] + other.0[5], self.0[6] + other.0[6], self.0[7] + other.0[7], ]) } } impl Sub for CompatF8 { type Output = CompatF8; #[inline(always)] fn sub(self, other: CompatF8) -> CompatF8 { CompatF8([ self.0[0] - other.0[0], self.0[1] - other.0[1], self.0[2] - other.0[2], self.0[3] - other.0[3], self.0[4] - other.0[4], self.0[5] - other.0[5], self.0[6] - other.0[6], self.0[7] - other.0[7], ]) } } impl Mul for CompatF8 { type Output = CompatF8; #[inline(always)] fn mul(self, other: CompatF8) -> CompatF8 { CompatF8([ self.0[0] * other.0[0], self.0[1] * other.0[1], self.0[2] * other.0[2], self.0[3] * other.0[3], self.0[4] * other.0[4], self.0[5] * other.0[5], self.0[6] * other.0[6], self.0[7] * other.0[7], ]) } } impl AddAssign for CompatF8 { #[inline(always)] fn add_assign(&mut self, other: CompatF8) { self.0[0] += other.0[0]; self.0[1] += other.0[1]; self.0[2] += other.0[2]; self.0[3] += other.0[3]; self.0[4] += other.0[4]; self.0[5] += other.0[5]; self.0[6] += other.0[6]; self.0[7] += other.0[7]; } } impl From<[f32; 8]> for CompatF8 { fn from(value: [f32; 8]) -> Self { Self(value) } } impl Index for CompatF8 where I: core::slice::SliceIndex<[f32]>, { type Output = I::Output; fn index(&self, index: I) -> &Self::Output { &self.0[index] } } impl IndexMut for CompatF8 where I: core::slice::SliceIndex<[f32]>, { fn index_mut(&mut self, index: I) -> &mut Self::Output { &mut self.0[index] } } brotli-8.0.2/src/enc/compress_fragment.rs000064400000000000000000001224741046102023000165600ustar 00000000000000use core::cmp::min; //caution: lots of the functions look structurally the same as two_pass, // but have subtle index differences // examples: IsMatch checks p1[4] and p1[5] // the hoops that BuildAndStoreCommandPrefixCode goes through are subtly different in order // (eg memcpy x+24, y instead of +24, y+40 // pretty much assume compress_fragment_two_pass is a trap! except for store_meta_block_header use super::super::alloc; use super::backward_references::kHashMul32; use super::brotli_bit_stream::{BrotliBuildAndStoreHuffmanTreeFast, BrotliStoreHuffmanTree}; use super::compress_fragment_two_pass::{memcpy, BrotliWriteBits}; use super::entropy_encode::{ BrotliConvertBitDepthsToSymbols, BrotliCreateHuffmanTree, HuffmanTree, }; use super::static_dict::{ FindMatchLengthWithLimit, BROTLI_UNALIGNED_LOAD32, BROTLI_UNALIGNED_LOAD64, }; use super::util::{FastLog2, Log2FloorNonZero}; use crate::enc::compress_fragment_two_pass::store_meta_block_header; use crate::enc::floatX; //static kHashMul32: u32 = 0x1e35a7bdu32; static kCmdHistoSeed: [u32; 128] = [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, ]; fn Hash(p: &[u8], shift: usize) -> u32 { let h: u64 = (BROTLI_UNALIGNED_LOAD64(p) << 24).wrapping_mul(kHashMul32 as (u64)); (h >> shift) as u32 } fn IsMatch(p1: &[u8], p2: &[u8]) -> bool { BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && (p1[4] as i32 == p2[4] as i32) } fn BuildAndStoreLiteralPrefixCode>( mht: &mut AllocHT, input: &[u8], input_size: usize, depths: &mut [u8], bits: &mut [u16], storage_ix: &mut usize, storage: &mut [u8], ) -> usize { let mut histogram: [u32; 256] = [0; 256]; let mut histogram_total: usize; let mut i: usize; if input_size < (1i32 << 15) as usize { for i in 0usize..input_size { let _rhs = 1; let _lhs = &mut histogram[input[i] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } histogram_total = input_size; i = 0usize; while i < 256usize { { let adjust: u32 = (2u32).wrapping_mul(min(histogram[i], 11u32)); { let _rhs = adjust; let _lhs = &mut histogram[i]; *_lhs = (*_lhs).wrapping_add(_rhs); } histogram_total = histogram_total.wrapping_add(adjust as usize); } i = i.wrapping_add(1); } } else { static kSampleRate: usize = 29usize; i = 0usize; while i < input_size { { let _rhs = 1; let _lhs = &mut histogram[input[i] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } i = i.wrapping_add(kSampleRate); } histogram_total = input_size .wrapping_add(kSampleRate) .wrapping_sub(1) .wrapping_div(kSampleRate); i = 0usize; while i < 256usize { { let adjust: u32 = (1u32).wrapping_add((2u32).wrapping_mul(min(histogram[i], 11u32))); { let _rhs = adjust; let _lhs = &mut histogram[i]; *_lhs = (*_lhs).wrapping_add(_rhs); } histogram_total = histogram_total.wrapping_add(adjust as usize); } i = i.wrapping_add(1); } } BrotliBuildAndStoreHuffmanTreeFast( mht, &mut histogram[..], histogram_total, 8usize, depths, bits, storage_ix, storage, ); { let mut literal_ratio: usize = 0usize; for i in 0usize..256usize { if histogram[i] != 0 { literal_ratio = literal_ratio .wrapping_add(histogram[i].wrapping_mul(depths[i] as u32) as usize); } } literal_ratio .wrapping_mul(125) .wrapping_div(histogram_total) } } #[derive(PartialEq, Eq, Copy, Clone)] pub enum CodeBlockState { EMIT_REMAINDER, EMIT_COMMANDS, NEXT_BLOCK, } fn EmitInsertLen( insertlen: usize, depth: &[u8], bits: &[u16], histo: &mut [u32], storage_ix: &mut usize, storage: &mut [u8], ) { if insertlen < 6usize { let code: usize = insertlen.wrapping_add(40); BrotliWriteBits( depth[code] as usize, bits[code] as (u64), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[code]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else if insertlen < 130usize { let tail: usize = insertlen.wrapping_sub(2); let nbits: u32 = Log2FloorNonZero(tail as u64).wrapping_sub(1); let prefix: usize = tail >> nbits; let inscode: usize = ((nbits << 1) as usize) .wrapping_add(prefix) .wrapping_add(42); BrotliWriteBits( depth[(inscode as usize)] as usize, bits[(inscode as usize)] as (u64), storage_ix, storage, ); BrotliWriteBits( nbits as usize, (tail as u64).wrapping_sub((prefix as u64) << nbits), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[(inscode as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else if insertlen < 2114usize { let tail: usize = insertlen.wrapping_sub(66); let nbits: u32 = Log2FloorNonZero(tail as u64); let code: usize = nbits.wrapping_add(50) as usize; BrotliWriteBits( depth[(code as usize)] as usize, bits[(code as usize)] as (u64), storage_ix, storage, ); BrotliWriteBits( nbits as usize, (tail as u64).wrapping_sub(1 << nbits), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[(code as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else { BrotliWriteBits(depth[61] as usize, bits[61] as (u64), storage_ix, storage); BrotliWriteBits( 12usize, (insertlen as u64).wrapping_sub(2114), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[61]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } } fn ShouldUseUncompressedMode(delta: isize, insertlen: usize, literal_ratio: usize) -> bool { let compressed = delta as usize; if compressed.wrapping_mul(50) > insertlen { false } else if literal_ratio > 980 { true } else { false } } fn RewindBitPosition(new_storage_ix: usize, storage_ix: &mut usize, storage: &mut [u8]) { let bitpos: usize = new_storage_ix & 7usize; let mask: usize = (1u32 << bitpos).wrapping_sub(1) as usize; { let _rhs = mask as u8; let _lhs = &mut storage[(new_storage_ix >> 3)]; *_lhs = (*_lhs as i32 & _rhs as i32) as u8; } *storage_ix = new_storage_ix; } fn EmitUncompressedMetaBlock( begin: &[u8], len: usize, storage_ix_start: usize, storage_ix: &mut usize, storage: &mut [u8], ) { RewindBitPosition(storage_ix_start, storage_ix, storage); store_meta_block_header(len, true, storage_ix, storage); *storage_ix = storage_ix.wrapping_add(7u32 as usize) & !7u32 as usize; memcpy(storage, (*storage_ix >> 3), begin, 0, len); *storage_ix = storage_ix.wrapping_add(len << 3); storage[(*storage_ix >> 3)] = 0u8; } fn EmitLongInsertLen( insertlen: usize, depth: &[u8], bits: &[u16], histo: &mut [u32], storage_ix: &mut usize, storage: &mut [u8], ) { if insertlen < 22594usize { BrotliWriteBits(depth[62] as usize, bits[62] as (u64), storage_ix, storage); BrotliWriteBits( 14usize, (insertlen as u64).wrapping_sub(6210), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[62]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else { BrotliWriteBits(depth[63] as usize, bits[63] as (u64), storage_ix, storage); BrotliWriteBits( 24usize, (insertlen as u64).wrapping_sub(22594), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[63]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } } fn EmitLiterals( input: &[u8], len: usize, depth: &[u8], bits: &[u16], storage_ix: &mut usize, storage: &mut [u8], ) { for j in 0usize..len { let lit: u8 = input[j]; BrotliWriteBits( depth[(lit as usize)] as usize, bits[(lit as usize)] as (u64), storage_ix, storage, ); } } fn EmitDistance( distance: usize, depth: &[u8], bits: &[u16], histo: &mut [u32], storage_ix: &mut usize, storage: &mut [u8], ) { let d: u64 = distance.wrapping_add(3) as u64; let nbits: u32 = Log2FloorNonZero(d).wrapping_sub(1); let prefix: u64 = d >> nbits & 1; let offset: u64 = (2u64).wrapping_add(prefix) << nbits; let distcode: u64 = ((2u32).wrapping_mul(nbits.wrapping_sub(1)) as (u64)) .wrapping_add(prefix) .wrapping_add(80); BrotliWriteBits( depth[(distcode as usize)] as usize, bits[(distcode as usize)] as (u64), storage_ix, storage, ); BrotliWriteBits(nbits as usize, d.wrapping_sub(offset), storage_ix, storage); { let _rhs = 1; let _lhs = &mut histo[(distcode as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } fn EmitCopyLenLastDistance( copylen: usize, depth: &[u8], bits: &[u16], histo: &mut [u32], storage_ix: &mut usize, storage: &mut [u8], ) { if copylen < 12usize { BrotliWriteBits( depth[copylen.wrapping_sub(4)] as usize, bits[copylen.wrapping_sub(4)] as (u64), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[copylen.wrapping_sub(4)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else if copylen < 72usize { let tail: usize = copylen.wrapping_sub(8); let nbits: u32 = Log2FloorNonZero(tail as u64).wrapping_sub(1); let prefix: usize = tail >> nbits; let code: usize = ((nbits << 1) as usize).wrapping_add(prefix).wrapping_add(4); BrotliWriteBits( depth[(code as usize)] as usize, bits[(code as usize)] as (u64), storage_ix, storage, ); BrotliWriteBits( nbits as usize, tail.wrapping_sub(prefix << nbits) as u64, storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[(code as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else if copylen < 136usize { let tail: usize = copylen.wrapping_sub(8); let code: usize = (tail >> 5).wrapping_add(30); BrotliWriteBits( depth[code] as usize, bits[code] as (u64), storage_ix, storage, ); BrotliWriteBits(5usize, tail as u64 & 31, storage_ix, storage); BrotliWriteBits(depth[64] as usize, bits[64] as (u64), storage_ix, storage); { let _rhs = 1; let _lhs = &mut histo[code]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } { let _rhs = 1; let _lhs = &mut histo[64]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else if copylen < 2120usize { let tail: usize = copylen.wrapping_sub(72); let nbits: u32 = Log2FloorNonZero(tail as u64); let code: usize = nbits.wrapping_add(28) as usize; BrotliWriteBits( depth[(code as usize)] as usize, bits[(code as usize)] as (u64), storage_ix, storage, ); BrotliWriteBits( nbits as usize, (tail as u64).wrapping_sub(1u64 << nbits), storage_ix, storage, ); BrotliWriteBits(depth[64] as usize, bits[64] as (u64), storage_ix, storage); { let _rhs = 1; let _lhs = &mut histo[(code as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } { let _rhs = 1; let _lhs = &mut histo[64]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else { BrotliWriteBits(depth[39] as usize, bits[39] as (u64), storage_ix, storage); BrotliWriteBits( 24usize, copylen.wrapping_sub(2120) as u64, storage_ix, storage, ); BrotliWriteBits(depth[64] as usize, bits[64] as (u64), storage_ix, storage); { let _rhs = 1; let _lhs = &mut histo[39]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } { let _rhs = 1; let _lhs = &mut histo[64]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } } fn HashBytesAtOffset(v: u64, offset: i32, shift: usize) -> u32 { let h: u64 = (v >> (8i32 * offset) << 24).wrapping_mul(kHashMul32 as (u64)); (h >> shift) as u32 } fn EmitCopyLen( copylen: usize, depth: &[u8], bits: &[u16], histo: &mut [u32], storage_ix: &mut usize, storage: &mut [u8], ) { if copylen < 10usize { BrotliWriteBits( depth[copylen.wrapping_add(14)] as usize, bits[copylen.wrapping_add(14)] as (u64), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[copylen.wrapping_add(14)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else if copylen < 134usize { let tail: usize = copylen.wrapping_sub(6); let nbits: u32 = Log2FloorNonZero(tail as u64).wrapping_sub(1); let prefix: usize = tail >> nbits; let code: usize = ((nbits << 1) as usize) .wrapping_add(prefix) .wrapping_add(20); BrotliWriteBits( depth[(code as usize)] as usize, bits[(code as usize)] as (u64), storage_ix, storage, ); BrotliWriteBits( nbits as usize, (tail as u64).wrapping_sub((prefix as u64) << nbits), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[(code as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else if copylen < 2118usize { let tail: usize = copylen.wrapping_sub(70); let nbits: u32 = Log2FloorNonZero(tail as u64); let code: usize = nbits.wrapping_add(28) as usize; BrotliWriteBits( depth[(code as usize)] as usize, bits[(code as usize)] as (u64), storage_ix, storage, ); BrotliWriteBits( nbits as usize, (tail as u64).wrapping_sub(1 << nbits), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[(code as usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } else { BrotliWriteBits(depth[39] as usize, bits[39] as (u64), storage_ix, storage); BrotliWriteBits( 24usize, (copylen as u64).wrapping_sub(2118), storage_ix, storage, ); { let _rhs = 1; let _lhs = &mut histo[39]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } } fn ShouldMergeBlock(data: &[u8], len: usize, depths: &[u8]) -> bool { let mut histo: [usize; 256] = [0; 256]; static kSampleRate: usize = 43usize; let mut i: usize; i = 0usize; while i < len { { let _rhs = 1; let _lhs = &mut histo[data[i] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as usize); } i = i.wrapping_add(kSampleRate); } { let total: usize = len .wrapping_add(kSampleRate) .wrapping_sub(1) .wrapping_div(kSampleRate); let mut r: floatX = (FastLog2(total as u64) + 0.5) * (total as floatX) + 200.0; for i in 0usize..256usize { r -= (histo[i] as floatX) * ((depths[i] as floatX) + FastLog2(histo[i] as u64)); } r >= 0.0 } } fn UpdateBits(mut n_bits: usize, mut bits: u32, mut pos: usize, array: &mut [u8]) { while n_bits > 0usize { let byte_pos: usize = pos >> 3; let n_unchanged_bits: usize = pos & 7usize; let n_changed_bits: usize = min(n_bits, (8usize).wrapping_sub(n_unchanged_bits)); let total_bits: usize = n_unchanged_bits.wrapping_add(n_changed_bits); let mask: u32 = !(1u32 << total_bits).wrapping_sub(1) | (1u32 << n_unchanged_bits).wrapping_sub(1); let unchanged_bits: u32 = array[byte_pos] as u32 & mask; let changed_bits: u32 = bits & (1u32 << n_changed_bits).wrapping_sub(1); array[byte_pos] = (changed_bits << n_unchanged_bits | unchanged_bits) as u8; n_bits = n_bits.wrapping_sub(n_changed_bits); bits >>= n_changed_bits; pos = pos.wrapping_add(n_changed_bits); } } fn BuildAndStoreCommandPrefixCode( histogram: &[u32], depth: &mut [u8], bits: &mut [u16], storage_ix: &mut usize, storage: &mut [u8], ) { let mut tree = [HuffmanTree::new(0, 0, 0); 129]; let mut cmd_depth: [u8; 704] = [0u8; 704]; let mut cmd_bits: [u16; 64] = [0; 64]; BrotliCreateHuffmanTree(histogram, 64usize, 15i32, &mut tree[..], depth); BrotliCreateHuffmanTree( &histogram[64..], 64usize, 14i32, &mut tree[..], &mut depth[64..], ); /* We have to jump through a few hoops here in order to compute the command bits because the symbols are in a different order than in the full alphabet. This looks complicated, but having the symbols in this order in the command bits saves a few branches in the Emit* functions. */ memcpy(&mut cmd_depth[..], 0, depth, 0, 24usize); memcpy(&mut cmd_depth[..], 24usize, depth, (40usize), 8usize); memcpy(&mut cmd_depth[..], 32usize, depth, (24usize), 8usize); memcpy(&mut cmd_depth[..], 40usize, depth, (48usize), 8usize); memcpy(&mut cmd_depth[..], 48usize, depth, (32usize), 8usize); memcpy(&mut cmd_depth[..], 56usize, depth, (56usize), 8usize); BrotliConvertBitDepthsToSymbols(&mut cmd_depth[..], 64usize, &mut cmd_bits[..]); memcpy(bits, 0, &cmd_bits[..], 0, 24usize); memcpy(bits, (24usize), &cmd_bits[..], 32usize, 8usize); memcpy(bits, (32usize), &cmd_bits[..], 48usize, 8usize); memcpy(bits, (40usize), &cmd_bits[..], 24usize, 8usize); memcpy(bits, (48usize), &cmd_bits[..], 40usize, 8usize); memcpy(bits, (56usize), &cmd_bits[..], 56usize, 8usize); BrotliConvertBitDepthsToSymbols(&mut depth[64..], 64usize, &mut bits[64..]); { for item in cmd_depth[..64].iter_mut() { *item = 0; } memcpy(&mut cmd_depth[..], 0, depth, 0, 8usize); memcpy(&mut cmd_depth[..], 64usize, depth, (8usize), 8usize); memcpy(&mut cmd_depth[..], 128usize, depth, (16usize), 8usize); memcpy(&mut cmd_depth[..], 192usize, depth, (24usize), 8usize); memcpy(&mut cmd_depth[..], 384usize, depth, (32usize), 8usize); for i in 0usize..8usize { cmd_depth[(128usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(40)]; cmd_depth[(256usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(48)]; cmd_depth[(448usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(56)]; } BrotliStoreHuffmanTree( &mut cmd_depth[..], 704usize, &mut tree[..], storage_ix, storage, ); } BrotliStoreHuffmanTree( &mut depth[64..], 64usize, &mut tree[..], storage_ix, storage, ); } #[allow(unused_assignments)] fn compress_fragment_fast_impl>( m: &mut AllocHT, input_ptr: &[u8], mut input_size: usize, is_last: bool, table: &mut [i32], table_bits: usize, cmd_depth: &mut [u8], cmd_bits: &mut [u16], cmd_code_numbits: &mut usize, cmd_code: &mut [u8], storage_ix: &mut usize, storage: &mut [u8], ) { let mut cmd_histo = [0u32; 128]; let mut ip_end = 0usize; let mut next_emit = 0usize; let base_ip = 0usize; static kFirstBlockSize: usize = (3i32 << 15) as usize; static kMergeBlockSize: usize = (1i32 << 16) as usize; let kInputMarginBytes = 16usize; let kMinMatchLen = 5usize; let mut metablock_start = 0usize; let mut block_size = min(input_size, kFirstBlockSize); let mut total_block_size = block_size; let mut mlen_storage_ix = storage_ix.wrapping_add(3); let mut lit_depth = [0u8; 256]; let mut lit_bits = [0u16; 256]; let mut literal_ratio: usize; let mut input_index = 0usize; let mut last_distance: i32; let shift: usize = (64u32 as usize).wrapping_sub(table_bits); store_meta_block_header(block_size, false, storage_ix, storage); BrotliWriteBits(13usize, 0, storage_ix, storage); literal_ratio = BuildAndStoreLiteralPrefixCode( m, &input_ptr[input_index..], block_size, &mut lit_depth[..], &mut lit_bits[..], storage_ix, storage, ); { let mut i = 0usize; while i.wrapping_add(7) < *cmd_code_numbits { BrotliWriteBits(8usize, cmd_code[i >> 3] as u64, storage_ix, storage); i = i.wrapping_add(8); } } BrotliWriteBits( *cmd_code_numbits & 7usize, cmd_code[*cmd_code_numbits >> 3] as u64, storage_ix, storage, ); let mut code_block_selection = CodeBlockState::EMIT_COMMANDS; 'continue_to_next_block: loop { let mut ip_index: usize; if code_block_selection == CodeBlockState::EMIT_COMMANDS { cmd_histo[..128].clone_from_slice(&kCmdHistoSeed[..]); ip_index = input_index; last_distance = -1i32; ip_end = input_index.wrapping_add(block_size); if block_size >= kInputMarginBytes { let len_limit: usize = min( block_size.wrapping_sub(kMinMatchLen), input_size.wrapping_sub(kInputMarginBytes), ); let ip_limit: usize = input_index.wrapping_add(len_limit); let mut next_hash = Hash( &input_ptr[{ ip_index = ip_index.wrapping_add(1); ip_index }..], shift, ); loop { let mut skip = 32u32; let mut next_ip = ip_index; let mut candidate = 0usize; loop { loop { let hash = next_hash; let bytes_between_hash_lookups: u32 = skip >> 5; skip = skip.wrapping_add(1); ip_index = next_ip; next_ip = ip_index.wrapping_add(bytes_between_hash_lookups as usize); if next_ip > ip_limit { code_block_selection = CodeBlockState::EMIT_REMAINDER; break; } next_hash = Hash(&input_ptr[next_ip..], shift); candidate = ip_index.wrapping_sub(last_distance as usize); if IsMatch(&input_ptr[ip_index..], &input_ptr[candidate..]) && candidate < ip_index { table[hash as usize] = ip_index.wrapping_sub(base_ip) as i32; break; } candidate = base_ip.wrapping_add(table[hash as usize] as usize); table[hash as usize] = ip_index.wrapping_sub(base_ip) as i32; if IsMatch(&input_ptr[ip_index..], &input_ptr[candidate..]) { break; } } if !(ip_index.wrapping_sub(candidate) > (1usize << 18).wrapping_sub(16) as isize as usize && code_block_selection == CodeBlockState::EMIT_COMMANDS) { break; } } if code_block_selection != CodeBlockState::EMIT_COMMANDS { break; } let base: usize = ip_index; let matched = (5usize).wrapping_add(FindMatchLengthWithLimit( &input_ptr[candidate + 5..], &input_ptr[ip_index + 5..], ip_end.wrapping_sub(ip_index).wrapping_sub(5), )); let distance = base.wrapping_sub(candidate) as i32; let insert = base.wrapping_sub(next_emit); ip_index = ip_index.wrapping_add(matched); if insert < 6210 { EmitInsertLen( insert, cmd_depth, cmd_bits, &mut cmd_histo[..], storage_ix, storage, ); } else if ShouldUseUncompressedMode( (next_emit as isize) - (metablock_start as isize), insert, literal_ratio, ) { EmitUncompressedMetaBlock( &input_ptr[metablock_start..], base.wrapping_sub(metablock_start), mlen_storage_ix.wrapping_sub(3), storage_ix, storage, ); input_size = input_size.wrapping_sub(base.wrapping_sub(input_index)); input_index = base; next_emit = input_index; code_block_selection = CodeBlockState::NEXT_BLOCK; continue 'continue_to_next_block; } else { EmitLongInsertLen( insert, cmd_depth, cmd_bits, &mut cmd_histo[..], storage_ix, storage, ); } EmitLiterals( &input_ptr[next_emit..], insert, &mut lit_depth[..], &mut lit_bits[..], storage_ix, storage, ); if distance == last_distance { BrotliWriteBits( cmd_depth[64] as usize, cmd_bits[64] as u64, storage_ix, storage, ); { let _rhs = 1u32; let _lhs = &mut cmd_histo[64]; *_lhs = (*_lhs).wrapping_add(_rhs); } } else { EmitDistance( distance as usize, cmd_depth, cmd_bits, &mut cmd_histo[..], storage_ix, storage, ); last_distance = distance; } EmitCopyLenLastDistance( matched, cmd_depth, cmd_bits, &mut cmd_histo[..], storage_ix, storage, ); next_emit = ip_index; if ip_index >= ip_limit { code_block_selection = CodeBlockState::EMIT_REMAINDER; continue 'continue_to_next_block; } assert!(ip_index >= 3); let input_bytes: u64 = BROTLI_UNALIGNED_LOAD64(&input_ptr[ip_index - 3..]); let mut prev_hash: u32 = HashBytesAtOffset(input_bytes, 0, shift); let cur_hash: u32 = HashBytesAtOffset(input_bytes, 3, shift); table[prev_hash as usize] = ip_index.wrapping_sub(base_ip).wrapping_sub(3) as i32; prev_hash = HashBytesAtOffset(input_bytes, 1, shift); table[prev_hash as usize] = ip_index.wrapping_sub(base_ip).wrapping_sub(2) as i32; prev_hash = HashBytesAtOffset(input_bytes, 2, shift); table[prev_hash as usize] = ip_index.wrapping_sub(base_ip).wrapping_sub(1) as i32; candidate = base_ip.wrapping_add(table[cur_hash as usize] as usize); table[cur_hash as usize] = ip_index.wrapping_sub(base_ip) as i32; while IsMatch(&input_ptr[ip_index..], &input_ptr[candidate..]) { let base: usize = ip_index; let matched: usize = (5usize).wrapping_add(FindMatchLengthWithLimit( &input_ptr[candidate + 5..], &input_ptr[ip_index + 5..], ip_end.wrapping_sub(ip_index).wrapping_sub(5), )); if ip_index.wrapping_sub(candidate) > (1usize << 18).wrapping_sub(16) { break; } ip_index = ip_index.wrapping_add(matched); last_distance = base.wrapping_sub(candidate) as i32; EmitCopyLen( matched, cmd_depth, cmd_bits, &mut cmd_histo[..], storage_ix, storage, ); EmitDistance( last_distance as usize, cmd_depth, cmd_bits, &mut cmd_histo[..], storage_ix, storage, ); next_emit = ip_index; if ip_index >= ip_limit { code_block_selection = CodeBlockState::EMIT_REMAINDER; continue 'continue_to_next_block; } assert!(ip_index >= 3); let input_bytes: u64 = BROTLI_UNALIGNED_LOAD64(&input_ptr[ip_index - 3..]); let mut prev_hash: u32 = HashBytesAtOffset(input_bytes, 0, shift); let cur_hash: u32 = HashBytesAtOffset(input_bytes, 3, shift); table[prev_hash as usize] = ip_index.wrapping_sub(base_ip).wrapping_sub(3) as i32; prev_hash = HashBytesAtOffset(input_bytes, 1, shift); table[prev_hash as usize] = ip_index.wrapping_sub(base_ip).wrapping_sub(2) as i32; prev_hash = HashBytesAtOffset(input_bytes, 2, shift); table[prev_hash as usize] = ip_index.wrapping_sub(base_ip).wrapping_sub(1) as i32; candidate = base_ip.wrapping_add(table[cur_hash as usize] as usize); table[cur_hash as usize] = ip_index.wrapping_sub(base_ip) as i32; } if code_block_selection == CodeBlockState::EMIT_REMAINDER { break; } if code_block_selection == CodeBlockState::EMIT_COMMANDS { next_hash = Hash( &input_ptr[{ ip_index = ip_index.wrapping_add(1); ip_index }..], shift, ); } } } code_block_selection = CodeBlockState::EMIT_REMAINDER; continue 'continue_to_next_block; } else if code_block_selection == CodeBlockState::EMIT_REMAINDER { input_index = input_index.wrapping_add(block_size); input_size = input_size.wrapping_sub(block_size); block_size = min(input_size, kMergeBlockSize); if input_size > 0 && (total_block_size.wrapping_add(block_size) <= (1i32 << 20) as usize) && ShouldMergeBlock(&input_ptr[input_index..], block_size, &mut lit_depth[..]) { total_block_size = total_block_size.wrapping_add(block_size); UpdateBits( 20usize, total_block_size.wrapping_sub(1) as u32, mlen_storage_ix, storage, ); code_block_selection = CodeBlockState::EMIT_COMMANDS; continue 'continue_to_next_block; } if next_emit < ip_end { let insert: usize = ip_end.wrapping_sub(next_emit); if insert < 6210 { EmitInsertLen( insert, cmd_depth, cmd_bits, &mut cmd_histo[..], storage_ix, storage, ); EmitLiterals( &input_ptr[next_emit..], insert, &mut lit_depth[..], &mut lit_bits[..], storage_ix, storage, ); } else if ShouldUseUncompressedMode( next_emit as isize - metablock_start as isize, insert, literal_ratio, ) { EmitUncompressedMetaBlock( &input_ptr[metablock_start..], ip_end.wrapping_sub(metablock_start), mlen_storage_ix.wrapping_sub(3), storage_ix, storage, ); } else { EmitLongInsertLen( insert, cmd_depth, cmd_bits, &mut cmd_histo[..], storage_ix, storage, ); EmitLiterals( &input_ptr[next_emit..], insert, &mut lit_depth[..], &mut lit_bits[..], storage_ix, storage, ); } } next_emit = ip_end; code_block_selection = CodeBlockState::NEXT_BLOCK; continue 'continue_to_next_block; } else if code_block_selection == CodeBlockState::NEXT_BLOCK { if input_size > 0 { metablock_start = input_index; block_size = min(input_size, kFirstBlockSize); total_block_size = block_size; mlen_storage_ix = storage_ix.wrapping_add(3); store_meta_block_header(block_size, false, storage_ix, storage); BrotliWriteBits(13usize, 0, storage_ix, storage); literal_ratio = BuildAndStoreLiteralPrefixCode( m, &input_ptr[input_index..], block_size, &mut lit_depth[..], &mut lit_bits[..], storage_ix, storage, ); BuildAndStoreCommandPrefixCode( &mut cmd_histo[..], cmd_depth, cmd_bits, storage_ix, storage, ); code_block_selection = CodeBlockState::EMIT_COMMANDS; continue 'continue_to_next_block; } break; } } if !is_last { cmd_code[0] = 0; *cmd_code_numbits = 0; BuildAndStoreCommandPrefixCode( &mut cmd_histo[..], cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, ); } } macro_rules! compress_specialization { ($table_bits : expr, $fname: ident) => { fn $fname>( mht: &mut AllocHT, input: &[u8], input_size: usize, is_last: bool, table: &mut [i32], cmd_depth: &mut [u8], cmd_bits: &mut [u16], cmd_code_numbits: &mut usize, cmd_code: &mut [u8], storage_ix: &mut usize, storage: &mut [u8], ) { compress_fragment_fast_impl( mht, input, input_size, is_last, table, $table_bits, cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage, ); } }; } compress_specialization!(9, BrotliCompressFragmentFastImpl9); compress_specialization!(11, BrotliCompressFragmentFastImpl11); compress_specialization!(13, BrotliCompressFragmentFastImpl13); compress_specialization!(15, BrotliCompressFragmentFastImpl15); pub(crate) fn compress_fragment_fast>( m: &mut AllocHT, input: &[u8], input_size: usize, is_last: bool, table: &mut [i32], table_size: usize, cmd_depth: &mut [u8], cmd_bits: &mut [u16], cmd_code_numbits: &mut usize, cmd_code: &mut [u8], storage_ix: &mut usize, storage: &mut [u8], ) { let initial_storage_ix: usize = *storage_ix; let table_bits: usize = Log2FloorNonZero(table_size as u64) as usize; if input_size == 0usize { BrotliWriteBits(1usize, 1, storage_ix, storage); BrotliWriteBits(1usize, 1, storage_ix, storage); *storage_ix = storage_ix.wrapping_add(7u32 as usize) & !7u32 as usize; return; } if table_bits == 9usize { BrotliCompressFragmentFastImpl9( m, input, input_size, is_last, table, cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage, ); } if table_bits == 11usize { BrotliCompressFragmentFastImpl11( m, input, input_size, is_last, table, cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage, ); } if table_bits == 13usize { BrotliCompressFragmentFastImpl13( m, input, input_size, is_last, table, cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage, ); } if table_bits == 15usize { BrotliCompressFragmentFastImpl15( m, input, input_size, is_last, table, cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage, ); } if storage_ix.wrapping_sub(initial_storage_ix) > (31usize).wrapping_add(input_size << 3) { EmitUncompressedMetaBlock(input, input_size, initial_storage_ix, storage_ix, storage); } if is_last { BrotliWriteBits(1usize, 1, storage_ix, storage); BrotliWriteBits(1usize, 1, storage_ix, storage); *storage_ix = storage_ix.wrapping_add(7u32 as usize) & !7u32 as usize; } } brotli-8.0.2/src/enc/compress_fragment_two_pass.rs000064400000000000000000001036171046102023000204750ustar 00000000000000use core; use core::cmp::min; use super::super::alloc; use super::backward_references::kHashMul32; use super::bit_cost::BitsEntropy; use super::brotli_bit_stream::{BrotliBuildAndStoreHuffmanTreeFast, BrotliStoreHuffmanTree}; use super::entropy_encode::{ BrotliConvertBitDepthsToSymbols, BrotliCreateHuffmanTree, HuffmanTree, }; use super::static_dict::{ FindMatchLengthWithLimit, BROTLI_UNALIGNED_LOAD32, BROTLI_UNALIGNED_LOAD64, BROTLI_UNALIGNED_STORE64, }; use super::util::{floatX, Log2FloorNonZero}; static kCompressFragmentTwoPassBlockSize: usize = (1i32 << 17) as usize; // returns number of commands inserted fn EmitInsertLen(insertlen: u32, commands: &mut &mut [u32]) -> usize { if insertlen < 6u32 { (*commands)[0] = insertlen; } else if insertlen < 130u32 { let tail: u32 = insertlen.wrapping_sub(2); let nbits: u32 = Log2FloorNonZero(tail as (u64)).wrapping_sub(1); let prefix: u32 = tail >> nbits; let inscode: u32 = (nbits << 1).wrapping_add(prefix).wrapping_add(2); let extra: u32 = tail.wrapping_sub(prefix << nbits); (*commands)[0] = inscode | extra << 8; } else if insertlen < 2114u32 { let tail: u32 = insertlen.wrapping_sub(66); let nbits: u32 = Log2FloorNonZero(tail as (u64)); let code: u32 = nbits.wrapping_add(10); let extra: u32 = tail.wrapping_sub(1u32 << nbits); (*commands)[0] = code | extra << 8; } else if insertlen < 6210u32 { let extra: u32 = insertlen.wrapping_sub(2114); (*commands)[0] = 21u32 | extra << 8; } else if insertlen < 22594u32 { let extra: u32 = insertlen.wrapping_sub(6210); (*commands)[0] = 22u32 | extra << 8; } else { let extra: u32 = insertlen.wrapping_sub(22594); (*commands)[0] = 23u32 | extra << 8; } let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); 1 } fn EmitDistance(distance: u32, commands: &mut &mut [u32]) -> usize { let d: u32 = distance.wrapping_add(3); let nbits: u32 = Log2FloorNonZero(d as (u64)).wrapping_sub(1); let prefix: u32 = d >> nbits & 1u32; let offset: u32 = (2u32).wrapping_add(prefix) << nbits; let distcode: u32 = (2u32) .wrapping_mul(nbits.wrapping_sub(1)) .wrapping_add(prefix) .wrapping_add(80); let extra: u32 = d.wrapping_sub(offset); (*commands)[0] = distcode | extra << 8; let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); 1 } fn EmitCopyLenLastDistance(copylen: usize, commands: &mut &mut [u32]) -> usize { if copylen < 12usize { (*commands)[0] = copylen.wrapping_add(20) as u32; let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); 1 } else if copylen < 72usize { let tail: usize = copylen.wrapping_sub(8); let nbits: usize = Log2FloorNonZero(tail as u64).wrapping_sub(1) as usize; let prefix: usize = tail >> nbits; let code: usize = (nbits << 1).wrapping_add(prefix).wrapping_add(28); let extra: usize = tail.wrapping_sub(prefix << nbits); (*commands)[0] = (code | extra << 8) as u32; let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); 1 } else if copylen < 136usize { let tail: usize = copylen.wrapping_sub(8); let code: usize = (tail >> 5).wrapping_add(54); let extra: usize = tail & 31usize; (*commands)[0] = (code | extra << 8) as u32; let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); (*commands)[0] = 64u32; let remainder2 = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder2[1..]); 2 } else if copylen < 2120usize { let tail: usize = copylen.wrapping_sub(72); let nbits: usize = Log2FloorNonZero(tail as u64) as usize; let code: usize = nbits.wrapping_add(52); let extra: usize = tail.wrapping_sub(1usize << nbits); (*commands)[0] = (code | extra << 8) as u32; let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); (*commands)[0] = 64u32; let remainder2 = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder2[1..]); 2 } else { let extra: usize = copylen.wrapping_sub(2120); (*commands)[0] = (63usize | extra << 8) as u32; let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); (*commands)[0] = 64u32; let remainder2 = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder2[1..]); 2 } } fn HashBytesAtOffset(v: u64, offset: i32, shift: usize, length: usize) -> u32 { let h: u64 = (v >> (8i32 * offset) << ((8 - length) * 8)).wrapping_mul(kHashMul32 as (u64)); (h >> shift) as u32 } fn EmitCopyLen(copylen: usize, commands: &mut &mut [u32]) -> usize { if copylen < 10usize { (*commands)[0] = copylen.wrapping_add(38) as u32; } else if copylen < 134usize { let tail: usize = copylen.wrapping_sub(6); let nbits: usize = Log2FloorNonZero(tail as u64).wrapping_sub(1) as usize; let prefix: usize = tail >> nbits; let code: usize = (nbits << 1).wrapping_add(prefix).wrapping_add(44); let extra: usize = tail.wrapping_sub(prefix << nbits); (*commands)[0] = (code | extra << 8) as u32; } else if copylen < 2118usize { let tail: usize = copylen.wrapping_sub(70); let nbits: usize = Log2FloorNonZero(tail as u64) as usize; let code: usize = nbits.wrapping_add(52); let extra: usize = tail.wrapping_sub(1usize << nbits); (*commands)[0] = (code | extra << 8) as u32; } else { let extra: usize = copylen.wrapping_sub(2118); (*commands)[0] = (63usize | extra << 8) as u32; } let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); 1 } fn Hash(p: &[u8], shift: usize, length: usize) -> u32 { let h: u64 = (BROTLI_UNALIGNED_LOAD64(p) << ((8 - length) * 8)).wrapping_mul(kHashMul32 as (u64)); (h >> shift) as u32 } fn IsMatch(p1: &[u8], p2: &[u8], length: usize) -> bool { BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && (length == 4 || (p1[4] == p2[4] && p1[5] == p2[5])) } #[allow(unused_assignments)] fn CreateCommands( input_index: usize, block_size: usize, input_size: usize, base_ip: &[u8], table: &mut [i32], table_bits: usize, min_match: usize, literals: &mut &mut [u8], num_literals: &mut usize, commands: &mut &mut [u32], num_commands: &mut usize, ) { let mut ip_index: usize = input_index; let shift: usize = (64u32 as usize).wrapping_sub(table_bits); let ip_end: usize = input_index.wrapping_add(block_size); let mut next_emit: usize = input_index; let mut last_distance: i32 = -1i32; let kInputMarginBytes: usize = 16usize; if block_size >= kInputMarginBytes { let len_limit: usize = min( block_size.wrapping_sub(min_match), input_size.wrapping_sub(kInputMarginBytes), ); let ip_limit: usize = input_index.wrapping_add(len_limit); let mut next_hash: u32; let mut goto_emit_remainder = false; next_hash = Hash( &base_ip[{ ip_index = ip_index.wrapping_add(1); ip_index }..], shift, min_match, ); while !goto_emit_remainder { let mut skip: u32 = 32u32; let mut next_ip: usize = ip_index; let mut candidate: usize = 0; loop { { 'break3: loop { { let hash: u32 = next_hash; let bytes_between_hash_lookups: u32 = skip >> 5; skip = skip.wrapping_add(1); ip_index = next_ip; next_ip = ip_index.wrapping_add(bytes_between_hash_lookups as usize); if next_ip > ip_limit { goto_emit_remainder = true; { break 'break3; } } next_hash = Hash(&base_ip[next_ip..], shift, min_match); candidate = ip_index.wrapping_sub(last_distance as usize); if IsMatch(&base_ip[ip_index..], &base_ip[candidate..], min_match) && candidate < ip_index { table[(hash as usize)] = ip_index.wrapping_sub(0) as i32; { break 'break3; } } candidate = table[(hash as usize)] as usize; table[(hash as usize)] = ip_index.wrapping_sub(0) as i32; } if IsMatch(&base_ip[ip_index..], &base_ip[candidate..], min_match) { break; } } } if !(ip_index.wrapping_sub(candidate) > (1usize << 18).wrapping_sub(16) as isize as usize && !goto_emit_remainder) { break; } } if goto_emit_remainder { break; } { let base: usize = ip_index; let matched: usize = min_match.wrapping_add(FindMatchLengthWithLimit( &base_ip[(candidate + min_match)..], &base_ip[(ip_index + min_match)..], ip_end.wrapping_sub(ip_index).wrapping_sub(min_match), )); let distance: i32 = base.wrapping_sub(candidate) as i32; let insert: i32 = base.wrapping_sub(next_emit) as i32; ip_index = ip_index.wrapping_add(matched); *num_commands += EmitInsertLen(insert as u32, commands); (*literals)[..(insert as usize)] .clone_from_slice(&base_ip[next_emit..(next_emit + insert as usize)]); *num_literals += insert as usize; let new_literals = core::mem::take(literals); let _ = core::mem::replace(literals, &mut new_literals[(insert as usize)..]); if distance == last_distance { (*commands)[0] = 64u32; let remainder = core::mem::take(commands); let _ = core::mem::replace(commands, &mut remainder[1..]); *num_commands += 1; } else { *num_commands += EmitDistance(distance as u32, commands); last_distance = distance; } *num_commands += EmitCopyLenLastDistance(matched, commands); next_emit = ip_index; if ip_index >= ip_limit { goto_emit_remainder = true; { break; } } { let mut input_bytes: u64; let mut prev_hash: u32; let cur_hash: u32; if min_match == 4 { input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index - 3)..]); cur_hash = HashBytesAtOffset(input_bytes, 3i32, shift, min_match); prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(3) as i32; prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(2) as i32; prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(1) as i32; } else { assert!(ip_index >= 5); // could this be off the end FIXME input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index - 5)..]); prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(5) as i32; prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(4) as i32; prev_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(3) as i32; assert!(ip_index >= 2); input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index - 2)..]); cur_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(2) as i32; prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(1) as i32; } candidate = table[(cur_hash as usize)] as usize; table[(cur_hash as usize)] = ip_index as i32; } } while ip_index.wrapping_sub(candidate) <= (1usize << 18).wrapping_sub(16) as isize as usize && IsMatch(&base_ip[ip_index..], &base_ip[candidate..], min_match) { let base_index: usize = ip_index; let matched: usize = min_match.wrapping_add(FindMatchLengthWithLimit( &base_ip[(candidate + min_match)..], &base_ip[(ip_index + min_match)..], ip_end.wrapping_sub(ip_index).wrapping_sub(min_match), )); ip_index = ip_index.wrapping_add(matched); last_distance = base_index.wrapping_sub(candidate) as i32; *num_commands += EmitCopyLen(matched, commands); *num_commands += EmitDistance(last_distance as u32, commands); next_emit = ip_index; if ip_index >= ip_limit { goto_emit_remainder = true; { break; } } { assert!(ip_index >= 5); let mut input_bytes: u64; let cur_hash: u32; let mut prev_hash: u32; if min_match == 4 { input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index - 3)..]); cur_hash = HashBytesAtOffset(input_bytes, 3i32, shift, min_match); prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(3) as i32; prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(2) as i32; prev_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(1) as i32; } else { input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index - 5)..]); prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(5) as i32; prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(4) as i32; prev_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(3) as i32; assert!(ip_index >= 2); input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index - 2)..]); cur_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(2) as i32; prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); table[(prev_hash as usize)] = ip_index.wrapping_sub(1) as i32; } candidate = table[(cur_hash as usize)] as usize; table[(cur_hash as usize)] = ip_index as i32; } } if !goto_emit_remainder { next_hash = Hash( &base_ip[{ ip_index = ip_index.wrapping_add(1); ip_index }..], shift, min_match, ); } } } if next_emit < ip_end { let insert: u32 = ip_end.wrapping_sub(next_emit) as u32; *num_commands += EmitInsertLen(insert, commands); literals[..insert as usize] .clone_from_slice(&base_ip[next_emit..(next_emit + insert as usize)]); let mut xliterals = core::mem::take(literals); *literals = &mut core::mem::take(&mut xliterals)[(insert as usize)..]; *num_literals += insert as usize; } } fn ShouldCompress(input: &[u8], input_size: usize, num_literals: usize) -> bool { let corpus_size = input_size as floatX; if (num_literals as floatX) < 0.98 * corpus_size { true } else { let mut literal_histo: [u32; 256] = [0; 256]; let max_total_bit_cost: floatX = corpus_size * 8.0 * 0.98 / 43.0; let mut i: usize; i = 0usize; while i < input_size { { let _rhs = 1; let _lhs = &mut literal_histo[input[i] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } i = i.wrapping_add(43); } BitsEntropy(&mut literal_histo[..], 256) < max_total_bit_cost } } pub fn BrotliWriteBits(n_bits: usize, bits: u64, pos: &mut usize, array: &mut [u8]) { let p = &mut array[(*pos >> 3)..]; let mut v: u64 = p[0] as (u64); v |= bits << (*pos & 7); BROTLI_UNALIGNED_STORE64(p, v); *pos = pos.wrapping_add(n_bits); } pub(crate) fn store_meta_block_header( len: usize, is_uncompressed: bool, storage_ix: &mut usize, storage: &mut [u8], ) { let mut nibbles: u64 = 6; BrotliWriteBits(1, 0, storage_ix, storage); if len <= (1u32 << 16) as usize { nibbles = 4; } else if len <= (1u32 << 20) as usize { nibbles = 5; } BrotliWriteBits(2, nibbles.wrapping_sub(4), storage_ix, storage); BrotliWriteBits( nibbles.wrapping_mul(4) as usize, len.wrapping_sub(1) as u64, storage_ix, storage, ); BrotliWriteBits(1, u64::from(is_uncompressed), storage_ix, storage); } pub fn memcpy( dst: &mut [T], dst_offset: usize, src: &[T], src_offset: usize, size_to_copy: usize, ) { dst[dst_offset..(dst_offset + size_to_copy)] .clone_from_slice(&src[src_offset..(src_offset + size_to_copy)]); } fn BuildAndStoreCommandPrefixCode( histogram: &[u32], depth: &mut [u8], bits: &mut [u16], storage_ix: &mut usize, storage: &mut [u8], ) { let mut tree = [HuffmanTree::new(0, 0, 0); 129]; let mut cmd_depth: [u8; 704] = [0; 704]; let mut cmd_bits: [u16; 64] = [0; 64]; BrotliCreateHuffmanTree(histogram, 64usize, 15i32, &mut tree[..], depth); BrotliCreateHuffmanTree( &histogram[64..], 64usize, 14i32, &mut tree[..], &mut depth[64..], ); /* We have to jump through a few hoops here in order to compute the command bits because the symbols are in a different order than in the full alphabet. This looks complicated, but having the symbols in this order in the command bits saves a few branches in the Emit* functions. */ memcpy(&mut cmd_depth[..], 0, depth, 24, 24); memcpy(&mut cmd_depth[..], 24, depth, 0, 8); memcpy(&mut cmd_depth[..], 32usize, depth, (48usize), 8usize); memcpy(&mut cmd_depth[..], 40usize, depth, (8usize), 8usize); memcpy(&mut cmd_depth[..], 48usize, depth, (56usize), 8usize); memcpy(&mut cmd_depth[..], 56usize, depth, (16usize), 8usize); BrotliConvertBitDepthsToSymbols(&mut cmd_depth[..], 64usize, &mut cmd_bits[..]); memcpy(bits, 0, &cmd_bits[..], 24usize, 16usize); memcpy(bits, (8usize), &cmd_bits[..], 40usize, 8usize); memcpy(bits, (16usize), &cmd_bits[..], 56usize, 8usize); memcpy(bits, (24usize), &cmd_bits[..], 0, 48usize); memcpy(bits, (48usize), &cmd_bits[..], 32usize, 8usize); memcpy(bits, (56usize), &cmd_bits[..], 48usize, 8usize); BrotliConvertBitDepthsToSymbols(&mut depth[64..], 64usize, &mut bits[64..]); { for item in cmd_depth[..64].iter_mut() { *item = 0; } //memset(&mut cmd_depth[..], 0i32, 64usize); memcpy(&mut cmd_depth[..], 0, depth, (24usize), 8usize); memcpy(&mut cmd_depth[..], 64usize, depth, (32usize), 8usize); memcpy(&mut cmd_depth[..], 128usize, depth, (40usize), 8usize); memcpy(&mut cmd_depth[..], 192usize, depth, (48usize), 8usize); memcpy(&mut cmd_depth[..], 384usize, depth, (56usize), 8usize); for i in 0usize..8usize { cmd_depth[(128usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i]; cmd_depth[(256usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(8)]; cmd_depth[(448usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(16)]; } BrotliStoreHuffmanTree( &mut cmd_depth[..], 704usize, &mut tree[..], storage_ix, storage, ); } BrotliStoreHuffmanTree( &mut depth[64..], 64usize, &mut tree[..], storage_ix, storage, ); } fn StoreCommands>( mht: &mut AllocHT, mut literals: &[u8], num_literals: usize, commands: &[u32], num_commands: usize, storage_ix: &mut usize, storage: &mut [u8], ) { static kNumExtraBits: [u32; 128] = [ 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, ]; static kInsertOffset: [u32; 24] = [ 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594, ]; let mut lit_depths: [u8; 256] = [0; 256]; let mut lit_bits: [u16; 256] = [0; 256]; // maybe return this instead let mut lit_histo: [u32; 256] = [0; 256]; // maybe return this instead of init let mut cmd_depths: [u8; 128] = [0; 128]; let mut cmd_bits: [u16; 128] = [0; 128]; let mut cmd_histo: [u32; 128] = [0; 128]; let mut i: usize; for i in 0usize..num_literals { let _rhs = 1; let _lhs = &mut lit_histo[literals[i] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } BrotliBuildAndStoreHuffmanTreeFast( mht, &lit_histo[..], num_literals, 8usize, &mut lit_depths[..], &mut lit_bits[..], storage_ix, storage, ); i = 0usize; while i < num_commands { { let code: u32 = commands[i] & 0xffu32; { let _rhs = 1; let _lhs = &mut cmd_histo[code as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } i = i.wrapping_add(1); } { let _rhs = 1i32; let _lhs = &mut cmd_histo[1]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } { let _rhs = 1i32; let _lhs = &mut cmd_histo[2]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } { let _rhs = 1i32; let _lhs = &mut cmd_histo[64]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } { let _rhs = 1i32; let _lhs = &mut cmd_histo[84]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } BuildAndStoreCommandPrefixCode( &mut cmd_histo[..], &mut cmd_depths[..], &mut cmd_bits[..], storage_ix, storage, ); for i in 0usize..num_commands { let cmd: u32 = commands[i]; let code: u32 = cmd & 0xffu32; let extra: u32 = cmd >> 8; BrotliWriteBits( cmd_depths[code as usize] as usize, cmd_bits[code as usize] as (u64), storage_ix, storage, ); BrotliWriteBits( kNumExtraBits[code as usize] as usize, extra as (u64), storage_ix, storage, ); if code < 24u32 { let insert: u32 = kInsertOffset[code as usize].wrapping_add(extra); for literal in literals[..(insert as usize)].iter() { let lit: u8 = *literal; BrotliWriteBits( lit_depths[lit as usize] as usize, lit_bits[lit as usize] as (u64), storage_ix, storage, ); } literals = &literals[insert as usize..]; } } } fn EmitUncompressedMetaBlock( input: &[u8], input_size: usize, storage_ix: &mut usize, storage: &mut [u8], ) { store_meta_block_header(input_size, true, storage_ix, storage); *storage_ix = storage_ix.wrapping_add(7u32 as usize) & !7u32 as usize; memcpy(storage, (*storage_ix >> 3), input, 0, input_size); *storage_ix = storage_ix.wrapping_add(input_size << 3); storage[(*storage_ix >> 3)] = 0u8; } #[allow(unused_variables)] #[inline(always)] fn compress_fragment_two_pass_impl>( m: &mut AllocHT, base_ip: &[u8], mut input_size: usize, is_last: bool, command_buf: &mut [u32], literal_buf: &mut [u8], table: &mut [i32], table_bits: usize, min_match: usize, storage_ix: &mut usize, storage: &mut [u8], ) { let mut input_index: usize = 0usize; while input_size > 0usize { let block_size: usize = min(input_size, kCompressFragmentTwoPassBlockSize); let mut num_literals: usize = 0; let mut num_commands: usize = 0; { let mut literals = &mut literal_buf[..]; let mut commands = &mut command_buf[..]; CreateCommands( input_index, block_size, input_size, base_ip, table, table_bits, min_match, &mut literals, &mut num_literals, &mut commands, &mut num_commands, ); } if ShouldCompress(&base_ip[input_index..], block_size, num_literals) { store_meta_block_header(block_size, false, storage_ix, storage); BrotliWriteBits(13usize, 0, storage_ix, storage); StoreCommands( m, literal_buf, num_literals, command_buf, num_commands, storage_ix, storage, ); } else { EmitUncompressedMetaBlock(&base_ip[input_index..], block_size, storage_ix, storage); } input_index = input_index.wrapping_add(block_size); input_size = input_size.wrapping_sub(block_size); } } macro_rules! compress_specialization { ($table_bits : expr, $fname: ident) => { fn $fname>( mht: &mut AllocHT, input: &[u8], input_size: usize, is_last: bool, command_buf: &mut [u32], literal_buf: &mut [u8], table: &mut [i32], storage_ix: &mut usize, storage: &mut [u8], ) { let min_match = if $table_bits < 15 { 4 } else { 6 }; compress_fragment_two_pass_impl( mht, input, input_size, is_last, command_buf, literal_buf, table, $table_bits, min_match, storage_ix, storage, ); } }; } compress_specialization!(8, BrotliCompressFragmentTwoPassImpl8); compress_specialization!(9, BrotliCompressFragmentTwoPassImpl9); compress_specialization!(10, BrotliCompressFragmentTwoPassImpl10); compress_specialization!(11, BrotliCompressFragmentTwoPassImpl11); compress_specialization!(12, BrotliCompressFragmentTwoPassImpl12); compress_specialization!(13, BrotliCompressFragmentTwoPassImpl13); compress_specialization!(14, BrotliCompressFragmentTwoPassImpl14); compress_specialization!(15, BrotliCompressFragmentTwoPassImpl15); compress_specialization!(16, BrotliCompressFragmentTwoPassImpl16); compress_specialization!(17, BrotliCompressFragmentTwoPassImpl17); fn RewindBitPosition(new_storage_ix: usize, storage_ix: &mut usize, storage: &mut [u8]) { let bitpos: usize = new_storage_ix & 7usize; let mask: usize = (1u32 << bitpos).wrapping_sub(1) as usize; { let _rhs = mask as u8; let _lhs = &mut storage[(new_storage_ix >> 3)]; *_lhs = (*_lhs as i32 & _rhs as i32) as u8; } *storage_ix = new_storage_ix; } pub(crate) fn compress_fragment_two_pass>( m: &mut AllocHT, input: &[u8], input_size: usize, is_last: bool, command_buf: &mut [u32], literal_buf: &mut [u8], table: &mut [i32], table_size: usize, storage_ix: &mut usize, storage: &mut [u8], ) { let initial_storage_ix: usize = *storage_ix; let table_bits: usize = Log2FloorNonZero(table_size as u64) as usize; if table_bits == 8usize { BrotliCompressFragmentTwoPassImpl8( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 9usize { BrotliCompressFragmentTwoPassImpl9( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 10usize { BrotliCompressFragmentTwoPassImpl10( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 11usize { BrotliCompressFragmentTwoPassImpl11( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 12usize { BrotliCompressFragmentTwoPassImpl12( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 13usize { BrotliCompressFragmentTwoPassImpl13( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 14usize { BrotliCompressFragmentTwoPassImpl14( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 15usize { BrotliCompressFragmentTwoPassImpl15( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 16usize { BrotliCompressFragmentTwoPassImpl16( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if table_bits == 17usize { BrotliCompressFragmentTwoPassImpl17( m, input, input_size, is_last, command_buf, literal_buf, table, storage_ix, storage, ); } if storage_ix.wrapping_sub(initial_storage_ix) > (31usize).wrapping_add(input_size << 3) { RewindBitPosition(initial_storage_ix, storage_ix, storage); EmitUncompressedMetaBlock(input, input_size, storage_ix, storage); } if is_last { BrotliWriteBits(1, 1, storage_ix, storage); BrotliWriteBits(1, 1, storage_ix, storage); *storage_ix = storage_ix.wrapping_add(7u32 as usize) & !7u32 as usize; } } brotli-8.0.2/src/enc/constants.rs000064400000000000000000001152471046102023000150560ustar 00000000000000pub const BROTLI_NUM_BLOCK_LEN_SYMBOLS: usize = 26; pub static kInsBase: [u32; 24] = [ 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594, ]; pub static kInsExtra: [u32; 24] = [ 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24, ]; pub static kCopyBase: [u32; 24] = [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30, 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118, ]; pub static kCopyExtra: [u32; 24] = [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24, ]; /* Common context lookup table for all context modes. */ static kContextLookup: [u8; 2048] = [ /* CONTEXT_LSB6, last byte. */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, /* CONTEXT_LSB6, second last byte, */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* CONTEXT_MSB6, last byte. */ 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, /* CONTEXT_MSB6, second last byte, */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* CONTEXT_UTF8, last byte. */ /* ASCII range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, /* UTF8 continuation byte range. */ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, /* UTF8 lead byte range. */ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, /* CONTEXT_UTF8 second last byte. */ /* ASCII range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, /* UTF8 continuation byte range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* UTF8 lead byte range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, /* CONTEXT_SIGNED, second last byte. */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, ]; pub const BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS: usize = 544; pub const BROTLI_NUM_LITERAL_SYMBOLS: usize = 256; pub const BROTLI_NUM_COMMAND_SYMBOLS: usize = 704; pub const BROTLI_WINDOW_GAP: usize = 16; pub const BROTLI_MAX_NPOSTFIX: usize = 3; pub const BROTLI_MAX_NDIRECT: usize = 120; #[inline(always)] pub fn BROTLI_CONTEXT_LUT(mode: super::histogram::ContextType) -> &'static [u8] { &kContextLookup[((mode as usize) << 9)..] } pub fn BROTLI_CONTEXT(P1: u8, P2: u8, LUT: &[u8]) -> u8 { (LUT)[P1 as usize] | ((LUT)[256 + P2 as usize]) } pub static kZeroRepsBits: [usize; 704] = [ 0x0, 0x0, 0x0, 0x7, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x770, 0xb87, 0x1387, 0x1b87, 0x2387, 0x2b87, 0x3387, 0x3b87, 0x397, 0xb97, 0x1397, 0x1b97, 0x2397, 0x2b97, 0x3397, 0x3b97, 0x3a7, 0xba7, 0x13a7, 0x1ba7, 0x23a7, 0x2ba7, 0x33a7, 0x3ba7, 0x3b7, 0xbb7, 0x13b7, 0x1bb7, 0x23b7, 0x2bb7, 0x33b7, 0x3bb7, 0x3c7, 0xbc7, 0x13c7, 0x1bc7, 0x23c7, 0x2bc7, 0x33c7, 0x3bc7, 0x3d7, 0xbd7, 0x13d7, 0x1bd7, 0x23d7, 0x2bd7, 0x33d7, 0x3bd7, 0x3e7, 0xbe7, 0x13e7, 0x1be7, 0x23e7, 0x2be7, 0x33e7, 0x3be7, 0x3f7, 0xbf7, 0x13f7, 0x1bf7, 0x23f7, 0x2bf7, 0x33f7, 0x3bf7, 0x1c387, 0x5c387, 0x9c387, 0xdc387, 0x11c387, 0x15c387, 0x19c387, 0x1dc387, 0x1cb87, 0x5cb87, 0x9cb87, 0xdcb87, 0x11cb87, 0x15cb87, 0x19cb87, 0x1dcb87, 0x1d387, 0x5d387, 0x9d387, 0xdd387, 0x11d387, 0x15d387, 0x19d387, 0x1dd387, 0x1db87, 0x5db87, 0x9db87, 0xddb87, 0x11db87, 0x15db87, 0x19db87, 0x1ddb87, 0x1e387, 0x5e387, 0x9e387, 0xde387, 0x11e387, 0x15e387, 0x19e387, 0x1de387, 0x1eb87, 0x5eb87, 0x9eb87, 0xdeb87, 0x11eb87, 0x15eb87, 0x19eb87, 0x1deb87, 0x1f387, 0x5f387, 0x9f387, 0xdf387, 0x11f387, 0x15f387, 0x19f387, 0x1df387, 0x1fb87, 0x5fb87, 0x9fb87, 0xdfb87, 0x11fb87, 0x15fb87, 0x19fb87, 0x1dfb87, 0x1c397, 0x5c397, 0x9c397, 0xdc397, 0x11c397, 0x15c397, 0x19c397, 0x1dc397, 0x1cb97, 0x5cb97, 0x9cb97, 0xdcb97, 0x11cb97, 0x15cb97, 0x19cb97, 0x1dcb97, 0x1d397, 0x5d397, 0x9d397, 0xdd397, 0x11d397, 0x15d397, 0x19d397, 0x1dd397, 0x1db97, 0x5db97, 0x9db97, 0xddb97, 0x11db97, 0x15db97, 0x19db97, 0x1ddb97, 0x1e397, 0x5e397, 0x9e397, 0xde397, 0x11e397, 0x15e397, 0x19e397, 0x1de397, 0x1eb97, 0x5eb97, 0x9eb97, 0xdeb97, 0x11eb97, 0x15eb97, 0x19eb97, 0x1deb97, 0x1f397, 0x5f397, 0x9f397, 0xdf397, 0x11f397, 0x15f397, 0x19f397, 0x1df397, 0x1fb97, 0x5fb97, 0x9fb97, 0xdfb97, 0x11fb97, 0x15fb97, 0x19fb97, 0x1dfb97, 0x1c3a7, 0x5c3a7, 0x9c3a7, 0xdc3a7, 0x11c3a7, 0x15c3a7, 0x19c3a7, 0x1dc3a7, 0x1cba7, 0x5cba7, 0x9cba7, 0xdcba7, 0x11cba7, 0x15cba7, 0x19cba7, 0x1dcba7, 0x1d3a7, 0x5d3a7, 0x9d3a7, 0xdd3a7, 0x11d3a7, 0x15d3a7, 0x19d3a7, 0x1dd3a7, 0x1dba7, 0x5dba7, 0x9dba7, 0xddba7, 0x11dba7, 0x15dba7, 0x19dba7, 0x1ddba7, 0x1e3a7, 0x5e3a7, 0x9e3a7, 0xde3a7, 0x11e3a7, 0x15e3a7, 0x19e3a7, 0x1de3a7, 0x1eba7, 0x5eba7, 0x9eba7, 0xdeba7, 0x11eba7, 0x15eba7, 0x19eba7, 0x1deba7, 0x1f3a7, 0x5f3a7, 0x9f3a7, 0xdf3a7, 0x11f3a7, 0x15f3a7, 0x19f3a7, 0x1df3a7, 0x1fba7, 0x5fba7, 0x9fba7, 0xdfba7, 0x11fba7, 0x15fba7, 0x19fba7, 0x1dfba7, 0x1c3b7, 0x5c3b7, 0x9c3b7, 0xdc3b7, 0x11c3b7, 0x15c3b7, 0x19c3b7, 0x1dc3b7, 0x1cbb7, 0x5cbb7, 0x9cbb7, 0xdcbb7, 0x11cbb7, 0x15cbb7, 0x19cbb7, 0x1dcbb7, 0x1d3b7, 0x5d3b7, 0x9d3b7, 0xdd3b7, 0x11d3b7, 0x15d3b7, 0x19d3b7, 0x1dd3b7, 0x1dbb7, 0x5dbb7, 0x9dbb7, 0xddbb7, 0x11dbb7, 0x15dbb7, 0x19dbb7, 0x1ddbb7, 0x1e3b7, 0x5e3b7, 0x9e3b7, 0xde3b7, 0x11e3b7, 0x15e3b7, 0x19e3b7, 0x1de3b7, 0x1ebb7, 0x5ebb7, 0x9ebb7, 0xdebb7, 0x11ebb7, 0x15ebb7, 0x19ebb7, 0x1debb7, 0x1f3b7, 0x5f3b7, 0x9f3b7, 0xdf3b7, 0x11f3b7, 0x15f3b7, 0x19f3b7, 0x1df3b7, 0x1fbb7, 0x5fbb7, 0x9fbb7, 0xdfbb7, 0x11fbb7, 0x15fbb7, 0x19fbb7, 0x1dfbb7, 0x1c3c7, 0x5c3c7, 0x9c3c7, 0xdc3c7, 0x11c3c7, 0x15c3c7, 0x19c3c7, 0x1dc3c7, 0x1cbc7, 0x5cbc7, 0x9cbc7, 0xdcbc7, 0x11cbc7, 0x15cbc7, 0x19cbc7, 0x1dcbc7, 0x1d3c7, 0x5d3c7, 0x9d3c7, 0xdd3c7, 0x11d3c7, 0x15d3c7, 0x19d3c7, 0x1dd3c7, 0x1dbc7, 0x5dbc7, 0x9dbc7, 0xddbc7, 0x11dbc7, 0x15dbc7, 0x19dbc7, 0x1ddbc7, 0x1e3c7, 0x5e3c7, 0x9e3c7, 0xde3c7, 0x11e3c7, 0x15e3c7, 0x19e3c7, 0x1de3c7, 0x1ebc7, 0x5ebc7, 0x9ebc7, 0xdebc7, 0x11ebc7, 0x15ebc7, 0x19ebc7, 0x1debc7, 0x1f3c7, 0x5f3c7, 0x9f3c7, 0xdf3c7, 0x11f3c7, 0x15f3c7, 0x19f3c7, 0x1df3c7, 0x1fbc7, 0x5fbc7, 0x9fbc7, 0xdfbc7, 0x11fbc7, 0x15fbc7, 0x19fbc7, 0x1dfbc7, 0x1c3d7, 0x5c3d7, 0x9c3d7, 0xdc3d7, 0x11c3d7, 0x15c3d7, 0x19c3d7, 0x1dc3d7, 0x1cbd7, 0x5cbd7, 0x9cbd7, 0xdcbd7, 0x11cbd7, 0x15cbd7, 0x19cbd7, 0x1dcbd7, 0x1d3d7, 0x5d3d7, 0x9d3d7, 0xdd3d7, 0x11d3d7, 0x15d3d7, 0x19d3d7, 0x1dd3d7, 0x1dbd7, 0x5dbd7, 0x9dbd7, 0xddbd7, 0x11dbd7, 0x15dbd7, 0x19dbd7, 0x1ddbd7, 0x1e3d7, 0x5e3d7, 0x9e3d7, 0xde3d7, 0x11e3d7, 0x15e3d7, 0x19e3d7, 0x1de3d7, 0x1ebd7, 0x5ebd7, 0x9ebd7, 0xdebd7, 0x11ebd7, 0x15ebd7, 0x19ebd7, 0x1debd7, 0x1f3d7, 0x5f3d7, 0x9f3d7, 0xdf3d7, 0x11f3d7, 0x15f3d7, 0x19f3d7, 0x1df3d7, 0x1fbd7, 0x5fbd7, 0x9fbd7, 0xdfbd7, 0x11fbd7, 0x15fbd7, 0x19fbd7, 0x1dfbd7, 0x1c3e7, 0x5c3e7, 0x9c3e7, 0xdc3e7, 0x11c3e7, 0x15c3e7, 0x19c3e7, 0x1dc3e7, 0x1cbe7, 0x5cbe7, 0x9cbe7, 0xdcbe7, 0x11cbe7, 0x15cbe7, 0x19cbe7, 0x1dcbe7, 0x1d3e7, 0x5d3e7, 0x9d3e7, 0xdd3e7, 0x11d3e7, 0x15d3e7, 0x19d3e7, 0x1dd3e7, 0x1dbe7, 0x5dbe7, 0x9dbe7, 0xddbe7, 0x11dbe7, 0x15dbe7, 0x19dbe7, 0x1ddbe7, 0x1e3e7, 0x5e3e7, 0x9e3e7, 0xde3e7, 0x11e3e7, 0x15e3e7, 0x19e3e7, 0x1de3e7, 0x1ebe7, 0x5ebe7, 0x9ebe7, 0xdebe7, 0x11ebe7, 0x15ebe7, 0x19ebe7, 0x1debe7, 0x1f3e7, 0x5f3e7, 0x9f3e7, 0xdf3e7, 0x11f3e7, 0x15f3e7, 0x19f3e7, 0x1df3e7, 0x1fbe7, 0x5fbe7, 0x9fbe7, 0xdfbe7, 0x11fbe7, 0x15fbe7, 0x19fbe7, 0x1dfbe7, 0x1c3f7, 0x5c3f7, 0x9c3f7, 0xdc3f7, 0x11c3f7, 0x15c3f7, 0x19c3f7, 0x1dc3f7, 0x1cbf7, 0x5cbf7, 0x9cbf7, 0xdcbf7, 0x11cbf7, 0x15cbf7, 0x19cbf7, 0x1dcbf7, 0x1d3f7, 0x5d3f7, 0x9d3f7, 0xdd3f7, 0x11d3f7, 0x15d3f7, 0x19d3f7, 0x1dd3f7, 0x1dbf7, 0x5dbf7, 0x9dbf7, 0xddbf7, 0x11dbf7, 0x15dbf7, 0x19dbf7, 0x1ddbf7, 0x1e3f7, 0x5e3f7, 0x9e3f7, 0xde3f7, 0x11e3f7, 0x15e3f7, 0x19e3f7, 0x1de3f7, 0x1ebf7, 0x5ebf7, 0x9ebf7, 0xdebf7, 0x11ebf7, 0x15ebf7, 0x19ebf7, 0x1debf7, 0x1f3f7, 0x5f3f7, 0x9f3f7, 0xdf3f7, 0x11f3f7, 0x15f3f7, 0x19f3f7, 0x1df3f7, 0x1fbf7, 0x5fbf7, 0x9fbf7, 0xdfbf7, 0x11fbf7, 0x15fbf7, 0x19fbf7, 0x1dfbf7, 0xe1c387, 0x2e1c387, 0x4e1c387, 0x6e1c387, 0x8e1c387, 0xae1c387, 0xce1c387, 0xee1c387, 0xe5c387, 0x2e5c387, 0x4e5c387, 0x6e5c387, 0x8e5c387, 0xae5c387, 0xce5c387, 0xee5c387, 0xe9c387, 0x2e9c387, 0x4e9c387, 0x6e9c387, 0x8e9c387, 0xae9c387, 0xce9c387, 0xee9c387, 0xedc387, 0x2edc387, 0x4edc387, 0x6edc387, 0x8edc387, 0xaedc387, 0xcedc387, 0xeedc387, 0xf1c387, 0x2f1c387, 0x4f1c387, 0x6f1c387, 0x8f1c387, 0xaf1c387, 0xcf1c387, 0xef1c387, 0xf5c387, 0x2f5c387, 0x4f5c387, 0x6f5c387, 0x8f5c387, 0xaf5c387, 0xcf5c387, 0xef5c387, 0xf9c387, 0x2f9c387, 0x4f9c387, 0x6f9c387, 0x8f9c387, 0xaf9c387, 0xcf9c387, 0xef9c387, 0xfdc387, 0x2fdc387, 0x4fdc387, 0x6fdc387, 0x8fdc387, 0xafdc387, 0xcfdc387, 0xefdc387, 0xe1cb87, 0x2e1cb87, 0x4e1cb87, 0x6e1cb87, 0x8e1cb87, 0xae1cb87, 0xce1cb87, 0xee1cb87, 0xe5cb87, 0x2e5cb87, 0x4e5cb87, 0x6e5cb87, 0x8e5cb87, 0xae5cb87, 0xce5cb87, 0xee5cb87, 0xe9cb87, 0x2e9cb87, 0x4e9cb87, 0x6e9cb87, 0x8e9cb87, 0xae9cb87, 0xce9cb87, 0xee9cb87, 0xedcb87, 0x2edcb87, 0x4edcb87, 0x6edcb87, 0x8edcb87, 0xaedcb87, 0xcedcb87, 0xeedcb87, 0xf1cb87, 0x2f1cb87, 0x4f1cb87, 0x6f1cb87, 0x8f1cb87, 0xaf1cb87, 0xcf1cb87, 0xef1cb87, 0xf5cb87, 0x2f5cb87, 0x4f5cb87, 0x6f5cb87, 0x8f5cb87, 0xaf5cb87, 0xcf5cb87, 0xef5cb87, 0xf9cb87, 0x2f9cb87, 0x4f9cb87, 0x6f9cb87, 0x8f9cb87, ]; pub static kZeroRepsDepth: [u32; 704] = [ 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, ]; pub static kUTF8ContextLookup: [u8; 512] = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ]; pub static kSigned3BitContextLookup: [u8; 256] = [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, ]; pub static kBrotliMinWindowBits: i32 = 10i32; pub static kBrotliMaxWindowBits: i32 = 24i32; pub static kCodeLengthDepth: [u8; 18] = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4]; pub static kStaticDistanceCodeDepth: [u8; 64] = [ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, ]; pub static kCodeLengthBits: [u32; 18] = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7]; pub static kNonZeroRepsBits: [usize; 704] = [ 0xb, 0x1b, 0x2b, 0x3b, 0x2cb, 0x6cb, 0xacb, 0xecb, 0x2db, 0x6db, 0xadb, 0xedb, 0x2eb, 0x6eb, 0xaeb, 0xeeb, 0x2fb, 0x6fb, 0xafb, 0xefb, 0xb2cb, 0x1b2cb, 0x2b2cb, 0x3b2cb, 0xb6cb, 0x1b6cb, 0x2b6cb, 0x3b6cb, 0xbacb, 0x1bacb, 0x2bacb, 0x3bacb, 0xbecb, 0x1becb, 0x2becb, 0x3becb, 0xb2db, 0x1b2db, 0x2b2db, 0x3b2db, 0xb6db, 0x1b6db, 0x2b6db, 0x3b6db, 0xbadb, 0x1badb, 0x2badb, 0x3badb, 0xbedb, 0x1bedb, 0x2bedb, 0x3bedb, 0xb2eb, 0x1b2eb, 0x2b2eb, 0x3b2eb, 0xb6eb, 0x1b6eb, 0x2b6eb, 0x3b6eb, 0xbaeb, 0x1baeb, 0x2baeb, 0x3baeb, 0xbeeb, 0x1beeb, 0x2beeb, 0x3beeb, 0xb2fb, 0x1b2fb, 0x2b2fb, 0x3b2fb, 0xb6fb, 0x1b6fb, 0x2b6fb, 0x3b6fb, 0xbafb, 0x1bafb, 0x2bafb, 0x3bafb, 0xbefb, 0x1befb, 0x2befb, 0x3befb, 0x2cb2cb, 0x6cb2cb, 0xacb2cb, 0xecb2cb, 0x2db2cb, 0x6db2cb, 0xadb2cb, 0xedb2cb, 0x2eb2cb, 0x6eb2cb, 0xaeb2cb, 0xeeb2cb, 0x2fb2cb, 0x6fb2cb, 0xafb2cb, 0xefb2cb, 0x2cb6cb, 0x6cb6cb, 0xacb6cb, 0xecb6cb, 0x2db6cb, 0x6db6cb, 0xadb6cb, 0xedb6cb, 0x2eb6cb, 0x6eb6cb, 0xaeb6cb, 0xeeb6cb, 0x2fb6cb, 0x6fb6cb, 0xafb6cb, 0xefb6cb, 0x2cbacb, 0x6cbacb, 0xacbacb, 0xecbacb, 0x2dbacb, 0x6dbacb, 0xadbacb, 0xedbacb, 0x2ebacb, 0x6ebacb, 0xaebacb, 0xeebacb, 0x2fbacb, 0x6fbacb, 0xafbacb, 0xefbacb, 0x2cbecb, 0x6cbecb, 0xacbecb, 0xecbecb, 0x2dbecb, 0x6dbecb, 0xadbecb, 0xedbecb, 0x2ebecb, 0x6ebecb, 0xaebecb, 0xeebecb, 0x2fbecb, 0x6fbecb, 0xafbecb, 0xefbecb, 0x2cb2db, 0x6cb2db, 0xacb2db, 0xecb2db, 0x2db2db, 0x6db2db, 0xadb2db, 0xedb2db, 0x2eb2db, 0x6eb2db, 0xaeb2db, 0xeeb2db, 0x2fb2db, 0x6fb2db, 0xafb2db, 0xefb2db, 0x2cb6db, 0x6cb6db, 0xacb6db, 0xecb6db, 0x2db6db, 0x6db6db, 0xadb6db, 0xedb6db, 0x2eb6db, 0x6eb6db, 0xaeb6db, 0xeeb6db, 0x2fb6db, 0x6fb6db, 0xafb6db, 0xefb6db, 0x2cbadb, 0x6cbadb, 0xacbadb, 0xecbadb, 0x2dbadb, 0x6dbadb, 0xadbadb, 0xedbadb, 0x2ebadb, 0x6ebadb, 0xaebadb, 0xeebadb, 0x2fbadb, 0x6fbadb, 0xafbadb, 0xefbadb, 0x2cbedb, 0x6cbedb, 0xacbedb, 0xecbedb, 0x2dbedb, 0x6dbedb, 0xadbedb, 0xedbedb, 0x2ebedb, 0x6ebedb, 0xaebedb, 0xeebedb, 0x2fbedb, 0x6fbedb, 0xafbedb, 0xefbedb, 0x2cb2eb, 0x6cb2eb, 0xacb2eb, 0xecb2eb, 0x2db2eb, 0x6db2eb, 0xadb2eb, 0xedb2eb, 0x2eb2eb, 0x6eb2eb, 0xaeb2eb, 0xeeb2eb, 0x2fb2eb, 0x6fb2eb, 0xafb2eb, 0xefb2eb, 0x2cb6eb, 0x6cb6eb, 0xacb6eb, 0xecb6eb, 0x2db6eb, 0x6db6eb, 0xadb6eb, 0xedb6eb, 0x2eb6eb, 0x6eb6eb, 0xaeb6eb, 0xeeb6eb, 0x2fb6eb, 0x6fb6eb, 0xafb6eb, 0xefb6eb, 0x2cbaeb, 0x6cbaeb, 0xacbaeb, 0xecbaeb, 0x2dbaeb, 0x6dbaeb, 0xadbaeb, 0xedbaeb, 0x2ebaeb, 0x6ebaeb, 0xaebaeb, 0xeebaeb, 0x2fbaeb, 0x6fbaeb, 0xafbaeb, 0xefbaeb, 0x2cbeeb, 0x6cbeeb, 0xacbeeb, 0xecbeeb, 0x2dbeeb, 0x6dbeeb, 0xadbeeb, 0xedbeeb, 0x2ebeeb, 0x6ebeeb, 0xaebeeb, 0xeebeeb, 0x2fbeeb, 0x6fbeeb, 0xafbeeb, 0xefbeeb, 0x2cb2fb, 0x6cb2fb, 0xacb2fb, 0xecb2fb, 0x2db2fb, 0x6db2fb, 0xadb2fb, 0xedb2fb, 0x2eb2fb, 0x6eb2fb, 0xaeb2fb, 0xeeb2fb, 0x2fb2fb, 0x6fb2fb, 0xafb2fb, 0xefb2fb, 0x2cb6fb, 0x6cb6fb, 0xacb6fb, 0xecb6fb, 0x2db6fb, 0x6db6fb, 0xadb6fb, 0xedb6fb, 0x2eb6fb, 0x6eb6fb, 0xaeb6fb, 0xeeb6fb, 0x2fb6fb, 0x6fb6fb, 0xafb6fb, 0xefb6fb, 0x2cbafb, 0x6cbafb, 0xacbafb, 0xecbafb, 0x2dbafb, 0x6dbafb, 0xadbafb, 0xedbafb, 0x2ebafb, 0x6ebafb, 0xaebafb, 0xeebafb, 0x2fbafb, 0x6fbafb, 0xafbafb, 0xefbafb, 0x2cbefb, 0x6cbefb, 0xacbefb, 0xecbefb, 0x2dbefb, 0x6dbefb, 0xadbefb, 0xedbefb, 0x2ebefb, 0x6ebefb, 0xaebefb, 0xeebefb, 0x2fbefb, 0x6fbefb, 0xafbefb, 0xefbefb, 0xb2cb2cb, 0x1b2cb2cb, 0x2b2cb2cb, 0x3b2cb2cb, 0xb6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb, 0x3b6cb2cb, 0xbacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0xbecb2cb, 0x1becb2cb, 0x2becb2cb, 0x3becb2cb, 0xb2db2cb, 0x1b2db2cb, 0x2b2db2cb, 0x3b2db2cb, 0xb6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0xbadb2cb, 0x1badb2cb, 0x2badb2cb, 0x3badb2cb, 0xbedb2cb, 0x1bedb2cb, 0x2bedb2cb, 0x3bedb2cb, 0xb2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0xb6eb2cb, 0x1b6eb2cb, 0x2b6eb2cb, 0x3b6eb2cb, 0xbaeb2cb, 0x1baeb2cb, 0x2baeb2cb, 0x3baeb2cb, 0xbeeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0xb2fb2cb, 0x1b2fb2cb, 0x2b2fb2cb, 0x3b2fb2cb, 0xb6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb, 0xbafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0xbefb2cb, 0x1befb2cb, 0x2befb2cb, 0x3befb2cb, 0xb2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb, 0x3b2cb6cb, 0xb6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0xbacb6cb, 0x1bacb6cb, 0x2bacb6cb, 0x3bacb6cb, 0xbecb6cb, 0x1becb6cb, 0x2becb6cb, 0x3becb6cb, 0xb2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0xb6db6cb, 0x1b6db6cb, 0x2b6db6cb, 0x3b6db6cb, 0xbadb6cb, 0x1badb6cb, 0x2badb6cb, 0x3badb6cb, 0xbedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0xb2eb6cb, 0x1b2eb6cb, 0x2b2eb6cb, 0x3b2eb6cb, 0xb6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb, 0x3b6eb6cb, 0xbaeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0xbeeb6cb, 0x1beeb6cb, 0x2beeb6cb, 0x3beeb6cb, 0xb2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb, 0x3b2fb6cb, 0xb6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0xbafb6cb, 0x1bafb6cb, 0x2bafb6cb, 0x3bafb6cb, 0xbefb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb, 0xb2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0xb6cbacb, 0x1b6cbacb, 0x2b6cbacb, 0x3b6cbacb, 0xbacbacb, 0x1bacbacb, 0x2bacbacb, 0x3bacbacb, 0xbecbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0xb2dbacb, 0x1b2dbacb, 0x2b2dbacb, 0x3b2dbacb, 0xb6dbacb, 0x1b6dbacb, 0x2b6dbacb, 0x3b6dbacb, 0xbadbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0xbedbacb, 0x1bedbacb, 0x2bedbacb, 0x3bedbacb, 0xb2ebacb, 0x1b2ebacb, 0x2b2ebacb, 0x3b2ebacb, 0xb6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0xbaebacb, 0x1baebacb, 0x2baebacb, 0x3baebacb, 0xbeebacb, 0x1beebacb, 0x2beebacb, 0x3beebacb, 0xb2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0xb6fbacb, 0x1b6fbacb, 0x2b6fbacb, 0x3b6fbacb, 0xbafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb, 0xbefbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0xb2cbecb, 0x1b2cbecb, 0x2b2cbecb, 0x3b2cbecb, 0xb6cbecb, 0x1b6cbecb, 0x2b6cbecb, 0x3b6cbecb, 0xbacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0xbecbecb, 0x1becbecb, 0x2becbecb, 0x3becbecb, 0xb2dbecb, 0x1b2dbecb, 0x2b2dbecb, 0x3b2dbecb, 0xb6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0xbadbecb, 0x1badbecb, 0x2badbecb, 0x3badbecb, 0xbedbecb, 0x1bedbecb, 0x2bedbecb, 0x3bedbecb, 0xb2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0xb6ebecb, 0x1b6ebecb, 0x2b6ebecb, 0x3b6ebecb, 0xbaebecb, 0x1baebecb, 0x2baebecb, 0x3baebecb, 0xbeebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0xb2fbecb, 0x1b2fbecb, 0x2b2fbecb, 0x3b2fbecb, 0xb6fbecb, 0x1b6fbecb, 0x2b6fbecb, 0x3b6fbecb, 0xbafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0xbefbecb, 0x1befbecb, 0x2befbecb, 0x3befbecb, 0xb2cb2db, 0x1b2cb2db, 0x2b2cb2db, 0x3b2cb2db, 0xb6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0xbacb2db, 0x1bacb2db, 0x2bacb2db, 0x3bacb2db, 0xbecb2db, 0x1becb2db, 0x2becb2db, 0x3becb2db, 0xb2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0xb6db2db, 0x1b6db2db, 0x2b6db2db, 0x3b6db2db, 0xbadb2db, 0x1badb2db, 0x2badb2db, 0x3badb2db, 0xbedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0xb2eb2db, 0x1b2eb2db, 0x2b2eb2db, 0x3b2eb2db, 0xb6eb2db, 0x1b6eb2db, 0x2b6eb2db, 0x3b6eb2db, 0xbaeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0xbeeb2db, 0x1beeb2db, 0x2beeb2db, 0x3beeb2db, 0xb2fb2db, 0x1b2fb2db, 0x2b2fb2db, 0x3b2fb2db, 0xb6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0xbafb2db, 0x1bafb2db, 0x2bafb2db, 0x3bafb2db, 0xbefb2db, 0x1befb2db, 0x2befb2db, 0x3befb2db, 0xb2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0xb6cb6db, 0x1b6cb6db, 0x2b6cb6db, 0x3b6cb6db, 0xbacb6db, 0x1bacb6db, 0x2bacb6db, 0x3bacb6db, 0xbecb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0xb2db6db, 0x1b2db6db, 0x2b2db6db, 0x3b2db6db, 0xb6db6db, 0x1b6db6db, 0x2b6db6db, 0x3b6db6db, 0xbadb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0xbedb6db, 0x1bedb6db, 0x2bedb6db, 0x3bedb6db, 0xb2eb6db, 0x1b2eb6db, 0x2b2eb6db, 0x3b2eb6db, 0xb6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0xbaeb6db, 0x1baeb6db, 0x2baeb6db, 0x3baeb6db, ]; pub static kNonZeroRepsDepth: [u32; 704] = [ 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, ]; pub static kStaticCommandCodeDepth: [u8; 704] = [ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, ]; pub static kStaticDistanceCodeBits: [u16; 64] = [ 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60, 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62, 1, 33, 17, 49, 9, 41, 25, 57, 5, 37, 21, 53, 13, 45, 29, 61, 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63, ]; pub static kStaticCommandCodeBits: [u16; 704] = [ 0, 256, 128, 384, 64, 320, 192, 448, 32, 288, 160, 416, 96, 352, 224, 480, 16, 272, 144, 400, 80, 336, 208, 464, 48, 304, 176, 432, 112, 368, 240, 496, 8, 264, 136, 392, 72, 328, 200, 456, 40, 296, 168, 424, 104, 360, 232, 488, 24, 280, 152, 408, 88, 344, 216, 472, 56, 312, 184, 440, 120, 376, 248, 504, 4, 260, 132, 388, 68, 324, 196, 452, 36, 292, 164, 420, 100, 356, 228, 484, 20, 276, 148, 404, 84, 340, 212, 468, 52, 308, 180, 436, 116, 372, 244, 500, 12, 268, 140, 396, 76, 332, 204, 460, 44, 300, 172, 428, 108, 364, 236, 492, 28, 284, 156, 412, 92, 348, 220, 476, 60, 316, 188, 444, 124, 380, 252, 508, 2, 258, 130, 386, 66, 322, 194, 450, 34, 290, 162, 418, 98, 354, 226, 482, 18, 274, 146, 402, 82, 338, 210, 466, 50, 306, 178, 434, 114, 370, 242, 498, 10, 266, 138, 394, 74, 330, 202, 458, 42, 298, 170, 426, 106, 362, 234, 490, 26, 282, 154, 410, 90, 346, 218, 474, 58, 314, 186, 442, 122, 378, 250, 506, 6, 262, 134, 390, 70, 326, 198, 454, 38, 294, 166, 422, 102, 358, 230, 486, 22, 278, 150, 406, 86, 342, 214, 470, 54, 310, 182, 438, 118, 374, 246, 502, 14, 270, 142, 398, 78, 334, 206, 462, 46, 302, 174, 430, 110, 366, 238, 494, 30, 286, 158, 414, 94, 350, 222, 478, 62, 318, 190, 446, 126, 382, 254, 510, 1, 257, 129, 385, 65, 321, 193, 449, 33, 289, 161, 417, 97, 353, 225, 481, 17, 273, 145, 401, 81, 337, 209, 465, 49, 305, 177, 433, 113, 369, 241, 497, 9, 265, 137, 393, 73, 329, 201, 457, 41, 297, 169, 425, 105, 361, 233, 489, 25, 281, 153, 409, 89, 345, 217, 473, 57, 313, 185, 441, 121, 377, 249, 505, 5, 261, 133, 389, 69, 325, 197, 453, 37, 293, 165, 421, 101, 357, 229, 485, 21, 277, 149, 405, 85, 341, 213, 469, 53, 309, 181, 437, 117, 373, 245, 501, 13, 269, 141, 397, 77, 333, 205, 461, 45, 301, 173, 429, 109, 365, 237, 493, 29, 285, 157, 413, 93, 349, 221, 477, 61, 317, 189, 445, 125, 381, 253, 509, 3, 259, 131, 387, 67, 323, 195, 451, 35, 291, 163, 419, 99, 355, 227, 483, 19, 275, 147, 403, 83, 339, 211, 467, 51, 307, 179, 435, 115, 371, 243, 499, 11, 267, 139, 395, 75, 331, 203, 459, 43, 299, 171, 427, 107, 363, 235, 491, 27, 283, 155, 411, 91, 347, 219, 475, 59, 315, 187, 443, 123, 379, 251, 507, 7, 1031, 519, 1543, 263, 1287, 775, 1799, 135, 1159, 647, 1671, 391, 1415, 903, 1927, 71, 1095, 583, 1607, 327, 1351, 839, 1863, 199, 1223, 711, 1735, 455, 1479, 967, 1991, 39, 1063, 551, 1575, 295, 1319, 807, 1831, 167, 1191, 679, 1703, 423, 1447, 935, 1959, 103, 1127, 615, 1639, 359, 1383, 871, 1895, 231, 1255, 743, 1767, 487, 1511, 999, 2023, 23, 1047, 535, 1559, 279, 1303, 791, 1815, 151, 1175, 663, 1687, 407, 1431, 919, 1943, 87, 1111, 599, 1623, 343, 1367, 855, 1879, 215, 1239, 727, 1751, 471, 1495, 983, 2007, 55, 1079, 567, 1591, 311, 1335, 823, 1847, 183, 1207, 695, 1719, 439, 1463, 951, 1975, 119, 1143, 631, 1655, 375, 1399, 887, 1911, 247, 1271, 759, 1783, 503, 1527, 1015, 2039, 15, 1039, 527, 1551, 271, 1295, 783, 1807, 143, 1167, 655, 1679, 399, 1423, 911, 1935, 79, 1103, 591, 1615, 335, 1359, 847, 1871, 207, 1231, 719, 1743, 463, 1487, 975, 1999, 47, 1071, 559, 1583, 303, 1327, 815, 1839, 175, 1199, 687, 1711, 431, 1455, 943, 1967, 111, 1135, 623, 1647, 367, 1391, 879, 1903, 239, 1263, 751, 1775, 495, 1519, 1007, 2031, 31, 1055, 543, 1567, 287, 1311, 799, 1823, 159, 1183, 671, 1695, 415, 1439, 927, 1951, 95, 1119, 607, 1631, 351, 1375, 863, 1887, 223, 1247, 735, 1759, 479, 1503, 991, 2015, 63, 1087, 575, 1599, 319, 1343, 831, 1855, 191, 1215, 703, 1727, 447, 1471, 959, 1983, 127, 1151, 639, 1663, 383, 1407, 895, 1919, 255, 1279, 767, 1791, 511, 1535, 1023, 2047, ]; brotli-8.0.2/src/enc/context_map_entropy.rs000064400000000000000000000461131046102023000171360ustar 00000000000000use core; use super::super::alloc; use super::super::alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use super::input_pair::{InputPair, InputReference, InputReferenceMut}; pub use super::ir_interpret::{push_base, Context, IRInterpreter}; use super::util::{floatX, FastLog2u16}; use super::weights::{Weights, BLEND_FIXED_POINT_PRECISION}; use super::{find_stride, interface}; use crate::enc::combined_alloc::alloc_if; const DEFAULT_CM_SPEED_INDEX: usize = 8; const NUM_SPEEDS_TO_TRY: usize = 16; const SPEEDS_TO_SEARCH: [u16; NUM_SPEEDS_TO_TRY] = [ 0, 1, 1, 1, 2, 4, 8, 16, 16, 32, 64, 128, 128, 512, 1664, 1664, ]; const MAXES_TO_SEARCH: [u16; NUM_SPEEDS_TO_TRY] = [ 32, 32, 128, 16384, 1024, 1024, 8192, 48, 8192, 4096, 16384, 256, 16384, 16384, 16384, 16384, ]; const NIBBLE_PRIOR_SIZE: usize = 16 * NUM_SPEEDS_TO_TRY; // the high nibble, followed by the low nibbles const CONTEXT_MAP_PRIOR_SIZE: usize = 256 * NIBBLE_PRIOR_SIZE * 17; const STRIDE_PRIOR_SIZE: usize = 256 * 256 * NIBBLE_PRIOR_SIZE * 2; #[derive(Clone, Copy, Debug)] pub struct SpeedAndMax(pub u16, pub u16); pub fn speed_to_tuple(inp: [SpeedAndMax; 2]) -> [(u16, u16); 2] { [(inp[0].0, inp[0].1), (inp[1].0, inp[1].1)] } fn get_stride_cdf_low( data: &mut [u16], stride_prior: u8, cm_prior: usize, high_nibble: u8, ) -> &mut [u16] { let index: usize = 1 + 2 * (cm_prior | ((stride_prior as usize & 0xf) << 8) | ((high_nibble as usize) << 12)); data.split_at_mut((NUM_SPEEDS_TO_TRY * index) << 4) .1 .split_at_mut(16 * NUM_SPEEDS_TO_TRY) .0 } fn get_stride_cdf_high(data: &mut [u16], stride_prior: u8, cm_prior: usize) -> &mut [u16] { let index: usize = 2 * (cm_prior | ((stride_prior as usize) << 8)); data.split_at_mut((NUM_SPEEDS_TO_TRY * index) << 4) .1 .split_at_mut(16 * NUM_SPEEDS_TO_TRY) .0 } fn get_cm_cdf_low(data: &mut [u16], cm_prior: usize, high_nibble: u8) -> &mut [u16] { let index: usize = (high_nibble as usize + 1) + 17 * cm_prior; data.split_at_mut((NUM_SPEEDS_TO_TRY * index) << 4) .1 .split_at_mut(16 * NUM_SPEEDS_TO_TRY) .0 } fn get_cm_cdf_high(data: &mut [u16], cm_prior: usize) -> &mut [u16] { let index: usize = 17 * cm_prior; data.split_at_mut((NUM_SPEEDS_TO_TRY * index) << 4) .1 .split_at_mut(16 * NUM_SPEEDS_TO_TRY) .0 } fn init_cdfs(cdfs: &mut [u16]) { assert_eq!(cdfs.len() % (16 * NUM_SPEEDS_TO_TRY), 0); let mut total_index = 0usize; let len = cdfs.len(); loop { for cdf_index in 0..16 { let vec = cdfs .split_at_mut(total_index) .1 .split_at_mut(NUM_SPEEDS_TO_TRY) .0; for item in vec { *item = 4 + 4 * cdf_index as u16; } total_index += NUM_SPEEDS_TO_TRY; } if total_index == len { break; } } } fn compute_combined_cost( singleton_cost: &mut [floatX; NUM_SPEEDS_TO_TRY], cdfs: &[u16], mixing_cdf: [u16; 16], nibble_u8: u8, _weights: &mut [Weights; NUM_SPEEDS_TO_TRY], ) { assert_eq!(cdfs.len(), 16 * NUM_SPEEDS_TO_TRY); let nibble = nibble_u8 as usize & 0xf; let mut stride_pdf = [0u16; NUM_SPEEDS_TO_TRY]; stride_pdf.clone_from_slice( cdfs.split_at(NUM_SPEEDS_TO_TRY * nibble) .1 .split_at(NUM_SPEEDS_TO_TRY) .0, ); let mut cm_pdf: u16 = mixing_cdf[nibble]; if nibble_u8 != 0 { let mut tmp = [0u16; NUM_SPEEDS_TO_TRY]; tmp.clone_from_slice( cdfs.split_at(NUM_SPEEDS_TO_TRY * (nibble - 1)) .1 .split_at(NUM_SPEEDS_TO_TRY) .0, ); for i in 0..NUM_SPEEDS_TO_TRY { stride_pdf[i] -= tmp[i]; } cm_pdf -= mixing_cdf[nibble - 1] } let mut stride_max = [0u16; NUM_SPEEDS_TO_TRY]; stride_max.clone_from_slice(cdfs.split_at(NUM_SPEEDS_TO_TRY * 15).1); let cm_max = mixing_cdf[15]; for i in 0..NUM_SPEEDS_TO_TRY { if stride_pdf[i] == 0 { assert_ne!(stride_pdf[i], 0); } if stride_max[i] == 0 { assert_ne!(stride_max[i], 0); } let w = (1 << (BLEND_FIXED_POINT_PRECISION - 2)); // a quarter of weight to stride let combined_pdf = w * u32::from(stride_pdf[i]) + ((1 << BLEND_FIXED_POINT_PRECISION) - w) * u32::from(cm_pdf); let combined_max = w * u32::from(stride_max[i]) + ((1 << BLEND_FIXED_POINT_PRECISION) - w) * u32::from(cm_max); let del = FastLog2u16((combined_pdf >> BLEND_FIXED_POINT_PRECISION) as u16) - FastLog2u16((combined_max >> BLEND_FIXED_POINT_PRECISION) as u16); singleton_cost[i] -= del; } } fn compute_cost(singleton_cost: &mut [floatX; NUM_SPEEDS_TO_TRY], cdfs: &[u16], nibble_u8: u8) { assert_eq!(cdfs.len(), 16 * NUM_SPEEDS_TO_TRY); let nibble = nibble_u8 as usize & 0xf; let mut pdf = [0u16; NUM_SPEEDS_TO_TRY]; pdf.clone_from_slice( cdfs.split_at(NUM_SPEEDS_TO_TRY * nibble) .1 .split_at(NUM_SPEEDS_TO_TRY) .0, ); if nibble_u8 != 0 { let mut tmp = [0u16; NUM_SPEEDS_TO_TRY]; tmp.clone_from_slice( cdfs.split_at(NUM_SPEEDS_TO_TRY * (nibble - 1)) .1 .split_at(NUM_SPEEDS_TO_TRY) .0, ); for i in 0..NUM_SPEEDS_TO_TRY { pdf[i] -= tmp[i]; } } let mut max = [0u16; NUM_SPEEDS_TO_TRY]; max.clone_from_slice(cdfs.split_at(NUM_SPEEDS_TO_TRY * 15).1); for i in 0..NUM_SPEEDS_TO_TRY { if pdf[i] == 0 { assert_ne!(pdf[i], 0); } if max[i] == 0 { assert_ne!(max[i], 0); } let del = FastLog2u16(pdf[i]) - FastLog2u16(max[i]); singleton_cost[i] -= del; } } fn update_cdf(cdfs: &mut [u16], nibble_u8: u8) { assert_eq!(cdfs.len(), 16 * NUM_SPEEDS_TO_TRY); let mut overall_index = nibble_u8 as usize * NUM_SPEEDS_TO_TRY; for _nibble in (nibble_u8 as usize & 0xf)..16 { for speed_index in 0..NUM_SPEEDS_TO_TRY { cdfs[overall_index + speed_index] += SPEEDS_TO_SEARCH[speed_index]; } overall_index += NUM_SPEEDS_TO_TRY; } overall_index = 0; for nibble in 0..16 { for speed_index in 0..NUM_SPEEDS_TO_TRY { if nibble == 0 { assert_ne!(cdfs[overall_index + speed_index], 0); } else { assert_ne!( cdfs[overall_index + speed_index] - cdfs[overall_index + speed_index - NUM_SPEEDS_TO_TRY], 0 ); } } overall_index += NUM_SPEEDS_TO_TRY; } for max_index in 0..NUM_SPEEDS_TO_TRY { if cdfs[15 * NUM_SPEEDS_TO_TRY + max_index] >= MAXES_TO_SEARCH[max_index] { const CDF_BIAS: [u16; 16] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; for nibble_index in 0..16 { let tmp = &mut cdfs[nibble_index * NUM_SPEEDS_TO_TRY + max_index]; *tmp = (tmp.wrapping_add(CDF_BIAS[nibble_index])) .wrapping_sub(tmp.wrapping_add(CDF_BIAS[nibble_index]) >> 2); } } } overall_index = 0; for nibble in 0..16 { for speed_index in 0..NUM_SPEEDS_TO_TRY { if nibble == 0 { assert_ne!(cdfs[overall_index + speed_index], 0); } else { assert_ne!( cdfs[overall_index + speed_index] - cdfs[overall_index + speed_index - NUM_SPEEDS_TO_TRY], 0 ); } } overall_index += NUM_SPEEDS_TO_TRY; } } fn extract_single_cdf(cdf_bundle: &[u16], index: usize) -> [u16; 16] { assert_eq!(cdf_bundle.len(), 16 * NUM_SPEEDS_TO_TRY); assert!(index < NUM_SPEEDS_TO_TRY); #[allow(clippy::identity_op)] [ cdf_bundle[index + 0 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 1 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 2 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 3 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 4 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 5 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 6 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 7 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 8 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 9 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 10 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 11 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 12 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 13 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 14 * NUM_SPEEDS_TO_TRY], cdf_bundle[index + 15 * NUM_SPEEDS_TO_TRY], ] } fn min_cost_index_for_speed(cost: &[floatX]) -> usize { assert_eq!(cost.len(), NUM_SPEEDS_TO_TRY); let mut min_cost = cost[0]; let mut best_choice = 0; for i in 1..NUM_SPEEDS_TO_TRY { if cost[i] < min_cost { best_choice = i; min_cost = cost[i]; } } best_choice } fn min_cost_speed_max(cost: &[floatX]) -> SpeedAndMax { let best_choice = min_cost_index_for_speed(cost); SpeedAndMax(SPEEDS_TO_SEARCH[best_choice], MAXES_TO_SEARCH[best_choice]) } fn min_cost_value(cost: &[floatX]) -> floatX { let best_choice = min_cost_index_for_speed(cost); cost[best_choice] } const SINGLETON_COMBINED_STRATEGY: usize = 2; const SINGLETON_STRIDE_STRATEGY: usize = 1; const SINGLETON_CM_STRATEGY: usize = 0; pub struct ContextMapEntropy< 'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator, > { input: InputPair<'a>, context_map: interface::PredictionModeContextMap>, block_type: u8, cur_stride: u8, local_byte_offset: usize, weight: [[Weights; NUM_SPEEDS_TO_TRY]; 2], cm_priors: >::AllocatedMemory, stride_priors: >::AllocatedMemory, _stride_pyramid_leaves: [u8; find_stride::NUM_LEAF_NODES], singleton_costs: [[[floatX; NUM_SPEEDS_TO_TRY]; 2]; 3], } impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> ContextMapEntropy<'a, Alloc> { pub fn new( m16: &mut Alloc, input: InputPair<'a>, stride: [u8; find_stride::NUM_LEAF_NODES], prediction_mode: interface::PredictionModeContextMap>, cdf_detection_quality: u8, ) -> Self { let cdf_detect = cdf_detection_quality != 0; let mut ret = ContextMapEntropy:: { input, context_map: prediction_mode, block_type: 0, cur_stride: 1, local_byte_offset: 0, cm_priors: alloc_if::(cdf_detect, m16, CONTEXT_MAP_PRIOR_SIZE), stride_priors: alloc_if::(cdf_detect, m16, STRIDE_PRIOR_SIZE), _stride_pyramid_leaves: stride, weight: [ [Weights::new(); NUM_SPEEDS_TO_TRY], [Weights::new(); NUM_SPEEDS_TO_TRY], ], singleton_costs: [[[0.0; NUM_SPEEDS_TO_TRY]; 2]; 3], }; if cdf_detect { init_cdfs(ret.cm_priors.slice_mut()); init_cdfs(ret.stride_priors.slice_mut()); } ret } pub fn take_prediction_mode( &mut self, ) -> interface::PredictionModeContextMap> { core::mem::replace( &mut self.context_map, interface::PredictionModeContextMap::> { literal_context_map: InputReferenceMut::default(), predmode_speed_and_distance_context_map: InputReferenceMut::default(), }, ) } pub fn prediction_mode_mut( &mut self, ) -> &mut interface::PredictionModeContextMap> { &mut self.context_map } pub fn best_singleton_speeds( &self, cm: bool, combined: bool, ) -> ([SpeedAndMax; 2], [floatX; 2]) { let cost_type_index = if combined { 2usize } else if cm { 0usize } else { 1 }; let mut ret_cost = [ self.singleton_costs[cost_type_index][0][0], self.singleton_costs[cost_type_index][1][0], ]; let mut best_indexes = [0, 0]; for speed_index in 1..NUM_SPEEDS_TO_TRY { for highness in 0..2 { let cur_cost = self.singleton_costs[cost_type_index][highness][speed_index]; if cur_cost < ret_cost[highness] { best_indexes[highness] = speed_index; ret_cost[highness] = cur_cost; } } } let ret_speed = [ SpeedAndMax( SPEEDS_TO_SEARCH[best_indexes[0]], MAXES_TO_SEARCH[best_indexes[0]], ), SpeedAndMax( SPEEDS_TO_SEARCH[best_indexes[1]], MAXES_TO_SEARCH[best_indexes[1]], ), ]; (ret_speed, ret_cost) } pub fn best_speeds( &mut self, // mut due to helpers cm: bool, combined: bool, ) -> [SpeedAndMax; 2] { let mut ret = [SpeedAndMax(SPEEDS_TO_SEARCH[0], MAXES_TO_SEARCH[0]); 2]; let cost_type_index = if combined { 2usize } else if cm { 0usize } else { 1 }; for high in 0..2 { /*eprintln!("TRIAL {} {}", cm, combined); for i in 0..NUM_SPEEDS_TO_TRY { eprintln!("{},{} costs {:?}", SPEEDS_TO_SEARCH[i], MAXES_TO_SEARCH[i], self.singleton_costs[cost_type_index][high][i]); }*/ ret[high] = min_cost_speed_max(&self.singleton_costs[cost_type_index][high][..]); } ret } pub fn best_speeds_costs( &mut self, // mut due to helpers cm: bool, combined: bool, ) -> [floatX; 2] { let cost_type_index = if combined { 2usize } else if cm { 0usize } else { 1 }; let mut ret = [0.0; 2]; for high in 0..2 { ret[high] = min_cost_value(&self.singleton_costs[cost_type_index][high][..]); } ret } pub fn free(&mut self, alloc: &mut Alloc) { >::free_cell(alloc, core::mem::take(&mut self.cm_priors)); >::free_cell(alloc, core::mem::take(&mut self.stride_priors)); } fn update_cost_base( &mut self, stride_prior: u8, _selected_bits: u8, cm_prior: usize, literal: u8, ) { let upper_nibble = (literal >> 4); let lower_nibble = literal & 0xf; let provisional_cm_high_cdf: [u16; 16]; let provisional_cm_low_cdf: [u16; 16]; { let cm_cdf_high = get_cm_cdf_high(self.cm_priors.slice_mut(), cm_prior); compute_cost( &mut self.singleton_costs[SINGLETON_CM_STRATEGY][1], cm_cdf_high, upper_nibble, ); // choose a fairly reasonable cm speed rather than a selected one let best_cm_index = DEFAULT_CM_SPEED_INDEX; // = min_cost_index_for_speed(&self.singleton_costs[SINGLETON_CM_STRATEGY][1]); provisional_cm_high_cdf = extract_single_cdf(cm_cdf_high, best_cm_index); } { let cm_cdf_low = get_cm_cdf_low(self.cm_priors.slice_mut(), cm_prior, upper_nibble); compute_cost( &mut self.singleton_costs[SINGLETON_CM_STRATEGY][0], cm_cdf_low, lower_nibble, ); // choose a fairly reasonable cm speed rather than a selected one let best_cm_index = DEFAULT_CM_SPEED_INDEX; //min_cost_index_for_speed(&self.singleton_costs[SINGLETON_CM_STRATEGY][0]); provisional_cm_low_cdf = extract_single_cdf(cm_cdf_low, best_cm_index); } { let stride_cdf_high = get_stride_cdf_high(self.stride_priors.slice_mut(), stride_prior, cm_prior); compute_combined_cost( &mut self.singleton_costs[SINGLETON_COMBINED_STRATEGY][1], stride_cdf_high, provisional_cm_high_cdf, upper_nibble, &mut self.weight[1], ); compute_cost( &mut self.singleton_costs[SINGLETON_STRIDE_STRATEGY][1], stride_cdf_high, upper_nibble, ); update_cdf(stride_cdf_high, upper_nibble); } { let stride_cdf_low = get_stride_cdf_low( self.stride_priors.slice_mut(), stride_prior, cm_prior, upper_nibble, ); compute_combined_cost( &mut self.singleton_costs[SINGLETON_COMBINED_STRATEGY][0], stride_cdf_low, provisional_cm_low_cdf, lower_nibble, &mut self.weight[0], ); compute_cost( &mut self.singleton_costs[SINGLETON_STRIDE_STRATEGY][0], stride_cdf_low, lower_nibble, ); update_cdf(stride_cdf_low, lower_nibble); } { let cm_cdf_high = get_cm_cdf_high(self.cm_priors.slice_mut(), cm_prior); update_cdf(cm_cdf_high, upper_nibble); } { let cm_cdf_low = get_cm_cdf_low(self.cm_priors.slice_mut(), cm_prior, upper_nibble); update_cdf(cm_cdf_low, lower_nibble); } } } impl<'a, 'b, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> interface::CommandProcessor<'b> for ContextMapEntropy<'a, Alloc> { fn push(&mut self, val: interface::Command>) { push_base(self, val) } } impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> IRInterpreter for ContextMapEntropy<'a, Alloc> { fn inc_local_byte_offset(&mut self, inc: usize) { self.local_byte_offset += inc; } fn local_byte_offset(&self) -> usize { self.local_byte_offset } fn update_block_type(&mut self, new_type: u8, stride: u8) { self.block_type = new_type; self.cur_stride = stride; } fn block_type(&self) -> u8 { self.block_type } fn literal_data_at_offset(&self, index: usize) -> u8 { self.input[index] } fn literal_context_map(&self) -> &[u8] { self.context_map.literal_context_map.slice() } fn prediction_mode(&self) -> crate::interface::LiteralPredictionModeNibble { self.context_map.literal_prediction_mode() } fn update_cost( &mut self, stride_prior: [u8; 8], stride_prior_offset: usize, selected_bits: u8, cm_prior: usize, literal: u8, ) { let stride = self.cur_stride as usize; self.update_cost_base( stride_prior[stride_prior_offset.wrapping_sub(stride) & 7], selected_bits, cm_prior, literal, ) } } brotli-8.0.2/src/enc/dictionary_hash.rs000064400000000000000000003644451046102023000162200ustar 00000000000000pub static kStaticDictionaryHash: [u16; 32768] = [ 32072, 0, 0, 0, 0, 0, 0, 0, 0, 21860, 0, 0, 0, 0, 0, 0, 0, 40486, 0, 0, 0, 0, 0, 45798, 0, 0, 0, 0, 0, 0, 1292, 0, 0, 0, 0, 4964, 278, 23717, 0, 19972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2126, 16102, 0, 0, 0, 14437, 0, 0, 0, 0, 0, 0, 0, 26727, 2253, 0, 0, 17252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3622, 0, 0, 0, 0, 22984, 0, 0, 0, 0, 0, 0, 16647, 0, 34247, 0, 0, 0, 0, 0, 48486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19532, 0, 0, 24004, 0, 0, 0, 9828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31974, 0, 0, 0, 0, 0, 0, 0, 0, 20650, 2404, 0, 20773, 1677, 9031, 0, 6404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6761, 7206, 0, 0, 21992, 22983, 0, 0, 3529, 0, 1864, 0, 0, 0, 0, 0, 0, 11046, 0, 0, 9641, 0, 0, 0, 6507, 0, 0, 36934, 21576, 62375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8294, 0, 0, 0, 0, 0, 0, 0, 40807, 0, 0, 0, 39398, 8136, 0, 0, 0, 0, 0, 0, 0, 8875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7941, 0, 0, 25609, 0, 0, 0, 936, 3716, 3213, 15687, 0, 0, 0, 0, 0, 52519, 0, 17381, 0, 0, 0, 0, 1320, 5797, 0, 21029, 0, 0, 6472, 807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13545, 0, 0, 0, 3624, 0, 0, 0, 29674, 30820, 0, 31237, 0, 6596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22278, 0, 37446, 0, 0, 0, 0, 7240, 423, 0, 24612, 21705, 17636, 0, 0, 0, 0, 0, 0, 1833, 0, 0, 0, 328, 6021, 0, 0, 0, 19974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62119, 4178, 0, 0, 0, 0, 12100, 8617, 0, 0, 16900, 0, 36678, 0, 0, 0, 35366, 0, 51718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20998, 0, 62086, 0, 0, 0, 0, 0, 5542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14629, 10952, 25927, 0, 0, 0, 0, 19849, 0, 0, 0, 0, 0, 0, 0, 30952, 3046, 14314, 12998, 0, 0, 0, 15268, 0, 40582, 30216, 62118, 0, 0, 0, 20132, 0, 0, 0, 0, 0, 12005, 0, 0, 0, 52358, 0, 0, 0, 0, 24778, 0, 44, 33095, 0, 0, 0, 0, 0, 26372, 0, 0, 0, 0, 0, 3781, 0, 0, 17928, 9479, 0, 0, 0, 0, 0, 0, 0, 0, 32297, 28613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47174, 11723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2536, 55143, 0, 0, 6410, 0, 0, 0, 0, 0, 0, 0, 0, 56294, 11914, 0, 529, 0, 30184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8261, 0, 0, 28808, 58854, 22633, 965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64135, 0, 0, 331, 3684, 0, 1605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16650, 37, 0, 23622, 3144, 15429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22443, 69, 0, 0, 0, 0, 0, 0, 0, 0, 17832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11113, 0, 0, 0, 0, 18309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26630, 0, 0, 25512, 25895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16901, 0, 0, 0, 27558, 0, 0, 9418, 0, 0, 0, 3508, 0, 0, 0, 0, 0, 0, 0, 0, 37990, 9289, 8517, 0, 0, 0, 0, 1578, 1604, 23944, 0, 0, 14916, 12781, 0, 0, 0, 0, 0, 0, 0, 12105, 0, 16617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21348, 11240, 28870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5772, 0, 0, 27812, 0, 0, 0, 0, 0, 0, 0, 8324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16748, 1157, 0, 0, 18794, 16324, 25898, 935, 8333, 0, 0, 0, 0, 0, 0, 0, 0, 18246, 0, 18086, 0, 46854, 0, 0, 0, 0, 0, 0, 339, 0, 0, 25188, 12780, 12166, 6409, 0, 0, 0, 0, 16516, 0, 27012, 28395, 0, 0, 0, 0, 0, 0, 0, 1420, 0, 0, 0, 9768, 52967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25163, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64998, 0, 0, 0, 0, 0, 21893, 0, 0, 0, 0, 0, 47366, 0, 0, 0, 870, 0, 0, 0, 12646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26020, 16360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1809, 0, 0, 0, 6601, 15878, 0, 0, 0, 0, 0, 29092, 0, 28516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21988, 0, 0, 0, 42950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5133, 1318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54982, 24904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51526, 0, 0, 0, 0, 0, 3685, 0, 0, 0, 0, 10062, 9412, 0, 0, 0, 31460, 5708, 6181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27144, 57478, 0, 0, 0, 0, 0, 0, 7084, 0, 21993, 53126, 0, 0, 0, 0, 8397, 0, 0, 5733, 0, 0, 0, 0, 0, 2116, 0, 24742, 0, 11271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1133, 0, 4873, 0, 0, 38310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17932, 0, 0, 18053, 0, 0, 0, 25510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17798, 0, 26214, 0, 0, 0, 0, 0, 0, 0, 0, 23016, 17415, 20392, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3239, 0, 46119, 0, 0, 0, 28580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41478, 0, 0, 31016, 55334, 10056, 1924, 0, 0, 0, 0, 0, 36614, 0, 36711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13994, 59303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26501, 0, 5639, 0, 0, 0, 0, 0, 0, 13897, 1253, 0, 0, 0, 0, 0, 5095, 0, 0, 0, 28869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8646, 0, 0, 0, 0, 25641, 17796, 0, 0, 0, 0, 0, 0, 0, 13316, 620, 6309, 11819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 904, 1095, 0, 24229, 0, 0, 28744, 49703, 0, 23077, 0, 0, 0, 0, 32392, 0, 0, 0, 0, 35271, 0, 28740, 5866, 0, 0, 0, 0, 0, 0, 0, 4361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7917, 8869, 0, 0, 0, 13924, 0, 0, 0, 0, 0, 41958, 0, 0, 0, 0, 0, 0, 6766, 13989, 0, 0, 0, 903, 0, 0, 24010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64390, 0, 22468, 0, 25861, 0, 0, 0, 0, 23656, 5317, 0, 0, 0, 0, 0, 0, 23017, 5445, 16009, 0, 0, 0, 0, 0, 0, 0, 0, 48006, 10473, 0, 0, 14404, 0, 0, 0, 42183, 0, 0, 0, 51270, 0, 0, 10602, 24132, 0, 0, 0, 0, 0, 43782, 0, 0, 17834, 0, 0, 0, 25576, 27205, 0, 0, 0, 0, 0, 0, 0, 0, 29066, 0, 0, 0, 0, 0, 626, 1988, 14700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44710, 0, 0, 0, 0, 3848, 7623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42374, 0, 0, 0, 0, 0, 0, 0, 0, 19272, 6436, 0, 0, 5256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39783, 0, 0, 0, 0, 30984, 0, 0, 0, 0, 0, 0, 28230, 0, 0, 0, 29028, 10538, 3205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5636, 840, 295, 0, 0, 8488, 8198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4074, 19526, 0, 0, 0, 0, 31144, 64038, 0, 0, 0, 0, 0, 0, 16716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17706, 0, 0, 0, 0, 0, 0, 50630, 0, 50503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25446, 0, 0, 0, 13831, 0, 0, 0, 0, 0, 0, 2696, 4039, 0, 0, 0, 0, 25288, 0, 12076, 2054, 0, 48934, 0, 0, 0, 0, 16969, 59431, 17259, 35335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31275, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 839, 0, 0, 29386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5864, 12134, 0, 0, 0, 0, 0, 0, 0, 25349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24678, 0, 0, 0, 63335, 0, 28836, 8142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4494, 0, 0, 0, 0, 0, 14088, 1188, 0, 16260, 0, 0, 0, 16421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 17060, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24076, 29445, 0, 33543, 0, 4901, 0, 0, 12522, 0, 0, 62471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4046, 0, 0, 0, 0, 20486, 0, 15460, 2217, 51719, 0, 0, 0, 0, 0, 23495, 0, 0, 0, 0, 0, 0, 15370, 0, 15849, 0, 15113, 0, 0, 0, 0, 0, 0, 0, 0, 27972, 7337, 0, 0, 0, 0, 30342, 0, 0, 0, 0, 0, 0, 0, 0, 32299, 23940, 0, 17766, 0, 0, 0, 0, 0, 0, 6184, 0, 20904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31492, 0, 0, 0, 5509, 0, 0, 0, 0, 0, 0, 0, 0, 2669, 50182, 0, 0, 12299, 0, 0, 0, 0, 0, 0, 0, 5257, 28167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11750, 3890, 0, 0, 26500, 0, 0, 0, 0, 0, 0, 0, 49318, 0, 0, 0, 0, 0, 0, 0, 10981, 0, 0, 0, 0, 0, 0, 0, 0, 17961, 1831, 0, 0, 0, 0, 0, 0, 0, 29638, 0, 0, 0, 0, 26473, 0, 6216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28683, 39975, 0, 0, 0, 0, 0, 51654, 0, 0, 0, 27527, 0, 0, 0, 0, 0, 0, 0, 0, 30859, 3268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28772, 0, 18212, 0, 0, 0, 0, 25448, 65446, 0, 0, 0, 0, 0, 0, 3337, 1670, 0, 0, 0, 0, 0, 19332, 0, 0, 0, 0, 24936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1043, 0, 0, 0, 0, 15814, 0, 21670, 0, 0, 0, 0, 0, 0, 0, 16263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32454, 0, 30630, 0, 0, 20170, 9926, 0, 0, 0, 18247, 0, 0, 14376, 0, 2056, 17191, 0, 0, 0, 0, 0, 0, 0, 7812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22474, 52806, 1588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10825, 0, 0, 0, 0, 40934, 0, 0, 0, 0, 0, 0, 0, 28677, 0, 0, 5714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25865, 22246, 0, 0, 0, 0, 17256, 35751, 0, 0, 0, 0, 0, 0, 0, 0, 8236, 0, 32108, 0, 0, 0, 43, 14342, 0, 16517, 0, 0, 30732, 0, 4012, 133, 0, 40583, 971, 23942, 0, 0, 27275, 0, 0, 0, 204, 0, 0, 27140, 7564, 44327, 27592, 57958, 0, 0, 0, 0, 22344, 25701, 0, 0, 0, 0, 0, 0, 0, 19524, 31755, 0, 0, 28102, 0, 59111, 0, 0, 0, 0, 0, 0, 0, 12261, 0, 44934, 0, 0, 0, 0, 31560, 0, 11114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18953, 18311, 0, 45159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22411, 23943, 0, 0, 0, 0, 0, 0, 11690, 0, 0, 4069, 0, 0, 2668, 6342, 0, 0, 0, 0, 0, 0, 27658, 1766, 0, 0, 0, 0, 23240, 56070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34119, 0, 24453, 0, 0, 0, 0, 21867, 0, 17610, 9894, 0, 0, 27976, 38790, 0, 0, 0, 43654, 0, 31559, 12202, 23142, 0, 0, 0, 50343, 0, 0, 0, 0, 0, 32806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49895, 0, 0, 0, 0, 15786, 4263, 0, 0, 0, 0, 4746, 3814, 0, 0, 0, 0, 0, 0, 17192, 453, 17323, 0, 20328, 4036, 0, 0, 0, 15844, 0, 0, 0, 0, 27561, 31940, 32296, 0, 0, 0, 0, 0, 0, 0, 11499, 11782, 0, 0, 0, 0, 9738, 50471, 0, 0, 0, 0, 0, 35430, 0, 0, 0, 0, 0, 29734, 0, 0, 0, 36551, 0, 0, 0, 0, 9257, 5606, 0, 13829, 0, 7015, 0, 0, 0, 0, 0, 25127, 0, 0, 19051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2572, 0, 0, 0, 0, 0, 0, 29797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42342, 0, 0, 0, 0, 9293, 0, 17896, 56038, 4077, 0, 0, 0, 29899, 37351, 0, 30823, 0, 8326, 0, 0, 0, 18342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18569, 54054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37254, 0, 0, 31433, 61510, 0, 2022, 0, 0, 0, 0, 0, 25381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2149, 25289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12516, 14185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36486, 0, 0, 0, 0, 10889, 9607, 0, 28711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28490, 0, 0, 0, 0, 26181, 10283, 1701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14980, 0, 7783, 0, 27846, 0, 0, 0, 56486, 3892, 0, 0, 0, 5770, 16583, 0, 26309, 13422, 20292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28742, 0, 0, 0, 0, 14536, 1158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42438, 0, 3332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17353, 1447, 0, 0, 8427, 48518, 1359, 0, 0, 0, 0, 0, 14986, 0, 32168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9230, 2791, 0, 0, 0, 0, 0, 0, 0, 0, 16073, 31623, 4269, 0, 0, 0, 0, 0, 0, 4519, 0, 0, 27912, 58950, 0, 0, 0, 0, 0, 0, 0, 0, 8361, 19812, 0, 0, 0, 0, 6056, 7877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9128, 1125, 0, 16548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17292, 6854, 21352, 0, 2380, 0, 0, 4007, 0, 0, 0, 0, 0, 24357, 4202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42823, 3022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14373, 0, 20677, 3304, 2759, 20522, 64903, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27814, 2802, 8870, 3758, 1255, 0, 0, 0, 0, 0, 0, 0, 0, 30027, 9510, 0, 0, 0, 0, 17864, 14855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51462, 0, 0, 0, 0, 0, 0, 0, 45734, 0, 0, 23467, 32327, 0, 0, 10826, 52999, 0, 0, 0, 33222, 31336, 64326, 0, 0, 0, 0, 0, 0, 0, 32166, 0, 0, 3891, 0, 0, 0, 7017, 645, 0, 0, 0, 0, 0, 0, 27915, 46087, 0, 0, 0, 21863, 0, 34246, 0, 0, 16715, 0, 0, 0, 0, 14052, 21416, 0, 0, 0, 0, 0, 0, 0, 0, 39846, 0, 0, 0, 0, 0, 38982, 0, 0, 17512, 7460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15428, 0, 0, 0, 0, 0, 0, 0, 28356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19911, 0, 20007, 0, 0, 0, 10855, 943, 0, 0, 10821, 0, 0, 0, 0, 4170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65415, 0, 0, 0, 0, 0, 0, 0, 0, 9865, 24646, 0, 0, 0, 0, 0, 40519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22091, 23655, 0, 0, 0, 0, 0, 0, 0, 31686, 0, 0, 0, 58599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24421, 0, 28100, 0, 0, 0, 31268, 0, 3204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14822, 0, 0, 0, 0, 19947, 10182, 0, 0, 9480, 14821, 4398, 0, 0, 14532, 0, 0, 0, 48871, 1873, 0, 0, 0, 0, 0, 0, 0, 589, 1541, 0, 0, 0, 0, 0, 23333, 0, 0, 0, 14149, 0, 0, 0, 0, 1296, 14374, 0, 27300, 0, 0, 0, 0, 0, 0, 7276, 0, 0, 0, 0, 0, 0, 47718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5164, 1765, 0, 14405, 0, 37574, 1994, 0, 6636, 0, 0, 0, 0, 0, 0, 0, 0, 27815, 0, 0, 0, 0, 2568, 6820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11336, 26247, 0, 0, 23912, 0, 0, 0, 30536, 0, 0, 34342, 0, 17799, 0, 0, 0, 22149, 0, 6118, 0, 25732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26600, 5190, 0, 0, 1142, 0, 0, 0, 0, 0, 0, 0, 0, 39527, 0, 0, 0, 0, 0, 39494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3085, 0, 0, 0, 0, 0, 0, 0, 4786, 0, 0, 0, 28873, 6532, 0, 0, 26664, 0, 9193, 11719, 0, 0, 0, 0, 0, 0, 31752, 64646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25094, 0, 0, 18153, 20167, 0, 0, 0, 17254, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31592, 0, 0, 8167, 24362, 6212, 0, 34758, 0, 0, 0, 0, 0, 0, 32520, 0, 0, 44679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17989, 8681, 29222, 0, 0, 0, 0, 0, 0, 0, 0, 10251, 4902, 1452, 15207, 0, 0, 0, 0, 0, 0, 0, 22822, 0, 10469, 0, 0, 0, 0, 0, 0, 19337, 17670, 107, 11494, 0, 0, 0, 0, 27305, 2565, 0, 0, 0, 0, 0, 0, 0, 64518, 200, 28389, 0, 0, 0, 0, 31208, 0, 30762, 0, 0, 0, 0, 0, 29321, 60518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3209, 3237, 12490, 22663, 0, 0, 0, 18789, 31464, 16391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20646, 0, 0, 0, 27238, 0, 0, 0, 0, 0, 15940, 4488, 6951, 0, 0, 0, 46342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20584, 3367, 0, 25350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55943, 0, 0, 0, 0, 0, 24133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2929, 0, 0, 50086, 0, 2918, 25356, 30052, 115, 11846, 0, 0, 0, 0, 3056, 0, 0, 0, 0, 17639, 239, 19815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21479, 0, 0, 0, 0, 0, 28420, 11786, 4772, 0, 0, 3368, 36295, 0, 31463, 0, 0, 14665, 996, 0, 20582, 0, 0, 0, 9988, 0, 23685, 0, 0, 0, 52551, 0, 0, 0, 0, 0, 0, 0, 7556, 0, 0, 0, 0, 0, 0, 0, 1895, 2186, 0, 0, 0, 0, 0, 27755, 25447, 0, 0, 0, 0, 31052, 63270, 0, 0, 0, 0, 0, 0, 0, 36742, 0, 24804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21290, 2276, 0, 0, 0, 0, 26475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15332, 0, 0, 0, 0, 0, 0, 0, 0, 3176, 19431, 0, 0, 0, 0, 0, 0, 0, 62726, 0, 0, 0, 25380, 0, 0, 27883, 1316, 0, 0, 7724, 3015, 0, 0, 0, 0, 6697, 0, 0, 47910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3141, 0, 0, 0, 14820, 0, 0, 0, 0, 9326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31493, 0, 0, 0, 0, 0, 6566, 0, 0, 0, 0, 0, 0, 6569, 1348, 0, 25638, 0, 0, 0, 0, 0, 20324, 0, 0, 17067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11876, 0, 41030, 0, 0, 0, 26405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11431, 28137, 14950, 0, 10151, 0, 0, 0, 0, 0, 0, 0, 29574, 0, 0, 0, 0, 27176, 57446, 0, 0, 0, 0, 28650, 57574, 1387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58247, 0, 0, 0, 0, 0, 0, 0, 16805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3526, 0, 15781, 0, 5572, 13352, 0, 0, 0, 0, 0, 18665, 23463, 0, 0, 0, 0, 0, 0, 15405, 6885, 0, 0, 0, 0, 15272, 0, 0, 0, 0, 0, 0, 0, 0, 9861, 0, 0, 0, 0, 0, 0, 0, 0, 9512, 4037, 0, 0, 11563, 49639, 0, 0, 0, 0, 0, 0, 27880, 57830, 0, 0, 0, 0, 0, 41831, 0, 21924, 0, 0, 0, 0, 0, 0, 0, 25509, 0, 27462, 0, 18085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13898, 8068, 26441, 0, 0, 0, 0, 0, 0, 25316, 0, 0, 0, 0, 16298, 7397, 5706, 19239, 0, 0, 0, 0, 0, 0, 0, 0, 1392, 50919, 0, 0, 0, 0, 0, 53863, 0, 0, 0, 0, 1451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17801, 15813, 0, 12740, 0, 0, 0, 32967, 0, 0, 0, 0, 0, 0, 5389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31143, 0, 20548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12109, 19015, 0, 34983, 0, 21732, 3600, 0, 0, 0, 0, 47750, 17288, 43975, 22857, 47559, 0, 0, 0, 0, 26408, 48358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30470, 0, 0, 23560, 4581, 0, 22404, 0, 49286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49831, 0, 0, 0, 27525, 31691, 7, 0, 0, 25835, 0, 0, 0, 0, 0, 4201, 16485, 0, 20676, 0, 0, 0, 0, 3753, 23303, 16264, 3878, 0, 0, 0, 0, 0, 0, 11434, 0, 0, 0, 0, 0, 0, 7589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22820, 11146, 49158, 0, 23623, 0, 0, 0, 0, 0, 0, 0, 13893, 0, 0, 0, 0, 0, 0, 11722, 60071, 1258, 0, 0, 0, 0, 0, 0, 18564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27945, 0, 0, 0, 0, 5479, 0, 20006, 17608, 3431, 10988, 30180, 0, 0, 0, 0, 0, 0, 0, 24581, 14, 0, 0, 0, 0, 0, 0, 25572, 0, 0, 0, 28612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8710, 0, 14116, 0, 0, 116, 292, 0, 0, 0, 37831, 0, 43078, 0, 0, 0, 0, 0, 0, 0, 0, 21832, 0, 0, 32134, 783, 0, 0, 30982, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5932, 0, 0, 0, 18505, 15175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3630, 16965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17797, 0, 0, 0, 0, 0, 0, 520, 42150, 0, 0, 3122, 0, 0, 0, 22506, 0, 0, 0, 0, 0, 0, 0, 0, 28550, 0, 0, 0, 50278, 0, 0, 13641, 5958, 0, 35238, 0, 0, 0, 0, 0, 0, 0, 0, 29993, 18724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20619, 9319, 0, 0, 0, 0, 23977, 0, 5193, 0, 0, 12196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20105, 677, 0, 0, 0, 0, 0, 0, 0, 0, 29419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20266, 0, 0, 0, 0, 10631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26628, 12744, 0, 20648, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 25604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63782, 0, 0, 0, 0, 24616, 0, 0, 0, 21291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45638, 0, 0, 0, 0, 1931, 0, 0, 0, 20521, 59975, 0, 20614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56231, 0, 0, 0, 0, 0, 29991, 0, 52871, 0, 20934, 0, 0, 0, 0, 0, 0, 0, 16871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7237, 0, 0, 0, 0, 0, 47558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10406, 0, 0, 0, 0, 0, 0, 0, 43046, 0, 0, 2930, 0, 12936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31141, 0, 0, 0, 0, 0, 0, 0, 37639, 0, 17572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31240, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 1648, 0, 0, 0, 0, 10055, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6345, 199, 0, 34982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56839, 0, 0, 0, 0, 0, 48902, 0, 13412, 0, 0, 0, 0, 0, 0, 0, 0, 2441, 4420, 0, 0, 0, 0, 20428, 933, 0, 0, 0, 0, 0, 0, 0, 45383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17036, 741, 0, 0, 0, 0, 0, 0, 0, 27589, 0, 0, 30282, 18950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25993, 0, 0, 0, 2443, 0, 0, 31622, 0, 14150, 0, 0, 0, 28679, 0, 0, 0, 0, 0, 0, 15464, 0, 0, 0, 0, 54694, 0, 0, 0, 0, 0, 0, 3827, 0, 0, 0, 3756, 0, 9897, 0, 0, 0, 0, 0, 19082, 31239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27625, 0, 0, 0, 784, 4647, 32652, 0, 0, 63494, 0, 0, 0, 0, 0, 0, 0, 21062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3404, 58470, 0, 32325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18634, 2789, 0, 0, 0, 0, 0, 0, 0, 8548, 0, 0, 0, 22501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15881, 0, 0, 0, 0, 35879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7978, 17956, 0, 0, 0, 0, 0, 0, 0, 24324, 0, 0, 4937, 0, 0, 0, 8168, 0, 13420, 10340, 0, 0, 0, 0, 0, 11780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16712, 0, 0, 0, 0, 0, 0, 0, 17640, 17991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2953, 0, 0, 0, 0, 0, 0, 0, 9100, 16806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30667, 0, 0, 19013, 0, 0, 0, 0, 0, 0, 205, 15334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1969, 0, 0, 0, 0, 0, 0, 0, 26248, 52518, 0, 49798, 0, 0, 0, 0, 0, 0, 0, 9668, 0, 0, 0, 0, 0, 4742, 0, 0, 21641, 0, 0, 0, 0, 0, 0, 53574, 0, 0, 0, 0, 0, 0, 5707, 0, 0, 0, 0, 0, 0, 0, 3018, 12454, 0, 0, 0, 0, 2920, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23910, 0, 0, 0, 0, 0, 0, 0, 55879, 0, 0, 0, 0, 0, 775, 0, 43270, 5066, 48967, 0, 0, 22986, 4165, 8971, 44838, 0, 0, 0, 0, 0, 62279, 272, 0, 0, 0, 0, 51430, 0, 0, 0, 0, 0, 0, 28234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13349, 0, 0, 0, 51111, 20265, 13861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 7494, 0, 0, 0, 0, 0, 0, 0, 0, 21768, 62407, 0, 0, 0, 0, 7979, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38918, 0, 56742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16296, 5767, 0, 0, 0, 0, 0, 0, 0, 32068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29796, 0, 0, 0, 0, 0, 0, 0, 0, 23916, 30183, 0, 58791, 0, 0, 0, 0, 0, 0, 0, 20518, 0, 0, 0, 0, 8969, 0, 0, 0, 183, 0, 0, 0, 0, 0, 2314, 17445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23748, 0, 0, 8139, 4839, 27914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29478, 0, 0, 16552, 26663, 0, 53767, 0, 0, 13960, 8039, 18696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 16005, 0, 0, 0, 0, 0, 0, 0, 0, 6258, 56806, 16456, 12455, 0, 0, 0, 0, 0, 0, 0, 23780, 0, 0, 0, 0, 0, 0, 9355, 0, 0, 0, 7273, 41063, 24780, 57766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3820, 2597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29225, 61126, 0, 0, 0, 58439, 15691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37190, 22408, 967, 0, 0, 0, 23078, 26858, 0, 0, 0, 19753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5416, 13702, 0, 0, 0, 0, 0, 52742, 20394, 38567, 0, 0, 0, 51079, 0, 0, 136, 8516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8936, 5031, 12520, 19334, 0, 0, 22827, 30247, 28074, 31140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27497, 18148, 20104, 59079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24389, 0, 0, 6125, 0, 0, 0, 0, 9541, 0, 0, 24553, 29095, 0, 0, 0, 0, 0, 0, 0, 25444, 0, 0, 9643, 0, 0, 63047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39558, 0, 0, 0, 0, 0, 0, 20620, 11815, 499, 0, 5128, 2278, 0, 0, 0, 0, 0, 46310, 0, 0, 0, 0, 0, 0, 0, 0, 23530, 40166, 2440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26758, 0, 0, 0, 0, 0, 51911, 0, 0, 23532, 0, 0, 0, 0, 51238, 25737, 44486, 12622, 0, 0, 0, 0, 0, 0, 3078, 0, 9253, 0, 0, 1128, 22023, 0, 0, 0, 21350, 0, 16420, 0, 0, 0, 0, 0, 0, 0, 65094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22532, 0, 48774, 0, 34503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9797, 0, 0, 0, 0, 0, 0, 0, 13797, 0, 38279, 0, 0, 1738, 0, 489, 46343, 0, 45382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29030, 0, 0, 0, 0, 0, 0, 6220, 56550, 0, 0, 0, 0, 0, 26885, 0, 28806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45958, 0, 0, 0, 0, 20553, 49927, 0, 0, 0, 0, 0, 0, 3019, 12358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26571, 13319, 0, 0, 653, 23399, 0, 0, 0, 0, 0, 0, 0, 0, 22316, 0, 0, 21188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27556, 0, 0, 0, 0, 0, 0, 0, 27878, 21483, 27653, 0, 29701, 237, 0, 10632, 0, 0, 0, 0, 33766, 0, 0, 0, 0, 0, 0, 31563, 0, 0, 0, 0, 0, 1416, 2439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9611, 0, 0, 0, 0, 0, 0, 0, 5611, 16581, 26601, 35462, 0, 0, 0, 26756, 0, 59271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26984, 57734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7882, 0, 0, 0, 19528, 6469, 0, 0, 1161, 0, 0, 0, 7688, 20935, 425, 0, 0, 0, 0, 0, 0, 0, 0, 12519, 0, 12902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2411, 0, 11725, 26086, 0, 0, 20201, 0, 0, 0, 0, 0, 0, 0, 0, 11045, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21541, 1141, 21190, 0, 9188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 4842, 0, 13672, 0, 0, 12230, 0, 0, 0, 10532, 0, 0, 8937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28996, 0, 0, 11720, 26982, 0, 46182, 0, 43911, 31754, 0, 1160, 3940, 0, 20772, 0, 0, 0, 0, 0, 24549, 0, 32582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31845, 0, 0, 0, 0, 0, 0, 0, 2310, 11788, 0, 0, 43047, 0, 0, 0, 18853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63622, 0, 0, 7048, 17318, 0, 0, 0, 21957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1039, 6279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46470, 0, 0, 24, 19719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21353, 3846, 0, 0, 0, 0, 0, 0, 0, 36679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11268, 0, 0, 0, 0, 0, 9382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29926, 0, 33606, 0, 4708, 2828, 0, 0, 29543, 0, 0, 0, 0, 0, 29893, 0, 0, 0, 0, 0, 0, 0, 0, 3663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10920, 7111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37094, 0, 0, 0, 27110, 0, 0, 0, 0, 0, 0, 21865, 0, 27753, 30214, 0, 0, 0, 0, 0, 57895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12648, 5446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19784, 17124, 0, 52007, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24900, 0, 0, 0, 0, 0, 1476, 0, 65031, 0, 0, 1205, 46663, 0, 30023, 11625, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10058, 0, 0, 0, 0, 0, 0, 28455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14788, 0, 0, 0, 0, 16808, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15944, 23207, 0, 0, 0, 0, 247, 0, 0, 0, 0, 24743, 0, 0, 0, 5252, 0, 0, 0, 0, 0, 0, 0, 0, 29961, 18660, 21099, 46791, 0, 7045, 0, 0, 0, 0, 25707, 0, 0, 17412, 3828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5803, 5637, 0, 38151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 0, 30215, 0, 0, 0, 0, 0, 0, 0, 8741, 0, 0, 0, 0, 0, 27366, 0, 0, 0, 0, 171, 4070, 0, 0, 0, 0, 0, 0, 0, 0, 24073, 7366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2184, 5189, 0, 20932, 1545, 4996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6313, 0, 0, 0, 0, 0, 0, 0, 30826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21640, 63303, 0, 0, 3275, 31111, 0, 0, 0, 0, 0, 0, 0, 11556, 0, 14756, 0, 0, 0, 15108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23914, 28966, 0, 0, 0, 4965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10216, 5223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27142, 0, 0, 1173, 20198, 0, 0, 0, 0, 0, 56614, 0, 0, 0, 0, 0, 4612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17769, 7910, 0, 0, 31880, 0, 0, 6055, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16840, 23879, 0, 0, 11051, 0, 0, 0, 32552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20842, 13701, 0, 0, 0, 37191, 7373, 10471, 17482, 25348, 0, 0, 0, 38502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21509, 6058, 0, 0, 0, 0, 0, 0, 3173, 0, 0, 0, 9543, 0, 0, 0, 0, 0, 0, 17768, 12708, 0, 0, 0, 0, 0, 37030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12748, 48743, 0, 11718, 0, 0, 25194, 0, 0, 0, 9033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5028, 0, 30118, 0, 0, 0, 0, 0, 42759, 0, 0, 3720, 0, 0, 0, 0, 0, 0, 25190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5450, 5125, 0, 58086, 0, 0, 0, 0, 0, 27716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22052, 0, 0, 0, 0, 26249, 0, 15947, 3460, 0, 0, 0, 35814, 0, 0, 0, 7813, 19500, 32167, 0, 18597, 0, 0, 0, 0, 0, 28644, 0, 0, 0, 60743, 0, 0, 0, 0, 0, 29636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17220, 15885, 9414, 9642, 0, 0, 0, 593, 0, 0, 24228, 0, 0, 0, 0, 0, 40422, 0, 26244, 0, 23109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64902, 0, 0, 0, 0, 3979, 60007, 0, 0, 0, 28199, 0, 0, 0, 43142, 0, 0, 0, 0, 0, 0, 0, 29158, 0, 30532, 0, 0, 0, 0, 13256, 0, 0, 0, 0, 16549, 0, 0, 0, 0, 0, 26116, 0, 0, 0, 0, 0, 0, 0, 0, 22825, 0, 0, 0, 0, 0, 0, 0, 1065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18985, 4805, 0, 0, 0, 0, 0, 17702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3468, 0, 0, 0, 0, 13447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56871, 0, 0, 1776, 15780, 0, 0, 2603, 0, 10280, 31366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11592, 3591, 0, 2372, 0, 0, 0, 0, 0, 0, 0, 20004, 0, 0, 0, 0, 0, 0, 12072, 518, 0, 0, 1960, 8999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7178, 32999, 0, 0, 0, 0, 0, 0, 1641, 0, 0, 0, 0, 0, 0, 0, 6764, 9893, 490, 4005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25258, 5541, 0, 14053, 306, 20743, 0, 0, 9422, 0, 0, 0, 0, 0, 0, 0, 11977, 260, 0, 35175, 0, 0, 0, 0, 0, 0, 0, 18405, 0, 0, 0, 16582, 0, 0, 0, 22470, 0, 0, 0, 0, 0, 0, 2792, 0, 0, 0, 14026, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14858, 3909, 0, 0, 0, 57671, 0, 0, 0, 0, 0, 0, 15979, 0, 0, 0, 2794, 15239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26884, 9070, 0, 0, 0, 0, 51846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19499, 37127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19205, 10350, 11910, 0, 0, 0, 0, 15083, 23108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15274, 41735, 0, 56774, 0, 0, 2825, 0, 14025, 389, 0, 0, 0, 0, 0, 0, 0, 0, 21482, 31910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20456, 710, 0, 0, 25032, 21797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32427, 21252, 0, 30150, 0, 43174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11403, 0, 0, 1029, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6892, 9252, 0, 63206, 3496, 14406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22568, 0, 0, 21253, 0, 0, 0, 0, 0, 0, 0, 39623, 0, 0, 10189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30729, 59910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7660, 24871, 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12013, 13252, 0, 551, 0, 0, 0, 43207, 0, 30567, 0, 0, 0, 0, 0, 0, 0, 0, 28394, 30724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22665, 22725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29414, 0, 0, 0, 0, 16074, 8966, 245, 1445, 0, 0, 0, 0, 24872, 0, 0, 0, 0, 13124, 0, 35527, 0, 0, 0, 0, 0, 0, 13259, 10917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25191, 0, 0, 0, 13956, 0, 0, 0, 0, 0, 0, 0, 54631, 19625, 12070, 3083, 0, 0, 0, 0, 14436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21766, 0, 15463, 29322, 0, 0, 0, 0, 0, 0, 29990, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23653, 0, 0, 0, 0, 0, 0, 0, 0, 2643, 0, 0, 21223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4114, 0, 0, 0, 0, 0, 0, 0, 0, 34790, 0, 0, 0, 0, 0, 0, 0, 16103, 0, 0, 0, 0, 0, 0, 297, 3620, 3338, 10372, 0, 14727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29924, 22473, 13895, 15529, 32455, 30378, 13540, 0, 28807, 0, 0, 0, 0, 0, 0, 0, 64582, 18380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38598, 0, 0, 0, 0, 0, 0, 0, 0, 1236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32710, 0, 0, 0, 0, 4590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16744, 0, 0, 0, 0, 0, 0, 20005, 0, 0, 13608, 1191, 0, 0, 0, 62183, 0, 0, 0, 0, 0, 24484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5380, 0, 0, 32328, 0, 0, 63814, 0, 0, 0, 2919, 0, 0, 0, 0, 17034, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7690, 486, 0, 0, 0, 39270, 0, 49094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20967, 17993, 12647, 0, 0, 0, 16036, 32616, 0, 0, 0, 0, 16294, 8555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35174, 0, 0, 0, 0, 0, 0, 30346, 0, 0, 0, 0, 0, 0, 0, 14797, 3652, 0, 0, 8268, 12934, 0, 54950, 0, 0, 0, 0, 2632, 33959, 0, 23175, 0, 0, 0, 0, 0, 36262, 0, 0, 0, 0, 0, 0, 32684, 26918, 0, 32676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15625, 11943, 1206, 0, 0, 0, 0, 18052, 0, 0, 0, 0, 0, 16422, 0, 0, 0, 26404, 0, 0, 28777, 0, 0, 24902, 0, 0, 408, 45351, 0, 35719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3658, 17446, 0, 165, 0, 0, 0, 0, 0, 0, 0, 6151, 0, 0, 24424, 0, 0, 0, 0, 0, 0, 0, 24170, 24293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11847, 0, 39591, 0, 0, 0, 0, 0, 0, 9549, 2788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1010, 0, 0, 0, 0, 0, 0, 26055, 31724, 0, 24233, 1828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17284, 0, 0, 0, 0, 19464, 0, 0, 0, 0, 0, 0, 0, 0, 32452, 0, 0, 0, 28871, 0, 0, 0, 0, 17704, 53383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17892, 1938, 0, 0, 0, 0, 0, 16362, 0, 0, 21605, 0, 0, 5003, 0, 0, 0, 0, 0, 0, 22693, 0, 22342, 0, 0, 0, 55846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22853, 0, 0, 0, 0, 0, 0, 0, 0, 6600, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40711, 0, 0, 0, 0, 0, 33894, 0, 0, 0, 0, 0, 0, 13000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30308, 0, 0, 0, 0, 0, 0, 5386, 0, 0, 0, 0, 0, 0, 27844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17740, 0, 0, 0, 0, 25093, 29064, 0, 0, 0, 0, 0, 0, 0, 12680, 11462, 0, 0, 0, 0, 0, 0, 0, 0, 84, 7303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27044, 457, 0, 22924, 58246, 19016, 0, 2606, 45703, 0, 5157, 0, 25028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2065, 0, 0, 0, 0, 0, 31946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33382, 0, 47878, 0, 0, 0, 0, 0, 0, 0, 0, 25004, 0, 0, 0, 0, 0, 0, 0, 26153, 35654, 0, 58055, 30668, 0, 0, 0, 0, 25988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7560, 20583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1733, 0, 0, 0, 8196, 0, 0, 11241, 0, 30572, 60326, 0, 15013, 0, 0, 0, 40646, 0, 23812, 0, 10022, 0, 0, 0, 0, 0, 0, 0, 0, 12874, 31015, 0, 0, 0, 0, 0, 0, 1608, 0, 0, 0, 0, 18308, 0, 0, 0, 0, 27114, 0, 0, 0, 0, 0, 0, 0, 7944, 1382, 0, 11813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24517, 0, 11621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21702, 0, 0, 13100, 8262, 2644, 7973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 12581, 0, 25221, 0, 0, 0, 40998, 16301, 62983, 0, 0, 0, 0, 1263, 9318, 0, 0, 0, 18854, 0, 0, 1741, 33895, 0, 0, 0, 0, 0, 0, 26377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32165, 0, 51143, 0, 0, 0, 0, 0, 29412, 0, 0, 0, 0, 0, 0, 0, 0, 1674, 4230, 0, 0, 0, 0, 0, 10502, 0, 0, 0, 0, 5545, 0, 0, 0, 0, 0, 2099, 45158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14157, 0, 26955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27050, 6726, 0, 0, 0, 0, 0, 0, 0, 0, 28554, 0, 0, 7142, 0, 0, 0, 0, 16936, 0, 0, 0, 25833, 0, 4399, 6980, 0, 46214, 0, 0, 0, 0, 0, 10630, 21164, 0, 0, 0, 0, 0, 0, 0, 2446, 48551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13381, 0, 0, 0, 0, 0, 0, 0, 0, 15400, 12135, 0, 0, 0, 0, 0, 4774, 586, 0, 0, 0, 0, 0, 0, 0, 0, 23751, 9736, 4548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25577, 29607, 6250, 1637, 0, 0, 0, 0, 22024, 0, 0, 0, 0, 22308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37414, 24044, 0, 0, 0, 14474, 29735, 0, 7077, 0, 45990, 0, 0, 0, 0, 30568, 40039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6150, 0, 4228, 0, 0, 0, 0, 0, 27687, 0, 0, 0, 0, 0, 0, 0, 24548, 21513, 1350, 0, 0, 0, 33607, 0, 0, 0, 0, 0, 0, 0, 0, 11784, 1414, 0, 0, 0, 0, 0, 0, 0, 18244, 940, 0, 0, 0, 0, 0, 0, 7270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16709, 0, 0, 0, 0, 0, 0, 0, 48935, 0, 0, 0, 0, 0, 0, 23660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53350, 0, 0, 0, 0, 0, 0, 4236, 16358, 0, 4422, 6665, 32644, 0, 0, 744, 18084, 0, 11014, 0, 0, 0, 0, 0, 29508, 0, 0, 0, 0, 0, 0, 0, 7686, 0, 0, 13289, 5478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12872, 0, 0, 24134, 1005, 22916, 0, 31429, 23400, 0, 0, 0, 0, 0, 0, 0, 28424, 0, 0, 0, 25706, 27109, 0, 0, 26345, 0, 0, 0, 0, 0, 0, 25126, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 17032, 0, 0, 21799, 0, 0, 10060, 0, 12296, 21892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20777, 14311, 0, 58182, 32232, 0, 10282, 0, 2121, 11527, 0, 0, 0, 12325, 0, 0, 0, 0, 0, 0, 0, 28804, 2344, 8133, 0, 0, 0, 0, 21864, 62695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2771, 0, 0, 23204, 0, 0, 0, 0, 0, 6278, 0, 0, 0, 0, 0, 26597, 0, 0, 0, 0, 23144, 0, 0, 0, 0, 0, 31816, 20070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24456, 2118, 0, 0, 0, 0, 6570, 1156, 0, 0, 0, 0, 0, 0, 0, 30406, 0, 0, 0, 28388, 3572, 0, 0, 26599, 12426, 5286, 0, 0, 0, 0, 0, 4967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24970, 24167, 0, 0, 0, 0, 28745, 4678, 0, 0, 0, 0, 0, 0, 0, 1444, 236, 0, 0, 0, 0, 0, 0, 0, 0, 19428, 0, 0, 0, 0, 0, 0, 2092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2827, 0, 0, 0, 0, 0, 19881, 19204, 0, 11749, 0, 0, 0, 0, 0, 0, 0, 17958, 0, 17894, 0, 18726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21510, 5033, 0, 0, 0, 0, 22855, 0, 0, 0, 0, 0, 14598, 0, 29605, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 47142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2225, 14823, 0, 0, 2637, 6182, 78, 15078, 0, 0, 0, 0, 20264, 0, 0, 0, 0, 0, 0, 36743, 4140, 44551, 17352, 25703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14024, 0, 0, 0, 0, 0, 0, 28004, 0, 0, 0, 0, 0, 7588, 0, 0, 0, 0, 0, 0, 0, 2087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18028, 0, 0, 0, 300, 14212, 0, 0, 1386, 40327, 0, 0, 0, 0, 0, 0, 31082, 0, 0, 22374, 0, 0, 0, 0, 0, 35718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26532, 7756, 0, 0, 18982, 0, 0, 0, 0, 0, 0, 0, 0, 6440, 1159, 7180, 0, 0, 0, 0, 0, 0, 45766, 0, 57798, 0, 16740, 0, 0, 6802, 60454, 0, 0, 0, 26470, 0, 0, 0, 0, 0, 65382, 4362, 7750, 0, 0, 0, 0, 0, 0, 9096, 4743, 334, 0, 0, 0, 0, 0, 0, 39974, 0, 0, 0, 25828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3027, 0, 0, 0, 15816, 0, 0, 0, 0, 0, 0, 0, 0, 48327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16168, 41799, 0, 0, 24458, 8581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54503, 0, 0, 0, 0, 5097, 30852, 18664, 0, 0, 0, 0, 0, 0, 16484, 0, 0, 27337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35942, 0, 0, 0, 0, 0, 0, 0, 4356, 0, 0, 0, 0, 0, 57030, 0, 0, 1417, 41191, 0, 0, 0, 0, 0, 23429, 0, 0, 0, 0, 10024, 21735, 0, 0, 10126, 0, 0, 0, 0, 19046, 0, 0, 0, 0, 0, 0, 24105, 4710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4394, 0, 0, 0, 0, 13253, 0, 56391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55974, 0, 0, 0, 52070, 0, 15620, 0, 0, 0, 0, 0, 2660, 0, 0, 0, 0, 21644, 0, 0, 52455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8902, 0, 0, 0, 0, 0, 0, 3116, 0, 464, 34726, 0, 0, 0, 0, 0, 0, 25003, 12423, 0, 27172, 1896, 7335, 0, 0, 0, 0, 0, 35686, 0, 0, 0, 0, 3472, 0, 0, 0, 0, 22406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21124, 23594, 33127, 0, 0, 0, 0, 0, 0, 16684, 22087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55814, 0, 0, 0, 0, 0, 0, 4109, 23460, 0, 0, 8874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29960, 63398, 1302, 0, 0, 0, 0, 0, 0, 0, 0, 24806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9799, 0, 0, 0, 0, 0, 0, 0, 31333, 0, 0, 0, 0, 0, 19557, 0, 0, 0, 0, 0, 5701, 0, 0, 0, 63014, 0, 0, 0, 0, 0, 0, 0, 21254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12484, 0, 0, 0, 48326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15783, 0, 0, 1202, 0, 0, 0, 0, 23174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3086, 49191, 0, 0, 5387, 15141, 0, 0, 0, 3365, 0, 0, 0, 0, 20076, 14021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 40198, 0, 0, 0, 52039, 0, 24932, 0, 0, 0, 0, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9860, 0, 0, 0, 0, 0, 23719, 0, 21476, 0, 0, 0, 0, 20776, 4807, 0, 0, 3177, 16678, 0, 0, 110, 10853, 0, 0, 0, 17382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7500, 4966, 0, 0, 0, 0, 0, 0, 0, 52102, 0, 24516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26535, 0, 0, 0, 46247, 0, 0, 0, 15557, 0, 0, 0, 0, 76, 52327, 0, 0, 0, 0, 17866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46758, 0, 0, 0, 0, 0, 19173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2985, 0, 0, 0, 0, 0, 0, 14310, 0, 0, 2125, 45831, 0, 0, 0, 0, 0, 0, 9838, 0, 13227, 19492, 0, 0, 0, 29764, 0, 0, 0, 0, 686, 30053, 0, 0, 0, 0, 0, 30789, 139, 20837, 0, 0, 0, 0, 502, 18533, 0, 0, 0, 0, 0, 19111, 0, 0, 0, 0, 0, 31396, 0, 0, 0, 17444, 0, 0, 0, 0, 0, 0, 0, 49862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25610, 550, 0, 0, 561, 0, 29034, 0, 0, 0, 3528, 0, 0, 0, 1715, 14661, 18, 63463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29578, 59014, 0, 39430, 0, 0, 0, 0, 2250, 16612, 0, 31780, 0, 0, 0, 0, 0, 0, 462, 16967, 0, 29029, 0, 0, 0, 0, 0, 23462, 0, 0, 0, 0, 0, 0, 0, 0, 1768, 0, 6025, 16998, 1804, 0, 0, 54182, 0, 0, 0, 0, 0, 0, 0, 0, 14124, 0, 6154, 29702, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48807, 0, 8292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16389, 5933, 0, 14857, 51303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35623, 9097, 23047, 0, 0, 23112, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 151, 9254, 1390, 0, 0, 0, 0, 0, 0, 54215, 0, 0, 0, 0, 6187, 0, 0, 0, 0, 13095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9866, 0, 0, 59622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25286, 0, 0, 23848, 32069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9255, 2187, 15270, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22212, 1865, 17543, 0, 0, 0, 0, 0, 0, 21996, 0, 0, 0, 0, 55975, 0, 0, 0, 0, 0, 0, 0, 0, 32138, 21156, 0, 0, 0, 0, 0, 0, 14249, 0, 0, 0, 2388, 0, 0, 0, 0, 6823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26694, 0, 0, 6059, 53511, 0, 0, 0, 0, 0, 0, 0, 49542, 6159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1036, 24036, 0, 2501, 0, 0, 0, 0, 0, 0, 17419, 51271, 3377, 15142, 0, 0, 0, 0, 0, 0, 5007, 62374, 0, 56935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24422, 0, 0, 0, 0, 0, 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28263, 0, 0, 0, 0, 0, 0, 0, 15622, 0, 19749, 0, 0, 1611, 0, 22219, 48583, 25129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 32518, 0, 0, 0, 18469, 0, 0, 0, 0, 0, 0, 5896, 29927, 3657, 23046, 0, 0, 3214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 3048, 455, 0, 31012, 0, 0, 0, 0, 0, 0, 0, 23270, 0, 32677, 0, 0, 0, 0, 0, 38086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25541, 0, 18788, 0, 0, 22248, 1351, 0, 61734, 4524, 30629, 0, 14887, 242, 29063, 0, 0, 14408, 4741, 0, 0, 0, 37318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8106, 0, 32107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1481, 0, 0, 28132, 0, 25798, 0, 59783, 0, 0, 0, 0, 0, 59078, 0, 0, 0, 23366, 0, 0, 0, 0, 0, 0, 0, 30887, 0, 0, 0, 0, 16200, 0, 0, 0, 335, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30730, 9478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18790, 0, 0, 0, 0, 663, 0, 0, 0, 1034, 31431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30120, 0, 0, 0, 0, 13925, 0, 0, 0, 0, 0, 0, 2280, 13414, 0, 0, 0, 0, 0, 0, 22028, 23687, 3017, 11047, 0, 0, 21738, 18630, 0, 0, 0, 0, 0, 0, 0, 30246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17257, 0, 21896, 63783, 0, 0, 0, 21094, 0, 18662, 0, 25700, 0, 22533, 0, 0, 0, 0, 0, 6341, 5800, 11111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15399, 12970, 6501, 0, 0, 3179, 26438, 0, 0, 0, 0, 0, 0, 0, 15750, 0, 13062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 21284, 11177, 4391, 0, 0, 0, 0, 19595, 40647, 0, 0, 0, 0, 0, 11877, 0, 0, 0, 26439, 0, 0, 0, 0, 695, 49126, 27467, 11972, 0, 0, 0, 0, 0, 0, 9961, 0, 0, 0, 31722, 62982, 0, 0, 0, 0, 15817, 52710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24614, 0, 0, 0, 0, 0, 20550, 0, 0, 5034, 3942, 0, 0, 0, 45927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2548, 0, 0, 0, 0, 0, 0, 45606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3405, 12582, 15563, 54087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24202, 5893, 0, 0, 0, 44230, 0, 0, 0, 5605, 0, 47782, 0, 32230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7014, 0, 0, 0, 0, 16488, 3175, 0, 27237, 0, 0, 0, 0, 0, 40902, 0, 0, 0, 0, 0, 0, 0, 32004, 31434, 0, 24392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29130, 58214, 0, 0, 0, 0, 0, 0, 29002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37926, 0, 0, 0, 0, 0, 0, 0, 0, 1290, 0, 0, 0, 4713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1803, 966, 0, 17700, 0, 0, 654, 19109, 0, 51655, 0, 0, 0, 0, 0, 10470, 1584, 0, 0, 0, 0, 0, 0, 0, 2506, 0, 0, 25159, 4303, 0, 0, 0, 395, 15879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1352, 6535, 0, 19652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4722, 7909, 0, 0, 0, 0, 30152, 0, 0, 64742, 0, 0, 0, 0, 0, 0, 2153, 9125, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1328, 17030, 0, 0, 0, 0, 0, 0, 0, 54151, 0, 0, 0, 0, 1775, 54535, 0, 0, 0, 0, 31624, 0, 0, 0, 7150, 0, 0, 0, 0, 0, 0, 0, 1840, 35943, 0, 0, 0, 0, 0, 56455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64486, 0, 0, 0, 51174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 16134, 19883, 39943, 10281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14125, 2407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26921, 0, 0, 0, 0, 0, 22188, 0, 20810, 10053, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28170, 0, 15208, 0, 0, 32517, 5736, 19271, 3562, 10534, 0, 0, 0, 59655, 0, 0, 0, 0, 27084, 60422, 0, 0, 24969, 0, 0, 0, 2636, 0, 0, 0, 0, 26277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30596, 3594, 0, 0, 0, 8362, 14565, 0, 0, 0, 0, 0, 0, 10793, 12326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5906, 59686, 0, 0, 23081, 517, 0, 15556, 0, 0, 0, 8486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19877, 0, 0, 0, 0, 0, 0, 0, 0, 7497, 0, 0, 26085, 0, 0, 23784, 63591, 6568, 6310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7018, 14470, 18858, 0, 5641, 10660, 0, 0, 0, 0, 0, 0, 0, 35526, 1515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27656, 0, 0, 9606, 0, 39590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 4327, 12649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20199, 0, 0, 0, 0, 0, 0, 26730, 0, 0, 0, 19400, 14695, 0, 31334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19589, 0, 0, 0, 0, 0, 0, 0, 0, 5064, 11908, 0, 27333, 0, 0, 0, 0, 0, 0, 0, 47751, 0, 0, 0, 26662, 0, 0, 0, 0, 0, 0, 0, 55655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6245, 0, 0, 0, 0, 0, 0, 0, 0, 23368, 63911, 0, 0, 0, 0, 0, 0, 0, 0, 1974, 0, 0, 0, 0, 0, 0, 0, 8520, 24037, 0, 0, 0, 0, 0, 0, 0, 26279, 0, 0, 0, 22886, 0, 0, 0, 27782, 0, 30694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33703, 0, 0, 0, 30405, 0, 34598, 0, 51047, 0, 0, 0, 0, 1908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1511, 21897, 0, 0, 0, 0, 0, 0, 51398, 0, 24870, 0, 32647, 0, 0, 0, 35015, 0, 0, 0, 0, 0, 0, 0, 11204, 0, 0, 0, 0, 0, 0, 7758, 57991, 0, 0, 0, 30949, 0, 0, 22, 15140, 9162, 0, 0, 0, 0, 0, 0, 25540, 20136, 7108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16427, 10789, 9805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4680, 0, 0, 52679, 0, 0, 0, 0, 0, 14884, 0, 0, 0, 16804, 0, 0, 0, 0, 0, 0, 9578, 5287, 0, 0, 0, 0, 0, 0, 0, 34054, 0, 0, 0, 0, 0, 19076, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7627, 55719, 0, 39463, 14446, 58374, 0, 0, 0, 0, 23465, 15845, 0, 0, 0, 0, 0, 38534, 0, 0, 0, 17893, 10922, 0, 7176, 678, 0, 0, 0, 0, 0, 0, 0, 0, 3113, 46279, 0, 0, 0, 0, 0, 0, 0, 23334, 0, 0, 18088, 23268, 0, 62342, 0, 0, 0, 16613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38182, 0, 0, 0, 0, 0, 0, 25292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10344, 71, 6446, 0, 0, 1893, 0, 0, 1106, 0, 28680, 30756, 0, 41126, 0, 0, 1492, 0, 15341, 0, 0, 0, 0, 17575, 0, 21220, 0, 0, 0, 0, 0, 25060, 2088, 21828, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 16708, 0, 0, 0, 1668, 0, 0, 0, 0, 0, 12260, 0, 0, 0, 0, 0, 0, 0, 0, 4078, 0, 0, 0, 0, 0, 12713, 6215, 0, 0, 20329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3732, 0, 1646, 0, 0, 27460, 0, 34406, 17128, 14341, 0, 0, 0, 0, 0, 19527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8551, 21546, 10212, 3020, 2951, 0, 17638, 0, 0, 6985, 44999, 2218, 8197, 0, 0, 30472, 63366, 0, 26660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1265, 0, 0, 0, 0, 0, 0, 0, 2610, 0, 0, 0, 11278, 20295, 0, 0, 0, 0, 0, 19780, 0, 0, 0, 0, 0, 0, 2353, 10852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5421, 24292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34407, 0, 0, 0, 0, 0, 0, 15432, 20774, 0, 0, 0, 0, 0, 0, 0, 0, 12360, 10757, 0, 0, 0, 33126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29573, 0, 2343, 0, 0, 0, 0, 0, 63079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43015, 0, 16038, 0, 0, 0, 0, 0, 0, 0, 0, 1480, 25573, 0, 0, 0, 0, 0, 0, 0, 8839, 0, 0, 0, 0, 0, 0, 0, 24645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5063, 0, 0, 0, 0, 0, 45830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 0, 0, 64039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15300, 0, 0, 0, 0, 0, 0, 2924, 46759, 6760, 19268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34182, 0, 0, 3977, 18149, 0, 0, 0, 32199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23524, 25994, 0, 0, 10343, 0, 0, 0, 9733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16741, 0, 0, 4626, 23367, 0, 0, 31400, 0, 0, 3557, 0, 0, 4234, 0, 0, 0, 0, 0, 0, 28486, 0, 0, 0, 0, 0, 14213, 0, 57191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 65318, 29832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29989, 0, 31846, 0, 0, 8170, 0, 0, 4421, 27626, 30884, 0, 0, 20204, 0, 0, 0, 0, 44614, 534, 20868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28710, 0, 10277, 0, 0, 0, 0, 0, 29511, 0, 19813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27020, 0, 0, 0, 0, 0, 0, 53094, 0, 35207, 0, 0, 0, 37542, 0, 61766, 8584, 8037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12488, 22757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19973, 0, 0, 0, 63943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36006, 0, 0, 0, 19012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8580, 0, 0, 0, 0, 0, 0, 0, 18021, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1254, 0, 0, 0, 42630, 0, 0, 0, 0, 0, 0, 0, 16262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2124, 25479, 0, 0, 0, 0, 16873, 0, 0, 0, 0, 3142, 0, 0, 18443, 0, 0, 0, 0, 0, 3917, 0, 8841, 1190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9284, 0, 0, 24394, 41351, 0, 0, 0, 42087, 0, 62566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6728, 4199, 0, 0, 0, 0, 25515, 0, 1231, 0, 374, 15623, 0, 29956, 0, 14118, 0, 0, 0, 0, 0, 19047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20900, 0, 16743, 0, 0, 0, 28902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13838, 0, 0, 10052, 0, 0, 0, 0, 7432, 43783, 17097, 0, 0, 0, 0, 0, 873, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8459, 23559, 0, 53030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35750, 0, 4071, 0, 0, 0, 38662, 0, 41414, 0, 0, 0, 0, 11656, 0, 0, 0, 0, 0, 4011, 42695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25353, 0, 0, 0, 0, 0, 0, 0, 27177, 22372, 0, 0, 0, 0, 0, 30980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46278, 3976, 12711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4072, 11078, 0, 0, 16553, 2405, 0, 0, 0, 0, 0, 0, 0, 0, 2670, 0, 0, 0, 0, 0, 0, 32998, 0, 0, 0, 0, 0, 0, 0, 47046, 0, 30533, 0, 0, 11050, 9734, 13129, 0, 0, 0, 0, 23494, 0, 0, 0, 0, 0, 58310, 0, 0, 0, 57543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 5163, 59687, 2220, 0, 0, 0, 0, 0, 0, 29510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17316, 0, 20069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27174, 0, 0, 0, 0, 0, 0, 0, 22949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19208, 0, 0, 0, 0, 0, 0, 20933, 0, 0, 6026, 8742, 0, 0, 0, 17380, 0, 13127, 2797, 0, 0, 30116, 0, 0, 5963, 8004, 0, 57126, 0, 0, 0, 0, 0, 42854, 14792, 30759, 0, 24964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16933, 0, 0, 0, 0, 0, 0, 15176, 40839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 30341, 0, 0, 0, 0, 21036, 24102, 0, 0, 0, 0, 30123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22597, 31531, 26789, 0, 59559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9352, 29863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24551, 0, 0, 0, 0, 0, 0, 0, 20516, 0, 0, 0, 39462, 3665, 0, 28265, 0, 8778, 64262, 0, 57414, 9132, 0, 0, 18276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26344, 30725, 524, 19751, 0, 13796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18155, 0, 12841, 0, 74, 24998, 13579, 1061, 0, 64199, 0, 0, 8776, 0, 0, 60231, 0, 25412, 0, 0, 0, 59143, 0, 0, 0, 0, 0, 0, 14344, 1510, 0, 0, 0, 38374, 0, 0, 0, 0, 0, 0, 0, 0, 13353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9446, 0, 0, 0, 0, 0, 0, 0, 32613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19844, 0, 0, 0, 0, 14859, 0, 0, 0, 0, 6662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14154, 0, 29770, 0, 0, 0, 0, 0, 16520, 2182, 0, 0, 0, 0, 0, 36102, 3340, 0, 0, 0, 0, 0, 0, 0, 0, 25189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15720, 0, 0, 0, 0, 0, 0, 22758, 0, 0, 304, 0, 3243, 14117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5130, 12679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21733, 10441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36103, 0, 0, 0, 0, 0, 23590, 0, 57479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10824, 18372, 0, 0, 0, 0, 0, 35078, 15722, 12967, 0, 0, 0, 0, 0, 34599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53639, 0, 38630, 0, 0, 0, 0, 0, 0, 31017, 11333, 0, 0, 0, 0, 19144, 0, 9513, 0, 0, 0, 0, 0, 0, 0, 0, 56711, 24042, 0, 1197, 0, 0, 58502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8230, 6121, 18628, 0, 0, 0, 0, 0, 0, 25290, 0, 0, 0, 0, 0, 1514, 0, 0, 0, 0, 0, 0, 0, 14378, 9798, 32363, 0, 0, 0, 0, 0, 9577, 0, 0, 0, 0, 0, 0, 26788, 0, 0, 0, 0, 0, 0, 330, 10533, 0, 0, 0, 0, 0, 42246, 0, 0, 0, 0, 0, 0, 5074, 21028, 0, 38119, 0, 0, 0, 0, 0, 0, 248, 0, 31176, 62054, 0, 53287, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9224, 2117, 0, 0, 0, 0, 15818, 5607, 0, 52582, 0, 0, 0, 0, 0, 0, 0, 0, 18248, 24005, 23018, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 39910, 0, 0, 7080, 11399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22220, 57894, 0, 0, 0, 0, 0, 0, 0, 13156, 0, 1413, 1007, 0, 0, 0, 0, 21415, 0, 21543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41702, 22538, 9573, 0, 0, 0, 8806, 0, 0, 6920, 56359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42215, 0, 0, 13708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16453, 0, 0, 0, 0, 0, 0, 1582, 1764, 3282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11653, 0, 0, 0, 0, 12139, 0, 29482, 31076, 1673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40262, 0, 0, 0, 33862, 0, 0, 0, 0, 0, 20996, 0, 0, 0, 0, 0, 4615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43943, 333, 19367, 0, 0, 0, 0, 0, 0, 0, 26821, 0, 32389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4936, 11687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10885, 0, 0, 0, 0, 0, 25926, 0, 0, 0, 0, 0, 0, 15851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8360, 0, 17130, 7942, 0, 11460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18150, 14248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22310, 0, 0, 0, 42758, 0, 0, 0, 0, 0, 0, 0, 0, 29354, 5574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9156, 0, 0, 1801, 14023, 0, 0, 0, 0, 0, 62406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31018, 65510, 0, 0, 0, 0, 0, 0, 0, 26182, 0, 0, 0, 0, 0, 0, 0, 27717, 0, 0, 0, 0, 0, 0, 0, 46950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31108, 0, 11366, 0, 0, 0, 3717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8552, 6054, 3339, 0, 0, 0, 0, 51622, 0, 0, 0, 0, 0, 0, 0, 3718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28358, 0, 2756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1462, 0, 0, 27622, 0, 0, 0, 0, 0, 0, 0, 62502, 14410, 56743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36550, 0, 38054, 0, 0, 0, 21221, 0, 0, 0, 0, 0, 0, 0, 27077, 0, 0, 16906, 0, 12587, 12101, 0, 0, 0, 0, 0, 0, 10414, 28775, 21769, 60167, 0, 56646, 0, 0, 0, 0, 0, 20740, 0, 0, 0, 0, 0, 0, 5931, 5351, 0, 65478, 0, 0, 0, 0, 0, 0, 7977, 52647, 0, 4868, 0, 0, 0, 55463, 0, 0, 0, 0, 0, 32197, 0, 0, 0, 0, 0, 13445, 0, 0, 0, 26631, 0, 0, 0, 0, 0, 11237, 0, 0, 0, 0, 209, 1285, 0, 0, 1928, 0, 0, 0, 0, 43334, 23849, 23172, 0, 0, 0, 0, 0, 0, 0, 0, 24712, 62439, 8811, 3463, 20457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16008, 56263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60358, 22761, 6565, 0, 0, 30888, 27686, 0, 0, 0, 17093, 0, 0, 0, 0, 22121, 0, 0, 0, 7593, 14182, 0, 28103, 0, 0, 0, 0, 0, 45126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18500, 0, 0, 0, 0, 28202, 0, 0, 0, 0, 0, 0, 0, 0, 26308, 0, 29541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29572, 0, 0, 0, 21285, 0, 0, 0, 0, 0, 60839, 0, 0, 0, 0, 0, 30407, 15949, 2981, 0, 0, 0, 46439, 0, 0, 0, 0, 0, 23911, 26505, 25222, 12811, 5895, 0, 6343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31815, 0, 0, 0, 0, 0, 0, 0, 0, 19688, 10245, 0, 0, 0, 31301, 26985, 28964, 0, 0, 0, 0, 0, 0, 0, 0, 27208, 31172, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16292, 0, 0, 0, 0, 0, 8743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6438, 0, 0, 0, 33319, 0, 0, 0, 33286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22181, 7499, 24774, 0, 10756, 0, 44775, 724, 0, 25768, 25669, 24873, 5349, 25257, 0, 0, 54566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 439, 357, 0, 0, 6536, 8452, 0, 0, 1802, 0, 0, 61350, 0, 15045, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22885, 0, 0, 32073, 0, 0, 0, 9546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27748, 0, 0, 23176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24583, 0, 0, 0, 0, 0, 34118, 0, 0, 0, 0, 2158, 0, 5586, 30340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24452, 0, 0, 0, 0, 2409, 4390, 0, 24196, 0, 0, 0, 0, 0, 0, 32264, 26948, 20587, 0, 0, 0, 2155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4328, 26276, 0, 0, 0, 0, 0, 0, 0, 0, 23564, 0, 12458, 11367, 0, 0, 25162, 0, 0, 0, 0, 0, 0, 65414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32966, 0, 0, 0, 34662, 0, 0, 0, 0, 0, 39238, 0, 0, 0, 0, 11400, 10214, 266, 12452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15173, 0, 0, 0, 13668, 0, 13222, 0, 23364, 0, 0, 0, 0, 0, 11941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25575, 0, 0, 0, 57383, 0, 0, 0, 10308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2865, 9287, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21508, 22380, 59526, 0, 0, 0, 23589, 0, 0, 0, 51590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4645, 3980, 28295, 0, 0, 0, 0, 0, 12388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21734, 0, 17607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41767, 0, 0, 0, 0, 0, 0, 0, 18436, 0, 0, 0, 0, 0, 0, 0, 21958, 0, 19430, 0, 0, 1204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3240, 55239, 0, 0, 0, 0, 0, 30660, 0, 0, 0, 28901, 0, 0, 0, 0, 4716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11754, 0, 0, 0, 0, 22086, 0, 22564, 8749, 0, 0, 28391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2886, 0, 0, 0, 0, 0, 0, 0, 29062, 0, 0, 0, 0, 0, 0, 0, 40358, 0, 0, 15916, 39526, 0, 13735, 0, 0, 0, 0, 28938, 0, 407, 4006, 0, 0, 0, 26916, 0, 0, 0, 0, 0, 27526, 30280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24586, 0, 24649, 5126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8684, 0, 0, 0, 0, 0, 0, 0, 23019, 0, 22377, 18599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27593, 9735, 0, 20196, 0, 0, 0, 0, 28168, 48423, 0, 0, 0, 0, 0, 31399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13892, 0, 0, 0, 0, 0, 17606, 0, 0, 15242, 29767, 26378, 17701, 0, 0, 14472, 0, 4840, 0, 0, 0, 0, 0, 0, 24708, 0, 9349, 4330, 0, 0, 0, 0, 0, 0, 0, 16137, 0, 0, 34854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25063, 0, 0, 0, 0, 0, 0, 6603, 12583, 0, 0, 0, 0, 0, 0, 0, 0, 7433, 29188, 0, 0, 0, 0, 0, 31270, 0, 0, 22920, 3143, 0, 0, 0, 0, 0, 23461, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 21381, 0, 11524, 0, 0, 0, 0, 0, 0, 21004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 23239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2313, 0, 0, 40614, 0, 0, 14825, 0, 0, 0, 0, 0, 0, 46535, 0, 41190, 7853, 0, 31656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3433, 5255, 0, 0, 0, 0, 0, 0, 0, 33958, 0, 0, 0, 0, 72, 15493, 0, 0, 0, 0, 0, 0, 0, 36070, 0, 0, 0, 0, 0, 0, 0, 14724, 0, 0, 0, 0, 0, 29828, 0, 0, 0, 0, 0, 0, 0, 18822, 20008, 0, 0, 0, 0, 2438, 2952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24420, 0, 19908, 0, 0, 0, 8101, 0, 17479, 0, 0, 3530, 0, 8202, 29319, 0, 0, 1132, 6789, 0, 0, 23881, 0, 0, 0, 4810, 0, 0, 46918, 0, 0, 0, 41574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39334, 0, 0, 0, 26117, 0, 0, 0, 0, 0, 0, 5100, 0, 0, 0, 0, 0, 23496, 27813, 4045, 54918, 0, 0, 0, 0, 0, 0, 6473, 7428, 0, 0, 0, 0, 6792, 0, 0, 0, 0, 0, 3560, 32103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54790, 0, 0, 6926, 0, 0, 0, 0, 16518, 0, 0, 0, 0, 0, 20806, 0, 0, 0, 0, 1841, 3174, 0, 0, 0, 0, 9612, 18374, 0, 0, 0, 0, 32744, 0, 0, 9671, 0, 59879, 0, 23300, 8073, 0, 0, 14758, 0, 0, 0, 10342, 0, 0, 0, 0, 0, 0, 24808, 14759, 0, 0, 0, 0, 0, 0, 5515, 0, 0, 14852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2354, 23271, 0, 32740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18472, 0, 0, 0, 0, 0, 0, 0, 0, 33190, 0, 0, 0, 0, 0, 0, 0, 0, 8972, 21669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25574, 0, 0, 0, 0, 5096, 0, 14283, 55367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12644, 0, 0, 0, 0, 4651, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 13638, 19466, 0, 0, 0, 0, 0, 31273, 0, 8010, 0, 0, 0, 0, 0, 3211, 0, 0, 0, 0, 63430, 0, 0, 0, 0, 0, 15237, 0, 0, 0, 0, 0, 0, 19018, 2437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14312, 0, 0, 0, 0, 16836, 0, 0, 471, 35975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6023, 0, 0, 0, 0, 0, 0, 0, 0, 11593, 9639, 0, 0, 0, 55783, 0, 5700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27908, 0, 26598, 0, 0, 6667, 6470, 0, 0, 0, 0, 0, 0, 0, 62534, 0, 0, 0, 0, 16522, 27911, 0, 0, 10025, 7172, 0, 0, 779, 0, 360, 17477, 0, 0, 0, 61991, 7752, 7717, 1494, 0, 0, 0, 26569, 40742, 0, 0, 0, 0, 0, 0, 0, 26406, 10474, 32196, 0, 0, 0, 0, 0, 50567, 16521, 11716, 0, 0, 0, 0, 0, 55558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61926, 0, 26436, 0, 0, 0, 0, 4459, 10598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9223, 0, 29318, 0, 0, 0, 0, 0, 60423, 0, 0, 0, 0, 0, 0, 0, 47078, 0, 50246, 0, 12612, 0, 0, 0, 0, 0, 0, 0, 61799, 0, 55015, 0, 21060, 7309, 0, 0, 0, 0, 0, 11976, 0, 0, 0, 0, 23527, 0, 0, 0, 0, 0, 0, 10347, 15942, 0, 34023, 0, 0, 0, 0, 4969, 0, 0, 0, 0, 0, 0, 0, 0, 28997, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19716, 28872, 0, 0, 0, 0, 0, 22152, 0, 0, 0, 0, 0, 0, 26342, 0, 0, 0, 9764, 0, 0, 0, 0, 0, 0, 0, 21798, 0, 0, 0, 0, 13, 6853, 32136, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 54502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46183, 0, 0, 625, 22854, 0, 0, 0, 0, 2061, 23588, 0, 0, 11049, 56262, 0, 0, 18538, 1509, 0, 0, 17258, 4453, 0, 0, 0, 0, 12429, 0, 0, 0, 0, 8102, 0, 0, 0, 0, 0, 0, 8074, 0, 23852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16136, 3428, 0, 27876, 0, 0, 0, 7332, 0, 0, 0, 0, 0, 28900, 0, 0, 2284, 0, 0, 17573, 201, 1508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31365, 27688, 22565, 0, 0, 0, 5159, 0, 0, 0, 0, 4584, 42599, 0, 0, 0, 44422, 1068, 23173, 0, 0, 0, 613, 0, 0, 0, 12645, 0, 0, 0, 0, 0, 27076, 6732, 0, 0, 0, 3913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22244, 29992, 15911, 0, 0, 0, 0, 0, 22982, 0, 0, 0, 0, 0, 0, 0, 50598, 0, 0, 0, 0, 0, 0, 5161, 1574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19108, 0, 0, 0, 35014, 0, 0, 0, 25956, 29067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1356, 61927, 0, 0, 0, 64455, 2122, 64231, 0, 0, 18763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 907, 34471, 0, 0, 0, 39078, 0, 0, 1995, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 822, 0, 15978, 44423, 0, 0, 3112, 325, 0, 0, 0, 0, 0, 15397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1193, 4294, 4968, 15559, 0, 46150, 0, 0, 0, 0, 0, 18917, 0, 0, 0, 0, 0, 0, 9928, 37543, 0, 0, 0, 0, 13097, 36999, 0, 0, 0, 15430, 0, 0, 8424, 29639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40487, 0, 13284, 0, 11141, 0, 0, 0, 32388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5298, 57702, 0, 0, 0, 0, 0, 0, 0, 13060, 0, 0, 0, 0, 0, 0, 8233, 42278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36422, 0, 0, 0, 7972, 0, 0, 0, 18437, 0, 0, 0, 0, 7406, 0, 0, 0, 9225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13865, 47591, 18220, 53703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 0, 0, 24940, 17223, 0, 0, 0, 13221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15848, 0, 0, 0, 0, 0, 6122, 1735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16968, 18151, 0, 0, 0, 0, 0, 47494, 0, 0, 0, 0, 0, 0, 26089, 19494, 0, 0, 0, 0, 0, 15494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 0, 0, 0, 42727, 0, 55174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35302, 0, 48135, 20972, 33094, 0, 0, 0, 0, 0, 9765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39559, 0, 0, 13736, 6950, 0, 0, 0, 0, 23658, 8903, 0, 0, 0, 0, 0, 0, 0, 22662, 0, 0, 0, 0, 0, 58886, 7468, 0, 0, 0, 0, 0, 0, 0, 0, 64550, 0, 0, 0, 0, 0, 47622, 0, 0, 0, 50886, 0, 0, 0, 0, 0, 57606, 912, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1449, 0, 1169, 0, 718, 46151, 12104, 0, 0, 0, 0, 0, 0, 48230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 33734, 23208, 62567, 0, 65158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28684, 59878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25769, 0, 0, 0, 0, 65479, 0, 0, 0, 0, 555, 22789, 0, 19748, 1769, 10246, 8680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14250, 0, 5899, 3303, 0, 0, 0, 0, 0, 0, 0, 0, 21097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10795, 0, 0, 0, 16204, 0, 0, 0, 0, 0, 26986, 2469, 0, 14660, 0, 0, 0, 0, 0, 45447, 12234, 3494, 4555, 10566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2801, 0, 0, 0, 15755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39654, 0, 0, 0, 0, 0, 0, 6763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33574, 0, 10279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63527, 0, 0, 3912, 0, 0, 7492, 0, 0, 0, 35142, 0, 0, 0, 0, 0, 0, 17576, 8103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16713, 4198, 0, 0, 4782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16228, 0, 0, 0, 0, 25961, 20166, 0, 0, 0, 10980, 0, 0, 0, 0, 0, 14340, 18922, 14567, 0, 44199, 0, 0, 0, 0, 0, 0, 0, 18406, 0, 0, 0, 0, 0, 37606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20902, 0, 0, 0, 56358, 0, 38342, 0, 0, 0, 0, 9514, 36071, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21700, 0, 0, 5266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134, 0, 1453, 0, 0, 0, 0, 0, 3882, 0, 0, 0, 0, 0, 0, 0, 0, 4004, 0, 0, 0, 51910, 0, 0, 0, 0, 0, 23076, 4648, 0, 0, 0, 31051, 25351, 0, 0, 0, 22884, 0, 0, 0, 0, 0, 63975, 0, 0, 2376, 16997, 0, 0, 2096, 0, 0, 0, 3373, 7046, 0, 0, 0, 0, 0, 0, 0, 30726, 0, 0, 0, 0, 20, 0, 13707, 614, 0, 0, 12840, 3079, 0, 0, 0, 0, 0, 51046, 3729, 0, 32680, 0, 0, 0, 0, 0, 24008, 62759, 0, 0, 4745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2414, 0, 0, 44262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24937, 0, 0, 0, 0, 0, 0, 0, 0, 19140, 0, 13575, 0, 0, 0, 0, 0, 0, 0, 39110, 0, 0, 0, 28036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4261, 0, 0, 0, 0, 5992, 0, 264, 0, 0, 0, 0, 0, 0, 0, 13739, 0, 21928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4232, 15110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30022, 0, 0, 27977, 0, 0, 0, 0, 0, 24776, 0, 0, 0, 0, 0, 2962, 0, 0, 0, 0, 0, 0, 26564, 22441, 0, 0, 0, 0, 0, 13640, 11205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19305, 1894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14119, 5224, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25796, 0, 0, 0, 0, 0, 0, 7470, 0, 0, 0, 0, 63815, 0, 55654, 0, 0, 12584, 0, 1524, 33223, 0, 0, 0, 9895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11624, 0, 0, 0, 5614, 0, 0, 0, 0, 0, 0, 0, 21320, 0, 0, 53607, 0, 51206, 0, 0, 0, 25863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8964, 1740, 0, 0, 0, 0, 0, 0, 0, 0, 13476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7975, 0, 0, 3306, 8134, 0, 8389, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21477, 31112, 31652, 0, 0, 0, 0, 0, 0, 0, 28452, 0, 0, 0, 44231, 0, 0, 0, 0, 0, 0, 0, 24805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12428, 6471, 0, 0, 0, 0, 525, 17926, 0, 0, 0, 26919, 0, 0, 18120, 0, 0, 0, 30024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29189, 0, 0, 0, 43559, 0, 0, 0, 0, 0, 0, 19787, 7557, 0, 59334, 0, 0, 10184, 6085, 0, 44039, 0, 0, 0, 0, 0, 0, 0, 11175, 0, 0, 0, 0, 30440, 63110, 0, 0, 0, 0, 0, 0, 11017, 0, 0, 0, 0, 0, 0, 0, 0, 27204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 5226, 2727, 0, 15588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4650, 0, 2675, 0, 0, 32420, 0, 0, 0, 61511, 0, 0, 5419, 17829, 2123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38183, 2640, 0, 11274, 14533, 1842, 0, 0, 42663, 12681, 3430, 0, 11845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6533, 0, 0, 0, 0, 0, 54598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12616, 38535, 0, 0, 0, 0, 0, 32229, 0, 0, 0, 54279, 0, 48614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31401, 0, 0, 0, 0, 34310, 0, 0, 0, 22788, 0, 52134, 0, 0, 0, 0, 0, 0, 0, 23302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40678, 0, 0, 0, 51463, 535, 0, 0, 0, 0, 15525, 0, 0, 0, 0, 0, 0, 4904, 869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63718, 0, 0, 0, 0, 0, 0, 0, 0, 1678, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26216, 0, 0, 0, 0, 0, 29355, 0, 0, 0, 0, 25095, 0, 0, 0, 0, 4335, 0, 0, 0, 0, 0, 14538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27273, 55014, 0, 0, 0, 0, 0, 27271, 0, 0, 0, 0, 0, 30468, 0, 0, 0, 0, 18186, 0, 0, 0, 0, 0, 14345, 0, 0, 0, 2152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58438, 21034, 0, 23339, 21318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21412, 0, 0, 0, 0, 0, 0, 0, 12869, 0, 0, 4875, 0, 0, 0, 0, 29191, 0, 0, 0, 0, 0, 0, 1640, 10247, 0, 14244, 0, 0, 0, 0, 9867, 0, 0, 0, 0, 0, 12363, 0, 0, 7653, 0, 0, 4168, 2663, 0, 4580, 0, 11143, 0, 0, 0, 0, 0, 0, 0, 30662, 0, 0, 0, 0, 0, 6724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 6821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29958, 0, 3461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28324, 18795, 7013, 12746, 11655, 0, 37287, 0, 0, 10953, 7718, 9705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8137, 17988, 0, 25156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15784, 6918, 0, 0, 0, 0, 7019, 10919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4171, 55495, 4940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22440, 19333, 0, 0, 28136, 0, 6249, 21317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53414, 0, 0, 0, 57318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39303, 0, 0, 0, 0, 0, 19940, 0, 0, 0, 0, 0, 0, 0, 25543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2698, 3911, 0, 0, 0, 26790, 0, 0, 0, 0, 0, 0, 32424, 0, 0, 18470, 0, 0, 0, 14726, 29834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 4197, 0, 0, 0, 19366, 0, 0, 0, 39878, 0, 0, 0, 0, 2185, 8901, 5288, 9829, 25000, 0, 0, 0, 0, 0, 0, 1062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35622, 0, 0, 23048, 62503, 6506, 0, 0, 0, 0, 0, 0, 0, 13609, 10438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7723, 42119, 0, 0, 0, 0, 0, 13317, 0, 0, 0, 41606, 0, 27111, 0, 0, 21194, 11461, 0, 0, 0, 0, 26856, 58342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20940, 48710, 0, 0, 0, 0, 0, 0, 5227, 0, 0, 0, 0, 0, 10061, 31300, 0, 0, 0, 19236, 0, 0, 0, 0, 0, 30277, 13896, 0, 0, 0, 12876, 13159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 46951, 13134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2249, 0, 0, 0, 0, 44967, 0, 0, 0, 0, 0, 0, 3465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24868, 0, 0, 0, 0, 0, 23909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16164, 0, 10437, 0, 0, 5263, 20102, 20938, 0, 0, 0, 1192, 1030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21385, 4870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18596, 0, 0, 0, 0, 1422, 4038, 2858, 0, 0, 0, 0, 0, 0, 0, 0, 48998, 0, 0, 0, 0, 0, 0, 0, 0, 6508, 37350, 0, 0, 0, 0, 0, 0, 0, 0, 17001, 39431, 0, 0, 0, 0, 0, 30182, 0, 21445, 7403, 28164, 0, 51750, 0, 0, 0, 62631, 0, 0, 0, 0, 0, 0, 0, 31206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13477, 0, 0, 456, 26693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14890, 0, 0, 0, 0, 0, 26697, 22022, 13225, 27364, 0, 0, 0, 18884, 0, 0, 0, 0, 0, 0, 0, 0, 3659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1448, 5413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6340, 0, 0, 18091, 18725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22118, 0, 0, 0, 18981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29223, 3724, 0, 0, 0, 0, 43526, 0, 0, 0, 25668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21545, 9862, 0, 22692, 32201, 60646, 0, 7300, 0, 0, 0, 58887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50342, 0, 65255, 4360, 17286, 0, 0, 0, 0, 0, 0, 0, 28708, 0, 0, 30025, 60102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47014, 0, 31973, 0, 9572, 0, 0, 0, 0, 0, 0, 0, 18501, 0, 0, 0, 0, 0, 14597, 0, 0, 0, 53735, 5228, 22183, 0, 0, 0, 0, 0, 0, 1554, 24164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10827, 0, 0, 0, 0, 34918, 0, 0, 0, 0, 22252, 0, 0, 46855, 0, 0, 0, 0, 0, 31207, 0, 0, 10733, 0, 0, 63334, 0, 0, 0, 0, 8616, 50119, 20169, 12678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58087, 20298, 5, 0, 0, 30920, 0, 0, 0, 0, 0, 0, 0, 296, 13190, 0, 30663, 0, 0, 18536, 12228, 0, 6788, 0, 0, 0, 0, 30890, 21796, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20965, 0, 0, 0, 0, 2161, 0, 0, 0, 0, 0, 0, 24038, 0, 0, 0, 0, 13544, 7398, 0, 0, 32522, 9605, 0, 0, 0, 0, 3208, 7590, 0, 0, 0, 43846, 0, 0, 0, 38663, 0, 0, 0, 0, 0, 39014, 4142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6373, 0, 0, 13676, 0, 0, 0, 0, 30374, 21288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22791, 0, 0, 0, 0, 0, 37958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9452, 9990, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4841, 0, 0, 0, 0, 18820, 152, 0, 0, 0, 0, 0, 13260, 3334, 0, 0, 24234, 8422, 0, 17957, 0, 0, 0, 10244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7204, 0, 0, 0, 0, 1201, 26151, 0, 31173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64838, 4203, 7525, 521, 0, 18888, 37031, 0, 0, 0, 0, 0, 0, 0, 0, 7082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4490, 12487, 0, 0, 0, 0, 0, 0, 0, 36615, 0, 0, 0, 14854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6539, 13029, 9704, 38983, 0, 0, 0, 0, 168, 10405, 0, 0, 0, 0, 394, 25607, 0, 57063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16141, 19878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29446, 0, 12036, 0, 0, 0, 0, 0, 6982, 18572, 0, 24584, 14535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 21642, 0, 0, 0, 0, 0, 0, 5254, 0, 0, 0, 0, 0, 0, 0, 0, 1622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3853, 9126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7241, 10982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, 57990, 0, 0, 277, 0, 0, 0, 694, 36007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42470, 0, 0, 0, 0, 18409, 51142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28646, 0, 0, 0, 30693, 0, 0, 0, 0, 0, 56295, 5544, 0, 0, 0, 0, 8518, 8366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45670, 0, 0, 9608, 33062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18694, 0, 0, 0, 0, 1672, 23493, 0, 0, 6955, 7655, 0, 36134, 0, 0, 0, 0, 0, 0, 0, 0, 23432, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13382, 0, 0, 0, 19621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20228, 0, 0, 2728, 31495, 0, 0, 0, 0, 29096, 22213, 235, 35495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5348, 0, 0, 0, 0, 8968, 1989, 0, 0, 1066, 0, 0, 11492, 5965, 31367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18727, 0, 0, 0, 6757, 0, 0, 10765, 4646, 0, 36166, 0, 27943, 0, 0, 26888, 8420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4975, 0, 0, 0, 14762, 3111, 0, 0, 0, 0, 0, 43399, 0, 0, 0, 0, 0, 0, 0, 18980, 0, 0, 0, 0, 0, 44550, 0, 0, 0, 0, 4051, 0, 0, 0, 0, 37734, 0, 0, 0, 0, 0, 5188, 0, 0, 0, 0, 0, 24486, 0, 5989, 0, 41159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20326, 0, 0, 747, 6884, 0, 0, 0, 41798, 0, 0, 3117, 22919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21032, 0, 0, 0, 0, 0, 0, 0, 0, 9574, 0, 0, 0, 0, 0, 0, 4302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21068, 34630, 0, 0, 0, 0, 0, 64071, 0, 0, 0, 0, 0, 0, 26667, 7943, 0, 0, 0, 0, 0, 52934, 0, 0, 17002, 0, 0, 0, 0, 0, 0, 20294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27301, 18347, 7974, 0, 0, 0, 0, 0, 0, 0, 0, 16874, 0, 0, 0, 0, 45414, 0, 0, 0, 0, 0, 0, 648, 1575, 0, 0, 0, 31749, 0, 0, 0, 23301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15912, 50535, 0, 0, 0, 0, 1993, 8582, 0, 0, 0, 0, 0, 0, 0, 38438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15850, 6183, 0, 0, 0, 0, 3402, 0, 0, 27494, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 26025, 29606, 0, 0, 7144, 19622, 30504, 0, 0, 0, 0, 0, 0, 0, 0, 21316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21444, 0, 0, 1289, 6919, 0, 0, 0, 0, 0, 0, 8299, 0, 0, 0, 14090, 35655, 0, 0, 0, 0, 0, 0, 0, 0, 2377, 15206, 0, 0, 6028, 4452, 0, 25508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50310, 0, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51014, 0, 0, 0, 0, 0, 0, 0, 9286, 0, 7429, 0, 0, 28393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16680, 452, 0, 0, 0, 0, 0, 23718, 0, 0, 0, 31750, 0, 0, 0, 0, 0, 0, 0, 0, 3568, 0, 0, 13604, 0, 0, 0, 0, 0, 25255, 0, 0, 0, 50982, 0, 56582, 0, 0, 7467, 0, 0, 0, 0, 30181, 0, 0, 0, 0, 0, 0, 0, 30564, 7208, 7845, 0, 0, 0, 0, 0, 0, 7726, 0, 0, 0, 0, 62182, 0, 0, 0, 41094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22695, 0, 0, 0, 0, 0, 0, 17736, 0, 0, 0, 0, 0, 0, 0, 0, 50054, 0, 0, 0, 14180, 0, 0, 0, 0, 0, 0, 8974, 0, 0, 0, 0, 0, 0, 0, 0, 23332, 0, 0, 0, 11140, 0, 0, 0, 0, 0, 0, 0, 24262, 27145, 9540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26537, 45510, 6062, 3879, 0, 0, 20233, 25991, 0, 0, 17803, 0, 0, 0, 0, 0, 13962, 5508, 16971, 27013, 7437, 31494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4714, 0, 0, 0, 0, 0, 0, 0, 0, 17189, 0, 0, 0, 0, 0, 27492, 0, 0, 26953, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47430, 19596, 12549, 0, 0, 0, 8390, 1006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24100, 17577, 4, 0, 0, 0, 0, 0, 22277, 0, 0, 0, 0, 0, 0, 0, 26692, 0, 0, 0, 0, 0, 24676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29477, 0, 0, 0, 21573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9864, 14214, 0, 0, 0, 0, 0, 0, 25771, 5766, 0, 0, 8909, 8679, 0, 0, 6861, 16166, 0, 38887, 0, 0, 0, 0, 0, 0, 12392, 8678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52646, 1354, 2950, 0, 14692, 0, 0, 10572, 49830, 0, 0, 0, 0, 0, 0, 0, 0, 3626, 582, 0, 0, 0, 55750, 0, 0, 0, 30885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5830, 0, 0, 2090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31142, 0, 0, 0, 0, 0, 10503, 0, 0, 18825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57158, 0, 0, 30792, 63526, 0, 0, 0, 9863, 16267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18824, 0, 0, 0, 0, 0, 0, 19653, 25388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25480, 23015, 0, 0, 10440, 6725, 0, 0, 0, 22436, 24265, 15109, 0, 0, 0, 62311, 8906, 34534, 0, 0, 0, 0, 0, 0, 15913, 1319, 0, 0, 20296, 1477, 30760, 0, 25928, 16772, 0, 0, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17029, 0, 31909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41542, 0, 21478, 0, 0, 0, 9796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22187, 58343, 0, 0, 0, 24295, 0, 0, 0, 0, 0, 61831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2833, 5829, 0, 0, 0, 62855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16676, 0, 0, 0, 0, 0, 0, 13577, 27431, 0, 0, 0, 0, 21480, 10501, 0, 16932, 0, 0, 0, 0, 0, 22918, 0, 48294, 2574, 2150, 0, 0, 0, 0, 1897, 4518, 0, 0, 0, 0, 0, 0, 25064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47942, 0, 0, 0, 0, 10990, 13767, 25705, 37863, 21672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43430, 1712, 0, 0, 0, 0, 18886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10535, 0, 0, 0, 0, 0, 0, 0, 15012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14734, 0, 0, 55782, 0, 0, 30824, 10886, 0, 0, 0, 0, 0, 51302, 0, 0, 8012, 0, 0, 0, 0, 0, 20680, 6981, 0, 57415, 11, 0, 0, 18277, 0, 14564, 0, 0, 0, 32390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19113, 5158, 0, 11172, 0, 16774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10315, 13830, 0, 0, 0, 0, 0, 0, 10410, 7141, 0, 0, 0, 0, 0, 18116, 0, 0, 0, 44615, 15403, 13958, 0, 1540, 14632, 19525, 24201, 19781, 0, 0, 0, 24165, 0, 38951, 0, 0, 0, 0, 0, 6308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17416, 15749, 3438, 13255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32228, 0, 0, 0, 0, 176, 0, 0, 50566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5284, 0, 0, 0, 0, 0, 0, 25897, 28326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15945, 0, 0, 0, 9804, 293, 0, 0, 0, 0, 0, 0, 0, 13988, 23082, 4677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5670, 0, 0, 0, 0, 0, 0, 0, 44070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6405, 0, 30692, 0, 0, 0, 61702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45926, 0, 15398, 0, 0, 0, 0, 0, 0, 4554, 2692, 0, 0, 0, 0, 0, 32485, 0, 0, 0, 10084, 0, 0, 0, 0, 0, 0, 24297, 0, 0, 0, 0, 0, 0, 0, 0, 22790, 0, 0, 0, 55110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7112, 0, 31530, 45255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40743, 17226, 22599, 0, 0, 0, 0, 0, 0, 0, 0, 3695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56999, 0, 0, 0, 0, 0, 13799, 3114, 21287, 1353, 7591, 0, 0, 0, 8455, 0, 0, 6824, 0, 0, 0, 0, 0, 0, 0, 14569, 0, 0, 0, 29000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19979, 0, 18376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11332, 0, 0, 0, 49863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2191, 7527, 23148, 58022, 0, 0, 0, 30631, 0, 26565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 15877, 0, 0, 0, 0, 0, 0, 0, 17510, 7657, 2821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41927, 0, 0, 0, 0, 0, 0, 0, 0, 2569, 34439, 0, 0, 3790, 0, 0, 0, 15339, 8775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15908, 0, 0, 21419, 8359, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 25318, 8008, 20551, 0, 0, 0, 45735, 30058, 30372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31432, 10567, 0, 0, 0, 0, 17450, 0, 0, 0, 0, 0, 0, 30310, 0, 38022, 0, 0, 0, 0, 0, 28932, 0, 0, 0, 0, 0, 43910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22180, 12075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22247, 0, 0, 22826, 12359, 0, 0, 0, 0, 4105, 50407, 0, 0, 0, 0, 0, 0, 13581, 28583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28936, 0, 0, 0, 0, 0, 17673, 10310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 905, 57862, 1580, 0, 0, 0, 0, 58630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13479, 0, 0, 14153, 13286, 0, 0, 9259, 0, 0, 0, 0, 0, 6606, 3524, 0, 0, 0, 0, 0, 6567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 49255, 0, 0, 0, 0, 0, 42886, 0, 38215, 0, 0, 0, 0, 0, 0, 0, 0, 17580, 0, 0, 0, 0, 0, 0, 0, 0, 55046, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10213, 0, 0, 0, 0, 3604, 37767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28715, 4229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 26820, 0, 0, 0, 12133, 6984, 261, 21130, 32548, 0, 0, 0, 0, 0, 0, 3565, 12390, 20713, 28071, 0, 0, 1706, 25287, 0, 0, 0, 0, 0, 0, 0, 0, 14670, 0, 0, 0, 0, 0, 0, 30534, 0, 0, 0, 12615, 0, 43750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28228, 0, 0, 0, 0, 0, 0, 0, 45095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1224, 3975, 10954, 6375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23180, 20100, 0, 0, 0, 0, 25736, 8519, 0, 0, 0, 0, 0, 6663, 0, 2534, 0, 0, 0, 0, 0, 0, 0, 0, 23720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19398, 0, 47814, 26281, 49702, 0, 0, 4332, 12965, 0, 0, 5704, 3206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15396, 0, 0, 0, 44102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25317, 1064, 39271, 27433, 0, 14952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14308, 0, 0, 0, 0, 0, 0, 2763, 4100, 0, 0, 0, 0, 0, 0, 18792, 0, 0, 0, 22154, 32583, 0, 6244, 0, 0, 0, 0, 0, 0, 0, 49478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21894, 0, 0, 11048, 0, 0, 0, 0, 0, 0, 11685, 0, 53862, 0, 0, 15114, 0, 13870, 0, 0, 0, 0, 0, 0, 0, 919, 0, 0, 0, 31916, 0, 22570, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7333, 0, 0, 0, 0, 3272, 0, 0, 0, 0, 27718, 32712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1782, 0, 3688, 0, 0, 0, 0, 29862, 0, 0, 0, 0, 0, 0, 0, 22469, 0, 0, 0, 0, 0, 0, 0, 55302, 850, 15492, 0, 0, 0, 5927, 19786, 13350, 0, 25702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15335, 8394, 0, 0, 0, 0, 0, 0, 26566, 0, 0, 0, 0, 843, 2245, 0, 0, 0, 0, 0, 0, 0, 0, 6959, 0, 20488, 1638, 0, 0, 11533, 50759, 0, 0, 0, 0, 0, 20871, 0, 0, 0, 0, 0, 24519, 0, 0, 0, 0, 9544, 23591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20969, 7109, 29001, 0, 0, 32422, 31720, 64294, 0, 0, 0, 0, 16106, 0, 0, 0, 6930, 4933, 0, 0, 0, 22917, 0, 27015, 0, 0, 0, 0, 19880, 8070, 0, 0, 0, 0, 23945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3310, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18439, 0, 0, 0, 20742, 0, 0, 0, 10597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20236, 0, 0, 0, 16584, 3429, 0, 0, 0, 0, 0, 0, 0, 0, 27241, 0, 0, 0, 0, 16132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 28261, 0, 0, 0, 0, 0, 0, 0, 29509, 0, 0, 0, 0, 0, 0, 0, 0, 2921, 31781, 0, 0, 0, 0, 0, 0, 6408, 4196, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11689, 45863, 0, 0, 0, 0, 906, 3301, 0, 0, 25544, 32421, 0, 0, 0, 0, 0, 0, 0, 0, 1260, 61607, 0, 27302, 0, 0, 8682, 16614, 0, 0, 0, 0, 10830, 0, 0, 9604, 15049, 13413, 0, 0, 0, 0, 0, 0, 26761, 0, 0, 0, 0, 0, 0, 61990, 0, 0, 0, 0, 0, 12580, 0, 0, 11432, 0, 0, 0, 0, 0, 22507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 2408, 22661, 14507, 43239, 0, 9700, 0, 0, 24714, 0, 0, 0, 0, 0, 0, 0, 0, 23972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34086, 0, 0, 22955, 7238, 0, 0, 0, 0, 0, 28485, 13806, 20038, 0, 0, 0, 0, 22602, 0, 0, 0, 1645, 22340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26502, 0, 0, 554, 0, 0, 0, 0, 61735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, 27879, 15948, 0, 3242, 57382, 0, 0, 0, 0, 0, 0, 13930, 0, 0, 0, 0, 0, 30922, 0, 4137, 52615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31911, 16072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26340, 0, 61671, 0, 0, 0, 0, 3145, 56199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 5131, 33479, 0, 15751, 0, 0, 0, 0, 0, 0, 4136, 1446, 0, 0, 0, 0, 0, 0, 11304, 17863, 0, 0, 0, 0, 0, 25125, 0, 0, 0, 36646, 6057, 0, 0, 0, 855, 11301, 0, 0, 0, 0, 0, 64774, 0, 0, 0, 19397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1040, 27367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64358, 0, 0, 178, 132, 0, 0, 14763, 24455, 0, 0, 0, 46374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46246, 0, 0, 0, 37382, 0, 0, 0, 7462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8166, 0, 0, 6921, 0, 0, 0, 9163, 0, 0, 0, 119, 0, 0, 0, 23146, 17156, 0, 0, 0, 0, 0, 9127, 0, 0, 0, 17927, 0, 0, 0, 0, 0, 22084, 0, 0, 0, 0, 0, 39879, 0, 0, 2035, 0, 1067, 0, 0, 0, 0, 0, 16652, 59591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20171, 0, 0, 0, 0, 17733, 0, 0, 0, 0, 0, 32037, 0, 0, 0, 0, 0, 14277, 0, 0, 0, 0, 0, 0, 0, 42022, 0, 0, 26793, 20358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8907, 0, 0, 0, 0, 0, 0, 0, 0, 27780, 0, 0, 0, 0, 32330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39399, 0, 9732, 0, 16199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 854, 0, 2984, 45063, 25418, 26980, 22539, 0, 9133, 3653, 15528, 28743, 4649, 0, 616, 65127, 0, 0, 0, 61863, 0, 0, 0, 0, 0, 0, 0, 55303, 0, 0, 0, 0, 0, 0, 0, 0, 23880, 0, 0, 0, 0, 0, 0, 0, 31848, 62854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49606, 0, 27974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32580, 0, 0, 0, 26052, 4043, 0, 0, 40454, 0, 0, 26056, 30565, 0, 0, 0, 0, 0, 0, 0, 31398, 0, 0, 0, 0, 0, 0, 0, 0, 29288, 1797, 0, 0, 3220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20427, 0, 0, 0, 0, 23621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35591, 0, 0, 6862, 0, 0, 0, 4265, 0, 6285, 5383, 0, 0, 0, 0, 0, 36870, 0, 39847, 0, 0, 17224, 5414, 27882, 58118, 0, 0, 13224, 4262, 0, 0, 0, 31302, 0, 0, 1388, 2982, 11881, 0, 0, 0, 0, 0, 0, 16837, 809, 0, 24140, 10724, 0, 0, 0, 0, 5835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1256, 19237, 0, 0, 0, 0, 0, 0, 0, 5796, 11848, 0, 0, 52870, 11464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5645, 9158, 0, 25223, 0, 0, 0, 0, 0, 39142, 24968, 8135, 32104, 28678, 0, 0, 0, 46311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23820, 0, 0, 0, 0, 0, 4050, 0, 1323, 25220, 0, 0, 0, 20133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13444, 1198, 60806, 0, 0, 0, 0, 17356, 50247, 30632, 0, 0, 0, 0, 0, 0, 0, 11944, 999, 0, 0, 0, 0, 4010, 10404, 0, 0, 0, 0, 0, 0, 10346, 0, 0, 49510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38919, 0, 0, 0, 0, 0, 0, 6351, 60966, 20137, 487, 0, 0, 0, 0, 0, 0, 655, 2406, 17387, 43303, 0, 0, 0, 17063, 0, 0, 213, 0, 0, 0, 0, 0, 0, 17221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10820, 0, 0, 0, 0, 369, 6, 0, 0, 9098, 21093, 0, 31653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27143, 0, 0, 16234, 0, 0, 0, 0, 0, 0, 0, 0, 6020, 31723, 28293, 0, 0, 0, 0, 1936, 30695, 0, 0, 0, 0, 0, 52902, 0, 0, 29512, 10791, 0, 20420, 0, 0, 16010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24328, 0, 0, 0, 0, 0, 0, 40870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24648, 0, 0, 0, 0, 0, 0, 0, 7786, 2852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44678, 0, 17925, 0, 0, 105, 53062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18762, 0, 0, 40679, 0, 0, 0, 16165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62310, 1322, 14247, 0, 0, 0, 0, 0, 0, 0, 0, 1832, 6052, 0, 0, 11882, 0, 0, 0, 0, 17668, 0, 28262, 0, 29542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28007, 0, 0, 0, 57223, 1585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21162, 0, 0, 62247, 0, 0, 0, 0, 0, 25414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36326, 0, 0, 0, 23845, 0, 0, 0, 0, 0, 0, 0, 2693, 0, 0, 0, 0, 0, 0, 0, 13125, 0, 31236, 0, 0, 0, 0, 0, 22502, 0, 0, 0, 0, 0, 0, 5994, 10309, 0, 0, 0, 7269, 0, 0, 0, 0, 17929, 0, 1011, 44647, 0, 0, 0, 0, 0, 14919, 0, 0, 0, 0, 20586, 5350, 0, 0, 0, 45702, 0, 13189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35782, 17992, 0, 0, 0, 0, 0, 8203, 0, 0, 0, 0, 0, 0, 56678, 0, 0, 0, 0, 0, 38087, 4233, 0, 2127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10148, 0, 0, 0, 2021, 0, 0, 0, 0, 0, 0, 0, 47206, 0, 0, 0, 0, 0, 0, 0, 9220, 0, 0, 0, 0, 19465, 0, 0, 0, 0, 0, 0, 0, 0, 39206, 0, 38055, 0, 0, 0, 0, 0, 0, 0, 46982, 0, 0, 0, 0, 0, 22054, 3850, 0, 0, 0, 0, 0, 0, 0, 55, 0, 10542, 0, 0, 0, 0, 7239, 0, 0, 0, 0, 0, 59367, 0, 0, 14761, 0, 0, 0, 0, 43079, 0, 0, 0, 0, 0, 2726, 0, 0, 9582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37478, 0, 0, 0, 31364, 0, 0, 0, 0, 0, 0, 0, 0, 20393, 8933, 0, 0, 0, 0, 0, 9380, 0, 0, 0, 0, 16905, 549, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1558, 0, 0, 0, 0, 0, 0, 0, 19242, 0, 0, 0, 0, 0, 0, 24933, 0, 6276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42310, 23595, 24068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13191, 6158, 2567, 0, 0, 268, 47047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27940, 0, 0, 0, 0, 0, 26726, 0, 0, 0, 0, 8200, 1222, 31562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2922, 8231, 8904, 29157, 0, 0, 0, 0, 0, 0, 0, 0, 23976, 4836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31658, 0, 0, 31685, 0, 0, 2889, 6213, 0, 0, 0, 0, 0, 13605, 0, 0, 0, 0, 0, 24772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20684, 26468, 24075, 0, 0, 0, 21193, 0, 715, 679, 0, 0, 0, 0, 0, 0, 3050, 7654, 0, 0, 0, 13798, 0, 0, 0, 0, 15, 27973, 0, 0, 8491, 2086, 0, 0, 0, 43206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60391, 0, 0, 0, 0, 0, 0, 0, 25892, 0, 22276, 0, 34374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20165, 0, 0, 25672, 0, 0, 0, 1811, 24839, 0, 31044, 0, 0, 25513, 0, 0, 0, 0, 0, 12810, 0, 0, 62438, 0, 0, 1325, 0, 364, 3782, 0, 0, 0, 0, 0, 0, 0, 0, 8042, 19687, 0, 0, 0, 33415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11844, 0, 0, 0, 0, 3341, 1543, 6698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41158, 0, 24294, 0, 3844, 12329, 0, 0, 0, 13738, 0, 0, 0, 0, 0, 0, 0, 0, 26245, 0, 0, 0, 0, 0, 0, 6378, 0, 343, 4838, 0, 0, 0, 24358, 11688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1489, 34759, 0, 0, 0, 0, 363, 51974, 1878, 11013, 0, 0, 32265, 59782, 0, 0, 0, 28421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29257, 61222, 0, 30661, 0, 28327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27108, 8843, 0, 9673, 2084, 0, 0, 0, 16327, 0, 48455, 0, 0, 0, 0, 0, 0, 4876, 9316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9035, 18852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4164, 0, 0, 14827, 1349, 0, 0, 0, 0, 0, 11909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21765, 0, 0, 0, 0, 0, 0, 0, 0, 31272, 63910, 0, 0, 0, 25924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44487, 0, 0, 0, 20612, 0, 0, 27754, 31428, 0, 0, 0, 0, 0, 0, 0, 17287, 0, 3943, 0, 0, 0, 63302, 0, 0, 0, 0, 25256, 19942, 0, 55142, 0, 39046, 0, 0, 0, 0, 0, 0, 0, 15367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9576, 63847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25226, 5734, 0, 0, 0, 0, 0, 0, 13801, 4997, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43942, 1270, 2566, 6284, 0, 0, 16230, 0, 0, 0, 20678, 0, 0, 0, 0, 0, 38855, 0, 0, 0, 0, 29643, 0, 0, 0, 41, 3655, 0, 0, 0, 0, 0, 14276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15686, 0, 0, 0, 15718, 0, 50694, 0, 0, 16232, 8007, 0, 0, 0, 5060, 329, 11591, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13065, 7302, 27530, 15366, 0, 24934, 0, 0, 0, 17828, 0, 0, 4552, 6311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47686, 368, 12103, 10122, 33830, 0, 0, 599, 18534, 9579, 49479, 0, 5668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13157, 0, 0, 0, 0, 23274, 14055, 0, 0, 0, 0, 0, 48903, 0, 0, 0, 0, 0, 0, 1871, 0, 15434, 0, 0, 0, 16174, 62470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7749, 0, 0, 0, 0, 0, 0, 0, 30501, 0, 0, 0, 0, 25675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9285, 0, 0, 25323, 1669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3588, 0, 0, 0, 0, 0, 32902, 0, 0, 4426, 0, 0, 0, 0, 57959, 0, 0, 0, 0, 0, 0, 29898, 58278, 0, 0, 0, 0, 11880, 1220, 0, 0, 0, 41479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42566, 0, 0, 0, 0, 0, 0, 0, 40167, 9484, 3493, 0, 0, 0, 0, 0, 21126, 0, 0, 0, 0, 8649, 18918, 0, 0, 0, 0, 0, 0, 0, 34886, 2601, 0, 0, 0, 0, 12518, 0, 0, 0, 0, 7976, 10311, 0, 0, 0, 0, 0, 0, 0, 45190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16842, 20229, 0, 0, 0, 0, 0, 0, 7528, 4614, 0, 0, 0, 0, 0, 30086, 0, 0, 0, 1671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9896, 6277, 0, 0, 0, 0, 0, 61191, 0, 41287, 0, 21956, 0, 0, 20010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13195, 0, 0, 0, 0, 1381, 0, 0, 0, 0, 365, 30951, 24268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27944, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28487, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 56775, 12586, 8421, 0, 0, 0, 0, 0, 0, 26185, 14599, 0, 0, 8040, 5702, 12585, 3109, 0, 0, 0, 0, 0, 21574, 5388, 0, 0, 0, 0, 0, 0, 0, 5106, 52454, 0, 0, 0, 0, 0, 0, 0, 0, 1907, 29895, 0, 6116, 0, 0, 0, 0, 11081, 5285, 0, 28069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4104, 0, 0, 0, 0, 0, 0, 41511, 0, 0, 0, 0, 0, 0, 5262, 0, 0, 0, 503, 4231, 7720, 34343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7304, 10374, 1718, 0, 0, 29127, 0, 0, 0, 0, 0, 0, 0, 0, 23497, 22567, 6952, 2340, 0, 0, 0, 0, 0, 0, 0, 0, 20360, 12453, 0, 45094, 0, 0, 0, 0, 0, 28582, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23084, 0, 0, 0, 30696, 0, 0, 0, 0, 45862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5580, 6053, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 70, 0, 0, 26091, 11335, 0, 0, 0, 0, 13612, 0, 13160, 1926, 435, 51559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47302, 19083, 0, 0, 12742, 0, 1607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6155, 37095, 0, 0, 0, 0, 0, 18948, 7146, 0, 0, 0, 0, 0, 0, 0, 7848, 2055, 0, 0, 0, 0, 8910, 0, 19336, 0, 0, 48070, 8490, 0, 0, 0, 0, 0, 0, 0, 9932, 56423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43398, 0, 0, 0, 0, 0, 0, 0, 0, 16173, 0, 0, 0, 0, 0, 0, 0, 32011, 0, 0, 30918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18889, 0, 0, 0, 0, 8965, 0, 0, 0, 44358, 0, 0, 0, 8997, 0, 34055, 0, 0, 0, 0, 0, 29350, 0, 0, 501, 17767, 0, 0, 32457, 60262, 0, 0, 0, 30886, 0, 0, 3757, 1063, 0, 0, 0, 25637, 0, 0, 0, 0, 0, 28068, 0, 26374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11684, 0, 0, 0, 0, 0, 0, 24779, 229, 0, 13766, 0, 0, 7402, 11525, 0, 0, 0, 0, 0, 0, 0, 0, 26313, 23686, 0, 0, 29736, 47527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27268, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 32038, 0, 0, 0, 0, 1135, 26596, 0, 0, 12300, 14631, 0, 0, 0, 43238, 0, 871, 0, 0, 31496, 0, 8457, 17669, 0, 12836, 0, 0, 0, 22726, 0, 38758, 0, 0, 375, 6564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 18535, 0, 22948, 0, 0, 32360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15652, 0, 0, 0, 32774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15145, 0, 0, 0, 21100, 27654, 0, 0, 0, 0, 0, 0, 4874, 26215, 0, 1639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4169, 0, 0, 0, 0, 0, 7336, 0, 0, 0, 0, 21572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24644, 1675, 2533, 0, 0, 0, 53318, 0, 13094, 0, 0, 0, 0, 0, 0, 0, 6246, 0, 22020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28453, 5576, 5124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27910, 0, 29382, 18216, 8583, 0, 0, 0, 39174, 0, 43558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11973, 0, 0, 0, 0, 0, 23397, 0, 0, 0, 0, 6091, 0, 0, 0, 0, 0, 0, 0, 6474, 16197, 14217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26728, 0, 567, 48839, 0, 0, 0, 0, 0, 15271, 0, 0, 31818, 43974, 2450, 0, 0, 0, 0, 0, 0, 0, 11368, 9191, 0, 44454, 0, 0, 0, 0, 0, 0, 14568, 12293, 0, 0, 0, 8453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 902, 0, 0, 0, 27236, 5612, 11495, 0, 0, 0, 0, 0, 0, 0, 0, 9194, 23684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26217, 44870, 0, 0, 0, 0, 0, 0, 5581, 7173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20968, 18340, 0, 0, 0, 0, 0, 0, 0, 0, 4107, 11239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21990, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48806, 0, 0, 0, 32292, 0, 0, 0, 0, 0, 0, 0, 10884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27562, 0, 5643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3089, 31525, 0, 19684, 0, 0, 0, 0, 0, 0, 0, 61415, 0, 0, 0, 0, 0, 36198, 0, 0, 0, 0, 0, 0, 0, 7908, 0, 0, 0, 0, 872, 743, 0, 0, 0, 0, 0, 0, 0, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32484, 0, 0, 0, 0, 0, 34822, 0, 0, 0, 0, 0, 50726, 0, 0, 0, 0, 7274, 0, 0, 0, 15304, 11526, 0, 0, 0, 3047, 0, 0, 0, 0, 0, 0, 22376, 0, 0, 0, 846, 0, 0, 0, 0, 35815, 0, 0, 0, 23652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23721, 2148, 0, 0, 0, 0, 0, 0, 14856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1358, 0, 3082, 0, 0, 0, 848, 10949, 0, 0, 0, 0, 0, 0, 6504, 0, 0, 14372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8201, 9958, 0, 0, 0, 0, 0, 0, 24266, 0, 0, 0, 0, 0, 0, 0, 0, 26469, 0, 0, 0, 0, 18604, 2053, 0, 33511, 0, 0, 0, 0, 0, 9222, 0, 0, 0, 0, 0, 44006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41895, 0, 0, 0, 0, 0, 0, 0, 0, 12044, 390, 0, 0, 0, 0, 0, 4935, 0, 48646, 0, 56102, 3052, 16070, 0, 0, 0, 0, 0, 0, 0, 8612, 9320, 38311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 42918, 0, 32550, 0, 0, 0, 0, 0, 0, 0, 0, 27434, 57926, 17064, 0, 0, 46502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26760, 6756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 5000, 0, 0, 0, 0, 32293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26246, 0, 0, 0, 0, 0, 0, 0, 0, 23, 7301, 0, 0, 0, 36199, 0, 40838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27178, 57350, 0, 0, 12457, 9317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16810, 0, 0, 0, 14510, 0, 0, 0, 0, 21319, 0, 0, 0, 13508, 17, 11365, 0, 0, 0, 0, 5291, 0, 8329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27685, 0, 0, 0, 0, 0, 0, 0, 52006, 0, 0, 0, 7493, 0, 44263, 0, 0, 0, 0, 0, 0, 0, 0, 9800, 0, 0, 0, 25676, 61478, 0, 0, 0, 0, 0, 0, 5773, 0, 0, 0, 0, 41991, 26057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22629, 0, 0, 0, 47783, 362, 1959, 23468, 0, 0, 0, 10921, 0, 0, 0, 3150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32456, 0, 0, 0, 0, 0, 0, 0, 4559, 3270, 0, 0, 983, 0, 0, 26343, 0, 33446, 0, 0, 0, 61767, 0, 48390, 0, 0, 0, 0, 0, 0, 0, 2790, 0, 39782, 7849, 0, 0, 0, 0, 0, 0, 0, 1544, 2183, 0, 0, 0, 0, 0, 0, 0, 0, 4040, 2471, 20009, 30020, 0, 0, 11242, 0, 0, 0, 5578, 53382, 0, 22631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 9030, 0, 0, 0, 0, 0, 0, 265, 1412, 0, 0, 11626, 3687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17449, 24359, 0, 0, 26729, 40134, 0, 0, 0, 0, 29768, 61958, 0, 0, 0, 0, 0, 0, 0, 0, 20908, 0, 0, 0, 0, 0, 11016, 0, 0, 47462, 21547, 5926, 0, 0, 14728, 2983, 24104, 15301, 0, 0, 0, 0, 0, 32645, 0, 0, 0, 0, 0, 0, 0, 3300, 0, 0, 0, 15972, 0, 0, 0, 0, 0, 0, 6634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3076, 0, 30983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 12775, 0, 0, 0, 0, 7177, 18022, 0, 0, 0, 0, 0, 22534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27560, 0, 0, 0, 0, 30278, 10668, 23877, 0, 0, 0, 0, 0, 0, 0, 29124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48454, 0, 0, 0, 0, 6442, 0, 16330, 22951, 0, 0, 16904, 0, 0, 0, 0, 644, 0, 0, 0, 40038, 0, 0, 0, 37222, 0, 0, 0, 9830, 0, 0, 0, 0, 0, 34919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13733, 0, 0, 0, 28196, 0, 0, 0, 0, 0, 19876, 0, 0, 0, 0, 0, 0, 0, 23558, 0, 11142, 0, 27781, 0, 0, 0, 0, 13864, 0, 0, 0, 24682, 47847, 0, 0, 0, 0, 6890, 0, 0, 0, 0, 0, 3981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1772, 0, 0, 0, 0, 0, 0, 0, 3603, 1991, 0, 27396, 8652, 0, 18312, 0, 0, 0, 0, 30054, 0, 0, 0, 0, 0, 0, 0, 11270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20708, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 7050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14862, 0, 0, 3492, 0, 0, 0, 55878, 0, 0, 0, 16486, 0, 0, 0, 18119, 0, 0, 0, 0, 0, 0, 2154, 1284, 0, 0, 23113, 31751, 0, 0, 29547, 0, 0, 0, 0, 0, 0, 36647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7913, 0, 0, 0, 0, 20644, 0, 0, 10508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43622, 0, 0, 0, 0, 0, 40966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 901, 11529, 5191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24454, 0, 0, 26665, 27590, 0, 27397, 0, 0, 0, 0, 0, 0, 23562, 2949, 0, 0, 30344, 62214, 0, 47334, 2026, 18885, 0, 0, 0, 48678, 0, 0, 0, 22694, 0, 0, 1972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15465, 0, 0, 0, 0, 38822, 0, 0, 0, 0, 945, 32708, 0, 54791, 0, 14918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23396, 0, 0, 0, 0, 0, 0, 5486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30856, 64166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35206, 0, 0, 0, 30535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62663, 0, 0, 1096, 17574, 31820, 0, 0, 14375, 4402, 27207, 0, 0, 21448, 4676, 0, 0, 0, 0, 16585, 5094, 0, 0, 0, 0, 0, 0, 0, 0, 4845, 0, 0, 32870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31466, 0, 0, 0, 0, 31783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4522, 16039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7464, 4773, 0, 0, 0, 0, 0, 0, 0, 0, 18636, 0, 0, 0, 25640, 0, 0, 0, 0, 0, 0, 2244, 0, 0, 11818, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 6540, 23079, 13770, 7719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58150, 528, 34502, 32682, 0, 0, 12997, 0, 0, 0, 0, 0, 2214, 0, 0, 0, 0, 0, 58567, 0, 0, 0, 26375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32005, 22952, 59047, 0, 13543, 0, 0, 0, 0, 0, 0, 0, 0, 16328, 0, 0, 33542, 0, 0, 0, 19782, 0, 0, 0, 16644, 0, 0, 0, 0, 31688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10276, 0, 0, 0, 0, 0, 0, 0, 36327, 0, 0, 29480, 0, 0, 0, 777, 12709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27398, 0, 0, 0, 4455, 9037, 31397, 0, 9221, 0, 0, 0, 60487, 20840, 1796, 0, 0, 0, 0, 0, 0, 0, 0, 8364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19752, 44902, 0, 38566, 0, 0, 18027, 0, 0, 0, 0, 0, 0, 0, 0, 10662, 0, 0, 0, 0, 0, 11812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19910, 0, 0, 0, 45030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19978, 5127, 0, 11620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19817, 0, 5579, 9350, 0, 0, 21002, 19718, 0, 0, 0, 21926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20711, 0, 0, 0, 20197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40550, 0, 0, 0, 57510, 0, 0, 0, 53895, 0, 0, 15017, 0, 17000, 39367, 2347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8588, 0, 0, 0, 0, 0, 3273, 17862, 3498, 2085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19048, 0, 0, 0, 0, 0, 11978, 58631, 0, 0, 0, 0, 0, 0, 523, 0, 12969, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28197, 0, 47846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 14917, 748, 8229, 0, 0, 0, 0, 0, 0, 2476, 12935, 0, 0, 0, 0, 0, 0, 22792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27528, 59142, 0, 0, 20876, 20134, 0, 0, 0, 0, 440, 12068, 0, 58951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48038, 0, 0, 0, 60999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15716, 7498, 5476, 0, 0, 0, 0, 20202, 37959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29801, 0, 5451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13573, 0, 0, 22856, 0, 0, 0, 0, 21927, 0, 0, 0, 0, 0, 0, 9130, 0, 0, 0, 0, 0, 0, 13732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2282, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3726, 26503, 0, 0, 0, 0, 0, 0, 9258, 0, 0, 0, 0, 0, 0, 0, 0, 21604, 0, 0, 0, 45574, 0, 0, 0, 0, 0, 20710, 0, 0, 0, 42694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 6694, 0, 0, 0, 0, 0, 0, 0, 10948, 0, 0, 0, 29700, 0, 0, 0, 0, 0, 58823, 3796, 27399, 20939, 10180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 29287, 28649, 14534, 0, 0, 16428, 45607, 0, 0, 0, 0, 0, 0, 25322, 0, 4908, 0, 0, 0, 0, 0, 0, 25476, 29097, 14246, 11053, 0, 0, 0, 0, 0, 0, 0, 0, 18502, 0, 0, 0, 44390, 0, 0, 0, 17765, 0, 0, 0, 0, 0, 0, 24520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28166, 0, 0, 0, 0, 0, 48198, 0, 0, 31467, 0, 24585, 0, 0, 0, 0, 18692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7236, 968, 13637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14791, 0, 0, 0, 12324, 0, 12741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11108, 0, 0, 0, 0, 4009, 40295, 20616, 4357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15015, 0, 0, 0, 0, 0, 43751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23974, 0, 0, 0, 0, 17480, 20647, 0, 0, 0, 0, 0, 0, 8876, 0, 0, 40806, 0, 0, 0, 0, 0, 0, 0, 14502, 17160, 17764, 0, 0, 31594, 35431, 0, 0, 2890, 0, 0, 0, 0, 0, 0, 0, 0, 27524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8228, 0, 56583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2662, 0, 26724, 0, 0, 0, 0, 0, 0, 0, 64198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3049, 54983, 0, 0, 0, 0, 0, 0, 0, 837, 0, 17604, 0, 0, 0, 0, 0, 28838, 0, 0, 0, 0, 0, 0, 26312, 0, 0, 3910, 0, 0, 0, 25830, 0, 0, 0, 0, 0, 8391, 0, 19845, 19240, 1092, 0, 0, 5449, 0, 0, 0, 0, 17188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10629, 0, 0, 6671, 61094, 5832, 8358, 0, 0, 0, 55078, 0, 0, 0, 0, 0, 29860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51494, 0, 28647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25989, 0, 0, 30153, 61318, 0, 0, 0, 0, 0, 0, 0, 24903, 0, 0, 0, 4388, 0, 42054, 0, 0, 0, 0, 0, 0, 0, 53158, 0, 0, 0, 0, 0, 0, 0, 50918, 0, 0, 0, 0, 0, 0, 26251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5929, 2853, 0, 37126, 7372, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2027, 934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55686, 0, 0, 5672, 5447, 0, 62758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2923, 0, 556, 1415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8645, 0, 9477, 0, 0, 0, 0, 0, 0, 0, 48742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24235, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16970, 18823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25158, 0, 0, 0, 0, 0, 18567, 20072, 2823, 14313, 1830, 0, 0, 0, 0, 0, 0, 0, 0, 27048, 23526, 0, 0, 0, 0, 0, 997, 492, 0, 14730, 16677, 396, 13574, 0, 0, 0, 41671, 0, 0, 0, 0, 0, 0, 0, 19045, 0, 0, 0, 421, 17545, 3110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47111, 14475, 56551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3697, 0, 0, 0, 0, 0, 0, 49382, 0, 35559, 0, 0, 0, 0, 40, 0, 11496, 15621, 0, 8550, 0, 0, 0, 63462, 0, 0, 0, 0, 0, 0, 0, 36966, 0, 50406, 0, 46022, 1001, 0, 0, 12069, 3249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15241, 0, 0, 0, 0, 0, 0, 0, 0, 64743, 0, 0, 0, 0, 0, 58759, 0, 0, 0, 0, 1136, 26981, 0, 0, 0, 0, 0, 0, 0, 17732, 0, 0, 0, 17157, 20011, 6629, 0, 43879, 0, 0, 0, 13572, 25128, 10759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 875, 24007, 0, 0, 0, 0, 7628, 0, 0, 0, 0, 0, 12268, 0, 0, 0, 0, 0, 0, 0, 0, 19300, 23210, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15236, 0, 0, 0, 0, 0, 49670, 0, 0, 0, 0, 0, 0, 0, 21764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45799, 0, 0, 436, 3589, 0, 0, 11402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62822, 0, 0, 0, 39814, 588, 0, 0, 0, 0, 0, 0, 27750, 0, 0, 0, 0, 0, 0, 1609, 22660, 2346, 18951, 0, 16068, 0, 0, 0, 0, 0, 0, 5162, 11110, 0, 0, 0, 0, 15048, 1060, 0, 7879, 18280, 326, 0, 14886, 19656, 0, 7594, 0, 0, 0, 0, 0, 781, 581, 0, 16198, 0, 0, 0, 0, 0, 0, 1078, 9892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4489, 0, 0, 0, 0, 33798, 0, 0, 0, 54534, 0, 0, 0, 0, 0, 0, 0, 33158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42086, 13834, 2757, 8456, 16773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3434, 0, 0, 0, 0, 0, 3946, 29668, 0, 0, 30634, 36775, 0, 0, 0, 0, 0, 24901, 0, 16069, 6280, 0, 0, 0, 0, 41990, 0, 0, 0, 0, 0, 0, 0, 27365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1450, 44807, 0, 0, 0, 32100, 0, 0, 0, 0, 0, 35110, 0, 0, 0, 0, 0, 0, 0, 0, 17448, 19591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1739, 0, 0, 0, 0, 5511, 0, 0, 0, 32934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18180, 0, 0, 0, 23428, 19754, 0, 0, 31174, 3021, 31655, 23464, 0, 0, 0, 0, 0, 0, 57255, 0, 0, 21292, 64487, 0, 0, 0, 0, 0, 0, 25802, 9189, 0, 0, 0, 0, 0, 49254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5837, 50023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15495, 0, 0, 0, 0, 0, 51942, 0, 0, 0, 0, 0, 0, 0, 0, 28104, 58662, 0, 50214, 0, 0, 0, 0, 0, 0, 0, 0, 2988, 0, 22888, 31812, 0, 0, 0, 0, 0, 2020, 0, 18916, 0, 0, 0, 0, 0, 0, 0, 23973, 0, 0, 0, 0, 17516, 11717, 0, 0, 0, 55911, 0, 0, 0, 0, 0, 0, 0, 2855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46822, 0, 24710, 28586, 0, 0, 0, 1556, 0, 0, 30117, 0, 0, 22090, 57127, 3403, 14087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1041, 0, 10633, 6916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27269, 0, 0, 13322, 18055, 0, 29380, 0, 56454, 0, 0, 120, 0, 0, 8773, 0, 0, 0, 0, 16040, 0, 0, 0, 0, 0, 0, 0, 27242, 23781, 0, 1572, 0, 28134, 0, 0, 1512, 0, 0, 0, 0, 0, 0, 27684, 0, 38470, 0, 0, 0, 0, 0, 0, 1513, 8709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46566, 0, 0, 0, 0, 28521, 61159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13028, 0, 5863, 0, 0, 15693, 0, 0, 0, 0, 0, 0, 0, 1131, 23398, 0, 0, 0, 0, 0, 0, 0, 26212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18404, 0, 0, 0, 0, 1457, 26183, 0, 0, 2475, 7110, 0, 0, 0, 0, 27180, 60166, 0, 0, 0, 20262, 0, 41862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28229, 0, 0, 0, 29254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27690, 0, 0, 13636, 12776, 1862, 0, 0, 0, 0, 0, 0, 17225, 3271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4457, 18117, 0, 2023, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 3654, 0, 0, 0, 0, 0, 0, 0, 0, 18440, 0, 0, 0, 0, 0, 0, 0, 0, 29861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24074, 0, 0, 0, 0, 0, 0, 0, 0, 12004, 0, 32358, 0, 0, 3081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10792, 1799, 21322, 0, 7880, 12613, 0, 0, 0, 0, 0, 0, 0, 0, 13993, 0, 0, 0, 16202, 0, 0, 0, 0, 32102, 0, 37223, 0, 10500, 0, 0, 0, 0, 0, 0, 0, 0, 32008, 0, 0, 0, 0, 0, 23816, 3236, 0, 0, 0, 0, 0, 23237, 0, 0, 5642, 0, 4684, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26852, 0, 0, 0, 0, 0, 0, 7148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7890, 61798, 939, 0, 0, 56679, 0, 0, 0, 0, 0, 27078, 202, 5029, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28005, 0, 0, 15273, 24741, 5676, 20452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55910, 0, 0, 0, 0, 5069, 27942, 0, 21092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21384, 28260, 0, 2502, 20108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46726, 0, 30790, 0, 0, 0, 0, 0, 14725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1099, 6372, 0, 0, 0, 12422, 15182, 0, 8683, 0, 10665, 19462, 0, 0, 0, 0, 0, 0, 1590, 0, 31628, 0, 22632, 19750, 0, 0, 0, 0, 0, 0, 0, 24198, 0, 0, 0, 0, 0, 50662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11015, 0, 0, 0, 0, 0, 0, 0, 0, 16490, 54695, 0, 0, 0, 0, 0, 0, 0, 0, 12937, 0, 0, 0, 0, 16004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2181, 6923, 0, 0, 0, 0, 0, 0, 0, 15624, 11302, 0, 0, 5673, 7559, 0, 0, 14668, 15684, 0, 0, 0, 0, 0, 0, 24204, 48134, 0, 24230, 0, 55527, 0, 0, 3464, 19141, 0, 0, 0, 0, ]; brotli-8.0.2/src/enc/encode.rs000064400000000000000000003417501046102023000142770ustar 00000000000000use alloc::Allocator; use core; use core::cmp::{max, min}; use super::super::alloc; use super::super::alloc::{SliceWrapper, SliceWrapperMut}; use super::backward_references::{ AdvHashSpecialization, AdvHasher, AnyHasher, BasicHasher, BrotliCreateBackwardReferences, BrotliEncoderMode, BrotliEncoderParams, BrotliHasherParams, H2Sub, H3Sub, H4Sub, H54Sub, H5Sub, H6Sub, HQ5Sub, HQ7Sub, HowPrepared, StoreLookaheadThenStore, Struct1, UnionHasher, H9, H9_BLOCK_BITS, H9_BLOCK_SIZE, H9_BUCKET_BITS, H9_NUM_LAST_DISTANCES_TO_CHECK, }; use super::bit_cost::{shannon_entropy, BitsEntropy}; use super::brotli_bit_stream::{ store_meta_block, store_meta_block_fast, store_meta_block_trivial, store_uncompressed_meta_block, BrotliWriteEmptyLastMetaBlock, BrotliWriteMetadataMetaBlock, MetaBlockSplit, RecoderState, }; use super::combined_alloc::BrotliAlloc; use super::command::{get_length_code, BrotliDistanceParams, Command}; use super::compress_fragment::compress_fragment_fast; use super::compress_fragment_two_pass::{compress_fragment_two_pass, BrotliWriteBits}; use super::constants::{ BROTLI_CONTEXT, BROTLI_CONTEXT_LUT, BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS, BROTLI_WINDOW_GAP, }; use super::hash_to_binary_tree::InitializeH10; use super::histogram::{ ContextType, CostAccessors, HistogramCommand, HistogramDistance, HistogramLiteral, }; use super::interface; use super::metablock::{ BrotliBuildMetaBlock, BrotliBuildMetaBlockGreedy, BrotliInitDistanceParams, BrotliOptimizeHistograms, }; pub use super::parameters::BrotliEncoderParameter; use super::static_dict::{kNumDistanceCacheEntries, BrotliGetDictionary}; use super::util::{floatX, Log2FloorNonZero}; use crate::enc::combined_alloc::{alloc_default, allocate}; use crate::enc::input_pair::InputReferenceMut; use crate::enc::utf8_util::is_mostly_utf8; //fn BrotliCreateHqZopfliBackwardReferences(m: &mut [MemoryManager], // dictionary: &[BrotliDictionary], // num_bytes: usize, // position: usize, // ringbuffer: &[u8], // ringbuffer_mask: usize, // params: &[BrotliEncoderParams], // hasher: &mut [u8], // dist_cache: &mut [i32], // last_insert_len: &mut [usize], // commands: &mut [Command], // num_commands: &mut [usize], // num_literals: &mut [usize]); //fn BrotliCreateZopfliBackwardReferences(m: &mut [MemoryManager], // dictionary: &[BrotliDictionary], // num_bytes: usize, // position: usize, // ringbuffer: &[u8], // ringbuffer_mask: usize, // params: &[BrotliEncoderParams], // hasher: &mut [u8], // dist_cache: &mut [i32], // last_insert_len: &mut [usize], // commands: &mut [Command], // num_commands: &mut [usize], // num_literals: &mut [usize]); //fn BrotliInitBlockSplit(xself: &mut BlockSplit); //fn BrotliInitMemoryManager(m: &mut [MemoryManager], // alloc_func: fn(&mut [::std::os::raw::c_void], usize) // -> *mut ::std::os::raw::c_void, // free_func: fn(*mut ::std::os::raw::c_void, // *mut ::std::os::raw::c_void), // opaque: *mut ::std::os::raw::c_void); //fn BrotliInitZopfliNodes(array: &mut [ZopfliNode], length: usize); //fn BrotliWipeOutMemoryManager(m: &mut [MemoryManager]); static kCompressFragmentTwoPassBlockSize: usize = (1i32 << 17) as usize; static kMinUTF8Ratio: floatX = 0.75; pub struct RingBuffer> { pub size_: u32, pub mask_: u32, pub tail_size_: u32, pub total_size_: u32, pub cur_size_: u32, pub pos_: u32, pub data_mo: AllocU8::AllocatedMemory, pub buffer_index: usize, } #[derive(PartialEq, Eq, Copy, Clone)] #[repr(i32)] pub enum BrotliEncoderStreamState { BROTLI_STREAM_PROCESSING = 0, BROTLI_STREAM_FLUSH_REQUESTED = 1, BROTLI_STREAM_FINISHED = 2, BROTLI_STREAM_METADATA_HEAD = 3, BROTLI_STREAM_METADATA_BODY = 4, } #[derive(Clone, Copy, Debug)] enum NextOut { DynamicStorage(u32), TinyBuf(u32), None, } fn GetNextOutInternal<'a>( next_out: &NextOut, storage: &'a mut [u8], tiny_buf: &'a mut [u8; 16], ) -> &'a mut [u8] { match next_out { &NextOut::DynamicStorage(offset) => &mut storage[offset as usize..], &NextOut::TinyBuf(offset) => &mut tiny_buf[offset as usize..], &NextOut::None => &mut [], } } macro_rules! GetNextOut { ($s : expr) => { GetNextOutInternal(&$s.next_out_, $s.storage_.slice_mut(), &mut $s.tiny_buf_) }; } fn NextOutIncrement(next_out: &NextOut, inc: i32) -> NextOut { match next_out { &NextOut::DynamicStorage(offset) => NextOut::DynamicStorage((offset as i32 + inc) as u32), &NextOut::TinyBuf(offset) => NextOut::TinyBuf((offset as i32 + inc) as u32), &NextOut::None => NextOut::None, } } fn IsNextOutNull(next_out: &NextOut) -> bool { match next_out { &NextOut::DynamicStorage(_) => false, &NextOut::TinyBuf(_) => false, &NextOut::None => true, } } #[derive(Clone, Copy, Debug)] pub enum IsFirst { NothingWritten, HeaderWritten, FirstCatableByteWritten, BothCatableBytesWritten, } pub struct BrotliEncoderStateStruct { pub params: BrotliEncoderParams, pub m8: Alloc, pub hasher_: UnionHasher, pub input_pos_: u64, pub ringbuffer_: RingBuffer, pub cmd_alloc_size_: usize, pub commands_: >::AllocatedMemory, // not sure about this one pub num_commands_: usize, pub num_literals_: usize, pub last_insert_len_: usize, pub last_flush_pos_: u64, pub last_processed_pos_: u64, pub dist_cache_: [i32; 16], pub saved_dist_cache_: [i32; kNumDistanceCacheEntries], pub last_bytes_: u16, pub last_bytes_bits_: u8, pub prev_byte_: u8, pub prev_byte2_: u8, pub storage_size_: usize, pub storage_: >::AllocatedMemory, pub small_table_: [i32; 1024], pub large_table_: >::AllocatedMemory, // pub large_table_size_: usize, // <-- get this by doing large_table_.len() pub cmd_depths_: [u8; 128], pub cmd_bits_: [u16; 128], pub cmd_code_: [u8; 512], pub cmd_code_numbits_: usize, pub command_buf_: >::AllocatedMemory, pub literal_buf_: >::AllocatedMemory, next_out_: NextOut, pub available_out_: usize, pub total_out_: u64, pub tiny_buf_: [u8; 16], pub remaining_metadata_bytes_: u32, pub stream_state_: BrotliEncoderStreamState, pub is_last_block_emitted_: bool, pub is_initialized_: bool, pub is_first_mb: IsFirst, pub literal_scratch_space: ::i32vec, pub command_scratch_space: ::i32vec, pub distance_scratch_space: ::i32vec, pub recoder_state: RecoderState, custom_dictionary_size: Option, custom_dictionary: bool, } pub fn set_parameter( params: &mut BrotliEncoderParams, p: BrotliEncoderParameter, value: u32, ) -> bool { use crate::enc::parameters::BrotliEncoderParameter::*; match p { BROTLI_PARAM_MODE => { params.mode = match value { 0 => BrotliEncoderMode::BROTLI_MODE_GENERIC, 1 => BrotliEncoderMode::BROTLI_MODE_TEXT, 2 => BrotliEncoderMode::BROTLI_MODE_FONT, 3 => BrotliEncoderMode::BROTLI_FORCE_LSB_PRIOR, 4 => BrotliEncoderMode::BROTLI_FORCE_MSB_PRIOR, 5 => BrotliEncoderMode::BROTLI_FORCE_UTF8_PRIOR, 6 => BrotliEncoderMode::BROTLI_FORCE_SIGNED_PRIOR, _ => BrotliEncoderMode::BROTLI_MODE_GENERIC, }; } BROTLI_PARAM_QUALITY => params.quality = value as i32, BROTLI_PARAM_STRIDE_DETECTION_QUALITY => params.stride_detection_quality = value as u8, BROTLI_PARAM_HIGH_ENTROPY_DETECTION_QUALITY => { params.high_entropy_detection_quality = value as u8 } BROTLI_PARAM_CDF_ADAPTATION_DETECTION => params.cdf_adaptation_detection = value as u8, BROTLI_PARAM_Q9_5 => params.q9_5 = (value != 0), BROTLI_PARAM_PRIOR_BITMASK_DETECTION => params.prior_bitmask_detection = value as u8, BROTLI_PARAM_SPEED => { params.literal_adaptation[1].0 = value as u16; if params.literal_adaptation[0] == (0, 0) { params.literal_adaptation[0].0 = value as u16; } } BROTLI_PARAM_SPEED_MAX => { params.literal_adaptation[1].1 = value as u16; if params.literal_adaptation[0].1 == 0 { params.literal_adaptation[0].1 = value as u16; } } BROTLI_PARAM_CM_SPEED => { params.literal_adaptation[3].0 = value as u16; if params.literal_adaptation[2] == (0, 0) { params.literal_adaptation[2].0 = value as u16; } } BROTLI_PARAM_CM_SPEED_MAX => { params.literal_adaptation[3].1 = value as u16; if params.literal_adaptation[2].1 == 0 { params.literal_adaptation[2].1 = value as u16; } } BROTLI_PARAM_SPEED_LOW => params.literal_adaptation[0].0 = value as u16, BROTLI_PARAM_SPEED_LOW_MAX => params.literal_adaptation[0].1 = value as u16, BROTLI_PARAM_CM_SPEED_LOW => params.literal_adaptation[2].0 = value as u16, BROTLI_PARAM_CM_SPEED_LOW_MAX => params.literal_adaptation[2].1 = value as u16, BROTLI_PARAM_LITERAL_BYTE_SCORE => params.hasher.literal_byte_score = value as i32, BROTLI_METABLOCK_CALLBACK => params.log_meta_block = value != 0, BROTLI_PARAM_LGWIN => params.lgwin = value as i32, BROTLI_PARAM_LGBLOCK => params.lgblock = value as i32, BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING => { if value != 0 && value != 1 { return false; } params.disable_literal_context_modeling = if value != 0 { 1 } else { 0 }; } BROTLI_PARAM_SIZE_HINT => params.size_hint = value as usize, BROTLI_PARAM_LARGE_WINDOW => params.large_window = value != 0, BROTLI_PARAM_AVOID_DISTANCE_PREFIX_SEARCH => { params.avoid_distance_prefix_search = value != 0 } BROTLI_PARAM_CATABLE => { params.catable = value != 0; if !params.appendable { params.appendable = value != 0; } params.use_dictionary = (value == 0); } BROTLI_PARAM_APPENDABLE => params.appendable = value != 0, BROTLI_PARAM_MAGIC_NUMBER => params.magic_number = value != 0, BROTLI_PARAM_FAVOR_EFFICIENCY => params.favor_cpu_efficiency = value != 0, _ => return false, } true } impl BrotliEncoderStateStruct { pub fn set_parameter(&mut self, p: BrotliEncoderParameter, value: u32) -> bool { if self.is_initialized_ { false } else { set_parameter(&mut self.params, p, value) } } } /* "Large Window Brotli" */ pub const BROTLI_LARGE_MAX_DISTANCE_BITS: u32 = 62; pub const BROTLI_LARGE_MIN_WBITS: u32 = 10; pub const BROTLI_LARGE_MAX_WBITS: u32 = 30; pub const BROTLI_MAX_DISTANCE_BITS: u32 = 24; pub const BROTLI_MAX_WINDOW_BITS: usize = BROTLI_MAX_DISTANCE_BITS as usize; pub const BROTLI_MAX_DISTANCE: usize = 0x03ff_fffc; pub const BROTLI_MAX_ALLOWED_DISTANCE: usize = 0x07ff_fffc; pub const BROTLI_NUM_DISTANCE_SHORT_CODES: u32 = 16; pub fn BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX: u32, NDIRECT: u32, MAXNBITS: u32) -> u32 { BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + ((MAXNBITS) << ((NPOSTFIX) + 1)) } //#define BROTLI_NUM_DISTANCE_SYMBOLS \ // BROTLI_DISTANCE_ALPHABET_SIZE( \ // BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS) pub const BROTLI_NUM_DISTANCE_SYMBOLS: usize = 1128; pub fn BrotliEncoderInitParams() -> BrotliEncoderParams { BrotliEncoderParams { dist: BrotliDistanceParams { distance_postfix_bits: 0, num_direct_distance_codes: 0, alphabet_size: BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS), max_distance: BROTLI_MAX_DISTANCE, }, mode: BrotliEncoderMode::BROTLI_MODE_GENERIC, log_meta_block: false, large_window: false, avoid_distance_prefix_search: false, quality: 11, q9_5: false, lgwin: 22i32, lgblock: 0i32, size_hint: 0usize, disable_literal_context_modeling: 0i32, stride_detection_quality: 0, high_entropy_detection_quality: 0, cdf_adaptation_detection: 0, prior_bitmask_detection: 0, literal_adaptation: [(0, 0); 4], catable: false, use_dictionary: true, appendable: false, magic_number: false, favor_cpu_efficiency: false, hasher: BrotliHasherParams { type_: 6, block_bits: 9 - 1, bucket_bits: 15, hash_len: 5, num_last_distances_to_check: 16, literal_byte_score: 0, }, } } impl BrotliEncoderStateStruct { fn extend_last_command(&mut self, bytes: &mut u32, wrapped_last_processed_pos: &mut u32) { let last_command = &mut self.commands_.slice_mut()[self.num_commands_ - 1]; let mask = self.ringbuffer_.mask_; let max_backward_distance: u64 = (1u64 << self.params.lgwin) - BROTLI_WINDOW_GAP as u64; let last_copy_len = u64::from(last_command.copy_len_) & 0x01ff_ffff; let last_processed_pos: u64 = self.last_processed_pos_ - last_copy_len; let max_distance: u64 = if last_processed_pos < max_backward_distance { last_processed_pos } else { max_backward_distance }; let cmd_dist: u64 = self.dist_cache_[0] as u64; let distance_code: u32 = last_command.restore_distance_code(&self.params.dist); if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES || distance_code as u64 - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) as u64 == cmd_dist) { if (cmd_dist <= max_distance) { while (*bytes != 0 && self.ringbuffer_.data_mo.slice()[self.ringbuffer_.buffer_index + (*wrapped_last_processed_pos as usize & mask as usize)] == self.ringbuffer_.data_mo.slice()[self.ringbuffer_.buffer_index + (((*wrapped_last_processed_pos as usize) .wrapping_sub(cmd_dist as usize)) & mask as usize)]) { last_command.copy_len_ += 1; (*bytes) -= 1; (*wrapped_last_processed_pos) += 1; } } /* The copy length is at most the metablock size, and thus expressible. */ get_length_code( last_command.insert_len_ as usize, ((last_command.copy_len_ & 0x01ff_ffff) as i32 + (last_command.copy_len_ >> 25) as i32) as usize, (last_command.dist_prefix_ & 0x03ff) == 0, &mut last_command.cmd_prefix_, ); } } } fn RingBufferInit>() -> RingBuffer { RingBuffer { size_: 0, mask_: 0, // 0xff?? tail_size_: 0, total_size_: 0, cur_size_: 0, pos_: 0, data_mo: AllocU8::AllocatedMemory::default(), buffer_index: 0usize, } } impl BrotliEncoderStateStruct { pub fn new(m8: Alloc) -> Self { let cache: [i32; 16] = [4, 11, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; Self { params: BrotliEncoderInitParams(), input_pos_: 0, num_commands_: 0, num_literals_: 0, last_insert_len_: 0, last_flush_pos_: 0, last_processed_pos_: 0, prev_byte_: 0, prev_byte2_: 0, storage_size_: 0, storage_: alloc_default::(), hasher_: UnionHasher::::default(), large_table_: alloc_default::(), // large_table_size_: 0, cmd_code_numbits_: 0, command_buf_: alloc_default::(), literal_buf_: alloc_default::(), next_out_: NextOut::None, available_out_: 0, total_out_: 0, is_first_mb: IsFirst::NothingWritten, stream_state_: BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING, is_last_block_emitted_: false, is_initialized_: false, ringbuffer_: RingBufferInit(), commands_: alloc_default::(), cmd_alloc_size_: 0, dist_cache_: cache, saved_dist_cache_: [cache[0], cache[1], cache[2], cache[3]], cmd_bits_: [0; 128], cmd_depths_: [0; 128], last_bytes_: 0, last_bytes_bits_: 0, cmd_code_: [0; 512], m8, remaining_metadata_bytes_: 0, small_table_: [0; 1024], tiny_buf_: [0; 16], literal_scratch_space: HistogramLiteral::make_nnz_storage(), command_scratch_space: HistogramCommand::make_nnz_storage(), distance_scratch_space: HistogramDistance::make_nnz_storage(), recoder_state: RecoderState::new(), custom_dictionary: false, custom_dictionary_size: None, } } } fn RingBufferFree>(m: &mut AllocU8, rb: &mut RingBuffer) { m.free_cell(core::mem::take(&mut rb.data_mo)); } fn DestroyHasher + alloc::Allocator>( m16: &mut Alloc, handle: &mut UnionHasher, ) { handle.free(m16); } /* fn DestroyHasher, AllocU32:alloc::Allocator>( m16: &mut AllocU16, m32:&mut AllocU32, handle: &mut UnionHasher){ match handle { &mut UnionHasher::H2(ref mut hasher) => { m32.free_cell(core::mem::replace(&mut hasher.buckets_.buckets_, alloc_default::())); } &mut UnionHasher::H3(ref mut hasher) => { m32.free_cell(core::mem::replace(&mut hasher.buckets_.buckets_, alloc_default::())); } &mut UnionHasher::H4(ref mut hasher) => { m32.free_cell(core::mem::replace(&mut hasher.buckets_.buckets_, alloc_default::())); } &mut UnionHasher::H54(ref mut hasher) => { m32.free_cell(core::mem::replace(&mut hasher.buckets_.buckets_, alloc_default::())); } &mut UnionHasher::H5(ref mut hasher) => { m16.free_cell(core::mem::replace(&mut hasher.num, AllocU16::AllocatedMemory::default())); m32.free_cell(core::mem::replace(&mut hasher.buckets, alloc_default::())); } &mut UnionHasher::H6(ref mut hasher) => { m16.free_cell(core::mem::replace(&mut hasher.num, AllocU16::AllocatedMemory::default())); m32.free_cell(core::mem::replace(&mut hasher.buckets, alloc_default::())); } &mut UnionHasher::H9(ref mut hasher) => { m16.free_cell(core::mem::replace(&mut hasher.num_, AllocU16::AllocatedMemory::default())); m32.free_cell(core::mem::replace(&mut hasher.buckets_, alloc_default::())); } _ => {} } *handle = UnionHasher::::default(); } */ impl BrotliEncoderStateStruct { fn cleanup(&mut self) { >::free_cell(&mut self.m8, core::mem::take(&mut self.storage_)); >::free_cell( &mut self.m8, core::mem::take(&mut self.commands_), ); RingBufferFree(&mut self.m8, &mut self.ringbuffer_); DestroyHasher(&mut self.m8, &mut self.hasher_); >::free_cell(&mut self.m8, core::mem::take(&mut self.large_table_)); >::free_cell(&mut self.m8, core::mem::take(&mut self.command_buf_)); >::free_cell(&mut self.m8, core::mem::take(&mut self.literal_buf_)); } } // TODO: use drop trait instead // impl Drop for BrotliEncoderStateStruct { // fn drop(&mut self) { // self.cleanup() // } // } pub fn BrotliEncoderDestroyInstance(s: &mut BrotliEncoderStateStruct) { s.cleanup() } #[cfg(not(feature = "disallow_large_window_size"))] fn check_large_window_ok() -> bool { true } #[cfg(feature = "disallow_large_window_size")] fn check_large_window_ok() -> bool { false } pub fn SanitizeParams(params: &mut BrotliEncoderParams) { params.quality = min(11i32, max(0i32, params.quality)); if params.lgwin < 10i32 { params.lgwin = 10i32; } else if params.lgwin > 24i32 { if params.large_window && check_large_window_ok() { if params.lgwin > 30i32 { params.lgwin = 30i32; } } else { params.lgwin = 24i32; } } if params.catable { params.appendable = true; } } fn ComputeLgBlock(params: &BrotliEncoderParams) -> i32 { let mut lgblock: i32 = params.lgblock; if params.quality == 0i32 || params.quality == 1i32 { lgblock = params.lgwin; } else if params.quality < 4i32 { lgblock = 14i32; } else if lgblock == 0i32 { lgblock = 16i32; if params.quality >= 9i32 && (params.lgwin > lgblock) { lgblock = min(18i32, params.lgwin); } } else { lgblock = min(24i32, max(16i32, lgblock)); } lgblock } fn ComputeRbBits(params: &BrotliEncoderParams) -> i32 { 1i32 + max(params.lgwin, params.lgblock) } fn RingBufferSetup>( params: &BrotliEncoderParams, rb: &mut RingBuffer, ) { let window_bits: i32 = ComputeRbBits(params); let tail_bits: i32 = params.lgblock; rb.size_ = 1u32 << window_bits; rb.mask_ = (1u32 << window_bits).wrapping_sub(1); rb.tail_size_ = 1u32 << tail_bits; rb.total_size_ = rb.size_.wrapping_add(rb.tail_size_); } fn EncodeWindowBits( lgwin: i32, large_window: bool, last_bytes: &mut u16, last_bytes_bits: &mut u8, ) { if large_window { *last_bytes = (((lgwin & 0x3F) << 8) | 0x11) as u16; *last_bytes_bits = 14; } else if lgwin == 16i32 { *last_bytes = 0u16; *last_bytes_bits = 1u8; } else if lgwin == 17i32 { *last_bytes = 1u16; *last_bytes_bits = 7u8; } else if lgwin > 17i32 { *last_bytes = ((lgwin - 17i32) << 1 | 1i32) as u16; *last_bytes_bits = 4u8; } else { *last_bytes = ((lgwin - 8i32) << 4 | 1i32) as u16; *last_bytes_bits = 7u8; } } fn InitCommandPrefixCodes( cmd_depths: &mut [u8], cmd_bits: &mut [u16], cmd_code: &mut [u8], cmd_code_numbits: &mut usize, ) { static kDefaultCommandDepths: [u8; 128] = [ 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, ]; static kDefaultCommandBits: [u16; 128] = [ 0, 0, 8, 9, 3, 35, 7, 71, 39, 103, 23, 47, 175, 111, 239, 31, 0, 0, 0, 4, 12, 2, 10, 6, 13, 29, 11, 43, 27, 59, 87, 55, 15, 79, 319, 831, 191, 703, 447, 959, 0, 14, 1, 25, 5, 21, 19, 51, 119, 159, 95, 223, 479, 991, 63, 575, 127, 639, 383, 895, 255, 767, 511, 1023, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12, 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255, 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095, 0, 0, 0, 0, ]; static kDefaultCommandCode: [u8; 57] = [ 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6, 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c, 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa, 0x6, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94, 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x4, 0x0, ]; static kDefaultCommandCodeNumBits: usize = 448usize; cmd_depths[..].clone_from_slice(&kDefaultCommandDepths[..]); cmd_bits[..].clone_from_slice(&kDefaultCommandBits[..]); cmd_code[..kDefaultCommandCode.len()].clone_from_slice(&kDefaultCommandCode[..]); *cmd_code_numbits = kDefaultCommandCodeNumBits; } impl BrotliEncoderStateStruct { fn ensure_initialized(&mut self) -> bool { if self.is_initialized_ { return true; } SanitizeParams(&mut self.params); self.params.lgblock = ComputeLgBlock(&mut self.params); ChooseDistanceParams(&mut self.params); self.remaining_metadata_bytes_ = u32::MAX; RingBufferSetup(&mut self.params, &mut self.ringbuffer_); { let mut lgwin: i32 = self.params.lgwin; if self.params.quality == 0i32 || self.params.quality == 1i32 { lgwin = max(lgwin, 18i32); } EncodeWindowBits( lgwin, self.params.large_window, &mut self.last_bytes_, &mut self.last_bytes_bits_, ); } if self.params.quality == 0i32 { InitCommandPrefixCodes( &mut self.cmd_depths_[..], &mut self.cmd_bits_[..], &mut self.cmd_code_[..], &mut self.cmd_code_numbits_, ); } if self.params.catable { // if we want to properly concatenate, then we need to ignore any distances // this value 0x7ffffff0 was chosen to be larger than max_distance + gap // but small enough so that +/-3 will not overflow (due to distance modifications) for item in self.dist_cache_.iter_mut() { *item = 0x7ffffff0; } for item in self.saved_dist_cache_.iter_mut() { *item = 0x7ffffff0; } } self.is_initialized_ = true; true } } fn RingBufferInitBuffer>( m: &mut AllocU8, buflen: u32, rb: &mut RingBuffer, ) { static kSlackForEightByteHashingEverywhere: usize = 7usize; let mut new_data = m.alloc_cell( ((2u32).wrapping_add(buflen) as usize).wrapping_add(kSlackForEightByteHashingEverywhere), ); if !rb.data_mo.slice().is_empty() { let lim: usize = ((2u32).wrapping_add(rb.cur_size_) as usize) .wrapping_add(kSlackForEightByteHashingEverywhere); new_data.slice_mut()[..lim].clone_from_slice(&rb.data_mo.slice()[..lim]); m.free_cell(core::mem::take(&mut rb.data_mo)); } let _ = core::mem::replace(&mut rb.data_mo, new_data); rb.cur_size_ = buflen; rb.buffer_index = 2usize; rb.data_mo.slice_mut()[(rb.buffer_index.wrapping_sub(2))] = 0; rb.data_mo.slice_mut()[(rb.buffer_index.wrapping_sub(1))] = 0; for i in 0usize..kSlackForEightByteHashingEverywhere { rb.data_mo.slice_mut()[rb .buffer_index .wrapping_add(rb.cur_size_ as usize) .wrapping_add(i)] = 0; } } fn RingBufferWriteTail>( bytes: &[u8], n: usize, rb: &mut RingBuffer, ) { let masked_pos: usize = (rb.pos_ & rb.mask_) as usize; if masked_pos < rb.tail_size_ as usize { let p: usize = (rb.size_ as usize).wrapping_add(masked_pos); let begin = rb.buffer_index.wrapping_add(p); let lim = min(n, (rb.tail_size_ as usize).wrapping_sub(masked_pos)); rb.data_mo.slice_mut()[begin..(begin + lim)].clone_from_slice(&bytes[..lim]); } } fn RingBufferWrite>( m: &mut AllocU8, bytes: &[u8], n: usize, rb: &mut RingBuffer, ) { if rb.pos_ == 0u32 && (n < rb.tail_size_ as usize) { rb.pos_ = n as u32; RingBufferInitBuffer(m, rb.pos_, rb); rb.data_mo.slice_mut()[rb.buffer_index..(rb.buffer_index + n)] .clone_from_slice(&bytes[..n]); return; } if rb.cur_size_ < rb.total_size_ { RingBufferInitBuffer(m, rb.total_size_, rb); rb.data_mo.slice_mut()[rb .buffer_index .wrapping_add(rb.size_ as usize) .wrapping_sub(2)] = 0u8; rb.data_mo.slice_mut()[rb .buffer_index .wrapping_add(rb.size_ as usize) .wrapping_sub(1)] = 0u8; } { let masked_pos: usize = (rb.pos_ & rb.mask_) as usize; RingBufferWriteTail(bytes, n, rb); if masked_pos.wrapping_add(n) <= rb.size_ as usize { // a single write fits let start = rb.buffer_index.wrapping_add(masked_pos); rb.data_mo.slice_mut()[start..(start + n)].clone_from_slice(&bytes[..n]); } else { { let start = rb.buffer_index.wrapping_add(masked_pos); let mid = min(n, (rb.total_size_ as usize).wrapping_sub(masked_pos)); rb.data_mo.slice_mut()[start..(start + mid)].clone_from_slice(&bytes[..mid]); } let xstart = rb.buffer_index.wrapping_add(0); let size = n.wrapping_sub((rb.size_ as usize).wrapping_sub(masked_pos)); let bytes_start = (rb.size_ as usize).wrapping_sub(masked_pos); rb.data_mo.slice_mut()[xstart..(xstart + size)] .clone_from_slice(&bytes[bytes_start..(bytes_start + size)]); } } let data_2 = rb.data_mo.slice()[rb .buffer_index .wrapping_add(rb.size_ as usize) .wrapping_sub(2)]; rb.data_mo.slice_mut()[rb.buffer_index.wrapping_sub(2)] = data_2; let data_1 = rb.data_mo.slice()[rb .buffer_index .wrapping_add(rb.size_ as usize) .wrapping_sub(1)]; rb.data_mo.slice_mut()[rb.buffer_index.wrapping_sub(1)] = data_1; rb.pos_ = rb.pos_.wrapping_add(n as u32); if rb.pos_ > 1u32 << 30 { rb.pos_ = rb.pos_ & (1u32 << 30).wrapping_sub(1) | 1u32 << 30; } } impl BrotliEncoderStateStruct { pub fn copy_input_to_ring_buffer(&mut self, input_size: usize, input_buffer: &[u8]) { if !self.ensure_initialized() { return; } RingBufferWrite( &mut self.m8, input_buffer, input_size, &mut self.ringbuffer_, ); self.input_pos_ = self.input_pos_.wrapping_add(input_size as u64); if (self.ringbuffer_).pos_ <= (self.ringbuffer_).mask_ { let start = (self.ringbuffer_) .buffer_index .wrapping_add((self.ringbuffer_).pos_ as usize); for item in (self.ringbuffer_).data_mo.slice_mut()[start..(start + 7)].iter_mut() { *item = 0; } } } } fn ChooseHasher(params: &mut BrotliEncoderParams) { let hparams = &mut params.hasher; if params.quality >= 10 && !params.q9_5 { hparams.type_ = 10; } else if params.quality == 10 { // we are using quality 10 as a proxy for "9.5" hparams.type_ = 9; hparams.num_last_distances_to_check = H9_NUM_LAST_DISTANCES_TO_CHECK as i32; hparams.block_bits = H9_BLOCK_BITS as i32; hparams.bucket_bits = H9_BUCKET_BITS as i32; hparams.hash_len = 4; } else if params.quality == 9 { hparams.type_ = 9; hparams.num_last_distances_to_check = H9_NUM_LAST_DISTANCES_TO_CHECK as i32; hparams.block_bits = H9_BLOCK_BITS as i32; hparams.bucket_bits = H9_BUCKET_BITS as i32; hparams.hash_len = 4; } else if params.quality == 4 && (params.size_hint >= (1i32 << 20) as usize) { hparams.type_ = 54i32; } else if params.quality < 5 { hparams.type_ = params.quality; } else if params.lgwin <= 16 { hparams.type_ = if params.quality < 7 { 40i32 } else if params.quality < 9 { 41i32 } else { 42i32 }; } else if ((params.q9_5 && params.size_hint > (1 << 20)) || params.size_hint > (1 << 22)) && (params.lgwin >= 19i32) { hparams.type_ = 6i32; hparams.block_bits = min(params.quality - 1, 9); hparams.bucket_bits = 15i32; hparams.hash_len = 5i32; hparams.num_last_distances_to_check = if params.quality < 7 { 4i32 } else if params.quality < 9 { 10i32 } else { 16i32 }; } else { hparams.type_ = 5i32; hparams.block_bits = min(params.quality - 1, 9); hparams.bucket_bits = if params.quality < 7 && params.size_hint <= (1 << 20) { 14i32 } else { 15i32 }; hparams.num_last_distances_to_check = if params.quality < 7 { 4i32 } else if params.quality < 9 { 10i32 } else { 16i32 }; } } fn InitializeH2>( m32: &mut AllocU32, params: &BrotliEncoderParams, ) -> BasicHasher> { BasicHasher { GetHasherCommon: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, buckets_: H2Sub { buckets_: m32.alloc_cell(65537 + 8), }, h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), } } fn InitializeH3>( m32: &mut AllocU32, params: &BrotliEncoderParams, ) -> BasicHasher> { BasicHasher { GetHasherCommon: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, buckets_: H3Sub { buckets_: m32.alloc_cell(65538 + 8), }, h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), } } fn InitializeH4>( m32: &mut AllocU32, params: &BrotliEncoderParams, ) -> BasicHasher> { BasicHasher { GetHasherCommon: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, buckets_: H4Sub { buckets_: m32.alloc_cell(131072 + 8), }, h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), } } fn InitializeH54>( m32: &mut AllocU32, params: &BrotliEncoderParams, ) -> BasicHasher> { BasicHasher { GetHasherCommon: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, buckets_: H54Sub { buckets_: m32.alloc_cell(1048580 + 8), }, h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), } } fn InitializeH9 + alloc::Allocator>( m16: &mut Alloc, params: &BrotliEncoderParams, ) -> H9 { H9 { dict_search_stats_: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, num_: allocate::(m16, 1 << H9_BUCKET_BITS), buckets_: allocate::(m16, H9_BLOCK_SIZE << H9_BUCKET_BITS), h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), } } fn InitializeH5 + alloc::Allocator>( m16: &mut Alloc, params: &BrotliEncoderParams, ) -> UnionHasher { let block_size = 1u64 << params.hasher.block_bits; let bucket_size = 1u64 << params.hasher.bucket_bits; let buckets: >::AllocatedMemory = allocate::(m16, (bucket_size * block_size) as usize); let num: >::AllocatedMemory = allocate::(m16, bucket_size as usize); if params.hasher.block_bits == (HQ5Sub {}).block_bits() && (1 << params.hasher.bucket_bits) == (HQ5Sub {}).bucket_size() { return UnionHasher::H5q5(AdvHasher { buckets, h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), num, GetHasherCommon: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: HQ5Sub {}, }); } if params.hasher.block_bits == (HQ7Sub {}).block_bits() && (1 << params.hasher.bucket_bits) == (HQ7Sub {}).bucket_size() { return UnionHasher::H5q7(AdvHasher { buckets, h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), num, GetHasherCommon: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: HQ7Sub {}, }); } UnionHasher::H5(AdvHasher { buckets, h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), num, GetHasherCommon: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: H5Sub { hash_shift_: 32i32 - params.hasher.bucket_bits, bucket_size_: bucket_size as u32, block_bits_: params.hasher.block_bits, block_mask_: block_size.wrapping_sub(1) as u32, }, }) } fn InitializeH6 + alloc::Allocator>( m16: &mut Alloc, params: &BrotliEncoderParams, ) -> UnionHasher { let block_size = 1u64 << params.hasher.block_bits; let bucket_size = 1u64 << params.hasher.bucket_bits; let buckets: >::AllocatedMemory = allocate::(m16, (bucket_size * block_size) as usize); let num: >::AllocatedMemory = allocate::(m16, bucket_size as usize); UnionHasher::H6(AdvHasher { buckets, num, h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), GetHasherCommon: Struct1 { params: params.hasher, is_prepared_: 1, dict_num_lookups: 0, dict_num_matches: 0, }, specialization: H6Sub { bucket_size_: 1u32 << params.hasher.bucket_bits, block_bits_: params.hasher.block_bits, block_mask_: block_size.wrapping_sub(1) as u32, hash_mask: 0xffffffffffffffffu64 >> (64i32 - 8i32 * params.hasher.hash_len), hash_shift_: 64i32 - params.hasher.bucket_bits, }, }) } fn BrotliMakeHasher + alloc::Allocator>( m: &mut Alloc, params: &BrotliEncoderParams, ringbuffer_break: Option, ) -> UnionHasher { let hasher_type: i32 = params.hasher.type_; if hasher_type == 2i32 { return UnionHasher::H2(InitializeH2(m, params)); } if hasher_type == 3i32 { return UnionHasher::H3(InitializeH3(m, params)); } if hasher_type == 4i32 { return UnionHasher::H4(InitializeH4(m, params)); } if hasher_type == 5i32 { return InitializeH5(m, params); } if hasher_type == 6i32 { return InitializeH6(m, params); } if hasher_type == 9i32 { return UnionHasher::H9(InitializeH9(m, params)); } /* if hasher_type == 40i32 { return InitializeH40(params); } if hasher_type == 41i32 { return InitializeH41(params); } if hasher_type == 42i32 { return InitializeH42(params); } */ if hasher_type == 54i32 { return UnionHasher::H54(InitializeH54(m, params)); } if hasher_type == 10i32 { return UnionHasher::H10(InitializeH10(m, false, params, ringbuffer_break, 0)); } // since we don't support all of these, fall back to something sane InitializeH6(m, params) // return UnionHasher::Uninit; } fn HasherReset + alloc::Allocator>(t: &mut UnionHasher) { match t { &mut UnionHasher::Uninit => {} _ => (t.GetHasherCommon()).is_prepared_ = 0i32, }; } pub(crate) fn hasher_setup + Allocator>( m16: &mut Alloc, handle: &mut UnionHasher, params: &mut BrotliEncoderParams, ringbuffer_break: Option, data: &[u8], position: usize, input_size: usize, is_last: bool, ) { let one_shot = position == 0 && is_last; let is_uninit = match (handle) { &mut UnionHasher::Uninit => true, _ => false, }; if is_uninit { //let alloc_size: usize; ChooseHasher(&mut (*params)); //alloc_size = HasherSize(params, one_shot, input_size); //xself = BrotliAllocate(m, alloc_size.wrapping_mul(::core::mem::size_of::())) *handle = BrotliMakeHasher(m16, params, ringbuffer_break); handle.GetHasherCommon().params = params.hasher; HasherReset(handle); // this sets everything to zero, unlike in C handle.GetHasherCommon().is_prepared_ = 1; } else { match handle.Prepare(one_shot, input_size, data) { HowPrepared::ALREADY_PREPARED => {} HowPrepared::NEWLY_PREPARED => { if position == 0usize { let common = handle.GetHasherCommon(); common.dict_num_lookups = 0usize; common.dict_num_matches = 0usize; } } } } } fn HasherPrependCustomDictionary + alloc::Allocator>( m: &mut Alloc, handle: &mut UnionHasher, params: &mut BrotliEncoderParams, ringbuffer_break: Option, size: usize, dict: &[u8], ) { hasher_setup( m, handle, params, ringbuffer_break, dict, 0usize, size, false, ); match handle { &mut UnionHasher::H2(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H3(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H4(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H5(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H5q7(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H5q5(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H6(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H9(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H54(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::H10(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), &mut UnionHasher::Uninit => panic!("Uninitialized"), } } impl BrotliEncoderStateStruct { pub fn set_custom_dictionary(&mut self, size: usize, dict: &[u8]) { self.set_custom_dictionary_with_optional_precomputed_hasher( size, dict, UnionHasher::Uninit, false, ) } pub fn set_custom_dictionary_with_optional_precomputed_hasher( &mut self, size: usize, mut dict: &[u8], opt_hasher: UnionHasher, is_multithreading_file_continue: bool, ) { self.params.use_dictionary = false; self.prev_byte_ = 0; self.prev_byte2_ = 0; if is_multithreading_file_continue { if size > 0 { self.prev_byte_ = dict[size.wrapping_sub(1)]; } if size > 1 { self.prev_byte2_ = dict[size.wrapping_sub(2)]; } } let has_optional_hasher = if let UnionHasher::Uninit = opt_hasher { false } else { true }; let max_dict_size: usize = (1usize << self.params.lgwin).wrapping_sub(16); self.hasher_ = opt_hasher; let mut dict_size: usize = size; if !self.ensure_initialized() { return; } if dict_size == 0 || self.params.quality == 0 || self.params.quality == 1 || size <= 1 { self.params.catable = true; // don't risk a too-short dictionary self.params.appendable = true; // don't risk a too-short dictionary return; } self.custom_dictionary = true; if size > max_dict_size { dict = &dict[size.wrapping_sub(max_dict_size)..]; dict_size = max_dict_size; } self.custom_dictionary_size = core::num::NonZeroUsize::new(dict_size); self.copy_input_to_ring_buffer(dict_size, dict); self.last_flush_pos_ = dict_size as u64; self.last_processed_pos_ = dict_size as u64; let m16 = &mut self.m8; if cfg!(debug_assertions) || !has_optional_hasher { let mut orig_hasher = UnionHasher::Uninit; if has_optional_hasher { orig_hasher = core::mem::replace(&mut self.hasher_, UnionHasher::Uninit); } HasherPrependCustomDictionary( m16, &mut self.hasher_, &mut self.params, self.custom_dictionary_size, dict_size, dict, ); if has_optional_hasher { debug_assert!(orig_hasher == self.hasher_); DestroyHasher(m16, &mut orig_hasher); } } } } pub fn BrotliEncoderMaxCompressedSizeMulti(input_size: usize, num_threads: usize) -> usize { BrotliEncoderMaxCompressedSize(input_size) + num_threads * 8 } pub fn BrotliEncoderMaxCompressedSize(input_size: usize) -> usize { let magic_size = 16usize; let num_large_blocks: usize = input_size >> 14; let tail: usize = input_size.wrapping_sub(num_large_blocks << 24); let tail_overhead: usize = (if tail > (1i32 << 20) as usize { 4i32 } else { 3i32 }) as usize; let overhead: usize = (2usize) .wrapping_add((4usize).wrapping_mul(num_large_blocks)) .wrapping_add(tail_overhead) .wrapping_add(1); let result: usize = input_size.wrapping_add(overhead); if input_size == 0usize { return 1 + magic_size; } if result < input_size { 0usize } else { result + magic_size } } fn InitOrStitchToPreviousBlock + alloc::Allocator>( m: &mut Alloc, handle: &mut UnionHasher, data: &[u8], mask: usize, ringbuffer_break: Option, params: &mut BrotliEncoderParams, position: usize, input_size: usize, is_last: bool, ) { hasher_setup( m, handle, params, ringbuffer_break, data, position, input_size, is_last, ); handle.StitchToPreviousBlock(input_size, position, data, mask); } fn should_compress( data: &[u8], mask: usize, last_flush_pos: u64, bytes: usize, num_literals: usize, num_commands: usize, ) -> bool { const K_SAMPLE_RATE: u32 = 13; const K_MIN_ENTROPY: floatX = 7.92; if num_commands < (bytes >> 8) + 2 && num_literals as floatX > 0.99 * bytes as floatX { let mut literal_histo = [0u32; 256]; let bit_cost_threshold = (bytes as floatX) * K_MIN_ENTROPY / (K_SAMPLE_RATE as floatX); let t = bytes .wrapping_add(K_SAMPLE_RATE as usize) .wrapping_sub(1) .wrapping_div(K_SAMPLE_RATE as usize); let mut pos = last_flush_pos as u32; for _ in 0..t { let value = &mut literal_histo[data[pos as usize & mask] as usize]; *value = value.wrapping_add(1); pos = pos.wrapping_add(K_SAMPLE_RATE); } if BitsEntropy(&literal_histo[..], 256) > bit_cost_threshold { return false; } } true } /* Chooses the literal context mode for a metablock */ fn ChooseContextMode( params: &BrotliEncoderParams, data: &[u8], pos: usize, mask: usize, length: usize, ) -> ContextType { /* We only do the computation for the option of something else than CONTEXT_UTF8 for the highest qualities */ match params.mode { BrotliEncoderMode::BROTLI_FORCE_LSB_PRIOR => return ContextType::CONTEXT_LSB6, BrotliEncoderMode::BROTLI_FORCE_MSB_PRIOR => return ContextType::CONTEXT_MSB6, BrotliEncoderMode::BROTLI_FORCE_UTF8_PRIOR => return ContextType::CONTEXT_UTF8, BrotliEncoderMode::BROTLI_FORCE_SIGNED_PRIOR => return ContextType::CONTEXT_SIGNED, _ => {} } if (params.quality >= 10 && !is_mostly_utf8(data, pos, mask, length, kMinUTF8Ratio)) { return ContextType::CONTEXT_SIGNED; } ContextType::CONTEXT_UTF8 } #[derive(PartialEq, Eq, Copy, Clone)] pub enum BrotliEncoderOperation { BROTLI_OPERATION_PROCESS = 0, BROTLI_OPERATION_FLUSH = 1, BROTLI_OPERATION_FINISH = 2, BROTLI_OPERATION_EMIT_METADATA = 3, } #[allow(unused)] fn MakeUncompressedStream(input: &[u8], input_size: usize, output: &mut [u8]) -> usize { let mut size: usize = input_size; let mut result: usize = 0usize; let mut offset: usize = 0usize; if input_size == 0usize { output[0] = 6u8; return 1; } output[result] = 0x21u8; result = result.wrapping_add(1); output[result] = 0x3u8; result = result.wrapping_add(1); while size > 0usize { let mut nibbles: u32 = 0u32; let chunk_size: u32 = if size > (1u32 << 24) as usize { 1u32 << 24 } else { size as u32 }; if chunk_size > 1u32 << 16 { nibbles = if chunk_size > 1u32 << 20 { 2i32 } else { 1i32 } as u32; } let bits: u32 = nibbles << 1 | chunk_size.wrapping_sub(1) << 3 | 1u32 << (19u32).wrapping_add((4u32).wrapping_mul(nibbles)); output[result] = bits as u8; result = result.wrapping_add(1); output[result] = (bits >> 8) as u8; result = result.wrapping_add(1); output[result] = (bits >> 16) as u8; result = result.wrapping_add(1); if nibbles == 2u32 { output[result] = (bits >> 24) as u8; result = result.wrapping_add(1); } output[result..(result + chunk_size as usize)] .clone_from_slice(&input[offset..(offset + chunk_size as usize)]); result = result.wrapping_add(chunk_size as usize); offset = offset.wrapping_add(chunk_size as usize); size = size.wrapping_sub(chunk_size as usize); } output[result] = 3u8; result = result.wrapping_add(1); result } #[cfg_attr(not(feature = "ffi-api"), cfg(test))] pub(crate) fn encoder_compress< Alloc: BrotliAlloc, MetablockCallback: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], interface::InputPair, &mut Alloc, ), >( empty_m8: Alloc, m8: &mut Alloc, mut quality: i32, lgwin: i32, mode: BrotliEncoderMode, input_size: usize, input_buffer: &[u8], encoded_size: &mut usize, encoded_buffer: &mut [u8], metablock_callback: &mut MetablockCallback, ) -> bool { let out_size: usize = *encoded_size; let input_start = input_buffer; let output_start = encoded_buffer; let max_out_size: usize = BrotliEncoderMaxCompressedSize(input_size); if out_size == 0 { return false; } if input_size == 0 { *encoded_size = 1; output_start[0] = 6; return true; } let mut is_fallback = false; let mut is_9_5 = false; if quality == 10 { quality = 9; is_9_5 = true; } if !is_fallback { let mut s_orig = BrotliEncoderStateStruct::new(core::mem::replace(m8, empty_m8)); if is_9_5 { let mut params = BrotliEncoderParams::default(); params.q9_5 = true; params.quality = 10; ChooseHasher(&mut params); s_orig.hasher_ = BrotliMakeHasher(m8, ¶ms, None /*no custom dict */); } let mut result: bool; { let s = &mut s_orig; let mut available_in: usize = input_size; let next_in_array: &[u8] = input_buffer; let mut next_in_offset: usize = 0; let mut available_out: usize = *encoded_size; let next_out_array: &mut [u8] = output_start; let mut next_out_offset: usize = 0; let mut total_out = Some(0); s.set_parameter(BrotliEncoderParameter::BROTLI_PARAM_QUALITY, quality as u32); s.set_parameter(BrotliEncoderParameter::BROTLI_PARAM_LGWIN, lgwin as u32); s.set_parameter(BrotliEncoderParameter::BROTLI_PARAM_MODE, mode as u32); s.set_parameter( BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, input_size as u32, ); if lgwin > BROTLI_MAX_WINDOW_BITS as i32 { s.set_parameter(BrotliEncoderParameter::BROTLI_PARAM_LARGE_WINDOW, 1); } result = s.compress_stream( BrotliEncoderOperation::BROTLI_OPERATION_FINISH, &mut available_in, next_in_array, &mut next_in_offset, &mut available_out, next_out_array, &mut next_out_offset, &mut total_out, metablock_callback, ); if !s.is_finished() { result = false; } *encoded_size = total_out.unwrap(); BrotliEncoderDestroyInstance(s); } let _ = core::mem::replace(m8, s_orig.m8); if !result || max_out_size != 0 && (*encoded_size > max_out_size) { is_fallback = true; } else { return true; } } assert_ne!(is_fallback, false); *encoded_size = 0; if max_out_size == 0 { return false; } if out_size >= max_out_size { *encoded_size = MakeUncompressedStream(input_start, input_size, output_start); return true; } false } impl BrotliEncoderStateStruct { fn inject_byte_padding_block(&mut self) { let mut seal: u32 = self.last_bytes_ as u32; let mut seal_bits: usize = self.last_bytes_bits_ as usize; let destination: &mut [u8]; self.last_bytes_ = 0; self.last_bytes_bits_ = 0; seal |= 0x6u32 << seal_bits; seal_bits = seal_bits.wrapping_add(6); if !IsNextOutNull(&self.next_out_) { destination = &mut GetNextOut!(*self)[self.available_out_..]; } else { destination = &mut self.tiny_buf_[..]; self.next_out_ = NextOut::TinyBuf(0); } destination[0] = seal as u8; if seal_bits > 8usize { destination[1] = (seal >> 8) as u8; } if seal_bits > 16usize { destination[2] = (seal >> 16) as u8; } self.available_out_ = self .available_out_ .wrapping_add(seal_bits.wrapping_add(7) >> 3); } fn inject_flush_or_push_output( &mut self, available_out: &mut usize, next_out_array: &mut [u8], next_out_offset: &mut usize, total_out: &mut Option, ) -> bool { if self.stream_state_ as i32 == BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED as i32 && (self.last_bytes_bits_ as i32 != 0i32) { self.inject_byte_padding_block(); return true; } if self.available_out_ != 0usize && (*available_out != 0usize) { let copy_output_size: usize = min(self.available_out_, *available_out); (*next_out_array)[(*next_out_offset)..(*next_out_offset + copy_output_size)] .clone_from_slice(&GetNextOut!(self)[..copy_output_size]); //memcpy(*next_out, s.next_out_, copy_output_size); *next_out_offset = next_out_offset.wrapping_add(copy_output_size); *available_out = available_out.wrapping_sub(copy_output_size); self.next_out_ = NextOutIncrement(&self.next_out_, (copy_output_size as i32)); self.available_out_ = self.available_out_.wrapping_sub(copy_output_size); self.total_out_ = self.total_out_.wrapping_add(copy_output_size as u64); if let &mut Some(ref mut total_out_inner) = total_out { *total_out_inner = self.total_out_ as usize; } return true; } false } fn unprocessed_input_size(&self) -> u64 { self.input_pos_.wrapping_sub(self.last_processed_pos_) } fn update_size_hint(&mut self, available_in: usize) { if self.params.size_hint == 0usize { let delta: u64 = self.unprocessed_input_size(); let tail: u64 = available_in as u64; let limit: u32 = 1u32 << 30; let total: u32; if delta >= u64::from(limit) || tail >= u64::from(limit) || delta.wrapping_add(tail) >= u64::from(limit) { total = limit; } else { total = delta.wrapping_add(tail) as u32; } self.params.size_hint = total as usize; } } } fn WrapPosition(position: u64) -> u32 { let mut result: u32 = position as u32; let gb: u64 = position >> 30; if gb > 2 { result = result & (1u32 << 30).wrapping_sub(1) | ((gb.wrapping_sub(1) & 1) as u32).wrapping_add(1) << 30; } result } impl BrotliEncoderStateStruct { fn get_brotli_storage(&mut self, size: usize) { if self.storage_size_ < size { >::free_cell(&mut self.m8, core::mem::take(&mut self.storage_)); self.storage_ = allocate::(&mut self.m8, size); self.storage_size_ = size; } } } fn MaxHashTableSize(quality: i32) -> usize { (if quality == 0i32 { 1i32 << 15 } else { 1i32 << 17 }) as usize } fn HashTableSize(max_table_size: usize, input_size: usize) -> usize { let mut htsize: usize = 256usize; while htsize < max_table_size && (htsize < input_size) { htsize <<= 1i32; } htsize } macro_rules! GetHashTable { ($s : expr, $quality: expr, $input_size : expr, $table_size : expr) => { GetHashTableInternal( &mut $s.m8, &mut $s.small_table_, &mut $s.large_table_, $quality, $input_size, $table_size, ) }; } fn GetHashTableInternal<'a, AllocI32: alloc::Allocator>( mi32: &mut AllocI32, small_table_: &'a mut [i32; 1024], large_table_: &'a mut AllocI32::AllocatedMemory, quality: i32, input_size: usize, table_size: &mut usize, ) -> &'a mut [i32] { let max_table_size: usize = MaxHashTableSize(quality); let mut htsize: usize = HashTableSize(max_table_size, input_size); let table: &mut [i32]; if quality == 0i32 && htsize & 0xaaaaausize == 0usize { htsize <<= 1i32; } if htsize <= small_table_.len() { table = &mut small_table_[..]; } else { if htsize > large_table_.slice().len() { //s.large_table_size_ = htsize; { mi32.free_cell(core::mem::take(large_table_)); } *large_table_ = mi32.alloc_cell(htsize); } table = large_table_.slice_mut(); } *table_size = htsize; for item in table[..htsize].iter_mut() { *item = 0; } table // FIXME: probably need a macro to do this without borrowing the whole EncoderStateStruct } impl BrotliEncoderStateStruct { fn update_last_processed_pos(&mut self) -> bool { let wrapped_last_processed_pos: u32 = WrapPosition(self.last_processed_pos_); let wrapped_input_pos: u32 = WrapPosition(self.input_pos_); self.last_processed_pos_ = self.input_pos_; wrapped_input_pos < wrapped_last_processed_pos } } fn MaxMetablockSize(params: &BrotliEncoderParams) -> usize { 1 << min(ComputeRbBits(params), 24) } fn ChooseContextMap( quality: i32, bigram_histo: &mut [u32], num_literal_contexts: &mut usize, literal_context_map: &mut &[u32], ) { static kStaticContextMapContinuation: [u32; 64] = [ 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; static kStaticContextMapSimpleUTF8: [u32; 64] = [ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; let mut monogram_histo = [0u32; 3]; let mut two_prefix_histo = [0u32; 6]; let mut i: usize; let mut entropy = [0.0 as floatX; 4]; i = 0usize; while i < 9usize { { { let _rhs = bigram_histo[i]; let _lhs = &mut monogram_histo[i.wrapping_rem(3)]; *_lhs = (*_lhs).wrapping_add(_rhs); } { let _rhs = bigram_histo[i]; let _lhs = &mut two_prefix_histo[i.wrapping_rem(6)]; *_lhs = (*_lhs).wrapping_add(_rhs); } } i = i.wrapping_add(1); } entropy[1] = shannon_entropy(&monogram_histo[..], 3).0; entropy[2] = shannon_entropy(&two_prefix_histo[..], 3).0 + shannon_entropy(&two_prefix_histo[3..], 3).0; entropy[3] = 0.0; for i in 0usize..3usize { entropy[3] += shannon_entropy(&bigram_histo[(3usize).wrapping_mul(i)..], 3).0; } let total: usize = monogram_histo[0] .wrapping_add(monogram_histo[1]) .wrapping_add(monogram_histo[2]) as usize; entropy[0] = 1.0 / (total as floatX); entropy[1] *= entropy[0]; entropy[2] *= entropy[0]; entropy[3] *= entropy[0]; if quality < 7i32 { entropy[3] = entropy[1] * 10.0; } if entropy[1] - entropy[2] < 0.2 && entropy[1] - entropy[3] < 0.2 { *num_literal_contexts = 1; } else if entropy[2] - entropy[3] < 0.02 { *num_literal_contexts = 2usize; *literal_context_map = &kStaticContextMapSimpleUTF8[..]; } else { *num_literal_contexts = 3usize; *literal_context_map = &kStaticContextMapContinuation[..]; } } static kStaticContextMapComplexUTF8: [u32; 64] = [ 11, 11, 12, 12, /* 0 special */ 0, 0, 0, 0, /* 4 lf */ 1, 1, 9, 9, /* 8 space */ 2, 2, 2, 2, /* !, first after space/lf and after something else. */ 1, 1, 1, 1, /* " */ 8, 3, 3, 3, /* % */ 1, 1, 1, 1, /* ({[ */ 2, 2, 2, 2, /* }]) */ 8, 4, 4, 4, /* :; */ 8, 7, 4, 4, /* . */ 8, 0, 0, 0, /* > */ 3, 3, 3, 3, /* [0..9] */ 5, 5, 10, 5, /* [A-Z] */ 5, 5, 10, 5, 6, 6, 6, 6, /* [a-z] */ 6, 6, 6, 6, ]; /* Decide if we want to use a more complex static context map containing 13 context values, based on the entropy reduction of histograms over the first 5 bits of literals. */ fn ShouldUseComplexStaticContextMap( input: &[u8], mut start_pos: usize, length: usize, mask: usize, quality: i32, size_hint: usize, num_literal_contexts: &mut usize, literal_context_map: &mut &[u32], ) -> bool { let _ = quality; //BROTLI_UNUSED(quality); /* Try the more complex static context map only for long data. */ if (size_hint < (1 << 20)) { false } else { let end_pos = start_pos + length; /* To make entropy calculations faster and to fit on the stack, we collect histograms over the 5 most significant bits of literals. One histogram without context and 13 additional histograms for each context value. */ let mut combined_histo: [u32; 32] = [0; 32]; let mut context_histo: [[u32; 32]; 13] = [[0; 32]; 13]; let mut total = 0u32; let mut entropy = [0.0 as floatX; 3]; let utf8_lut = BROTLI_CONTEXT_LUT(ContextType::CONTEXT_UTF8); while start_pos + 64 <= end_pos { let stride_end_pos = start_pos + 64; let mut prev2 = input[start_pos & mask]; let mut prev1 = input[(start_pos + 1) & mask]; /* To make the analysis of the data faster we only examine 64 byte long strides at every 4kB intervals. */ for pos in start_pos + 2..stride_end_pos { let literal = input[pos & mask]; let context = kStaticContextMapComplexUTF8 [BROTLI_CONTEXT(prev1, prev2, utf8_lut) as usize] as u8; total += 1; combined_histo[(literal >> 3) as usize] += 1; context_histo[context as usize][(literal >> 3) as usize] += 1; prev2 = prev1; prev1 = literal; } start_pos += 4096; } entropy[1] = shannon_entropy(&combined_histo[..], 32).0; entropy[2] = 0.0; for i in 0..13 { assert!(i < 13); entropy[2] += shannon_entropy(&context_histo[i][..], 32).0; } entropy[0] = 1.0 / (total as floatX); entropy[1] *= entropy[0]; entropy[2] *= entropy[0]; /* The triggering heuristics below were tuned by compressing the individual files of the silesia corpus. If we skip this kind of context modeling for not very well compressible input (i.e. entropy using context modeling is 60% of maximal entropy) or if expected savings by symbol are less than 0.2 bits, then in every case when it triggers, the final compression ratio is improved. Note however that this heuristics might be too strict for some cases and could be tuned further. */ if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) { false } else { *num_literal_contexts = 13; *literal_context_map = &kStaticContextMapComplexUTF8; true } } } fn DecideOverLiteralContextModeling( input: &[u8], mut start_pos: usize, length: usize, mask: usize, quality: i32, size_hint: usize, num_literal_contexts: &mut usize, literal_context_map: &mut &[u32], ) { if quality < 5i32 || length < 64usize { } else if ShouldUseComplexStaticContextMap( input, start_pos, length, mask, quality, size_hint, num_literal_contexts, literal_context_map, ) { } else { let end_pos: usize = start_pos.wrapping_add(length); let mut bigram_prefix_histo = [0u32; 9]; while start_pos.wrapping_add(64) <= end_pos { { static lut: [i32; 4] = [0, 0, 1, 2]; let stride_end_pos: usize = start_pos.wrapping_add(64); let mut prev: i32 = lut[(input[(start_pos & mask)] as i32 >> 6) as usize] * 3i32; let mut pos: usize; pos = start_pos.wrapping_add(1); while pos < stride_end_pos { { let literal: u8 = input[(pos & mask)]; { let _rhs = 1; let cur_ind = (prev + lut[(literal as i32 >> 6) as usize]); let _lhs = &mut bigram_prefix_histo[cur_ind as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } prev = lut[(literal as i32 >> 6) as usize] * 3i32; } pos = pos.wrapping_add(1); } } start_pos = start_pos.wrapping_add(4096); } ChooseContextMap( quality, &mut bigram_prefix_histo[..], num_literal_contexts, literal_context_map, ); } } fn WriteMetaBlockInternal( alloc: &mut Alloc, data: &[u8], mask: usize, last_flush_pos: u64, bytes: usize, mut is_last: bool, literal_context_mode: ContextType, params: &BrotliEncoderParams, lit_scratch_space: &mut ::i32vec, cmd_scratch_space: &mut ::i32vec, dst_scratch_space: &mut ::i32vec, prev_byte: u8, prev_byte2: u8, num_literals: usize, num_commands: usize, commands: &mut [Command], saved_dist_cache: &[i32; kNumDistanceCacheEntries], dist_cache: &mut [i32; 16], recoder_state: &mut RecoderState, storage_ix: &mut usize, storage: &mut [u8], cb: &mut Cb, ) where Cb: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], interface::InputPair, &mut Alloc, ), { let actual_is_last = is_last; if params.appendable { is_last = false; } else { assert!(!params.catable); // Sanitize Params senforces this constraint } let wrapped_last_flush_pos: u32 = WrapPosition(last_flush_pos); let literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode); let mut block_params = params.clone(); if bytes == 0usize { BrotliWriteBits(2usize, 3, storage_ix, storage); *storage_ix = storage_ix.wrapping_add(7u32 as usize) & !7u32 as usize; return; } if !should_compress( data, mask, last_flush_pos, bytes, num_literals, num_commands, ) { dist_cache[..4].clone_from_slice(&saved_dist_cache[..4]); store_uncompressed_meta_block( alloc, is_last, data, wrapped_last_flush_pos as usize, mask, params, bytes, recoder_state, storage_ix, storage, false, cb, ); if actual_is_last != is_last { BrotliWriteEmptyLastMetaBlock(storage_ix, storage) } return; } let saved_byte_location = (*storage_ix) >> 3; let last_bytes: u16 = ((storage[saved_byte_location + 1] as u16) << 8) | storage[saved_byte_location] as u16; let last_bytes_bits: u8 = *storage_ix as u8; /*if params.dist.num_direct_distance_codes != 0 || params.dist.distance_postfix_bits != 0 { RecomputeDistancePrefixes(commands, num_commands, params.dist.num_direct_distance_codes, params.dist.distance_postfix_bits); }*/ // why was this removed?? if params.quality <= 2 { store_meta_block_fast( alloc, data, wrapped_last_flush_pos as usize, bytes, mask, is_last, params, saved_dist_cache, commands, num_commands, recoder_state, storage_ix, storage, cb, ); } else if params.quality < 4 { store_meta_block_trivial( alloc, data, wrapped_last_flush_pos as usize, bytes, mask, is_last, params, saved_dist_cache, commands, num_commands, recoder_state, storage_ix, storage, cb, ); } else { //let mut literal_context_mode: ContextType = ContextType::CONTEXT_UTF8; let mut mb = MetaBlockSplit::::new(); if params.quality < 10i32 { let mut num_literal_contexts: usize = 1; let mut literal_context_map: &[u32] = &[]; if params.disable_literal_context_modeling == 0 { DecideOverLiteralContextModeling( data, wrapped_last_flush_pos as usize, bytes, mask, params.quality, params.size_hint, &mut num_literal_contexts, &mut literal_context_map, ); } BrotliBuildMetaBlockGreedy( alloc, data, wrapped_last_flush_pos as usize, mask, prev_byte, prev_byte2, literal_context_mode, literal_context_lut, num_literal_contexts, literal_context_map, commands, num_commands, &mut mb, ); } else { BrotliBuildMetaBlock( alloc, data, wrapped_last_flush_pos as usize, mask, &mut block_params, prev_byte, prev_byte2, commands, num_commands, literal_context_mode, lit_scratch_space, cmd_scratch_space, dst_scratch_space, &mut mb, ); } if params.quality >= 4i32 { let mut num_effective_dist_codes = block_params.dist.alphabet_size; if num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS as u32 { num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS as u32; } BrotliOptimizeHistograms(num_effective_dist_codes as usize, &mut mb); } store_meta_block( alloc, data, wrapped_last_flush_pos as usize, bytes, mask, prev_byte, prev_byte2, is_last, &block_params, literal_context_mode, saved_dist_cache, commands, num_commands, &mut mb, recoder_state, storage_ix, storage, cb, ); mb.destroy(alloc); } if bytes + 4 + saved_byte_location < (*storage_ix >> 3) { dist_cache[..4].clone_from_slice(&saved_dist_cache[..4]); //memcpy(dist_cache, // saved_dist_cache, // (4usize).wrapping_mul(::core::mem::size_of::())); storage[saved_byte_location] = last_bytes as u8; storage[saved_byte_location + 1] = (last_bytes >> 8) as u8; *storage_ix = last_bytes_bits as usize; store_uncompressed_meta_block( alloc, is_last, data, wrapped_last_flush_pos as usize, mask, params, bytes, recoder_state, storage_ix, storage, true, cb, ); } if actual_is_last != is_last { BrotliWriteEmptyLastMetaBlock(storage_ix, storage) } } fn ChooseDistanceParams(params: &mut BrotliEncoderParams) { let mut num_direct_distance_codes = 0u32; let mut distance_postfix_bits = 0u32; if params.quality >= 4 { if params.mode == BrotliEncoderMode::BROTLI_MODE_FONT { distance_postfix_bits = 1; num_direct_distance_codes = 12; } else { distance_postfix_bits = params.dist.distance_postfix_bits; num_direct_distance_codes = params.dist.num_direct_distance_codes; } let ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0f; if distance_postfix_bits > BROTLI_MAX_NPOSTFIX as u32 || num_direct_distance_codes > BROTLI_MAX_NDIRECT as u32 || (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes { distance_postfix_bits = 0; num_direct_distance_codes = 0; } } BrotliInitDistanceParams(params, distance_postfix_bits, num_direct_distance_codes); /*( if (params.large_window) { max_distance = BROTLI_MAX_ALLOWED_DISTANCE; if (num_direct_distance_codes != 0 || distance_postfix_bits != 0) { max_distance = (3 << 29) - 4; } alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE( num_direct_distance_codes, distance_postfix_bits, BROTLI_LARGE_MAX_DISTANCE_BITS); } else { alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE( num_direct_distance_codes, distance_postfix_bits, BROTLI_MAX_DISTANCE_BITS); } params.dist.num_direct_distance_codes = num_direct_distance_codes; params.dist.distance_postfix_bits = distance_postfix_bits; params.dist.alphabet_size = alphabet_size; params.dist.max_distance = max_distance;*/ } impl BrotliEncoderStateStruct { fn encode_data( &mut self, is_last: bool, force_flush: bool, out_size: &mut usize, callback: &mut MetablockCallback, // mut output: &'a mut &'a mut [u8] ) -> bool where MetablockCallback: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], interface::InputPair, &mut Alloc, ), { let mut delta: u64 = self.unprocessed_input_size(); let mut bytes: u32 = delta as u32; let mask = self.ringbuffer_.mask_; if !self.ensure_initialized() { return false; } let dictionary = BrotliGetDictionary(); if self.is_last_block_emitted_ { return false; } if is_last { self.is_last_block_emitted_ = true; } if delta > self.input_block_size() as u64 { return false; } let mut storage_ix: usize = usize::from(self.last_bytes_bits_); { let meta_size = max( bytes as usize, self.input_pos_.wrapping_sub(self.last_flush_pos_) as usize, ); self.get_brotli_storage((2usize).wrapping_mul(meta_size).wrapping_add(503 + 24)); } { self.storage_.slice_mut()[0] = self.last_bytes_ as u8; self.storage_.slice_mut()[1] = (self.last_bytes_ >> 8) as u8; } let mut catable_header_size = 0; if let IsFirst::NothingWritten = self.is_first_mb { if self.params.magic_number { BrotliWriteMetadataMetaBlock( &self.params, &mut storage_ix, self.storage_.slice_mut(), ); self.last_bytes_ = self.storage_.slice()[(storage_ix >> 3)] as u16 | ((self.storage_.slice()[1 + (storage_ix >> 3)] as u16) << 8); self.last_bytes_bits_ = (storage_ix & 7u32 as usize) as u8; self.next_out_ = NextOut::DynamicStorage(0); catable_header_size = storage_ix >> 3; *out_size = catable_header_size; self.is_first_mb = IsFirst::HeaderWritten; } } if let IsFirst::BothCatableBytesWritten = self.is_first_mb { // nothing to do here, move along } else if !self.params.catable { self.is_first_mb = IsFirst::BothCatableBytesWritten; } else if bytes != 0 { assert!(self.last_processed_pos_ < 2 || self.custom_dictionary); let num_bytes_to_write_uncompressed: usize = min(2, bytes as usize); { let data = &mut self.ringbuffer_.data_mo.slice_mut()[self.ringbuffer_.buffer_index..]; store_uncompressed_meta_block( &mut self.m8, false, data, self.last_flush_pos_ as usize, mask as usize, &self.params, num_bytes_to_write_uncompressed, &mut self.recoder_state, &mut storage_ix, self.storage_.slice_mut(), false, /* suppress meta-block logging */ callback, ); self.last_bytes_ = self.storage_.slice()[(storage_ix >> 3)] as u16 | ((self.storage_.slice()[1 + (storage_ix >> 3)] as u16) << 8); self.last_bytes_bits_ = (storage_ix & 7u32 as usize) as u8; self.prev_byte2_ = self.prev_byte_; self.prev_byte_ = data[self.last_flush_pos_ as usize & mask as usize]; if num_bytes_to_write_uncompressed == 2 { self.prev_byte2_ = self.prev_byte_; self.prev_byte_ = data[(self.last_flush_pos_ + 1) as usize & mask as usize]; } } self.last_flush_pos_ += num_bytes_to_write_uncompressed as u64; bytes -= num_bytes_to_write_uncompressed as u32; self.last_processed_pos_ += num_bytes_to_write_uncompressed as u64; if num_bytes_to_write_uncompressed >= 2 { self.is_first_mb = IsFirst::BothCatableBytesWritten; } else if num_bytes_to_write_uncompressed == 1 { if let IsFirst::FirstCatableByteWritten = self.is_first_mb { self.is_first_mb = IsFirst::BothCatableBytesWritten; } else { self.is_first_mb = IsFirst::FirstCatableByteWritten; } } catable_header_size = storage_ix >> 3; self.next_out_ = NextOut::DynamicStorage(0); *out_size = catable_header_size; delta = self.unprocessed_input_size(); } let mut wrapped_last_processed_pos: u32 = WrapPosition(self.last_processed_pos_); if self.params.quality == 1i32 && self.command_buf_.slice().is_empty() { let new_buf = allocate::(&mut self.m8, kCompressFragmentTwoPassBlockSize); self.command_buf_ = new_buf; let new_buf8 = allocate::(&mut self.m8, kCompressFragmentTwoPassBlockSize); self.literal_buf_ = new_buf8; } if self.params.quality == 0i32 || self.params.quality == 1i32 { let mut table_size: usize = 0; { if delta == 0 && !is_last { *out_size = catable_header_size; return true; } let data = &mut self.ringbuffer_.data_mo.slice_mut()[self.ringbuffer_.buffer_index..]; //s.storage_.slice_mut()[0] = (*s).last_bytes_ as u8; // s.storage_.slice_mut()[1] = ((*s).last_bytes_ >> 8) as u8; let table: &mut [i32] = GetHashTable!(self, self.params.quality, bytes as usize, &mut table_size); if self.params.quality == 0i32 { compress_fragment_fast( &mut self.m8, &mut data[((wrapped_last_processed_pos & mask) as usize)..], bytes as usize, is_last, table, table_size, &mut self.cmd_depths_[..], &mut self.cmd_bits_[..], &mut self.cmd_code_numbits_, &mut self.cmd_code_[..], &mut storage_ix, self.storage_.slice_mut(), ); } else { compress_fragment_two_pass( &mut self.m8, &mut data[((wrapped_last_processed_pos & mask) as usize)..], bytes as usize, is_last, self.command_buf_.slice_mut(), self.literal_buf_.slice_mut(), table, table_size, &mut storage_ix, self.storage_.slice_mut(), ); } self.last_bytes_ = self.storage_.slice()[(storage_ix >> 3)] as u16 | ((self.storage_.slice()[(storage_ix >> 3) + 1] as u16) << 8); self.last_bytes_bits_ = (storage_ix & 7u32 as usize) as u8; } self.update_last_processed_pos(); // *output = &mut s.storage_.slice_mut(); self.next_out_ = NextOut::DynamicStorage(0); // this always returns that *out_size = storage_ix >> 3; return true; } { let mut newsize: usize = self .num_commands_ .wrapping_add(bytes.wrapping_div(2) as usize) .wrapping_add(1); if newsize > self.cmd_alloc_size_ { newsize = newsize.wrapping_add(bytes.wrapping_div(4).wrapping_add(16) as usize); self.cmd_alloc_size_ = newsize; let mut new_commands = allocate::(&mut self.m8, newsize); if !self.commands_.slice().is_empty() { new_commands.slice_mut()[..self.num_commands_] .clone_from_slice(&self.commands_.slice()[..self.num_commands_]); >::free_cell( &mut self.m8, core::mem::take(&mut self.commands_), ); } self.commands_ = new_commands; } } InitOrStitchToPreviousBlock( &mut self.m8, &mut self.hasher_, &mut self.ringbuffer_.data_mo.slice_mut()[self.ringbuffer_.buffer_index..], mask as usize, self.custom_dictionary_size, &mut self.params, wrapped_last_processed_pos as usize, bytes as usize, is_last, ); let literal_context_mode = ChooseContextMode( &self.params, self.ringbuffer_.data_mo.slice(), WrapPosition(self.last_flush_pos_) as usize, mask as usize, (self.input_pos_.wrapping_sub(self.last_flush_pos_)) as usize, ); if self.num_commands_ != 0 && self.last_insert_len_ == 0 { self.extend_last_command(&mut bytes, &mut wrapped_last_processed_pos); } BrotliCreateBackwardReferences( &mut self.m8, dictionary, bytes as usize, wrapped_last_processed_pos as usize, &mut self.ringbuffer_.data_mo.slice_mut()[self.ringbuffer_.buffer_index..], mask as usize, self.custom_dictionary_size, &mut self.params, &mut self.hasher_, &mut self.dist_cache_, &mut self.last_insert_len_, &mut self.commands_.slice_mut()[self.num_commands_..], &mut self.num_commands_, &mut self.num_literals_, ); { let max_length: usize = MaxMetablockSize(&mut self.params); let max_literals: usize = max_length.wrapping_div(8); let max_commands: usize = max_length.wrapping_div(8); let processed_bytes: usize = self.input_pos_.wrapping_sub(self.last_flush_pos_) as usize; let next_input_fits_metablock = processed_bytes.wrapping_add(self.input_block_size()) <= max_length; let should_flush = self.params.quality < 4 && self.num_literals_.wrapping_add(self.num_commands_) >= 0x2fff; if !is_last && !force_flush && !should_flush && next_input_fits_metablock && self.num_literals_ < max_literals && self.num_commands_ < max_commands { if self.update_last_processed_pos() { HasherReset(&mut self.hasher_); } *out_size = catable_header_size; return true; } } if self.last_insert_len_ > 0usize { self.commands_.slice_mut()[self.num_commands_].init_insert(self.last_insert_len_); self.num_commands_ = self.num_commands_.wrapping_add(1); self.num_literals_ = self.num_literals_.wrapping_add(self.last_insert_len_); self.last_insert_len_ = 0usize; } if !is_last && self.input_pos_ == self.last_flush_pos_ { *out_size = catable_header_size; return true; } { let metablock_size: u32 = self.input_pos_.wrapping_sub(self.last_flush_pos_) as u32; //let mut storage_ix: usize = s.last_bytes_bits_ as usize; //s.storage_.slice_mut()[0] = (*s).last_bytes_ as u8; //s.storage_.slice_mut()[1] = ((*s).last_bytes_ >> 8) as u8; WriteMetaBlockInternal( &mut self.m8, &mut self.ringbuffer_.data_mo.slice_mut()[self.ringbuffer_.buffer_index..], mask as usize, self.last_flush_pos_, metablock_size as usize, is_last, literal_context_mode, &mut self.params, &mut self.literal_scratch_space, &mut self.command_scratch_space, &mut self.distance_scratch_space, self.prev_byte_, self.prev_byte2_, self.num_literals_, self.num_commands_, self.commands_.slice_mut(), &mut self.saved_dist_cache_, &mut self.dist_cache_, &mut self.recoder_state, &mut storage_ix, self.storage_.slice_mut(), callback, ); self.last_bytes_ = self.storage_.slice()[(storage_ix >> 3)] as u16 | ((self.storage_.slice()[1 + (storage_ix >> 3)] as u16) << 8); self.last_bytes_bits_ = (storage_ix & 7u32 as usize) as u8; self.last_flush_pos_ = self.input_pos_; if self.update_last_processed_pos() { HasherReset(&mut self.hasher_); } let data = &self.ringbuffer_.data_mo.slice()[self.ringbuffer_.buffer_index..]; if self.last_flush_pos_ > 0 { self.prev_byte_ = data[(((self.last_flush_pos_ as u32).wrapping_sub(1) & mask) as usize)]; } if self.last_flush_pos_ > 1 { self.prev_byte2_ = data[((self.last_flush_pos_.wrapping_sub(2) as u32 & mask) as usize)]; } self.num_commands_ = 0usize; self.num_literals_ = 0usize; self.saved_dist_cache_ .clone_from_slice(self.dist_cache_.split_at(4).0); self.next_out_ = NextOut::DynamicStorage(0); // this always returns that *out_size = storage_ix >> 3; true } } fn write_metadata_header(&mut self) -> usize { let block_size = self.remaining_metadata_bytes_ as usize; let header = GetNextOut!(*self); let mut storage_ix: usize; storage_ix = self.last_bytes_bits_ as usize; header[0] = self.last_bytes_ as u8; header[1] = (self.last_bytes_ >> 8) as u8; self.last_bytes_ = 0; self.last_bytes_bits_ = 0; BrotliWriteBits(1, 0, &mut storage_ix, header); BrotliWriteBits(2usize, 3, &mut storage_ix, header); BrotliWriteBits(1, 0, &mut storage_ix, header); if block_size == 0usize { BrotliWriteBits(2usize, 0, &mut storage_ix, header); } else { let nbits: u32 = if block_size == 1 { 0u32 } else { Log2FloorNonZero((block_size as u32).wrapping_sub(1) as (u64)).wrapping_add(1) }; let nbytes: u32 = nbits.wrapping_add(7).wrapping_div(8); BrotliWriteBits(2usize, nbytes as (u64), &mut storage_ix, header); BrotliWriteBits( (8u32).wrapping_mul(nbytes) as usize, block_size.wrapping_sub(1) as u64, &mut storage_ix, header, ); } storage_ix.wrapping_add(7u32 as usize) >> 3 } } impl BrotliEncoderStateStruct { fn process_metadata< MetaBlockCallback: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], interface::InputPair, &mut Alloc, ), >( &mut self, available_in: &mut usize, next_in_array: &[u8], next_in_offset: &mut usize, available_out: &mut usize, next_out_array: &mut [u8], next_out_offset: &mut usize, total_out: &mut Option, metablock_callback: &mut MetaBlockCallback, ) -> bool { if *available_in > (1u32 << 24) as usize { return false; } if self.stream_state_ as i32 == BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING as i32 { self.remaining_metadata_bytes_ = *available_in as u32; self.stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_METADATA_HEAD; } if self.stream_state_ as i32 != BrotliEncoderStreamState::BROTLI_STREAM_METADATA_HEAD as i32 && (self.stream_state_ as i32 != BrotliEncoderStreamState::BROTLI_STREAM_METADATA_BODY as i32) { return false; } loop { if self.inject_flush_or_push_output( available_out, next_out_array, next_out_offset, total_out, ) { continue; } if self.available_out_ != 0usize { break; } if self.input_pos_ != self.last_flush_pos_ { let mut avail_out: usize = self.available_out_; let result = self.encode_data(false, true, &mut avail_out, metablock_callback); self.available_out_ = avail_out; if !result { return false; } continue; } if self.stream_state_ as i32 == BrotliEncoderStreamState::BROTLI_STREAM_METADATA_HEAD as i32 { self.next_out_ = NextOut::TinyBuf(0); self.available_out_ = self.write_metadata_header(); self.stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_METADATA_BODY; { continue; } } else { if self.remaining_metadata_bytes_ == 0u32 { self.remaining_metadata_bytes_ = u32::MAX; self.stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING; { break; } } if *available_out != 0 { let copy: u32 = min(self.remaining_metadata_bytes_ as usize, *available_out) as u32; next_out_array[*next_out_offset..(*next_out_offset + copy as usize)] .clone_from_slice( &next_in_array[*next_in_offset..(*next_in_offset + copy as usize)], ); //memcpy(*next_out, *next_in, copy as usize); // *next_in = next_in.offset(copy as isize); *next_in_offset += copy as usize; *available_in = available_in.wrapping_sub(copy as usize); self.remaining_metadata_bytes_ = self.remaining_metadata_bytes_.wrapping_sub(copy); *next_out_offset += copy as usize; // *next_out = next_out.offset(copy as isize); *available_out = available_out.wrapping_sub(copy as usize); } else { let copy: u32 = min(self.remaining_metadata_bytes_, 16u32); self.next_out_ = NextOut::TinyBuf(0); GetNextOut!(self)[..(copy as usize)].clone_from_slice( &next_in_array[*next_in_offset..(*next_in_offset + copy as usize)], ); //memcpy(s.next_out_, *next_in, copy as usize); // *next_in = next_in.offset(copy as isize); *next_in_offset += copy as usize; *available_in = available_in.wrapping_sub(copy as usize); self.remaining_metadata_bytes_ = self.remaining_metadata_bytes_.wrapping_sub(copy); self.available_out_ = copy as usize; } { continue; } } } true } } fn CheckFlushCompleteInner( stream_state: &mut BrotliEncoderStreamState, available_out: usize, next_out: &mut NextOut, ) { if *stream_state == BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED && (available_out == 0) { *stream_state = BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING; *next_out = NextOut::None; } } impl BrotliEncoderStateStruct { fn check_flush_complete(&mut self) { CheckFlushCompleteInner( &mut self.stream_state_, self.available_out_, &mut self.next_out_, ); } fn compress_stream_fast( &mut self, op: BrotliEncoderOperation, available_in: &mut usize, next_in_array: &[u8], next_in_offset: &mut usize, available_out: &mut usize, next_out_array: &mut [u8], next_out_offset: &mut usize, total_out: &mut Option, ) -> bool { let block_size_limit: usize = 1 << self.params.lgwin; let buf_size: usize = min( kCompressFragmentTwoPassBlockSize, min(*available_in, block_size_limit), ); let mut command_buf = alloc_default::(); let mut literal_buf = alloc_default::(); if self.params.quality != 0i32 && (self.params.quality != 1i32) { return false; } if self.params.quality == 1i32 { if self.command_buf_.slice().is_empty() && (buf_size == kCompressFragmentTwoPassBlockSize) { self.command_buf_ = allocate::(&mut self.m8, kCompressFragmentTwoPassBlockSize); self.literal_buf_ = allocate::(&mut self.m8, kCompressFragmentTwoPassBlockSize); } if !self.command_buf_.slice().is_empty() { command_buf = core::mem::take(&mut self.command_buf_); literal_buf = core::mem::take(&mut self.literal_buf_); } else { command_buf = allocate::(&mut self.m8, buf_size); literal_buf = allocate::(&mut self.m8, buf_size); } } loop { if self.inject_flush_or_push_output( available_out, next_out_array, next_out_offset, total_out, ) { continue; } if self.available_out_ == 0usize && (self.stream_state_ as i32 == BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING as i32) && (*available_in != 0usize || op as i32 != BrotliEncoderOperation::BROTLI_OPERATION_PROCESS as i32) { let block_size: usize = min(block_size_limit, *available_in); let is_last = *available_in == block_size && op == BrotliEncoderOperation::BROTLI_OPERATION_FINISH; let force_flush = *available_in == block_size && op == BrotliEncoderOperation::BROTLI_OPERATION_FLUSH; let max_out_size: usize = (2usize).wrapping_mul(block_size).wrapping_add(503); let mut inplace: i32 = 1i32; let storage: &mut [u8]; let mut storage_ix: usize = self.last_bytes_bits_ as usize; let mut table_size: usize = 0; if force_flush && block_size == 0 { self.stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED; { continue; } } if max_out_size <= *available_out { storage = &mut next_out_array[*next_out_offset..]; //GetNextOut!(s); } else { inplace = 0i32; self.get_brotli_storage(max_out_size); storage = self.storage_.slice_mut(); } storage[0] = self.last_bytes_ as u8; storage[1] = (self.last_bytes_ >> 8) as u8; let table: &mut [i32] = GetHashTable!(self, self.params.quality, block_size, &mut table_size); if self.params.quality == 0i32 { compress_fragment_fast( &mut self.m8, &(next_in_array)[*next_in_offset..], block_size, is_last, table, table_size, &mut self.cmd_depths_[..], &mut self.cmd_bits_[..], &mut self.cmd_code_numbits_, &mut self.cmd_code_[..], &mut storage_ix, storage, ); } else { compress_fragment_two_pass( &mut self.m8, &(next_in_array)[*next_in_offset..], block_size, is_last, command_buf.slice_mut(), literal_buf.slice_mut(), table, table_size, &mut storage_ix, storage, ); } *next_in_offset += block_size; *available_in = available_in.wrapping_sub(block_size); if inplace != 0 { let out_bytes: usize = storage_ix >> 3; *next_out_offset += out_bytes; *available_out = available_out.wrapping_sub(out_bytes); self.total_out_ = self.total_out_.wrapping_add(out_bytes as u64); if let &mut Some(ref mut total_out_inner) = total_out { *total_out_inner = self.total_out_ as usize; } } else { let out_bytes: usize = storage_ix >> 3; self.next_out_ = NextOut::DynamicStorage(0); self.available_out_ = out_bytes; } self.last_bytes_ = storage[(storage_ix >> 3)] as u16 | ((storage[1 + (storage_ix >> 3)] as u16) << 8); self.last_bytes_bits_ = (storage_ix & 7u32 as usize) as u8; if force_flush { self.stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED; } if is_last { self.stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FINISHED; } { continue; } } { break; } } if command_buf.slice().len() == kCompressFragmentTwoPassBlockSize && self.command_buf_.slice().is_empty() { // undo temporary aliasing of command_buf and literal_buf self.command_buf_ = core::mem::take(&mut command_buf); self.literal_buf_ = core::mem::take(&mut literal_buf); } else { >::free_cell(&mut self.m8, command_buf); >::free_cell(&mut self.m8, literal_buf); } self.check_flush_complete(); true } fn remaining_input_block_size(&mut self) -> usize { let delta: u64 = self.unprocessed_input_size(); let block_size = self.input_block_size(); if delta >= block_size as u64 { return 0usize; } (block_size as u64).wrapping_sub(delta) as usize } pub fn compress_stream< MetablockCallback: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], interface::InputPair, &mut Alloc, ), >( &mut self, op: BrotliEncoderOperation, available_in: &mut usize, next_in_array: &[u8], next_in_offset: &mut usize, available_out: &mut usize, next_out_array: &mut [u8], next_out_offset: &mut usize, total_out: &mut Option, metablock_callback: &mut MetablockCallback, ) -> bool { if !self.ensure_initialized() { return false; } if self.remaining_metadata_bytes_ != u32::MAX { if *available_in != self.remaining_metadata_bytes_ as usize { return false; } if op as i32 != BrotliEncoderOperation::BROTLI_OPERATION_EMIT_METADATA as i32 { return false; } } if op as i32 == BrotliEncoderOperation::BROTLI_OPERATION_EMIT_METADATA as i32 { self.update_size_hint(0); return self.process_metadata( available_in, next_in_array, next_in_offset, available_out, next_out_array, next_out_offset, total_out, metablock_callback, ); } if self.stream_state_ as i32 == BrotliEncoderStreamState::BROTLI_STREAM_METADATA_HEAD as i32 || self.stream_state_ as i32 == BrotliEncoderStreamState::BROTLI_STREAM_METADATA_BODY as i32 { return false; } if self.stream_state_ as i32 != BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING as i32 && (*available_in != 0usize) { return false; } if (self.params.quality == 0i32 || self.params.quality == 1i32) && !self.params.catable { // this part of the code does not support concatability return self.compress_stream_fast( op, available_in, next_in_array, next_in_offset, available_out, next_out_array, next_out_offset, total_out, ); } loop { let remaining_block_size: usize = self.remaining_input_block_size(); if remaining_block_size != 0usize && (*available_in != 0usize) { let copy_input_size: usize = min(remaining_block_size, *available_in); self.copy_input_to_ring_buffer(copy_input_size, &next_in_array[*next_in_offset..]); *next_in_offset += copy_input_size; *available_in = available_in.wrapping_sub(copy_input_size); { continue; } } if self.inject_flush_or_push_output( available_out, next_out_array, next_out_offset, total_out, ) { continue; } if self.available_out_ == 0usize && (self.stream_state_ as i32 == BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING as i32) && (remaining_block_size == 0usize || op as i32 != BrotliEncoderOperation::BROTLI_OPERATION_PROCESS as i32) { let is_last = *available_in == 0 && op == BrotliEncoderOperation::BROTLI_OPERATION_FINISH; let force_flush = *available_in == 0 && op == BrotliEncoderOperation::BROTLI_OPERATION_FLUSH; self.update_size_hint(*available_in); let mut avail_out = self.available_out_; let result = self.encode_data(is_last, force_flush, &mut avail_out, metablock_callback); self.available_out_ = avail_out; //this function set next_out to &storage[0] if !result { return false; } if force_flush { self.stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED; } if is_last { self.stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FINISHED; } { continue; } } { break; } } self.check_flush_complete(); true } pub fn is_finished(&self) -> bool { self.stream_state_ == BrotliEncoderStreamState::BROTLI_STREAM_FINISHED && !self.has_more_output() } pub fn has_more_output(&self) -> bool { self.available_out_ != 0 } pub fn take_output(&mut self, size: &mut usize) -> &[u8] { let mut consumed_size: usize = self.available_out_; let mut result: &[u8] = GetNextOut!(*self); if *size != 0 { consumed_size = min(*size, self.available_out_); } if consumed_size != 0 { self.next_out_ = NextOutIncrement(&self.next_out_, consumed_size as i32); self.available_out_ = self.available_out_.wrapping_sub(consumed_size); self.total_out_ = self.total_out_.wrapping_add(consumed_size as u64); CheckFlushCompleteInner( &mut self.stream_state_, self.available_out_, &mut self.next_out_, ); *size = consumed_size; } else { *size = 0usize; result = &[]; } result } } pub fn BrotliEncoderVersion() -> u32 { 0x0100_0f01 } impl BrotliEncoderStateStruct { pub fn input_block_size(&mut self) -> usize { if !self.ensure_initialized() { return 0; } 1 << self.params.lgblock } pub fn write_data< 'a, MetablockCallback: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], interface::InputPair, &mut Alloc, ), >( &'a mut self, // FIXME: this should be bool is_last: i32, // FIXME: this should be bool force_flush: i32, // FIXME: this should probably be removed because the slice already contains the size out_size: &mut usize, // FIXME: this should be part of the fn return value output: &'a mut &'a mut [u8], metablock_callback: &mut MetablockCallback, ) -> bool { let ret = self.encode_data(is_last != 0, force_flush != 0, out_size, metablock_callback); *output = self.storage_.slice_mut(); ret } } #[cfg(feature = "std")] mod test { #[cfg(test)] use alloc_stdlib::StandardAlloc; #[test] fn test_encoder_compress() { let input = include_bytes!("../../testdata/alice29.txt"); let mut output_buffer = [0; 100000]; let mut output_len = output_buffer.len(); let ret = super::encoder_compress( StandardAlloc::default(), &mut StandardAlloc::default(), 9, 16, super::BrotliEncoderMode::BROTLI_MODE_GENERIC, input.len(), input, &mut output_len, &mut output_buffer, &mut |_, _, _, _| (), ); assert!(ret); assert_eq!(output_len, 51737); let mut roundtrip = [0u8; 200000]; let (_, s, t) = super::super::test::oneshot_decompress( &output_buffer[..output_len], &mut roundtrip[..], ); assert_eq!(roundtrip[..t], input[..]); assert_eq!(s, output_len); } } brotli-8.0.2/src/enc/entropy_encode.rs000064400000000000000000000443041046102023000160520ustar 00000000000000/* Copyright 2010 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /* Entropy encoding (Huffman) utilities. */ use core::cmp::max; #[derive(Clone, Copy, Default)] pub struct HuffmanTree { pub total_count_: u32, pub index_left_: i16, pub index_right_or_value_: i16, } impl HuffmanTree { pub fn new(count: u32, left: i16, right: i16) -> Self { Self { total_count_: count, index_left_: left, index_right_or_value_: right, } } } pub fn BrotliSetDepth(p0: i32, pool: &mut [HuffmanTree], depth: &mut [u8], max_depth: i32) -> bool { let mut stack: [i32; 16] = [0; 16]; let mut level: i32 = 0i32; let mut p: i32 = p0; stack[0] = -1i32; loop { if (pool[(p as usize)]).index_left_ as i32 >= 0i32 { level += 1; if level > max_depth { return false; } stack[level as usize] = (pool[(p as usize)]).index_right_or_value_ as i32; p = (pool[(p as usize)]).index_left_ as i32; { continue; } } else { let pp = pool[(p as usize)]; depth[((pp).index_right_or_value_ as usize)] = level as u8; } while level >= 0i32 && (stack[level as usize] == -1i32) { level -= 1; } if level < 0i32 { return true; } p = stack[level as usize]; stack[level as usize] = -1i32; } } pub trait HuffmanComparator { fn Cmp(&self, a: &HuffmanTree, b: &HuffmanTree) -> bool; } pub struct SortHuffmanTree {} impl HuffmanComparator for SortHuffmanTree { fn Cmp(&self, v0: &HuffmanTree, v1: &HuffmanTree) -> bool { if v0.total_count_ != v1.total_count_ { v0.total_count_ < v1.total_count_ } else { v0.index_right_or_value_ > v1.index_right_or_value_ } } } pub fn SortHuffmanTreeItems( items: &mut [HuffmanTree], n: usize, comparator: Comparator, ) { static gaps: [usize; 6] = [132, 57, 23, 10, 4, 1]; if n < 13 { for i in 1..n { let mut tmp: HuffmanTree = items[i]; let mut k: usize = i; let mut j: usize = i.wrapping_sub(1); while comparator.Cmp(&mut tmp, &mut items[j]) { items[k] = items[j]; k = j; if { let _old = j; j = j.wrapping_sub(1); _old } == 0 { break; } } items[k] = tmp; } } else { let mut g: i32 = if n < 57usize { 2i32 } else { 0i32 }; while g < 6i32 { { let gap: usize = gaps[g as usize]; for i in gap..n { let mut j: usize = i; let mut tmp: HuffmanTree = items[i]; while j >= gap && (comparator.Cmp(&mut tmp, &mut items[j.wrapping_sub(gap)])) { { items[j] = items[j.wrapping_sub(gap)]; } j = j.wrapping_sub(gap); } items[j] = tmp; } } g += 1; } } } /* This function will create a Huffman tree. The catch here is that the tree cannot be arbitrarily deep. Brotli specifies a maximum depth of 15 bits for "code trees" and 7 bits for "code length code trees." count_limit is the value that is to be faked as the minimum value and this minimum value is raised until the tree matches the maximum length requirement. This algorithm is not of excellent performance for very long data blocks, especially when population counts are longer than 2**tree_limit, but we are not planning to use this with extremely long blocks. See https://en.wikipedia.org/wiki/Huffman_coding */ pub fn BrotliCreateHuffmanTree( data: &[u32], length: usize, tree_limit: i32, tree: &mut [HuffmanTree], depth: &mut [u8], ) { let sentinel = HuffmanTree::new(u32::MAX, -1, -1); let mut count_limit = 1u32; 'break1: loop { { let mut n: usize = 0usize; let mut i: usize; let mut j: usize; let mut k: usize; i = length; while i != 0usize { i = i.wrapping_sub(1); if data[i] != 0 { let count: u32 = max(data[i], count_limit); tree[n] = HuffmanTree::new(count, -1, i as i16); n = n.wrapping_add(1); } } if n == 1 { depth[((tree[0]).index_right_or_value_ as usize)] = 1u8; { break 'break1; } } SortHuffmanTreeItems(tree, n, SortHuffmanTree {}); tree[n] = sentinel; tree[n.wrapping_add(1)] = sentinel; i = 0usize; j = n.wrapping_add(1); k = n.wrapping_sub(1); while k != 0usize { { let left: usize; let right: usize; if (tree[i]).total_count_ <= (tree[j]).total_count_ { left = i; i = i.wrapping_add(1); } else { left = j; j = j.wrapping_add(1); } if (tree[i]).total_count_ <= (tree[j]).total_count_ { right = i; i = i.wrapping_add(1); } else { right = j; j = j.wrapping_add(1); } { let j_end: usize = (2usize).wrapping_mul(n).wrapping_sub(k); (tree[j_end]).total_count_ = (tree[left]) .total_count_ .wrapping_add((tree[right]).total_count_); (tree[j_end]).index_left_ = left as i16; (tree[j_end]).index_right_or_value_ = right as i16; tree[j_end.wrapping_add(1)] = sentinel; } } k = k.wrapping_sub(1); } if BrotliSetDepth( (2usize).wrapping_mul(n).wrapping_sub(1) as i32, tree, depth, tree_limit, ) { break 'break1; } } count_limit = count_limit.wrapping_mul(2); } } pub fn BrotliOptimizeHuffmanCountsForRle( mut length: usize, counts: &mut [u32], good_for_rle: &mut [u8], ) { let mut nonzero_count: usize = 0usize; let mut stride: usize; let mut limit: usize; let mut sum: usize; let streak_limit: usize = 1240usize; for i in 0usize..length { if counts[i] != 0 { nonzero_count = nonzero_count.wrapping_add(1); } } if nonzero_count < 16usize { return; } while length != 0usize && (counts[length.wrapping_sub(1)] == 0u32) { length = length.wrapping_sub(1); } if length == 0usize { return; } { let mut nonzeros: usize = 0usize; let mut smallest_nonzero: u32 = (1i32 << 30) as u32; for i in 0usize..length { if counts[i] != 0u32 { nonzeros = nonzeros.wrapping_add(1); if smallest_nonzero > counts[i] { smallest_nonzero = counts[i]; } } } if nonzeros < 5usize { return; } if smallest_nonzero < 4u32 { let zeros: usize = length.wrapping_sub(nonzeros); if zeros < 6 { for i in 1..length.wrapping_sub(1) { if counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0 { counts[i] = 1; } } } } if nonzeros < 28usize { return; } } for rle_item in good_for_rle.iter_mut() { *rle_item = 0; } { let mut symbol: u32 = counts[0]; let mut step: usize = 0usize; for i in 0..=length { if i == length || counts[i] != symbol { if symbol == 0u32 && (step >= 5usize) || symbol != 0u32 && (step >= 7usize) { for k in 0usize..step { good_for_rle[i.wrapping_sub(k).wrapping_sub(1)] = 1u8; } } step = 1; if i != length { symbol = counts[i]; } } else { step = step.wrapping_add(1); } } } stride = 0usize; limit = (256u32) .wrapping_mul((counts[0]).wrapping_add(counts[1]).wrapping_add(counts[2])) .wrapping_div(3) .wrapping_add(420) as usize; sum = 0usize; for i in 0..=length { if i == length || good_for_rle[i] != 0 || i != 0usize && (good_for_rle[i.wrapping_sub(1)] != 0) || ((256u32).wrapping_mul(counts[i]) as usize) .wrapping_sub(limit) .wrapping_add(streak_limit) >= (2usize).wrapping_mul(streak_limit) { if stride >= 4usize || stride >= 3usize && (sum == 0usize) { let mut count: usize = sum .wrapping_add(stride.wrapping_div(2)) .wrapping_div(stride); if count == 0usize { count = 1; } if sum == 0usize { count = 0usize; } for k in 0usize..stride { counts[i.wrapping_sub(k).wrapping_sub(1)] = count as u32; } } stride = 0usize; sum = 0usize; if i < length.wrapping_sub(2) { limit = (256u32) .wrapping_mul( (counts[i]) .wrapping_add(counts[i.wrapping_add(1)]) .wrapping_add(counts[i.wrapping_add(2)]), ) .wrapping_div(3) .wrapping_add(420) as usize; } else if i < length { limit = (256u32).wrapping_mul(counts[i]) as usize; } else { limit = 0usize; } } stride = stride.wrapping_add(1); if i != length { sum = sum.wrapping_add(counts[i] as usize); if stride >= 4usize { limit = (256usize) .wrapping_mul(sum) .wrapping_add(stride.wrapping_div(2)) .wrapping_div(stride); } if stride == 4usize { limit = limit.wrapping_add(120); } } } } pub(crate) fn decide_over_rle_use(depth: &[u8], length: usize) -> (bool, bool) { let mut total_reps_zero: usize = 0usize; let mut total_reps_non_zero: usize = 0usize; let mut count_reps_zero: usize = 1; let mut count_reps_non_zero: usize = 1; let mut i: usize; i = 0usize; while i < length { let value: u8 = depth[i]; let mut reps: usize = 1; let mut k: usize; k = i.wrapping_add(1); while k < length && (depth[k] as i32 == value as i32) { { reps = reps.wrapping_add(1); } k = k.wrapping_add(1); } if reps >= 3usize && (value as i32 == 0i32) { total_reps_zero = total_reps_zero.wrapping_add(reps); count_reps_zero = count_reps_zero.wrapping_add(1); } if reps >= 4usize && (value as i32 != 0i32) { total_reps_non_zero = total_reps_non_zero.wrapping_add(reps); count_reps_non_zero = count_reps_non_zero.wrapping_add(1); } i = i.wrapping_add(reps); } let use_rle_for_non_zero = total_reps_non_zero > count_reps_non_zero.wrapping_mul(2); let use_rle_for_zero = total_reps_zero > count_reps_zero.wrapping_mul(2); (use_rle_for_non_zero, use_rle_for_zero) } fn Reverse(v: &mut [u8], mut start: usize, mut end: usize) { end = end.wrapping_sub(1); while start < end { v.swap(start, end); start = start.wrapping_add(1); end = end.wrapping_sub(1); } } fn BrotliWriteHuffmanTreeRepetitions( previous_value: u8, value: u8, mut repetitions: usize, tree_size: &mut usize, tree: &mut [u8], extra_bits_data: &mut [u8], ) { if previous_value as i32 != value as i32 { tree[*tree_size] = value; extra_bits_data[*tree_size] = 0u8; *tree_size = tree_size.wrapping_add(1); repetitions = repetitions.wrapping_sub(1); } if repetitions == 7usize { tree[*tree_size] = value; extra_bits_data[*tree_size] = 0u8; *tree_size = tree_size.wrapping_add(1); repetitions = repetitions.wrapping_sub(1); } if repetitions < 3usize { for _i in 0usize..repetitions { tree[*tree_size] = value; extra_bits_data[*tree_size] = 0u8; *tree_size = tree_size.wrapping_add(1); } } else { let start: usize = *tree_size; repetitions = repetitions.wrapping_sub(3); loop { tree[*tree_size] = 16u8; extra_bits_data[*tree_size] = (repetitions & 0x03) as u8; *tree_size = tree_size.wrapping_add(1); repetitions >>= 2i32; if repetitions == 0usize { break; } repetitions = repetitions.wrapping_sub(1); } Reverse(tree, start, *tree_size); Reverse(extra_bits_data, start, *tree_size); } } fn BrotliWriteHuffmanTreeRepetitionsZeros( mut repetitions: usize, tree_size: &mut usize, tree: &mut [u8], extra_bits_data: &mut [u8], ) { if repetitions == 11 { tree[*tree_size] = 0u8; extra_bits_data[*tree_size] = 0u8; *tree_size = tree_size.wrapping_add(1); repetitions = repetitions.wrapping_sub(1); } if repetitions < 3usize { for _i in 0usize..repetitions { tree[*tree_size] = 0u8; extra_bits_data[*tree_size] = 0u8; *tree_size = tree_size.wrapping_add(1); } } else { let start: usize = *tree_size; repetitions = repetitions.wrapping_sub(3); loop { tree[*tree_size] = 17u8; extra_bits_data[*tree_size] = (repetitions & 0x7usize) as u8; *tree_size = tree_size.wrapping_add(1); repetitions >>= 3i32; if repetitions == 0usize { break; } repetitions = repetitions.wrapping_sub(1); } Reverse(tree, start, *tree_size); Reverse(extra_bits_data, start, *tree_size); } } pub fn BrotliWriteHuffmanTree( depth: &[u8], length: usize, tree_size: &mut usize, tree: &mut [u8], extra_bits_data: &mut [u8], ) { let mut previous_value: u8 = 8u8; let mut i: usize; let mut use_rle_for_non_zero = false; let mut use_rle_for_zero = false; let mut new_length: usize = length; i = 0usize; 'break27: while i < length { { if depth[length.wrapping_sub(i).wrapping_sub(1)] as i32 == 0i32 { new_length = new_length.wrapping_sub(1); } else { break 'break27; } } i = i.wrapping_add(1); } if length > 50 { (use_rle_for_non_zero, use_rle_for_zero) = decide_over_rle_use(depth, new_length); } i = 0usize; while i < new_length { let value: u8 = depth[i]; let mut reps: usize = 1; if value != 0 && use_rle_for_non_zero || value == 0 && use_rle_for_zero { let mut k: usize; k = i.wrapping_add(1); while k < new_length && (depth[k] as i32 == value as i32) { { reps = reps.wrapping_add(1); } k = k.wrapping_add(1); } } if value as i32 == 0i32 { BrotliWriteHuffmanTreeRepetitionsZeros(reps, tree_size, tree, extra_bits_data); } else { BrotliWriteHuffmanTreeRepetitions( previous_value, value, reps, tree_size, tree, extra_bits_data, ); previous_value = value; } i = i.wrapping_add(reps); } } fn BrotliReverseBits(num_bits: usize, mut bits: u16) -> u16 { static kLut: [usize; 16] = [ 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf, ]; let mut retval: usize = kLut[(bits as i32 & 0xfi32) as usize]; let mut i: usize; i = 4usize; while i < num_bits { { retval <<= 4i32; bits = (bits as i32 >> 4) as u16; retval |= kLut[(bits as i32 & 0xfi32) as usize]; } i = i.wrapping_add(4); } retval >>= (0usize.wrapping_sub(num_bits) & 0x3usize); retval as u16 } const MAX_HUFFMAN_BITS: usize = 16; pub fn BrotliConvertBitDepthsToSymbols(depth: &[u8], len: usize, bits: &mut [u16]) { /* In Brotli, all bit depths are [1..15] 0 bit depth means that the symbol does not exist. */ let mut bl_count: [u16; MAX_HUFFMAN_BITS] = [0; MAX_HUFFMAN_BITS]; let mut next_code: [u16; MAX_HUFFMAN_BITS] = [0; MAX_HUFFMAN_BITS]; let mut code: i32 = 0i32; for i in 0usize..len { let _rhs = 1; let _lhs = &mut bl_count[depth[i] as usize]; *_lhs = (*_lhs as i32 + _rhs) as u16; } bl_count[0] = 0u16; next_code[0] = 0u16; for i in 1..MAX_HUFFMAN_BITS { code = (code + bl_count[i - 1] as i32) << 1; next_code[i] = code as u16; } for i in 0usize..len { if depth[i] != 0 { bits[i] = BrotliReverseBits(depth[i] as usize, { let _rhs = 1; let _lhs = &mut next_code[depth[i] as usize]; let _old = *_lhs; *_lhs = (*_lhs as i32 + _rhs) as u16; _old }); } } } brotli-8.0.2/src/enc/find_stride.rs000064400000000000000000001007541046102023000153310ustar 00000000000000use core::cmp::{max, min}; use core::ops::{Index, IndexMut, Range}; use super::super::alloc; use super::super::alloc::{SliceWrapper, SliceWrapperMut}; use super::input_pair::{InputPair, InputReference}; use super::interface; use super::util::FastLog2; use crate::enc::combined_alloc::alloc_if; // float32 doesn't have enough resolution for blocks of data more than 3.5 megs pub type floatY = f64; // the cost of storing a particular population of data including the approx // cost of a huffman table to describe the frequencies of each symbol pub fn HuffmanCost(population: &[u32]) -> floatY { assert_eq!(population.len(), 256 * 256); let mut cost: floatY = 0.0 as floatY; let mut sum: floatY = 0.0 as floatY; let mut buckets: floatY = 0.0 as floatY; for pop in population.iter() { if *pop == 0 { continue; } cost -= *pop as floatY * FastLog2(*pop as u64) as floatY; sum += *pop as floatY; buckets += 1.0 as floatY; } //println!("Observed {} nonzero buckets with a sum of {}, hc={}", buckets, sum, cost); 16.0 as floatY * buckets + cost + sum * FastLog2(sum as u64) as floatY } // this holds a population of data assuming 1 byte of prior for that data // bucket_populations is therefore a 65536-long dynamically allocated buffer pub struct EntropyBucketPopulation> { pub bucket_populations: AllocU32::AllocatedMemory, pub cached_bit_entropy: floatY, } impl> EntropyBucketPopulation { pub fn new(m32: &mut AllocU32) -> Self { let size = 256 * 256; EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), } } pub fn free(&mut self, m32: &mut AllocU32) { m32.free_cell(core::mem::take(&mut self.bucket_populations)); } fn clone_from(&mut self, other: &EntropyBucketPopulation) { self.bucket_populations .slice_mut() .clone_from_slice(other.bucket_populations.slice()); } fn add_assign(&mut self, other: &EntropyBucketPopulation) { assert_eq!( self.bucket_populations.slice().len(), other.bucket_populations.slice().len() ); for (item, other_item) in self .bucket_populations .slice_mut() .iter_mut() .zip(other.bucket_populations.slice().iter()) { *item += *other_item; } self.cached_bit_entropy = HuffmanCost(self.bucket_populations.slice()); } // clear the allocated memory and reset literal population to zero fn bzero(&mut self) { self.cached_bit_entropy = 0.0; for bp in self.bucket_populations.slice_mut().iter_mut() { *bp = 0; } } // setup population to the sum of an array of populations where the stride of that row matches. Additionally allow another optional fn initiate_from( &mut self, rows: [&[Self]; 2], rows_stride: [&[u8]; 2], stride: u8, do_clear: bool, ) { self.cached_bit_entropy = 0.0; let mut found_any = false; for (sub_row, sub_stride) in rows.iter().zip(rows_stride.iter()) { for (item, istride) in sub_row.iter().zip(sub_stride.iter()) { if *istride != stride { continue; // if we chain, then optional was already filtered by stride } if do_clear && !found_any { self.bucket_populations .slice_mut() .clone_from_slice(item.bucket_populations.slice()); found_any = true; } else { for (dst, src) in self .bucket_populations .slice_mut() .iter_mut() .zip(item.bucket_populations.slice().iter()) { *dst += *src; } } } } if do_clear && !found_any { self.bzero(); } else { self.cached_bit_entropy = HuffmanCost(self.bucket_populations.slice()); } } fn bit_cost_of_data_subset( &mut self, data0: &[u8], mut stride: u8, mut prev_bytes: [u8; NUM_STRIDES], scratch: &mut EntropyBucketPopulation, ) -> floatY { prev_bytes.reverse(); stride = max(1, stride); // we return stride=1 to mean 1 away scratch .bucket_populations .slice_mut() .clone_from_slice(self.bucket_populations.slice()); scratch.bucket_populations.slice_mut()[65535] += 1; // to demonstrate that we have scratch.bucket_populations.slice_mut()[65535] -= 1; // to demonstrate that we have write capability let mut stray_count = 0.0 as floatY; assert_eq!((NUM_STRIDES - 1) & NUM_STRIDES, 0); // must be power of two for (index, val) in data0.iter().enumerate() { let prior_byte = prev_bytes[(index + (NUM_STRIDES - stride as usize)) & (NUM_STRIDES - 1)]; let loc = &mut scratch.bucket_populations.slice_mut() [prior_byte as usize * 256 + *val as usize]; if *loc == 0 { stray_count += 1.0; } else { *loc -= 1; } prev_bytes[index & (NUM_STRIDES - 1)] = *val; } if self.cached_bit_entropy == 0.0 as floatY { self.cached_bit_entropy = HuffmanCost(self.bucket_populations.slice()); } debug_assert_eq!( HuffmanCost(self.bucket_populations.slice()), self.cached_bit_entropy ); scratch.cached_bit_entropy = HuffmanCost(scratch.bucket_populations.slice()); self.cached_bit_entropy - scratch.cached_bit_entropy + stray_count * 8.0 } } const NUM_STRIDES: usize = 8; #[derive(Copy, Clone)] pub struct BucketPopIndex { pub val: u8, pub six_bits: u8, pub stride: u8, } impl> Index for EntropyBucketPopulation { type Output = u32; fn index(&self, index: BucketPopIndex) -> &u32 { &self.bucket_populations.slice() [index.val as usize + index.six_bits as usize * 256 + index.stride as usize * 256 * 64] } } impl> IndexMut for EntropyBucketPopulation { fn index_mut(&mut self, index: BucketPopIndex) -> &mut u32 { &mut self.bucket_populations.slice_mut() [index.val as usize + index.six_bits as usize * 256 + index.stride as usize * 256 * 64] } } pub struct EntropyTally> { pop: [EntropyBucketPopulation; NUM_STRIDES], } const NUM_LEVELS: usize = 4; const NUM_NODES: usize = (1 << (NUM_LEVELS)) - 1; pub const NUM_LEAF_NODES: usize = (NUM_NODES + 1) >> 1; pub struct EntropyPyramid> { pop: [EntropyBucketPopulation; NUM_NODES], stride: [u8; NUM_NODES], } impl> EntropyPyramid { pub fn last_level_range(&self) -> Range { (NUM_NODES - (1 << (NUM_LEVELS - 1)))..NUM_NODES } pub fn byte_index_to_pyramid_index(&self, byte_index: usize, metablock_size: usize) -> usize { let range = self.last_level_range(); min( range.start + (range.end - range.start) * byte_index / metablock_size, range.end - 1, ) // since we tally after the end of the literal block, it could be after the pyramid } pub fn reset_scratch_to_deepest_level(&self, output: &mut EntropyTally) { let mut has_modified = [false; NUM_STRIDES]; //println!("Last level range {:?}", self.last_level_range()); for index in self.last_level_range() { if has_modified[self.stride[index] as usize] { output.pop[self.stride[index] as usize].add_assign(&self.pop[index]); } else { output.pop[self.stride[index] as usize].clone_from(&self.pop[index]); has_modified[self.stride[index] as usize] = true; } } for stride in 0..NUM_STRIDES { if !has_modified[stride] { output.pop[stride].bzero(); output.pop[stride].cached_bit_entropy = 0.0; } else { output.pop[stride].cached_bit_entropy = HuffmanCost(output.pop[stride].bucket_populations.slice()); } //println!("BASE PYRAMID {} = {}", stride,output.pop[stride].cached_bit_entropy); } } pub fn stride_last_level_range(&self) -> [u8; NUM_LEAF_NODES] { let mut ret = [0u8; NUM_LEAF_NODES]; ret.clone_from_slice(self.stride.split_at(self.stride.len() - NUM_LEAF_NODES).1); ret } pub fn free(&mut self, m32: &mut AllocU32) { for item in self.pop.iter_mut() { item.free(m32); } } pub fn disabled_placeholder(_m32: &mut AllocU32) -> Self { EntropyPyramid:: { pop: [ EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: AllocU32::AllocatedMemory::default(), }, ], stride: [0; NUM_NODES], } } pub fn new(m32: &mut AllocU32) -> Self { let size = 256 * 256; EntropyPyramid:: { pop: [ EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, EntropyBucketPopulation:: { cached_bit_entropy: 0.0, bucket_populations: m32.alloc_cell(size), }, ], stride: [0; NUM_NODES], } } pub fn bit_cost_of_literals( &mut self, data0: &[u8], start_index: u32, metablock_len: usize, stride: u8, previous_bytes: [u8; NUM_STRIDES], scratch: &mut EntropyTally, ) -> floatY { assert!(stride as usize <= NUM_STRIDES); self.pop[self.byte_index_to_pyramid_index(start_index as usize, metablock_len)] .bit_cost_of_data_subset(data0, stride, previous_bytes, &mut scratch.pop[0]) } fn populate_entry_stride1(&mut self, input: InputPair, index: u32) { let mut prev_val = 0; let pyr_item = &mut self.pop[index as usize]; pyr_item.bzero(); assert_eq!(pyr_item.bucket_populations.slice()[65535], 0); for val in input.0.slice().iter().chain(input.1.slice().iter()) { pyr_item.bucket_populations.slice_mut()[prev_val as usize * 256 + *val as usize] += 1; prev_val = *val; } pyr_item.cached_bit_entropy = HuffmanCost(pyr_item.bucket_populations.slice()); self.stride[index as usize] = 0; } fn populate_entry( &mut self, input: InputPair, scratch: &mut EntropyTally, index: u32, mirror_range: Option>, prev_range: Option>, ) { let mut initial_entropies = [0.0 as floatY; NUM_STRIDES]; let nothing: &[EntropyBucketPopulation] = &[]; let nothing_u8: &[u8] = &[]; { let pop_ranges = [ match mirror_range { None => nothing, Some(ref ir) => &self.pop[ir.clone()], }, match prev_range { None => nothing, Some(ref pr) => &self.pop[pr.clone()], }, ]; let stride_ranges = [ match mirror_range { None => nothing_u8, Some(ref ir) => &self.stride[ir.clone()], }, match prev_range { None => nothing_u8, Some(ref pr) => &self.stride[pr.clone()], }, ]; for stride in 0..NUM_STRIDES { scratch.pop[stride].initiate_from(pop_ranges, stride_ranges, stride as u8, true); initial_entropies[stride] = scratch.pop[stride].cached_bit_entropy; } } scratch.observe_input_stream(input.0.slice(), input.1.slice()); let mut best_entropy_index = 0; let mut min_entropy_value = (scratch.pop[0].cached_bit_entropy - initial_entropies[0]); //println!("{} OLD ENTROPY {:} NEW_ENTROPY {:}", best_entropy_index, scratch.pop[0].cached_bit_entropy, initial_entropies[0]); for stride in 1..NUM_STRIDES { let entropy_value = scratch.pop[stride].cached_bit_entropy - initial_entropies[stride]; //println!("{} OLD ENTROPY {:} NEW_ENTROPY {:}", stride, scratch.pop[stride].cached_bit_entropy, initial_entropies[stride]); if entropy_value < min_entropy_value { best_entropy_index = stride; min_entropy_value = entropy_value; } } self.pop[index as usize].clone_from(&scratch.pop[best_entropy_index]); self.stride[index as usize] = best_entropy_index as u8; } pub fn populate_stride1(&mut self, input0: &[u8], input1: &[u8]) { let input = InputPair( InputReference { data: input0, orig_offset: 0, }, InputReference { data: input1, orig_offset: input0.len(), }, ); for i in 0..2 { let first_range = if i == 0 { input.split_at(input.len() >> 1).0 } else { input.split_at(input.len() >> 1).1 }; for j in 0..2 { let second_range = if j == 0 { first_range.split_at(input.len() >> 2).0 } else { first_range.split_at(input.len() >> 2).1 }; if NUM_LEVELS == 4 { for k in 0..2 { let third_range = if j == 0 { second_range.split_at(input.len() >> 3).0 } else { second_range.split_at(input.len() >> 3).1 }; self.populate_entry_stride1(third_range, 7 + ((i << 2) + (j << 1) + k)); } } else { assert_eq!(NUM_LEVELS, 3); // we hard coded the 3 levels for now... we can add more later or make this into some kind of recursion self.populate_entry_stride1(second_range, 3 + ((i << 1) + j)); } } } } pub fn populate(&mut self, input0: &[u8], input1: &[u8], scratch: &mut EntropyTally) { let input = InputPair( InputReference { data: input0, orig_offset: 0, }, InputReference { data: input1, orig_offset: input0.len(), }, ); self.populate_entry(input, scratch, 0, None, None); // BASE // LEVEL 1 self.populate_entry( input.split_at(input.len() >> 1).0, scratch, 1, Some(0..1), None, ); self.populate_entry( input.split_at(input.len() >> 1).1, scratch, 2, None, Some(1..2), ); // should we use the range from 0..1?? // LEVEL 2 self.populate_entry( input.split_at(input.len() >> 2).0, scratch, 3, Some(1..3), None, ); self.populate_entry( input .split_at(input.len() >> 1) .0 .split_at(input.len() >> 2) .1, scratch, 4, Some(2..3), Some(3..4), ); self.populate_entry( input .split_at(input.len() >> 1) .1 .split_at(input.len() >> 2) .0, scratch, 5, Some(3..5), None, ); self.populate_entry( input .split_at(input.len() >> 1) .1 .split_at(input.len() >> 2) .1, scratch, 6, Some(3..6), None, ); if NUM_LEVELS == 4 { // level 4 self.populate_entry( input .split_at(input.len() >> 1) .0 .split_at(input.len() >> 2) .0 .split_at(input.len() >> 3) .0, scratch, 7, Some(4..7), None, ); self.populate_entry( input .split_at(input.len() >> 1) .0 .split_at(input.len() >> 2) .0 .split_at(input.len() >> 3) .1, scratch, 8, Some(4..7), Some(7..8), ); self.populate_entry( input .split_at(input.len() >> 1) .0 .split_at(input.len() >> 2) .1 .split_at(input.len() >> 3) .0, scratch, 9, Some(5..7), Some(7..9), ); self.populate_entry( input .split_at(input.len() >> 1) .0 .split_at(input.len() >> 2) .1 .split_at(input.len() >> 3) .1, scratch, 0x0a, Some(5..7), Some(7..0xa), ); self.populate_entry( input .split_at(input.len() >> 1) .1 .split_at(input.len() >> 2) .0 .split_at(input.len() >> 3) .0, scratch, 0xb, Some(6..7), Some(7..0xb), ); self.populate_entry( input .split_at(input.len() >> 1) .1 .split_at(input.len() >> 2) .0 .split_at(input.len() >> 3) .1, scratch, 0xc, Some(6..7), Some(7..0xc), ); self.populate_entry( input .split_at(input.len() >> 1) .1 .split_at(input.len() >> 2) .1 .split_at(input.len() >> 3) .0, scratch, 0xd, None, Some(7..0xd), ); self.populate_entry( input .split_at(input.len() >> 1) .1 .split_at(input.len() >> 2) .1 .split_at(input.len() >> 3) .1, scratch, 0xe, None, Some(7..0xe), ); } else { assert_eq!(NUM_LEVELS, 3); // we hard coded the 3 levels for now... we can add more later or make this into some kind of recursion } } } impl> EntropyTally { pub fn new(m32: &mut AllocU32, max_stride_arg: Option) -> EntropyTally { let size = 256 * 256; let max_stride = max_stride_arg.unwrap_or(NUM_STRIDES as u8); EntropyTally:: { pop: [ EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: alloc_if(max_stride > 0, m32, size), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: alloc_if(max_stride > 1, m32, size), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: alloc_if(max_stride > 2, m32, size), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: alloc_if(max_stride > 3, m32, size), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: alloc_if(max_stride > 4, m32, size), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: alloc_if(max_stride > 5, m32, size), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: alloc_if(max_stride > 6, m32, size), }, EntropyBucketPopulation { cached_bit_entropy: 0.0, bucket_populations: alloc_if(max_stride > 7, m32, size), }, ], } } pub fn disabled_placeholder(m32: &mut AllocU32) -> EntropyTally { Self::new(m32, Some(0)) } fn observe_input_stream(&mut self, input0: &[u8], input1: &[u8]) { let mut priors = [0u8; NUM_STRIDES]; for val in input0.iter().chain(input1.iter()) { for stride in 0..NUM_STRIDES { self.pop[stride].bucket_populations.slice_mut() [priors[stride] as usize * 256 + (*val as usize)] += 1; } { let mut tmp = [0u8; NUM_STRIDES - 1]; tmp.clone_from_slice(&priors[..(NUM_STRIDES - 1)]); priors[1..].clone_from_slice(&tmp[..]); priors[0] = *val; } } for stride in 0..NUM_STRIDES { self.pop[stride].cached_bit_entropy = HuffmanCost(self.pop[stride].bucket_populations.slice()); } } fn identify_best_population_and_update_cache(&mut self) -> u8 { let mut old_bit_entropy: [floatY; NUM_STRIDES] = [0.0; NUM_STRIDES]; for (obe, be) in old_bit_entropy.iter_mut().zip(self.pop.iter_mut()) { *obe = be.cached_bit_entropy; if *obe != 0.0 { be.cached_bit_entropy = HuffmanCost(be.bucket_populations.slice()); } } let mut best_stride = 0u8; let mut best_entropy = self.pop[0].cached_bit_entropy - old_bit_entropy[0]; //println!("Weighing {} as {}", best_stride, best_entropy); for index in 1..NUM_STRIDES { let cur = self.pop[index].cached_bit_entropy - old_bit_entropy[index]; //println!("Weighing {} as {} = [{} - {}]", index, cur, self.pop[index].cached_bit_entropy, old_bit_entropy[index]); if (best_entropy == 0.0 || cur < best_entropy) && old_bit_entropy[index] > 0.0 { best_stride = index as u8; best_entropy = cur; } } best_stride } pub fn peek(&mut self) -> &mut EntropyBucketPopulation { &mut self.pop[0] } pub fn get_previous_bytes( &self, input0: &[u8], input1: &[u8], bytes_processed: usize, ) -> [u8; NUM_STRIDES] { let mut retval = [0u8; NUM_STRIDES]; for index in 0..NUM_STRIDES { let bp_offset = index + 1; if bp_offset <= bytes_processed { let offset = bytes_processed - bp_offset; if offset >= input0.len() { retval[index] = input1[offset - input0.len()]; } else { retval[index] = input0[offset]; } } } retval } pub fn pick_best_stride>( &mut self, commands: &[interface::Command], input0: &[u8], input1: &[u8], bytes_processed: &mut usize, entropy_pyramid: &EntropyPyramid, stride_detection_quality: u8, ) -> u8 { if stride_detection_quality == 0 { return 0; } //println!("ENTROPY PYRAMID {:?}", entropy_pyramid.stride); if stride_detection_quality > 1 { entropy_pyramid.reset_scratch_to_deepest_level(self); } let mut pyramid_byte_index: usize = 0; for cmd in commands.iter() { match *cmd { interface::Command::Copy(ref copy) => { *bytes_processed += copy.num_bytes as usize; } interface::Command::Dict(ref dict) => { *bytes_processed += dict.final_size as usize; } interface::Command::Literal(ref lit) => { if stride_detection_quality > 1 { let mut priors = self.get_previous_bytes(input0, input1, *bytes_processed); for (lindex, val) in lit.data.slice().iter().enumerate() { if lindex == NUM_STRIDES { let vpriors = self.get_previous_bytes( input0, input1, NUM_STRIDES + *bytes_processed, ); assert_eq!(vpriors, priors); } for (index, prior) in priors.iter().enumerate() { self.pop[index].bucket_populations.slice_mut() [256 * (*prior as usize) + *val as usize] += 1; // increment the population value of this literal // for the respective prior for the stride index } { //reset prior values for the next item let mut tmp = [0u8; 7]; tmp.clone_from_slice(&priors[..7]); priors[1..].clone_from_slice(&tmp[..]); priors[0] = *val; } } } *bytes_processed += lit.data.slice().len(); pyramid_byte_index = *bytes_processed; } interface::Command::BlockSwitchCommand(_) | interface::Command::BlockSwitchLiteral(_) | interface::Command::BlockSwitchDistance(_) | interface::Command::PredictionMode(_) => {} } } //println!("ENTROPY PYRAMID {:?} selected {}", entropy_pyramid.stride, best_stride); if stride_detection_quality > 1 { self.identify_best_population_and_update_cache() + 1 } else { entropy_pyramid.stride[entropy_pyramid .byte_index_to_pyramid_index(pyramid_byte_index, input0.len() + input1.len())] + 1 } } pub fn free(&mut self, m32: &mut AllocU32) { for item in self.pop.iter_mut() { m32.free_cell(core::mem::take(&mut item.bucket_populations)) } } pub fn is_free(&mut self) -> bool { self.pop[0].bucket_populations.slice().is_empty() } } brotli-8.0.2/src/enc/fixed_queue.rs000064400000000000000000000040561046102023000153400ustar 00000000000000pub const MAX_THREADS: usize = 16; pub struct FixedQueue { data: [Option; MAX_THREADS], size: usize, start: usize, } impl Default for FixedQueue { fn default() -> Self { Self::new() } } impl FixedQueue { pub fn new() -> Self { FixedQueue { data: [ None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, ], size: 0, start: 0, } } pub fn can_push(&self) -> bool { self.size < self.data.len() } pub fn size(&self) -> usize { self.size } pub fn push(&mut self, item: T) -> Result<(), ()> { if self.size == self.data.len() { return Err(()); } let index = (self.start + self.size) % self.data.len(); self.data[index] = Some(item); self.size += 1; Ok(()) } pub fn pop(&mut self) -> Option { if self.size == 0 { return None; } let index = self.start % self.data.len(); let ret = self.data[index].take(); self.start += 1; self.size -= 1; ret } pub fn how_much_free_space(&self) -> usize { self.data.len() - self.size } pub fn remove) -> bool>(&mut self, f: F) -> Option { if self.size == 0 { return None; } for index in 0..self.size { if f(&self.data[(self.start + index) % self.data.len()]) { let start_index = self.start % self.data.len(); let target_index = (self.start + index) % self.data.len(); let ret = self.data[target_index].take(); let replace = self.data[start_index].take(); let is_none = core::mem::replace(&mut self.data[target_index], replace); assert!(is_none.is_none()); self.start += 1; self.size -= 1; return ret; } } None } } brotli-8.0.2/src/enc/histogram.rs000064400000000000000000000353061046102023000150340ustar 00000000000000use core; use core::cmp::min; use super::super::alloc; use super::super::alloc::{SliceWrapper, SliceWrapperMut}; use super::block_split::BlockSplit; use super::command::Command; use super::constants::{kSigned3BitContextLookup, kUTF8ContextLookup}; use super::util::floatX; use super::vectorization::Mem256i; //#[derive(Clone)] clone is broken for arrays > 32 pub struct HistogramLiteral { pub data_: [u32; 256], pub total_count_: usize, pub bit_cost_: floatX, } impl Clone for HistogramLiteral { #[inline(always)] fn clone(&self) -> HistogramLiteral { HistogramLiteral { data_: self.data_, total_count_: self.total_count_, bit_cost_: self.bit_cost_, } } } impl Default for HistogramLiteral { #[inline(always)] fn default() -> HistogramLiteral { HistogramLiteral { data_: [0; 256], total_count_: 0, bit_cost_: 3.402e+38, } } } //#[derive(Clone)] clone is broken for arrays > 32 pub struct HistogramCommand { pub data_: [u32; 704], pub total_count_: usize, pub bit_cost_: floatX, } impl Clone for HistogramCommand { #[inline(always)] fn clone(&self) -> HistogramCommand { HistogramCommand { data_: self.data_, total_count_: self.total_count_, bit_cost_: self.bit_cost_, } } } impl Default for HistogramCommand { #[inline(always)] fn default() -> HistogramCommand { HistogramCommand { data_: [0; 704], total_count_: 0, bit_cost_: 3.402e+38, } } } //#[derive(Clone)] // #derive is broken for arrays > 32 #[cfg(not(feature = "disallow_large_window_size"))] const BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS: usize = 544; #[cfg(feature = "disallow_large_window_size")] const BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS: usize = 520; pub struct HistogramDistance { pub data_: [u32; BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS], pub total_count_: usize, pub bit_cost_: floatX, } impl Clone for HistogramDistance { fn clone(&self) -> HistogramDistance { HistogramDistance { data_: self.data_, total_count_: self.total_count_, bit_cost_: self.bit_cost_, } } } impl Default for HistogramDistance { fn default() -> HistogramDistance { HistogramDistance { data_: [0; BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS], total_count_: 0, bit_cost_: 3.402e+38, } } } pub trait CostAccessors { type i32vec: Sized + SliceWrapper + SliceWrapperMut; fn make_nnz_storage() -> Self::i32vec; fn total_count(&self) -> usize; fn bit_cost(&self) -> floatX; fn set_bit_cost(&mut self, cost: floatX); fn set_total_count(&mut self, count: usize); } impl SliceWrapper for HistogramLiteral { #[inline(always)] fn slice(&self) -> &[u32] { &self.data_[..] } } impl SliceWrapperMut for HistogramLiteral { #[inline(always)] fn slice_mut(&mut self) -> &mut [u32] { &mut self.data_[..] } } pub struct Array264i([Mem256i; 33]); impl SliceWrapperMut for Array264i { #[inline(always)] fn slice_mut(&mut self) -> &mut [Mem256i] { &mut self.0[..] } } impl SliceWrapper for Array264i { #[inline(always)] fn slice(&self) -> &[Mem256i] { &self.0[..] } } impl Default for Array264i { #[inline(always)] fn default() -> Array264i { Array264i([Mem256i::default(); 33]) } } pub struct Array528i([Mem256i; 66]); impl SliceWrapperMut for Array528i { #[inline(always)] fn slice_mut(&mut self) -> &mut [Mem256i] { &mut self.0[..] } } impl SliceWrapper for Array528i { #[inline(always)] fn slice(&self) -> &[Mem256i] { &self.0[..] } } impl Default for Array528i { #[inline(always)] fn default() -> Array528i { Array528i([Mem256i::default(); 66]) } } pub struct Array712i([Mem256i; 89]); impl SliceWrapperMut for Array712i { #[inline(always)] fn slice_mut(&mut self) -> &mut [Mem256i] { &mut self.0[..] } } impl SliceWrapper for Array712i { #[inline(always)] fn slice(&self) -> &[Mem256i] { &self.0[..] } } impl Default for Array712i { #[inline(always)] fn default() -> Array712i { Array712i([Mem256i::default(); 89]) } } pub struct EmptyIVec {} impl SliceWrapperMut for EmptyIVec { #[inline(always)] fn slice_mut(&mut self) -> &mut [Mem256i] { &mut [] } } impl SliceWrapper for EmptyIVec { #[inline(always)] fn slice(&self) -> &[Mem256i] { &[] } } impl Default for EmptyIVec { #[inline(always)] fn default() -> EmptyIVec { EmptyIVec {} } } #[cfg(feature = "vector_scratch_space")] pub type HistogramLiteralScratch = Array264i; #[cfg(not(feature = "vector_scratch_space"))] pub type HistogramLiteralScratch = EmptyIVec; impl CostAccessors for HistogramLiteral { type i32vec = HistogramLiteralScratch; fn make_nnz_storage() -> Self::i32vec { HistogramLiteralScratch::default() } #[inline(always)] fn total_count(&self) -> usize { self.total_count_ } #[inline(always)] fn bit_cost(&self) -> floatX { self.bit_cost_ } #[inline(always)] fn set_bit_cost(&mut self, data: floatX) { self.bit_cost_ = data; } #[inline(always)] fn set_total_count(&mut self, data: usize) { self.total_count_ = data; } } impl SliceWrapper for HistogramCommand { #[inline(always)] fn slice(&self) -> &[u32] { &self.data_[..] } } impl SliceWrapperMut for HistogramCommand { #[inline(always)] fn slice_mut(&mut self) -> &mut [u32] { &mut self.data_[..] } } #[cfg(feature = "vector_scratch_space")] pub type HistogramCommandScratch = Array712i; #[cfg(not(feature = "vector_scratch_space"))] pub type HistogramCommandScratch = EmptyIVec; impl CostAccessors for HistogramCommand { type i32vec = HistogramCommandScratch; fn make_nnz_storage() -> Self::i32vec { HistogramCommandScratch::default() } #[inline(always)] fn total_count(&self) -> usize { self.total_count_ } #[inline(always)] fn bit_cost(&self) -> floatX { self.bit_cost_ } #[inline(always)] fn set_bit_cost(&mut self, data: floatX) { self.bit_cost_ = data; } #[inline(always)] fn set_total_count(&mut self, data: usize) { self.total_count_ = data; } } impl SliceWrapper for HistogramDistance { #[inline(always)] fn slice(&self) -> &[u32] { &self.data_[..] } } impl SliceWrapperMut for HistogramDistance { #[inline(always)] fn slice_mut(&mut self) -> &mut [u32] { &mut self.data_[..] } } #[cfg(feature = "vector_scratch_space")] pub type HistogramDistanceScratch = Array528i; #[cfg(not(feature = "vector_scratch_space"))] pub type HistogramDistanceScratch = EmptyIVec; impl CostAccessors for HistogramDistance { type i32vec = HistogramDistanceScratch; fn make_nnz_storage() -> Self::i32vec { HistogramDistanceScratch::default() } #[inline(always)] fn total_count(&self) -> usize { self.total_count_ } #[inline(always)] fn bit_cost(&self) -> floatX { self.bit_cost_ } #[inline(always)] fn set_bit_cost(&mut self, data: floatX) { self.bit_cost_ = data; } #[inline(always)] fn set_total_count(&mut self, data: usize) { self.total_count_ = data; } } #[derive(Copy, Clone)] pub enum ContextType { CONTEXT_LSB6 = 0, CONTEXT_MSB6 = 1, CONTEXT_UTF8 = 2, CONTEXT_SIGNED = 3, } impl Default for ContextType { #[inline(always)] fn default() -> ContextType { ContextType::CONTEXT_LSB6 } } pub struct BlockSplitIterator<'a, Alloc: alloc::Allocator + 'a + alloc::Allocator + 'a> { pub split_: &'a BlockSplit, pub idx_: usize, pub type_: usize, pub length_: usize, } impl<'a, Alloc: alloc::Allocator + alloc::Allocator + 'a> BlockSplitIterator<'a, Alloc> { fn new(split: &'a BlockSplit) -> Self { Self { split_: split, idx_: 0, type_: 0, length_: if !split.lengths.slice().is_empty() { split.lengths.slice()[0] as usize } else { 0 }, } } fn next(&mut self) { if self.length_ == 0 { self.idx_ = self.idx_.wrapping_add(1); self.type_ = self.split_.types.slice()[self.idx_] as usize; self.length_ = self.split_.lengths.slice()[self.idx_] as usize; } self.length_ = self.length_.wrapping_sub(1); } } pub fn HistogramAddItem + SliceWrapperMut + CostAccessors>( xself: &mut HistogramType, val: usize, ) { { let _rhs = 1; let _lhs = &mut xself.slice_mut()[val]; let val = (*_lhs).wrapping_add(_rhs as u32); *_lhs = val; } let new_count = xself.total_count().wrapping_add(1); xself.set_total_count(new_count); } pub fn HistogramAddVector< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors, IntegerType: Sized + Clone, >( xself: &mut HistogramType, p: &[IntegerType], n: usize, ) where u64: core::convert::From, { let new_tc = xself.total_count().wrapping_add(n); xself.set_total_count(new_tc); for p_item in p[..n].iter() { let _rhs = 1; let index: usize = u64::from(p_item.clone()) as usize; let _lhs = &mut xself.slice_mut()[index]; *_lhs = (*_lhs).wrapping_add(_rhs as u32); } } #[inline(always)] pub fn HistogramClear + CostAccessors>( xself: &mut HistogramType, ) { for data_elem in xself.slice_mut().iter_mut() { *data_elem = 0; } xself.set_total_count(0); xself.set_bit_cost(3.402e+38); } pub fn ClearHistograms + CostAccessors>( array: &mut [HistogramType], length: usize, ) { for item in array[..length].iter_mut() { HistogramClear(item) } } #[inline(always)] pub fn HistogramAddHistogram< HistogramType: SliceWrapperMut + SliceWrapper + CostAccessors, >( xself: &mut HistogramType, v: &HistogramType, ) { let old_total_count = xself.total_count(); xself.set_total_count(old_total_count + (*v).total_count()); let h0 = xself.slice_mut(); let h1 = v.slice(); let n = min(h0.len(), h1.len()); for i in 0..n { let h0val = &mut h0[i]; let val = h0val.wrapping_add(h1[i]); *h0val = val; } } pub fn HistogramSelfAddHistogram< HistogramType: SliceWrapperMut + SliceWrapper + CostAccessors, >( xself: &mut [HistogramType], i0: usize, i1: usize, ) { let tc_new = xself[i1].total_count(); let tc_old = xself[i0].total_count(); xself[i0].set_total_count(tc_old.wrapping_add(tc_new)); let h0 = xself[i0].slice().len(); let h0a = xself[i0].slice().len(); let h1 = xself[i1].slice().len(); let n = min(h0, min(h0a, h1)); for h_index in 0..n { let val = xself[i0].slice()[h_index].wrapping_add(xself[i1].slice()[h_index]); xself[i0].slice_mut()[h_index] = val; } } #[inline(always)] pub fn Context(p1: u8, p2: u8, mode: ContextType) -> u8 { match mode { ContextType::CONTEXT_SIGNED => { (((kSigned3BitContextLookup[p1 as usize] as i32) << 3) + kSigned3BitContextLookup[p2 as usize] as i32) as u8 } ContextType::CONTEXT_UTF8 => { (kUTF8ContextLookup[p1 as usize] as i32 | kUTF8ContextLookup[(p2 as i32 + 256i32) as usize] as i32) as u8 } ContextType::CONTEXT_MSB6 => (p1 as i32 >> 2) as u8, ContextType::CONTEXT_LSB6 => (p1 as i32 & 0x3fi32) as u8, /* else { 0u8 }*/ } } pub fn BrotliBuildHistogramsWithContext<'a, Alloc: alloc::Allocator + alloc::Allocator>( cmds: &[Command], num_commands: usize, literal_split: &BlockSplit, insert_and_copy_split: &BlockSplit, dist_split: &BlockSplit, ringbuffer: &[u8], start_pos: usize, mask: usize, mut prev_byte: u8, mut prev_byte2: u8, context_modes: &[ContextType], literal_histograms: &mut [HistogramLiteral], insert_and_copy_histograms: &mut [HistogramCommand], copy_dist_histograms: &mut [HistogramDistance], ) { let mut pos: usize = start_pos; let mut literal_it: BlockSplitIterator; let mut insert_and_copy_it: BlockSplitIterator; let mut dist_it: BlockSplitIterator; literal_it = BlockSplitIterator::new(literal_split); insert_and_copy_it = BlockSplitIterator::new(insert_and_copy_split); dist_it = BlockSplitIterator::new(dist_split); for i in 0usize..num_commands { let cmd = &cmds[i]; let mut j: usize; insert_and_copy_it.next(); HistogramAddItem( &mut insert_and_copy_histograms[insert_and_copy_it.type_], cmd.cmd_prefix_ as usize, ); j = cmd.insert_len_ as usize; while j != 0usize { { literal_it.next(); let context: usize = if !context_modes.is_empty() { (literal_it.type_ << 6).wrapping_add(Context( prev_byte, prev_byte2, context_modes[literal_it.type_], ) as usize) } else { literal_it.type_ }; HistogramAddItem( &mut literal_histograms[(context as usize)], ringbuffer[(pos & mask)] as usize, ); prev_byte2 = prev_byte; prev_byte = ringbuffer[(pos & mask)]; pos = pos.wrapping_add(1); } j = j.wrapping_sub(1); } pos = pos.wrapping_add(cmd.copy_len() as usize); if cmd.copy_len() != 0 { prev_byte2 = ringbuffer[(pos.wrapping_sub(2) & mask)]; prev_byte = ringbuffer[(pos.wrapping_sub(1) & mask)]; if cmd.cmd_prefix_ as i32 >= 128i32 { dist_it.next(); let context: usize = (dist_it.type_ << 2).wrapping_add(cmd.distance_context() as usize); HistogramAddItem( &mut copy_dist_histograms[(context as usize)], cmd.dist_prefix_ as usize & 0x3ff, ); } } } } brotli-8.0.2/src/enc/input_pair.rs000064400000000000000000000102501046102023000152000ustar 00000000000000use core; use core::cmp::min; use super::super::alloc::{SliceWrapper, SliceWrapperMut}; use super::interface::Freezable; #[derive(Copy, Clone, Default, Debug)] pub struct InputReference<'a> { pub data: &'a [u8], pub orig_offset: usize, // offset into the original slice of data } impl<'a> SliceWrapper for InputReference<'a> { fn slice(&self) -> &[u8] { self.data } } impl<'a> Freezable for InputReference<'a> { fn freeze(&self) -> super::interface::SliceOffset { debug_assert!(self.data.len() <= 0xffff_ffff); super::interface::SliceOffset(self.orig_offset, self.data.len() as u32) } } #[derive(Default)] pub struct InputReferenceMut<'a> { pub data: &'a mut [u8], pub orig_offset: usize, // offset into the original slice of data } impl<'a> SliceWrapper for InputReferenceMut<'a> { fn slice(&self) -> &[u8] { self.data } } impl<'a> SliceWrapperMut for InputReferenceMut<'a> { fn slice_mut(&mut self) -> &mut [u8] { self.data } } impl<'a> From> for InputReference<'a> { fn from(val: InputReferenceMut<'a>) -> InputReference<'a> { InputReference { data: val.data, orig_offset: val.orig_offset, } } } impl<'a> From<&'a InputReferenceMut<'a>> for InputReference<'a> { fn from(val: &'a InputReferenceMut<'a>) -> InputReference<'a> { InputReference { data: val.data, orig_offset: val.orig_offset, } } } #[derive(Clone, Debug, Copy)] pub struct InputPair<'a>(pub InputReference<'a>, pub InputReference<'a>); impl<'a> PartialEq for InputPair<'a> { fn eq(&self, other: &InputPair<'_>) -> bool { if self.0.len() + self.1.len() != other.0.len() + other.1.len() { return false; } for (a_iter, b_iter) in self .0 .data .iter() .chain(self.1.data.iter()) .zip(other.0.data.iter().chain(other.1.data.iter())) { if *a_iter != *b_iter { return false; } } true } } impl<'a> core::ops::Index for InputPair<'a> { type Output = u8; fn index(&self, index: usize) -> &u8 { if index >= self.0.len() { &self.1.data[index - self.0.len()] } else { &self.0.data[index] } } } impl<'a> core::fmt::LowerHex for InputPair<'a> { fn fmt(&self, fmtr: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { for item in self.0.data { fmtr.write_fmt(format_args!("{:02x}", item))? } for item in self.1.data { fmtr.write_fmt(format_args!("{:02x}", item))? } Ok(()) } } impl<'a> InputPair<'a> { pub fn split_at(&self, loc: usize) -> (InputPair<'a>, InputPair<'a>) { if loc >= self.0.len() { let offset_from_self_1 = loc - self.0.len(); let (first, second) = self.1.data.split_at(min(offset_from_self_1, self.1.len())); return ( InputPair::<'a>( self.0, InputReference::<'a> { data: first, orig_offset: self.1.orig_offset, }, ), InputPair::<'a>( InputReference::<'a>::default(), InputReference::<'a> { data: second, orig_offset: offset_from_self_1 + self.1.orig_offset, }, ), ); } let (first, second) = self.0.data.split_at(min(loc, self.0.len())); ( InputPair::<'a>( InputReference::<'a> { data: first, orig_offset: self.0.orig_offset, }, InputReference::<'a>::default(), ), InputPair::<'a>( InputReference::<'a> { data: second, orig_offset: self.0.orig_offset + loc, }, self.1, ), ) } pub fn len(&self) -> usize { self.0.len() + self.1.len() } } brotli-8.0.2/src/enc/interface.rs000064400000000000000000000661511046102023000150010ustar 00000000000000use alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use core; use super::histogram; pub use super::input_pair::{InputPair, InputReference, InputReferenceMut}; #[derive(Debug, Copy, Clone, Default)] pub struct BlockSwitch(pub u8); /// Commands that can instantiate as a no-op should implement this. pub trait Nop { fn nop() -> T; } impl BlockSwitch { #[inline(always)] pub fn new(block_type: u8) -> Self { BlockSwitch(block_type) } #[inline(always)] pub fn block_type(&self) -> u8 { self.0 } } #[derive(Debug, Copy, Clone, Default)] pub struct LiteralBlockSwitch(pub BlockSwitch, pub u8); impl LiteralBlockSwitch { pub fn new(block_type: u8, stride: u8) -> Self { LiteralBlockSwitch(BlockSwitch::new(block_type), stride) } #[inline(always)] pub fn block_type(&self) -> u8 { self.0.block_type() } #[inline(always)] pub fn stride(&self) -> u8 { self.1 } #[inline(always)] pub fn update_stride(&mut self, new_stride: u8) { self.1 = new_stride; } } pub const LITERAL_PREDICTION_MODE_SIGN: u8 = 3; pub const LITERAL_PREDICTION_MODE_UTF8: u8 = 2; pub const LITERAL_PREDICTION_MODE_MSB6: u8 = 1; pub const LITERAL_PREDICTION_MODE_LSB6: u8 = 0; #[derive(Default, Copy, Clone, Debug, PartialEq, Eq, Hash)] pub struct LiteralPredictionModeNibble(pub u8); impl LiteralPredictionModeNibble { #[inline(always)] pub fn new(prediction_mode: u8) -> Result { if prediction_mode < 16 { return Ok(LiteralPredictionModeNibble(prediction_mode)); } Err(()) } #[inline(always)] pub fn prediction_mode(&self) -> u8 { self.0 } #[inline(always)] pub fn signed() -> Self { LiteralPredictionModeNibble(LITERAL_PREDICTION_MODE_SIGN) } #[inline(always)] pub fn utf8() -> Self { LiteralPredictionModeNibble(LITERAL_PREDICTION_MODE_UTF8) } #[inline(always)] pub fn msb6() -> Self { LiteralPredictionModeNibble(LITERAL_PREDICTION_MODE_MSB6) } #[inline(always)] pub fn lsb6() -> Self { LiteralPredictionModeNibble(LITERAL_PREDICTION_MODE_LSB6) } #[inline(always)] pub fn to_context_enum(&self) -> Result { match self.0 { LITERAL_PREDICTION_MODE_LSB6 => Ok(histogram::ContextType::CONTEXT_LSB6), LITERAL_PREDICTION_MODE_MSB6 => Ok(histogram::ContextType::CONTEXT_MSB6), LITERAL_PREDICTION_MODE_UTF8 => Ok(histogram::ContextType::CONTEXT_UTF8), LITERAL_PREDICTION_MODE_SIGN => Ok(histogram::ContextType::CONTEXT_SIGNED), _ => Err(()), } } } pub const NUM_SPEED_VALUES: usize = 12; pub const NUM_MIXING_VALUES: usize = 16 * 256 + 16 * 256; pub const NUM_PREDMODE_SETUP_VALUES: usize = 4; pub const RESERVED_OFFSET: usize = 3; pub const ADV_CONTEXT_MAP_OFFSET: usize = 2; pub const MIXING_MATH_OFFSET: usize = 1; pub const PREDMODE_OFFSET: usize = 0; pub const MIXING_OFFSET: usize = NUM_PREDMODE_SETUP_VALUES + PREDMODE_OFFSET; pub const SPEED_OFFSET: usize = MIXING_OFFSET + NUM_MIXING_VALUES; pub const DISTANCE_CONTEXT_MAP_OFFSET: usize = SPEED_OFFSET + NUM_SPEED_VALUES; pub const MAX_PREDMODE_SPEED_AND_DISTANCE_CONTEXT_MAP_SIZE: usize = DISTANCE_CONTEXT_MAP_OFFSET + 256 * 4; pub const MAX_LITERAL_CONTEXT_MAP_SIZE: usize = 256 * 64; pub const MAX_ADV_LITERAL_CONTEXT_MAP_SIZE: usize = 256 * 64 * 2; #[derive(Debug)] pub struct PredictionModeContextMap> { pub literal_context_map: SliceType, pub predmode_speed_and_distance_context_map: SliceType, } impl + SliceWrapperMut> PredictionModeContextMap { #[inline] pub fn distance_context_map_mut(&mut self) -> &mut [u8] { self.predmode_speed_and_distance_context_map .slice_mut() .split_at_mut(DISTANCE_CONTEXT_MAP_OFFSET) .1 } #[inline] pub fn set_stride_context_speed(&mut self, speed_max: [(u16, u16); 2]) { let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); for high in 0..2 { cm_slice[Self::stride_context_speed_offset() + high] = Self::u16_to_f8(speed_max[high].0); cm_slice[Self::stride_context_speed_max_offset() + high] = Self::u16_to_f8(speed_max[high].1); } } #[inline] pub fn set_context_map_speed(&mut self, speed_max: [(u16, u16); 2]) { let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); for high in 0..2 { cm_slice[Self::context_map_speed_offset() + high] = Self::u16_to_f8(speed_max[high].0); cm_slice[Self::context_map_speed_max_offset() + high] = Self::u16_to_f8(speed_max[high].1); } } pub fn set_mixing_math(&mut self, math_enum: u8) { let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); cm_slice[MIXING_MATH_OFFSET] = math_enum; } pub fn set_adv_context_map(&mut self, is_adv: u8) { let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); cm_slice[ADV_CONTEXT_MAP_OFFSET] = is_adv; } #[inline] pub fn set_mixing_values(&mut self, mixing_mask: &[u8; NUM_MIXING_VALUES]) { let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); cm_slice[MIXING_OFFSET..(MIXING_OFFSET + NUM_MIXING_VALUES)] .clone_from_slice(&mixing_mask[..]); } #[inline] pub fn get_mixing_values_mut(&mut self) -> &mut [u8] { let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); &mut cm_slice[MIXING_OFFSET..(MIXING_OFFSET + NUM_MIXING_VALUES)] } #[inline] pub fn set_combined_stride_context_speed(&mut self, speed_max: [(u16, u16); 2]) { let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); for high in 0..2 { cm_slice[Self::combined_stride_context_speed_offset() + high] = Self::u16_to_f8(speed_max[high].0); cm_slice[Self::combined_stride_context_speed_max_offset() + high] = Self::u16_to_f8(speed_max[high].1); } } pub fn set_literal_prediction_mode(&mut self, val: LiteralPredictionModeNibble) { let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); cm_slice[PREDMODE_OFFSET] = val.0; } } impl> PredictionModeContextMap { #[inline] pub fn from_mut>( other: PredictionModeContextMap, ) -> PredictionModeContextMap where SliceType: From, { PredictionModeContextMap:: { literal_context_map: SliceType::from(other.literal_context_map), predmode_speed_and_distance_context_map: SliceType::from( other.predmode_speed_and_distance_context_map, ), } } #[inline] pub fn get_mixing_values(&self) -> &[u8] { let cm_slice = self.predmode_speed_and_distance_context_map.slice(); &cm_slice[MIXING_OFFSET..(MIXING_OFFSET + NUM_MIXING_VALUES)] } #[inline] pub fn get_mixing_math(&self) -> u8 { let cm_slice = self.predmode_speed_and_distance_context_map.slice(); if cm_slice.len() <= MIXING_MATH_OFFSET { return 1; } cm_slice[MIXING_MATH_OFFSET] } #[inline] pub fn get_is_adv_context_map(&self) -> u8 { let cm_slice = self.predmode_speed_and_distance_context_map.slice(); if cm_slice.len() <= ADV_CONTEXT_MAP_OFFSET { return 0; } cm_slice[ADV_CONTEXT_MAP_OFFSET] } #[inline] pub fn has_context_speeds(&self) -> bool { self.predmode_speed_and_distance_context_map.slice().len() >= DISTANCE_CONTEXT_MAP_OFFSET } #[inline] pub fn size_of_combined_array(distance_context_map_size: usize) -> usize { distance_context_map_size + DISTANCE_CONTEXT_MAP_OFFSET } #[inline] pub fn context_speeds_standard_len(&self) -> usize { NUM_SPEED_VALUES } #[inline] pub fn context_speeds_f8(&self) -> &[u8] { &self.predmode_speed_and_distance_context_map.slice() [SPEED_OFFSET..DISTANCE_CONTEXT_MAP_OFFSET] } #[inline] pub fn distance_context_map(&self) -> &[u8] { self.predmode_speed_and_distance_context_map .slice() .split_at(DISTANCE_CONTEXT_MAP_OFFSET) .1 } #[inline] pub fn f8_to_u16(data: u8) -> u16 { self::u8_to_speed(data) } #[inline] pub fn u16_to_f8(data: u16) -> u8 { self::speed_to_u8(data) } #[inline] pub fn stride_context_speed_offset() -> usize { SPEED_OFFSET } #[inline] pub fn stride_context_speed_max_offset() -> usize { SPEED_OFFSET + 2 } #[inline] pub fn context_map_speed_offset() -> usize { SPEED_OFFSET + 4 } #[inline] pub fn context_map_speed_max_offset() -> usize { SPEED_OFFSET + 6 } #[inline] pub fn combined_stride_context_speed_offset() -> usize { SPEED_OFFSET + 8 } #[inline] pub fn combined_stride_context_speed_max_offset() -> usize { SPEED_OFFSET + 10 } #[inline] pub fn literal_prediction_mode(&self) -> LiteralPredictionModeNibble { let cm_slice = self.predmode_speed_and_distance_context_map.slice(); if PREDMODE_OFFSET < cm_slice.len() { LiteralPredictionModeNibble(cm_slice[PREDMODE_OFFSET]) } else { LiteralPredictionModeNibble::default() } } pub fn stride_context_speed(&self) -> [(u16, u16); 2] { let v = self.stride_context_speed_f8(); [ (self::u8_to_speed(v[0].0), self::u8_to_speed(v[0].1)), (self::u8_to_speed(v[1].0), self::u8_to_speed(v[1].1)), ] } pub fn context_map_speed(&self) -> [(u16, u16); 2] { let v = self.context_map_speed_f8(); [ (self::u8_to_speed(v[0].0), self::u8_to_speed(v[0].1)), (self::u8_to_speed(v[1].0), self::u8_to_speed(v[1].1)), ] } pub fn combined_stride_context_speed(&self) -> [(u16, u16); 2] { let v = self.combined_stride_context_speed_f8(); [ (self::u8_to_speed(v[0].0), self::u8_to_speed(v[0].1)), (self::u8_to_speed(v[1].0), self::u8_to_speed(v[1].1)), ] } #[inline] pub fn stride_context_speed_f8(&self) -> [(u8, u8); 2] { let cm_slice = self.predmode_speed_and_distance_context_map.slice(); let low_speed = cm_slice[Self::stride_context_speed_offset()]; let high_speed = cm_slice[Self::stride_context_speed_offset() + 1]; let low_max = cm_slice[Self::stride_context_speed_max_offset()]; let high_max = cm_slice[Self::stride_context_speed_max_offset() + 1]; [(low_speed, low_max), (high_speed, high_max)] } #[inline] pub fn combined_stride_context_speed_f8(&self) -> [(u8, u8); 2] { let cm_slice = self.predmode_speed_and_distance_context_map.slice(); let low_speed = cm_slice[Self::combined_stride_context_speed_offset()]; let high_speed = cm_slice[Self::combined_stride_context_speed_offset() + 1]; let low_max = cm_slice[Self::combined_stride_context_speed_max_offset()]; let high_max = cm_slice[Self::combined_stride_context_speed_max_offset() + 1]; [(low_speed, low_max), (high_speed, high_max)] } #[inline] pub fn context_map_speed_f8(&self) -> [(u8, u8); 2] { let cm_slice = self.predmode_speed_and_distance_context_map.slice(); let low_speed = cm_slice[Self::context_map_speed_offset()]; let high_speed = cm_slice[Self::context_map_speed_offset() + 1]; let low_max = cm_slice[Self::context_map_speed_max_offset()]; let high_max = cm_slice[Self::context_map_speed_max_offset() + 1]; [(low_speed, low_max), (high_speed, high_max)] } } impl + Clone> Clone for PredictionModeContextMap { #[inline(always)] fn clone(&self) -> Self { PredictionModeContextMap:: { literal_context_map: self.literal_context_map.clone(), predmode_speed_and_distance_context_map: self .predmode_speed_and_distance_context_map .clone(), } } } impl + Clone + Copy> Copy for PredictionModeContextMap {} #[derive(Debug, Clone, Copy)] pub struct CopyCommand { pub distance: u32, pub num_bytes: u32, } impl Nop for CopyCommand { #[inline(always)] fn nop() -> Self { CopyCommand { distance: 1, num_bytes: 0, } } } #[derive(Debug, Clone, Copy)] pub struct DictCommand { pub word_size: u8, pub transform: u8, pub final_size: u8, pub empty: u8, pub word_id: u32, } impl Nop for DictCommand { #[inline(always)] fn nop() -> Self { DictCommand { word_size: 0, transform: 0, final_size: 0, empty: 1, word_id: 0, } } } #[derive(Debug)] #[cfg(not(feature = "external-literal-probability"))] pub struct FeatureFlagSliceType>(core::marker::PhantomData); #[cfg(not(feature = "external-literal-probability"))] impl> SliceWrapper for FeatureFlagSliceType { fn slice(&self) -> &[u8] { &[] } } #[cfg(not(feature = "external-literal-probability"))] impl + Default> Default for FeatureFlagSliceType { fn default() -> Self { FeatureFlagSliceType::(core::marker::PhantomData::) } } #[derive(Debug)] #[cfg(feature = "external-literal-probability")] pub struct FeatureFlagSliceType>(pub SliceType); #[cfg(feature = "external-literal-probability")] impl> SliceWrapper for FeatureFlagSliceType { #[inline(always)] fn slice(&self) -> &[u8] { self.0.slice() } } #[cfg(feature = "external-literal-probability")] impl + Default> Default for FeatureFlagSliceType { #[inline(always)] fn default() -> Self { FeatureFlagSliceType::(SliceType::default()) } } impl + Clone> Clone for FeatureFlagSliceType { #[inline(always)] fn clone(&self) -> Self { FeatureFlagSliceType::(self.0) } } impl + Clone + Copy> Copy for FeatureFlagSliceType {} #[derive(Debug)] pub struct LiteralCommand> { pub data: SliceType, pub prob: FeatureFlagSliceType, pub high_entropy: bool, // this block of bytes is high entropy with a few patterns never seen again; adapt slower } impl> SliceWrapper for LiteralCommand { #[inline(always)] fn slice(&self) -> &[u8] { self.data.slice() } } impl + SliceWrapperMut> SliceWrapperMut for LiteralCommand { #[inline(always)] fn slice_mut(&mut self) -> &mut [u8] { self.data.slice_mut() } } impl + Default> Nop> for LiteralCommand { #[inline(always)] fn nop() -> Self { LiteralCommand { data: SliceType::default(), prob: FeatureFlagSliceType::::default(), high_entropy: false, } } } impl + Clone> Clone for LiteralCommand { #[inline(always)] fn clone(&self) -> LiteralCommand { LiteralCommand:: { data: self.data.clone(), prob: self.prob.clone(), high_entropy: self.high_entropy, } } } impl + Clone + Copy> Copy for LiteralCommand {} #[derive(Debug)] pub enum Command> { Copy(CopyCommand), Dict(DictCommand), Literal(LiteralCommand), BlockSwitchCommand(BlockSwitch), BlockSwitchLiteral(LiteralBlockSwitch), BlockSwitchDistance(BlockSwitch), PredictionMode(PredictionModeContextMap), } impl + Default> Command { #[inline] pub fn free_array(&mut self, apply_func: &mut F) where F: FnMut(SliceType), { match self { Command::Literal(ref mut lit) => apply_func(core::mem::take(&mut lit.data)), Command::PredictionMode(ref mut pm) => { apply_func(core::mem::take(&mut pm.literal_context_map)); apply_func(core::mem::take( &mut pm.predmode_speed_and_distance_context_map, )); } _ => {} } } } impl> Default for Command { #[inline(always)] fn default() -> Self { Command::::nop() } } impl> Nop> for Command { #[inline(always)] fn nop() -> Command { Command::Copy(CopyCommand::nop()) } } impl + Clone> Clone for Command { #[inline] fn clone(&self) -> Command { match self { Command::Copy(copy) => Command::Copy(*copy), Command::Dict(dict) => Command::Dict(*dict), Command::Literal(literal) => Command::Literal(literal.clone()), Command::BlockSwitchCommand(switch) => Command::BlockSwitchCommand(*switch), Command::BlockSwitchLiteral(switch) => Command::BlockSwitchLiteral(*switch), Command::BlockSwitchDistance(switch) => Command::BlockSwitchDistance(*switch), Command::PredictionMode(pm) => Command::PredictionMode(pm.clone()), } } } impl + Clone + Copy> Copy for Command {} #[inline(always)] pub fn free_cmd_inline>( xself: &mut Command, m8: &mut SliceTypeAllocator, ) { match *xself { Command::Literal(ref mut lit) => m8.free_cell(core::mem::take(&mut lit.data)), Command::PredictionMode(ref mut pm) => { m8.free_cell(core::mem::take(&mut pm.literal_context_map)); m8.free_cell(core::mem::take( &mut pm.predmode_speed_and_distance_context_map, )); } Command::Dict(_) | Command::Copy(_) | Command::BlockSwitchCommand(_) | Command::BlockSwitchLiteral(_) | Command::BlockSwitchDistance(_) => {} } } #[inline(never)] pub fn free_cmd>( xself: &mut Command, m8: &mut SliceTypeAllocator, ) { free_cmd_inline(xself, m8) } #[derive(Clone, Copy, Default, Debug)] pub struct SliceOffset(pub usize, pub u32); impl SliceWrapper for SliceOffset { fn slice(&self) -> &[u8] { // not perfect--shouldn't be calling this without thawing the wrapper &[] } } pub trait Freezable { fn freeze(&self) -> SliceOffset; } pub trait Unfreezable { fn thaw<'a>(&self, data: &'a [u8]) -> InputReference<'a>; fn thaw_mut<'a>(&self, data: &'a mut [u8]) -> InputReferenceMut<'a>; fn thaw_pair<'a>(&self, pair: &InputPair<'a>) -> Result, ()>; } impl<'a> From> for SliceOffset { fn from(f: InputReference<'a>) -> Self { debug_assert!(f.data.len() <= 0xffff_ffff); SliceOffset(f.orig_offset, f.data.len() as u32) } } impl Unfreezable for SliceOffset { fn thaw<'a>(&self, data: &'a [u8]) -> InputReference<'a> { InputReference { data: data.split_at(self.0).1.split_at(self.1 as usize).0, orig_offset: self.0, } } fn thaw_mut<'a>(&self, data: &'a mut [u8]) -> InputReferenceMut<'a> { InputReferenceMut { data: data.split_at_mut(self.0).1.split_at_mut(self.1 as usize).0, orig_offset: self.0, } } fn thaw_pair<'a>(&self, pair: &InputPair<'a>) -> Result, ()> { if self.0 >= pair.1.orig_offset { return Ok(InputReference { data: pair .1 .data .split_at(self.0 - pair.1.orig_offset) .1 .split_at(self.1 as usize) .0, orig_offset: self.0, }); } let offset = self.0 - pair.0.orig_offset; if offset + self.1 as usize <= pair.0.data.len() { // overlap Ok(InputReference { data: pair.0.data.split_at(offset).1.split_at(self.1 as usize).0, orig_offset: self.0, }) } else { Err(()) } } } impl SliceOffset { pub fn offset(&self) -> usize { self.0 } pub fn len(&self) -> usize { self.1 as usize } pub fn len32(&self) -> u32 { self.1 } } pub type StaticCommand = Command; pub trait CommandProcessor<'a> { fn push(&mut self, val: Command>); fn push_literals(&mut self, data: &InputPair<'a>) { if data.0.len() != 0 { self.push(Command::Literal(LiteralCommand { data: data.0, prob: FeatureFlagSliceType::::default(), high_entropy: false, })); } if data.1.len() != 0 { self.push(Command::Literal(LiteralCommand { data: data.1, prob: FeatureFlagSliceType::::default(), high_entropy: false, })); } } fn push_rand_literals(&mut self, data: &InputPair<'a>) { if data.0.len() != 0 { self.push(Command::Literal(LiteralCommand { data: data.0, prob: FeatureFlagSliceType::::default(), high_entropy: true, })); } if data.1.len() != 0 { self.push(Command::Literal(LiteralCommand { data: data.1, prob: FeatureFlagSliceType::::default(), high_entropy: true, })); } } fn push_block_switch_literal(&mut self, block_type: u8) { self.push(Command::BlockSwitchLiteral(LiteralBlockSwitch::new( block_type, 0, ))) } } impl> Command { pub fn thaw_pair<'a>(&self, data: &InputPair<'a>) -> Command> { match self { Command::Literal(ref lit) => Command::Literal(LiteralCommand { data: lit.data.thaw_pair(data).unwrap(), prob: FeatureFlagSliceType::default(), high_entropy: lit.high_entropy, }), Command::PredictionMode(ref pm) => Command::PredictionMode(PredictionModeContextMap { literal_context_map: pm.literal_context_map.thaw_pair(data).unwrap(), predmode_speed_and_distance_context_map: pm .predmode_speed_and_distance_context_map .thaw_pair(data) .unwrap(), }), Command::Dict(ref d) => Command::Dict(*d), Command::Copy(ref c) => Command::Copy(*c), Command::BlockSwitchCommand(ref c) => Command::BlockSwitchCommand(*c), Command::BlockSwitchLiteral(ref c) => Command::BlockSwitchLiteral(*c), Command::BlockSwitchDistance(ref c) => Command::BlockSwitchDistance(*c), } } pub fn thaw<'a>(&self, data: &'a [u8]) -> Command> { match self { Command::Literal(ref lit) => Command::Literal(LiteralCommand { data: lit.data.thaw(data), prob: FeatureFlagSliceType::default(), high_entropy: lit.high_entropy, }), Command::PredictionMode(ref pm) => Command::PredictionMode(PredictionModeContextMap { literal_context_map: pm.literal_context_map.thaw(data), predmode_speed_and_distance_context_map: pm .predmode_speed_and_distance_context_map .thaw(data), }), Command::Dict(ref d) => Command::Dict(*d), Command::Copy(ref c) => Command::Copy(*c), Command::BlockSwitchCommand(ref c) => Command::BlockSwitchCommand(*c), Command::BlockSwitchLiteral(ref c) => Command::BlockSwitchLiteral(*c), Command::BlockSwitchDistance(ref c) => Command::BlockSwitchDistance(*c), } } } impl + Freezable> Command { pub fn freeze(&self) -> Command { match self { Command::Literal(ref lit) => Command::Literal(LiteralCommand { data: lit.data.freeze(), prob: FeatureFlagSliceType::default(), high_entropy: lit.high_entropy, }), Command::PredictionMode(ref pm) => Command::PredictionMode(PredictionModeContextMap { literal_context_map: pm.literal_context_map.freeze(), predmode_speed_and_distance_context_map: pm .predmode_speed_and_distance_context_map .freeze(), }), Command::Dict(ref d) => Command::Dict(*d), Command::Copy(ref c) => Command::Copy(*c), Command::BlockSwitchCommand(ref c) => Command::BlockSwitchCommand(*c), Command::BlockSwitchLiteral(ref c) => Command::BlockSwitchLiteral(*c), Command::BlockSwitchDistance(ref c) => Command::BlockSwitchDistance(*c), } } } #[inline(always)] pub fn speed_to_u8(data: u16) -> u8 { let length = 16 - data.leading_zeros() as u8; let mantissa = if data != 0 { let rem = data - (1 << (length - 1)); (rem << 3) >> (length - 1) } else { 0 }; (length << 3) | mantissa as u8 } #[inline(always)] pub fn u8_to_speed(data: u8) -> u16 { if data < 8 { 0 } else { let log_val = (data >> 3) - 1; let rem = (u16::from(data) & 0x07) << log_val; (1u16 << log_val) | (rem >> 3) } } #[cfg(test)] mod test { use super::{speed_to_u8, u8_to_speed}; fn tst_u8_to_speed(data: u16) { assert_eq!(u8_to_speed(speed_to_u8(data)), data); } #[test] fn test_u8_to_speed() { tst_u8_to_speed(0); tst_u8_to_speed(1); tst_u8_to_speed(2); tst_u8_to_speed(3); tst_u8_to_speed(4); tst_u8_to_speed(5); tst_u8_to_speed(6); tst_u8_to_speed(7); tst_u8_to_speed(8); tst_u8_to_speed(10); tst_u8_to_speed(12); tst_u8_to_speed(16); tst_u8_to_speed(24); tst_u8_to_speed(32); tst_u8_to_speed(48); tst_u8_to_speed(64); tst_u8_to_speed(96); tst_u8_to_speed(768); tst_u8_to_speed(1280); tst_u8_to_speed(1536); tst_u8_to_speed(1664); } } brotli-8.0.2/src/enc/ir_interpret.rs000064400000000000000000000107111046102023000155360ustar 00000000000000use super::super::alloc::SliceWrapper; use super::constants::{kSigned3BitContextLookup, kUTF8ContextLookup}; use super::histogram::ContextType; use super::input_pair::InputReference; use super::interface; use super::interface::LiteralPredictionModeNibble; pub trait IRInterpreter { fn inc_local_byte_offset(&mut self, inc: usize); fn local_byte_offset(&self) -> usize; fn update_block_type(&mut self, new_type: u8, new_stride: u8); fn block_type(&self) -> u8; fn literal_data_at_offset(&self, index: usize) -> u8; fn literal_context_map(&self) -> &[u8]; fn prediction_mode(&self) -> crate::interface::LiteralPredictionModeNibble; fn update_cost( &mut self, stride_prior: [u8; 8], stride_byte_offset: usize, selected_bits: u8, cm_prior: usize, literal: u8, ); } pub fn push_base( xself: &mut Interpreter, val: interface::Command>, ) { match val { interface::Command::BlockSwitchCommand(_) | interface::Command::BlockSwitchDistance(_) | interface::Command::PredictionMode(_) => {} interface::Command::Copy(ref copy) => { xself.inc_local_byte_offset(copy.num_bytes as usize); } interface::Command::Dict(ref dict) => { xself.inc_local_byte_offset(dict.final_size as usize); } interface::Command::BlockSwitchLiteral(block_type) => { xself.update_block_type(block_type.block_type(), block_type.stride()) } interface::Command::Literal(ref lit) => { //let stride = xself.get_stride(xself.local_byte_offset()) as usize; let mut priors = [0u8; 8]; for poffset in 0..8 { if xself.local_byte_offset() > poffset { let input_offset = xself.local_byte_offset() - poffset - 1; priors[7 - poffset] = xself.literal_data_at_offset(input_offset); } } let mut cur = 0usize; for literal in lit.data.slice().iter() { let (huffman_table_index, selected_bits) = compute_huffman_table_index_for_context_map( priors[(cur + 7) & 7], priors[(cur + 6) & 7], xself.literal_context_map(), xself.prediction_mode(), xself.block_type(), ); xself.update_cost( priors, (cur + 7) & 7, selected_bits, huffman_table_index, *literal, ); priors[cur & 7] = *literal; cur += 1; cur &= 7; } xself.inc_local_byte_offset(lit.data.slice().len()); } } } // not sure why this fails //impl<'a> interface::CommandProcessor<'a> for IRInterpreter { // fn push])>(&mut self, // val: interface::Command>, // callback: &mut Cb) { // push_base(self, val, callback) // } //} fn compute_huffman_table_index_for_context_map( prev_byte: u8, prev_prev_byte: u8, literal_context_map: &[u8], //interface::PredictionModeContextMap, prediction_mode: LiteralPredictionModeNibble, block_type: u8, ) -> (usize, u8) { let prior = Context( prev_byte, prev_prev_byte, prediction_mode.to_context_enum().unwrap(), ); assert!(prior < 64); let context_map_index = ((block_type as usize) << 6) | prior as usize; if context_map_index < literal_context_map.len() { (literal_context_map[context_map_index] as usize, prior) } else { (prior as usize, prior) } } pub fn Context(p1: u8, p2: u8, mode: ContextType) -> u8 { match mode { ContextType::CONTEXT_LSB6 => p1 & 0x3f, ContextType::CONTEXT_MSB6 => (p1 as i32 >> 2) as u8, ContextType::CONTEXT_UTF8 => { (kUTF8ContextLookup[p1 as usize] as i32 | kUTF8ContextLookup[(p2 as i32 + 256i32) as usize] as i32) as u8 } ContextType::CONTEXT_SIGNED => { (((kSigned3BitContextLookup[p1 as usize] as i32) << 3) + kSigned3BitContextLookup[p2 as usize] as i32) as u8 } } // 0u8 } brotli-8.0.2/src/enc/literal_cost.rs000064400000000000000000000204261046102023000155200ustar 00000000000000use core::cmp::min; use super::util::{floatX, FastLog2f64}; use crate::enc::utf8_util::is_mostly_utf8; static kMinUTF8Ratio: floatX = 0.75; fn UTF8Position(last: usize, c: usize, clamp: usize) -> usize { if c < 128usize { 0usize } else if c >= 192usize { min(1usize, clamp) } else if last < 0xe0usize { 0usize } else { min(2usize, clamp) } } fn DecideMultiByteStatsLevel(pos: usize, len: usize, mask: usize, data: &[u8]) -> usize { let mut counts = [0usize; 3]; let mut max_utf8: usize = 1; let mut last_c: usize = 0usize; let mut i: usize; i = 0usize; while i < len { { let c: usize = data[(pos.wrapping_add(i) & mask)] as usize; { let _rhs = 1; let _lhs = &mut counts[UTF8Position(last_c, c, 2usize)]; *_lhs = (*_lhs).wrapping_add(_rhs as usize); } last_c = c; } i = i.wrapping_add(1); } if counts[2] < 500usize { max_utf8 = 1; } if counts[1].wrapping_add(counts[2]) < 25usize { max_utf8 = 0usize; } max_utf8 } fn EstimateBitCostsForLiteralsUTF8( pos: usize, len: usize, mask: usize, data: &[u8], cost: &mut [floatX], ) { let max_utf8: usize = DecideMultiByteStatsLevel(pos, len, mask, data); let mut histogram = [[0usize; 256]; 3]; let window_half: usize = 495usize; let in_window: usize = min(window_half, len); let mut in_window_utf8 = [0usize; 3]; let mut i: usize; { let mut last_c: usize = 0usize; let mut utf8_pos: usize = 0usize; i = 0usize; while i < in_window { { let c: usize = data[(pos.wrapping_add(i) & mask)] as usize; { let _rhs = 1; let _lhs = &mut histogram[utf8_pos][c]; *_lhs = (*_lhs).wrapping_add(_rhs as usize); } { let _rhs = 1; let _lhs = &mut in_window_utf8[utf8_pos]; *_lhs = (*_lhs).wrapping_add(_rhs as usize); } utf8_pos = UTF8Position(last_c, c, max_utf8); last_c = c; } i = i.wrapping_add(1); } } i = 0usize; while i < len { { if i >= window_half { let c: usize = (if i < window_half.wrapping_add(1) { 0i32 } else { data[(pos .wrapping_add(i) .wrapping_sub(window_half) .wrapping_sub(1) & mask)] as i32 }) as usize; let last_c: usize = (if i < window_half.wrapping_add(2) { 0i32 } else { data[(pos .wrapping_add(i) .wrapping_sub(window_half) .wrapping_sub(2) & mask)] as i32 }) as usize; let utf8_pos2: usize = UTF8Position(last_c, c, max_utf8); { let _rhs = 1; let _lhs = &mut histogram[utf8_pos2] [data[(pos.wrapping_add(i).wrapping_sub(window_half) & mask)] as usize]; *_lhs = (*_lhs).wrapping_sub(_rhs as usize); } { let _rhs = 1; let _lhs = &mut in_window_utf8[utf8_pos2]; *_lhs = (*_lhs).wrapping_sub(_rhs as usize); } } if i.wrapping_add(window_half) < len { let c: usize = data[(pos .wrapping_add(i) .wrapping_add(window_half) .wrapping_sub(1) & mask)] as usize; let last_c: usize = data[(pos .wrapping_add(i) .wrapping_add(window_half) .wrapping_sub(2) & mask)] as usize; let utf8_pos2: usize = UTF8Position(last_c, c, max_utf8); { let _rhs = 1; let _lhs = &mut histogram[utf8_pos2] [data[(pos.wrapping_add(i).wrapping_add(window_half) & mask)] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as usize); } { let _rhs = 1; let _lhs = &mut in_window_utf8[utf8_pos2]; *_lhs = (*_lhs).wrapping_add(_rhs as usize); } } { let c: usize = (if i < 1 { 0i32 } else { data[(pos.wrapping_add(i).wrapping_sub(1) & mask)] as i32 }) as usize; let last_c: usize = (if i < 2usize { 0i32 } else { data[(pos.wrapping_add(i).wrapping_sub(2) & mask)] as i32 }) as usize; let utf8_pos: usize = UTF8Position(last_c, c, max_utf8); let masked_pos: usize = pos.wrapping_add(i) & mask; let mut histo: usize = histogram[utf8_pos][data[masked_pos] as usize]; //precision is vital here: lets keep double precision let mut lit_cost: f64; if histo == 0usize { histo = 1; } lit_cost = FastLog2f64(in_window_utf8[utf8_pos] as u64) as f64 - FastLog2f64(histo as u64) as f64; lit_cost += 0.02905; if lit_cost < 1.0 { lit_cost *= 0.5; lit_cost += 0.5; } if i < 2000usize { lit_cost += (0.7 - (2000usize).wrapping_sub(i) as (f64) / 2000.0 * 0.35); } cost[i] = lit_cost as floatX; } } i = i.wrapping_add(1); } } pub fn BrotliEstimateBitCostsForLiterals( pos: usize, len: usize, mask: usize, data: &[u8], cost: &mut [floatX], ) { if is_mostly_utf8(data, pos, mask, len, kMinUTF8Ratio) { EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost); } else { let mut histogram: [usize; 256] = [0; 256]; let window_half: usize = 2000usize; let mut in_window: usize = min(window_half, len); let mut i: usize; for i in 0usize..in_window { let _rhs = 1; let _lhs = &mut histogram[data[(pos.wrapping_add(i) & mask)] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as usize); } i = 0usize; while i < len { { let mut histo: usize; if i >= window_half { { let _rhs = 1; let _lhs = &mut histogram [data[(pos.wrapping_add(i).wrapping_sub(window_half) & mask)] as usize]; *_lhs = (*_lhs).wrapping_sub(_rhs as usize); } in_window = in_window.wrapping_sub(1); } if i.wrapping_add(window_half) < len { { let _rhs = 1; let _lhs = &mut histogram [data[(pos.wrapping_add(i).wrapping_add(window_half) & mask)] as usize]; *_lhs = (*_lhs).wrapping_add(_rhs as usize); } in_window = in_window.wrapping_add(1); } histo = histogram[data[(pos.wrapping_add(i) & mask)] as usize]; if histo == 0usize { histo = 1; } { //precision is vital here: lets keep double precision let mut lit_cost: f64 = FastLog2f64(in_window as u64) as f64 - FastLog2f64(histo as u64) as f64; lit_cost += 0.029; if lit_cost < 1.0 { lit_cost *= 0.5; lit_cost += 0.5; } cost[i] = lit_cost as floatX; } } i = i.wrapping_add(1); } } } brotli-8.0.2/src/enc/log_table_16.rs000064400000000000000000045615061046102023000153070ustar 00000000000000use crate::enc::floatX; pub static logs_16: [floatX; 65536] = [ 0.0, 0.0, 1.0, 1.58496250072, 2.0, 2.32192809489, 2.58496250072, 2.80735492206, 3.0, 3.16992500144, 3.32192809489, 3.45943161864, 3.58496250072, 3.70043971814, 3.80735492206, 3.90689059561, 4.0, 4.08746284125, 4.16992500144, 4.24792751344, 4.32192809489, 4.39231742278, 4.45943161864, 4.52356195606, 4.58496250072, 4.64385618977, 4.70043971814, 4.75488750216, 4.80735492206, 4.85798099513, 4.90689059561, 4.95419631039, 5.0, 5.04439411936, 5.08746284125, 5.12928301694, 5.16992500144, 5.20945336563, 5.24792751344, 5.28540221886, 5.32192809489, 5.35755200462, 5.39231742278, 5.4262647547, 5.45943161864, 5.49185309633, 5.52356195606, 5.55458885168, 5.58496250072, 5.61470984412, 5.64385618977, 5.67242534197, 5.70043971814, 5.72792045456, 5.75488750216, 5.78135971352, 5.80735492206, 5.83289001416, 5.85798099513, 5.88264304936, 5.90689059561, 5.93073733756, 5.95419631039, 5.9772799235, 6.0, 6.02236781303, 6.04439411936, 6.06608919046, 6.08746284125, 6.10852445678, 6.12928301694, 6.1497471195, 6.16992500144, 6.18982455888, 6.20945336563, 6.2288186905, 6.24792751344, 6.26678654069, 6.28540221886, 6.30378074818, 6.32192809489, 6.33985000288, 6.35755200462, 6.37503943135, 6.39231742278, 6.40939093614, 6.4262647547, 6.44294349585, 6.45943161864, 6.47573343097, 6.49185309633, 6.5077946402, 6.52356195606, 6.53915881111, 6.55458885168, 6.56985560833, 6.58496250072, 6.59991284219, 6.61470984412, 6.62935662008, 6.64385618977, 6.65821148275, 6.67242534197, 6.68650052718, 6.70043971814, 6.71424551767, 6.72792045456, 6.7414669864, 6.75488750216, 6.76818432478, 6.78135971352, 6.79441586635, 6.80735492206, 6.82017896242, 6.83289001416, 6.84549005094, 6.85798099513, 6.87036471958, 6.88264304936, 6.89481776331, 6.90689059561, 6.91886323727, 6.93073733756, 6.94251450534, 6.95419631039, 6.96578428466, 6.9772799235, 6.98868468677, 7.0, 7.01122725542, 7.02236781303, 7.03342300154, 7.04439411936, 7.0552824355, 7.06608919046, 7.07681559705, 7.08746284125, 7.09803208296, 7.10852445678, 7.11894107272, 7.12928301694, 7.1395513524, 7.1497471195, 7.15987133678, 7.16992500144, 7.17990909001, 7.18982455888, 7.19967234484, 7.20945336563, 7.21916852046, 7.2288186905, 7.23840473933, 7.24792751344, 7.25738784269, 7.26678654069, 7.27612440527, 7.28540221886, 7.29462074889, 7.30378074818, 7.31288295528, 7.32192809489, 7.33091687811, 7.33985000288, 7.34872815423, 7.35755200462, 7.36632221425, 7.37503943135, 7.38370429247, 7.39231742278, 7.40087943628, 7.40939093614, 7.41785251489, 7.4262647547, 7.43462822764, 7.44294349585, 7.45121111183, 7.45943161864, 7.46760555008, 7.47573343097, 7.48381577726, 7.49185309633, 7.49984588708, 7.5077946402, 7.51569983828, 7.52356195606, 7.53138146052, 7.53915881111, 7.54689445989, 7.55458885168, 7.56224242422, 7.56985560833, 7.57742882804, 7.58496250072, 7.59245703727, 7.59991284219, 7.60733031375, 7.61470984412, 7.62205181946, 7.62935662008, 7.63662462054, 7.64385618977, 7.65105169118, 7.65821148275, 7.66533591719, 7.67242534197, 7.67948009951, 7.68650052718, 7.6934869575, 7.70043971814, 7.70735913208, 7.71424551767, 7.72109918871, 7.72792045456, 7.73470962023, 7.7414669864, 7.74819284959, 7.75488750216, 7.76155123244, 7.76818432478, 7.7747870596, 7.78135971352, 7.78790255939, 7.79441586635, 7.80089989992, 7.80735492206, 7.81378119122, 7.82017896242, 7.82654848729, 7.83289001416, 7.8392037881, 7.84549005094, 7.85174904142, 7.85798099513, 7.86418614465, 7.87036471958, 7.87651694657, 7.88264304936, 7.8887432489, 7.89481776331, 7.90086680798, 7.90689059561, 7.91288933623, 7.91886323727, 7.92481250361, 7.93073733756, 7.936637939, 7.94251450534, 7.94836723158, 7.95419631039, 7.96000193207, 7.96578428466, 7.97154355395, 7.9772799235, 7.98299357469, 7.98868468677, 7.99435343686, 8.0, 8.00562454919, 8.01122725542, 8.01680828769, 8.02236781303, 8.02790599657, 8.03342300154, 8.03891898929, 8.04439411936, 8.04984854945, 8.0552824355, 8.06069593169, 8.06608919046, 8.07146236256, 8.07681559705, 8.08214904135, 8.08746284125, 8.09275714092, 8.09803208296, 8.10328780841, 8.10852445678, 8.11374216605, 8.11894107272, 8.12412131183, 8.12928301694, 8.13442632022, 8.1395513524, 8.14465824283, 8.1497471195, 8.15481810905, 8.15987133678, 8.16490692668, 8.16992500144, 8.1749256825, 8.17990909001, 8.18487534291, 8.18982455888, 8.19475685442, 8.19967234484, 8.20457114425, 8.20945336563, 8.2143191208, 8.21916852046, 8.2240016742, 8.2288186905, 8.23361967676, 8.23840473933, 8.24317398347, 8.24792751344, 8.25266543245, 8.25738784269, 8.26209484537, 8.26678654069, 8.2714630279, 8.27612440527, 8.28077077013, 8.28540221886, 8.29001884693, 8.29462074889, 8.29920801839, 8.30378074818, 8.30833903014, 8.31288295528, 8.31741261376, 8.32192809489, 8.32642948712, 8.33091687811, 8.33539035469, 8.33985000288, 8.34429590792, 8.34872815423, 8.3531468255, 8.35755200462, 8.36194377374, 8.36632221425, 8.37068740681, 8.37503943135, 8.37937836707, 8.38370429247, 8.38801728535, 8.39231742278, 8.39660478118, 8.40087943628, 8.40514146314, 8.40939093614, 8.41362792902, 8.41785251489, 8.42206476617, 8.4262647547, 8.43045255167, 8.43462822764, 8.43879185258, 8.44294349585, 8.44708322621, 8.45121111183, 8.4553272203, 8.45943161864, 8.46352437327, 8.46760555008, 8.47167521439, 8.47573343097, 8.47978026403, 8.48381577726, 8.48784003382, 8.49185309633, 8.49585502689, 8.49984588708, 8.503825738, 8.5077946402, 8.51175265377, 8.51569983828, 8.51963625284, 8.52356195606, 8.52747700606, 8.53138146052, 8.53527537662, 8.53915881111, 8.54303182026, 8.54689445989, 8.55074678538, 8.55458885168, 8.55842071327, 8.56224242422, 8.56605403817, 8.56985560833, 8.57364718749, 8.57742882804, 8.58120058192, 8.58496250072, 8.58871463558, 8.59245703727, 8.59618975614, 8.59991284219, 8.60362634499, 8.60733031375, 8.61102479731, 8.61470984412, 8.61838550226, 8.62205181946, 8.62570884306, 8.62935662008, 8.63299519714, 8.63662462054, 8.64024493622, 8.64385618977, 8.64745842645, 8.65105169118, 8.65463602853, 8.65821148275, 8.66177809777, 8.66533591719, 8.66888498427, 8.67242534197, 8.67595703294, 8.67948009951, 8.68299458368, 8.68650052718, 8.68999797142, 8.6934869575, 8.69696752623, 8.70043971814, 8.70390357344, 8.70735913208, 8.7108064337, 8.71424551767, 8.71767642307, 8.72109918871, 8.72451385312, 8.72792045456, 8.73131903103, 8.73470962023, 8.73809225962, 8.7414669864, 8.7448338375, 8.74819284959, 8.75154405909, 8.75488750216, 8.75822321473, 8.76155123244, 8.76487159074, 8.76818432478, 8.7714894695, 8.7747870596, 8.77807712954, 8.78135971352, 8.78463484556, 8.78790255939, 8.79116288856, 8.79441586635, 8.79766152585, 8.80089989992, 8.80413102118, 8.80735492206, 8.81057163474, 8.81378119122, 8.81698362326, 8.82017896242, 8.82336724005, 8.82654848729, 8.82972273509, 8.83289001416, 8.83605035506, 8.8392037881, 8.84235034341, 8.84549005094, 8.84862294043, 8.85174904142, 8.85486838326, 8.85798099513, 8.861086906, 8.86418614465, 8.86727873971, 8.87036471958, 8.87344411252, 8.87651694656, 8.87958324961, 8.88264304936, 8.88569637334, 8.8887432489, 8.89178370322, 8.89481776331, 8.89784545601, 8.90086680798, 8.90388184574, 8.90689059561, 8.90989308377, 8.91288933623, 8.91587937884, 8.91886323727, 8.92184093707, 8.92481250361, 8.92777796208, 8.93073733756, 8.93369065495, 8.936637939, 8.93957921431, 8.94251450534, 8.94544383638, 8.94836723158, 8.95128471497, 8.95419631039, 8.95710204156, 8.96000193207, 8.96289600534, 8.96578428466, 8.9686667932, 8.97154355395, 8.97441458981, 8.9772799235, 8.98013957764, 8.98299357469, 8.985841937, 8.98868468677, 8.99152184608, 8.99435343686, 8.99717948094, 9.0, 9.00281501561, 9.00562454919, 9.00842862207, 9.01122725542, 9.01402047031, 9.01680828769, 9.01959072836, 9.02236781303, 9.02513956228, 9.02790599657, 9.03066713625, 9.03342300154, 9.03617361255, 9.03891898929, 9.04165915164, 9.04439411936, 9.04712391211, 9.04984854945, 9.0525680508, 9.0552824355, 9.05799172276, 9.06069593169, 9.06339508129, 9.06608919046, 9.06877827799, 9.07146236256, 9.07414146275, 9.07681559705, 9.07948478383, 9.08214904135, 9.0848083878, 9.08746284125, 9.09011241966, 9.09275714092, 9.09539702279, 9.09803208296, 9.10066233901, 9.10328780841, 9.10590850857, 9.10852445678, 9.11113567023, 9.11374216605, 9.11634396124, 9.11894107272, 9.12153351734, 9.12412131183, 9.12670447284, 9.12928301694, 9.13185696061, 9.13442632022, 9.13699111208, 9.1395513524, 9.1421070573, 9.14465824283, 9.14720492494, 9.1497471195, 9.15228484231, 9.15481810905, 9.15734693536, 9.15987133678, 9.16239132876, 9.16490692668, 9.16741814583, 9.16992500144, 9.17242750865, 9.1749256825, 9.17741953799, 9.17990909001, 9.1823943534, 9.18487534291, 9.1873520732, 9.18982455888, 9.19229281447, 9.19475685442, 9.19721669311, 9.19967234484, 9.20212382383, 9.20457114425, 9.20701432018, 9.20945336563, 9.21188829455, 9.2143191208, 9.2167458582, 9.21916852046, 9.22158712126, 9.2240016742, 9.22641219279, 9.2288186905, 9.23122118071, 9.23361967676, 9.2360141919, 9.23840473933, 9.24079133216, 9.24317398347, 9.24555270626, 9.24792751344, 9.25029841791, 9.25266543245, 9.25502856982, 9.25738784269, 9.25974326369, 9.26209484537, 9.26444260023, 9.26678654069, 9.26912667915, 9.2714630279, 9.27379559921, 9.27612440527, 9.27844945822, 9.28077077013, 9.28308835302, 9.28540221886, 9.28771237955, 9.29001884693, 9.2923216328, 9.29462074889, 9.29691620688, 9.29920801839, 9.30149619498, 9.30378074818, 9.30606168943, 9.30833903014, 9.31061278166, 9.31288295528, 9.31514956226, 9.31741261376, 9.31967212095, 9.32192809489, 9.32418054662, 9.32642948712, 9.32867492733, 9.33091687811, 9.33315535031, 9.33539035469, 9.33762190199, 9.33985000288, 9.342074668, 9.34429590792, 9.34651373317, 9.34872815423, 9.35093918155, 9.3531468255, 9.35535109642, 9.35755200462, 9.35974956032, 9.36194377374, 9.36413465501, 9.36632221425, 9.36850646151, 9.37068740681, 9.37286506011, 9.37503943135, 9.37721053039, 9.37937836707, 9.38154295118, 9.38370429247, 9.38586240064, 9.38801728535, 9.3901689562, 9.39231742278, 9.39446269461, 9.39660478118, 9.39874369194, 9.40087943628, 9.40301202357, 9.40514146314, 9.40726776424, 9.40939093614, 9.41151098801, 9.41362792902, 9.41574176829, 9.41785251489, 9.41996017785, 9.42206476617, 9.42416628882, 9.4262647547, 9.4283601727, 9.43045255167, 9.43254190039, 9.43462822764, 9.43671154214, 9.43879185258, 9.44086916761, 9.44294349585, 9.44501484587, 9.44708322621, 9.44914864538, 9.45121111183, 9.45327063401, 9.4553272203, 9.45738087907, 9.45943161864, 9.46147944729, 9.46352437327, 9.46556640481, 9.46760555008, 9.46964181724, 9.47167521439, 9.47370574962, 9.47573343097, 9.47775826644, 9.47978026403, 9.48179943167, 9.48381577726, 9.4858293087, 9.48784003382, 9.48984796044, 9.49185309633, 9.49385544924, 9.49585502689, 9.49785183695, 9.49984588708, 9.5018371849, 9.503825738, 9.50581155392, 9.5077946402, 9.50977500433, 9.51175265377, 9.51372759595, 9.51569983828, 9.51766938813, 9.51963625284, 9.52160043972, 9.52356195606, 9.5255208091, 9.52747700606, 9.52943055415, 9.53138146052, 9.53332973231, 9.53527537662, 9.53721840054, 9.53915881111, 9.54109661535, 9.54303182026, 9.54496443279, 9.54689445989, 9.54882190846, 9.55074678538, 9.55266909751, 9.55458885168, 9.55650605467, 9.55842071327, 9.56033283421, 9.56224242422, 9.56414948999, 9.56605403817, 9.56795607542, 9.56985560833, 9.5717526435, 9.57364718749, 9.57553924683, 9.57742882804, 9.57931593758, 9.58120058192, 9.5830827675, 9.58496250072, 9.58683978796, 9.58871463558, 9.59058704992, 9.59245703727, 9.59432460392, 9.59618975614, 9.59805250016, 9.59991284219, 9.60177078841, 9.60362634499, 9.60547951806, 9.60733031375, 9.60917873814, 9.61102479731, 9.61286849729, 9.61470984412, 9.61654884378, 9.61838550226, 9.62021982551, 9.62205181946, 9.62388149001, 9.62570884306, 9.62753388447, 9.62935662008, 9.6311770557, 9.63299519714, 9.63481105017, 9.63662462054, 9.63843591399, 9.64024493622, 9.64205169293, 9.64385618977, 9.64565843241, 9.64745842645, 9.64925617752, 9.65105169118, 9.652844973, 9.65463602853, 9.65642486328, 9.65821148275, 9.65999589243, 9.66177809777, 9.66355810422, 9.66533591719, 9.66711154208, 9.66888498427, 9.67065624912, 9.67242534197, 9.67419226815, 9.67595703294, 9.67771964164, 9.67948009951, 9.68123841178, 9.68299458368, 9.68474862042, 9.68650052718, 9.68825030913, 9.68999797142, 9.69174351917, 9.6934869575, 9.6952282915, 9.69696752623, 9.69870466677, 9.70043971814, 9.70217268537, 9.70390357344, 9.70563238736, 9.70735913208, 9.70908381255, 9.7108064337, 9.71252700044, 9.71424551767, 9.71596199026, 9.71767642307, 9.71938882094, 9.72109918871, 9.72280753117, 9.72451385312, 9.72621815933, 9.72792045456, 9.72962074355, 9.73131903103, 9.73301532169, 9.73470962023, 9.73640193132, 9.73809225962, 9.73978060977, 9.7414669864, 9.74315139411, 9.7448338375, 9.74651432114, 9.74819284959, 9.7498694274, 9.75154405909, 9.75321674918, 9.75488750216, 9.75655632252, 9.75822321473, 9.75988818322, 9.76155123244, 9.76321236681, 9.76487159074, 9.7665289086, 9.76818432478, 9.76983784363, 9.7714894695, 9.77313920672, 9.7747870596, 9.77643303244, 9.77807712954, 9.77971935514, 9.78135971352, 9.78299820892, 9.78463484556, 9.78626962765, 9.78790255939, 9.78953364497, 9.79116288856, 9.7927902943, 9.79441586635, 9.79603960883, 9.79766152585, 9.79928162152, 9.80089989992, 9.80251636512, 9.80413102118, 9.80574387215, 9.80735492206, 9.80896417492, 9.81057163474, 9.81217730551, 9.81378119122, 9.81538329581, 9.81698362326, 9.81858217748, 9.82017896242, 9.82177398197, 9.82336724005, 9.82495874053, 9.82654848729, 9.82813648419, 9.82972273509, 9.8313072438, 9.83289001416, 9.83447104998, 9.83605035506, 9.83762793317, 9.8392037881, 9.8407779236, 9.84235034341, 9.84392105129, 9.84549005094, 9.84705734609, 9.84862294043, 9.85018683765, 9.85174904142, 9.8533095554, 9.85486838326, 9.85642552863, 9.85798099513, 9.85953478638, 9.861086906, 9.86263735756, 9.86418614465, 9.86573327085, 9.86727873971, 9.86882255477, 9.87036471958, 9.87190523766, 9.87344411252, 9.87498134765, 9.87651694657, 9.87805091273, 9.87958324961, 9.88111396068, 9.88264304936, 9.88417051911, 9.88569637334, 9.88722061547, 9.8887432489, 9.89026427702, 9.89178370322, 9.89330153086, 9.89481776331, 9.89633240391, 9.89784545601, 9.89935692292, 9.90086680798, 9.90237511449, 9.90388184574, 9.90538700502, 9.90689059561, 9.90839262077, 9.90989308377, 9.91139198784, 9.91288933623, 9.91438513216, 9.91587937884, 9.91737207948, 9.91886323727, 9.92035285542, 9.92184093707, 9.92332748542, 9.92481250361, 9.92629599478, 9.92777796208, 9.92925840864, 9.93073733756, 9.93221475197, 9.93369065495, 9.9351650496, 9.936637939, 9.93810932622, 9.93957921431, 9.94104760634, 9.94251450534, 9.94397991434, 9.94544383638, 9.94690627446, 9.94836723158, 9.94982671076, 9.95128471497, 9.95274124719, 9.95419631039, 9.95564990753, 9.95710204156, 9.95855271543, 9.96000193207, 9.9614496944, 9.96289600534, 9.96434086779, 9.96578428466, 9.96722625884, 9.9686667932, 9.97010589061, 9.97154355395, 9.97297978607, 9.97441458981, 9.97584796801, 9.9772799235, 9.97871045911, 9.98013957764, 9.9815672819, 9.98299357469, 9.9844184588, 9.985841937, 9.98726401207, 9.98868468677, 9.99010396386, 9.99152184608, 9.99293833617, 9.99435343686, 9.99576715088, 9.99717948094, 9.99859042975, 10.0, 10.0014081944, 10.0028150156, 10.0042204663, 10.0056245492, 10.0070272669, 10.0084286221, 10.0098286174, 10.0112272554, 10.0126245389, 10.0140204703, 10.0154150524, 10.0168082877, 10.0182001788, 10.0195907284, 10.0209799389, 10.022367813, 10.0237543533, 10.0251395623, 10.0265234425, 10.0279059966, 10.029287227, 10.0306671362, 10.0320457269, 10.0334230015, 10.0347989626, 10.0361736126, 10.037546954, 10.0389189893, 10.040289721, 10.0416591516, 10.0430272836, 10.0443941194, 10.0457596614, 10.0471239121, 10.048486874, 10.0498485495, 10.0512089409, 10.0525680508, 10.0539258815, 10.0552824355, 10.0566377151, 10.0579917228, 10.0593444608, 10.0606959317, 10.0620461377, 10.0633950813, 10.0647427648, 10.0660891905, 10.0674343608, 10.068778278, 10.0701209445, 10.0714623626, 10.0728025345, 10.0741414628, 10.0754791495, 10.0768155971, 10.0781508077, 10.0794847838, 10.0808175276, 10.0821490414, 10.0834793273, 10.0848083878, 10.086136225, 10.0874628413, 10.0887882387, 10.0901124197, 10.0914353863, 10.0927571409, 10.0940776857, 10.0953970228, 10.0967151545, 10.098032083, 10.0993478104, 10.100662339, 10.1019756709, 10.1032878084, 10.1045987536, 10.1059085086, 10.1072170756, 10.1085244568, 10.1098306543, 10.1111356702, 10.1124395068, 10.113742166, 10.1150436502, 10.1163439612, 10.1176431014, 10.1189410727, 10.1202378773, 10.1215335173, 10.1228279948, 10.1241213118, 10.1254134705, 10.1267044728, 10.127994321, 10.1292830169, 10.1305705628, 10.1318569606, 10.1331422124, 10.1344263202, 10.1357092861, 10.1369911121, 10.1382718002, 10.1395513524, 10.1408297708, 10.1421070573, 10.143383214, 10.1446582428, 10.1459321458, 10.1472049249, 10.1484765822, 10.1497471195, 10.1510165389, 10.1522848423, 10.1535520317, 10.1548181091, 10.1560830763, 10.1573469354, 10.1586096882, 10.1598713368, 10.161131883, 10.1623913288, 10.163649676, 10.1649069267, 10.1661630826, 10.1674181458, 10.1686721181, 10.1699250014, 10.1711767977, 10.1724275086, 10.1736771363, 10.1749256825, 10.1761731491, 10.177419538, 10.178664851, 10.17990909, 10.1811522569, 10.1823943534, 10.1836353815, 10.1848753429, 10.1861142395, 10.1873520732, 10.1885888457, 10.1898245589, 10.1910592145, 10.1922928145, 10.1935253605, 10.1947568544, 10.195987298, 10.1972166931, 10.1984450415, 10.1996723448, 10.200898605, 10.2021238238, 10.203348003, 10.2045711442, 10.2057932494, 10.2070143202, 10.2082343583, 10.2094533656, 10.2106713438, 10.2118882945, 10.2131042196, 10.2143191208, 10.2155329997, 10.2167458582, 10.2179576979, 10.2191685205, 10.2203783277, 10.2215871213, 10.2227949029, 10.2240016742, 10.2252074369, 10.2264121928, 10.2276159434, 10.2288186905, 10.2300204357, 10.2312211807, 10.2324209272, 10.2336196768, 10.2348174311, 10.2360141919, 10.2372099608, 10.2384047393, 10.2395985292, 10.2407913322, 10.2419831497, 10.2431739835, 10.2443638351, 10.2455527063, 10.2467405985, 10.2479275134, 10.2491134527, 10.2502984179, 10.2514824106, 10.2526654325, 10.253847485, 10.2550285698, 10.2562086885, 10.2573878427, 10.2585660339, 10.2597432637, 10.2609195337, 10.2620948454, 10.2632692004, 10.2644426002, 10.2656150465, 10.2667865407, 10.2679570844, 10.2691266791, 10.2702953265, 10.2714630279, 10.272629785, 10.2737955992, 10.2749604721, 10.2761244053, 10.2772874001, 10.2784494582, 10.2796105811, 10.2807707701, 10.281930027, 10.283088353, 10.2842457498, 10.2854022189, 10.2865577616, 10.2877123795, 10.2888660742, 10.2900188469, 10.2911706993, 10.2923216328, 10.2934716488, 10.2946207489, 10.2957689344, 10.2969162069, 10.2980625677, 10.2992080184, 10.3003525603, 10.301496195, 10.3026389238, 10.3037807482, 10.3049216696, 10.3060616894, 10.3072008091, 10.3083390301, 10.3094763538, 10.3106127817, 10.311748315, 10.3128829553, 10.3140167039, 10.3151495623, 10.3162815317, 10.3174126138, 10.3185428097, 10.3196721209, 10.3208005489, 10.3219280949, 10.3230547603, 10.3241805466, 10.3253054551, 10.3264294871, 10.3275526441, 10.3286749273, 10.3297963382, 10.3309168781, 10.3320365484, 10.3331553503, 10.3342732853, 10.3353903547, 10.3365065598, 10.337621902, 10.3387363826, 10.3398500029, 10.3409627643, 10.342074668, 10.3431857154, 10.3442959079, 10.3454052467, 10.3465137332, 10.3476213686, 10.3487281542, 10.3498340915, 10.3509391815, 10.3520434258, 10.3531468255, 10.3542493819, 10.3553510964, 10.3564519702, 10.3575520046, 10.3586512009, 10.3597495603, 10.3608470842, 10.3619437737, 10.3630396303, 10.364134655, 10.3652288493, 10.3663222142, 10.3674147512, 10.3685064615, 10.3695973463, 10.3706874068, 10.3717766443, 10.3728650601, 10.3739526554, 10.3750394313, 10.3761253893, 10.3772105304, 10.3782948559, 10.3793783671, 10.3804610651, 10.3815429512, 10.3826240266, 10.3837042925, 10.3847837501, 10.3858624006, 10.3869402453, 10.3880172853, 10.3890935219, 10.3901689562, 10.3912435894, 10.3923174228, 10.3933904574, 10.3944626946, 10.3955341355, 10.3966047812, 10.3976746329, 10.3987436919, 10.3998119593, 10.4008794363, 10.401946124, 10.4030120236, 10.4040771362, 10.4051414631, 10.4062050054, 10.4072677642, 10.4083297408, 10.4093909361, 10.4104513515, 10.411510988, 10.4125698468, 10.413627929, 10.4146852358, 10.4157417683, 10.4167975276, 10.4178525149, 10.4189067313, 10.4199601778, 10.4210128558, 10.4220647662, 10.4231159101, 10.4241662888, 10.4252159033, 10.4262647547, 10.4273128441, 10.4283601727, 10.4294067415, 10.4304525517, 10.4314976043, 10.4325419004, 10.4335854412, 10.4346282276, 10.4356702609, 10.4367115421, 10.4377520723, 10.4387918526, 10.439830884, 10.4408691676, 10.4419067045, 10.4429434958, 10.4439795426, 10.4450148459, 10.4460494067, 10.4470832262, 10.4481163054, 10.4491486454, 10.4501802472, 10.4512111118, 10.4522412404, 10.453270634, 10.4542992936, 10.4553272203, 10.4563544151, 10.4573808791, 10.4584066132, 10.4594316186, 10.4604558963, 10.4614794473, 10.4625022726, 10.4635243733, 10.4645457503, 10.4655664048, 10.4665863377, 10.4676055501, 10.4686240429, 10.4696418172, 10.4706588741, 10.4716752144, 10.4726908392, 10.4737057496, 10.4747199465, 10.475733431, 10.4767462039, 10.4777582664, 10.4787696195, 10.479780264, 10.4807902011, 10.4817994317, 10.4828079567, 10.4838157773, 10.4848228943, 10.4858293087, 10.4868350216, 10.4878400338, 10.4888443465, 10.4898479604, 10.4908508767, 10.4918530963, 10.4928546202, 10.4938554492, 10.4948555845, 10.4958550269, 10.4968537774, 10.497851837, 10.4988492065, 10.4998458871, 10.5008418796, 10.5018371849, 10.5028318041, 10.503825738, 10.5048189876, 10.5058115539, 10.5068034378, 10.5077946402, 10.5087851621, 10.5097750043, 10.5107641679, 10.5117526538, 10.5127404628, 10.513727596, 10.5147140541, 10.5156998383, 10.5166849493, 10.5176693881, 10.5186531557, 10.5196362528, 10.5206186806, 10.5216004397, 10.5225815313, 10.5235619561, 10.524541715, 10.5255208091, 10.5264992391, 10.5274770061, 10.5284541108, 10.5294305541, 10.5304063371, 10.5313814605, 10.5323559253, 10.5333297323, 10.5343028825, 10.5352753766, 10.5362472157, 10.5372184005, 10.5381889321, 10.5391588111, 10.5401280386, 10.5410966153, 10.5420645423, 10.5430318203, 10.5439984501, 10.5449644328, 10.5459297691, 10.5468944599, 10.5478585061, 10.5488219085, 10.5497846679, 10.5507467854, 10.5517082616, 10.5526690975, 10.5536292939, 10.5545888517, 10.5555477716, 10.5565060547, 10.5574637016, 10.5584207133, 10.5593770905, 10.5603328342, 10.5612879452, 10.5622424242, 10.5631962722, 10.56414949, 10.5651020784, 10.5660540382, 10.5670053702, 10.5679560754, 10.5689061545, 10.5698556083, 10.5708044377, 10.5717526435, 10.5727002265, 10.5736471875, 10.5745935273, 10.5755392468, 10.5764843468, 10.577428828, 10.5783726914, 10.5793159376, 10.5802585675, 10.5812005819, 10.5821419817, 10.5830827675, 10.5840229403, 10.5849625007, 10.5859014497, 10.586839788, 10.5877775163, 10.5887146356, 10.5896511465, 10.5905870499, 10.5915223466, 10.5924570373, 10.5933911228, 10.5943246039, 10.5952574814, 10.5961897561, 10.5971214288, 10.5980525002, 10.598982971, 10.5999128422, 10.6008421144, 10.6017707884, 10.602698865, 10.603626345, 10.6045532291, 10.6054795181, 10.6064052127, 10.6073303137, 10.608254822, 10.6091787381, 10.610102063, 10.6110247973, 10.6119469418, 10.6128684973, 10.6137894645, 10.6147098441, 10.615629637, 10.6165488438, 10.6174674653, 10.6183855023, 10.6193029554, 10.6202198255, 10.6211361133, 10.6220518195, 10.6229669448, 10.62388149, 10.6247954559, 10.6257088431, 10.6266216524, 10.6275338845, 10.6284455401, 10.6293566201, 10.630267125, 10.6311770557, 10.6320864128, 10.6329951971, 10.6339034093, 10.6348110502, 10.6357181203, 10.6366246205, 10.6375305515, 10.638435914, 10.6393407087, 10.6402449362, 10.6411485974, 10.6420516929, 10.6429542235, 10.6438561898, 10.6447575925, 10.6456584324, 10.6465587102, 10.6474584265, 10.648357582, 10.6492561775, 10.6501542137, 10.6510516912, 10.6519486107, 10.652844973, 10.6537407787, 10.6546360285, 10.6555307232, 10.6564248633, 10.6573184496, 10.6582114828, 10.6591039635, 10.6599958924, 10.6608872703, 10.6617780978, 10.6626683755, 10.6635581042, 10.6644472845, 10.6653359172, 10.6662240028, 10.6671115421, 10.6679985357, 10.6688849843, 10.6697708885, 10.6706562491, 10.6715410667, 10.672425342, 10.6733090756, 10.6741922681, 10.6750749204, 10.6759570329, 10.6768386065, 10.6777196416, 10.6786001391, 10.6794800995, 10.6803595235, 10.6812384118, 10.682116765, 10.6829945837, 10.6838718686, 10.6847486204, 10.6856248397, 10.6865005272, 10.6873756834, 10.6882503091, 10.6891244049, 10.6899979714, 10.6908710093, 10.6917435192, 10.6926155017, 10.6934869575, 10.6943578872, 10.6952282915, 10.696098171, 10.6969675262, 10.697836358, 10.6987046668, 10.6995724533, 10.7004397181, 10.701306462, 10.7021726854, 10.703038389, 10.7039035734, 10.7047682394, 10.7056323874, 10.7064960181, 10.7073591321, 10.70822173, 10.7090838126, 10.7099453802, 10.7108064337, 10.7116669736, 10.7125270004, 10.7133865149, 10.7142455177, 10.7151040092, 10.7159619903, 10.7168194613, 10.7176764231, 10.7185328761, 10.7193888209, 10.7202442583, 10.7210991887, 10.7219536128, 10.7228075312, 10.7236609444, 10.7245138531, 10.7253662579, 10.7262181593, 10.727069558, 10.7279204546, 10.7287708495, 10.7296207436, 10.7304701372, 10.731319031, 10.7321674257, 10.7330153217, 10.7338627197, 10.7347096202, 10.7355560239, 10.7364019313, 10.737247343, 10.7380922596, 10.7389366817, 10.7397806098, 10.7406240445, 10.7414669864, 10.7423094361, 10.7431513941, 10.7439928611, 10.7448338375, 10.745674324, 10.7465143211, 10.7473538295, 10.7481928496, 10.749031382, 10.7498694274, 10.7507069862, 10.7515440591, 10.7523806466, 10.7532167492, 10.7540523675, 10.7548875022, 10.7557221536, 10.7565563225, 10.7573900094, 10.7582232147, 10.7590559392, 10.7598881832, 10.7607199475, 10.7615512324, 10.7623820387, 10.7632123668, 10.7640422173, 10.7648715907, 10.7657004877, 10.7665289086, 10.7673568541, 10.7681843248, 10.7690113211, 10.7698378436, 10.7706638929, 10.7714894695, 10.7723145739, 10.7731392067, 10.7739633684, 10.7747870596, 10.7756102808, 10.7764330324, 10.7772553152, 10.7780771295, 10.778898476, 10.7797193551, 10.7805397675, 10.7813597135, 10.7821791938, 10.7829982089, 10.7838167593, 10.7846348456, 10.7854524682, 10.7862696276, 10.7870863246, 10.7879025594, 10.7887183327, 10.789533645, 10.7903484968, 10.7911628886, 10.7919768209, 10.7927902943, 10.7936033093, 10.7944158664, 10.795227966, 10.7960396088, 10.7968507953, 10.7976615259, 10.7984718011, 10.7992816215, 10.8000909876, 10.8008998999, 10.8017083589, 10.8025163651, 10.803323919, 10.8041310212, 10.8049376721, 10.8057438722, 10.806549622, 10.8073549221, 10.8081597729, 10.8089641749, 10.8097681287, 10.8105716347, 10.8113746935, 10.8121773055, 10.8129794713, 10.8137811912, 10.8145824659, 10.8153832958, 10.8161836814, 10.8169836233, 10.8177831218, 10.8185821775, 10.8193807909, 10.8201789624, 10.8209766926, 10.821773982, 10.822570831, 10.82336724, 10.8241632097, 10.8249587405, 10.8257538329, 10.8265484873, 10.8273427042, 10.8281364842, 10.8289298277, 10.8297227351, 10.830515207, 10.8313072438, 10.832098846, 10.8328900142, 10.8336807487, 10.83447105, 10.8352609186, 10.8360503551, 10.8368393597, 10.8376279332, 10.8384160758, 10.8392037881, 10.8399910705, 10.8407779236, 10.8415643477, 10.8423503434, 10.8431359111, 10.8439210513, 10.8447057644, 10.8454900509, 10.8462739113, 10.8470573461, 10.8478403556, 10.8486229404, 10.8494051009, 10.8501868376, 10.850968151, 10.8517490414, 10.8525295094, 10.8533095554, 10.8540891799, 10.8548683833, 10.855647166, 10.8564255286, 10.8572034715, 10.8579809951, 10.8587580999, 10.8595347864, 10.8603110549, 10.861086906, 10.8618623401, 10.8626373576, 10.8634119589, 10.8641861447, 10.8649599151, 10.8657332709, 10.8665062122, 10.8672787397, 10.8680508537, 10.8688225548, 10.8695938432, 10.8703647196, 10.8711351842, 10.8719052377, 10.8726748803, 10.8734441125, 10.8742129348, 10.8749813477, 10.8757493514, 10.8765169466, 10.8772841335, 10.8780509127, 10.8788172846, 10.8795832496, 10.8803488082, 10.8811139607, 10.8818787076, 10.8826430494, 10.8834069864, 10.8841705191, 10.8849336479, 10.8856963733, 10.8864586957, 10.8872206155, 10.8879821331, 10.8887432489, 10.8895039634, 10.890264277, 10.8910241901, 10.8917837032, 10.8925428166, 10.8933015309, 10.8940598463, 10.8948177633, 10.8955752824, 10.8963324039, 10.8970891283, 10.897845456, 10.8986013874, 10.8993569229, 10.900112063, 10.900866808, 10.9016211583, 10.9023751145, 10.9031286768, 10.9038818457, 10.9046346217, 10.905387005, 10.9061389962, 10.9068905956, 10.9076418037, 10.9083926208, 10.9091430473, 10.9098930838, 10.9106427305, 10.9113919878, 10.9121408563, 10.9128893362, 10.913637428, 10.9143851322, 10.915132449, 10.9158793788, 10.9166259222, 10.9173720795, 10.918117851, 10.9188632373, 10.9196082386, 10.9203528554, 10.9210970881, 10.9218409371, 10.9225844027, 10.9233274854, 10.9240701856, 10.9248125036, 10.9255544399, 10.9262959948, 10.9270371687, 10.9277779621, 10.9285183753, 10.9292584086, 10.9299980626, 10.9307373376, 10.9314762339, 10.932214752, 10.9329528922, 10.933690655, 10.9344280406, 10.9351650496, 10.9359016823, 10.936637939, 10.9373738202, 10.9381093262, 10.9388444575, 10.9395792143, 10.9403135971, 10.9410476063, 10.9417812423, 10.9425145053, 10.9432473959, 10.9439799143, 10.944712061, 10.9454438364, 10.9461752407, 10.9469062745, 10.947636938, 10.9483672316, 10.9490971557, 10.9498267108, 10.950555897, 10.951284715, 10.9520131649, 10.9527412472, 10.9534689622, 10.9541963104, 10.954923292, 10.9556499075, 10.9563761572, 10.9571020416, 10.9578275608, 10.9585527154, 10.9592775057, 10.9600019321, 10.9607259948, 10.9614496944, 10.9621730311, 10.9628960053, 10.9636186174, 10.9643408678, 10.9650627567, 10.9657842847, 10.9665054519, 10.9672262588, 10.9679467058, 10.9686667932, 10.9693865213, 10.9701058906, 10.9708249014, 10.971543554, 10.9722618487, 10.9729797861, 10.9736973663, 10.9744145898, 10.9751314569, 10.975847968, 10.9765641234, 10.9772799235, 10.9779953686, 10.9787104591, 10.9794251953, 10.9801395776, 10.9808536064, 10.9815672819, 10.9822806046, 10.9829935747, 10.9837061927, 10.9844184588, 10.9851303735, 10.985841937, 10.9865531498, 10.9872640121, 10.9879745243, 10.9886846868, 10.9893944998, 10.9901039639, 10.9908130792, 10.9915218461, 10.992230265, 10.9929383362, 10.99364606, 10.9943534369, 10.995060467, 10.9957671509, 10.9964734887, 10.9971794809, 10.9978851278, 10.9985904297, 10.999295387, 11.0, 11.000704269, 11.0014081944, 11.0021117765, 11.0028150156, 11.0035179121, 11.0042204663, 11.0049226786, 11.0056245492, 11.0063260785, 11.0070272669, 11.0077281146, 11.0084286221, 11.0091287895, 11.0098286174, 11.0105281059, 11.0112272554, 11.0119260663, 11.0126245389, 11.0133226734, 11.0140204703, 11.0147179299, 11.0154150524, 11.0161118382, 11.0168082877, 11.0175044011, 11.0182001788, 11.0188956211, 11.0195907284, 11.0202855008, 11.0209799389, 11.0216740429, 11.022367813, 11.0230612497, 11.0237543533, 11.024447124, 11.0251395623, 11.0258316683, 11.0265234425, 11.0272148852, 11.0279059966, 11.0285967771, 11.029287227, 11.0299773466, 11.0306671362, 11.0313565963, 11.0320457269, 11.0327345286, 11.0334230015, 11.0341111461, 11.0347989626, 11.0354864513, 11.0361736126, 11.0368604467, 11.037546954, 11.0382331347, 11.0389189893, 11.039604518, 11.040289721, 11.0409745988, 11.0416591516, 11.0423433798, 11.0430272836, 11.0437108633, 11.0443941194, 11.0450770519, 11.0457596614, 11.046441948, 11.0471239121, 11.047805554, 11.048486874, 11.0491678724, 11.0498485495, 11.0505289055, 11.0512089409, 11.0518886559, 11.0525680508, 11.0532471259, 11.0539258815, 11.054604318, 11.0552824355, 11.0559602345, 11.0566377151, 11.0573148778, 11.0579917228, 11.0586682503, 11.0593444608, 11.0600203545, 11.0606959317, 11.0613711927, 11.0620461377, 11.0627207672, 11.0633950813, 11.0640690804, 11.0647427648, 11.0654161347, 11.0660891905, 11.0667619324, 11.0674343608, 11.0681064759, 11.068778278, 11.0694497674, 11.0701209445, 11.0707918094, 11.0714623626, 11.0721326042, 11.0728025345, 11.073472154, 11.0741414628, 11.0748104612, 11.0754791495, 11.076147528, 11.0768155971, 11.0774833569, 11.0781508077, 11.07881795, 11.0794847838, 11.0801513096, 11.0808175276, 11.0814834381, 11.0821490414, 11.0828143377, 11.0834793273, 11.0841440106, 11.0848083878, 11.0854724592, 11.086136225, 11.0867996856, 11.0874628413, 11.0881256922, 11.0887882387, 11.0894504811, 11.0901124197, 11.0907740546, 11.0914353863, 11.092096415, 11.0927571409, 11.0934175644, 11.0940776857, 11.094737505, 11.0953970228, 11.0960562392, 11.0967151545, 11.097373769, 11.098032083, 11.0986900967, 11.0993478104, 11.1000052244, 11.100662339, 11.1013191544, 11.1019756709, 11.1026318889, 11.1032878084, 11.1039434299, 11.1045987536, 11.1052537797, 11.1059085086, 11.1065629404, 11.1072170756, 11.1078709143, 11.1085244568, 11.1091777034, 11.1098306543, 11.1104833098, 11.1111356702, 11.1117877358, 11.1124395068, 11.1130909834, 11.113742166, 11.1143930549, 11.1150436502, 11.1156939522, 11.1163439612, 11.1169936775, 11.1176431014, 11.118292233, 11.1189410727, 11.1195896207, 11.1202378773, 11.1208858428, 11.1215335173, 11.1221809013, 11.1228279948, 11.1234747982, 11.1241213118, 11.1247675358, 11.1254134705, 11.1260591161, 11.1267044728, 11.1273495411, 11.127994321, 11.1286388129, 11.1292830169, 11.1299269335, 11.1305705628, 11.1312139051, 11.1318569606, 11.1324997296, 11.1331422124, 11.1337844092, 11.1344263202, 11.1350679458, 11.1357092861, 11.1363503415, 11.1369911121, 11.1376315982, 11.1382718002, 11.1389117181, 11.1395513524, 11.1401907032, 11.1408297708, 11.1414685554, 11.1421070573, 11.1427452768, 11.143383214, 11.1440208693, 11.1446582428, 11.1452953349, 11.1459321458, 11.1465686757, 11.1472049249, 11.1478408937, 11.1484765822, 11.1491119907, 11.1497471195, 11.1503819688, 11.1510165389, 11.15165083, 11.1522848423, 11.1529185761, 11.1535520317, 11.1541852093, 11.1548181091, 11.1554507313, 11.1560830763, 11.1567151442, 11.1573469354, 11.1579784499, 11.1586096882, 11.1592406504, 11.1598713368, 11.1605017476, 11.161131883, 11.1617617433, 11.1623913288, 11.1630206396, 11.163649676, 11.1642784383, 11.1649069267, 11.1655351414, 11.1661630826, 11.1667907507, 11.1674181458, 11.1680452682, 11.1686721181, 11.1692986958, 11.1699250014, 11.1705510353, 11.1711767977, 11.1718022887, 11.1724275086, 11.1730524578, 11.1736771363, 11.1743015445, 11.1749256825, 11.1755495506, 11.1761731491, 11.1767964781, 11.177419538, 11.1780423289, 11.178664851, 11.1792871046, 11.17990909, 11.1805308073, 11.1811522569, 11.1817734388, 11.1823943534, 11.1830150009, 11.1836353815, 11.1842554954, 11.1848753429, 11.1854949242, 11.1861142395, 11.1867332891, 11.1873520732, 11.187970592, 11.1885888457, 11.1892068346, 11.1898245589, 11.1904420188, 11.1910592145, 11.1916761464, 11.1922928145, 11.1929092191, 11.1935253605, 11.1941412389, 11.1947568544, 11.1953722074, 11.195987298, 11.1966021265, 11.1972166931, 11.197830998, 11.1984450415, 11.1990588237, 11.1996723448, 11.2002856052, 11.200898605, 11.2015113445, 11.2021238238, 11.2027360433, 11.203348003, 11.2039597032, 11.2045711442, 11.2051823262, 11.2057932494, 11.206403914, 11.2070143202, 11.2076244682, 11.2082343583, 11.2088439907, 11.2094533656, 11.2100624832, 11.2106713438, 11.2112799475, 11.2118882945, 11.2124963852, 11.2131042196, 11.2137117981, 11.2143191208, 11.2149261879, 11.2155329997, 11.2161395564, 11.2167458582, 11.2173519053, 11.2179576979, 11.2185632362, 11.2191685205, 11.2197735509, 11.2203783277, 11.2209828511, 11.2215871213, 11.2221911385, 11.2227949029, 11.2233984147, 11.2240016742, 11.2246046815, 11.2252074369, 11.2258099406, 11.2264121928, 11.2270141936, 11.2276159434, 11.2282174423, 11.2288186905, 11.2294196882, 11.2300204357, 11.2306209331, 11.2312211807, 11.2318211787, 11.2324209272, 11.2330204265, 11.2336196768, 11.2342186782, 11.2348174311, 11.2354159356, 11.2360141919, 11.2366122002, 11.2372099608, 11.2378074737, 11.2384047393, 11.2390017578, 11.2395985292, 11.240195054, 11.2407913322, 11.241387364, 11.2419831497, 11.2425786895, 11.2431739835, 11.243769032, 11.2443638351, 11.2449583932, 11.2455527063, 11.2461467746, 11.2467405985, 11.247334178, 11.2479275134, 11.2485206049, 11.2491134527, 11.249706057, 11.2502984179, 11.2508905357, 11.2514824106, 11.2520740428, 11.2526654325, 11.2532565798, 11.253847485, 11.2544381483, 11.2550285698, 11.2556187498, 11.2562086885, 11.2567983861, 11.2573878427, 11.2579770586, 11.2585660339, 11.2591547689, 11.2597432637, 11.2603315186, 11.2609195337, 11.2615073092, 11.2620948454, 11.2626821424, 11.2632692004, 11.2638560196, 11.2644426002, 11.2650289425, 11.2656150465, 11.2662009125, 11.2667865407, 11.2673719313, 11.2679570844, 11.2685420003, 11.2691266791, 11.2697111211, 11.2702953265, 11.2708792953, 11.2714630279, 11.2720465244, 11.272629785, 11.2732128099, 11.2737955992, 11.2743781532, 11.2749604721, 11.2755425561, 11.2761244053, 11.2767060199, 11.2772874001, 11.2778685462, 11.2784494582, 11.2790301364, 11.2796105811, 11.2801907922, 11.2807707701, 11.281350515, 11.281930027, 11.2825093062, 11.283088353, 11.2836671675, 11.2842457498, 11.2848241002, 11.2854022189, 11.2859801059, 11.2865577616, 11.2871351861, 11.2877123795, 11.2882893422, 11.2888660742, 11.2894425757, 11.2900188469, 11.2905948881, 11.2911706993, 11.2917462808, 11.2923216328, 11.2928967554, 11.2934716488, 11.2940463133, 11.2946207489, 11.2951949559, 11.2957689344, 11.2963426847, 11.2969162069, 11.2974895012, 11.2980625677, 11.2986354067, 11.2992080184, 11.2997804029, 11.3003525603, 11.300924491, 11.301496195, 11.3020676725, 11.3026389238, 11.3032099489, 11.3037807482, 11.3043513217, 11.3049216696, 11.3054917921, 11.3060616894, 11.3066313617, 11.3072008091, 11.3077700319, 11.3083390301, 11.3089078041, 11.3094763538, 11.3100446796, 11.3106127817, 11.3111806601, 11.311748315, 11.3123157467, 11.3128829553, 11.313449941, 11.3140167039, 11.3145832443, 11.3151495623, 11.315715658, 11.3162815317, 11.3168471836, 11.3174126138, 11.3179778224, 11.3185428097, 11.3191075758, 11.3196721209, 11.3202364452, 11.3208005489, 11.321364432, 11.3219280949, 11.3224915376, 11.3230547603, 11.3236177633, 11.3241805466, 11.3247431105, 11.3253054551, 11.3258675806, 11.3264294871, 11.3269911749, 11.3275526441, 11.3281138948, 11.3286749273, 11.3292357417, 11.3297963382, 11.330356717, 11.3309168781, 11.3314768219, 11.3320365484, 11.3325960578, 11.3331553503, 11.3337144261, 11.3342732853, 11.3348319281, 11.3353903547, 11.3359485652, 11.3365065598, 11.3370643387, 11.337621902, 11.3381792499, 11.3387363826, 11.3392933002, 11.3398500029, 11.3404064909, 11.3409627643, 11.3415188232, 11.342074668, 11.3426302987, 11.3431857154, 11.3437409185, 11.3442959079, 11.3448506839, 11.3454052467, 11.3459595964, 11.3465137332, 11.3470676572, 11.3476213686, 11.3481748675, 11.3487281542, 11.3492812288, 11.3498340915, 11.3503867423, 11.3509391815, 11.3514914093, 11.3520434258, 11.3525952311, 11.3531468255, 11.353698209, 11.3542493819, 11.3548003444, 11.3553510964, 11.3559016383, 11.3564519702, 11.3570020923, 11.3575520046, 11.3581017074, 11.3586512009, 11.3592004851, 11.3597495603, 11.3602984266, 11.3608470842, 11.3613955332, 11.3619437737, 11.362491806, 11.3630396303, 11.3635872465, 11.364134655, 11.3646818559, 11.3652288493, 11.3657756353, 11.3663222142, 11.3668685862, 11.3674147512, 11.3679607096, 11.3685064615, 11.369052007, 11.3695973463, 11.3701424795, 11.3706874068, 11.3712321284, 11.3717766443, 11.3723209549, 11.3728650601, 11.3734089602, 11.3739526554, 11.3744961457, 11.3750394313, 11.3755825125, 11.3761253893, 11.3766680619, 11.3772105304, 11.377752795, 11.3782948559, 11.3788367132, 11.3793783671, 11.3799198176, 11.3804610651, 11.3810021096, 11.3815429512, 11.3820835901, 11.3826240266, 11.3831642606, 11.3837042925, 11.3842441222, 11.3847837501, 11.3853231762, 11.3858624006, 11.3864014236, 11.3869402453, 11.3874788658, 11.3880172853, 11.388555504, 11.3890935219, 11.3896313393, 11.3901689562, 11.3907063729, 11.3912435894, 11.391780606, 11.3923174228, 11.3928540399, 11.3933904574, 11.3939266756, 11.3944626946, 11.3949985145, 11.3955341355, 11.3960695576, 11.3966047812, 11.3971398062, 11.3976746329, 11.3982092615, 11.3987436919, 11.3992779245, 11.3998119593, 11.4003457965, 11.4008794363, 11.4014128787, 11.401946124, 11.4024791722, 11.4030120236, 11.4035446782, 11.4040771362, 11.4046093978, 11.4051414631, 11.4056733323, 11.4062050054, 11.4067364827, 11.4072677642, 11.4077988502, 11.4083297408, 11.408860436, 11.4093909361, 11.4099212412, 11.4104513515, 11.410981267, 11.411510988, 11.4120405146, 11.4125698468, 11.4130989849, 11.413627929, 11.4141566793, 11.4146852358, 11.4152135988, 11.4157417683, 11.4162697445, 11.4167975276, 11.4173251177, 11.4178525149, 11.4183797194, 11.4189067313, 11.4194335507, 11.4199601778, 11.4204866128, 11.4210128558, 11.4215389068, 11.4220647662, 11.4225904339, 11.4231159101, 11.4236411951, 11.4241662888, 11.4246911915, 11.4252159033, 11.4257404243, 11.4262647547, 11.4267888946, 11.4273128441, 11.4278366035, 11.4283601727, 11.428883552, 11.4294067415, 11.4299297414, 11.4304525517, 11.4309751726, 11.4314976043, 11.4320198468, 11.4325419004, 11.4330637651, 11.4335854412, 11.4341069286, 11.4346282276, 11.4351493384, 11.4356702609, 11.4361909955, 11.4367115421, 11.437231901, 11.4377520723, 11.4382720561, 11.4387918526, 11.4393114618, 11.439830884, 11.4403501192, 11.4408691676, 11.4413880293, 11.4419067045, 11.4424251933, 11.4429434958, 11.4434616122, 11.4439795426, 11.4444972871, 11.4450148459, 11.445532219, 11.4460494067, 11.4465664091, 11.4470832262, 11.4475998583, 11.4481163054, 11.4486325677, 11.4491486454, 11.4496645385, 11.4501802472, 11.4506957716, 11.4512111118, 11.4517262681, 11.4522412404, 11.452756029, 11.453270634, 11.4537850555, 11.4542992936, 11.4548133485, 11.4553272203, 11.4558409091, 11.4563544151, 11.4568677384, 11.4573808791, 11.4578938373, 11.4584066132, 11.458919207, 11.4594316186, 11.4599438484, 11.4604558963, 11.4609677626, 11.4614794473, 11.4619909506, 11.4625022726, 11.4630134134, 11.4635243733, 11.4640351522, 11.4645457503, 11.4650561678, 11.4655664048, 11.4660764614, 11.4665863377, 11.4670960339, 11.4676055501, 11.4681148864, 11.4686240429, 11.4691330198, 11.4696418172, 11.4701504353, 11.4706588741, 11.4711671337, 11.4716752144, 11.4721831162, 11.4726908392, 11.4731983837, 11.4737057496, 11.4742129372, 11.4747199465, 11.4752267777, 11.475733431, 11.4762399063, 11.4767462039, 11.4772523239, 11.4777582664, 11.4782640316, 11.4787696195, 11.4792750303, 11.479780264, 11.4802853209, 11.4807902011, 11.4812949046, 11.4817994317, 11.4823037823, 11.4828079567, 11.483311955, 11.4838157773, 11.4843194236, 11.4848228943, 11.4853261892, 11.4858293087, 11.4863322528, 11.4868350216, 11.4873376152, 11.4878400338, 11.4883422775, 11.4888443465, 11.4893462407, 11.4898479604, 11.4903495057, 11.4908508767, 11.4913520736, 11.4918530963, 11.4923539452, 11.4928546202, 11.4933551215, 11.4938554492, 11.4943556035, 11.4948555845, 11.4953553922, 11.4958550269, 11.4963544886, 11.4968537774, 11.4973528935, 11.497851837, 11.4983506079, 11.4988492065, 11.4993476329, 11.4998458871, 11.5003439693, 11.5008418796, 11.5013396181, 11.5018371849, 11.5023345802, 11.5028318041, 11.5033288566, 11.503825738, 11.5043224483, 11.5048189876, 11.5053153561, 11.5058115539, 11.5063075811, 11.5068034378, 11.5072991241, 11.5077946402, 11.5082899861, 11.5087851621, 11.5092801681, 11.5097750043, 11.5102696709, 11.5107641679, 11.5112584955, 11.5117526538, 11.5122466428, 11.5127404628, 11.5132341138, 11.513727596, 11.5142209094, 11.5147140541, 11.5152070304, 11.5156998383, 11.5161924779, 11.5166849493, 11.5171772527, 11.5176693881, 11.5181613558, 11.5186531557, 11.519144788, 11.5196362528, 11.5201275503, 11.5206186806, 11.5211096437, 11.5216004397, 11.5220910689, 11.5225815313, 11.5230718269, 11.5235619561, 11.5240519187, 11.524541715, 11.5250313451, 11.5255208091, 11.5260101071, 11.5264992391, 11.5269882054, 11.5274770061, 11.5279656411, 11.5284541108, 11.5289424151, 11.5294305541, 11.5299185281, 11.5304063371, 11.5308939812, 11.5313814605, 11.5318687752, 11.5323559253, 11.532842911, 11.5333297323, 11.5338163894, 11.5343028825, 11.5347892115, 11.5352753766, 11.535761378, 11.5362472157, 11.5367328898, 11.5372184005, 11.5377037479, 11.5381889321, 11.5386739531, 11.5391588111, 11.5396435062, 11.5401280386, 11.5406124082, 11.5410966153, 11.54158066, 11.5420645423, 11.5425482623, 11.5430318203, 11.5435152162, 11.5439984501, 11.5444815223, 11.5449644328, 11.5454471817, 11.5459297691, 11.5464121951, 11.5468944599, 11.5473765635, 11.5478585061, 11.5483402877, 11.5488219085, 11.5493033685, 11.5497846679, 11.5502658069, 11.5507467854, 11.5512276036, 11.5517082616, 11.5521887596, 11.5526690975, 11.5531492756, 11.5536292939, 11.5541091526, 11.5545888517, 11.5550683913, 11.5555477716, 11.5560269927, 11.5565060547, 11.5569849576, 11.5574637016, 11.5579422868, 11.5584207133, 11.5588989811, 11.5593770905, 11.5598550415, 11.5603328342, 11.5608104687, 11.5612879452, 11.5617652636, 11.5622424242, 11.562719427, 11.5631962722, 11.5636729598, 11.56414949, 11.5646258628, 11.5651020784, 11.5655781368, 11.5660540382, 11.5665297826, 11.5670053702, 11.5674808011, 11.5679560754, 11.5684311932, 11.5689061545, 11.5693809595, 11.5698556083, 11.570330101, 11.5708044377, 11.5712786185, 11.5717526435, 11.5722265128, 11.5727002265, 11.5731737847, 11.5736471875, 11.574120435, 11.5745935273, 11.5750664646, 11.5755392468, 11.5760118742, 11.5764843468, 11.5769566647, 11.577428828, 11.5779008369, 11.5783726914, 11.5788443916, 11.5793159376, 11.5797873295, 11.5802585675, 11.5807296516, 11.5812005819, 11.5816713586, 11.5821419817, 11.5826124513, 11.5830827675, 11.5835529305, 11.5840229403, 11.584492797, 11.5849625007, 11.5854320516, 11.5859014497, 11.5863706951, 11.586839788, 11.5873087283, 11.5877775163, 11.588246152, 11.5887146356, 11.589182967, 11.5896511465, 11.5901191741, 11.5905870499, 11.591054774, 11.5915223466, 11.5919897676, 11.5924570373, 11.5929241556, 11.5933911228, 11.5938579389, 11.5943246039, 11.5947911181, 11.5952574814, 11.5957236941, 11.5961897561, 11.5966556677, 11.5971214288, 11.5975870396, 11.5980525002, 11.5985178106, 11.598982971, 11.5994479815, 11.5999128422, 11.6003775531, 11.6008421144, 11.6013065261, 11.6017707884, 11.6022349013, 11.602698865, 11.6031626795, 11.603626345, 11.6040898615, 11.6045532291, 11.6050164479, 11.6054795181, 11.6059424396, 11.6064052127, 11.6068678374, 11.6073303137, 11.6077926419, 11.608254822, 11.608716854, 11.6091787381, 11.6096404744, 11.610102063, 11.6105635039, 11.6110247973, 11.6114859432, 11.6119469418, 11.6124077931, 11.6128684973, 11.6133290544, 11.6137894645, 11.6142497277, 11.6147098441, 11.6151698138, 11.615629637, 11.6160893136, 11.6165488438, 11.6170082277, 11.6174674653, 11.6179265568, 11.6183855023, 11.6188443018, 11.6193029554, 11.6197614633, 11.6202198255, 11.6206780421, 11.6211361133, 11.621594039, 11.6220518195, 11.6225094547, 11.6229669448, 11.6234242899, 11.62388149, 11.6243385453, 11.6247954559, 11.6252522217, 11.6257088431, 11.6261653199, 11.6266216524, 11.6270778405, 11.6275338845, 11.6279897843, 11.6284455401, 11.628901152, 11.6293566201, 11.6298119444, 11.630267125, 11.6307221621, 11.6311770557, 11.6316318059, 11.6320864128, 11.6325408765, 11.6329951971, 11.6334493747, 11.6339034093, 11.6343573011, 11.6348110502, 11.6352646565, 11.6357181203, 11.6361714416, 11.6366246205, 11.6370776571, 11.6375305515, 11.6379833038, 11.638435914, 11.6388883823, 11.6393407087, 11.6397928933, 11.6402449362, 11.6406968376, 11.6411485974, 11.6416002158, 11.6420516929, 11.6425030288, 11.6429542235, 11.6434052771, 11.6438561898, 11.6443069615, 11.6447575925, 11.6452080828, 11.6456584324, 11.6461086415, 11.6465587102, 11.6470086384, 11.6474584265, 11.6479080743, 11.648357582, 11.6488069497, 11.6492561775, 11.6497052655, 11.6501542137, 11.6506030222, 11.6510516912, 11.6515002207, 11.6519486107, 11.6523968615, 11.652844973, 11.6532929454, 11.6537407787, 11.6541884731, 11.6546360285, 11.6550834452, 11.6555307232, 11.6559778625, 11.6564248633, 11.6568717256, 11.6573184496, 11.6577650353, 11.6582114828, 11.6586577921, 11.6591039635, 11.6595499969, 11.6599958924, 11.6604416502, 11.6608872703, 11.6613327528, 11.6617780978, 11.6622233053, 11.6626683755, 11.6631133085, 11.6635581042, 11.6640027629, 11.6644472845, 11.6648916693, 11.6653359172, 11.6657800283, 11.6662240028, 11.6666678407, 11.6671115421, 11.667555107, 11.6679985357, 11.6684418281, 11.6688849843, 11.6693280044, 11.6697708885, 11.6702136367, 11.6706562491, 11.6710987257, 11.6715410667, 11.6719832721, 11.672425342, 11.6728672764, 11.6733090756, 11.6737507394, 11.6741922681, 11.6746336618, 11.6750749204, 11.6755160441, 11.6759570329, 11.676397887, 11.6768386065, 11.6772791913, 11.6777196416, 11.6781599575, 11.6786001391, 11.6790401864, 11.6794800995, 11.6799198785, 11.6803595235, 11.6807990346, 11.6812384118, 11.6816776552, 11.682116765, 11.6825557411, 11.6829945837, 11.6834332928, 11.6838718686, 11.6843103111, 11.6847486204, 11.6851867966, 11.6856248397, 11.6860627499, 11.6865005272, 11.6869381717, 11.6873756834, 11.6878130626, 11.6882503091, 11.6886874232, 11.6891244049, 11.6895612543, 11.6899979714, 11.6904345564, 11.6908710093, 11.6913073302, 11.6917435192, 11.6921795763, 11.6926155017, 11.6930512954, 11.6934869575, 11.6939224881, 11.6943578872, 11.694793155, 11.6952282915, 11.6956632968, 11.696098171, 11.6965329141, 11.6969675262, 11.6974020075, 11.697836358, 11.6982705777, 11.6987046668, 11.6991386253, 11.6995724533, 11.7000061509, 11.7004397181, 11.7008731551, 11.701306462, 11.7017396387, 11.7021726854, 11.7026056021, 11.703038389, 11.7034710461, 11.7039035734, 11.7043359712, 11.7047682394, 11.7052003781, 11.7056323874, 11.7060642673, 11.7064960181, 11.7069276396, 11.7073591321, 11.7077904955, 11.70822173, 11.7086528357, 11.7090838126, 11.7095146607, 11.7099453802, 11.7103759712, 11.7108064337, 11.7112367678, 11.7116669736, 11.7120970511, 11.7125270004, 11.7129568217, 11.7133865149, 11.7138160802, 11.7142455177, 11.7146748273, 11.7151040092, 11.7155330635, 11.7159619903, 11.7163907895, 11.7168194613, 11.7172480058, 11.7176764231, 11.7181047131, 11.7185328761, 11.718960912, 11.7193888209, 11.719816603, 11.7202442583, 11.7206717868, 11.7210991887, 11.721526464, 11.7219536128, 11.7223806352, 11.7228075312, 11.7232343009, 11.7236609444, 11.7240874618, 11.7245138531, 11.7249401185, 11.7253662579, 11.7257922715, 11.7262181593, 11.7266439215, 11.727069558, 11.727495069, 11.7279204546, 11.7283457147, 11.7287708495, 11.7291958591, 11.7296207436, 11.7300455029, 11.7304701372, 11.7308946465, 11.731319031, 11.7317432907, 11.7321674257, 11.732591436, 11.7330153217, 11.7334390829, 11.7338627197, 11.7342862321, 11.7347096202, 11.7351328841, 11.7355560239, 11.7359790396, 11.7364019313, 11.7368246991, 11.737247343, 11.7376698632, 11.7380922596, 11.7385145324, 11.7389366817, 11.7393587074, 11.7397806098, 11.7402023888, 11.7406240445, 11.741045577, 11.7414669864, 11.7418882727, 11.7423094361, 11.7427304765, 11.7431513941, 11.7435721889, 11.7439928611, 11.7444134106, 11.7448338375, 11.745254142, 11.745674324, 11.7460943837, 11.7465143211, 11.7469341364, 11.7473538295, 11.7477734005, 11.7481928496, 11.7486121767, 11.749031382, 11.7494504656, 11.7498694274, 11.7502882676, 11.7507069862, 11.7511255834, 11.7515440591, 11.7519624135, 11.7523806466, 11.7527987584, 11.7532167492, 11.7536346189, 11.7540523675, 11.7544699953, 11.7548875022, 11.7553048883, 11.7557221536, 11.7561392984, 11.7565563225, 11.7569732262, 11.7573900094, 11.7578066722, 11.7582232147, 11.758639637, 11.7590559392, 11.7594721212, 11.7598881832, 11.7603041253, 11.7607199475, 11.7611356498, 11.7615512324, 11.7619666954, 11.7623820387, 11.7627972625, 11.7632123668, 11.7636273517, 11.7640422173, 11.7644569636, 11.7648715907, 11.7652860987, 11.7657004877, 11.7661147576, 11.7665289086, 11.7669429408, 11.7673568541, 11.7677706488, 11.7681843248, 11.7685978822, 11.7690113211, 11.7694246416, 11.7698378436, 11.7702509274, 11.7706638929, 11.7710767403, 11.7714894695, 11.7719020807, 11.7723145739, 11.7727269492, 11.7731392067, 11.7735513464, 11.7739633684, 11.7743752728, 11.7747870596, 11.7751987289, 11.7756102808, 11.7760217153, 11.7764330324, 11.7768442324, 11.7772553152, 11.7776662809, 11.7780771295, 11.7784878612, 11.778898476, 11.779308974, 11.7797193551, 11.7801296196, 11.7805397675, 11.7809497987, 11.7813597135, 11.7817695119, 11.7821791938, 11.7825887595, 11.7829982089, 11.7834075422, 11.7838167593, 11.7842258604, 11.7846348456, 11.7850437148, 11.7854524682, 11.7858611058, 11.7862696276, 11.7866780339, 11.7870863246, 11.7874944997, 11.7879025594, 11.7883105037, 11.7887183327, 11.7891260464, 11.789533645, 11.7899411284, 11.7903484968, 11.7907557501, 11.7911628886, 11.7915699121, 11.7919768209, 11.7923836149, 11.7927902943, 11.7931968591, 11.7936033093, 11.794009645, 11.7944158664, 11.7948219733, 11.795227966, 11.7956338445, 11.7960396088, 11.7964452591, 11.7968507953, 11.7972562175, 11.7976615259, 11.7980667204, 11.7984718011, 11.7988767681, 11.7992816215, 11.7996863613, 11.8000909876, 11.8004955005, 11.8008998999, 11.801304186, 11.8017083589, 11.8021124186, 11.8025163651, 11.8029201986, 11.803323919, 11.8037275266, 11.8041310212, 11.804534403, 11.8049376721, 11.8053408284, 11.8057438722, 11.8061468033, 11.806549622, 11.8069523282, 11.8073549221, 11.8077574036, 11.8081597729, 11.80856203, 11.8089641749, 11.8093662078, 11.8097681287, 11.8101699377, 11.8105716347, 11.81097322, 11.8113746935, 11.8117760553, 11.8121773055, 11.8125784441, 11.8129794713, 11.8133803869, 11.8137811912, 11.8141818842, 11.8145824659, 11.8149829364, 11.8153832958, 11.8157835441, 11.8161836814, 11.8165837078, 11.8169836233, 11.8173834279, 11.8177831218, 11.8181827049, 11.8185821775, 11.8189815394, 11.8193807909, 11.8197799318, 11.8201789624, 11.8205778827, 11.8209766926, 11.8213753924, 11.821773982, 11.8221724615, 11.822570831, 11.8229690905, 11.82336724, 11.8237652798, 11.8241632097, 11.82456103, 11.8249587405, 11.8253563415, 11.8257538329, 11.8261512148, 11.8265484873, 11.8269456504, 11.8273427042, 11.8277396488, 11.8281364842, 11.8285332105, 11.8289298277, 11.8293263358, 11.8297227351, 11.8301190254, 11.830515207, 11.8309112797, 11.8313072438, 11.8317030992, 11.832098846, 11.8324944843, 11.8328900142, 11.8332854356, 11.8336807487, 11.8340759534, 11.83447105, 11.8348660384, 11.8352609186, 11.8356556908, 11.8360503551, 11.8364449113, 11.8368393597, 11.8372337003, 11.8376279332, 11.8380220583, 11.8384160758, 11.8388099857, 11.8392037881, 11.839597483, 11.8399910705, 11.8403845507, 11.8407779236, 11.8411711892, 11.8415643477, 11.8419573991, 11.8423503434, 11.8427431807, 11.8431359111, 11.8435285346, 11.8439210513, 11.8443134612, 11.8447057644, 11.845097961, 11.8454900509, 11.8458820344, 11.8462739113, 11.8466656819, 11.8470573461, 11.847448904, 11.8478403556, 11.8482317011, 11.8486229404, 11.8490140737, 11.8494051009, 11.8497960222, 11.8501868376, 11.8505775472, 11.850968151, 11.851358649, 11.8517490414, 11.8521393282, 11.8525295094, 11.8529195851, 11.8533095554, 11.8536994203, 11.8540891799, 11.8544788342, 11.8548683833, 11.8552578272, 11.855647166, 11.8560363998, 11.8564255286, 11.8568145525, 11.8572034715, 11.8575922857, 11.8579809951, 11.8583695999, 11.8587580999, 11.8591464954, 11.8595347864, 11.8599229729, 11.8603110549, 11.8606990326, 11.861086906, 11.8614746751, 11.8618623401, 11.8622499009, 11.8626373576, 11.8630247102, 11.8634119589, 11.8637991037, 11.8641861447, 11.8645730818, 11.8649599151, 11.8653466448, 11.8657332709, 11.8661197933, 11.8665062122, 11.8668925277, 11.8672787397, 11.8676648484, 11.8680508537, 11.8684367559, 11.8688225548, 11.8692082506, 11.8695938432, 11.8699793329, 11.8703647196, 11.8707500033, 11.8711351842, 11.8715202623, 11.8719052377, 11.8722901103, 11.8726748803, 11.8730595477, 11.8734441125, 11.8738285749, 11.8742129348, 11.8745971924, 11.8749813477, 11.8753654006, 11.8757493514, 11.8761332, 11.8765169466, 11.876900591, 11.8772841335, 11.8776675741, 11.8780509127, 11.8784341496, 11.8788172846, 11.8792003179, 11.8795832496, 11.8799660797, 11.8803488082, 11.8807314351, 11.8811139607, 11.8814963848, 11.8818787076, 11.8822609291, 11.8826430494, 11.8830250684, 11.8834069864, 11.8837888033, 11.8841705191, 11.884552134, 11.8849336479, 11.885315061, 11.8856963733, 11.8860775849, 11.8864586957, 11.8868397059, 11.8872206155, 11.8876014245, 11.8879821331, 11.8883627412, 11.8887432489, 11.8891236563, 11.8895039634, 11.8898841703, 11.890264277, 11.8906442836, 11.8910241901, 11.8914039967, 11.8917837032, 11.8921633099, 11.8925428166, 11.8929222236, 11.8933015309, 11.8936807384, 11.8940598463, 11.8944388546, 11.8948177633, 11.8951965726, 11.8955752824, 11.8959538928, 11.8963324039, 11.8967108157, 11.8970891283, 11.8974673417, 11.897845456, 11.8982234712, 11.8986013874, 11.8989792046, 11.8993569229, 11.8997345424, 11.900112063, 11.9004894848, 11.900866808, 11.9012440325, 11.9016211583, 11.9019981857, 11.9023751145, 11.9027519449, 11.9031286768, 11.9035053104, 11.9038818457, 11.9042582828, 11.9046346217, 11.9050108624, 11.905387005, 11.9057630496, 11.9061389962, 11.9065148448, 11.9068905956, 11.9072662485, 11.9076418037, 11.9080172611, 11.9083926208, 11.9087678828, 11.9091430473, 11.9095181143, 11.9098930838, 11.9102679558, 11.9106427305, 11.9110174078, 11.9113919878, 11.9117664707, 11.9121408563, 11.9125151448, 11.9128893362, 11.9132634306, 11.913637428, 11.9140113285, 11.9143851322, 11.9147588389, 11.915132449, 11.9155059622, 11.9158793788, 11.9162526988, 11.9166259222, 11.9169990491, 11.9173720795, 11.9177450134, 11.918117851, 11.9184905923, 11.9188632373, 11.919235786, 11.9196082386, 11.919980595, 11.9203528554, 11.9207250198, 11.9210970881, 11.9214690605, 11.9218409371, 11.9222127178, 11.9225844027, 11.9229559919, 11.9233274854, 11.9236988833, 11.9240701856, 11.9244413923, 11.9248125036, 11.9251835194, 11.9255544399, 11.925925265, 11.9262959948, 11.9266666293, 11.9270371687, 11.9274076129, 11.9277779621, 11.9281482162, 11.9285183753, 11.9288884394, 11.9292584086, 11.929628283, 11.9299980626, 11.9303677474, 11.9307373376, 11.931106833, 11.9314762339, 11.9318455402, 11.932214752, 11.9325838693, 11.9329528922, 11.9333218207, 11.933690655, 11.9340593949, 11.9344280406, 11.9347965922, 11.9351650496, 11.935533413, 11.9359016823, 11.9362698576, 11.936637939, 11.9370059265, 11.9373738202, 11.9377416201, 11.9381093262, 11.9384769387, 11.9388444575, 11.9392118827, 11.9395792143, 11.9399464525, 11.9403135971, 11.9406806484, 11.9410476063, 11.9414144709, 11.9417812423, 11.9421479204, 11.9425145053, 11.9428809972, 11.9432473959, 11.9436137016, 11.9439799143, 11.9443460341, 11.944712061, 11.9450779951, 11.9454438364, 11.9458095849, 11.9461752407, 11.9465408039, 11.9469062745, 11.9472716525, 11.947636938, 11.948002131, 11.9483672316, 11.9487322398, 11.9490971557, 11.9494619794, 11.9498267108, 11.95019135, 11.950555897, 11.950920352, 11.951284715, 11.9516489859, 11.9520131649, 11.952377252, 11.9527412472, 11.9531051506, 11.9534689622, 11.9538326821, 11.9541963104, 11.954559847, 11.954923292, 11.9552866455, 11.9556499075, 11.9560130781, 11.9563761572, 11.9567391451, 11.9571020416, 11.9574648468, 11.9578275608, 11.9581901837, 11.9585527154, 11.9589151561, 11.9592775057, 11.9596397644, 11.9600019321, 11.9603640089, 11.9607259948, 11.96108789, 11.9614496944, 11.9618114081, 11.9621730311, 11.9625345635, 11.9628960053, 11.9632573566, 11.9636186174, 11.9639797878, 11.9643408678, 11.9647018574, 11.9650627567, 11.9654235658, 11.9657842847, 11.9661449133, 11.9665054519, 11.9668659004, 11.9672262588, 11.9675865273, 11.9679467058, 11.9683067944, 11.9686667932, 11.9690267022, 11.9693865213, 11.9697462508, 11.9701058906, 11.9704654408, 11.9708249014, 11.9711842724, 11.971543554, 11.971902746, 11.9722618487, 11.9726208621, 11.9729797861, 11.9733386208, 11.9736973663, 11.9740560226, 11.9744145898, 11.9747730679, 11.9751314569, 11.9754897569, 11.975847968, 11.9762060901, 11.9765641234, 11.9769220679, 11.9772799235, 11.9776376904, 11.9779953686, 11.9783529582, 11.9787104591, 11.9790678715, 11.9794251953, 11.9797824307, 11.9801395776, 11.9804966362, 11.9808536064, 11.9812104883, 11.9815672819, 11.9819239873, 11.9822806046, 11.9826371337, 11.9829935747, 11.9833499277, 11.9837061927, 11.9840623697, 11.9844184588, 11.98477446, 11.9851303735, 11.9854861991, 11.985841937, 11.9861975872, 11.9865531498, 11.9869086247, 11.9872640121, 11.9876193119, 11.9879745243, 11.9883296492, 11.9886846868, 11.989039637, 11.9893944998, 11.9897492755, 11.9901039639, 11.9904585651, 11.9908130792, 11.9911675061, 11.9915218461, 11.991876099, 11.992230265, 11.992584344, 11.9929383362, 11.9932922415, 11.99364606, 11.9939997918, 11.9943534369, 11.9947069953, 11.995060467, 11.9954138522, 11.9957671509, 11.996120363, 11.9964734887, 11.996826528, 11.9971794809, 11.9975323475, 11.9978851278, 11.9982378219, 11.9985904297, 11.9989429514, 11.999295387, 11.9996477365, 12.0, 12.0003521775, 12.000704269, 12.0010562746, 12.0014081944, 12.0017600283, 12.0021117765, 12.0024634389, 12.0028150156, 12.0031665067, 12.0035179121, 12.003869232, 12.0042204663, 12.0045716152, 12.0049226786, 12.0052736566, 12.0056245492, 12.0059753565, 12.0063260785, 12.0066767153, 12.0070272669, 12.0073777333, 12.0077281146, 12.0080784109, 12.0084286221, 12.0087787483, 12.0091287895, 12.0094787459, 12.0098286174, 12.010178404, 12.0105281059, 12.010877723, 12.0112272554, 12.0115767032, 12.0119260663, 12.0122753449, 12.0126245389, 12.0129736484, 12.0133226734, 12.0136716141, 12.0140204703, 12.0143692422, 12.0147179299, 12.0150665332, 12.0154150524, 12.0157634874, 12.0161118382, 12.016460105, 12.0168082877, 12.0171563864, 12.0175044011, 12.0178523319, 12.0182001788, 12.0185479419, 12.0188956211, 12.0192432166, 12.0195907284, 12.0199381564, 12.0202855008, 12.0206327617, 12.0209799389, 12.0213270326, 12.0216740429, 12.0220209696, 12.022367813, 12.022714573, 12.0230612497, 12.0234078431, 12.0237543533, 12.0241007803, 12.024447124, 12.0247933847, 12.0251395623, 12.0254856568, 12.0258316683, 12.0261775969, 12.0265234425, 12.0268692053, 12.0272148852, 12.0275604822, 12.0279059966, 12.0282514282, 12.0285967771, 12.0289420433, 12.029287227, 12.029632328, 12.0299773466, 12.0303222826, 12.0306671362, 12.0310119074, 12.0313565963, 12.0317012027, 12.0320457269, 12.0323901689, 12.0327345286, 12.0330788061, 12.0334230015, 12.0337671148, 12.0341111461, 12.0344550953, 12.0347989626, 12.0351427479, 12.0354864513, 12.0358300728, 12.0361736126, 12.0365170705, 12.0368604467, 12.0372037412, 12.037546954, 12.0378900851, 12.0382331347, 12.0385761028, 12.0389189893, 12.0392617943, 12.039604518, 12.0399471602, 12.040289721, 12.0406322006, 12.0409745988, 12.0413169158, 12.0416591516, 12.0420013063, 12.0423433798, 12.0426853722, 12.0430272836, 12.043369114, 12.0437108633, 12.0440525318, 12.0443941194, 12.0447356261, 12.0450770519, 12.045418397, 12.0457596614, 12.046100845, 12.046441948, 12.0467829704, 12.0471239121, 12.0474647733, 12.047805554, 12.0481462542, 12.048486874, 12.0488274134, 12.0491678724, 12.0495082511, 12.0498485495, 12.0501887676, 12.0505289055, 12.0508689633, 12.0512089409, 12.0515488384, 12.0518886559, 12.0522283933, 12.0525680508, 12.0529076283, 12.0532471259, 12.0535865436, 12.0539258815, 12.0542651396, 12.054604318, 12.0549434166, 12.0552824355, 12.0556213748, 12.0559602345, 12.0562990146, 12.0566377151, 12.0569763362, 12.0573148778, 12.05765334, 12.0579917228, 12.0583300262, 12.0586682503, 12.0590063952, 12.0593444608, 12.0596824472, 12.0600203545, 12.0603581826, 12.0606959317, 12.0610336017, 12.0613711927, 12.0617087047, 12.0620461377, 12.0623834919, 12.0627207672, 12.0630579636, 12.0633950813, 12.0637321202, 12.0640690804, 12.0644059619, 12.0647427648, 12.065079489, 12.0654161347, 12.0657527018, 12.0660891905, 12.0664256006, 12.0667619324, 12.0670981857, 12.0674343608, 12.0677704574, 12.0681064759, 12.068442416, 12.068778278, 12.0691140618, 12.0694497674, 12.069785395, 12.0701209445, 12.0704564159, 12.0707918094, 12.0711271249, 12.0714623626, 12.0717975223, 12.0721326042, 12.0724676082, 12.0728025345, 12.0731373831, 12.073472154, 12.0738068472, 12.0741414628, 12.0744760007, 12.0748104612, 12.0751448441, 12.0754791495, 12.0758133775, 12.076147528, 12.0764816012, 12.0768155971, 12.0771495156, 12.0774833569, 12.0778171209, 12.0781508077, 12.0784844174, 12.07881795, 12.0791514054, 12.0794847838, 12.0798180852, 12.0801513096, 12.0804844571, 12.0808175276, 12.0811505213, 12.0814834381, 12.0818162781, 12.0821490414, 12.0824817279, 12.0828143377, 12.0831468708, 12.0834793273, 12.0838117073, 12.0841440106, 12.0844762375, 12.0848083878, 12.0851404617, 12.0854724592, 12.0858043803, 12.086136225, 12.0864679935, 12.0867996856, 12.0871313015, 12.0874628413, 12.0877943048, 12.0881256922, 12.0884570035, 12.0887882387, 12.0891193979, 12.0894504811, 12.0897814884, 12.0901124197, 12.0904432751, 12.0907740546, 12.0911047584, 12.0914353863, 12.0917659385, 12.092096415, 12.0924268158, 12.0927571409, 12.0930873904, 12.0934175644, 12.0937476628, 12.0940776857, 12.0944076331, 12.094737505, 12.0950673016, 12.0953970228, 12.0957266686, 12.0960562392, 12.0963857345, 12.0967151545, 12.0970444993, 12.097373769, 12.0977029635, 12.098032083, 12.0983611273, 12.0986900967, 12.099018991, 12.0993478104, 12.0996765549, 12.1000052244, 12.1003338191, 12.100662339, 12.1009907841, 12.1013191544, 12.10164745, 12.1019756709, 12.1023038172, 12.1026318889, 12.1029598859, 12.1032878084, 12.1036156564, 12.1039434299, 12.1042711289, 12.1045987536, 12.1049263038, 12.1052537797, 12.1055811813, 12.1059085086, 12.1062357616, 12.1065629404, 12.1068900451, 12.1072170756, 12.107544032, 12.1078709143, 12.1081977225, 12.1085244568, 12.108851117, 12.1091777034, 12.1095042158, 12.1098306543, 12.110157019, 12.1104833098, 12.1108095269, 12.1111356702, 12.1114617399, 12.1117877358, 12.1121136581, 12.1124395068, 12.1127652819, 12.1130909834, 12.1134166115, 12.113742166, 12.1140676472, 12.1143930549, 12.1147183892, 12.1150436502, 12.1153688378, 12.1156939522, 12.1160189933, 12.1163439612, 12.116668856, 12.1169936775, 12.117318426, 12.1176431014, 12.1179677037, 12.118292233, 12.1186166894, 12.1189410727, 12.1192653832, 12.1195896207, 12.1199137855, 12.1202378773, 12.1205618964, 12.1208858428, 12.1212097164, 12.1215335173, 12.1218572456, 12.1221809013, 12.1225044843, 12.1228279948, 12.1231514328, 12.1234747982, 12.1237980913, 12.1241213118, 12.12444446, 12.1247675358, 12.1250905393, 12.1254134705, 12.1257363294, 12.1260591161, 12.1263818305, 12.1267044728, 12.127027043, 12.1273495411, 12.127671967, 12.127994321, 12.1283166029, 12.1286388129, 12.1289609509, 12.1292830169, 12.1296050112, 12.1299269335, 12.1302487841, 12.1305705628, 12.1308922698, 12.1312139051, 12.1315354687, 12.1318569606, 12.1321783809, 12.1324997296, 12.1328210068, 12.1331422124, 12.1334633465, 12.1337844092, 12.1341054004, 12.1344263202, 12.1347471687, 12.1350679458, 12.1353886516, 12.1357092861, 12.1360298494, 12.1363503415, 12.1366707623, 12.1369911121, 12.1373113907, 12.1376315982, 12.1379517347, 12.1382718002, 12.1385917946, 12.1389117181, 12.1392315707, 12.1395513524, 12.1398710632, 12.1401907032, 12.1405102724, 12.1408297708, 12.1411491984, 12.1414685554, 12.1417878417, 12.1421070573, 12.1424262023, 12.1427452768, 12.1430642806, 12.143383214, 12.1437020769, 12.1440208693, 12.1443395912, 12.1446582428, 12.1449768241, 12.1452953349, 12.1456137755, 12.1459321458, 12.1462504459, 12.1465686757, 12.1468868354, 12.1472049249, 12.1475229444, 12.1478408937, 12.1481587729, 12.1484765822, 12.1487943214, 12.1491119907, 12.1494295901, 12.1497471195, 12.1500645791, 12.1503819688, 12.1506992887, 12.1510165389, 12.1513337193, 12.15165083, 12.151967871, 12.1522848423, 12.152601744, 12.1529185761, 12.1532353387, 12.1535520317, 12.1538686552, 12.1541852093, 12.1545016939, 12.1548181091, 12.1551344549, 12.1554507313, 12.1557669384, 12.1560830763, 12.1563991449, 12.1567151442, 12.1570310744, 12.1573469354, 12.1576627272, 12.1579784499, 12.1582941036, 12.1586096882, 12.1589252038, 12.1592406504, 12.1595560281, 12.1598713368, 12.1601865766, 12.1605017476, 12.1608168497, 12.161131883, 12.1614468475, 12.1617617433, 12.1620765704, 12.1623913288, 12.1627060185, 12.1630206396, 12.1633351921, 12.163649676, 12.1639640914, 12.1642784383, 12.1645927167, 12.1649069267, 12.1652210682, 12.1655351414, 12.1658491462, 12.1661630826, 12.1664769508, 12.1667907507, 12.1671044824, 12.1674181458, 12.1677317411, 12.1680452682, 12.1683587272, 12.1686721181, 12.168985441, 12.1692986958, 12.1696118826, 12.1699250014, 12.1702380523, 12.1705510353, 12.1708639504, 12.1711767977, 12.1714895771, 12.1718022887, 12.1721149325, 12.1724275086, 12.172740017, 12.1730524578, 12.1733648308, 12.1736771363, 12.1739893742, 12.1743015445, 12.1746136472, 12.1749256825, 12.1752376503, 12.1755495506, 12.1758613836, 12.1761731491, 12.1764848473, 12.1767964781, 12.1771080417, 12.177419538, 12.177730967, 12.1780423289, 12.1783536235, 12.178664851, 12.1789760114, 12.1792871046, 12.1795981308, 12.17990909, 12.1802199822, 12.1805308073, 12.1808415656, 12.1811522569, 12.1814628813, 12.1817734388, 12.1820839295, 12.1823943534, 12.1827047105, 12.1830150009, 12.1833252245, 12.1836353815, 12.1839454718, 12.1842554954, 12.1845654524, 12.1848753429, 12.1851851668, 12.1854949242, 12.1858046151, 12.1861142395, 12.1864237975, 12.1867332891, 12.1870427143, 12.1873520732, 12.1876613657, 12.187970592, 12.188279752, 12.1885888457, 12.1888978732, 12.1892068346, 12.1895157298, 12.1898245589, 12.1901333219, 12.1904420188, 12.1907506497, 12.1910592145, 12.1913677134, 12.1916761464, 12.1919845134, 12.1922928145, 12.1926010497, 12.1929092191, 12.1932173227, 12.1935253605, 12.1938333325, 12.1941412389, 12.1944490795, 12.1947568544, 12.1950645637, 12.1953722074, 12.1956797855, 12.195987298, 12.196294745, 12.1966021265, 12.1969094425, 12.1972166931, 12.1975238783, 12.197830998, 12.1981380524, 12.1984450415, 12.1987519652, 12.1990588237, 12.1993656169, 12.1996723448, 12.1999790076, 12.2002856052, 12.2005921377, 12.200898605, 12.2012050073, 12.2015113445, 12.2018176167, 12.2021238238, 12.202429966, 12.2027360433, 12.2030420556, 12.203348003, 12.2036538855, 12.2039597032, 12.2042654561, 12.2045711442, 12.2048767676, 12.2051823262, 12.2054878202, 12.2057932494, 12.206098614, 12.206403914, 12.2067091494, 12.2070143202, 12.2073194265, 12.2076244682, 12.2079294455, 12.2082343583, 12.2085392067, 12.2088439907, 12.2091487104, 12.2094533656, 12.2097579566, 12.2100624832, 12.2103669456, 12.2106713438, 12.2109756777, 12.2112799475, 12.2115841531, 12.2118882945, 12.2121923719, 12.2124963852, 12.2128003344, 12.2131042196, 12.2134080409, 12.2137117981, 12.2140154914, 12.2143191208, 12.2146226863, 12.2149261879, 12.2152296257, 12.2155329997, 12.21583631, 12.2161395564, 12.2164427392, 12.2167458582, 12.2170489136, 12.2173519053, 12.2176548334, 12.2179576979, 12.2182604988, 12.2185632362, 12.2188659101, 12.2191685205, 12.2194710674, 12.2197735509, 12.220075971, 12.2203783277, 12.2206806211, 12.2209828511, 12.2212850178, 12.2215871213, 12.2218891615, 12.2221911385, 12.2224930522, 12.2227949029, 12.2230966903, 12.2233984147, 12.223700076, 12.2240016742, 12.2243032094, 12.2246046815, 12.2249060907, 12.2252074369, 12.2255087202, 12.2258099406, 12.2261110981, 12.2264121928, 12.2267132246, 12.2270141936, 12.2273150999, 12.2276159434, 12.2279167242, 12.2282174423, 12.2285180977, 12.2288186905, 12.2291192207, 12.2294196882, 12.2297200932, 12.2300204357, 12.2303207157, 12.2306209331, 12.2309210881, 12.2312211807, 12.2315212109, 12.2318211787, 12.2321210841, 12.2324209272, 12.232720708, 12.2330204265, 12.2333200827, 12.2336196768, 12.2339192086, 12.2342186782, 12.2345180857, 12.2348174311, 12.2351167144, 12.2354159356, 12.2357150948, 12.2360141919, 12.236313227, 12.2366122002, 12.2369111114, 12.2372099608, 12.2375087482, 12.2378074737, 12.2381061374, 12.2384047393, 12.2387032794, 12.2390017578, 12.2393001744, 12.2395985292, 12.2398968224, 12.240195054, 12.2404932239, 12.2407913322, 12.2410893789, 12.241387364, 12.2416852876, 12.2419831497, 12.2422809503, 12.2425786895, 12.2428763672, 12.2431739835, 12.2434715384, 12.243769032, 12.2440664642, 12.2443638351, 12.2446611448, 12.2449583932, 12.2452555803, 12.2455527063, 12.245849771, 12.2461467746, 12.2464437171, 12.2467405985, 12.2470374188, 12.247334178, 12.2476308762, 12.2479275134, 12.2482240897, 12.2485206049, 12.2488170593, 12.2491134527, 12.2494097853, 12.249706057, 12.2500022678, 12.2502984179, 12.2505945072, 12.2508905357, 12.2511865035, 12.2514824106, 12.251778257, 12.2520740428, 12.2523697679, 12.2526654325, 12.2529610364, 12.2532565798, 12.2535520626, 12.253847485, 12.2541428469, 12.2544381483, 12.2547333892, 12.2550285698, 12.25532369, 12.2556187498, 12.2559137493, 12.2562086885, 12.2565035674, 12.2567983861, 12.2570931445, 12.2573878427, 12.2576824807, 12.2579770586, 12.2582715763, 12.2585660339, 12.2588604314, 12.2591547689, 12.2594490463, 12.2597432637, 12.2600374211, 12.2603315186, 12.2606255561, 12.2609195337, 12.2612134514, 12.2615073092, 12.2618011072, 12.2620948454, 12.2623885238, 12.2626821424, 12.2629757012, 12.2632692004, 12.2635626398, 12.2638560196, 12.2641493397, 12.2644426002, 12.2647358011, 12.2650289425, 12.2653220242, 12.2656150465, 12.2659080092, 12.2662009125, 12.2664937563, 12.2667865407, 12.2670792657, 12.2673719313, 12.2676645375, 12.2679570844, 12.268249572, 12.2685420003, 12.2688343693, 12.2691266791, 12.2694189297, 12.2697111211, 12.2700032534, 12.2702953265, 12.2705873404, 12.2708792953, 12.2711711911, 12.2714630279, 12.2717548056, 12.2720465244, 12.2723381842, 12.272629785, 12.2729213269, 12.2732128099, 12.273504234, 12.2737955992, 12.2740869056, 12.2743781532, 12.2746693421, 12.2749604721, 12.2752515435, 12.2755425561, 12.27583351, 12.2761244053, 12.2764152419, 12.2767060199, 12.2769967393, 12.2772874001, 12.2775780024, 12.2778685462, 12.2781590314, 12.2784494582, 12.2787398266, 12.2790301364, 12.2793203879, 12.2796105811, 12.2799007158, 12.2801907922, 12.2804808103, 12.2807707701, 12.2810606717, 12.281350515, 12.2816403001, 12.281930027, 12.2822196957, 12.2825093062, 12.2827988587, 12.283088353, 12.2833777893, 12.2836671675, 12.2839564877, 12.2842457498, 12.284534954, 12.2848241002, 12.2851131885, 12.2854022189, 12.2856911913, 12.2859801059, 12.2862689627, 12.2865577616, 12.2868465027, 12.2871351861, 12.2874238117, 12.2877123795, 12.2880008897, 12.2882893422, 12.288577737, 12.2888660742, 12.2891543537, 12.2894425757, 12.2897307401, 12.2900188469, 12.2903068963, 12.2905948881, 12.2908828224, 12.2911706993, 12.2914585188, 12.2917462808, 12.2920339855, 12.2923216328, 12.2926092228, 12.2928967554, 12.2931842308, 12.2934716488, 12.2937590097, 12.2940463133, 12.2943335597, 12.2946207489, 12.294907881, 12.2951949559, 12.2954819737, 12.2957689344, 12.2960558381, 12.2963426847, 12.2966294743, 12.2969162069, 12.2972028825, 12.2974895012, 12.2977760629, 12.2980625677, 12.2983490157, 12.2986354067, 12.298921741, 12.2992080184, 12.299494239, 12.2997804029, 12.30006651, 12.3003525603, 12.300638554, 12.300924491, 12.3012103713, 12.301496195, 12.3017819621, 12.3020676725, 12.3023533264, 12.3026389238, 12.3029244646, 12.3032099489, 12.3034953768, 12.3037807482, 12.3040660631, 12.3043513217, 12.3046365238, 12.3049216696, 12.305206759, 12.3054917921, 12.3057767689, 12.3060616894, 12.3063465537, 12.3066313617, 12.3069161135, 12.3072008091, 12.3074854486, 12.3077700319, 12.3080545591, 12.3083390301, 12.3086234451, 12.3089078041, 12.309192107, 12.3094763538, 12.3097605447, 12.3100446796, 12.3103287586, 12.3106127817, 12.3108967488, 12.3111806601, 12.3114645154, 12.311748315, 12.3120320587, 12.3123157467, 12.3125993789, 12.3128829553, 12.313166476, 12.313449941, 12.3137333503, 12.3140167039, 12.3143000019, 12.3145832443, 12.3148664311, 12.3151495623, 12.3154326379, 12.315715658, 12.3159986226, 12.3162815317, 12.3165643854, 12.3168471836, 12.3171299264, 12.3174126138, 12.3176952458, 12.3179778224, 12.3182603437, 12.3185428097, 12.3188252204, 12.3191075758, 12.319389876, 12.3196721209, 12.3199543107, 12.3202364452, 12.3205185246, 12.3208005489, 12.321082518, 12.321364432, 12.321646291, 12.3219280949, 12.3222098437, 12.3224915376, 12.3227731765, 12.3230547603, 12.3233362893, 12.3236177633, 12.3238991824, 12.3241805466, 12.324461856, 12.3247431105, 12.3250243102, 12.3253054551, 12.3255865452, 12.3258675806, 12.3261485612, 12.3264294871, 12.3267103583, 12.3269911749, 12.3272719368, 12.3275526441, 12.3278332968, 12.3281138948, 12.3283944384, 12.3286749273, 12.3289553618, 12.3292357417, 12.3295160672, 12.3297963382, 12.3300765548, 12.330356717, 12.3306368247, 12.3309168781, 12.3311968772, 12.3314768219, 12.3317567123, 12.3320365484, 12.3323163302, 12.3325960578, 12.3328757312, 12.3331553503, 12.3334349153, 12.3337144261, 12.3339938828, 12.3342732853, 12.3345526338, 12.3348319281, 12.3351111684, 12.3353903547, 12.3356694869, 12.3359485652, 12.3362275895, 12.3365065598, 12.3367854762, 12.3370643387, 12.3373431473, 12.337621902, 12.3379006029, 12.3381792499, 12.3384578431, 12.3387363826, 12.3390148683, 12.3392933002, 12.3395716784, 12.3398500029, 12.3401282737, 12.3404064909, 12.3406846544, 12.3409627643, 12.3412408205, 12.3415188232, 12.3417967724, 12.342074668, 12.3423525101, 12.3426302987, 12.3429080338, 12.3431857154, 12.3434633437, 12.3437409185, 12.3440184399, 12.3442959079, 12.3445733226, 12.3448506839, 12.345127992, 12.3454052467, 12.3456824482, 12.3459595964, 12.3462366914, 12.3465137332, 12.3467907218, 12.3470676572, 12.3473445394, 12.3476213686, 12.3478981446, 12.3481748675, 12.3484515374, 12.3487281542, 12.349004718, 12.3492812288, 12.3495576866, 12.3498340915, 12.3501104433, 12.3503867423, 12.3506629884, 12.3509391815, 12.3512153219, 12.3514914093, 12.351767444, 12.3520434258, 12.3523193548, 12.3525952311, 12.3528710547, 12.3531468255, 12.3534225436, 12.353698209, 12.3539738218, 12.3542493819, 12.3545248894, 12.3548003444, 12.3550757467, 12.3553510964, 12.3556263936, 12.3559016383, 12.3561768305, 12.3564519702, 12.3567270575, 12.3570020923, 12.3572770746, 12.3575520046, 12.3578268822, 12.3581017074, 12.3583764803, 12.3586512009, 12.3589258692, 12.3592004851, 12.3594750488, 12.3597495603, 12.3600240196, 12.3602984266, 12.3605727815, 12.3608470842, 12.3611213347, 12.3613955332, 12.3616696795, 12.3619437737, 12.3622178159, 12.362491806, 12.3627657442, 12.3630396303, 12.3633134644, 12.3635872465, 12.3638609767, 12.364134655, 12.3644082814, 12.3646818559, 12.3649553785, 12.3652288493, 12.3655022682, 12.3657756353, 12.3660489507, 12.3663222142, 12.3665954261, 12.3668685862, 12.3671416946, 12.3674147512, 12.3676877563, 12.3679607096, 12.3682336114, 12.3685064615, 12.36877926, 12.369052007, 12.3693247024, 12.3695973463, 12.3698699386, 12.3701424795, 12.3704149689, 12.3706874068, 12.3709597933, 12.3712321284, 12.371504412, 12.3717766443, 12.3720488253, 12.3723209549, 12.3725930331, 12.3728650601, 12.3731370358, 12.3734089602, 12.3736808334, 12.3739526554, 12.3742244261, 12.3744961457, 12.3747678141, 12.3750394313, 12.3753109975, 12.3755825125, 12.3758539764, 12.3761253893, 12.3763967511, 12.3766680619, 12.3769393216, 12.3772105304, 12.3774816882, 12.377752795, 12.3780238509, 12.3782948559, 12.37856581, 12.3788367132, 12.3791075656, 12.3793783671, 12.3796491178, 12.3799198176, 12.3801904667, 12.3804610651, 12.3807316127, 12.3810021096, 12.3812725557, 12.3815429512, 12.381813296, 12.3820835901, 12.3823538337, 12.3826240266, 12.3828941689, 12.3831642606, 12.3834343018, 12.3837042925, 12.3839742326, 12.3842441222, 12.3845139614, 12.3847837501, 12.3850534883, 12.3853231762, 12.3855928136, 12.3858624006, 12.3861319373, 12.3864014236, 12.3866708596, 12.3869402453, 12.3872095807, 12.3874788658, 12.3877481007, 12.3880172853, 12.3882864198, 12.388555504, 12.388824538, 12.3890935219, 12.3893624556, 12.3896313393, 12.3899001728, 12.3901689562, 12.3904376896, 12.3907063729, 12.3909750062, 12.3912435894, 12.3915121227, 12.391780606, 12.3920490394, 12.3923174228, 12.3925857563, 12.3928540399, 12.3931222736, 12.3933904574, 12.3936585915, 12.3939266756, 12.39419471, 12.3944626946, 12.3947306294, 12.3949985145, 12.3952663498, 12.3955341355, 12.3958018714, 12.3960695576, 12.3963371942, 12.3966047812, 12.3968723185, 12.3971398062, 12.3974072444, 12.3976746329, 12.397941972, 12.3982092615, 12.3984765014, 12.3987436919, 12.399010833, 12.3992779245, 12.3995449666, 12.3998119593, 12.4000789026, 12.4003457965, 12.4006126411, 12.4008794363, 12.4011461822, 12.4014128787, 12.401679526, 12.401946124, 12.4022126727, 12.4024791722, 12.4027456225, 12.4030120236, 12.4032783755, 12.4035446782, 12.4038109318, 12.4040771362, 12.4043432916, 12.4046093978, 12.404875455, 12.4051414631, 12.4054074222, 12.4056733323, 12.4059391933, 12.4062050054, 12.4064707685, 12.4067364827, 12.4070021479, 12.4072677642, 12.4075333317, 12.4077988502, 12.4080643199, 12.4083297408, 12.4085951128, 12.408860436, 12.4091257105, 12.4093909361, 12.4096561131, 12.4099212412, 12.4101863207, 12.4104513515, 12.4107163336, 12.410981267, 12.4112461518, 12.411510988, 12.4117757756, 12.4120405146, 12.412305205, 12.4125698468, 12.4128344401, 12.4130989849, 12.4133634812, 12.413627929, 12.4138923284, 12.4141566793, 12.4144209817, 12.4146852358, 12.4149494415, 12.4152135988, 12.4154777077, 12.4157417683, 12.4160057806, 12.4162697445, 12.4165336602, 12.4167975276, 12.4170613468, 12.4173251177, 12.4175888404, 12.4178525149, 12.4181161412, 12.4183797194, 12.4186432494, 12.4189067313, 12.419170165, 12.4194335507, 12.4196968883, 12.4199601778, 12.4202234193, 12.4204866128, 12.4207497583, 12.4210128558, 12.4212759053, 12.4215389068, 12.4218018605, 12.4220647662, 12.422327624, 12.4225904339, 12.4228531959, 12.4231159101, 12.4233785765, 12.4236411951, 12.4239037658, 12.4241662888, 12.424428764, 12.4246911915, 12.4249535713, 12.4252159033, 12.4254781876, 12.4257404243, 12.4260026133, 12.4262647547, 12.4265268485, 12.4267888946, 12.4270508932, 12.4273128441, 12.4275747476, 12.4278366035, 12.4280984118, 12.4283601727, 12.4286218861, 12.428883552, 12.4291451705, 12.4294067415, 12.4296682651, 12.4299297414, 12.4301911702, 12.4304525517, 12.4307138858, 12.4309751726, 12.4312364121, 12.4314976043, 12.4317587492, 12.4320198468, 12.4322808972, 12.4325419004, 12.4328028564, 12.4330637651, 12.4333246267, 12.4335854412, 12.4338462084, 12.4341069286, 12.4343676017, 12.4346282276, 12.4348888065, 12.4351493384, 12.4354098232, 12.4356702609, 12.4359306517, 12.4361909955, 12.4364512923, 12.4367115421, 12.436971745, 12.437231901, 12.4374920101, 12.4377520723, 12.4380120877, 12.4382720561, 12.4385319778, 12.4387918526, 12.4390516806, 12.4393114618, 12.4395711963, 12.439830884, 12.440090525, 12.4403501192, 12.4406096667, 12.4408691676, 12.4411286218, 12.4413880293, 12.4416473903, 12.4419067045, 12.4421659722, 12.4424251933, 12.4426843679, 12.4429434958, 12.4432025773, 12.4434616122, 12.4437206007, 12.4439795426, 12.4442384381, 12.4444972871, 12.4447560897, 12.4450148459, 12.4452735556, 12.445532219, 12.445790836, 12.4460494067, 12.4463079311, 12.4465664091, 12.4468248408, 12.4470832262, 12.4473415654, 12.4475998583, 12.447858105, 12.4481163054, 12.4483744597, 12.4486325677, 12.4488906296, 12.4491486454, 12.449406615, 12.4496645385, 12.4499224159, 12.4501802472, 12.4504380324, 12.4506957716, 12.4509534647, 12.4512111118, 12.4514687129, 12.4517262681, 12.4519837772, 12.4522412404, 12.4524986577, 12.452756029, 12.4530133545, 12.453270634, 12.4535278677, 12.4537850555, 12.4540421975, 12.4542992936, 12.454556344, 12.4548133485, 12.4550703073, 12.4553272203, 12.4555840876, 12.4558409091, 12.456097685, 12.4563544151, 12.4566110996, 12.4568677384, 12.4571243315, 12.4573808791, 12.457637381, 12.4578938373, 12.4581502481, 12.4584066132, 12.4586629329, 12.458919207, 12.4591754356, 12.4594316186, 12.4596877562, 12.4599438484, 12.4601998951, 12.4604558963, 12.4607118521, 12.4609677626, 12.4612236276, 12.4614794473, 12.4617352216, 12.4619909506, 12.4622466342, 12.4625022726, 12.4627578657, 12.4630134134, 12.463268916, 12.4635243733, 12.4637797853, 12.4640351522, 12.4642904739, 12.4645457503, 12.4648009817, 12.4650561678, 12.4653113089, 12.4655664048, 12.4658214556, 12.4660764614, 12.4663314221, 12.4665863377, 12.4668412083, 12.4670960339, 12.4673508145, 12.4676055501, 12.4678602407, 12.4681148864, 12.4683694871, 12.4686240429, 12.4688785538, 12.4691330198, 12.469387441, 12.4696418172, 12.4698961487, 12.4701504353, 12.4704046771, 12.4706588741, 12.4709130263, 12.4711671337, 12.4714211964, 12.4716752144, 12.4719291876, 12.4721831162, 12.4724370001, 12.4726908392, 12.4729446338, 12.4731983837, 12.473452089, 12.4737057496, 12.4739593657, 12.4742129372, 12.4744664641, 12.4747199465, 12.4749733844, 12.4752267777, 12.4754801266, 12.475733431, 12.4759866909, 12.4762399063, 12.4764930773, 12.4767462039, 12.4769992861, 12.4772523239, 12.4775053174, 12.4777582664, 12.4780111712, 12.4782640316, 12.4785168477, 12.4787696195, 12.479022347, 12.4792750303, 12.4795276693, 12.479780264, 12.4800328146, 12.4802853209, 12.4805377831, 12.4807902011, 12.4810425749, 12.4812949046, 12.4815471902, 12.4817994317, 12.482051629, 12.4823037823, 12.4825558915, 12.4828079567, 12.4830599779, 12.483311955, 12.4835638881, 12.4838157773, 12.4840676224, 12.4843194236, 12.4845711809, 12.4848228943, 12.4850745637, 12.4853261892, 12.4855777709, 12.4858293087, 12.4860808027, 12.4863322528, 12.4865836591, 12.4868350216, 12.4870863403, 12.4873376152, 12.4875888464, 12.4878400338, 12.4880911775, 12.4883422775, 12.4885933338, 12.4888443465, 12.4890953154, 12.4893462407, 12.4895971224, 12.4898479604, 12.4900987549, 12.4903495057, 12.490600213, 12.4908508767, 12.4911014969, 12.4913520736, 12.4916026067, 12.4918530963, 12.4921035425, 12.4923539452, 12.4926043044, 12.4928546202, 12.4931048925, 12.4933551215, 12.4936053071, 12.4938554492, 12.4941055481, 12.4943556035, 12.4946056157, 12.4948555845, 12.49510551, 12.4953553922, 12.4956052312, 12.4958550269, 12.4961047793, 12.4963544886, 12.4966041546, 12.4968537774, 12.497103357, 12.4973528935, 12.4976023868, 12.497851837, 12.498101244, 12.4983506079, 12.4985999288, 12.4988492065, 12.4990984412, 12.4993476329, 12.4995967815, 12.4998458871, 12.5000949497, 12.5003439693, 12.5005929459, 12.5008418796, 12.5010907703, 12.5013396181, 12.5015884229, 12.5018371849, 12.502085904, 12.5023345802, 12.5025832136, 12.5028318041, 12.5030803518, 12.5033288566, 12.5035773187, 12.503825738, 12.5040741145, 12.5043224483, 12.5045707393, 12.5048189876, 12.5050671932, 12.5053153561, 12.5055634764, 12.5058115539, 12.5060595888, 12.5063075811, 12.5065555308, 12.5068034378, 12.5070513022, 12.5072991241, 12.5075469034, 12.5077946402, 12.5080423344, 12.5082899861, 12.5085375953, 12.5087851621, 12.5090326863, 12.5092801681, 12.5095276074, 12.5097750043, 12.5100223588, 12.5102696709, 12.5105169406, 12.5107641679, 12.5110113529, 12.5112584955, 12.5115055958, 12.5117526538, 12.5119996694, 12.5122466428, 12.5124935739, 12.5127404628, 12.5129873094, 12.5132341138, 12.513480876, 12.513727596, 12.5139742737, 12.5142209094, 12.5144675028, 12.5147140541, 12.5149605633, 12.5152070304, 12.5154534554, 12.5156998383, 12.5159461791, 12.5161924779, 12.5164387346, 12.5166849493, 12.516931122, 12.5171772527, 12.5174233414, 12.5176693881, 12.5179153929, 12.5181613558, 12.5184072767, 12.5186531557, 12.5188989928, 12.519144788, 12.5193905413, 12.5196362528, 12.5198819225, 12.5201275503, 12.5203731363, 12.5206186806, 12.520864183, 12.5211096437, 12.5213550626, 12.5216004397, 12.5218457752, 12.5220910689, 12.5223363209, 12.5225815313, 12.5228266999, 12.5230718269, 12.5233169123, 12.5235619561, 12.5238069582, 12.5240519187, 12.5242968377, 12.524541715, 12.5247865509, 12.5250313451, 12.5252760979, 12.5255208091, 12.5257654788, 12.5260101071, 12.5262546938, 12.5264992391, 12.526743743, 12.5269882054, 12.5272326264, 12.5274770061, 12.5277213443, 12.5279656411, 12.5282098966, 12.5284541108, 12.5286982836, 12.5289424151, 12.5291865053, 12.5294305541, 12.5296745618, 12.5299185281, 12.5301624532, 12.5304063371, 12.5306501798, 12.5308939812, 12.5311377414, 12.5313814605, 12.5316251384, 12.5318687752, 12.5321123708, 12.5323559253, 12.5325994387, 12.532842911, 12.5330863422, 12.5333297323, 12.5335730814, 12.5338163894, 12.5340596565, 12.5343028825, 12.5345460675, 12.5347892115, 12.5350323145, 12.5352753766, 12.5355183978, 12.535761378, 12.5360043173, 12.5362472157, 12.5364900732, 12.5367328898, 12.5369756656, 12.5372184005, 12.5374610946, 12.5377037479, 12.5379463604, 12.5381889321, 12.538431463, 12.5386739531, 12.5389164025, 12.5391588111, 12.539401179, 12.5396435062, 12.5398857928, 12.5401280386, 12.5403702437, 12.5406124082, 12.5408545321, 12.5410966153, 12.541338658, 12.54158066, 12.5418226214, 12.5420645423, 12.5423064226, 12.5425482623, 12.5427900616, 12.5430318203, 12.5432735384, 12.5435152162, 12.5437568534, 12.5439984501, 12.5442400064, 12.5444815223, 12.5447229978, 12.5449644328, 12.5452058274, 12.5454471817, 12.5456884956, 12.5459297691, 12.5461710023, 12.5464121951, 12.5466533477, 12.5468944599, 12.5471355318, 12.5473765635, 12.5476175549, 12.5478585061, 12.548099417, 12.5483402877, 12.5485811182, 12.5488219085, 12.5490626586, 12.5493033685, 12.5495440383, 12.5497846679, 12.5500252575, 12.5502658069, 12.5505063162, 12.5507467854, 12.5509872145, 12.5512276036, 12.5514679526, 12.5517082616, 12.5519485306, 12.5521887596, 12.5524289485, 12.5526690975, 12.5529092065, 12.5531492756, 12.5533893047, 12.5536292939, 12.5538692432, 12.5541091526, 12.5543490221, 12.5545888517, 12.5548286414, 12.5550683913, 12.5553081014, 12.5555477716, 12.5557874021, 12.5560269927, 12.5562665436, 12.5565060547, 12.556745526, 12.5569849576, 12.5572243495, 12.5574637016, 12.557703014, 12.5579422868, 12.5581815199, 12.5584207133, 12.558659867, 12.5588989811, 12.5591380556, 12.5593770905, 12.5596160858, 12.5598550415, 12.5600939576, 12.5603328342, 12.5605716712, 12.5608104687, 12.5610492267, 12.5612879452, 12.5615266241, 12.5617652636, 12.5620038637, 12.5622424242, 12.5624809453, 12.562719427, 12.5629578693, 12.5631962722, 12.5634346357, 12.5636729598, 12.5639112446, 12.56414949, 12.5643876961, 12.5646258628, 12.5648639902, 12.5651020784, 12.5653401272, 12.5655781368, 12.5658161071, 12.5660540382, 12.56629193, 12.5665297826, 12.566767596, 12.5670053702, 12.5672431053, 12.5674808011, 12.5677184579, 12.5679560754, 12.5681936539, 12.5684311932, 12.5686686934, 12.5689061545, 12.5691435765, 12.5693809595, 12.5696183034, 12.5698556083, 12.5700928742, 12.570330101, 12.5705672889, 12.5708044377, 12.5710415476, 12.5712786185, 12.5715156505, 12.5717526435, 12.5719895976, 12.5722265128, 12.5724633891, 12.5727002265, 12.572937025, 12.5731737847, 12.5734105055, 12.5736471875, 12.5738838307, 12.574120435, 12.5743570006, 12.5745935273, 12.5748300153, 12.5750664646, 12.5753028751, 12.5755392468, 12.5757755799, 12.5760118742, 12.5762481298, 12.5764843468, 12.5767205251, 12.5769566647, 12.5771927657, 12.577428828, 12.5776648518, 12.5779008369, 12.5781367834, 12.5783726914, 12.5786085607, 12.5788443916, 12.5790801838, 12.5793159376, 12.5795516528, 12.5797873295, 12.5800229678, 12.5802585675, 12.5804941288, 12.5807296516, 12.580965136, 12.5812005819, 12.5814359895, 12.5816713586, 12.5819066893, 12.5821419817, 12.5823772356, 12.5826124513, 12.5828476286, 12.5830827675, 12.5833178681, 12.5835529305, 12.5837879545, 12.5840229403, 12.5842578877, 12.584492797, 12.584727668, 12.5849625007, 12.5851972953, 12.5854320516, 12.5856667697, 12.5859014497, 12.5861360915, 12.5863706951, 12.5866052606, 12.586839788, 12.5870742772, 12.5873087283, 12.5875431414, 12.5877775163, 12.5880118532, 12.588246152, 12.5884804128, 12.5887146356, 12.5889488203, 12.589182967, 12.5894170758, 12.5896511465, 12.5898851793, 12.5901191741, 12.590353131, 12.5905870499, 12.5908209309, 12.591054774, 12.5912885792, 12.5915223466, 12.591756076, 12.5919897676, 12.5922234214, 12.5924570373, 12.5926906154, 12.5929241556, 12.5931576581, 12.5933911228, 12.5936245497, 12.5938579389, 12.5940912903, 12.5943246039, 12.5945578799, 12.5947911181, 12.5950243186, 12.5952574814, 12.5954906066, 12.5957236941, 12.5959567439, 12.5961897561, 12.5964227307, 12.5966556677, 12.596888567, 12.5971214288, 12.597354253, 12.5975870396, 12.5978197886, 12.5980525002, 12.5982851741, 12.5985178106, 12.5987504096, 12.598982971, 12.599215495, 12.5994479815, 12.5996804306, 12.5999128422, 12.6001452164, 12.6003775531, 12.6006098524, 12.6008421144, 12.6010743389, 12.6013065261, 12.6015386759, 12.6017707884, 12.6020028635, 12.6022349013, 12.6024669018, 12.602698865, 12.6029307909, 12.6031626795, 12.6033945309, 12.603626345, 12.6038581218, 12.6040898615, 12.6043215639, 12.6045532291, 12.6047848571, 12.6050164479, 12.6052480016, 12.6054795181, 12.6057109974, 12.6059424396, 12.6061738447, 12.6064052127, 12.6066365436, 12.6068678374, 12.6070990941, 12.6073303137, 12.6075614964, 12.6077926419, 12.6080237505, 12.608254822, 12.6084858565, 12.608716854, 12.6089478146, 12.6091787381, 12.6094096248, 12.6096404744, 12.6098712872, 12.610102063, 12.6103328019, 12.6105635039, 12.6107941691, 12.6110247973, 12.6112553887, 12.6114859432, 12.6117164609, 12.6119469418, 12.6121773859, 12.6124077931, 12.6126381636, 12.6128684973, 12.6130987942, 12.6133290544, 12.6135592778, 12.6137894645, 12.6140196144, 12.6142497277, 12.6144798042, 12.6147098441, 12.6149398473, 12.6151698138, 12.6153997437, 12.615629637, 12.6158594936, 12.6160893136, 12.616319097, 12.6165488438, 12.616778554, 12.6170082277, 12.6172378647, 12.6174674653, 12.6176970293, 12.6179265568, 12.6181560478, 12.6183855023, 12.6186149203, 12.6188443018, 12.6190736468, 12.6193029554, 12.6195322276, 12.6197614633, 12.6199906626, 12.6202198255, 12.620448952, 12.6206780421, 12.6209070959, 12.6211361133, 12.6213650943, 12.621594039, 12.6218229474, 12.6220518195, 12.6222806552, 12.6225094547, 12.6227382179, 12.6229669448, 12.6231956355, 12.6234242899, 12.6236529081, 12.62388149, 12.6241100358, 12.6243385453, 12.6245670187, 12.6247954559, 12.6250238569, 12.6252522217, 12.6254805505, 12.6257088431, 12.6259370995, 12.6261653199, 12.6263935042, 12.6266216524, 12.6268497645, 12.6270778405, 12.6273058805, 12.6275338845, 12.6277618524, 12.6279897843, 12.6282176802, 12.6284455401, 12.6286733641, 12.628901152, 12.629128904, 12.6293566201, 12.6295843002, 12.6298119444, 12.6300395527, 12.630267125, 12.6304946615, 12.6307221621, 12.6309496268, 12.6311770557, 12.6314044487, 12.6316318059, 12.6318591273, 12.6320864128, 12.6323136626, 12.6325408765, 12.6327680547, 12.6329951971, 12.6332223038, 12.6334493747, 12.6336764099, 12.6339034093, 12.6341303731, 12.6343573011, 12.6345841935, 12.6348110502, 12.6350378712, 12.6352646565, 12.6354914063, 12.6357181203, 12.6359447988, 12.6361714416, 12.6363980489, 12.6366246205, 12.6368511566, 12.6370776571, 12.6373041221, 12.6375305515, 12.6377569454, 12.6379833038, 12.6382096266, 12.638435914, 12.6386621659, 12.6388883823, 12.6391145632, 12.6393407087, 12.6395668187, 12.6397928933, 12.6400189325, 12.6402449362, 12.6404709046, 12.6406968376, 12.6409227352, 12.6411485974, 12.6413744243, 12.6416002158, 12.641825972, 12.6420516929, 12.6422773785, 12.6425030288, 12.6427286438, 12.6429542235, 12.6431797679, 12.6434052771, 12.6436307511, 12.6438561898, 12.6440815933, 12.6443069615, 12.6445322946, 12.6447575925, 12.6449828552, 12.6452080828, 12.6454332752, 12.6456584324, 12.6458835545, 12.6461086415, 12.6463336934, 12.6465587102, 12.6467836918, 12.6470086384, 12.64723355, 12.6474584265, 12.6476832679, 12.6479080743, 12.6481328457, 12.648357582, 12.6485822834, 12.6488069497, 12.6490315811, 12.6492561775, 12.649480739, 12.6497052655, 12.649929757, 12.6501542137, 12.6503786354, 12.6506030222, 12.6508273741, 12.6510516912, 12.6512759733, 12.6515002207, 12.6517244331, 12.6519486107, 12.6521727535, 12.6523968615, 12.6526209346, 12.652844973, 12.6530689766, 12.6532929454, 12.6535168794, 12.6537407787, 12.6539646432, 12.6541884731, 12.6544122681, 12.6546360285, 12.6548597542, 12.6550834452, 12.6553071015, 12.6555307232, 12.6557543101, 12.6559778625, 12.6562013802, 12.6564248633, 12.6566483117, 12.6568717256, 12.6570951049, 12.6573184496, 12.6575417597, 12.6577650353, 12.6579882763, 12.6582114828, 12.6584346547, 12.6586577921, 12.658880895, 12.6591039635, 12.6593269974, 12.6595499969, 12.6597729619, 12.6599958924, 12.6602187885, 12.6604416502, 12.6606644775, 12.6608872703, 12.6611100287, 12.6613327528, 12.6615554425, 12.6617780978, 12.6620007187, 12.6622233053, 12.6624458576, 12.6626683755, 12.6628908591, 12.6631133085, 12.6633357235, 12.6635581042, 12.6637804507, 12.6640027629, 12.6642250408, 12.6644472845, 12.664669494, 12.6648916693, 12.6651138103, 12.6653359172, 12.6655579898, 12.6657800283, 12.6660020326, 12.6662240028, 12.6664459388, 12.6666678407, 12.6668897084, 12.6671115421, 12.6673333416, 12.667555107, 12.6677768384, 12.6679985357, 12.6682201989, 12.6684418281, 12.6686634232, 12.6688849843, 12.6691065113, 12.6693280044, 12.6695494635, 12.6697708885, 12.6699922796, 12.6702136367, 12.6704349599, 12.6706562491, 12.6708775044, 12.6710987257, 12.6713199132, 12.6715410667, 12.6717621863, 12.6719832721, 12.672204324, 12.672425342, 12.6726463261, 12.6728672764, 12.6730881929, 12.6733090756, 12.6735299244, 12.6737507394, 12.6739715207, 12.6741922681, 12.6744129818, 12.6746336618, 12.6748543079, 12.6750749204, 12.6752954991, 12.6755160441, 12.6757365554, 12.6759570329, 12.6761774768, 12.676397887, 12.6766182636, 12.6768386065, 12.6770589157, 12.6772791913, 12.6774994333, 12.6777196416, 12.6779398164, 12.6781599575, 12.6783800651, 12.6786001391, 12.6788201795, 12.6790401864, 12.6792601597, 12.6794800995, 12.6797000058, 12.6799198785, 12.6801397178, 12.6803595235, 12.6805792958, 12.6807990346, 12.6810187399, 12.6812384118, 12.6814580502, 12.6816776552, 12.6818972268, 12.682116765, 12.6823362697, 12.6825557411, 12.6827751791, 12.6829945837, 12.6832139549, 12.6834332928, 12.6836525974, 12.6838718686, 12.6840911065, 12.6843103111, 12.6845294824, 12.6847486204, 12.6849677251, 12.6851867966, 12.6854058348, 12.6856248397, 12.6858438114, 12.6860627499, 12.6862816551, 12.6865005272, 12.686719366, 12.6869381717, 12.6871569441, 12.6873756834, 12.6875943896, 12.6878130626, 12.6880317024, 12.6882503091, 12.6884688827, 12.6886874232, 12.6889059306, 12.6891244049, 12.6893428461, 12.6895612543, 12.6897796294, 12.6899979714, 12.6902162804, 12.6904345564, 12.6906527993, 12.6908710093, 12.6910891862, 12.6913073302, 12.6915254412, 12.6917435192, 12.6919615642, 12.6921795763, 12.6923975555, 12.6926155017, 12.692833415, 12.6930512954, 12.6932691429, 12.6934869575, 12.6937047392, 12.6939224881, 12.6941402041, 12.6943578872, 12.6945755375, 12.694793155, 12.6950107397, 12.6952282915, 12.6954458105, 12.6956632968, 12.6958807503, 12.696098171, 12.6963155589, 12.6965329141, 12.6967502365, 12.6969675262, 12.6971847832, 12.6974020075, 12.6976191991, 12.697836358, 12.6980534842, 12.6982705777, 12.6984876386, 12.6987046668, 12.6989216623, 12.6991386253, 12.6993555556, 12.6995724533, 12.6997893184, 12.7000061509, 12.7002229508, 12.7004397181, 12.7006564529, 12.7008731551, 12.7010898248, 12.701306462, 12.7015230666, 12.7017396387, 12.7019561783, 12.7021726854, 12.70238916, 12.7026056021, 12.7028220118, 12.703038389, 12.7032547337, 12.7034710461, 12.703687326, 12.7039035734, 12.7041197885, 12.7043359712, 12.7045521215, 12.7047682394, 12.7049843249, 12.7052003781, 12.7054163989, 12.7056323874, 12.7058483435, 12.7060642673, 12.7062801588, 12.7064960181, 12.706711845, 12.7069276396, 12.707143402, 12.7073591321, 12.7075748299, 12.7077904955, 12.7080061289, 12.70822173, 12.708437299, 12.7086528357, 12.7088683402, 12.7090838126, 12.7092992527, 12.7095146607, 12.7097300365, 12.7099453802, 12.7101606918, 12.7103759712, 12.7105912185, 12.7108064337, 12.7110216168, 12.7112367678, 12.7114518867, 12.7116669736, 12.7118820284, 12.7120970511, 12.7123120418, 12.7125270004, 12.7127419271, 12.7129568217, 12.7131716843, 12.7133865149, 12.7136013136, 12.7138160802, 12.7140308149, 12.7142455177, 12.7144601885, 12.7146748273, 12.7148894342, 12.7151040092, 12.7153185523, 12.7155330635, 12.7157475428, 12.7159619903, 12.7161764058, 12.7163907895, 12.7166051413, 12.7168194613, 12.7170337495, 12.7172480058, 12.7174622303, 12.7176764231, 12.717890584, 12.7181047131, 12.7183188105, 12.7185328761, 12.7187469099, 12.718960912, 12.7191748823, 12.7193888209, 12.7196027278, 12.719816603, 12.7200304465, 12.7202442583, 12.7204580384, 12.7206717868, 12.7208855036, 12.7210991887, 12.7213128422, 12.721526464, 12.7217400542, 12.7219536128, 12.7221671398, 12.7223806352, 12.722594099, 12.7228075312, 12.7230209318, 12.7232343009, 12.7234476384, 12.7236609444, 12.7238742189, 12.7240874618, 12.7243006732, 12.7245138531, 12.7247270015, 12.7249401185, 12.7251532039, 12.7253662579, 12.7255792804, 12.7257922715, 12.7260052311, 12.7262181593, 12.7264310561, 12.7266439215, 12.7268567555, 12.727069558, 12.7272823292, 12.727495069, 12.7277077775, 12.7279204546, 12.7281331003, 12.7283457147, 12.7285582978, 12.7287708495, 12.72898337, 12.7291958591, 12.729408317, 12.7296207436, 12.7298331388, 12.7300455029, 12.7302578357, 12.7304701372, 12.7306824075, 12.7308946465, 12.7311068544, 12.731319031, 12.7315311765, 12.7317432907, 12.7319553738, 12.7321674257, 12.7323794464, 12.732591436, 12.7328033944, 12.7330153217, 12.7332272179, 12.7334390829, 12.7336509168, 12.7338627197, 12.7340744914, 12.7342862321, 12.7344979417, 12.7347096202, 12.7349212677, 12.7351328841, 12.7353444695, 12.7355560239, 12.7357675473, 12.7359790396, 12.736190501, 12.7364019313, 12.7366133307, 12.7368246991, 12.7370360365, 12.737247343, 12.7374586186, 12.7376698632, 12.7378810769, 12.7380922596, 12.7383034115, 12.7385145324, 12.7387256225, 12.7389366817, 12.73914771, 12.7393587074, 12.739569674, 12.7397806098, 12.7399915147, 12.7402023888, 12.740413232, 12.7406240445, 12.7408348261, 12.741045577, 12.7412562971, 12.7414669864, 12.7416776449, 12.7418882727, 12.7420988698, 12.7423094361, 12.7425199717, 12.7427304765, 12.7429409507, 12.7431513941, 12.7433618069, 12.7435721889, 12.7437825403, 12.7439928611, 12.7442031511, 12.7444134106, 12.7446236393, 12.7448338375, 12.745044005, 12.745254142, 12.7454642483, 12.745674324, 12.7458843691, 12.7460943837, 12.7463043677, 12.7465143211, 12.746724244, 12.7469341364, 12.7471439982, 12.7473538295, 12.7475636303, 12.7477734005, 12.7479831403, 12.7481928496, 12.7484025284, 12.7486121767, 12.7488217946, 12.749031382, 12.749240939, 12.7494504656, 12.7496599617, 12.7498694274, 12.7500788627, 12.7502882676, 12.7504976421, 12.7507069862, 12.7509163, 12.7511255834, 12.7513348364, 12.7515440591, 12.7517532514, 12.7519624135, 12.7521715452, 12.7523806466, 12.7525897176, 12.7527987584, 12.7530077689, 12.7532167492, 12.7534256991, 12.7536346189, 12.7538435083, 12.7540523675, 12.7542611965, 12.7544699953, 12.7546787638, 12.7548875022, 12.7550962103, 12.7553048883, 12.755513536, 12.7557221536, 12.7559307411, 12.7561392984, 12.7563478255, 12.7565563225, 12.7567647894, 12.7569732262, 12.7571816328, 12.7573900094, 12.7575983558, 12.7578066722, 12.7580149585, 12.7582232147, 12.7584314409, 12.758639637, 12.7588478031, 12.7590559392, 12.7592640452, 12.7594721212, 12.7596801672, 12.7598881832, 12.7600961692, 12.7603041253, 12.7605120514, 12.7607199475, 12.7609278136, 12.7611356498, 12.7613434561, 12.7615512324, 12.7617589789, 12.7619666954, 12.762174382, 12.7623820387, 12.7625896655, 12.7627972625, 12.7630048296, 12.7632123668, 12.7634198742, 12.7636273517, 12.7638347994, 12.7640422173, 12.7642496054, 12.7644569636, 12.7646642921, 12.7648715907, 12.7650788596, 12.7652860987, 12.7654933081, 12.7657004877, 12.7659076375, 12.7661147576, 12.766321848, 12.7665289086, 12.7667359395, 12.7669429408, 12.7671499123, 12.7673568541, 12.7675637663, 12.7677706488, 12.7679775016, 12.7681843248, 12.7683911183, 12.7685978822, 12.7688046165, 12.7690113211, 12.7692179961, 12.7694246416, 12.7696312574, 12.7698378436, 12.7700444003, 12.7702509274, 12.7704574249, 12.7706638929, 12.7708703314, 12.7710767403, 12.7712831196, 12.7714894695, 12.7716957899, 12.7719020807, 12.7721083421, 12.7723145739, 12.7725207763, 12.7727269492, 12.7729330927, 12.7731392067, 12.7733452913, 12.7735513464, 12.7737573721, 12.7739633684, 12.7741693353, 12.7743752728, 12.7745811809, 12.7747870596, 12.7749929089, 12.7751987289, 12.7754045195, 12.7756102808, 12.7758160127, 12.7760217153, 12.7762273885, 12.7764330324, 12.7766386471, 12.7768442324, 12.7770497884, 12.7772553152, 12.7774608127, 12.7776662809, 12.7778717198, 12.7780771295, 12.77828251, 12.7784878612, 12.7786931832, 12.778898476, 12.7791037396, 12.779308974, 12.7795141791, 12.7797193551, 12.779924502, 12.7801296196, 12.7803347081, 12.7805397675, 12.7807447977, 12.7809497987, 12.7811547707, 12.7813597135, 12.7815646272, 12.7817695119, 12.7819743674, 12.7821791938, 12.7823839912, 12.7825887595, 12.7827934987, 12.7829982089, 12.7832028901, 12.7834075422, 12.7836121653, 12.7838167593, 12.7840213244, 12.7842258604, 12.7844303675, 12.7846348456, 12.7848392947, 12.7850437148, 12.7852481059, 12.7854524682, 12.7856568014, 12.7858611058, 12.7860653812, 12.7862696276, 12.7864738452, 12.7866780339, 12.7868821937, 12.7870863246, 12.7872904266, 12.7874944997, 12.787698544, 12.7879025594, 12.788106546, 12.7883105037, 12.7885144326, 12.7887183327, 12.788922204, 12.7891260464, 12.7893298601, 12.789533645, 12.7897374011, 12.7899411284, 12.7901448269, 12.7903484968, 12.7905521378, 12.7907557501, 12.7909593337, 12.7911628886, 12.7913664147, 12.7915699121, 12.7917733809, 12.7919768209, 12.7921802323, 12.7923836149, 12.7925869689, 12.7927902943, 12.792993591, 12.7931968591, 12.7934000985, 12.7936033093, 12.7938064915, 12.794009645, 12.79421277, 12.7944158664, 12.7946189341, 12.7948219733, 12.795024984, 12.795227966, 12.7954309195, 12.7956338445, 12.7958367409, 12.7960396088, 12.7962424482, 12.7964452591, 12.7966480414, 12.7968507953, 12.7970535206, 12.7972562175, 12.7974588859, 12.7976615259, 12.7978641373, 12.7980667204, 12.7982692749, 12.7984718011, 12.7986742988, 12.7988767681, 12.799079209, 12.7992816215, 12.7994840056, 12.7996863613, 12.7998886887, 12.8000909876, 12.8002932582, 12.8004955005, 12.8006977144, 12.8008998999, 12.8011020571, 12.801304186, 12.8015062866, 12.8017083589, 12.8019104029, 12.8021124186, 12.802314406, 12.8025163651, 12.802718296, 12.8029201986, 12.8031220729, 12.803323919, 12.8035257369, 12.8037275266, 12.803929288, 12.8041310212, 12.8043327262, 12.804534403, 12.8047360516, 12.8049376721, 12.8051392643, 12.8053408284, 12.8055423644, 12.8057438722, 12.8059453518, 12.8061468033, 12.8063482267, 12.806549622, 12.8067509891, 12.8069523282, 12.8071536392, 12.8073549221, 12.8075561769, 12.8077574036, 12.8079586023, 12.8081597729, 12.8083609154, 12.80856203, 12.8087631165, 12.8089641749, 12.8091652054, 12.8093662078, 12.8095671823, 12.8097681287, 12.8099690472, 12.8101699377, 12.8103708002, 12.8105716347, 12.8107724413, 12.81097322, 12.8111739707, 12.8113746935, 12.8115753884, 12.8117760553, 12.8119766944, 12.8121773055, 12.8123778888, 12.8125784441, 12.8127789716, 12.8129794713, 12.813179943, 12.8133803869, 12.813580803, 12.8137811912, 12.8139815516, 12.8141818842, 12.814382189, 12.8145824659, 12.8147827151, 12.8149829364, 12.81518313, 12.8153832958, 12.8155834339, 12.8157835441, 12.8159836267, 12.8161836814, 12.8163837085, 12.8165837078, 12.8167836794, 12.8169836233, 12.8171835394, 12.8173834279, 12.8175832887, 12.8177831218, 12.8179829272, 12.8181827049, 12.818382455, 12.8185821775, 12.8187818723, 12.8189815394, 12.819181179, 12.8193807909, 12.8195803752, 12.8197799318, 12.8199794609, 12.8201789624, 12.8203784363, 12.8205778827, 12.8207773014, 12.8209766926, 12.8211760563, 12.8213753924, 12.8215747009, 12.821773982, 12.8219732355, 12.8221724615, 12.82237166, 12.822570831, 12.8227699744, 12.8229690905, 12.823168179, 12.82336724, 12.8235662736, 12.8237652798, 12.8239642585, 12.8241632097, 12.8243621336, 12.82456103, 12.824759899, 12.8249587405, 12.8251575547, 12.8253563415, 12.8255551009, 12.8257538329, 12.8259525375, 12.8261512148, 12.8263498647, 12.8265484873, 12.8267470825, 12.8269456504, 12.827144191, 12.8273427042, 12.8275411902, 12.8277396488, 12.8279380801, 12.8281364842, 12.828334861, 12.8285332105, 12.8287315327, 12.8289298277, 12.8291280954, 12.8293263358, 12.8295245491, 12.8297227351, 12.8299208939, 12.8301190254, 12.8303171298, 12.830515207, 12.830713257, 12.8309112797, 12.8311092754, 12.8313072438, 12.8315051851, 12.8317030992, 12.8319009862, 12.832098846, 12.8322966787, 12.8324944843, 12.8326922628, 12.8328900142, 12.8330877384, 12.8332854356, 12.8334831057, 12.8336807487, 12.8338783646, 12.8340759534, 12.8342735152, 12.83447105, 12.8346685577, 12.8348660384, 12.835063492, 12.8352609186, 12.8354583182, 12.8356556908, 12.8358530364, 12.8360503551, 12.8362476467, 12.8364449113, 12.836642149, 12.8368393597, 12.8370365435, 12.8372337003, 12.8374308302, 12.8376279332, 12.8378250092, 12.8380220583, 12.8382190805, 12.8384160758, 12.8386130442, 12.8388099857, 12.8390069003, 12.8392037881, 12.839400649, 12.839597483, 12.8397942902, 12.8399910705, 12.840187824, 12.8403845507, 12.8405812506, 12.8407779236, 12.8409745698, 12.8411711892, 12.8413677819, 12.8415643477, 12.8417608868, 12.8419573991, 12.8421538846, 12.8423503434, 12.8425467754, 12.8427431807, 12.8429395593, 12.8431359111, 12.8433322362, 12.8435285346, 12.8437248063, 12.8439210513, 12.8441172696, 12.8443134612, 12.8445096261, 12.8447057644, 12.844901876, 12.845097961, 12.8452940193, 12.8454900509, 12.845686056, 12.8458820344, 12.8460779862, 12.8462739113, 12.8464698099, 12.8466656819, 12.8468615273, 12.8470573461, 12.8472531383, 12.847448904, 12.8476446431, 12.8478403556, 12.8480360416, 12.8482317011, 12.848427334, 12.8486229404, 12.8488185203, 12.8490140737, 12.8492096006, 12.8494051009, 12.8496005748, 12.8497960222, 12.8499914432, 12.8501868376, 12.8503822057, 12.8505775472, 12.8507728623, 12.850968151, 12.8511634132, 12.851358649, 12.8515538584, 12.8517490414, 12.851944198, 12.8521393282, 12.852334432, 12.8525295094, 12.8527245604, 12.8529195851, 12.8531145834, 12.8533095554, 12.853504501, 12.8536994203, 12.8538943132, 12.8540891799, 12.8542840202, 12.8544788342, 12.8546736219, 12.8548683833, 12.8550631184, 12.8552578272, 12.8554525097, 12.855647166, 12.855841796, 12.8560363998, 12.8562309773, 12.8564255286, 12.8566200537, 12.8568145525, 12.8570090251, 12.8572034715, 12.8573978917, 12.8575922857, 12.8577866535, 12.8579809951, 12.8581753106, 12.8583695999, 12.858563863, 12.8587580999, 12.8589523108, 12.8591464954, 12.859340654, 12.8595347864, 12.8597288927, 12.8599229729, 12.8601170269, 12.8603110549, 12.8605050568, 12.8606990326, 12.8608929823, 12.861086906, 12.8612808036, 12.8614746751, 12.8616685206, 12.8618623401, 12.8620561335, 12.8622499009, 12.8624436422, 12.8626373576, 12.8628310469, 12.8630247102, 12.8632183476, 12.8634119589, 12.8636055443, 12.8637991037, 12.8639926372, 12.8641861447, 12.8643796262, 12.8645730818, 12.8647665114, 12.8649599151, 12.8651532929, 12.8653466448, 12.8655399708, 12.8657332709, 12.865926545, 12.8661197933, 12.8663130157, 12.8665062122, 12.8666993829, 12.8668925277, 12.8670856466, 12.8672787397, 12.867471807, 12.8676648484, 12.867857864, 12.8680508537, 12.8682438177, 12.8684367559, 12.8686296682, 12.8688225548, 12.8690154156, 12.8692082506, 12.8694010598, 12.8695938432, 12.8697866009, 12.8699793329, 12.8701720391, 12.8703647196, 12.8705573743, 12.8707500033, 12.8709426066, 12.8711351842, 12.8713277361, 12.8715202623, 12.8717127628, 12.8719052377, 12.8720976868, 12.8722901103, 12.8724825081, 12.8726748803, 12.8728672268, 12.8730595477, 12.8732518429, 12.8734441125, 12.8736363565, 12.8738285749, 12.8740207677, 12.8742129348, 12.8744050764, 12.8745971924, 12.8747892828, 12.8749813477, 12.8751733869, 12.8753654006, 12.8755573888, 12.8757493514, 12.8759412885, 12.8761332, 12.8763250861, 12.8765169466, 12.8767087816, 12.876900591, 12.877092375, 12.8772841335, 12.8774758665, 12.8776675741, 12.8778592561, 12.8780509127, 12.8782425439, 12.8784341496, 12.8786257298, 12.8788172846, 12.879008814, 12.8792003179, 12.8793917965, 12.8795832496, 12.8797746773, 12.8799660797, 12.8801574566, 12.8803488082, 12.8805401343, 12.8807314351, 12.8809227106, 12.8811139607, 12.8813051854, 12.8814963848, 12.8816875589, 12.8818787076, 12.882069831, 12.8822609291, 12.8824520019, 12.8826430494, 12.8828340715, 12.8830250684, 12.8832160401, 12.8834069864, 12.8835979075, 12.8837888033, 12.8839796738, 12.8841705191, 12.8843613392, 12.884552134, 12.8847429036, 12.8849336479, 12.8851243671, 12.885315061, 12.8855057298, 12.8856963733, 12.8858869917, 12.8860775849, 12.8862681529, 12.8864586957, 12.8866492134, 12.8868397059, 12.8870301732, 12.8872206155, 12.8874110326, 12.8876014245, 12.8877917913, 12.8879821331, 12.8881724497, 12.8883627412, 12.8885530076, 12.8887432489, 12.8889334651, 12.8891236563, 12.8893138224, 12.8895039634, 12.8896940794, 12.8898841703, 12.8900742362, 12.890264277, 12.8904542928, 12.8906442836, 12.8908342494, 12.8910241901, 12.8912141059, 12.8914039967, 12.8915938624, 12.8917837032, 12.891973519, 12.8921633099, 12.8923530757, 12.8925428166, 12.8927325326, 12.8929222236, 12.8931118897, 12.8933015309, 12.8934911471, 12.8936807384, 12.8938703048, 12.8940598463, 12.8942493629, 12.8944388546, 12.8946283214, 12.8948177633, 12.8950071804, 12.8951965726, 12.8953859399, 12.8955752824, 12.8957646, 12.8959538928, 12.8961431608, 12.8963324039, 12.8965216222, 12.8967108157, 12.8968999844, 12.8970891283, 12.8972782474, 12.8974673417, 12.8976564113, 12.897845456, 12.898034476, 12.8982234712, 12.8984124417, 12.8986013874, 12.8987903084, 12.8989792046, 12.8991680761, 12.8993569229, 12.899545745, 12.8997345424, 12.899923315, 12.900112063, 12.9003007862, 12.9004894848, 12.9006781587, 12.900866808, 12.9010554326, 12.9012440325, 12.9014326077, 12.9016211583, 12.9018096843, 12.9019981857, 12.9021866624, 12.9023751145, 12.902563542, 12.9027519449, 12.9029403231, 12.9031286768, 12.9033170059, 12.9035053104, 12.9036935904, 12.9038818457, 12.9040700765, 12.9042582828, 12.9044464645, 12.9046346217, 12.9048227543, 12.9050108624, 12.905198946, 12.905387005, 12.9055750396, 12.9057630496, 12.9059510351, 12.9061389962, 12.9063269328, 12.9065148448, 12.9067027325, 12.9068905956, 12.9070784343, 12.9072662485, 12.9074540383, 12.9076418037, 12.9078295446, 12.9080172611, 12.9082049531, 12.9083926208, 12.908580264, 12.9087678828, 12.9089554773, 12.9091430473, 12.909330593, 12.9095181143, 12.9097056112, 12.9098930838, 12.910080532, 12.9102679558, 12.9104553553, 12.9106427305, 12.9108300813, 12.9110174078, 12.91120471, 12.9113919878, 12.9115792414, 12.9117664707, 12.9119536756, 12.9121408563, 12.9123280127, 12.9125151448, 12.9127022526, 12.9128893362, 12.9130763956, 12.9132634306, 12.9134504415, 12.913637428, 12.9138243904, 12.9140113285, 12.9141982425, 12.9143851322, 12.9145719976, 12.9147588389, 12.914945656, 12.915132449, 12.9153192177, 12.9155059622, 12.9156926826, 12.9158793788, 12.9160660509, 12.9162526988, 12.9164393226, 12.9166259222, 12.9168124977, 12.9169990491, 12.9171855763, 12.9173720795, 12.9175585585, 12.9177450134, 12.9179314443, 12.918117851, 12.9183042337, 12.9184905923, 12.9186769268, 12.9188632373, 12.9190495237, 12.919235786, 12.9194220243, 12.9196082386, 12.9197944288, 12.919980595, 12.9201667372, 12.9203528554, 12.9205389496, 12.9207250198, 12.9209110659, 12.9210970881, 12.9212830863, 12.9214690605, 12.9216550108, 12.9218409371, 12.9220268394, 12.9222127178, 12.9223985722, 12.9225844027, 12.9227702093, 12.9229559919, 12.9231417506, 12.9233274854, 12.9235131963, 12.9236988833, 12.9238845464, 12.9240701856, 12.9242558009, 12.9244413923, 12.9246269599, 12.9248125036, 12.9249980234, 12.9251835194, 12.9253689916, 12.9255544399, 12.9257398643, 12.925925265, 12.9261106418, 12.9262959948, 12.926481324, 12.9266666293, 12.9268519109, 12.9270371687, 12.9272224027, 12.9274076129, 12.9275927994, 12.9277779621, 12.927963101, 12.9281482162, 12.9283333076, 12.9285183753, 12.9287034192, 12.9288884394, 12.9290734359, 12.9292584086, 12.9294433577, 12.929628283, 12.9298131847, 12.9299980626, 12.9301829169, 12.9303677474, 12.9305525543, 12.9307373376, 12.9309220971, 12.931106833, 12.9312915453, 12.9314762339, 12.9316608989, 12.9318455402, 12.9320301579, 12.932214752, 12.9323993224, 12.9325838693, 12.9327683925, 12.9329528922, 12.9331373683, 12.9333218207, 12.9335062496, 12.933690655, 12.9338750367, 12.9340593949, 12.9342437295, 12.9344280406, 12.9346123282, 12.9347965922, 12.9349808327, 12.9351650496, 12.935349243, 12.935533413, 12.9357175594, 12.9359016823, 12.9360857817, 12.9362698576, 12.93645391, 12.936637939, 12.9368219445, 12.9370059265, 12.9371898851, 12.9373738202, 12.9375577319, 12.9377416201, 12.9379254849, 12.9381093262, 12.9382931442, 12.9384769387, 12.9386607098, 12.9388444575, 12.9390281818, 12.9392118827, 12.9393955602, 12.9395792143, 12.9397628451, 12.9399464525, 12.9401300365, 12.9403135971, 12.9404971345, 12.9406806484, 12.940864139, 12.9410476063, 12.9412310503, 12.9414144709, 12.9415978683, 12.9417812423, 12.941964593, 12.9421479204, 12.9423312245, 12.9425145053, 12.9426977629, 12.9428809972, 12.9430642082, 12.9432473959, 12.9434305604, 12.9436137016, 12.9437968196, 12.9439799143, 12.9441629859, 12.9443460341, 12.9445290592, 12.944712061, 12.9448950397, 12.9450779951, 12.9452609273, 12.9454438364, 12.9456267222, 12.9458095849, 12.9459924244, 12.9461752407, 12.9463580339, 12.9465408039, 12.9467235507, 12.9469062745, 12.947088975, 12.9472716525, 12.9474543068, 12.947636938, 12.947819546, 12.948002131, 12.9481846928, 12.9483672316, 12.9485497472, 12.9487322398, 12.9489147093, 12.9490971557, 12.9492795791, 12.9494619794, 12.9496443566, 12.9498267108, 12.9500090419, 12.95019135, 12.950373635, 12.950555897, 12.950738136, 12.950920352, 12.951102545, 12.951284715, 12.9514668619, 12.9516489859, 12.9518310869, 12.9520131649, 12.9521952199, 12.952377252, 12.9525592611, 12.9527412472, 12.9529232104, 12.9531051506, 12.9532870679, 12.9534689622, 12.9536508336, 12.9538326821, 12.9540145077, 12.9541963104, 12.9543780901, 12.954559847, 12.954741581, 12.954923292, 12.9551049802, 12.9552866455, 12.955468288, 12.9556499075, 12.9558315042, 12.9560130781, 12.9561946291, 12.9563761572, 12.9565576626, 12.9567391451, 12.9569206047, 12.9571020416, 12.9572834556, 12.9574648468, 12.9576462152, 12.9578275608, 12.9580088837, 12.9581901837, 12.9583714609, 12.9585527154, 12.9587339471, 12.9589151561, 12.9590963423, 12.9592775057, 12.9594586464, 12.9596397644, 12.9598208596, 12.9600019321, 12.9601829818, 12.9603640089, 12.9605450132, 12.9607259948, 12.9609069538, 12.96108789, 12.9612688035, 12.9614496944, 12.9616305626, 12.9618114081, 12.9619922309, 12.9621730311, 12.9623538086, 12.9625345635, 12.9627152957, 12.9628960053, 12.9630766923, 12.9632573566, 12.9634379983, 12.9636186174, 12.9637992139, 12.9639797878, 12.9641603391, 12.9643408678, 12.9645213739, 12.9647018574, 12.9648823184, 12.9650627567, 12.9652431726, 12.9654235658, 12.9656039365, 12.9657842847, 12.9659646103, 12.9661449133, 12.9663251939, 12.9665054519, 12.9666856874, 12.9668659004, 12.9670460909, 12.9672262588, 12.9674064043, 12.9675865273, 12.9677666278, 12.9679467058, 12.9681267614, 12.9683067944, 12.968486805, 12.9686667932, 12.9688467589, 12.9690267022, 12.969206623, 12.9693865213, 12.9695663973, 12.9697462508, 12.9699260819, 12.9701058906, 12.9702856769, 12.9704654408, 12.9706451823, 12.9708249014, 12.9710045981, 12.9711842724, 12.9713639244, 12.971543554, 12.9717231612, 12.971902746, 12.9720823086, 12.9722618487, 12.9724413666, 12.9726208621, 12.9728003352, 12.9729797861, 12.9731592146, 12.9733386208, 12.9735180047, 12.9736973663, 12.9738767056, 12.9740560226, 12.9742353174, 12.9744145898, 12.97459384, 12.9747730679, 12.9749522735, 12.9751314569, 12.9753106181, 12.9754897569, 12.9756688736, 12.975847968, 12.9760270402, 12.9762060901, 12.9763851179, 12.9765641234, 12.9767431067, 12.9769220679, 12.9771010068, 12.9772799235, 12.977458818, 12.9776376904, 12.9778165406, 12.9779953686, 12.9781741745, 12.9783529582, 12.9785317197, 12.9787104591, 12.9788891764, 12.9790678715, 12.9792465445, 12.9794251953, 12.9796038241, 12.9797824307, 12.9799610152, 12.9801395776, 12.980318118, 12.9804966362, 12.9806751323, 12.9808536064, 12.9810320584, 12.9812104883, 12.9813888961, 12.9815672819, 12.9817456456, 12.9819239873, 12.982102307, 12.9822806046, 12.9824588801, 12.9826371337, 12.9828153652, 12.9829935747, 12.9831717622, 12.9833499277, 12.9835280712, 12.9837061927, 12.9838842922, 12.9840623697, 12.9842404252, 12.9844184588, 12.9845964704, 12.98477446, 12.9849524277, 12.9851303735, 12.9853082973, 12.9854861991, 12.985664079, 12.985841937, 12.9860197731, 12.9861975872, 12.9863753794, 12.9865531498, 12.9867308982, 12.9869086247, 12.9870863293, 12.9872640121, 12.9874416729, 12.9876193119, 12.987796929, 12.9879745243, 12.9881520977, 12.9883296492, 12.9885071789, 12.9886846868, 12.9888621728, 12.989039637, 12.9892170793, 12.9893944998, 12.9895718986, 12.9897492755, 12.9899266306, 12.9901039639, 12.9902812754, 12.9904585651, 12.990635833, 12.9908130792, 12.9909903035, 12.9911675061, 12.991344687, 12.9915218461, 12.9916989834, 12.991876099, 12.9920531929, 12.992230265, 12.9924073153, 12.992584344, 12.9927613509, 12.9929383362, 12.9931152997, 12.9932922415, 12.9934691616, 12.99364606, 12.9938229367, 12.9939997918, 12.9941766252, 12.9943534369, 12.9945302269, 12.9947069953, 12.994883742, 12.995060467, 12.9952371704, 12.9954138522, 12.9955905124, 12.9957671509, 12.9959437678, 12.996120363, 12.9962969367, 12.9964734887, 12.9966500192, 12.996826528, 12.9970030153, 12.9971794809, 12.997355925, 12.9975323475, 12.9977087485, 12.9978851278, 12.9980614856, 12.9982378219, 12.9984141366, 12.9985904297, 12.9987667014, 12.9989429514, 12.99911918, 12.999295387, 12.9994715725, 12.9996477365, 12.999823879, 13.0, 13.0001760995, 13.0003521775, 13.000528234, 13.000704269, 13.0008802826, 13.0010562746, 13.0012322452, 13.0014081944, 13.0015841221, 13.0017600283, 13.0019359131, 13.0021117765, 13.0022876184, 13.0024634389, 13.002639238, 13.0028150156, 13.0029907718, 13.0031665067, 13.0033422201, 13.0035179121, 13.0036935827, 13.003869232, 13.0040448598, 13.0042204663, 13.0043960514, 13.0045716152, 13.0047471575, 13.0049226786, 13.0050981782, 13.0052736566, 13.0054491135, 13.0056245492, 13.0057999635, 13.0059753565, 13.0061507282, 13.0063260785, 13.0065014076, 13.0066767153, 13.0068520017, 13.0070272669, 13.0072025107, 13.0073777333, 13.0075529346, 13.0077281146, 13.0079032734, 13.0080784109, 13.0082535271, 13.0084286221, 13.0086036958, 13.0087787483, 13.0089537795, 13.0091287895, 13.0093037783, 13.0094787459, 13.0096536922, 13.0098286174, 13.0100035213, 13.010178404, 13.0103532655, 13.0105281059, 13.010702925, 13.010877723, 13.0110524998, 13.0112272554, 13.0114019899, 13.0115767032, 13.0117513953, 13.0119260663, 13.0121007162, 13.0122753449, 13.0124499524, 13.0126245389, 13.0127991042, 13.0129736484, 13.0131481715, 13.0133226734, 13.0134971543, 13.0136716141, 13.0138460527, 13.0140204703, 13.0141948668, 13.0143692422, 13.0145435966, 13.0147179299, 13.0148922421, 13.0150665332, 13.0152408033, 13.0154150524, 13.0155892804, 13.0157634874, 13.0159376733, 13.0161118382, 13.0162859821, 13.016460105, 13.0166342068, 13.0168082877, 13.0169823475, 13.0171563864, 13.0173304042, 13.0175044011, 13.017678377, 13.0178523319, 13.0180262658, 13.0182001788, 13.0183740708, 13.0185479419, 13.018721792, 13.0188956211, 13.0190694293, 13.0192432166, 13.0194169829, 13.0195907284, 13.0197644528, 13.0199381564, 13.0201118391, 13.0202855008, 13.0204591417, 13.0206327617, 13.0208063607, 13.0209799389, 13.0211534962, 13.0213270326, 13.0215005482, 13.0216740429, 13.0218475167, 13.0220209696, 13.0221944018, 13.022367813, 13.0225412035, 13.022714573, 13.0228879218, 13.0230612497, 13.0232345568, 13.0234078431, 13.0235811086, 13.0237543533, 13.0239275772, 13.0241007803, 13.0242739625, 13.024447124, 13.0246202648, 13.0247933847, 13.0249664839, 13.0251395623, 13.0253126199, 13.0254856568, 13.0256586729, 13.0258316683, 13.026004643, 13.0261775969, 13.0263505301, 13.0265234425, 13.0266963342, 13.0268692053, 13.0270420556, 13.0272148852, 13.0273876941, 13.0275604822, 13.0277332498, 13.0279059966, 13.0280787227, 13.0282514282, 13.0284241129, 13.0285967771, 13.0287694205, 13.0289420433, 13.0291146455, 13.029287227, 13.0294597878, 13.029632328, 13.0298048476, 13.0299773466, 13.0301498249, 13.0303222826, 13.0304947197, 13.0306671362, 13.0308395321, 13.0310119074, 13.0311842621, 13.0313565963, 13.0315289098, 13.0317012027, 13.0318734751, 13.0320457269, 13.0322179582, 13.0323901689, 13.032562359, 13.0327345286, 13.0329066776, 13.0330788061, 13.0332509141, 13.0334230015, 13.0335950685, 13.0337671148, 13.0339391407, 13.0341111461, 13.034283131, 13.0344550953, 13.0346270392, 13.0347989626, 13.0349708655, 13.0351427479, 13.0353146098, 13.0354864513, 13.0356582723, 13.0358300728, 13.0360018529, 13.0361736126, 13.0363453517, 13.0365170705, 13.0366887688, 13.0368604467, 13.0370321041, 13.0372037412, 13.0373753578, 13.037546954, 13.0377185298, 13.0378900851, 13.0380616201, 13.0382331347, 13.0384046289, 13.0385761028, 13.0387475562, 13.0389189893, 13.039090402, 13.0392617943, 13.0394331663, 13.039604518, 13.0397758492, 13.0399471602, 13.0401184508, 13.040289721, 13.040460971, 13.0406322006, 13.0408034098, 13.0409745988, 13.0411457675, 13.0413169158, 13.0414880439, 13.0416591516, 13.0418302391, 13.0420013063, 13.0421723532, 13.0423433798, 13.0425143861, 13.0426853722, 13.042856338, 13.0430272836, 13.0431982089, 13.043369114, 13.0435399988, 13.0437108633, 13.0438817077, 13.0440525318, 13.0442233357, 13.0443941194, 13.0445648828, 13.0447356261, 13.0449063491, 13.0450770519, 13.0452477346, 13.045418397, 13.0455890393, 13.0457596614, 13.0459302633, 13.046100845, 13.0462714066, 13.046441948, 13.0466124693, 13.0467829704, 13.0469534513, 13.0471239121, 13.0472943528, 13.0474647733, 13.0476351737, 13.047805554, 13.0479759142, 13.0481462542, 13.0483165742, 13.048486874, 13.0486571537, 13.0488274134, 13.0489976529, 13.0491678724, 13.0493380718, 13.0495082511, 13.0496784103, 13.0498485495, 13.0500186686, 13.0501887676, 13.0503588466, 13.0505289055, 13.0506989444, 13.0508689633, 13.0510389621, 13.0512089409, 13.0513788997, 13.0515488384, 13.0517187572, 13.0518886559, 13.0520585346, 13.0522283933, 13.0523982321, 13.0525680508, 13.0527378495, 13.0529076283, 13.0530773871, 13.0532471259, 13.0534168448, 13.0535865436, 13.0537562226, 13.0539258815, 13.0540955206, 13.0542651396, 13.0544347388, 13.054604318, 13.0547738772, 13.0549434166, 13.055112936, 13.0552824355, 13.0554519151, 13.0556213748, 13.0557908146, 13.0559602345, 13.0561296344, 13.0562990146, 13.0564683748, 13.0566377151, 13.0568070356, 13.0569763362, 13.0571456169, 13.0573148778, 13.0574841188, 13.05765334, 13.0578225413, 13.0579917228, 13.0581608844, 13.0583300262, 13.0584991482, 13.0586682503, 13.0588373327, 13.0590063952, 13.0591754379, 13.0593444608, 13.0595134639, 13.0596824472, 13.0598514108, 13.0600203545, 13.0601892785, 13.0603581826, 13.060527067, 13.0606959317, 13.0608647766, 13.0610336017, 13.061202407, 13.0613711927, 13.0615399585, 13.0617087047, 13.0618774311, 13.0620461377, 13.0622148247, 13.0623834919, 13.0625521394, 13.0627207672, 13.0628893752, 13.0630579636, 13.0632265323, 13.0633950813, 13.0635636106, 13.0637321202, 13.0639006101, 13.0640690804, 13.064237531, 13.0644059619, 13.0645743731, 13.0647427648, 13.0649111367, 13.065079489, 13.0652478217, 13.0654161347, 13.0655844281, 13.0657527018, 13.0659209559, 13.0660891905, 13.0662574054, 13.0664256006, 13.0665937763, 13.0667619324, 13.0669300689, 13.0670981857, 13.067266283, 13.0674343608, 13.0676024189, 13.0677704574, 13.0679384764, 13.0681064759, 13.0682744557, 13.068442416, 13.0686103568, 13.068778278, 13.0689461796, 13.0691140618, 13.0692819244, 13.0694497674, 13.069617591, 13.069785395, 13.0699531795, 13.0701209445, 13.07028869, 13.0704564159, 13.0706241224, 13.0707918094, 13.0709594769, 13.0711271249, 13.0712947535, 13.0714623626, 13.0716299522, 13.0717975223, 13.071965073, 13.0721326042, 13.0723001159, 13.0724676082, 13.0726350811, 13.0728025345, 13.0729699685, 13.0731373831, 13.0733047783, 13.073472154, 13.0736395103, 13.0738068472, 13.0739741647, 13.0741414628, 13.0743087414, 13.0744760007, 13.0746432406, 13.0748104612, 13.0749776623, 13.0751448441, 13.0753120065, 13.0754791495, 13.0756462732, 13.0758133775, 13.0759804624, 13.076147528, 13.0763145743, 13.0764816012, 13.0766486088, 13.0768155971, 13.076982566, 13.0771495156, 13.0773164459, 13.0774833569, 13.0776502485, 13.0778171209, 13.077983974, 13.0781508077, 13.0783176222, 13.0784844174, 13.0786511933, 13.07881795, 13.0789846873, 13.0791514054, 13.0793181043, 13.0794847838, 13.0796514441, 13.0798180852, 13.079984707, 13.0801513096, 13.080317893, 13.0804844571, 13.0806510019, 13.0808175276, 13.080984034, 13.0811505213, 13.0813169893, 13.0814834381, 13.0816498677, 13.0818162781, 13.0819826693, 13.0821490414, 13.0823153942, 13.0824817279, 13.0826480424, 13.0828143377, 13.0829806138, 13.0831468708, 13.0833131087, 13.0834793273, 13.0836455269, 13.0838117073, 13.0839778685, 13.0841440106, 13.0843101336, 13.0844762375, 13.0846423222, 13.0848083878, 13.0849744343, 13.0851404617, 13.08530647, 13.0854724592, 13.0856384293, 13.0858043803, 13.0859703122, 13.086136225, 13.0863021188, 13.0864679935, 13.0866338491, 13.0867996856, 13.0869655031, 13.0871313015, 13.0872970809, 13.0874628413, 13.0876285825, 13.0877943048, 13.087960008, 13.0881256922, 13.0882913573, 13.0884570035, 13.0886226306, 13.0887882387, 13.0889538278, 13.0891193979, 13.089284949, 13.0894504811, 13.0896159942, 13.0897814884, 13.0899469635, 13.0901124197, 13.0902778569, 13.0904432751, 13.0906086743, 13.0907740546, 13.090939416, 13.0911047584, 13.0912700818, 13.0914353863, 13.0916006719, 13.0917659385, 13.0919311862, 13.092096415, 13.0922616248, 13.0924268158, 13.0925919878, 13.0927571409, 13.0929222751, 13.0930873904, 13.0932524869, 13.0934175644, 13.093582623, 13.0937476628, 13.0939126837, 13.0940776857, 13.0942426688, 13.0944076331, 13.0945725785, 13.094737505, 13.0949024128, 13.0950673016, 13.0952321716, 13.0953970228, 13.0955618551, 13.0957266686, 13.0958914633, 13.0960562392, 13.0962209962, 13.0963857345, 13.0965504539, 13.0967151545, 13.0968798363, 13.0970444993, 13.0972091436, 13.097373769, 13.0975383756, 13.0977029635, 13.0978675326, 13.098032083, 13.0981966145, 13.0983611273, 13.0985256214, 13.0986900967, 13.0988545532, 13.099018991, 13.0991834101, 13.0993478104, 13.099512192, 13.0996765549, 13.099840899, 13.1000052244, 13.1001695311, 13.1003338191, 13.1004980884, 13.100662339, 13.1008265709, 13.1009907841, 13.1011549786, 13.1013191544, 13.1014833116, 13.10164745, 13.1018115698, 13.1019756709, 13.1021397534, 13.1023038172, 13.1024678624, 13.1026318889, 13.1027958967, 13.1029598859, 13.1031238565, 13.1032878084, 13.1034517417, 13.1036156564, 13.1037795525, 13.1039434299, 13.1041072887, 13.1042711289, 13.1044349506, 13.1045987536, 13.104762538, 13.1049263038, 13.105090051, 13.1052537797, 13.1054174898, 13.1055811813, 13.1057448542, 13.1059085086, 13.1060721444, 13.1062357616, 13.1063993603, 13.1065629404, 13.106726502, 13.1068900451, 13.1070535696, 13.1072170756, 13.107380563, 13.107544032, 13.1077074824, 13.1078709143, 13.1080343277, 13.1081977225, 13.1083610989, 13.1085244568, 13.1086877962, 13.108851117, 13.1090144194, 13.1091777034, 13.1093409688, 13.1095042158, 13.1096674443, 13.1098306543, 13.1099938458, 13.110157019, 13.1103201736, 13.1104833098, 13.1106464276, 13.1108095269, 13.1109726078, 13.1111356702, 13.1112987143, 13.1114617399, 13.111624747, 13.1117877358, 13.1119507062, 13.1121136581, 13.1122765916, 13.1124395068, 13.1126024035, 13.1127652819, 13.1129281419, 13.1130909834, 13.1132538067, 13.1134166115, 13.113579398, 13.113742166, 13.1139049158, 13.1140676472, 13.1142303602, 13.1143930549, 13.1145557312, 13.1147183892, 13.1148810288, 13.1150436502, 13.1152062532, 13.1153688378, 13.1155314042, 13.1156939522, 13.1158564819, 13.1160189933, 13.1161814864, 13.1163439612, 13.1165064177, 13.116668856, 13.1168312759, 13.1169936775, 13.1171560609, 13.117318426, 13.1174807728, 13.1176431014, 13.1178054117, 13.1179677037, 13.1181299775, 13.118292233, 13.1184544703, 13.1186166894, 13.1187788902, 13.1189410727, 13.1191032371, 13.1192653832, 13.1194275111, 13.1195896207, 13.1197517122, 13.1199137855, 13.1200758405, 13.1202378773, 13.120399896, 13.1205618964, 13.1207238787, 13.1208858428, 13.1210477887, 13.1212097164, 13.121371626, 13.1215335173, 13.1216953906, 13.1218572456, 13.1220190825, 13.1221809013, 13.1223427019, 13.1225044843, 13.1226662486, 13.1228279948, 13.1229897229, 13.1231514328, 13.1233131246, 13.1234747982, 13.1236364538, 13.1237980913, 13.1239597106, 13.1241213118, 13.124282895, 13.12444446, 13.124606007, 13.1247675358, 13.1249290466, 13.1250905393, 13.1252520139, 13.1254134705, 13.125574909, 13.1257363294, 13.1258977318, 13.1260591161, 13.1262204823, 13.1263818305, 13.1265431607, 13.1267044728, 13.1268657669, 13.127027043, 13.127188301, 13.1273495411, 13.1275107631, 13.127671967, 13.127833153, 13.127994321, 13.1281554709, 13.1283166029, 13.1284777169, 13.1286388129, 13.1287998908, 13.1289609509, 13.1291219929, 13.1292830169, 13.129444023, 13.1296050112, 13.1297659813, 13.1299269335, 13.1300878678, 13.1302487841, 13.1304096824, 13.1305705628, 13.1307314253, 13.1308922698, 13.1310530964, 13.1312139051, 13.1313746958, 13.1315354687, 13.1316962236, 13.1318569606, 13.1320176797, 13.1321783809, 13.1323390642, 13.1324997296, 13.1326603771, 13.1328210068, 13.1329816185, 13.1331422124, 13.1333027884, 13.1334633465, 13.1336238868, 13.1337844092, 13.1339449137, 13.1341054004, 13.1342658692, 13.1344263202, 13.1345867534, 13.1347471687, 13.1349075661, 13.1350679458, 13.1352283076, 13.1353886516, 13.1355489777, 13.1357092861, 13.1358695766, 13.1360298494, 13.1361901043, 13.1363503415, 13.1365105608, 13.1366707623, 13.1368309461, 13.1369911121, 13.1371512603, 13.1373113907, 13.1374715034, 13.1376315982, 13.1377916754, 13.1379517347, 13.1381117763, 13.1382718002, 13.1384318063, 13.1385917946, 13.1387517653, 13.1389117181, 13.1390716533, 13.1392315707, 13.1393914704, 13.1395513524, 13.1397112167, 13.1398710632, 13.1400308921, 13.1401907032, 13.1403504966, 13.1405102724, 13.1406700304, 13.1408297708, 13.1409894934, 13.1411491984, 13.1413088858, 13.1414685554, 13.1416282074, 13.1417878417, 13.1419474583, 13.1421070573, 13.1422666386, 13.1424262023, 13.1425857484, 13.1427452768, 13.1429047875, 13.1430642806, 13.1432237561, 13.143383214, 13.1435426542, 13.1437020769, 13.1438614819, 13.1440208693, 13.1441802391, 13.1443395912, 13.1444989258, 13.1446582428, 13.1448175422, 13.1449768241, 13.1451360883, 13.1452953349, 13.145454564, 13.1456137755, 13.1457729694, 13.1459321458, 13.1460913046, 13.1462504459, 13.1464095696, 13.1465686757, 13.1467277643, 13.1468868354, 13.1470458889, 13.1472049249, 13.1473639434, 13.1475229444, 13.1476819278, 13.1478408937, 13.1479998421, 13.1481587729, 13.1483176863, 13.1484765822, 13.1486354605, 13.1487943214, 13.1489531648, 13.1491119907, 13.1492707991, 13.1494295901, 13.1495883635, 13.1497471195, 13.149905858, 13.1500645791, 13.1502232827, 13.1503819688, 13.1505406375, 13.1506992887, 13.1508579225, 13.1510165389, 13.1511751378, 13.1513337193, 13.1514922833, 13.15165083, 13.1518093592, 13.151967871, 13.1521263653, 13.1522848423, 13.1524433019, 13.152601744, 13.1527601688, 13.1529185761, 13.1530769661, 13.1532353387, 13.1533936939, 13.1535520317, 13.1537103522, 13.1538686552, 13.1540269409, 13.1541852093, 13.1543434602, 13.1545016939, 13.1546599101, 13.1548181091, 13.1549762906, 13.1551344549, 13.1552926018, 13.1554507313, 13.1556088435, 13.1557669384, 13.155925016, 13.1560830763, 13.1562411192, 13.1563991449, 13.1565571532, 13.1567151442, 13.1568731179, 13.1570310744, 13.1571890135, 13.1573469354, 13.1575048399, 13.1576627272, 13.1578205972, 13.1579784499, 13.1581362854, 13.1582941036, 13.1584519045, 13.1586096882, 13.1587674546, 13.1589252038, 13.1590829357, 13.1592406504, 13.1593983479, 13.1595560281, 13.159713691, 13.1598713368, 13.1600289653, 13.1601865766, 13.1603441707, 13.1605017476, 13.1606593072, 13.1608168497, 13.1609743749, 13.161131883, 13.1612893738, 13.1614468475, 13.161604304, 13.1617617433, 13.1619191654, 13.1620765704, 13.1622339581, 13.1623913288, 13.1625486822, 13.1627060185, 13.1628633376, 13.1630206396, 13.1631779244, 13.1633351921, 13.1634924426, 13.163649676, 13.1638068923, 13.1639640914, 13.1641212734, 13.1642784383, 13.1644355861, 13.1645927167, 13.1647498302, 13.1649069267, 13.165064006, 13.1652210682, 13.1653781133, 13.1655351414, 13.1656921523, 13.1658491462, 13.166006123, 13.1661630826, 13.1663200253, 13.1664769508, 13.1666338593, 13.1667907507, 13.1669476251, 13.1671044824, 13.1672613226, 13.1674181458, 13.167574952, 13.1677317411, 13.1678885132, 13.1680452682, 13.1682020062, 13.1683587272, 13.1685154312, 13.1686721181, 13.1688287881, 13.168985441, 13.1691420769, 13.1692986958, 13.1694552977, 13.1696118826, 13.1697684505, 13.1699250014, 13.1700815354, 13.1702380523, 13.1703945523, 13.1705510353, 13.1707075013, 13.1708639504, 13.1710203825, 13.1711767977, 13.1713331958, 13.1714895771, 13.1716459413, 13.1718022887, 13.1719586191, 13.1721149325, 13.1722712291, 13.1724275086, 13.1725837713, 13.172740017, 13.1728962459, 13.1730524578, 13.1732086528, 13.1733648308, 13.173520992, 13.1736771363, 13.1738332637, 13.1739893742, 13.1741454678, 13.1743015445, 13.1744576043, 13.1746136472, 13.1747696733, 13.1749256825, 13.1750816748, 13.1752376503, 13.1753936089, 13.1755495506, 13.1757054755, 13.1758613836, 13.1760172748, 13.1761731491, 13.1763290066, 13.1764848473, 13.1766406711, 13.1767964781, 13.1769522683, 13.1771080417, 13.1772637983, 13.177419538, 13.1775752609, 13.177730967, 13.1778866563, 13.1780423289, 13.1781979846, 13.1783536235, 13.1785092457, 13.178664851, 13.1788204396, 13.1789760114, 13.1791315664, 13.1792871046, 13.1794426261, 13.1795981308, 13.1797536188, 13.17990909, 13.1800645445, 13.1802199822, 13.1803754031, 13.1805308073, 13.1806861948, 13.1808415656, 13.1809969196, 13.1811522569, 13.1813075774, 13.1814628813, 13.1816181684, 13.1817734388, 13.1819286925, 13.1820839295, 13.1822391498, 13.1823943534, 13.1825495403, 13.1827047105, 13.182859864, 13.1830150009, 13.183170121, 13.1833252245, 13.1834803113, 13.1836353815, 13.1837904349, 13.1839454718, 13.1841004919, 13.1842554954, 13.1844104822, 13.1845654524, 13.184720406, 13.1848753429, 13.1850302632, 13.1851851668, 13.1853400538, 13.1854949242, 13.185649778, 13.1858046151, 13.1859594356, 13.1861142395, 13.1862690268, 13.1864237975, 13.1865785516, 13.1867332891, 13.18688801, 13.1870427143, 13.1871974021, 13.1873520732, 13.1875067278, 13.1876613657, 13.1878159871, 13.187970592, 13.1881251803, 13.188279752, 13.1884343071, 13.1885888457, 13.1887433677, 13.1888978732, 13.1890523622, 13.1892068346, 13.1893612905, 13.1895157298, 13.1896701526, 13.1898245589, 13.1899789486, 13.1901333219, 13.1902876786, 13.1904420188, 13.1905963425, 13.1907506497, 13.1909049403, 13.1910592145, 13.1912134722, 13.1913677134, 13.1915219381, 13.1916761464, 13.1918303381, 13.1919845134, 13.1921386722, 13.1922928145, 13.1924469403, 13.1926010497, 13.1927551426, 13.1929092191, 13.1930632791, 13.1932173227, 13.1933713498, 13.1935253605, 13.1936793547, 13.1938333325, 13.1939872939, 13.1941412389, 13.1942951674, 13.1944490795, 13.1946029752, 13.1947568544, 13.1949107173, 13.1950645637, 13.1952183938, 13.1953722074, 13.1955260046, 13.1956797855, 13.19583355, 13.195987298, 13.1961410297, 13.196294745, 13.196448444, 13.1966021265, 13.1967557927, 13.1969094425, 13.197063076, 13.1972166931, 13.1973702939, 13.1975238783, 13.1976774463, 13.197830998, 13.1979845334, 13.1981380524, 13.1982915551, 13.1984450415, 13.1985985115, 13.1987519652, 13.1989054026, 13.1990588237, 13.1992122284, 13.1993656169, 13.199518989, 13.1996723448, 13.1998256844, 13.1999790076, 13.2001323146, 13.2002856052, 13.2004388796, 13.2005921377, 13.2007453795, 13.200898605, 13.2010518143, 13.2012050073, 13.201358184, 13.2015113445, 13.2016644887, 13.2018176167, 13.2019707284, 13.2021238238, 13.202276903, 13.202429966, 13.2025830127, 13.2027360433, 13.2028890575, 13.2030420556, 13.2031950374, 13.203348003, 13.2035009524, 13.2036538855, 13.2038068025, 13.2039597032, 13.2041125878, 13.2042654561, 13.2044183083, 13.2045711442, 13.204723964, 13.2048767676, 13.205029555, 13.2051823262, 13.2053350813, 13.2054878202, 13.2056405429, 13.2057932494, 13.2059459398, 13.206098614, 13.2062512721, 13.206403914, 13.2065565397, 13.2067091494, 13.2068617428, 13.2070143202, 13.2071668814, 13.2073194265, 13.2074719554, 13.2076244682, 13.2077769649, 13.2079294455, 13.20808191, 13.2082343583, 13.2083867906, 13.2085392067, 13.2086916068, 13.2088439907, 13.2089963586, 13.2091487104, 13.209301046, 13.2094533656, 13.2096056691, 13.2097579566, 13.2099102279, 13.2100624832, 13.2102147225, 13.2103669456, 13.2105191527, 13.2106713438, 13.2108235188, 13.2109756777, 13.2111278206, 13.2112799475, 13.2114320583, 13.2115841531, 13.2117362318, 13.2118882945, 13.2120403412, 13.2121923719, 13.2123443866, 13.2124963852, 13.2126483678, 13.2128003344, 13.212952285, 13.2131042196, 13.2132561382, 13.2134080409, 13.2135599275, 13.2137117981, 13.2138636527, 13.2140154914, 13.2141673141, 13.2143191208, 13.2144709115, 13.2146226863, 13.2147744451, 13.2149261879, 13.2150779148, 13.2152296257, 13.2153813207, 13.2155329997, 13.2156846628, 13.21583631, 13.2159879412, 13.2161395564, 13.2162911558, 13.2164427392, 13.2165943066, 13.2167458582, 13.2168973938, 13.2170489136, 13.2172004174, 13.2173519053, 13.2175033773, 13.2176548334, 13.2178062736, 13.2179576979, 13.2181091063, 13.2182604988, 13.2184118754, 13.2185632362, 13.2187145811, 13.2188659101, 13.2190172232, 13.2191685205, 13.2193198019, 13.2194710674, 13.2196223171, 13.2197735509, 13.2199247689, 13.220075971, 13.2202271573, 13.2203783277, 13.2205294823, 13.2206806211, 13.220831744, 13.2209828511, 13.2211339424, 13.2212850178, 13.2214360774, 13.2215871213, 13.2217381493, 13.2218891615, 13.2220401579, 13.2221911385, 13.2223421032, 13.2224930522, 13.2226439855, 13.2227949029, 13.2229458045, 13.2230966903, 13.2232475604, 13.2233984147, 13.2235492532, 13.223700076, 13.223850883, 13.2240016742, 13.2241524497, 13.2243032094, 13.2244539533, 13.2246046815, 13.224755394, 13.2249060907, 13.2250567717, 13.2252074369, 13.2253580865, 13.2255087202, 13.2256593383, 13.2258099406, 13.2259605272, 13.2261110981, 13.2262616533, 13.2264121928, 13.2265627166, 13.2267132246, 13.226863717, 13.2270141936, 13.2271646546, 13.2273150999, 13.2274655295, 13.2276159434, 13.2277663416, 13.2279167242, 13.2280670911, 13.2282174423, 13.2283677778, 13.2285180977, 13.2286684019, 13.2288186905, 13.2289689634, 13.2291192207, 13.2292694623, 13.2294196882, 13.2295698986, 13.2297200932, 13.2298702723, 13.2300204357, 13.2301705835, 13.2303207157, 13.2304708322, 13.2306209331, 13.2307710184, 13.2309210881, 13.2310711422, 13.2312211807, 13.2313712036, 13.2315212109, 13.2316712026, 13.2318211787, 13.2319711392, 13.2321210841, 13.2322710134, 13.2324209272, 13.2325708254, 13.232720708, 13.232870575, 13.2330204265, 13.2331702624, 13.2333200827, 13.2334698875, 13.2336196768, 13.2337694504, 13.2339192086, 13.2340689512, 13.2342186782, 13.2343683898, 13.2345180857, 13.2346677662, 13.2348174311, 13.2349670805, 13.2351167144, 13.2352663328, 13.2354159356, 13.2355655229, 13.2357150948, 13.2358646511, 13.2360141919, 13.2361637172, 13.236313227, 13.2364627214, 13.2366122002, 13.2367616636, 13.2369111114, 13.2370605438, 13.2372099608, 13.2373593622, 13.2375087482, 13.2376581187, 13.2378074737, 13.2379568133, 13.2381061374, 13.2382554461, 13.2384047393, 13.2385540171, 13.2387032794, 13.2388525263, 13.2390017578, 13.2391509738, 13.2393001744, 13.2394493595, 13.2395985292, 13.2397476836, 13.2398968224, 13.2400459459, 13.240195054, 13.2403441466, 13.2404932239, 13.2406422857, 13.2407913322, 13.2409403632, 13.2410893789, 13.2412383791, 13.241387364, 13.2415363335, 13.2416852876, 13.2418342263, 13.2419831497, 13.2421320577, 13.2422809503, 13.2424298276, 13.2425786895, 13.242727536, 13.2428763672, 13.243025183, 13.2431739835, 13.2433227686, 13.2434715384, 13.2436202928, 13.243769032, 13.2439177557, 13.2440664642, 13.2442151573, 13.2443638351, 13.2445124976, 13.2446611448, 13.2448097766, 13.2449583932, 13.2451069944, 13.2452555803, 13.2454041509, 13.2455527063, 13.2457012463, 13.245849771, 13.2459982805, 13.2461467746, 13.2462952535, 13.2464437171, 13.2465921654, 13.2467405985, 13.2468890163, 13.2470374188, 13.247185806, 13.247334178, 13.2474825348, 13.2476308762, 13.2477792025, 13.2479275134, 13.2480758092, 13.2482240897, 13.2483723549, 13.2485206049, 13.2486688397, 13.2488170593, 13.2489652636, 13.2491134527, 13.2492616266, 13.2494097853, 13.2495579287, 13.249706057, 13.24985417, 13.2500022678, 13.2501503505, 13.2502984179, 13.2504464701, 13.2505945072, 13.2507425291, 13.2508905357, 13.2510385272, 13.2511865035, 13.2513344647, 13.2514824106, 13.2516303414, 13.251778257, 13.2519261575, 13.2520740428, 13.2522219129, 13.2523697679, 13.2525176078, 13.2526654325, 13.252813242, 13.2529610364, 13.2531088157, 13.2532565798, 13.2534043288, 13.2535520626, 13.2536997814, 13.253847485, 13.2539951735, 13.2541428469, 13.2542905051, 13.2544381483, 13.2545857763, 13.2547333892, 13.2548809871, 13.2550285698, 13.2551761375, 13.25532369, 13.2554712275, 13.2556187498, 13.2557662571, 13.2559137493, 13.2560612265, 13.2562086885, 13.2563561355, 13.2565035674, 13.2566509843, 13.2567983861, 13.2569457728, 13.2570931445, 13.2572405011, 13.2573878427, 13.2575351692, 13.2576824807, 13.2578297772, 13.2579770586, 13.2581243249, 13.2582715763, 13.2584188126, 13.2585660339, 13.2587132402, 13.2588604314, 13.2590076076, 13.2591547689, 13.2593019151, 13.2594490463, 13.2595961625, 13.2597432637, 13.2598903499, 13.2600374211, 13.2601844773, 13.2603315186, 13.2604785448, 13.2606255561, 13.2607725524, 13.2609195337, 13.2610665, 13.2612134514, 13.2613603878, 13.2615073092, 13.2616542157, 13.2618011072, 13.2619479838, 13.2620948454, 13.262241692, 13.2623885238, 13.2625353405, 13.2626821424, 13.2628289293, 13.2629757012, 13.2631224583, 13.2632692004, 13.2634159276, 13.2635626398, 13.2637093372, 13.2638560196, 13.2640026871, 13.2641493397, 13.2642959774, 13.2644426002, 13.2645892081, 13.2647358011, 13.2648823792, 13.2650289425, 13.2651754908, 13.2653220242, 13.2654685428, 13.2656150465, 13.2657615353, 13.2659080092, 13.2660544683, 13.2662009125, 13.2663473418, 13.2664937563, 13.2666401559, 13.2667865407, 13.2669329106, 13.2670792657, 13.2672256059, 13.2673719313, 13.2675182418, 13.2676645375, 13.2678108184, 13.2679570844, 13.2681033356, 13.268249572, 13.2683957936, 13.2685420003, 13.2686881922, 13.2688343693, 13.2689805316, 13.2691266791, 13.2692728118, 13.2694189297, 13.2695650328, 13.2697111211, 13.2698571947, 13.2700032534, 13.2701492973, 13.2702953265, 13.2704413408, 13.2705873404, 13.2707333253, 13.2708792953, 13.2710252506, 13.2711711911, 13.2713171169, 13.2714630279, 13.2716089242, 13.2717548056, 13.2719006724, 13.2720465244, 13.2721923616, 13.2723381842, 13.2724839919, 13.272629785, 13.2727755633, 13.2729213269, 13.2730670757, 13.2732128099, 13.2733585293, 13.273504234, 13.2736499239, 13.2737955992, 13.2739412598, 13.2740869056, 13.2742325368, 13.2743781532, 13.274523755, 13.2746693421, 13.2748149145, 13.2749604721, 13.2751060151, 13.2752515435, 13.2753970571, 13.2755425561, 13.2756880404, 13.27583351, 13.275978965, 13.2761244053, 13.2762698309, 13.2764152419, 13.2765606382, 13.2767060199, 13.2768513869, 13.2769967393, 13.277142077, 13.2772874001, 13.2774327086, 13.2775780024, 13.2777232816, 13.2778685462, 13.2780137961, 13.2781590314, 13.2783042521, 13.2784494582, 13.2785946497, 13.2787398266, 13.2788849888, 13.2790301364, 13.2791752695, 13.2793203879, 13.2794654918, 13.2796105811, 13.2797556557, 13.2799007158, 13.2800457613, 13.2801907922, 13.2803358086, 13.2804808103, 13.2806257975, 13.2807707701, 13.2809157282, 13.2810606717, 13.2812056006, 13.281350515, 13.2814954148, 13.2816403001, 13.2817851708, 13.281930027, 13.2820748686, 13.2822196957, 13.2823645082, 13.2825093062, 13.2826540897, 13.2827988587, 13.2829436131, 13.283088353, 13.2832330784, 13.2833777893, 13.2835224856, 13.2836671675, 13.2838118348, 13.2839564877, 13.284101126, 13.2842457498, 13.2843903592, 13.284534954, 13.2846795344, 13.2848241002, 13.2849686516, 13.2851131885, 13.2852577109, 13.2854022189, 13.2855467123, 13.2856911913, 13.2858356559, 13.2859801059, 13.2861245415, 13.2862689627, 13.2864133694, 13.2865577616, 13.2867021394, 13.2868465027, 13.2869908516, 13.2871351861, 13.2872795061, 13.2874238117, 13.2875681028, 13.2877123795, 13.2878566418, 13.2880008897, 13.2881451232, 13.2882893422, 13.2884335468, 13.288577737, 13.2887219128, 13.2888660742, 13.2890102211, 13.2891543537, 13.2892984719, 13.2894425757, 13.2895866651, 13.2897307401, 13.2898748007, 13.2900188469, 13.2901628788, 13.2903068963, 13.2904508994, 13.2905948881, 13.2907388624, 13.2908828224, 13.2910267681, 13.2911706993, 13.2913146162, 13.2914585188, 13.291602407, 13.2917462808, 13.2918901403, 13.2920339855, 13.2921778163, 13.2923216328, 13.2924654349, 13.2926092228, 13.2927529962, 13.2928967554, 13.2930405002, 13.2931842308, 13.293327947, 13.2934716488, 13.2936153364, 13.2937590097, 13.2939026686, 13.2940463133, 13.2941899436, 13.2943335597, 13.2944771614, 13.2946207489, 13.2947643221, 13.294907881, 13.2950514256, 13.2951949559, 13.2953384719, 13.2954819737, 13.2956254612, 13.2957689344, 13.2959123934, 13.2960558381, 13.2961992685, 13.2963426847, 13.2964860866, 13.2966294743, 13.2967728477, 13.2969162069, 13.2970595518, 13.2972028825, 13.2973461989, 13.2974895012, 13.2976327891, 13.2977760629, 13.2979193224, 13.2980625677, 13.2982057988, 13.2983490157, 13.2984922183, 13.2986354067, 13.298778581, 13.298921741, 13.2990648868, 13.2992080184, 13.2993511358, 13.299494239, 13.299637328, 13.2997804029, 13.2999234635, 13.30006651, 13.3002095422, 13.3003525603, 13.3004955642, 13.300638554, 13.3007815296, 13.300924491, 13.3010674382, 13.3012103713, 13.3013532902, 13.301496195, 13.3016390856, 13.3017819621, 13.3019248244, 13.3020676725, 13.3022105065, 13.3023533264, 13.3024961322, 13.3026389238, 13.3027817013, 13.3029244646, 13.3030672138, 13.3032099489, 13.3033526699, 13.3034953768, 13.3036380695, 13.3037807482, 13.3039234127, 13.3040660631, 13.3042086994, 13.3043513217, 13.3044939298, 13.3046365238, 13.3047791037, 13.3049216696, 13.3050642213, 13.305206759, 13.3053492826, 13.3054917921, 13.3056342875, 13.3057767689, 13.3059192362, 13.3060616894, 13.3062041286, 13.3063465537, 13.3064889647, 13.3066313617, 13.3067737446, 13.3069161135, 13.3070584684, 13.3072008091, 13.3073431359, 13.3074854486, 13.3076277473, 13.3077700319, 13.3079123025, 13.3080545591, 13.3081968016, 13.3083390301, 13.3084812446, 13.3086234451, 13.3087656316, 13.3089078041, 13.3090499625, 13.309192107, 13.3093342374, 13.3094763538, 13.3096184563, 13.3097605447, 13.3099026192, 13.3100446796, 13.3101867261, 13.3103287586, 13.3104707771, 13.3106127817, 13.3107547722, 13.3108967488, 13.3110387114, 13.3111806601, 13.3113225947, 13.3114645154, 13.3116064222, 13.311748315, 13.3118901939, 13.3120320587, 13.3121739097, 13.3123157467, 13.3124575697, 13.3125993789, 13.312741174, 13.3128829553, 13.3130247226, 13.313166476, 13.3133082154, 13.313449941, 13.3135916526, 13.3137333503, 13.313875034, 13.3140167039, 13.3141583599, 13.3143000019, 13.31444163, 13.3145832443, 13.3147248446, 13.3148664311, 13.3150080036, 13.3151495623, 13.315291107, 13.3154326379, 13.3155741549, 13.315715658, 13.3158571473, 13.3159986226, 13.3161400841, 13.3162815317, 13.3164229655, 13.3165643854, 13.3167057914, 13.3168471836, 13.3169885619, 13.3171299264, 13.317271277, 13.3174126138, 13.3175539367, 13.3176952458, 13.317836541, 13.3179778224, 13.31811909, 13.3182603437, 13.3184015836, 13.3185428097, 13.318684022, 13.3188252204, 13.318966405, 13.3191075758, 13.3192487328, 13.319389876, 13.3195310054, 13.3196721209, 13.3198132227, 13.3199543107, 13.3200953849, 13.3202364452, 13.3203774918, 13.3205185246, 13.3206595436, 13.3208005489, 13.3209415403, 13.321082518, 13.3212234819, 13.321364432, 13.3215053684, 13.321646291, 13.3217871998, 13.3219280949, 13.3220689762, 13.3222098437, 13.3223506975, 13.3224915376, 13.3226323639, 13.3227731765, 13.3229139753, 13.3230547603, 13.3231955317, 13.3233362893, 13.3234770332, 13.3236177633, 13.3237584797, 13.3238991824, 13.3240398714, 13.3241805466, 13.3243212082, 13.324461856, 13.3246024901, 13.3247431105, 13.3248837172, 13.3250243102, 13.3251648895, 13.3253054551, 13.325446007, 13.3255865452, 13.3257270697, 13.3258675806, 13.3260080777, 13.3261485612, 13.326289031, 13.3264294871, 13.3265699296, 13.3267103583, 13.3268507735, 13.3269911749, 13.3271315627, 13.3272719368, 13.3274122973, 13.3275526441, 13.3276929772, 13.3278332968, 13.3279736026, 13.3281138948, 13.3282541734, 13.3283944384, 13.3285346897, 13.3286749273, 13.3288151514, 13.3289553618, 13.3290955586, 13.3292357417, 13.3293759113, 13.3295160672, 13.3296562095, 13.3297963382, 13.3299364533, 13.3300765548, 13.3302166427, 13.330356717, 13.3304967776, 13.3306368247, 13.3307768582, 13.3309168781, 13.3310568844, 13.3311968772, 13.3313368563, 13.3314768219, 13.3316167738, 13.3317567123, 13.3318966371, 13.3320365484, 13.3321764461, 13.3323163302, 13.3324562008, 13.3325960578, 13.3327359012, 13.3328757312, 13.3330155475, 13.3331553503, 13.3332951396, 13.3334349153, 13.3335746775, 13.3337144261, 13.3338541612, 13.3339938828, 13.3341335908, 13.3342732853, 13.3344129663, 13.3345526338, 13.3346922877, 13.3348319281, 13.334971555, 13.3351111684, 13.3352507683, 13.3353903547, 13.3355299276, 13.3356694869, 13.3358090328, 13.3359485652, 13.3360880841, 13.3362275895, 13.3363670814, 13.3365065598, 13.3366460247, 13.3367854762, 13.3369249142, 13.3370643387, 13.3372037497, 13.3373431473, 13.3374825314, 13.337621902, 13.3377612592, 13.3379006029, 13.3380399331, 13.3381792499, 13.3383185532, 13.3384578431, 13.3385971196, 13.3387363826, 13.3388756321, 13.3390148683, 13.3391540909, 13.3392933002, 13.339432496, 13.3395716784, 13.3397108473, 13.3398500029, 13.339989145, 13.3401282737, 13.340267389, 13.3404064909, 13.3405455793, 13.3406846544, 13.340823716, 13.3409627643, 13.3411017991, 13.3412408205, 13.3413798286, 13.3415188232, 13.3416578045, 13.3417967724, 13.3419357269, 13.342074668, 13.3422135957, 13.3423525101, 13.3424914111, 13.3426302987, 13.3427691729, 13.3429080338, 13.3430468813, 13.3431857154, 13.3433245362, 13.3434633437, 13.3436021377, 13.3437409185, 13.3438796858, 13.3440184399, 13.3441571806, 13.3442959079, 13.3444346219, 13.3445733226, 13.3447120099, 13.3448506839, 13.3449893446, 13.345127992, 13.345266626, 13.3454052467, 13.3455438541, 13.3456824482, 13.345821029, 13.3459595964, 13.3460981505, 13.3462366914, 13.3463752189, 13.3465137332, 13.3466522341, 13.3467907218, 13.3469291961, 13.3470676572, 13.3472061049, 13.3473445394, 13.3474829606, 13.3476213686, 13.3477597632, 13.3478981446, 13.3480365127, 13.3481748675, 13.3483132091, 13.3484515374, 13.3485898524, 13.3487281542, 13.3488664428, 13.349004718, 13.34914298, 13.3492812288, 13.3494194643, 13.3495576866, 13.3496958957, 13.3498340915, 13.349972274, 13.3501104433, 13.3502485994, 13.3503867423, 13.350524872, 13.3506629884, 13.3508010916, 13.3509391815, 13.3510772583, 13.3512153219, 13.3513533722, 13.3514914093, 13.3516294332, 13.351767444, 13.3519054415, 13.3520434258, 13.3521813969, 13.3523193548, 13.3524572996, 13.3525952311, 13.3527331495, 13.3528710547, 13.3530089467, 13.3531468255, 13.3532846911, 13.3534225436, 13.3535603829, 13.353698209, 13.353836022, 13.3539738218, 13.3541116085, 13.3542493819, 13.3543871423, 13.3545248894, 13.3546626235, 13.3548003444, 13.3549380521, 13.3550757467, 13.3552134281, 13.3553510964, 13.3554887516, 13.3556263936, 13.3557640225, 13.3559016383, 13.356039241, 13.3561768305, 13.3563144069, 13.3564519702, 13.3565895204, 13.3567270575, 13.3568645814, 13.3570020923, 13.35713959, 13.3572770746, 13.3574145462, 13.3575520046, 13.35768945, 13.3578268822, 13.3579643014, 13.3581017074, 13.3582391004, 13.3583764803, 13.3585138471, 13.3586512009, 13.3587885416, 13.3589258692, 13.3590631837, 13.3592004851, 13.3593377735, 13.3594750488, 13.3596123111, 13.3597495603, 13.3598867965, 13.3600240196, 13.3601612296, 13.3602984266, 13.3604356106, 13.3605727815, 13.3607099393, 13.3608470842, 13.360984216, 13.3611213347, 13.3612584405, 13.3613955332, 13.3615326128, 13.3616696795, 13.3618067331, 13.3619437737, 13.3620808013, 13.3622178159, 13.3623548175, 13.362491806, 13.3626287816, 13.3627657442, 13.3629026937, 13.3630396303, 13.3631765538, 13.3633134644, 13.3634503619, 13.3635872465, 13.3637241181, 13.3638609767, 13.3639978224, 13.364134655, 13.3642714747, 13.3644082814, 13.3645450751, 13.3646818559, 13.3648186237, 13.3649553785, 13.3650921203, 13.3652288493, 13.3653655652, 13.3655022682, 13.3656389582, 13.3657756353, 13.3659122995, 13.3660489507, 13.3661855889, 13.3663222142, 13.3664588266, 13.3665954261, 13.3667320126, 13.3668685862, 13.3670051468, 13.3671416946, 13.3672782294, 13.3674147512, 13.3675512602, 13.3676877563, 13.3678242394, 13.3679607096, 13.368097167, 13.3682336114, 13.3683700429, 13.3685064615, 13.3686428672, 13.36877926, 13.36891564, 13.369052007, 13.3691883611, 13.3693247024, 13.3694610308, 13.3695973463, 13.3697336489, 13.3698699386, 13.3700062155, 13.3701424795, 13.3702787306, 13.3704149689, 13.3705511943, 13.3706874068, 13.3708236065, 13.3709597933, 13.3710959673, 13.3712321284, 13.3713682766, 13.371504412, 13.3716405346, 13.3717766443, 13.3719127412, 13.3720488253, 13.3721848965, 13.3723209549, 13.3724570004, 13.3725930331, 13.372729053, 13.3728650601, 13.3730010544, 13.3731370358, 13.3732730044, 13.3734089602, 13.3735449032, 13.3736808334, 13.3738167508, 13.3739526554, 13.3740885471, 13.3742244261, 13.3743602923, 13.3744961457, 13.3746319863, 13.3747678141, 13.3749036291, 13.3750394313, 13.3751752208, 13.3753109975, 13.3754467614, 13.3755825125, 13.3757182508, 13.3758539764, 13.3759896892, 13.3761253893, 13.3762610766, 13.3763967511, 13.3765324128, 13.3766680619, 13.3768036981, 13.3769393216, 13.3770749324, 13.3772105304, 13.3773461157, 13.3774816882, 13.377617248, 13.377752795, 13.3778883293, 13.3780238509, 13.3781593598, 13.3782948559, 13.3784303393, 13.37856581, 13.378701268, 13.3788367132, 13.3789721457, 13.3791075656, 13.3792429727, 13.3793783671, 13.3795137488, 13.3796491178, 13.3797844741, 13.3799198176, 13.3800551485, 13.3801904667, 13.3803257723, 13.3804610651, 13.3805963452, 13.3807316127, 13.3808668675, 13.3810021096, 13.381137339, 13.3812725557, 13.3814077598, 13.3815429512, 13.3816781299, 13.381813296, 13.3819484494, 13.3820835901, 13.3822187182, 13.3823538337, 13.3824889364, 13.3826240266, 13.3827591041, 13.3828941689, 13.3830292211, 13.3831642606, 13.3832992875, 13.3834343018, 13.3835693035, 13.3837042925, 13.3838392689, 13.3839742326, 13.3841091837, 13.3842441222, 13.3843790481, 13.3845139614, 13.3846488621, 13.3847837501, 13.3849186255, 13.3850534883, 13.3851883386, 13.3853231762, 13.3854580012, 13.3855928136, 13.3857276134, 13.3858624006, 13.3859971753, 13.3861319373, 13.3862666868, 13.3864014236, 13.3865361479, 13.3866708596, 13.3868055588, 13.3869402453, 13.3870749193, 13.3872095807, 13.3873442296, 13.3874788658, 13.3876134896, 13.3877481007, 13.3878826993, 13.3880172853, 13.3881518588, 13.3882864198, 13.3884209681, 13.388555504, 13.3886900273, 13.388824538, 13.3889590362, 13.3890935219, 13.389227995, 13.3893624556, 13.3894969037, 13.3896313393, 13.3897657623, 13.3899001728, 13.3900345707, 13.3901689562, 13.3903033291, 13.3904376896, 13.3905720375, 13.3907063729, 13.3908406958, 13.3909750062, 13.391109304, 13.3912435894, 13.3913778623, 13.3915121227, 13.3916463706, 13.391780606, 13.3919148289, 13.3920490394, 13.3921832373, 13.3923174228, 13.3924515958, 13.3925857563, 13.3927199043, 13.3928540399, 13.392988163, 13.3931222736, 13.3932563717, 13.3933904574, 13.3935245307, 13.3936585915, 13.3937926398, 13.3939266756, 13.3940606991, 13.39419471, 13.3943287085, 13.3944626946, 13.3945966682, 13.3947306294, 13.3948645782, 13.3949985145, 13.3951324384, 13.3952663498, 13.3954002489, 13.3955341355, 13.3956680096, 13.3958018714, 13.3959357207, 13.3960695576, 13.3962033821, 13.3963371942, 13.3964709939, 13.3966047812, 13.396738556, 13.3968723185, 13.3970060686, 13.3971398062, 13.3972735315, 13.3974072444, 13.3975409449, 13.3976746329, 13.3978083087, 13.397941972, 13.3980756229, 13.3982092615, 13.3983428876, 13.3984765014, 13.3986101029, 13.3987436919, 13.3988772686, 13.399010833, 13.3991443849, 13.3992779245, 13.3994114517, 13.3995449666, 13.3996784692, 13.3998119593, 13.3999454371, 13.4000789026, 13.4002123558, 13.4003457965, 13.400479225, 13.4006126411, 13.4007460448, 13.4008794363, 13.4010128154, 13.4011461822, 13.4012795366, 13.4014128787, 13.4015462085, 13.401679526, 13.4018128311, 13.401946124, 13.4020794045, 13.4022126727, 13.4023459286, 13.4024791722, 13.4026124035, 13.4027456225, 13.4028788292, 13.4030120236, 13.4031452057, 13.4032783755, 13.403411533, 13.4035446782, 13.4036778111, 13.4038109318, 13.4039440402, 13.4040771362, 13.4042102201, 13.4043432916, 13.4044763508, 13.4046093978, 13.4047424326, 13.404875455, 13.4050084652, 13.4051414631, 13.4052744488, 13.4054074222, 13.4055403834, 13.4056733323, 13.4058062689, 13.4059391933, 13.4060721055, 13.4062050054, 13.4063378931, 13.4064707685, 13.4066036317, 13.4067364827, 13.4068693214, 13.4070021479, 13.4071349622, 13.4072677642, 13.4074005541, 13.4075333317, 13.4076660971, 13.4077988502, 13.4079315912, 13.4080643199, 13.4081970364, 13.4083297408, 13.4084624329, 13.4085951128, 13.4087277805, 13.408860436, 13.4089930793, 13.4091257105, 13.4092583294, 13.4093909361, 13.4095235307, 13.4096561131, 13.4097886832, 13.4099212412, 13.4100537871, 13.4101863207, 13.4103188422, 13.4104513515, 13.4105838486, 13.4107163336, 13.4108488064, 13.410981267, 13.4111137155, 13.4112461518, 13.411378576, 13.411510988, 13.4116433879, 13.4117757756, 13.4119081511, 13.4120405146, 13.4121728658, 13.412305205, 13.4124375319, 13.4125698468, 13.4127021495, 13.4128344401, 13.4129667186, 13.4130989849, 13.4132312391, 13.4133634812, 13.4134957112, 13.413627929, 13.4137601348, 13.4138923284, 13.4140245099, 13.4141566793, 13.4142888366, 13.4144209817, 13.4145531148, 13.4146852358, 13.4148173447, 13.4149494415, 13.4150815262, 13.4152135988, 13.4153456593, 13.4154777077, 13.415609744, 13.4157417683, 13.4158737805, 13.4160057806, 13.4161377686, 13.4162697445, 13.4164017084, 13.4165336602, 13.4166655999, 13.4167975276, 13.4169294432, 13.4170613468, 13.4171932382, 13.4173251177, 13.4174569851, 13.4175888404, 13.4177206837, 13.4178525149, 13.4179843341, 13.4181161412, 13.4182479363, 13.4183797194, 13.4185114904, 13.4186432494, 13.4187749963, 13.4189067313, 13.4190384542, 13.419170165, 13.4193018639, 13.4194335507, 13.4195652255, 13.4196968883, 13.4198285391, 13.4199601778, 13.4200918046, 13.4202234193, 13.4203550221, 13.4204866128, 13.4206181916, 13.4207497583, 13.420881313, 13.4210128558, 13.4211443865, 13.4212759053, 13.4214074121, 13.4215389068, 13.4216703897, 13.4218018605, 13.4219333193, 13.4220647662, 13.4221962011, 13.422327624, 13.4224590349, 13.4225904339, 13.4227218209, 13.4228531959, 13.422984559, 13.4231159101, 13.4232472493, 13.4233785765, 13.4235098918, 13.4236411951, 13.4237724864, 13.4239037658, 13.4240350333, 13.4241662888, 13.4242975324, 13.424428764, 13.4245599837, 13.4246911915, 13.4248223874, 13.4249535713, 13.4250847432, 13.4252159033, 13.4253470514, 13.4254781876, 13.4256093119, 13.4257404243, 13.4258715248, 13.4260026133, 13.42613369, 13.4262647547, 13.4263958075, 13.4265268485, 13.4266578775, 13.4267888946, 13.4269198998, 13.4270508932, 13.4271818746, 13.4273128441, 13.4274438018, 13.4275747476, 13.4277056815, 13.4278366035, 13.4279675136, 13.4280984118, 13.4282292982, 13.4283601727, 13.4284910353, 13.4286218861, 13.428752725, 13.428883552, 13.4290143672, 13.4291451705, 13.4292759619, 13.4294067415, 13.4295375092, 13.4296682651, 13.4297990092, 13.4299297414, 13.4300604617, 13.4301911702, 13.4303218668, 13.4304525517, 13.4305832246, 13.4307138858, 13.4308445351, 13.4309751726, 13.4311057982, 13.4312364121, 13.4313670141, 13.4314976043, 13.4316281826, 13.4317587492, 13.4318893039, 13.4320198468, 13.4321503779, 13.4322808972, 13.4324114047, 13.4325419004, 13.4326723843, 13.4328028564, 13.4329333166, 13.4330637651, 13.4331942018, 13.4333246267, 13.4334550398, 13.4335854412, 13.4337158307, 13.4338462084, 13.4339765744, 13.4341069286, 13.434237271, 13.4343676017, 13.4344979205, 13.4346282276, 13.434758523, 13.4348888065, 13.4350190783, 13.4351493384, 13.4352795866, 13.4354098232, 13.4355400479, 13.4356702609, 13.4358004622, 13.4359306517, 13.4360608295, 13.4361909955, 13.4363211498, 13.4364512923, 13.4365814231, 13.4367115421, 13.4368416495, 13.436971745, 13.4371018289, 13.437231901, 13.4373619614, 13.4374920101, 13.4376220471, 13.4377520723, 13.4378820858, 13.4380120877, 13.4381420777, 13.4382720561, 13.4384020228, 13.4385319778, 13.438661921, 13.4387918526, 13.4389217724, 13.4390516806, 13.4391815771, 13.4393114618, 13.4394413349, 13.4395711963, 13.439701046, 13.439830884, 13.4399607103, 13.440090525, 13.4402203279, 13.4403501192, 13.4404798988, 13.4406096667, 13.440739423, 13.4408691676, 13.4409989005, 13.4411286218, 13.4412583314, 13.4413880293, 13.4415177156, 13.4416473903, 13.4417770532, 13.4419067045, 13.4420363442, 13.4421659722, 13.4422955886, 13.4424251933, 13.4425547864, 13.4426843679, 13.4428139377, 13.4429434958, 13.4430730424, 13.4432025773, 13.4433321006, 13.4434616122, 13.4435911123, 13.4437206007, 13.4438500774, 13.4439795426, 13.4441089961, 13.4442384381, 13.4443678684, 13.4444972871, 13.4446266942, 13.4447560897, 13.4448854736, 13.4450148459, 13.4451442066, 13.4452735556, 13.4454028931, 13.445532219, 13.4456615333, 13.445790836, 13.4459201272, 13.4460494067, 13.4461786747, 13.4463079311, 13.4464371758, 13.4465664091, 13.4466956307, 13.4468248408, 13.4469540393, 13.4470832262, 13.4472124016, 13.4473415654, 13.4474707176, 13.4475998583, 13.4477289874, 13.447858105, 13.447987211, 13.4481163054, 13.4482453883, 13.4483744597, 13.4485035195, 13.4486325677, 13.4487616045, 13.4488906296, 13.4490196433, 13.4491486454, 13.4492776359, 13.449406615, 13.4495355825, 13.4496645385, 13.4497934829, 13.4499224159, 13.4500513373, 13.4501802472, 13.4503091455, 13.4504380324, 13.4505669077, 13.4506957716, 13.4508246239, 13.4509534647, 13.451082294, 13.4512111118, 13.4513399181, 13.4514687129, 13.4515974963, 13.4517262681, 13.4518550284, 13.4519837772, 13.4521125146, 13.4522412404, 13.4523699548, 13.4524986577, 13.4526273491, 13.452756029, 13.4528846975, 13.4530133545, 13.453142, 13.453270634, 13.4533992566, 13.4535278677, 13.4536564673, 13.4537850555, 13.4539136322, 13.4540421975, 13.4541707513, 13.4542992936, 13.4544278245, 13.454556344, 13.454684852, 13.4548133485, 13.4549418336, 13.4550703073, 13.4551987695, 13.4553272203, 13.4554556597, 13.4555840876, 13.4557125041, 13.4558409091, 13.4559693028, 13.456097685, 13.4562260557, 13.4563544151, 13.4564827631, 13.4566110996, 13.4567394247, 13.4568677384, 13.4569960407, 13.4571243315, 13.457252611, 13.4573808791, 13.4575091357, 13.457637381, 13.4577656149, 13.4578938373, 13.4580220484, 13.4581502481, 13.4582784363, 13.4584066132, 13.4585347787, 13.4586629329, 13.4587910756, 13.458919207, 13.4590473269, 13.4591754356, 13.4593035328, 13.4594316186, 13.4595596931, 13.4596877562, 13.459815808, 13.4599438484, 13.4600718774, 13.4601998951, 13.4603279014, 13.4604558963, 13.4605838799, 13.4607118521, 13.460839813, 13.4609677626, 13.4610957008, 13.4612236276, 13.4613515431, 13.4614794473, 13.4616073401, 13.4617352216, 13.4618630918, 13.4619909506, 13.4621187981, 13.4622466342, 13.4623744591, 13.4625022726, 13.4626300748, 13.4627578657, 13.4628856452, 13.4630134134, 13.4631411704, 13.463268916, 13.4633966503, 13.4635243733, 13.463652085, 13.4637797853, 13.4639074744, 13.4640351522, 13.4641628187, 13.4642904739, 13.4644181177, 13.4645457503, 13.4646733716, 13.4648009817, 13.4649285804, 13.4650561678, 13.465183744, 13.4653113089, 13.4654388625, 13.4655664048, 13.4656939359, 13.4658214556, 13.4659489642, 13.4660764614, 13.4662039474, 13.4663314221, 13.4664588855, 13.4665863377, 13.4667137786, 13.4668412083, 13.4669686267, 13.4670960339, 13.4672234298, 13.4673508145, 13.4674781879, 13.4676055501, 13.467732901, 13.4678602407, 13.4679875692, 13.4681148864, 13.4682421924, 13.4683694871, 13.4684967706, 13.4686240429, 13.468751304, 13.4688785538, 13.4690057924, 13.4691330198, 13.469260236, 13.469387441, 13.4695146347, 13.4696418172, 13.4697689886, 13.4698961487, 13.4700232976, 13.4701504353, 13.4702775618, 13.4704046771, 13.4705317812, 13.4706588741, 13.4707859558, 13.4709130263, 13.4710400856, 13.4711671337, 13.4712941707, 13.4714211964, 13.471548211, 13.4716752144, 13.4718022066, 13.4719291876, 13.4720561575, 13.4721831162, 13.4723100637, 13.4724370001, 13.4725639252, 13.4726908392, 13.4728177421, 13.4729446338, 13.4730715143, 13.4731983837, 13.4733252419, 13.473452089, 13.4735789249, 13.4737057496, 13.4738325632, 13.4739593657, 13.474086157, 13.4742129372, 13.4743397062, 13.4744664641, 13.4745932109, 13.4747199465, 13.474846671, 13.4749733844, 13.4751000866, 13.4752267777, 13.4753534577, 13.4754801266, 13.4756067843, 13.475733431, 13.4758600665, 13.4759866909, 13.4761133042, 13.4762399063, 13.4763664974, 13.4764930773, 13.4766196462, 13.4767462039, 13.4768727506, 13.4769992861, 13.4771258106, 13.4772523239, 13.4773788262, 13.4775053174, 13.4776317975, 13.4777582664, 13.4778847244, 13.4780111712, 13.4781376069, 13.4782640316, 13.4783904452, 13.4785168477, 13.4786432391, 13.4787696195, 13.4788959888, 13.479022347, 13.4791486942, 13.4792750303, 13.4794013553, 13.4795276693, 13.4796539722, 13.479780264, 13.4799065448, 13.4800328146, 13.4801590733, 13.4802853209, 13.4804115575, 13.4805377831, 13.4806639976, 13.4807902011, 13.4809163935, 13.4810425749, 13.4811687453, 13.4812949046, 13.4814210529, 13.4815471902, 13.4816733164, 13.4817994317, 13.4819255359, 13.482051629, 13.4821777112, 13.4823037823, 13.4824298424, 13.4825558915, 13.4826819296, 13.4828079567, 13.4829339728, 13.4830599779, 13.4831859719, 13.483311955, 13.4834379271, 13.4835638881, 13.4836898382, 13.4838157773, 13.4839417053, 13.4840676224, 13.4841935285, 13.4843194236, 13.4844453078, 13.4845711809, 13.4846970431, 13.4848228943, 13.4849487345, 13.4850745637, 13.485200382, 13.4853261892, 13.4854519856, 13.4855777709, 13.4857035453, 13.4858293087, 13.4859550612, 13.4860808027, 13.4862065332, 13.4863322528, 13.4864579614, 13.4865836591, 13.4867093458, 13.4868350216, 13.4869606864, 13.4870863403, 13.4872119832, 13.4873376152, 13.4874632363, 13.4875888464, 13.4877144456, 13.4878400338, 13.4879656111, 13.4880911775, 13.488216733, 13.4883422775, 13.4884678111, 13.4885933338, 13.4887188456, 13.4888443465, 13.4889698364, 13.4890953154, 13.4892207835, 13.4893462407, 13.489471687, 13.4895971224, 13.4897225469, 13.4898479604, 13.4899733631, 13.4900987549, 13.4902241358, 13.4903495057, 13.4904748648, 13.490600213, 13.4907255503, 13.4908508767, 13.4909761923, 13.4911014969, 13.4912267907, 13.4913520736, 13.4914773456, 13.4916026067, 13.4917278569, 13.4918530963, 13.4919783248, 13.4921035425, 13.4922287493, 13.4923539452, 13.4924791302, 13.4926043044, 13.4927294677, 13.4928546202, 13.4929797618, 13.4931048925, 13.4932300124, 13.4933551215, 13.4934802197, 13.4936053071, 13.4937303836, 13.4938554492, 13.4939805041, 13.4941055481, 13.4942305812, 13.4943556035, 13.494480615, 13.4946056157, 13.4947306055, 13.4948555845, 13.4949805527, 13.49510551, 13.4952304565, 13.4953553922, 13.4954803171, 13.4956052312, 13.4957301344, 13.4958550269, 13.4959799085, 13.4961047793, 13.4962296394, 13.4963544886, 13.496479327, 13.4966041546, 13.4967289714, 13.4968537774, 13.4969785726, 13.497103357, 13.4972281306, 13.4973528935, 13.4974776455, 13.4976023868, 13.4977271173, 13.497851837, 13.4979765459, 13.498101244, 13.4982259313, 13.4983506079, 13.4984752737, 13.4985999288, 13.498724573, 13.4988492065, 13.4989738293, 13.4990984412, 13.4992230424, 13.4993476329, 13.4994722126, 13.4995967815, 13.4997213397, 13.4998458871, 13.4999704238, 13.5000949497, 13.5002194648, 13.5003439693, 13.500468463, 13.5005929459, 13.5007174181, 13.5008418796, 13.5009663303, 13.5010907703, 13.5012151995, 13.5013396181, 13.5014640259, 13.5015884229, 13.5017128093, 13.5018371849, 13.5019615498, 13.502085904, 13.5022102474, 13.5023345802, 13.5024589022, 13.5025832136, 13.5027075142, 13.5028318041, 13.5029560833, 13.5030803518, 13.5032046095, 13.5033288566, 13.503453093, 13.5035773187, 13.5037015337, 13.503825738, 13.5039499316, 13.5040741145, 13.5041982867, 13.5043224483, 13.5044465991, 13.5045707393, 13.5046948688, 13.5048189876, 13.5049430958, 13.5050671932, 13.50519128, 13.5053153561, 13.5054394216, 13.5055634764, 13.5056875205, 13.5058115539, 13.5059355767, 13.5060595888, 13.5061835903, 13.5063075811, 13.5064315613, 13.5065555308, 13.5066794896, 13.5068034378, 13.5069273753, 13.5070513022, 13.5071752185, 13.5072991241, 13.5074230191, 13.5075469034, 13.5076707771, 13.5077946402, 13.5079184926, 13.5080423344, 13.5081661656, 13.5082899861, 13.5084137961, 13.5085375953, 13.508661384, 13.5087851621, 13.5089089295, 13.5090326863, 13.5091564325, 13.5092801681, 13.5094038931, 13.5095276074, 13.5096513112, 13.5097750043, 13.5098986869, 13.5100223588, 13.5101460202, 13.5102696709, 13.510393311, 13.5105169406, 13.5106405596, 13.5107641679, 13.5108877657, 13.5110113529, 13.5111349295, 13.5112584955, 13.5113820509, 13.5115055958, 13.5116291301, 13.5117526538, 13.5118761669, 13.5119996694, 13.5121231614, 13.5122466428, 13.5123701137, 13.5124935739, 13.5126170237, 13.5127404628, 13.5128638914, 13.5129873094, 13.5131107169, 13.5132341138, 13.5133575002, 13.513480876, 13.5136042412, 13.513727596, 13.5138509401, 13.5139742737, 13.5140975968, 13.5142209094, 13.5143442114, 13.5144675028, 13.5145907837, 13.5147140541, 13.514837314, 13.5149605633, 13.5150838021, 13.5152070304, 13.5153302482, 13.5154534554, 13.5155766521, 13.5156998383, 13.515823014, 13.5159461791, 13.5160693338, 13.5161924779, 13.5163156115, 13.5164387346, 13.5165618472, 13.5166849493, 13.5168080409, 13.516931122, 13.5170541926, 13.5171772527, 13.5173003023, 13.5174233414, 13.51754637, 13.5176693881, 13.5177923958, 13.5179153929, 13.5180383796, 13.5181613558, 13.5182843215, 13.5184072767, 13.5185302214, 13.5186531557, 13.5187760795, 13.5188989928, 13.5190218956, 13.519144788, 13.5192676699, 13.5193905413, 13.5195134023, 13.5196362528, 13.5197590929, 13.5198819225, 13.5200047416, 13.5201275503, 13.5202503486, 13.5203731363, 13.5204959137, 13.5206186806, 13.520741437, 13.520864183, 13.5209869185, 13.5211096437, 13.5212323583, 13.5213550626, 13.5214777564, 13.5216004397, 13.5217231127, 13.5218457752, 13.5219684272, 13.5220910689, 13.5222137001, 13.5223363209, 13.5224589313, 13.5225815313, 13.5227041208, 13.5228266999, 13.5229492686, 13.5230718269, 13.5231943748, 13.5233169123, 13.5234394394, 13.5235619561, 13.5236844623, 13.5238069582, 13.5239294437, 13.5240519187, 13.5241743834, 13.5242968377, 13.5244192815, 13.524541715, 13.5246641381, 13.5247865509, 13.5249089532, 13.5250313451, 13.5251537267, 13.5252760979, 13.5253984587, 13.5255208091, 13.5256431491, 13.5257654788, 13.5258877981, 13.5260101071, 13.5261324056, 13.5262546938, 13.5263769717, 13.5264992391, 13.5266214962, 13.526743743, 13.5268659794, 13.5269882054, 13.5271104211, 13.5272326264, 13.5273548214, 13.5274770061, 13.5275991803, 13.5277213443, 13.5278434979, 13.5279656411, 13.528087774, 13.5282098966, 13.5283320089, 13.5284541108, 13.5285762023, 13.5286982836, 13.5288203545, 13.5289424151, 13.5290644653, 13.5291865053, 13.5293085349, 13.5294305541, 13.5295525631, 13.5296745618, 13.5297965501, 13.5299185281, 13.5300404958, 13.5301624532, 13.5302844003, 13.5304063371, 13.5305282636, 13.5306501798, 13.5307720856, 13.5308939812, 13.5310158665, 13.5311377414, 13.5312596061, 13.5313814605, 13.5315033046, 13.5316251384, 13.5317469619, 13.5318687752, 13.5319905781, 13.5321123708, 13.5322341532, 13.5323559253, 13.5324776871, 13.5325994387, 13.53272118, 13.532842911, 13.5329646317, 13.5330863422, 13.5332080424, 13.5333297323, 13.533451412, 13.5335730814, 13.5336947405, 13.5338163894, 13.5339380281, 13.5340596565, 13.5341812746, 13.5343028825, 13.5344244801, 13.5345460675, 13.5346676446, 13.5347892115, 13.5349107681, 13.5350323145, 13.5351538507, 13.5352753766, 13.5353968923, 13.5355183978, 13.535639893, 13.535761378, 13.5358828528, 13.5360043173, 13.5361257716, 13.5362472157, 13.5363686496, 13.5364900732, 13.5366114866, 13.5367328898, 13.5368542828, 13.5369756656, 13.5370970382, 13.5372184005, 13.5373397527, 13.5374610946, 13.5375824264, 13.5377037479, 13.5378250592, 13.5379463604, 13.5380676513, 13.5381889321, 13.5383102026, 13.538431463, 13.5385527131, 13.5386739531, 13.5387951829, 13.5389164025, 13.5390376119, 13.5391588111, 13.5392800002, 13.539401179, 13.5395223477, 13.5396435062, 13.5397646546, 13.5398857928, 13.5400069208, 13.5401280386, 13.5402491462, 13.5403702437, 13.5404913311, 13.5406124082, 13.5407334753, 13.5408545321, 13.5409755788, 13.5410966153, 13.5412176417, 13.541338658, 13.5414596641, 13.54158066, 13.5417016458, 13.5418226214, 13.5419435869, 13.5420645423, 13.5421854875, 13.5423064226, 13.5424273475, 13.5425482623, 13.542669167, 13.5427900616, 13.542910946, 13.5430318203, 13.5431526844, 13.5432735384, 13.5433943824, 13.5435152162, 13.5436360398, 13.5437568534, 13.5438776568, 13.5439984501, 13.5441192333, 13.5442400064, 13.5443607694, 13.5444815223, 13.5446022651, 13.5447229978, 13.5448437203, 13.5449644328, 13.5450851352, 13.5452058274, 13.5453265096, 13.5454471817, 13.5455678437, 13.5456884956, 13.5458091374, 13.5459297691, 13.5460503907, 13.5461710023, 13.5462916037, 13.5464121951, 13.5465327764, 13.5466533477, 13.5467739088, 13.5468944599, 13.5470150009, 13.5471355318, 13.5472560527, 13.5473765635, 13.5474970642, 13.5476175549, 13.5477380355, 13.5478585061, 13.5479789665, 13.548099417, 13.5482198574, 13.5483402877, 13.5484607079, 13.5485811182, 13.5487015183, 13.5488219085, 13.5489422885, 13.5490626586, 13.5491830186, 13.5493033685, 13.5494237084, 13.5495440383, 13.5496643581, 13.5497846679, 13.5499049677, 13.5500252575, 13.5501455372, 13.5502658069, 13.5503860665, 13.5505063162, 13.5506265558, 13.5507467854, 13.550867005, 13.5509872145, 13.5511074141, 13.5512276036, 13.5513477831, 13.5514679526, 13.5515881121, 13.5517082616, 13.5518284011, 13.5519485306, 13.5520686501, 13.5521887596, 13.552308859, 13.5524289485, 13.552549028, 13.5526690975, 13.552789157, 13.5529092065, 13.5530292461, 13.5531492756, 13.5532692952, 13.5533893047, 13.5535093043, 13.5536292939, 13.5537492735, 13.5538692432, 13.5539892029, 13.5541091526, 13.5542290923, 13.5543490221, 13.5544689419, 13.5545888517, 13.5547087515, 13.5548286414, 13.5549485214, 13.5550683913, 13.5551882513, 13.5553081014, 13.5554279415, 13.5555477716, 13.5556675918, 13.5557874021, 13.5559072024, 13.5560269927, 13.5561467731, 13.5562665436, 13.5563863041, 13.5565060547, 13.5566257953, 13.556745526, 13.5568652468, 13.5569849576, 13.5571046585, 13.5572243495, 13.5573440305, 13.5574637016, 13.5575833628, 13.557703014, 13.5578226554, 13.5579422868, 13.5580619083, 13.5581815199, 13.5583011215, 13.5584207133, 13.5585402951, 13.558659867, 13.558779429, 13.5588989811, 13.5590185233, 13.5591380556, 13.559257578, 13.5593770905, 13.5594965931, 13.5596160858, 13.5597355686, 13.5598550415, 13.5599745045, 13.5600939576, 13.5602134009, 13.5603328342, 13.5604522577, 13.5605716712, 13.5606910749, 13.5608104687, 13.5609298527, 13.5610492267, 13.5611685909, 13.5612879452, 13.5614072896, 13.5615266241, 13.5616459488, 13.5617652636, 13.5618845686, 13.5620038637, 13.5621231489, 13.5622424242, 13.5623616897, 13.5624809453, 13.5626001911, 13.562719427, 13.5628386531, 13.5629578693, 13.5630770757, 13.5631962722, 13.5633154589, 13.5634346357, 13.5635538027, 13.5636729598, 13.5637921071, 13.5639112446, 13.5640303722, 13.56414949, 13.5642685979, 13.5643876961, 13.5645067843, 13.5646258628, 13.5647449314, 13.5648639902, 13.5649830392, 13.5651020784, 13.5652211077, 13.5653401272, 13.5654591369, 13.5655781368, 13.5656971268, 13.5658161071, 13.5659350775, 13.5660540382, 13.566172989, 13.56629193, 13.5664108612, 13.5665297826, 13.5666486942, 13.566767596, 13.566886488, 13.5670053702, 13.5671242427, 13.5672431053, 13.5673619581, 13.5674808011, 13.5675996344, 13.5677184579, 13.5678372715, 13.5679560754, 13.5680748695, 13.5681936539, 13.5683124284, 13.5684311932, 13.5685499482, 13.5686686934, 13.5687874288, 13.5689061545, 13.5690248704, 13.5691435765, 13.5692622729, 13.5693809595, 13.5694996364, 13.5696183034, 13.5697369608, 13.5698556083, 13.5699742461, 13.5700928742, 13.5702114925, 13.570330101, 13.5704486998, 13.5705672889, 13.5706858682, 13.5708044377, 13.5709229975, 13.5710415476, 13.5711600879, 13.5712786185, 13.5713971394, 13.5715156505, 13.5716341519, 13.5717526435, 13.5718711254, 13.5719895976, 13.5721080601, 13.5722265128, 13.5723449558, 13.5724633891, 13.5725818126, 13.5727002265, 13.5728186306, 13.572937025, 13.5730554097, 13.5731737847, 13.57329215, 13.5734105055, 13.5735288514, 13.5736471875, 13.5737655139, 13.5738838307, 13.5740021377, 13.574120435, 13.5742387226, 13.5743570006, 13.5744752688, 13.5745935273, 13.5747117762, 13.5748300153, 13.5749482448, 13.5750664646, 13.5751846747, 13.5753028751, 13.5754210658, 13.5755392468, 13.5756574182, 13.5757755799, 13.5758937319, 13.5760118742, 13.5761300069, 13.5762481298, 13.5763662432, 13.5764843468, 13.5766024408, 13.5767205251, 13.5768385997, 13.5769566647, 13.57707472, 13.5771927657, 13.5773108017, 13.577428828, 13.5775468447, 13.5776648518, 13.5777828492, 13.5779008369, 13.578018815, 13.5781367834, 13.5782547422, 13.5783726914, 13.5784906309, 13.5786085607, 13.578726481, 13.5788443916, 13.5789622925, 13.5790801838, 13.5791980655, 13.5793159376, 13.5794338, 13.5795516528, 13.579669496, 13.5797873295, 13.5799051535, 13.5800229678, 13.5801407724, 13.5802585675, 13.5803763529, 13.5804941288, 13.580611895, 13.5807296516, 13.5808473986, 13.580965136, 13.5810828638, 13.5812005819, 13.5813182905, 13.5814359895, 13.5815536788, 13.5816713586, 13.5817890287, 13.5819066893, 13.5820243403, 13.5821419817, 13.5822596134, 13.5823772356, 13.5824948482, 13.5826124513, 13.5827300447, 13.5828476286, 13.5829652028, 13.5830827675, 13.5832003226, 13.5833178681, 13.5834354041, 13.5835529305, 13.5836704473, 13.5837879545, 13.5839054522, 13.5840229403, 13.5841404188, 13.5842578877, 13.5843753471, 13.584492797, 13.5846102372, 13.584727668, 13.5848450891, 13.5849625007, 13.5850799028, 13.5851972953, 13.5853146782, 13.5854320516, 13.5855494154, 13.5856667697, 13.5857841145, 13.5859014497, 13.5860187754, 13.5861360915, 13.5862533981, 13.5863706951, 13.5864879826, 13.5866052606, 13.586722529, 13.586839788, 13.5869570373, 13.5870742772, 13.5871915075, 13.5873087283, 13.5874259396, 13.5875431414, 13.5876603336, 13.5877775163, 13.5878946895, 13.5880118532, 13.5881290074, 13.588246152, 13.5883632872, 13.5884804128, 13.588597529, 13.5887146356, 13.5888317327, 13.5889488203, 13.5890658984, 13.589182967, 13.5893000262, 13.5894170758, 13.5895341159, 13.5896511465, 13.5897681676, 13.5898851793, 13.5900021814, 13.5901191741, 13.5902361573, 13.590353131, 13.5904700952, 13.5905870499, 13.5907039952, 13.5908209309, 13.5909378572, 13.591054774, 13.5911716814, 13.5912885792, 13.5914054676, 13.5915223466, 13.591639216, 13.591756076, 13.5918729266, 13.5919897676, 13.5921065992, 13.5922234214, 13.592340234, 13.5924570373, 13.592573831, 13.5926906154, 13.5928073902, 13.5929241556, 13.5930409116, 13.5931576581, 13.5932743952, 13.5933911228, 13.593507841, 13.5936245497, 13.593741249, 13.5938579389, 13.5939746193, 13.5940912903, 13.5942079518, 13.5943246039, 13.5944412466, 13.5945578799, 13.5946745037, 13.5947911181, 13.5949077231, 13.5950243186, 13.5951409047, 13.5952574814, 13.5953740487, 13.5954906066, 13.5956071551, 13.5957236941, 13.5958402237, 13.5959567439, 13.5960732547, 13.5961897561, 13.5963062481, 13.5964227307, 13.5965392039, 13.5966556677, 13.5967721221, 13.596888567, 13.5970050026, 13.5971214288, 13.5972378456, 13.597354253, 13.597470651, 13.5975870396, 13.5977034188, 13.5978197886, 13.5979361491, 13.5980525002, 13.5981688418, 13.5982851741, 13.5984014971, 13.5985178106, 13.5986341148, 13.5987504096, 13.598866695, 13.598982971, 13.5990992377, 13.599215495, 13.599331743, 13.5994479815, 13.5995642107, 13.5996804306, 13.5997966411, 13.5999128422, 13.600029034, 13.6001452164, 13.6002613894, 13.6003775531, 13.6004937075, 13.6006098524, 13.6007259881, 13.6008421144, 13.6009582313, 13.6010743389, 13.6011904372, 13.6013065261, 13.6014226057, 13.6015386759, 13.6016547368, 13.6017707884, 13.6018868306, 13.6020028635, 13.6021188871, 13.6022349013, 13.6023509062, 13.6024669018, 13.6025828881, 13.602698865, 13.6028148326, 13.6029307909, 13.6030467399, 13.6031626795, 13.6032786099, 13.6033945309, 13.6035104426, 13.603626345, 13.6037422381, 13.6038581218, 13.6039739963, 13.6040898615, 13.6042057173, 13.6043215639, 13.6044374011, 13.6045532291, 13.6046690477, 13.6047848571, 13.6049006571, 13.6050164479, 13.6051322294, 13.6052480016, 13.6053637645, 13.6054795181, 13.6055952624, 13.6057109974, 13.6058267232, 13.6059424396, 13.6060581468, 13.6061738447, 13.6062895333, 13.6064052127, 13.6065208828, 13.6066365436, 13.6067521951, 13.6068678374, 13.6069834704, 13.6070990941, 13.6072147086, 13.6073303137, 13.6074459097, 13.6075614964, 13.6076770738, 13.6077926419, 13.6079082008, 13.6080237505, 13.6081392908, 13.608254822, 13.6083703439, 13.6084858565, 13.6086013599, 13.608716854, 13.6088323389, 13.6089478146, 13.609063281, 13.6091787381, 13.6092941861, 13.6094096248, 13.6095250542, 13.6096404744, 13.6097558854, 13.6098712872, 13.6099866797, 13.610102063, 13.6102174371, 13.6103328019, 13.6104481575, 13.6105635039, 13.6106788411, 13.6107941691, 13.6109094878, 13.6110247973, 13.6111400976, 13.6112553887, 13.6113706706, 13.6114859432, 13.6116012067, 13.6117164609, 13.611831706, 13.6119469418, 13.6120621685, 13.6121773859, 13.6122925941, 13.6124077931, 13.612522983, 13.6126381636, 13.612753335, 13.6128684973, 13.6129836503, 13.6130987942, 13.6132139289, 13.6133290544, 13.6134441707, 13.6135592778, 13.6136743757, 13.6137894645, 13.613904544, 13.6140196144, 13.6141346757, 13.6142497277, 13.6143647706, 13.6144798042, 13.6145948288, 13.6147098441, 13.6148248503, 13.6149398473, 13.6150548352, 13.6151698138, 13.6152847834, 13.6153997437, 13.6155146949, 13.615629637, 13.6157445699, 13.6158594936, 13.6159744082, 13.6160893136, 13.6162042099, 13.616319097, 13.616433975, 13.6165488438, 13.6166637035, 13.616778554, 13.6168933954, 13.6170082277, 13.6171230508, 13.6172378647, 13.6173526696, 13.6174674653, 13.6175822519, 13.6176970293, 13.6178117976, 13.6179265568, 13.6180413069, 13.6181560478, 13.6182707796, 13.6183855023, 13.6185002158, 13.6186149203, 13.6187296156, 13.6188443018, 13.6189589788, 13.6190736468, 13.6191883057, 13.6193029554, 13.619417596, 13.6195322276, 13.61964685, 13.6197614633, 13.6198760675, 13.6199906626, 13.6201052486, 13.6202198255, 13.6203343933, 13.620448952, 13.6205635016, 13.6206780421, 13.6207925736, 13.6209070959, 13.6210216091, 13.6211361133, 13.6212506083, 13.6213650943, 13.6214795712, 13.621594039, 13.6217084977, 13.6218229474, 13.621937388, 13.6220518195, 13.6221662419, 13.6222806552, 13.6223950595, 13.6225094547, 13.6226238408, 13.6227382179, 13.6228525859, 13.6229669448, 13.6230812947, 13.6231956355, 13.6233099672, 13.6234242899, 13.6235386035, 13.6236529081, 13.6237672036, 13.62388149, 13.6239957674, 13.6241100358, 13.6242242951, 13.6243385453, 13.6244527865, 13.6245670187, 13.6246812418, 13.6247954559, 13.6249096609, 13.6250238569, 13.6251380438, 13.6252522217, 13.6253663906, 13.6254805505, 13.6255947013, 13.6257088431, 13.6258229758, 13.6259370995, 13.6260512142, 13.6261653199, 13.6262794166, 13.6263935042, 13.6265075828, 13.6266216524, 13.6267357129, 13.6268497645, 13.626963807, 13.6270778405, 13.627191865, 13.6273058805, 13.627419887, 13.6275338845, 13.6276478729, 13.6277618524, 13.6278758229, 13.6279897843, 13.6281037368, 13.6282176802, 13.6283316147, 13.6284455401, 13.6285594566, 13.6286733641, 13.6287872625, 13.628901152, 13.6290150325, 13.629128904, 13.6292427665, 13.6293566201, 13.6294704646, 13.6295843002, 13.6296981268, 13.6298119444, 13.629925753, 13.6300395527, 13.6301533433, 13.630267125, 13.6303808978, 13.6304946615, 13.6306084163, 13.6307221621, 13.630835899, 13.6309496268, 13.6310633457, 13.6311770557, 13.6312907567, 13.6314044487, 13.6315181318, 13.6316318059, 13.6317454711, 13.6318591273, 13.6319727745, 13.6320864128, 13.6322000422, 13.6323136626, 13.632427274, 13.6325408765, 13.6326544701, 13.6327680547, 13.6328816304, 13.6329951971, 13.6331087549, 13.6332223038, 13.6333358437, 13.6334493747, 13.6335628968, 13.6336764099, 13.6337899141, 13.6339034093, 13.6340168957, 13.6341303731, 13.6342438416, 13.6343573011, 13.6344707518, 13.6345841935, 13.6346976263, 13.6348110502, 13.6349244651, 13.6350378712, 13.6351512683, 13.6352646565, 13.6353780359, 13.6354914063, 13.6356047677, 13.6357181203, 13.635831464, 13.6359447988, 13.6360581247, 13.6361714416, 13.6362847497, 13.6363980489, 13.6365113392, 13.6366246205, 13.636737893, 13.6368511566, 13.6369644113, 13.6370776571, 13.6371908941, 13.6373041221, 13.6374173413, 13.6375305515, 13.6376437529, 13.6377569454, 13.637870129, 13.6379833038, 13.6380964696, 13.6382096266, 13.6383227747, 13.638435914, 13.6385490444, 13.6386621659, 13.6387752785, 13.6388883823, 13.6390014771, 13.6391145632, 13.6392276403, 13.6393407087, 13.6394537681, 13.6395668187, 13.6396798604, 13.6397928933, 13.6399059173, 13.6400189325, 13.6401319388, 13.6402449362, 13.6403579248, 13.6404709046, 13.6405838755, 13.6406968376, 13.6408097908, 13.6409227352, 13.6410356707, 13.6411485974, 13.6412615153, 13.6413744243, 13.6414873245, 13.6416002158, 13.6417130984, 13.641825972, 13.6419388369, 13.6420516929, 13.6421645401, 13.6422773785, 13.6423902081, 13.6425030288, 13.6426158407, 13.6427286438, 13.642841438, 13.6429542235, 13.6430670001, 13.6431797679, 13.6432925269, 13.6434052771, 13.6435180185, 13.6436307511, 13.6437434748, 13.6438561898, 13.6439688959, 13.6440815933, 13.6441942818, 13.6443069615, 13.6444196325, 13.6445322946, 13.644644948, 13.6447575925, 13.6448702283, 13.6449828552, 13.6450954734, 13.6452080828, 13.6453206834, 13.6454332752, 13.6455458582, 13.6456584324, 13.6457709979, 13.6458835545, 13.6459961024, 13.6461086415, 13.6462211718, 13.6463336934, 13.6464462062, 13.6465587102, 13.6466712054, 13.6467836918, 13.6468961695, 13.6470086384, 13.6471210986, 13.64723355, 13.6473459926, 13.6474584265, 13.6475708516, 13.6476832679, 13.6477956755, 13.6479080743, 13.6480204643, 13.6481328457, 13.6482452182, 13.648357582, 13.6484699371, 13.6485822834, 13.6486946209, 13.6488069497, 13.6489192698, 13.6490315811, 13.6491438837, 13.6492561775, 13.6493684626, 13.649480739, 13.6495930066, 13.6497052655, 13.6498175156, 13.649929757, 13.6500419897, 13.6501542137, 13.6502664289, 13.6503786354, 13.6504908332, 13.6506030222, 13.6507152025, 13.6508273741, 13.650939537, 13.6510516912, 13.6511638366, 13.6512759733, 13.6513881014, 13.6515002207, 13.6516123312, 13.6517244331, 13.6518365263, 13.6519486107, 13.6520606865, 13.6521727535, 13.6522848118, 13.6523968615, 13.6525089024, 13.6526209346, 13.6527329582, 13.652844973, 13.6529569791, 13.6530689766, 13.6531809653, 13.6532929454, 13.6534049167, 13.6535168794, 13.6536288334, 13.6537407787, 13.6538527153, 13.6539646432, 13.6540765625, 13.6541884731, 13.6543003749, 13.6544122681, 13.6545241527, 13.6546360285, 13.6547478957, 13.6548597542, 13.654971604, 13.6550834452, 13.6551952777, 13.6553071015, 13.6554189167, 13.6555307232, 13.655642521, 13.6557543101, 13.6558660906, 13.6559778625, 13.6560896257, 13.6562013802, 13.6563131261, 13.6564248633, 13.6565365918, 13.6566483117, 13.656760023, 13.6568717256, 13.6569834196, 13.6570951049, 13.6572067816, 13.6573184496, 13.657430109, 13.6575417597, 13.6576534018, 13.6577650353, 13.6578766601, 13.6579882763, 13.6580998838, 13.6582114828, 13.658323073, 13.6584346547, 13.6585462277, 13.6586577921, 13.6587693479, 13.658880895, 13.6589924336, 13.6591039635, 13.6592154848, 13.6593269974, 13.6594385015, 13.6595499969, 13.6596614837, 13.6597729619, 13.6598844315, 13.6599958924, 13.6601073448, 13.6602187885, 13.6603302237, 13.6604416502, 13.6605530681, 13.6606644775, 13.6607758782, 13.6608872703, 13.6609986538, 13.6611100287, 13.6612213951, 13.6613327528, 13.6614441019, 13.6615554425, 13.6616667744, 13.6617780978, 13.6618894125, 13.6620007187, 13.6621120163, 13.6622233053, 13.6623345857, 13.6624458576, 13.6625571208, 13.6626683755, 13.6627796216, 13.6628908591, 13.6630020881, 13.6631133085, 13.6632245203, 13.6633357235, 13.6634469181, 13.6635581042, 13.6636692817, 13.6637804507, 13.6638916111, 13.6640027629, 13.6641139061, 13.6642250408, 13.664336167, 13.6644472845, 13.6645583936, 13.664669494, 13.6647805859, 13.6648916693, 13.6650027441, 13.6651138103, 13.665224868, 13.6653359172, 13.6654469578, 13.6655579898, 13.6656690134, 13.6657800283, 13.6658910348, 13.6660020326, 13.666113022, 13.6662240028, 13.6663349751, 13.6664459388, 13.666556894, 13.6666678407, 13.6667787788, 13.6668897084, 13.6670006295, 13.6671115421, 13.6672224461, 13.6673333416, 13.6674442286, 13.667555107, 13.667665977, 13.6677768384, 13.6678876913, 13.6679985357, 13.6681093715, 13.6682201989, 13.6683310177, 13.6684418281, 13.6685526299, 13.6686634232, 13.668774208, 13.6688849843, 13.6689957521, 13.6691065113, 13.6692172621, 13.6693280044, 13.6694387382, 13.6695494635, 13.6696601802, 13.6697708885, 13.6698815883, 13.6699922796, 13.6701029624, 13.6702136367, 13.6703243026, 13.6704349599, 13.6705456088, 13.6706562491, 13.670766881, 13.6708775044, 13.6709881193, 13.6710987257, 13.6712093237, 13.6713199132, 13.6714304942, 13.6715410667, 13.6716516308, 13.6717621863, 13.6718727335, 13.6719832721, 13.6720938023, 13.672204324, 13.6723148372, 13.672425342, 13.6725358383, 13.6726463261, 13.6727568055, 13.6728672764, 13.6729777389, 13.6730881929, 13.6731986385, 13.6733090756, 13.6734195042, 13.6735299244, 13.6736403361, 13.6737507394, 13.6738611343, 13.6739715207, 13.6740818986, 13.6741922681, 13.6743026292, 13.6744129818, 13.674523326, 13.6746336618, 13.6747439891, 13.6748543079, 13.6749646184, 13.6750749204, 13.675185214, 13.6752954991, 13.6754057758, 13.6755160441, 13.6756263039, 13.6757365554, 13.6758467984, 13.6759570329, 13.6760672591, 13.6761774768, 13.6762876861, 13.676397887, 13.6765080795, 13.6766182636, 13.6767284392, 13.6768386065, 13.6769487653, 13.6770589157, 13.6771690577, 13.6772791913, 13.6773893165, 13.6774994333, 13.6776095417, 13.6777196416, 13.6778297332, 13.6779398164, 13.6780498912, 13.6781599575, 13.6782700155, 13.6783800651, 13.6784901063, 13.6786001391, 13.6787101635, 13.6788201795, 13.6789301872, 13.6790401864, 13.6791501772, 13.6792601597, 13.6793701338, 13.6794800995, 13.6795900568, 13.6797000058, 13.6798099463, 13.6799198785, 13.6800298023, 13.6801397178, 13.6802496248, 13.6803595235, 13.6804694138, 13.6805792958, 13.6806891694, 13.6807990346, 13.6809088914, 13.6810187399, 13.68112858, 13.6812384118, 13.6813482352, 13.6814580502, 13.6815678569, 13.6816776552, 13.6817874452, 13.6818972268, 13.682007, 13.682116765, 13.6822265215, 13.6823362697, 13.6824460096, 13.6825557411, 13.6826654642, 13.6827751791, 13.6828848855, 13.6829945837, 13.6831042735, 13.6832139549, 13.6833236281, 13.6834332928, 13.6835429493, 13.6836525974, 13.6837622372, 13.6838718686, 13.6839814917, 13.6840911065, 13.684200713, 13.6843103111, 13.6844199009, 13.6845294824, 13.6846390556, 13.6847486204, 13.6848581769, 13.6849677251, 13.685077265, 13.6851867966, 13.6852963198, 13.6854058348, 13.6855153414, 13.6856248397, 13.6857343297, 13.6858438114, 13.6859532848, 13.6860627499, 13.6861722067, 13.6862816551, 13.6863910953, 13.6865005272, 13.6866099508, 13.686719366, 13.686828773, 13.6869381717, 13.6870475621, 13.6871569441, 13.6872663179, 13.6873756834, 13.6874850407, 13.6875943896, 13.6877037302, 13.6878130626, 13.6879223866, 13.6880317024, 13.6881410099, 13.6882503091, 13.6883596001, 13.6884688827, 13.6885781571, 13.6886874232, 13.6887966811, 13.6889059306, 13.6890151719, 13.6891244049, 13.6892336297, 13.6893428461, 13.6894520543, 13.6895612543, 13.689670446, 13.6897796294, 13.6898888045, 13.6899979714, 13.6901071301, 13.6902162804, 13.6903254225, 13.6904345564, 13.690543682, 13.6906527993, 13.6907619084, 13.6908710093, 13.6909801019, 13.6910891862, 13.6911982623, 13.6913073302, 13.6914163898, 13.6915254412, 13.6916344843, 13.6917435192, 13.6918525458, 13.6919615642, 13.6920705744, 13.6921795763, 13.69228857, 13.6923975555, 13.6925065327, 13.6926155017, 13.6927244625, 13.692833415, 13.6929423593, 13.6930512954, 13.6931602233, 13.6932691429, 13.6933780543, 13.6934869575, 13.6935958525, 13.6937047392, 13.6938136178, 13.6939224881, 13.6940313502, 13.6941402041, 13.6942490498, 13.6943578872, 13.6944667165, 13.6945755375, 13.6946843504, 13.694793155, 13.6949019514, 13.6950107397, 13.6951195197, 13.6952282915, 13.6953370551, 13.6954458105, 13.6955545578, 13.6956632968, 13.6957720276, 13.6958807503, 13.6959894647, 13.696098171, 13.696206869, 13.6963155589, 13.6964242406, 13.6965329141, 13.6966415794, 13.6967502365, 13.6968588855, 13.6969675262, 13.6970761588, 13.6971847832, 13.6972933995, 13.6974020075, 13.6975106074, 13.6976191991, 13.6977277826, 13.697836358, 13.6979449251, 13.6980534842, 13.698162035, 13.6982705777, 13.6983791122, 13.6984876386, 13.6985961567, 13.6987046668, 13.6988131686, 13.6989216623, 13.6990301479, 13.6991386253, 13.6992470945, 13.6993555556, 13.6994640085, 13.6995724533, 13.6996808899, 13.6997893184, 13.6998977387, 13.7000061509, 13.7001145549, 13.7002229508, 13.7003313385, 13.7004397181, 13.7005480896, 13.7006564529, 13.7007648081, 13.7008731551, 13.700981494, 13.7010898248, 13.7011981475, 13.701306462, 13.7014147683, 13.7015230666, 13.7016313567, 13.7017396387, 13.7018479125, 13.7019561783, 13.7020644359, 13.7021726854, 13.7022809267, 13.70238916, 13.7024973851, 13.7026056021, 13.702713811, 13.7028220118, 13.7029302044, 13.703038389, 13.7031465654, 13.7032547337, 13.703362894, 13.7034710461, 13.7035791901, 13.703687326, 13.7037954538, 13.7039035734, 13.704011685, 13.7041197885, 13.7042278839, 13.7043359712, 13.7044440504, 13.7045521215, 13.7046601845, 13.7047682394, 13.7048762862, 13.7049843249, 13.7050923555, 13.7052003781, 13.7053083925, 13.7054163989, 13.7055243972, 13.7056323874, 13.7057403695, 13.7058483435, 13.7059563095, 13.7060642673, 13.7061722171, 13.7062801588, 13.7063880925, 13.7064960181, 13.7066039356, 13.706711845, 13.7068197463, 13.7069276396, 13.7070355248, 13.707143402, 13.7072512711, 13.7073591321, 13.707466985, 13.7075748299, 13.7076826668, 13.7077904955, 13.7078983162, 13.7080061289, 13.7081139335, 13.70822173, 13.7083295185, 13.708437299, 13.7085450714, 13.7086528357, 13.708760592, 13.7088683402, 13.7089760804, 13.7090838126, 13.7091915367, 13.7092992527, 13.7094069607, 13.7095146607, 13.7096223526, 13.7097300365, 13.7098377124, 13.7099453802, 13.71005304, 13.7101606918, 13.7102683355, 13.7103759712, 13.7104835989, 13.7105912185, 13.7106988301, 13.7108064337, 13.7109140293, 13.7110216168, 13.7111291963, 13.7112367678, 13.7113443313, 13.7114518867, 13.7115594341, 13.7116669736, 13.711774505, 13.7118820284, 13.7119895437, 13.7120970511, 13.7122045504, 13.7123120418, 13.7124195251, 13.7125270004, 13.7126344678, 13.7127419271, 13.7128493784, 13.7129568217, 13.713064257, 13.7131716843, 13.7132791036, 13.7133865149, 13.7134939183, 13.7136013136, 13.7137087009, 13.7138160802, 13.7139234516, 13.7140308149, 13.7141381703, 13.7142455177, 13.7143528571, 13.7144601885, 13.7145675119, 13.7146748273, 13.7147821348, 13.7148894342, 13.7149967257, 13.7151040092, 13.7152112848, 13.7153185523, 13.7154258119, 13.7155330635, 13.7156403072, 13.7157475428, 13.7158547705, 13.7159619903, 13.716069202, 13.7161764058, 13.7162836016, 13.7163907895, 13.7164979694, 13.7166051413, 13.7167123053, 13.7168194613, 13.7169266094, 13.7170337495, 13.7171408816, 13.7172480058, 13.7173551221, 13.7174622303, 13.7175693307, 13.7176764231, 13.7177835075, 13.717890584, 13.7179976525, 13.7181047131, 13.7182117658, 13.7183188105, 13.7184258472, 13.7185328761, 13.718639897, 13.7187469099, 13.7188539149, 13.718960912, 13.7190679011, 13.7191748823, 13.7192818556, 13.7193888209, 13.7194957784, 13.7196027278, 13.7197096694, 13.719816603, 13.7199235287, 13.7200304465, 13.7201373564, 13.7202442583, 13.7203511523, 13.7204580384, 13.7205649166, 13.7206717868, 13.7207786492, 13.7208855036, 13.7209923501, 13.7210991887, 13.7212060194, 13.7213128422, 13.721419657, 13.721526464, 13.7216332631, 13.7217400542, 13.7218468375, 13.7219536128, 13.7220603802, 13.7221671398, 13.7222738914, 13.7223806352, 13.722487371, 13.722594099, 13.722700819, 13.7228075312, 13.7229142354, 13.7230209318, 13.7231276203, 13.7232343009, 13.7233409736, 13.7234476384, 13.7235542954, 13.7236609444, 13.7237675856, 13.7238742189, 13.7239808443, 13.7240874618, 13.7241940714, 13.7243006732, 13.7244072671, 13.7245138531, 13.7246204313, 13.7247270015, 13.7248335639, 13.7249401185, 13.7250466651, 13.7251532039, 13.7252597348, 13.7253662579, 13.7254727731, 13.7255792804, 13.7256857799, 13.7257922715, 13.7258987552, 13.7260052311, 13.7261116992, 13.7262181593, 13.7263246117, 13.7264310561, 13.7265374927, 13.7266439215, 13.7267503424, 13.7268567555, 13.7269631607, 13.727069558, 13.7271759475, 13.7272823292, 13.727388703, 13.727495069, 13.7276014272, 13.7277077775, 13.7278141199, 13.7279204546, 13.7280267814, 13.7281331003, 13.7282394114, 13.7283457147, 13.7284520102, 13.7285582978, 13.7286645776, 13.7287708495, 13.7288771137, 13.72898337, 13.7290896185, 13.7291958591, 13.729302092, 13.729408317, 13.7295145342, 13.7296207436, 13.7297269451, 13.7298331388, 13.7299393248, 13.7300455029, 13.7301516732, 13.7302578357, 13.7303639903, 13.7304701372, 13.7305762762, 13.7306824075, 13.7307885309, 13.7308946465, 13.7310007544, 13.7311068544, 13.7312129466, 13.731319031, 13.7314251076, 13.7315311765, 13.7316372375, 13.7317432907, 13.7318493361, 13.7319553738, 13.7320614036, 13.7321674257, 13.7322734399, 13.7323794464, 13.7324854451, 13.732591436, 13.7326974191, 13.7328033944, 13.7329093619, 13.7330153217, 13.7331212737, 13.7332272179, 13.7333331543, 13.7334390829, 13.7335450038, 13.7336509168, 13.7337568221, 13.7338627197, 13.7339686094, 13.7340744914, 13.7341803656, 13.7342862321, 13.7343920908, 13.7344979417, 13.7346037848, 13.7347096202, 13.7348154478, 13.7349212677, 13.7350270798, 13.7351328841, 13.7352386807, 13.7353444695, 13.7354502506, 13.7355560239, 13.7356617895, 13.7357675473, 13.7358732973, 13.7359790396, 13.7360847742, 13.736190501, 13.73629622, 13.7364019313, 13.7365076349, 13.7366133307, 13.7367190188, 13.7368246991, 13.7369303717, 13.7370360365, 13.7371416937, 13.737247343, 13.7373529847, 13.7374586186, 13.7375642447, 13.7376698632, 13.7377754739, 13.7378810769, 13.7379866721, 13.7380922596, 13.7381978394, 13.7383034115, 13.7384089758, 13.7385145324, 13.7386200813, 13.7387256225, 13.7388311559, 13.7389366817, 13.7390421997, 13.73914771, 13.7392532126, 13.7393587074, 13.7394641946, 13.739569674, 13.7396751458, 13.7397806098, 13.7398860661, 13.7399915147, 13.7400969556, 13.7402023888, 13.7403078143, 13.740413232, 13.7405186421, 13.7406240445, 13.7407294392, 13.7408348261, 13.7409402054, 13.741045577, 13.7411509409, 13.7412562971, 13.7413616456, 13.7414669864, 13.7415723195, 13.7416776449, 13.7417829627, 13.7418882727, 13.7419935751, 13.7420988698, 13.7422041568, 13.7423094361, 13.7424147077, 13.7425199717, 13.7426252279, 13.7427304765, 13.7428357174, 13.7429409507, 13.7430461762, 13.7431513941, 13.7432566043, 13.7433618069, 13.7434670017, 13.7435721889, 13.7436773685, 13.7437825403, 13.7438877045, 13.7439928611, 13.7440980099, 13.7442031511, 13.7443082847, 13.7444134106, 13.7445185288, 13.7446236393, 13.7447287422, 13.7448338375, 13.7449389251, 13.745044005, 13.7451490773, 13.745254142, 13.7453591989, 13.7454642483, 13.74556929, 13.745674324, 13.7457793504, 13.7458843691, 13.7459893802, 13.7460943837, 13.7461993795, 13.7463043677, 13.7464093482, 13.7465143211, 13.7466192864, 13.746724244, 13.746829194, 13.7469341364, 13.7470390711, 13.7471439982, 13.7472489176, 13.7473538295, 13.7474587337, 13.7475636303, 13.7476685192, 13.7477734005, 13.7478782742, 13.7479831403, 13.7480879988, 13.7481928496, 13.7482976928, 13.7484025284, 13.7485073564, 13.7486121767, 13.7487169895, 13.7488217946, 13.7489265921, 13.749031382, 13.7491361643, 13.749240939, 13.7493457061, 13.7494504656, 13.7495552174, 13.7496599617, 13.7497646983, 13.7498694274, 13.7499741488, 13.7500788627, 13.7501835689, 13.7502882676, 13.7503929586, 13.7504976421, 13.750602318, 13.7507069862, 13.7508116469, 13.7509163, 13.7510209455, 13.7511255834, 13.7512302137, 13.7513348364, 13.7514394515, 13.7515440591, 13.7516486591, 13.7517532514, 13.7518578362, 13.7519624135, 13.7520669831, 13.7521715452, 13.7522760996, 13.7523806466, 13.7524851859, 13.7525897176, 13.7526942418, 13.7527987584, 13.7529032675, 13.7530077689, 13.7531122628, 13.7532167492, 13.7533212279, 13.7534256991, 13.7535301628, 13.7536346189, 13.7537390674, 13.7538435083, 13.7539479417, 13.7540523675, 13.7541567858, 13.7542611965, 13.7543655997, 13.7544699953, 13.7545743833, 13.7546787638, 13.7547831368, 13.7548875022, 13.75499186, 13.7550962103, 13.7552005531, 13.7553048883, 13.7554092159, 13.755513536, 13.7556178486, 13.7557221536, 13.7558264511, 13.7559307411, 13.7560350235, 13.7561392984, 13.7562435657, 13.7563478255, 13.7564520778, 13.7565563225, 13.7566605597, 13.7567647894, 13.7568690115, 13.7569732262, 13.7570774333, 13.7571816328, 13.7572858249, 13.7573900094, 13.7574941864, 13.7575983558, 13.7577025178, 13.7578066722, 13.7579108191, 13.7580149585, 13.7581190904, 13.7582232147, 13.7583273316, 13.7584314409, 13.7585355427, 13.758639637, 13.7587437238, 13.7588478031, 13.7589518749, 13.7590559392, 13.7591599959, 13.7592640452, 13.7593680869, 13.7594721212, 13.759576148, 13.7596801672, 13.759784179, 13.7598881832, 13.75999218, 13.7600961692, 13.760200151, 13.7603041253, 13.7604080921, 13.7605120514, 13.7606160032, 13.7607199475, 13.7608238843, 13.7609278136, 13.7610317355, 13.7611356498, 13.7612395567, 13.7613434561, 13.761447348, 13.7615512324, 13.7616551094, 13.7617589789, 13.7618628409, 13.7619666954, 13.7620705424, 13.762174382, 13.7622782141, 13.7623820387, 13.7624858559, 13.7625896655, 13.7626934678, 13.7627972625, 13.7629010498, 13.7630048296, 13.7631086019, 13.7632123668, 13.7633161242, 13.7634198742, 13.7635236167, 13.7636273517, 13.7637310793, 13.7638347994, 13.7639385121, 13.7640422173, 13.7641459151, 13.7642496054, 13.7643532882, 13.7644569636, 13.7645606316, 13.7646642921, 13.7647679451, 13.7648715907, 13.7649752289, 13.7650788596, 13.7651824829, 13.7652860987, 13.7653897071, 13.7654933081, 13.7655969016, 13.7657004877, 13.7658040663, 13.7659076375, 13.7660112013, 13.7661147576, 13.7662183065, 13.766321848, 13.766425382, 13.7665289086, 13.7666324278, 13.7667359395, 13.7668394439, 13.7669429408, 13.7670464302, 13.7671499123, 13.7672533869, 13.7673568541, 13.7674603139, 13.7675637663, 13.7676672112, 13.7677706488, 13.7678740789, 13.7679775016, 13.7680809169, 13.7681843248, 13.7682877252, 13.7683911183, 13.768494504, 13.7685978822, 13.768701253, 13.7688046165, 13.7689079725, 13.7690113211, 13.7691146623, 13.7692179961, 13.7693213225, 13.7694246416, 13.7695279532, 13.7696312574, 13.7697345542, 13.7698378436, 13.7699411257, 13.7700444003, 13.7701476675, 13.7702509274, 13.7703541799, 13.7704574249, 13.7705606626, 13.7706638929, 13.7707671158, 13.7708703314, 13.7709735395, 13.7710767403, 13.7711799336, 13.7712831196, 13.7713862983, 13.7714894695, 13.7715926334, 13.7716957899, 13.771798939, 13.7719020807, 13.7720052151, 13.7721083421, 13.7722114617, 13.7723145739, 13.7724176788, 13.7725207763, 13.7726238665, 13.7727269492, 13.7728300247, 13.7729330927, 13.7730361534, 13.7731392067, 13.7732422527, 13.7733452913, 13.7734483225, 13.7735513464, 13.773654363, 13.7737573721, 13.773860374, 13.7739633684, 13.7740663556, 13.7741693353, 13.7742723077, 13.7743752728, 13.7744782305, 13.7745811809, 13.7746841239, 13.7747870596, 13.7748899879, 13.7749929089, 13.7750958226, 13.7751987289, 13.7753016279, 13.7754045195, 13.7755074038, 13.7756102808, 13.7757131504, 13.7758160127, 13.7759188676, 13.7760217153, 13.7761245555, 13.7762273885, 13.7763302141, 13.7764330324, 13.7765358434, 13.7766386471, 13.7767414434, 13.7768442324, 13.7769470141, 13.7770497884, 13.7771525555, 13.7772553152, 13.7773580676, 13.7774608127, 13.7775635504, 13.7776662809, 13.777769004, 13.7778717198, 13.7779744283, 13.7780771295, 13.7781798234, 13.77828251, 13.7783851893, 13.7784878612, 13.7785905259, 13.7786931832, 13.7787958333, 13.778898476, 13.7790011114, 13.7791037396, 13.7792063604, 13.779308974, 13.7794115802, 13.7795141791, 13.7796167708, 13.7797193551, 13.7798219322, 13.779924502, 13.7800270644, 13.7801296196, 13.7802321675, 13.7803347081, 13.7804372414, 13.7805397675, 13.7806422862, 13.7807447977, 13.7808473019, 13.7809497987, 13.7810522884, 13.7811547707, 13.7812572457, 13.7813597135, 13.781462174, 13.7815646272, 13.7816670732, 13.7817695119, 13.7818719433, 13.7819743674, 13.7820767842, 13.7821791938, 13.7822815961, 13.7823839912, 13.782486379, 13.7825887595, 13.7826911327, 13.7827934987, 13.7828958575, 13.7829982089, 13.7831005531, 13.7832028901, 13.7833052197, 13.7834075422, 13.7835098573, 13.7836121653, 13.7837144659, 13.7838167593, 13.7839190455, 13.7840213244, 13.784123596, 13.7842258604, 13.7843281176, 13.7844303675, 13.7845326101, 13.7846348456, 13.7847370737, 13.7848392947, 13.7849415083, 13.7850437148, 13.785145914, 13.7852481059, 13.7853502907, 13.7854524682, 13.7855546384, 13.7856568014, 13.7857589572, 13.7858611058, 13.7859632471, 13.7860653812, 13.786167508, 13.7862696276, 13.78637174, 13.7864738452, 13.7865759432, 13.7866780339, 13.7867801174, 13.7868821937, 13.7869842627, 13.7870863246, 13.7871883792, 13.7872904266, 13.7873924667, 13.7874944997, 13.7875965254, 13.787698544, 13.7878005553, 13.7879025594, 13.7880045563, 13.788106546, 13.7882085284, 13.7883105037, 13.7884124718, 13.7885144326, 13.7886163863, 13.7887183327, 13.7888202719, 13.788922204, 13.7890241288, 13.7891260464, 13.7892279569, 13.7893298601, 13.7894317561, 13.789533645, 13.7896355266, 13.7897374011, 13.7898392683, 13.7899411284, 13.7900429813, 13.7901448269, 13.7902466654, 13.7903484968, 13.7904503209, 13.7905521378, 13.7906539476, 13.7907557501, 13.7908575455, 13.7909593337, 13.7910611147, 13.7911628886, 13.7912646552, 13.7913664147, 13.791468167, 13.7915699121, 13.7916716501, 13.7917733809, 13.7918751045, 13.7919768209, 13.7920785302, 13.7921802323, 13.7922819272, 13.7923836149, 13.7924852955, 13.7925869689, 13.7926886352, 13.7927902943, 13.7928919462, 13.792993591, 13.7930952286, 13.7931968591, 13.7932984824, 13.7934000985, 13.7935017075, 13.7936033093, 13.7937049039, 13.7938064915, 13.7939080718, 13.794009645, 13.7941112111, 13.79421277, 13.7943143217, 13.7944158664, 13.7945174038, 13.7946189341, 13.7947204573, 13.7948219733, 13.7949234822, 13.795024984, 13.7951264786, 13.795227966, 13.7953294464, 13.7954309195, 13.7955323856, 13.7956338445, 13.7957352963, 13.7958367409, 13.7959381784, 13.7960396088, 13.7961410321, 13.7962424482, 13.7963438572, 13.7964452591, 13.7965466538, 13.7966480414, 13.7967494219, 13.7968507953, 13.7969521615, 13.7970535206, 13.7971548726, 13.7972562175, 13.7973575553, 13.7974588859, 13.7975602094, 13.7976615259, 13.7977628352, 13.7978641373, 13.7979654324, 13.7980667204, 13.7981680012, 13.7982692749, 13.7983705416, 13.7984718011, 13.7985730535, 13.7986742988, 13.798775537, 13.7988767681, 13.7989779921, 13.799079209, 13.7991804188, 13.7992816215, 13.7993828171, 13.7994840056, 13.799585187, 13.7996863613, 13.7997875285, 13.7998886887, 13.7999898417, 13.8000909876, 13.8001921265, 13.8002932582, 13.8003943829, 13.8004955005, 13.800596611, 13.8006977144, 13.8007988107, 13.8008998999, 13.8010009821, 13.8011020571, 13.8012031251, 13.801304186, 13.8014052399, 13.8015062866, 13.8016073263, 13.8017083589, 13.8018093844, 13.8019104029, 13.8020114143, 13.8021124186, 13.8022134158, 13.802314406, 13.8024153891, 13.8025163651, 13.8026173341, 13.802718296, 13.8028192508, 13.8029201986, 13.8030211393, 13.8031220729, 13.8032229995, 13.803323919, 13.8034248315, 13.8035257369, 13.8036266353, 13.8037275266, 13.8038284108, 13.803929288, 13.8040301581, 13.8041310212, 13.8042318772, 13.8043327262, 13.8044335681, 13.804534403, 13.8046352308, 13.8047360516, 13.8048368654, 13.8049376721, 13.8050384717, 13.8051392643, 13.8052400499, 13.8053408284, 13.8054415999, 13.8055423644, 13.8056431218, 13.8057438722, 13.8058446155, 13.8059453518, 13.8060460811, 13.8061468033, 13.8062475185, 13.8063482267, 13.8064489279, 13.806549622, 13.8066503091, 13.8067509891, 13.8068516622, 13.8069523282, 13.8070529872, 13.8071536392, 13.8072542841, 13.8073549221, 13.807455553, 13.8075561769, 13.8076567937, 13.8077574036, 13.8078580064, 13.8079586023, 13.8080591911, 13.8081597729, 13.8082603477, 13.8083609154, 13.8084614762, 13.80856203, 13.8086625767, 13.8087631165, 13.8088636492, 13.8089641749, 13.8090646936, 13.8091652054, 13.8092657101, 13.8093662078, 13.8094666985, 13.8095671823, 13.809667659, 13.8097681287, 13.8098685914, 13.8099690472, 13.8100694959, 13.8101699377, 13.8102703724, 13.8103708002, 13.810471221, 13.8105716347, 13.8106720415, 13.8107724413, 13.8108728342, 13.81097322, 13.8110735989, 13.8111739707, 13.8112743356, 13.8113746935, 13.8114750444, 13.8115753884, 13.8116757253, 13.8117760553, 13.8118763783, 13.8119766944, 13.8120770034, 13.8121773055, 13.8122776006, 13.8123778888, 13.8124781699, 13.8125784441, 13.8126787114, 13.8127789716, 13.8128792249, 13.8129794713, 13.8130797106, 13.813179943, 13.8132801685, 13.8133803869, 13.8134805984, 13.813580803, 13.8136810006, 13.8137811912, 13.8138813749, 13.8139815516, 13.8140817214, 13.8141818842, 13.81428204, 13.814382189, 13.8144823309, 13.8145824659, 13.814682594, 13.8147827151, 13.8148828292, 13.8149829364, 13.8150830367, 13.81518313, 13.8152832164, 13.8153832958, 13.8154833683, 13.8155834339, 13.8156834925, 13.8157835441, 13.8158835889, 13.8159836267, 13.8160836575, 13.8161836814, 13.8162836984, 13.8163837085, 13.8164837116, 13.8165837078, 13.816683697, 13.8167836794, 13.8168836548, 13.8169836233, 13.8170835848, 13.8171835394, 13.8172834871, 13.8173834279, 13.8174833617, 13.8175832887, 13.8176832087, 13.8177831218, 13.8178830279, 13.8179829272, 13.8180828195, 13.8181827049, 13.8182825835, 13.818382455, 13.8184823197, 13.8185821775, 13.8186820283, 13.8187818723, 13.8188817093, 13.8189815394, 13.8190813626, 13.819181179, 13.8192809884, 13.8193807909, 13.8194805865, 13.8195803752, 13.8196801569, 13.8197799318, 13.8198796998, 13.8199794609, 13.8200792151, 13.8201789624, 13.8202787028, 13.8203784363, 13.8204781629, 13.8205778827, 13.8206775955, 13.8207773014, 13.8208770005, 13.8209766926, 13.8210763779, 13.8211760563, 13.8212757278, 13.8213753924, 13.8214750501, 13.8215747009, 13.8216743449, 13.821773982, 13.8218736122, 13.8219732355, 13.8220728519, 13.8221724615, 13.8222720642, 13.82237166, 13.8224712489, 13.822570831, 13.8226704061, 13.8227699744, 13.8228695359, 13.8229690905, 13.8230686382, 13.823168179, 13.8232677129, 13.82336724, 13.8234667603, 13.8235662736, 13.8236657801, 13.8237652798, 13.8238647726, 13.8239642585, 13.8240637375, 13.8241632097, 13.8242626751, 13.8243621336, 13.8244615852, 13.82456103, 13.8246604679, 13.824759899, 13.8248593232, 13.8249587405, 13.825058151, 13.8251575547, 13.8252569515, 13.8253563415, 13.8254557246, 13.8255551009, 13.8256544703, 13.8257538329, 13.8258531886, 13.8259525375, 13.8260518796, 13.8261512148, 13.8262505432, 13.8263498647, 13.8264491794, 13.8265484873, 13.8266477883, 13.8267470825, 13.8268463699, 13.8269456504, 13.8270449241, 13.827144191, 13.827243451, 13.8273427042, 13.8274419506, 13.8275411902, 13.8276404229, 13.8277396488, 13.8278388679, 13.8279380801, 13.8280372856, 13.8281364842, 13.828235676, 13.828334861, 13.8284340391, 13.8285332105, 13.828632375, 13.8287315327, 13.8288306836, 13.8289298277, 13.8290289649, 13.8291280954, 13.829227219, 13.8293263358, 13.8294254459, 13.8295245491, 13.8296236455, 13.8297227351, 13.8298218179, 13.8299208939, 13.8300199631, 13.8301190254, 13.830218081, 13.8303171298, 13.8304161718, 13.830515207, 13.8306142354, 13.830713257, 13.8308122717, 13.8309112797, 13.8310102809, 13.8311092754, 13.831208263, 13.8313072438, 13.8314062178, 13.8315051851, 13.8316041455, 13.8317030992, 13.8318020461, 13.8319009862, 13.8319999195, 13.832098846, 13.8321977658, 13.8322966787, 13.8323955849, 13.8324944843, 13.832593377, 13.8326922628, 13.8327911419, 13.8328900142, 13.8329888797, 13.8330877384, 13.8331865904, 13.8332854356, 13.833384274, 13.8334831057, 13.8335819305, 13.8336807487, 13.83377956, 13.8338783646, 13.8339771624, 13.8340759534, 13.8341747377, 13.8342735152, 13.834372286, 13.83447105, 13.8345698072, 13.8346685577, 13.8347673014, 13.8348660384, 13.8349647686, 13.835063492, 13.8351622087, 13.8352609186, 13.8353596218, 13.8354583182, 13.8355570079, 13.8356556908, 13.835754367, 13.8358530364, 13.8359516991, 13.8360503551, 13.8361490042, 13.8362476467, 13.8363462824, 13.8364449113, 13.8365435336, 13.836642149, 13.8367407578, 13.8368393597, 13.836937955, 13.8370365435, 13.8371351253, 13.8372337003, 13.8373322686, 13.8374308302, 13.8375293851, 13.8376279332, 13.8377264745, 13.8378250092, 13.8379235371, 13.8380220583, 13.8381205728, 13.8382190805, 13.8383175815, 13.8384160758, 13.8385145634, 13.8386130442, 13.8387115183, 13.8388099857, 13.8389084464, 13.8390069003, 13.8391053476, 13.8392037881, 13.8393022219, 13.839400649, 13.8394990694, 13.839597483, 13.83969589, 13.8397942902, 13.8398926837, 13.8399910705, 13.8400894506, 13.840187824, 13.8402861907, 13.8403845507, 13.840482904, 13.8405812506, 13.8406795904, 13.8407779236, 13.8408762501, 13.8409745698, 13.8410728829, 13.8411711892, 13.8412694889, 13.8413677819, 13.8414660682, 13.8415643477, 13.8416626206, 13.8417608868, 13.8418591463, 13.8419573991, 13.8420556452, 13.8421538846, 13.8422521174, 13.8423503434, 13.8424485628, 13.8425467754, 13.8426449814, 13.8427431807, 13.8428413733, 13.8429395593, 13.8430377385, 13.8431359111, 13.843234077, 13.8433322362, 13.8434303888, 13.8435285346, 13.8436266738, 13.8437248063, 13.8438229321, 13.8439210513, 13.8440191638, 13.8441172696, 13.8442153687, 13.8443134612, 13.844411547, 13.8445096261, 13.8446076986, 13.8447057644, 13.8448038235, 13.844901876, 13.8449999218, 13.845097961, 13.8451959935, 13.8452940193, 13.8453920384, 13.8454900509, 13.8455880568, 13.845686056, 13.8457840485, 13.8458820344, 13.8459800136, 13.8460779862, 13.8461759521, 13.8462739113, 13.846371864, 13.8464698099, 13.8465677492, 13.8466656819, 13.8467636079, 13.8468615273, 13.84695944, 13.8470573461, 13.8471552455, 13.8472531383, 13.8473510245, 13.847448904, 13.8475467769, 13.8476446431, 13.8477425027, 13.8478403556, 13.8479382019, 13.8480360416, 13.8481338747, 13.8482317011, 13.8483295209, 13.848427334, 13.8485251405, 13.8486229404, 13.8487207337, 13.8488185203, 13.8489163003, 13.8490140737, 13.8491118404, 13.8492096006, 13.8493073541, 13.8494051009, 13.8495028412, 13.8496005748, 13.8496983019, 13.8497960222, 13.849893736, 13.8499914432, 13.8500891437, 13.8501868376, 13.850284525, 13.8503822057, 13.8504798797, 13.8505775472, 13.8506752081, 13.8507728623, 13.85087051, 13.850968151, 13.8510657854, 13.8511634132, 13.8512610344, 13.851358649, 13.851456257, 13.8515538584, 13.8516514532, 13.8517490414, 13.851846623, 13.851944198, 13.8520417664, 13.8521393282, 13.8522368834, 13.852334432, 13.852431974, 13.8525295094, 13.8526270382, 13.8527245604, 13.8528220761, 13.8529195851, 13.8530170876, 13.8531145834, 13.8532120727, 13.8533095554, 13.8534070315, 13.853504501, 13.853601964, 13.8536994203, 13.8537968701, 13.8538943132, 13.8539917498, 13.8540891799, 13.8541866033, 13.8542840202, 13.8543814305, 13.8544788342, 13.8545762313, 13.8546736219, 13.8547710058, 13.8548683833, 13.8549657541, 13.8550631184, 13.8551604761, 13.8552578272, 13.8553551718, 13.8554525097, 13.8555498412, 13.855647166, 13.8557444843, 13.855841796, 13.8559391012, 13.8560363998, 13.8561336919, 13.8562309773, 13.8563282563, 13.8564255286, 13.8565227944, 13.8566200537, 13.8567173064, 13.8568145525, 13.8569117921, 13.8570090251, 13.8571062516, 13.8572034715, 13.8573006849, 13.8573978917, 13.857495092, 13.8575922857, 13.8576894729, 13.8577866535, 13.8578838276, 13.8579809951, 13.8580781561, 13.8581753106, 13.8582724585, 13.8583695999, 13.8584667347, 13.858563863, 13.8586609847, 13.8587580999, 13.8588552086, 13.8589523108, 13.8590494064, 13.8591464954, 13.859243578, 13.859340654, 13.8594377234, 13.8595347864, 13.8596318428, 13.8597288927, 13.859825936, 13.8599229729, 13.8600200032, 13.8601170269, 13.8602140442, 13.8603110549, 13.8604080591, 13.8605050568, 13.860602048, 13.8606990326, 13.8607960107, 13.8608929823, 13.8609899474, 13.861086906, 13.861183858, 13.8612808036, 13.8613777426, 13.8614746751, 13.8615716011, 13.8616685206, 13.8617654336, 13.8618623401, 13.86195924, 13.8620561335, 13.8621530204, 13.8622499009, 13.8623467748, 13.8624436422, 13.8625405031, 13.8626373576, 13.8627342055, 13.8628310469, 13.8629278818, 13.8630247102, 13.8631215322, 13.8632183476, 13.8633151565, 13.8634119589, 13.8635087549, 13.8636055443, 13.8637023273, 13.8637991037, 13.8638958737, 13.8639926372, 13.8640893942, 13.8641861447, 13.8642828887, 13.8643796262, 13.8644763572, 13.8645730818, 13.8646697998, 13.8647665114, 13.8648632165, 13.8649599151, 13.8650566073, 13.8651532929, 13.8652499721, 13.8653466448, 13.865443311, 13.8655399708, 13.8656366241, 13.8657332709, 13.8658299112, 13.865926545, 13.8660231724, 13.8661197933, 13.8662164077, 13.8663130157, 13.8664096172, 13.8665062122, 13.8666028008, 13.8666993829, 13.8667959585, 13.8668925277, 13.8669890904, 13.8670856466, 13.8671821964, 13.8672787397, 13.8673752766, 13.867471807, 13.8675683309, 13.8676648484, 13.8677613594, 13.867857864, 13.8679543621, 13.8680508537, 13.868147339, 13.8682438177, 13.86834029, 13.8684367559, 13.8685332153, 13.8686296682, 13.8687261147, 13.8688225548, 13.8689189884, 13.8690154156, 13.8691118363, 13.8692082506, 13.8693046584, 13.8694010598, 13.8694974547, 13.8695938432, 13.8696902253, 13.8697866009, 13.8698829701, 13.8699793329, 13.8700756892, 13.8701720391, 13.8702683826, 13.8703647196, 13.8704610502, 13.8705573743, 13.8706536921, 13.8707500033, 13.8708463082, 13.8709426066, 13.8710388987, 13.8711351842, 13.8712314634, 13.8713277361, 13.8714240024, 13.8715202623, 13.8716165158, 13.8717127628, 13.8718090035, 13.8719052377, 13.8720014654, 13.8720976868, 13.8721939018, 13.8722901103, 13.8723863124, 13.8724825081, 13.8725786974, 13.8726748803, 13.8727710567, 13.8728672268, 13.8729633904, 13.8730595477, 13.8731556985, 13.8732518429, 13.8733479809, 13.8734441125, 13.8735402377, 13.8736363565, 13.8737324689, 13.8738285749, 13.8739246745, 13.8740207677, 13.8741168544, 13.8742129348, 13.8743090088, 13.8744050764, 13.8745011376, 13.8745971924, 13.8746932408, 13.8747892828, 13.8748853184, 13.8749813477, 13.8750773705, 13.8751733869, 13.875269397, 13.8753654006, 13.8754613979, 13.8755573888, 13.8756533733, 13.8757493514, 13.8758453232, 13.8759412885, 13.8760372475, 13.8761332, 13.8762291462, 13.8763250861, 13.8764210195, 13.8765169466, 13.8766128672, 13.8767087816, 13.8768046895, 13.876900591, 13.8769964862, 13.877092375, 13.8771882575, 13.8772841335, 13.8773800032, 13.8774758665, 13.8775717235, 13.8776675741, 13.8777634183, 13.8778592561, 13.8779550876, 13.8780509127, 13.8781467315, 13.8782425439, 13.8783383499, 13.8784341496, 13.8785299429, 13.8786257298, 13.8787215104, 13.8788172846, 13.8789130525, 13.879008814, 13.8791045691, 13.8792003179, 13.8792960604, 13.8793917965, 13.8794875262, 13.8795832496, 13.8796789666, 13.8797746773, 13.8798703817, 13.8799660797, 13.8800617713, 13.8801574566, 13.8802531356, 13.8803488082, 13.8804444744, 13.8805401343, 13.8806357879, 13.8807314351, 13.880827076, 13.8809227106, 13.8810183388, 13.8811139607, 13.8812095762, 13.8813051854, 13.8814007883, 13.8814963848, 13.881591975, 13.8816875589, 13.8817831364, 13.8818787076, 13.8819742725, 13.882069831, 13.8821653832, 13.8822609291, 13.8823564687, 13.8824520019, 13.8825475288, 13.8826430494, 13.8827385636, 13.8828340715, 13.8829295732, 13.8830250684, 13.8831205574, 13.8832160401, 13.8833115164, 13.8834069864, 13.8835024501, 13.8835979075, 13.8836933585, 13.8837888033, 13.8838842417, 13.8839796738, 13.8840750996, 13.8841705191, 13.8842659323, 13.8843613392, 13.8844567397, 13.884552134, 13.8846475219, 13.8847429036, 13.8848382789, 13.8849336479, 13.8850290107, 13.8851243671, 13.8852197172, 13.885315061, 13.8854103986, 13.8855057298, 13.8856010547, 13.8856963733, 13.8857916857, 13.8858869917, 13.8859822914, 13.8860775849, 13.886172872, 13.8862681529, 13.8863634274, 13.8864586957, 13.8865539577, 13.8866492134, 13.8867444628, 13.8868397059, 13.8869349427, 13.8870301732, 13.8871253975, 13.8872206155, 13.8873158272, 13.8874110326, 13.8875062317, 13.8876014245, 13.8876966111, 13.8877917913, 13.8878869653, 13.8879821331, 13.8880772945, 13.8881724497, 13.8882675986, 13.8883627412, 13.8884578775, 13.8885530076, 13.8886481314, 13.8887432489, 13.8888383602, 13.8889334651, 13.8890285638, 13.8891236563, 13.8892187425, 13.8893138224, 13.889408896, 13.8895039634, 13.8895990245, 13.8896940794, 13.889789128, 13.8898841703, 13.8899792064, 13.8900742362, 13.8901692597, 13.890264277, 13.8903592881, 13.8904542928, 13.8905492914, 13.8906442836, 13.8907392696, 13.8908342494, 13.8909292229, 13.8910241901, 13.8911191512, 13.8912141059, 13.8913090544, 13.8914039967, 13.8914989327, 13.8915938624, 13.8916887859, 13.8917837032, 13.8918786142, 13.891973519, 13.8920684176, 13.8921633099, 13.8922581959, 13.8923530757, 13.8924479493, 13.8925428166, 13.8926376777, 13.8927325326, 13.8928273812, 13.8929222236, 13.8930170598, 13.8931118897, 13.8932067134, 13.8933015309, 13.8933963421, 13.8934911471, 13.8935859459, 13.8936807384, 13.8937755247, 13.8938703048, 13.8939650786, 13.8940598463, 13.8941546077, 13.8942493629, 13.8943441118, 13.8944388546, 13.8945335911, 13.8946283214, 13.8947230455, 13.8948177633, 13.8949124749, 13.8950071804, 13.8951018796, 13.8951965726, 13.8952912593, 13.8953859399, 13.8954806142, 13.8955752824, 13.8956699443, 13.8957646, 13.8958592495, 13.8959538928, 13.8960485299, 13.8961431608, 13.8962377854, 13.8963324039, 13.8964270162, 13.8965216222, 13.8966162221, 13.8967108157, 13.8968054032, 13.8968999844, 13.8969945595, 13.8970891283, 13.897183691, 13.8972782474, 13.8973727977, 13.8974673417, 13.8975618796, 13.8976564113, 13.8977509367, 13.897845456, 13.8979399691, 13.898034476, 13.8981289767, 13.8982234712, 13.8983179595, 13.8984124417, 13.8985069176, 13.8986013874, 13.898695851, 13.8987903084, 13.8988847596, 13.8989792046, 13.8990736435, 13.8991680761, 13.8992625026, 13.8993569229, 13.899451337, 13.899545745, 13.8996401468, 13.8997345424, 13.8998289318, 13.899923315, 13.9000176921, 13.900112063, 13.9002064277, 13.9003007862, 13.9003951386, 13.9004894848, 13.9005838249, 13.9006781587, 13.9007724864, 13.900866808, 13.9009611233, 13.9010554326, 13.9011497356, 13.9012440325, 13.9013383232, 13.9014326077, 13.9015268861, 13.9016211583, 13.9017154244, 13.9018096843, 13.9019039381, 13.9019981857, 13.9020924271, 13.9021866624, 13.9022808915, 13.9023751145, 13.9024693313, 13.902563542, 13.9026577465, 13.9027519449, 13.9028461371, 13.9029403231, 13.903034503, 13.9031286768, 13.9032228444, 13.9033170059, 13.9034111612, 13.9035053104, 13.9035994535, 13.9036935904, 13.9037877211, 13.9038818457, 13.9039759642, 13.9040700765, 13.9041641827, 13.9042582828, 13.9043523767, 13.9044464645, 13.9045405462, 13.9046346217, 13.904728691, 13.9048227543, 13.9049168114, 13.9050108624, 13.9051049072, 13.905198946, 13.9052929786, 13.905387005, 13.9054810254, 13.9055750396, 13.9056690476, 13.9057630496, 13.9058570454, 13.9059510351, 13.9060450187, 13.9061389962, 13.9062329675, 13.9063269328, 13.9064208919, 13.9065148448, 13.9066087917, 13.9067027325, 13.9067966671, 13.9068905956, 13.906984518, 13.9070784343, 13.9071723445, 13.9072662485, 13.9073601465, 13.9074540383, 13.907547924, 13.9076418037, 13.9077356772, 13.9078295446, 13.9079234059, 13.9080172611, 13.9081111101, 13.9082049531, 13.90829879, 13.9083926208, 13.9084864454, 13.908580264, 13.9086740765, 13.9087678828, 13.9088616831, 13.9089554773, 13.9090492654, 13.9091430473, 13.9092368232, 13.909330593, 13.9094243567, 13.9095181143, 13.9096118658, 13.9097056112, 13.9097993505, 13.9098930838, 13.9099868109, 13.910080532, 13.9101742469, 13.9102679558, 13.9103616586, 13.9104553553, 13.9105490459, 13.9106427305, 13.9107364089, 13.9108300813, 13.9109237476, 13.9110174078, 13.9111110619, 13.91120471, 13.9112983519, 13.9113919878, 13.9114856177, 13.9115792414, 13.9116728591, 13.9117664707, 13.9118600762, 13.9119536756, 13.912047269, 13.9121408563, 13.9122344375, 13.9123280127, 13.9124215818, 13.9125151448, 13.9126087018, 13.9127022526, 13.9127957975, 13.9128893362, 13.9129828689, 13.9130763956, 13.9131699161, 13.9132634306, 13.9133569391, 13.9134504415, 13.9135439378, 13.913637428, 13.9137309123, 13.9138243904, 13.9139178625, 13.9140113285, 13.9141047885, 13.9141982425, 13.9142916903, 13.9143851322, 13.9144785679, 13.9145719976, 13.9146654213, 13.9147588389, 13.9148522505, 13.914945656, 13.9150390555, 13.915132449, 13.9152258363, 13.9153192177, 13.915412593, 13.9155059622, 13.9155993254, 13.9156926826, 13.9157860337, 13.9158793788, 13.9159727179, 13.9160660509, 13.9161593779, 13.9162526988, 13.9163460137, 13.9164393226, 13.9165326254, 13.9166259222, 13.916719213, 13.9168124977, 13.9169057764, 13.9169990491, 13.9170923157, 13.9171855763, 13.9172788309, 13.9173720795, 13.917465322, 13.9175585585, 13.917651789, 13.9177450134, 13.9178382319, 13.9179314443, 13.9180246507, 13.918117851, 13.9182110454, 13.9183042337, 13.918397416, 13.9184905923, 13.9185837626, 13.9186769268, 13.9187700851, 13.9188632373, 13.9189563835, 13.9190495237, 13.9191426579, 13.919235786, 13.9193289082, 13.9194220243, 13.9195151345, 13.9196082386, 13.9197013367, 13.9197944288, 13.9198875149, 13.919980595, 13.9200736691, 13.9201667372, 13.9202597993, 13.9203528554, 13.9204459055, 13.9205389496, 13.9206319877, 13.9207250198, 13.9208180458, 13.9209110659, 13.92100408, 13.9210970881, 13.9211900902, 13.9212830863, 13.9213760764, 13.9214690605, 13.9215620387, 13.9216550108, 13.9217479769, 13.9218409371, 13.9219338912, 13.9220268394, 13.9221197816, 13.9222127178, 13.922305648, 13.9223985722, 13.9224914905, 13.9225844027, 13.922677309, 13.9227702093, 13.9228631036, 13.9229559919, 13.9230488743, 13.9231417506, 13.923234621, 13.9233274854, 13.9234203439, 13.9235131963, 13.9236060428, 13.9236988833, 13.9237917178, 13.9238845464, 13.923977369, 13.9240701856, 13.9241629962, 13.9242558009, 13.9243485996, 13.9244413923, 13.9245341791, 13.9246269599, 13.9247197347, 13.9248125036, 13.9249052665, 13.9249980234, 13.9250907744, 13.9251835194, 13.9252762585, 13.9253689916, 13.9254617187, 13.9255544399, 13.9256471551, 13.9257398643, 13.9258325676, 13.925925265, 13.9260179564, 13.9261106418, 13.9262033213, 13.9262959948, 13.9263886623, 13.926481324, 13.9265739796, 13.9266666293, 13.9267592731, 13.9268519109, 13.9269445428, 13.9270371687, 13.9271297887, 13.9272224027, 13.9273150108, 13.9274076129, 13.9275002091, 13.9275927994, 13.9276853837, 13.9277779621, 13.9278705345, 13.927963101, 13.9280556616, 13.9281482162, 13.9282407648, 13.9283333076, 13.9284258444, 13.9285183753, 13.9286109002, 13.9287034192, 13.9287959323, 13.9288884394, 13.9289809406, 13.9290734359, 13.9291659252, 13.9292584086, 13.9293508861, 13.9294433577, 13.9295358233, 13.929628283, 13.9297207368, 13.9298131847, 13.9299056266, 13.9299980626, 13.9300904927, 13.9301829169, 13.9302753351, 13.9303677474, 13.9304601538, 13.9305525543, 13.9306449489, 13.9307373376, 13.9308297203, 13.9309220971, 13.931014468, 13.931106833, 13.9311991921, 13.9312915453, 13.9313838925, 13.9314762339, 13.9315685693, 13.9316608989, 13.9317532225, 13.9318455402, 13.931937852, 13.9320301579, 13.9321224579, 13.932214752, 13.9323070402, 13.9323993224, 13.9324915988, 13.9325838693, 13.9326761339, 13.9327683925, 13.9328606453, 13.9329528922, 13.9330451332, 13.9331373683, 13.9332295974, 13.9333218207, 13.9334140381, 13.9335062496, 13.9335984552, 13.933690655, 13.9337828488, 13.9338750367, 13.9339672187, 13.9340593949, 13.9341515652, 13.9342437295, 13.934335888, 13.9344280406, 13.9345201873, 13.9346123282, 13.9347044631, 13.9347965922, 13.9348887154, 13.9349808327, 13.9350729441, 13.9351650496, 13.9352571493, 13.935349243, 13.9354413309, 13.935533413, 13.9356254891, 13.9357175594, 13.9358096238, 13.9359016823, 13.9359937349, 13.9360857817, 13.9361778226, 13.9362698576, 13.9363618868, 13.93645391, 13.9365459275, 13.936637939, 13.9367299447, 13.9368219445, 13.9369139384, 13.9370059265, 13.9370979087, 13.9371898851, 13.9372818556, 13.9373738202, 13.937465779, 13.9375577319, 13.9376496789, 13.9377416201, 13.9378335554, 13.9379254849, 13.9380174085, 13.9381093262, 13.9382012381, 13.9382931442, 13.9383850443, 13.9384769387, 13.9385688271, 13.9386607098, 13.9387525865, 13.9388444575, 13.9389363225, 13.9390281818, 13.9391200351, 13.9392118827, 13.9393037243, 13.9393955602, 13.9394873902, 13.9395792143, 13.9396710326, 13.9397628451, 13.9398546517, 13.9399464525, 13.9400382474, 13.9401300365, 13.9402218197, 13.9403135971, 13.9404053687, 13.9404971345, 13.9405888944, 13.9406806484, 13.9407723967, 13.940864139, 13.9409558756, 13.9410476063, 13.9411393312, 13.9412310503, 13.9413227635, 13.9414144709, 13.9415061725, 13.9415978683, 13.9416895582, 13.9417812423, 13.9418729205, 13.941964593, 13.9420562596, 13.9421479204, 13.9422395754, 13.9423312245, 13.9424228678, 13.9425145053, 13.942606137, 13.9426977629, 13.9427893829, 13.9428809972, 13.9429726056, 13.9430642082, 13.9431558049, 13.9432473959, 13.943338981, 13.9434305604, 13.9435221339, 13.9436137016, 13.9437052635, 13.9437968196, 13.9438883699, 13.9439799143, 13.944071453, 13.9441629859, 13.9442545129, 13.9443460341, 13.9444375496, 13.9445290592, 13.944620563, 13.944712061, 13.9448035533, 13.9448950397, 13.9449865203, 13.9450779951, 13.9451694641, 13.9452609273, 13.9453523848, 13.9454438364, 13.9455352822, 13.9456267222, 13.9457181565, 13.9458095849, 13.9459010075, 13.9459924244, 13.9460838355, 13.9461752407, 13.9462666402, 13.9463580339, 13.9464494218, 13.9465408039, 13.9466321802, 13.9467235507, 13.9468149155, 13.9469062745, 13.9469976276, 13.947088975, 13.9471803166, 13.9472716525, 13.9473629825, 13.9474543068, 13.9475456252, 13.947636938, 13.9477282449, 13.947819546, 13.9479108414, 13.948002131, 13.9480934148, 13.9481846928, 13.9482759651, 13.9483672316, 13.9484584923, 13.9485497472, 13.9486409964, 13.9487322398, 13.9488234775, 13.9489147093, 13.9490059354, 13.9490971557, 13.9491883703, 13.9492795791, 13.9493707821, 13.9494619794, 13.9495531709, 13.9496443566, 13.9497355366, 13.9498267108, 13.9499178792, 13.9500090419, 13.9501001988, 13.95019135, 13.9502824954, 13.950373635, 13.9504647689, 13.950555897, 13.9506470194, 13.950738136, 13.9508292469, 13.950920352, 13.9510114514, 13.951102545, 13.9511936329, 13.951284715, 13.9513757913, 13.9514668619, 13.9515579268, 13.9516489859, 13.9517400393, 13.9518310869, 13.9519221288, 13.9520131649, 13.9521041953, 13.9521952199, 13.9522862388, 13.952377252, 13.9524682594, 13.9525592611, 13.952650257, 13.9527412472, 13.9528322316, 13.9529232104, 13.9530141833, 13.9531051506, 13.9531961121, 13.9532870679, 13.9533780179, 13.9534689622, 13.9535599008, 13.9536508336, 13.9537417608, 13.9538326821, 13.9539235978, 13.9540145077, 13.9541054119, 13.9541963104, 13.9542872031, 13.9543780901, 13.9544689714, 13.954559847, 13.9546507168, 13.954741581, 13.9548324394, 13.954923292, 13.955014139, 13.9551049802, 13.9551958157, 13.9552866455, 13.9553774696, 13.955468288, 13.9555591006, 13.9556499075, 13.9557407087, 13.9558315042, 13.955922294, 13.9560130781, 13.9561038564, 13.9561946291, 13.956285396, 13.9563761572, 13.9564669128, 13.9565576626, 13.9566484067, 13.9567391451, 13.9568298777, 13.9569206047, 13.957011326, 13.9571020416, 13.9571927514, 13.9572834556, 13.957374154, 13.9574648468, 13.9575555339, 13.9576462152, 13.9577368909, 13.9578275608, 13.9579182251, 13.9580088837, 13.9580995365, 13.9581901837, 13.9582808252, 13.9583714609, 13.958462091, 13.9585527154, 13.9586433341, 13.9587339471, 13.9588245545, 13.9589151561, 13.959005752, 13.9590963423, 13.9591869268, 13.9592775057, 13.9593680789, 13.9594586464, 13.9595492082, 13.9596397644, 13.9597303148, 13.9598208596, 13.9599113987, 13.9600019321, 13.9600924598, 13.9601829818, 13.9602734982, 13.9603640089, 13.9604545139, 13.9605450132, 13.9606355069, 13.9607259948, 13.9608164771, 13.9609069538, 13.9609974247, 13.96108789, 13.9611783496, 13.9612688035, 13.9613592518, 13.9614496944, 13.9615401313, 13.9616305626, 13.9617209882, 13.9618114081, 13.9619018223, 13.9619922309, 13.9620826339, 13.9621730311, 13.9622634227, 13.9623538086, 13.9624441889, 13.9625345635, 13.9626249325, 13.9627152957, 13.9628056534, 13.9628960053, 13.9629863516, 13.9630766923, 13.9631670273, 13.9632573566, 13.9633476803, 13.9634379983, 13.9635283107, 13.9636186174, 13.9637089185, 13.9637992139, 13.9638895037, 13.9639797878, 13.9640700663, 13.9641603391, 13.9642506063, 13.9643408678, 13.9644311237, 13.9645213739, 13.9646116185, 13.9647018574, 13.9647920907, 13.9648823184, 13.9649725404, 13.9650627567, 13.9651529675, 13.9652431726, 13.965333372, 13.9654235658, 13.965513754, 13.9656039365, 13.9656941134, 13.9657842847, 13.9658744503, 13.9659646103, 13.9660547646, 13.9661449133, 13.9662350564, 13.9663251939, 13.9664153257, 13.9665054519, 13.9665955725, 13.9666856874, 13.9667757967, 13.9668659004, 13.9669559984, 13.9670460909, 13.9671361777, 13.9672262588, 13.9673163344, 13.9674064043, 13.9674964686, 13.9675865273, 13.9676765804, 13.9677666278, 13.9678566696, 13.9679467058, 13.9680367364, 13.9681267614, 13.9682167807, 13.9683067944, 13.9683968025, 13.968486805, 13.9685768019, 13.9686667932, 13.9687567789, 13.9688467589, 13.9689367333, 13.9690267022, 13.9691166654, 13.969206623, 13.969296575, 13.9693865213, 13.9694764621, 13.9695663973, 13.9696563269, 13.9697462508, 13.9698361692, 13.9699260819, 13.9700159891, 13.9701058906, 13.9701957866, 13.9702856769, 13.9703755616, 13.9704654408, 13.9705553143, 13.9706451823, 13.9707350446, 13.9708249014, 13.9709147525, 13.9710045981, 13.971094438, 13.9711842724, 13.9712741012, 13.9713639244, 13.971453742, 13.971543554, 13.9716333604, 13.9717231612, 13.9718129564, 13.971902746, 13.9719925301, 13.9720823086, 13.9721720814, 13.9722618487, 13.9723516104, 13.9724413666, 13.9725311171, 13.9726208621, 13.9727106014, 13.9728003352, 13.9728900634, 13.9729797861, 13.9730695031, 13.9731592146, 13.9732489205, 13.9733386208, 13.9734283155, 13.9735180047, 13.9736076883, 13.9736973663, 13.9737870387, 13.9738767056, 13.9739663669, 13.9740560226, 13.9741456728, 13.9742353174, 13.9743249564, 13.9744145898, 13.9745042177, 13.97459384, 13.9746834567, 13.9747730679, 13.9748626735, 13.9749522735, 13.975041868, 13.9751314569, 13.9752210403, 13.9753106181, 13.9754001903, 13.9754897569, 13.975579318, 13.9756688736, 13.9757584236, 13.975847968, 13.9759375069, 13.9760270402, 13.9761165679, 13.9762060901, 13.9762956068, 13.9763851179, 13.9764746234, 13.9765641234, 13.9766536179, 13.9767431067, 13.9768325901, 13.9769220679, 13.9770115401, 13.9771010068, 13.9771904679, 13.9772799235, 13.9773693735, 13.977458818, 13.977548257, 13.9776376904, 13.9777271183, 13.9778165406, 13.9779059574, 13.9779953686, 13.9780847743, 13.9781741745, 13.9782635691, 13.9783529582, 13.9784423417, 13.9785317197, 13.9786210922, 13.9787104591, 13.9787998205, 13.9788891764, 13.9789785267, 13.9790678715, 13.9791572107, 13.9792465445, 13.9793358727, 13.9794251953, 13.9795145125, 13.9796038241, 13.9796931302, 13.9797824307, 13.9798717257, 13.9799610152, 13.9800502992, 13.9801395776, 13.9802288506, 13.980318118, 13.9804073798, 13.9804966362, 13.980585887, 13.9806751323, 13.9807643721, 13.9808536064, 13.9809428351, 13.9810320584, 13.9811212761, 13.9812104883, 13.981299695, 13.9813888961, 13.9814780918, 13.9815672819, 13.9816564665, 13.9817456456, 13.9818348192, 13.9819239873, 13.9820131499, 13.982102307, 13.9821914585, 13.9822806046, 13.9823697451, 13.9824588801, 13.9825480097, 13.9826371337, 13.9827262522, 13.9828153652, 13.9829044727, 13.9829935747, 13.9830826712, 13.9831717622, 13.9832608477, 13.9833499277, 13.9834390022, 13.9835280712, 13.9836171347, 13.9837061927, 13.9837952452, 13.9838842922, 13.9839733337, 13.9840623697, 13.9841514002, 13.9842404252, 13.9843294448, 13.9844184588, 13.9845074673, 13.9845964704, 13.984685468, 13.98477446, 13.9848634466, 13.9849524277, 13.9850414033, 13.9851303735, 13.9852193381, 13.9853082973, 13.9853972509, 13.9854861991, 13.9855751418, 13.985664079, 13.9857530108, 13.985841937, 13.9859308578, 13.9860197731, 13.9861086829, 13.9861975872, 13.9862864861, 13.9863753794, 13.9864642673, 13.9865531498, 13.9866420267, 13.9867308982, 13.9868197642, 13.9869086247, 13.9869974797, 13.9870863293, 13.9871751734, 13.9872640121, 13.9873528452, 13.9874416729, 13.9875304952, 13.9876193119, 13.9877081232, 13.987796929, 13.9878857294, 13.9879745243, 13.9880633137, 13.9881520977, 13.9882408762, 13.9883296492, 13.9884184168, 13.9885071789, 13.9885959356, 13.9886846868, 13.9887734325, 13.9888621728, 13.9889509076, 13.989039637, 13.9891283609, 13.9892170793, 13.9893057923, 13.9893944998, 13.9894832019, 13.9895718986, 13.9896605897, 13.9897492755, 13.9898379557, 13.9899266306, 13.9900152999, 13.9901039639, 13.9901926223, 13.9902812754, 13.9903699229, 13.9904585651, 13.9905472018, 13.990635833, 13.9907244588, 13.9908130792, 13.9909016941, 13.9909903035, 13.9910789076, 13.9911675061, 13.9912560993, 13.991344687, 13.9914332693, 13.9915218461, 13.9916104175, 13.9916989834, 13.9917875439, 13.991876099, 13.9919646486, 13.9920531929, 13.9921417316, 13.992230265, 13.9923187929, 13.9924073153, 13.9924958324, 13.992584344, 13.9926728502, 13.9927613509, 13.9928498463, 13.9929383362, 13.9930268206, 13.9931152997, 13.9932037733, 13.9932922415, 13.9933807043, 13.9934691616, 13.9935576135, 13.99364606, 13.9937345011, 13.9938229367, 13.993911367, 13.9939997918, 13.9940882112, 13.9941766252, 13.9942650337, 13.9943534369, 13.9944418346, 13.9945302269, 13.9946186138, 13.9947069953, 13.9947953713, 13.994883742, 13.9949721072, 13.995060467, 13.9951488214, 13.9952371704, 13.995325514, 13.9954138522, 13.995502185, 13.9955905124, 13.9956788343, 13.9957671509, 13.995855462, 13.9959437678, 13.9960320681, 13.996120363, 13.9962086526, 13.9962969367, 13.9963852154, 13.9964734887, 13.9965617567, 13.9966500192, 13.9967382763, 13.996826528, 13.9969147743, 13.9970030153, 13.9970912508, 13.9971794809, 13.9972677057, 13.997355925, 13.997444139, 13.9975323475, 13.9976205507, 13.9977087485, 13.9977969408, 13.9978851278, 13.9979733094, 13.9980614856, 13.9981496565, 13.9982378219, 13.9983259819, 13.9984141366, 13.9985022859, 13.9985904297, 13.9986785682, 13.9987667014, 13.9988548291, 13.9989429514, 13.9990310684, 13.99911918, 13.9992072862, 13.999295387, 13.9993834825, 13.9994715725, 13.9995596572, 13.9996477365, 13.9997358105, 13.999823879, 13.9999119422, 14.0, 14.0000880524, 14.0001760995, 14.0002641412, 14.0003521775, 14.0004402084, 14.000528234, 14.0006162542, 14.000704269, 14.0007922785, 14.0008802826, 14.0009682813, 14.0010562746, 14.0011442626, 14.0012322452, 14.0013202225, 14.0014081944, 14.0014961609, 14.0015841221, 14.0016720779, 14.0017600283, 14.0018479734, 14.0019359131, 14.0020238475, 14.0021117765, 14.0021997001, 14.0022876184, 14.0023755313, 14.0024634389, 14.0025513411, 14.002639238, 14.0027271295, 14.0028150156, 14.0029028964, 14.0029907718, 14.0030786419, 14.0031665067, 14.0032543661, 14.0033422201, 14.0034300688, 14.0035179121, 14.0036057501, 14.0036935827, 14.00378141, 14.003869232, 14.0039570486, 14.0040448598, 14.0041326657, 14.0042204663, 14.0043082615, 14.0043960514, 14.004483836, 14.0045716152, 14.004659389, 14.0047471575, 14.0048349207, 14.0049226786, 14.0050104311, 14.0050981782, 14.0051859201, 14.0052736566, 14.0053613877, 14.0054491135, 14.005536834, 14.0056245492, 14.005712259, 14.0057999635, 14.0058876627, 14.0059753565, 14.006063045, 14.0061507282, 14.006238406, 14.0063260785, 14.0064137457, 14.0065014076, 14.0065890641, 14.0066767153, 14.0067643612, 14.0068520017, 14.006939637, 14.0070272669, 14.0071148915, 14.0072025107, 14.0072901247, 14.0073777333, 14.0074653366, 14.0075529346, 14.0076405273, 14.0077281146, 14.0078156967, 14.0079032734, 14.0079908448, 14.0080784109, 14.0081659716, 14.0082535271, 14.0083410772, 14.0084286221, 14.0085161616, 14.0086036958, 14.0086912247, 14.0087787483, 14.0088662666, 14.0089537795, 14.0090412872, 14.0091287895, 14.0092162866, 14.0093037783, 14.0093912648, 14.0094787459, 14.0095662217, 14.0096536922, 14.0097411575, 14.0098286174, 14.009916072, 14.0100035213, 14.0100909653, 14.010178404, 14.0102658374, 14.0103532655, 14.0104406884, 14.0105281059, 14.0106155181, 14.010702925, 14.0107903267, 14.010877723, 14.0109651141, 14.0110524998, 14.0111398803, 14.0112272554, 14.0113146253, 14.0114019899, 14.0114893492, 14.0115767032, 14.0116640519, 14.0117513953, 14.0118387335, 14.0119260663, 14.0120133939, 14.0121007162, 14.0121880331, 14.0122753449, 14.0123626513, 14.0124499524, 14.0125372483, 14.0126245389, 14.0127118242, 14.0127991042, 14.0128863789, 14.0129736484, 14.0130609126, 14.0131481715, 14.0132354251, 14.0133226734, 14.0134099165, 14.0134971543, 14.0135843868, 14.0136716141, 14.013758836, 14.0138460527, 14.0139332642, 14.0140204703, 14.0141076712, 14.0141948668, 14.0142820572, 14.0143692422, 14.014456422, 14.0145435966, 14.0146307659, 14.0147179299, 14.0148050886, 14.0148922421, 14.0149793903, 14.0150665332, 14.0151536709, 14.0152408033, 14.0153279305, 14.0154150524, 14.015502169, 14.0155892804, 14.0156763865, 14.0157634874, 14.015850583, 14.0159376733, 14.0160247584, 14.0161118382, 14.0161989128, 14.0162859821, 14.0163730462, 14.016460105, 14.0165471585, 14.0166342068, 14.0167212499, 14.0168082877, 14.0168953202, 14.0169823475, 14.0170693696, 14.0171563864, 14.0172433979, 14.0173304042, 14.0174174053, 14.0175044011, 14.0175913917, 14.017678377, 14.0177653571, 14.0178523319, 14.0179393015, 14.0180262658, 14.0181132249, 14.0182001788, 14.0182871274, 14.0183740708, 14.018461009, 14.0185479419, 14.0186348695, 14.018721792, 14.0188087092, 14.0188956211, 14.0189825278, 14.0190694293, 14.0191563256, 14.0192432166, 14.0193301024, 14.0194169829, 14.0195038583, 14.0195907284, 14.0196775932, 14.0197644528, 14.0198513073, 14.0199381564, 14.0200250004, 14.0201118391, 14.0201986726, 14.0202855008, 14.0203723239, 14.0204591417, 14.0205459543, 14.0206327617, 14.0207195638, 14.0208063607, 14.0208931524, 14.0209799389, 14.0210667202, 14.0211534962, 14.021240267, 14.0213270326, 14.021413793, 14.0215005482, 14.0215872981, 14.0216740429, 14.0217607824, 14.0218475167, 14.0219342458, 14.0220209696, 14.0221076883, 14.0221944018, 14.02228111, 14.022367813, 14.0224545108, 14.0225412035, 14.0226278909, 14.022714573, 14.02280125, 14.0228879218, 14.0229745884, 14.0230612497, 14.0231479059, 14.0232345568, 14.0233212026, 14.0234078431, 14.0234944785, 14.0235811086, 14.0236677336, 14.0237543533, 14.0238409678, 14.0239275772, 14.0240141813, 14.0241007803, 14.024187374, 14.0242739625, 14.0243605459, 14.024447124, 14.024533697, 14.0246202648, 14.0247068273, 14.0247933847, 14.0248799369, 14.0249664839, 14.0250530257, 14.0251395623, 14.0252260937, 14.0253126199, 14.025399141, 14.0254856568, 14.0255721675, 14.0256586729, 14.0257451732, 14.0258316683, 14.0259181582, 14.026004643, 14.0260911225, 14.0261775969, 14.0262640661, 14.0263505301, 14.0264369889, 14.0265234425, 14.026609891, 14.0266963342, 14.0267827723, 14.0268692053, 14.026955633, 14.0270420556, 14.027128473, 14.0272148852, 14.0273012922, 14.0273876941, 14.0274740907, 14.0275604822, 14.0276468686, 14.0277332498, 14.0278196257, 14.0279059966, 14.0279923622, 14.0280787227, 14.028165078, 14.0282514282, 14.0283377731, 14.0284241129, 14.0285104476, 14.0285967771, 14.0286831014, 14.0287694205, 14.0288557345, 14.0289420433, 14.029028347, 14.0291146455, 14.0292009388, 14.029287227, 14.02937351, 14.0294597878, 14.0295460605, 14.029632328, 14.0297185904, 14.0298048476, 14.0298910997, 14.0299773466, 14.0300635883, 14.0301498249, 14.0302360564, 14.0303222826, 14.0304085038, 14.0304947197, 14.0305809306, 14.0306671362, 14.0307533368, 14.0308395321, 14.0309257224, 14.0310119074, 14.0310980874, 14.0311842621, 14.0312704318, 14.0313565963, 14.0314427556, 14.0315289098, 14.0316150588, 14.0317012027, 14.0317873415, 14.0318734751, 14.0319596036, 14.0320457269, 14.0321318451, 14.0322179582, 14.0323040661, 14.0323901689, 14.0324762665, 14.032562359, 14.0326484464, 14.0327345286, 14.0328206057, 14.0329066776, 14.0329927444, 14.0330788061, 14.0331648627, 14.0332509141, 14.0333369604, 14.0334230015, 14.0335090376, 14.0335950685, 14.0336810942, 14.0337671148, 14.0338531304, 14.0339391407, 14.034025146, 14.0341111461, 14.0341971411, 14.034283131, 14.0343691157, 14.0344550953, 14.0345410698, 14.0346270392, 14.0347130034, 14.0347989626, 14.0348849166, 14.0349708655, 14.0350568092, 14.0351427479, 14.0352286814, 14.0353146098, 14.0354005331, 14.0354864513, 14.0355723644, 14.0356582723, 14.0357441751, 14.0358300728, 14.0359159654, 14.0360018529, 14.0360877353, 14.0361736126, 14.0362594847, 14.0363453517, 14.0364312137, 14.0365170705, 14.0366029222, 14.0366887688, 14.0367746103, 14.0368604467, 14.036946278, 14.0370321041, 14.0371179252, 14.0372037412, 14.037289552, 14.0373753578, 14.0374611584, 14.037546954, 14.0376327444, 14.0377185298, 14.03780431, 14.0378900851, 14.0379758552, 14.0380616201, 14.03814738, 14.0382331347, 14.0383188844, 14.0384046289, 14.0384903684, 14.0385761028, 14.038661832, 14.0387475562, 14.0388332753, 14.0389189893, 14.0390046982, 14.039090402, 14.0391761007, 14.0392617943, 14.0393474829, 14.0394331663, 14.0395188447, 14.039604518, 14.0396901861, 14.0397758492, 14.0398615072, 14.0399471602, 14.040032808, 14.0401184508, 14.0402040884, 14.040289721, 14.0403753485, 14.040460971, 14.0405465883, 14.0406322006, 14.0407178077, 14.0408034098, 14.0408890069, 14.0409745988, 14.0410601857, 14.0411457675, 14.0412313442, 14.0413169158, 14.0414024824, 14.0414880439, 14.0415736003, 14.0416591516, 14.0417446979, 14.0418302391, 14.0419157752, 14.0420013063, 14.0420868323, 14.0421723532, 14.042257869, 14.0423433798, 14.0424288855, 14.0425143861, 14.0425998817, 14.0426853722, 14.0427708577, 14.042856338, 14.0429418133, 14.0430272836, 14.0431127488, 14.0431982089, 14.043283664, 14.043369114, 14.0434545589, 14.0435399988, 14.0436254336, 14.0437108633, 14.043796288, 14.0438817077, 14.0439671223, 14.0440525318, 14.0441379363, 14.0442233357, 14.0443087301, 14.0443941194, 14.0444795036, 14.0445648828, 14.044650257, 14.0447356261, 14.0448209901, 14.0449063491, 14.044991703, 14.0450770519, 14.0451623958, 14.0452477346, 14.0453330683, 14.045418397, 14.0455037207, 14.0455890393, 14.0456743529, 14.0457596614, 14.0458449649, 14.0459302633, 14.0460155567, 14.046100845, 14.0461861283, 14.0462714066, 14.0463566798, 14.046441948, 14.0465272112, 14.0466124693, 14.0466977223, 14.0467829704, 14.0468682133, 14.0469534513, 14.0470386842, 14.0471239121, 14.047209135, 14.0472943528, 14.0473795656, 14.0474647733, 14.047549976, 14.0476351737, 14.0477203664, 14.047805554, 14.0478907366, 14.0479759142, 14.0480610867, 14.0481462542, 14.0482314167, 14.0483165742, 14.0484017266, 14.048486874, 14.0485720164, 14.0486571537, 14.0487422861, 14.0488274134, 14.0489125356, 14.0489976529, 14.0490827652, 14.0491678724, 14.0492529746, 14.0493380718, 14.0494231639, 14.0495082511, 14.0495933332, 14.0496784103, 14.0497634824, 14.0498485495, 14.0499336115, 14.0500186686, 14.0501037206, 14.0501887676, 14.0502738096, 14.0503588466, 14.0504438786, 14.0505289055, 14.0506139275, 14.0506989444, 14.0507839564, 14.0508689633, 14.0509539652, 14.0510389621, 14.051123954, 14.0512089409, 14.0512939228, 14.0513788997, 14.0514638716, 14.0515488384, 14.0516338003, 14.0517187572, 14.051803709, 14.0518886559, 14.0519735978, 14.0520585346, 14.0521434665, 14.0522283933, 14.0523133152, 14.0523982321, 14.0524831439, 14.0525680508, 14.0526529527, 14.0527378495, 14.0528227414, 14.0529076283, 14.0529925102, 14.0530773871, 14.053162259, 14.0532471259, 14.0533319878, 14.0534168448, 14.0535016967, 14.0535865436, 14.0536713856, 14.0537562226, 14.0538410545, 14.0539258815, 14.0540107035, 14.0540955206, 14.0541803326, 14.0542651396, 14.0543499417, 14.0544347388, 14.0545195309, 14.054604318, 14.0546891001, 14.0547738772, 14.0548586494, 14.0549434166, 14.0550281788, 14.055112936, 14.0551976882, 14.0552824355, 14.0553671778, 14.0554519151, 14.0555366474, 14.0556213748, 14.0557060972, 14.0557908146, 14.055875527, 14.0559602345, 14.0560449369, 14.0561296344, 14.056214327, 14.0562990146, 14.0563836971, 14.0564683748, 14.0565530474, 14.0566377151, 14.0567223778, 14.0568070356, 14.0568916884, 14.0569763362, 14.057060979, 14.0571456169, 14.0572302498, 14.0573148778, 14.0573995008, 14.0574841188, 14.0575687319, 14.05765334, 14.0577379431, 14.0578225413, 14.0579071345, 14.0579917228, 14.0580763061, 14.0581608844, 14.0582454578, 14.0583300262, 14.0584145897, 14.0584991482, 14.0585837017, 14.0586682503, 14.058752794, 14.0588373327, 14.0589218664, 14.0590063952, 14.059090919, 14.0591754379, 14.0592599518, 14.0593444608, 14.0594289649, 14.0595134639, 14.0595979581, 14.0596824472, 14.0597669315, 14.0598514108, 14.0599358851, 14.0600203545, 14.060104819, 14.0601892785, 14.060273733, 14.0603581826, 14.0604426273, 14.060527067, 14.0606115018, 14.0606959317, 14.0607803566, 14.0608647766, 14.0609491916, 14.0610336017, 14.0611180068, 14.061202407, 14.0612868023, 14.0613711927, 14.0614555781, 14.0615399585, 14.0616243341, 14.0617087047, 14.0617930703, 14.0618774311, 14.0619617869, 14.0620461377, 14.0621304837, 14.0622148247, 14.0622991607, 14.0623834919, 14.0624678181, 14.0625521394, 14.0626364557, 14.0627207672, 14.0628050737, 14.0628893752, 14.0629736719, 14.0630579636, 14.0631422504, 14.0632265323, 14.0633108093, 14.0633950813, 14.0634793484, 14.0635636106, 14.0636478679, 14.0637321202, 14.0638163676, 14.0639006101, 14.0639848477, 14.0640690804, 14.0641533081, 14.064237531, 14.0643217489, 14.0644059619, 14.06449017, 14.0645743731, 14.0646585714, 14.0647427648, 14.0648269532, 14.0649111367, 14.0649953153, 14.065079489, 14.0651636578, 14.0652478217, 14.0653319806, 14.0654161347, 14.0655002838, 14.0655844281, 14.0656685674, 14.0657527018, 14.0658368313, 14.0659209559, 14.0660050757, 14.0660891905, 14.0661733004, 14.0662574054, 14.0663415054, 14.0664256006, 14.0665096909, 14.0665937763, 14.0666778568, 14.0667619324, 14.0668460031, 14.0669300689, 14.0670141298, 14.0670981857, 14.0671822368, 14.067266283, 14.0673503243, 14.0674343608, 14.0675183923, 14.0676024189, 14.0676864406, 14.0677704574, 14.0678544694, 14.0679384764, 14.0680224786, 14.0681064759, 14.0681904682, 14.0682744557, 14.0683584383, 14.068442416, 14.0685263888, 14.0686103568, 14.0686943198, 14.068778278, 14.0688622313, 14.0689461796, 14.0690301232, 14.0691140618, 14.0691979955, 14.0692819244, 14.0693658483, 14.0694497674, 14.0695336816, 14.069617591, 14.0697014954, 14.069785395, 14.0698692897, 14.0699531795, 14.0700370644, 14.0701209445, 14.0702048197, 14.07028869, 14.0703725554, 14.0704564159, 14.0705402716, 14.0706241224, 14.0707079684, 14.0707918094, 14.0708756456, 14.0709594769, 14.0710433034, 14.0711271249, 14.0712109417, 14.0712947535, 14.0713785605, 14.0714623626, 14.0715461598, 14.0716299522, 14.0717137397, 14.0717975223, 14.0718813001, 14.071965073, 14.072048841, 14.0721326042, 14.0722163625, 14.0723001159, 14.0723838645, 14.0724676082, 14.0725513471, 14.0726350811, 14.0727188103, 14.0728025345, 14.072886254, 14.0729699685, 14.0730536783, 14.0731373831, 14.0732210831, 14.0733047783, 14.0733884685, 14.073472154, 14.0735558346, 14.0736395103, 14.0737231812, 14.0738068472, 14.0738905083, 14.0739741647, 14.0740578161, 14.0741414628, 14.0742251045, 14.0743087414, 14.0743923735, 14.0744760007, 14.0745596231, 14.0746432406, 14.0747268533, 14.0748104612, 14.0748940642, 14.0749776623, 14.0750612556, 14.0751448441, 14.0752284277, 14.0753120065, 14.0753955804, 14.0754791495, 14.0755627137, 14.0756462732, 14.0757298277, 14.0758133775, 14.0758969224, 14.0759804624, 14.0760639976, 14.076147528, 14.0762310536, 14.0763145743, 14.0763980902, 14.0764816012, 14.0765651074, 14.0766486088, 14.0767321053, 14.0768155971, 14.0768990839, 14.076982566, 14.0770660432, 14.0771495156, 14.0772329831, 14.0773164459, 14.0773999038, 14.0774833569, 14.0775668051, 14.0776502485, 14.0777336871, 14.0778171209, 14.0779005498, 14.077983974, 14.0780673933, 14.0781508077, 14.0782342174, 14.0783176222, 14.0784010222, 14.0784844174, 14.0785678078, 14.0786511933, 14.0787345741, 14.07881795, 14.0789013211, 14.0789846873, 14.0790680488, 14.0791514054, 14.0792347572, 14.0793181043, 14.0794014464, 14.0794847838, 14.0795681164, 14.0796514441, 14.0797347671, 14.0798180852, 14.0799013985, 14.079984707, 14.0800680107, 14.0801513096, 14.0802346037, 14.080317893, 14.0804011774, 14.0804844571, 14.0805677319, 14.0806510019, 14.0807342672, 14.0808175276, 14.0809007832, 14.080984034, 14.0810672801, 14.0811505213, 14.0812337577, 14.0813169893, 14.0814002161, 14.0814834381, 14.0815666553, 14.0816498677, 14.0817330753, 14.0818162781, 14.0818994761, 14.0819826693, 14.0820658577, 14.0821490414, 14.0822322202, 14.0823153942, 14.0823985634, 14.0824817279, 14.0825648875, 14.0826480424, 14.0827311924, 14.0828143377, 14.0828974781, 14.0829806138, 14.0830637447, 14.0831468708, 14.0832299921, 14.0833131087, 14.0833962204, 14.0834793273, 14.0835624295, 14.0836455269, 14.0837286195, 14.0838117073, 14.0838947903, 14.0839778685, 14.084060942, 14.0841440106, 14.0842270745, 14.0843101336, 14.0843931879, 14.0844762375, 14.0845592822, 14.0846423222, 14.0847253574, 14.0848083878, 14.0848914134, 14.0849744343, 14.0850574504, 14.0851404617, 14.0852234682, 14.08530647, 14.085389467, 14.0854724592, 14.0855554466, 14.0856384293, 14.0857214072, 14.0858043803, 14.0858873486, 14.0859703122, 14.086053271, 14.086136225, 14.0862191743, 14.0863021188, 14.0863850585, 14.0864679935, 14.0865509237, 14.0866338491, 14.0867167697, 14.0867996856, 14.0868825967, 14.0869655031, 14.0870484047, 14.0871313015, 14.0872141936, 14.0872970809, 14.0873799635, 14.0874628413, 14.0875457143, 14.0876285825, 14.087711446, 14.0877943048, 14.0878771588, 14.087960008, 14.0880428525, 14.0881256922, 14.0882085271, 14.0882913573, 14.0883741828, 14.0884570035, 14.0885398194, 14.0886226306, 14.088705437, 14.0887882387, 14.0888710356, 14.0889538278, 14.0890366152, 14.0891193979, 14.0892021758, 14.089284949, 14.0893677174, 14.0894504811, 14.08953324, 14.0896159942, 14.0896987437, 14.0897814884, 14.0898642283, 14.0899469635, 14.090029694, 14.0901124197, 14.0901951406, 14.0902778569, 14.0903605683, 14.0904432751, 14.0905259771, 14.0906086743, 14.0906913669, 14.0907740546, 14.0908567377, 14.090939416, 14.0910220895, 14.0911047584, 14.0911874225, 14.0912700818, 14.0913527364, 14.0914353863, 14.0915180315, 14.0916006719, 14.0916833076, 14.0917659385, 14.0918485647, 14.0919311862, 14.092013803, 14.092096415, 14.0921790223, 14.0922616248, 14.0923442227, 14.0924268158, 14.0925094042, 14.0925919878, 14.0926745667, 14.0927571409, 14.0928397104, 14.0929222751, 14.0930048352, 14.0930873904, 14.093169941, 14.0932524869, 14.093335028, 14.0934175644, 14.0935000961, 14.093582623, 14.0936651453, 14.0937476628, 14.0938301756, 14.0939126837, 14.093995187, 14.0940776857, 14.0941601796, 14.0942426688, 14.0943251533, 14.0944076331, 14.0944901081, 14.0945725785, 14.0946550441, 14.094737505, 14.0948199613, 14.0949024128, 14.0949848595, 14.0950673016, 14.095149739, 14.0952321716, 14.0953145996, 14.0953970228, 14.0954794413, 14.0955618551, 14.0956442642, 14.0957266686, 14.0958090683, 14.0958914633, 14.0959738536, 14.0960562392, 14.0961386201, 14.0962209962, 14.0963033677, 14.0963857345, 14.0964680965, 14.0965504539, 14.0966328065, 14.0967151545, 14.0967974977, 14.0968798363, 14.0969621702, 14.0970444993, 14.0971268238, 14.0972091436, 14.0972914586, 14.097373769, 14.0974560747, 14.0975383756, 14.0976206719, 14.0977029635, 14.0977852504, 14.0978675326, 14.0979498101, 14.098032083, 14.0981143511, 14.0981966145, 14.0982788733, 14.0983611273, 14.0984433767, 14.0985256214, 14.0986078614, 14.0986900967, 14.0987723273, 14.0988545532, 14.0989367745, 14.099018991, 14.0991012029, 14.0991834101, 14.0992656126, 14.0993478104, 14.0994300035, 14.099512192, 14.0995943758, 14.0996765549, 14.0997587293, 14.099840899, 14.0999230641, 14.1000052244, 14.1000873801, 14.1001695311, 14.1002516775, 14.1003338191, 14.1004159561, 14.1004980884, 14.100580216, 14.100662339, 14.1007444573, 14.1008265709, 14.1009086798, 14.1009907841, 14.1010728837, 14.1011549786, 14.1012370688, 14.1013191544, 14.1014012353, 14.1014833116, 14.1015653831, 14.10164745, 14.1017295123, 14.1018115698, 14.1018936227, 14.1019756709, 14.1020577145, 14.1021397534, 14.1022217876, 14.1023038172, 14.1023858421, 14.1024678624, 14.1025498779, 14.1026318889, 14.1027138951, 14.1027958967, 14.1028778936, 14.1029598859, 14.1030418735, 14.1031238565, 14.1032058348, 14.1032878084, 14.1033697774, 14.1034517417, 14.1035337014, 14.1036156564, 14.1036976068, 14.1037795525, 14.1038614935, 14.1039434299, 14.1040253616, 14.1041072887, 14.1041892112, 14.1042711289, 14.1043530421, 14.1044349506, 14.1045168544, 14.1045987536, 14.1046806481, 14.104762538, 14.1048444232, 14.1049263038, 14.1050081798, 14.105090051, 14.1051719177, 14.1052537797, 14.1053356371, 14.1054174898, 14.1054993378, 14.1055811813, 14.1056630201, 14.1057448542, 14.1058266837, 14.1059085086, 14.1059903288, 14.1060721444, 14.1061539553, 14.1062357616, 14.1063175633, 14.1063993603, 14.1064811527, 14.1065629404, 14.1066447236, 14.106726502, 14.1068082759, 14.1068900451, 14.1069718097, 14.1070535696, 14.1071353249, 14.1072170756, 14.1072988216, 14.107380563, 14.1074622998, 14.107544032, 14.1076257595, 14.1077074824, 14.1077892006, 14.1078709143, 14.1079526233, 14.1080343277, 14.1081160274, 14.1081977225, 14.108279413, 14.1083610989, 14.1084427802, 14.1085244568, 14.1086061288, 14.1086877962, 14.1087694589, 14.108851117, 14.1089327706, 14.1090144194, 14.1090960637, 14.1091777034, 14.1092593384, 14.1093409688, 14.1094225946, 14.1095042158, 14.1095858323, 14.1096674443, 14.1097490516, 14.1098306543, 14.1099122524, 14.1099938458, 14.1100754347, 14.110157019, 14.1102385986, 14.1103201736, 14.110401744, 14.1104833098, 14.110564871, 14.1106464276, 14.1107279795, 14.1108095269, 14.1108910696, 14.1109726078, 14.1110541413, 14.1111356702, 14.1112171945, 14.1112987143, 14.1113802294, 14.1114617399, 14.1115432457, 14.111624747, 14.1117062437, 14.1117877358, 14.1118692233, 14.1119507062, 14.1120321844, 14.1121136581, 14.1121951272, 14.1122765916, 14.1123580515, 14.1124395068, 14.1125209575, 14.1126024035, 14.112683845, 14.1127652819, 14.1128467142, 14.1129281419, 14.1130095649, 14.1130909834, 14.1131723973, 14.1132538067, 14.1133352114, 14.1134166115, 14.113498007, 14.113579398, 14.1136607843, 14.113742166, 14.1138235432, 14.1139049158, 14.1139862838, 14.1140676472, 14.114149006, 14.1142303602, 14.1143117098, 14.1143930549, 14.1144743953, 14.1145557312, 14.1146370625, 14.1147183892, 14.1147997113, 14.1148810288, 14.1149623418, 14.1150436502, 14.1151249539, 14.1152062532, 14.1152875478, 14.1153688378, 14.1154501233, 14.1155314042, 14.1156126805, 14.1156939522, 14.1157752193, 14.1158564819, 14.1159377399, 14.1160189933, 14.1161002422, 14.1161814864, 14.1162627261, 14.1163439612, 14.1164251918, 14.1165064177, 14.1165876391, 14.116668856, 14.1167500682, 14.1168312759, 14.116912479, 14.1169936775, 14.1170748715, 14.1171560609, 14.1172372457, 14.117318426, 14.1173996017, 14.1174807728, 14.1175619394, 14.1176431014, 14.1177242588, 14.1178054117, 14.11788656, 14.1179677037, 14.1180488429, 14.1181299775, 14.1182111075, 14.118292233, 14.1183733539, 14.1184544703, 14.1185355821, 14.1186166894, 14.118697792, 14.1187788902, 14.1188599837, 14.1189410727, 14.1190221572, 14.1191032371, 14.1191843124, 14.1192653832, 14.1193464494, 14.1194275111, 14.1195085682, 14.1195896207, 14.1196706687, 14.1197517122, 14.1198327511, 14.1199137855, 14.1199948153, 14.1200758405, 14.1201568612, 14.1202378773, 14.1203188889, 14.120399896, 14.1204808985, 14.1205618964, 14.1206428898, 14.1207238787, 14.120804863, 14.1208858428, 14.120966818, 14.1210477887, 14.1211287548, 14.1212097164, 14.1212906735, 14.121371626, 14.1214525739, 14.1215335173, 14.1216144562, 14.1216953906, 14.1217763204, 14.1218572456, 14.1219381663, 14.1220190825, 14.1220999942, 14.1221809013, 14.1222618038, 14.1223427019, 14.1224235954, 14.1225044843, 14.1225853687, 14.1226662486, 14.122747124, 14.1228279948, 14.1229088611, 14.1229897229, 14.1230705801, 14.1231514328, 14.1232322809, 14.1233131246, 14.1233939637, 14.1234747982, 14.1235556283, 14.1236364538, 14.1237172748, 14.1237980913, 14.1238789032, 14.1239597106, 14.1240405135, 14.1241213118, 14.1242021057, 14.124282895, 14.1243636797, 14.12444446, 14.1245252357, 14.124606007, 14.1246867737, 14.1247675358, 14.1248482935, 14.1249290466, 14.1250097952, 14.1250905393, 14.1251712789, 14.1252520139, 14.1253327445, 14.1254134705, 14.125494192, 14.125574909, 14.1256556214, 14.1257363294, 14.1258170328, 14.1258977318, 14.1259784262, 14.1260591161, 14.1261398015, 14.1262204823, 14.1263011587, 14.1263818305, 14.1264624979, 14.1265431607, 14.126623819, 14.1267044728, 14.1267851221, 14.1268657669, 14.1269464072, 14.127027043, 14.1271076743, 14.127188301, 14.1272689233, 14.1273495411, 14.1274301543, 14.1275107631, 14.1275913673, 14.127671967, 14.1277525623, 14.127833153, 14.1279137392, 14.127994321, 14.1280748982, 14.1281554709, 14.1282360392, 14.1283166029, 14.1283971621, 14.1284777169, 14.1285582671, 14.1286388129, 14.1287193541, 14.1287998908, 14.1288804231, 14.1289609509, 14.1290414741, 14.1291219929, 14.1292025072, 14.1292830169, 14.1293635222, 14.129444023, 14.1295245193, 14.1296050112, 14.1296854985, 14.1297659813, 14.1298464597, 14.1299269335, 14.1300074029, 14.1300878678, 14.1301683281, 14.1302487841, 14.1303292355, 14.1304096824, 14.1304901248, 14.1305705628, 14.1306509963, 14.1307314253, 14.1308118498, 14.1308922698, 14.1309726853, 14.1310530964, 14.131133503, 14.1312139051, 14.1312943027, 14.1313746958, 14.1314550845, 14.1315354687, 14.1316158484, 14.1316962236, 14.1317765943, 14.1318569606, 14.1319373224, 14.1320176797, 14.1320980326, 14.1321783809, 14.1322587248, 14.1323390642, 14.1324193992, 14.1324997296, 14.1325800556, 14.1326603771, 14.1327406942, 14.1328210068, 14.1329013149, 14.1329816185, 14.1330619177, 14.1331422124, 14.1332225026, 14.1333027884, 14.1333830697, 14.1334633465, 14.1335436189, 14.1336238868, 14.1337041502, 14.1337844092, 14.1338646637, 14.1339449137, 14.1340251593, 14.1341054004, 14.134185637, 14.1342658692, 14.134346097, 14.1344263202, 14.134506539, 14.1345867534, 14.1346669632, 14.1347471687, 14.1348273696, 14.1349075661, 14.1349877582, 14.1350679458, 14.1351481289, 14.1352283076, 14.1353084818, 14.1353886516, 14.1354688169, 14.1355489777, 14.1356291342, 14.1357092861, 14.1357894336, 14.1358695766, 14.1359497152, 14.1360298494, 14.1361099791, 14.1361901043, 14.1362702251, 14.1363503415, 14.1364304533, 14.1365105608, 14.1365906638, 14.1366707623, 14.1367508564, 14.1368309461, 14.1369110313, 14.1369911121, 14.1370711884, 14.1371512603, 14.1372313277, 14.1373113907, 14.1373914492, 14.1374715034, 14.137551553, 14.1376315982, 14.137711639, 14.1377916754, 14.1378717073, 14.1379517347, 14.1380317577, 14.1381117763, 14.1381917905, 14.1382718002, 14.1383518054, 14.1384318063, 14.1385118027, 14.1385917946, 14.1386717822, 14.1387517653, 14.1388317439, 14.1389117181, 14.1389916879, 14.1390716533, 14.1391516142, 14.1392315707, 14.1393115228, 14.1393914704, 14.1394714136, 14.1395513524, 14.1396312867, 14.1397112167, 14.1397911422, 14.1398710632, 14.1399509798, 14.1400308921, 14.1401107998, 14.1401907032, 14.1402706021, 14.1403504966, 14.1404303867, 14.1405102724, 14.1405901536, 14.1406700304, 14.1407499028, 14.1408297708, 14.1409096343, 14.1409894934, 14.1410693482, 14.1411491984, 14.1412290443, 14.1413088858, 14.1413887228, 14.1414685554, 14.1415483836, 14.1416282074, 14.1417080267, 14.1417878417, 14.1418676522, 14.1419474583, 14.14202726, 14.1421070573, 14.1421868502, 14.1422666386, 14.1423464227, 14.1424262023, 14.1425059775, 14.1425857484, 14.1426655148, 14.1427452768, 14.1428250343, 14.1429047875, 14.1429845363, 14.1430642806, 14.1431440206, 14.1432237561, 14.1433034873, 14.143383214, 14.1434629363, 14.1435426542, 14.1436223677, 14.1437020769, 14.1437817816, 14.1438614819, 14.1439411778, 14.1440208693, 14.1441005564, 14.1441802391, 14.1442599174, 14.1443395912, 14.1444192607, 14.1444989258, 14.1445785865, 14.1446582428, 14.1447378947, 14.1448175422, 14.1448971853, 14.1449768241, 14.1450564584, 14.1451360883, 14.1452157138, 14.1452953349, 14.1453749517, 14.145454564, 14.145534172, 14.1456137755, 14.1456933747, 14.1457729694, 14.1458525598, 14.1459321458, 14.1460117274, 14.1460913046, 14.1461708775, 14.1462504459, 14.1463300099, 14.1464095696, 14.1464891249, 14.1465686757, 14.1466482222, 14.1467277643, 14.1468073021, 14.1468868354, 14.1469663644, 14.1470458889, 14.1471254091, 14.1472049249, 14.1472844364, 14.1473639434, 14.1474434461, 14.1475229444, 14.1476024383, 14.1476819278, 14.1477614129, 14.1478408937, 14.1479203701, 14.1479998421, 14.1480793097, 14.1481587729, 14.1482382318, 14.1483176863, 14.1483971364, 14.1484765822, 14.1485560236, 14.1486354605, 14.1487148932, 14.1487943214, 14.1488737453, 14.1489531648, 14.1490325799, 14.1491119907, 14.1491913971, 14.1492707991, 14.1493501968, 14.1494295901, 14.149508979, 14.1495883635, 14.1496677437, 14.1497471195, 14.1498264909, 14.149905858, 14.1499852207, 14.1500645791, 14.1501439331, 14.1502232827, 14.1503026279, 14.1503819688, 14.1504613053, 14.1505406375, 14.1506199653, 14.1506992887, 14.1507786078, 14.1508579225, 14.1509372329, 14.1510165389, 14.1510958405, 14.1511751378, 14.1512544307, 14.1513337193, 14.1514130035, 14.1514922833, 14.1515715588, 14.15165083, 14.1517300968, 14.1518093592, 14.1518886173, 14.151967871, 14.1520471203, 14.1521263653, 14.152205606, 14.1522848423, 14.1523640743, 14.1524433019, 14.1525225251, 14.152601744, 14.1526809586, 14.1527601688, 14.1528393746, 14.1529185761, 14.1529977733, 14.1530769661, 14.1531561546, 14.1532353387, 14.1533145185, 14.1533936939, 14.153472865, 14.1535520317, 14.1536311941, 14.1537103522, 14.1537895059, 14.1538686552, 14.1539478002, 14.1540269409, 14.1541060773, 14.1541852093, 14.1542643369, 14.1543434602, 14.1544225792, 14.1545016939, 14.1545808042, 14.1546599101, 14.1547390118, 14.1548181091, 14.154897202, 14.1549762906, 14.1550553749, 14.1551344549, 14.1552135305, 14.1552926018, 14.1553716687, 14.1554507313, 14.1555297896, 14.1556088435, 14.1556878932, 14.1557669384, 14.1558459794, 14.155925016, 14.1560040483, 14.1560830763, 14.1561620999, 14.1562411192, 14.1563201342, 14.1563991449, 14.1564781512, 14.1565571532, 14.1566361509, 14.1567151442, 14.1567941332, 14.1568731179, 14.1569520983, 14.1570310744, 14.1571100461, 14.1571890135, 14.1572679766, 14.1573469354, 14.1574258898, 14.1575048399, 14.1575837857, 14.1576627272, 14.1577416644, 14.1578205972, 14.1578995257, 14.1579784499, 14.1580573698, 14.1581362854, 14.1582151967, 14.1582941036, 14.1583730062, 14.1584519045, 14.1585307985, 14.1586096882, 14.1586885736, 14.1587674546, 14.1588463314, 14.1589252038, 14.1590040719, 14.1590829357, 14.1591617952, 14.1592406504, 14.1593195013, 14.1593983479, 14.1594771901, 14.1595560281, 14.1596348617, 14.159713691, 14.1597925161, 14.1598713368, 14.1599501532, 14.1600289653, 14.1601077731, 14.1601865766, 14.1602653758, 14.1603441707, 14.1604229613, 14.1605017476, 14.1605805295, 14.1606593072, 14.1607380806, 14.1608168497, 14.1608956145, 14.1609743749, 14.1610531311, 14.161131883, 14.1612106306, 14.1612893738, 14.1613681128, 14.1614468475, 14.1615255779, 14.161604304, 14.1616830258, 14.1617617433, 14.1618404565, 14.1619191654, 14.16199787, 14.1620765704, 14.1621552664, 14.1622339581, 14.1623126456, 14.1623913288, 14.1624700076, 14.1625486822, 14.1626273525, 14.1627060185, 14.1627846802, 14.1628633376, 14.1629419907, 14.1630206396, 14.1630992841, 14.1631779244, 14.1632565604, 14.1633351921, 14.1634138195, 14.1634924426, 14.1635710615, 14.163649676, 14.1637282863, 14.1638068923, 14.163885494, 14.1639640914, 14.1640426846, 14.1641212734, 14.164199858, 14.1642784383, 14.1643570143, 14.1644355861, 14.1645141535, 14.1645927167, 14.1646712756, 14.1647498302, 14.1648283806, 14.1649069267, 14.1649854685, 14.165064006, 14.1651425392, 14.1652210682, 14.1652995929, 14.1653781133, 14.1654566295, 14.1655351414, 14.165613649, 14.1656921523, 14.1657706514, 14.1658491462, 14.1659276367, 14.166006123, 14.1660846049, 14.1661630826, 14.1662415561, 14.1663200253, 14.1663984902, 14.1664769508, 14.1665554072, 14.1666338593, 14.1667123071, 14.1667907507, 14.16686919, 14.1669476251, 14.1670260559, 14.1671044824, 14.1671829046, 14.1672613226, 14.1673397364, 14.1674181458, 14.167496551, 14.167574952, 14.1676533487, 14.1677317411, 14.1678101293, 14.1678885132, 14.1679668928, 14.1680452682, 14.1681236394, 14.1682020062, 14.1682803689, 14.1683587272, 14.1684370813, 14.1685154312, 14.1685937768, 14.1686721181, 14.1687504552, 14.1688287881, 14.1689071166, 14.168985441, 14.1690637611, 14.1691420769, 14.1692203885, 14.1692986958, 14.1693769989, 14.1694552977, 14.1695335923, 14.1696118826, 14.1696901687, 14.1697684505, 14.1698467281, 14.1699250014, 14.1700032705, 14.1700815354, 14.170159796, 14.1702380523, 14.1703163044, 14.1703945523, 14.1704727959, 14.1705510353, 14.1706292705, 14.1707075013, 14.170785728, 14.1708639504, 14.1709421686, 14.1710203825, 14.1710985922, 14.1711767977, 14.1712549989, 14.1713331958, 14.1714113886, 14.1714895771, 14.1715677613, 14.1716459413, 14.1717241171, 14.1718022887, 14.171880456, 14.1719586191, 14.1720367779, 14.1721149325, 14.1721930829, 14.1722712291, 14.172349371, 14.1724275086, 14.1725056421, 14.1725837713, 14.1726618963, 14.172740017, 14.1728181336, 14.1728962459, 14.1729743539, 14.1730524578, 14.1731305574, 14.1732086528, 14.1732867439, 14.1733648308, 14.1734429136, 14.173520992, 14.1735990663, 14.1736771363, 14.1737552021, 14.1738332637, 14.173911321, 14.1739893742, 14.1740674231, 14.1741454678, 14.1742235082, 14.1743015445, 14.1743795765, 14.1744576043, 14.1745356279, 14.1746136472, 14.1746916624, 14.1747696733, 14.17484768, 14.1749256825, 14.1750036808, 14.1750816748, 14.1751596647, 14.1752376503, 14.1753156317, 14.1753936089, 14.1754715819, 14.1755495506, 14.1756275152, 14.1757054755, 14.1757834317, 14.1758613836, 14.1759393313, 14.1760172748, 14.176095214, 14.1761731491, 14.17625108, 14.1763290066, 14.1764069291, 14.1764848473, 14.1765627613, 14.1766406711, 14.1767185767, 14.1767964781, 14.1768743753, 14.1769522683, 14.1770301571, 14.1771080417, 14.1771859221, 14.1772637983, 14.1773416702, 14.177419538, 14.1774974016, 14.1775752609, 14.1776531161, 14.177730967, 14.1778088138, 14.1778866563, 14.1779644947, 14.1780423289, 14.1781201588, 14.1781979846, 14.1782758061, 14.1783536235, 14.1784314367, 14.1785092457, 14.1785870504, 14.178664851, 14.1787426474, 14.1788204396, 14.1788982276, 14.1789760114, 14.179053791, 14.1791315664, 14.1792093376, 14.1792871046, 14.1793648675, 14.1794426261, 14.1795203806, 14.1795981308, 14.1796758769, 14.1797536188, 14.1798313565, 14.17990909, 14.1799868193, 14.1800645445, 14.1801422654, 14.1802199822, 14.1802976947, 14.1803754031, 14.1804531073, 14.1805308073, 14.1806085032, 14.1806861948, 14.1807638823, 14.1808415656, 14.1809192447, 14.1809969196, 14.1810745903, 14.1811522569, 14.1812299192, 14.1813075774, 14.1813852314, 14.1814628813, 14.1815405269, 14.1816181684, 14.1816958057, 14.1817734388, 14.1818510677, 14.1819286925, 14.1820063131, 14.1820839295, 14.1821615417, 14.1822391498, 14.1823167537, 14.1823943534, 14.1824719489, 14.1825495403, 14.1826271275, 14.1827047105, 14.1827822894, 14.182859864, 14.1829374345, 14.1830150009, 14.183092563, 14.183170121, 14.1832476749, 14.1833252245, 14.18340277, 14.1834803113, 14.1835578485, 14.1836353815, 14.1837129103, 14.1837904349, 14.1838679554, 14.1839454718, 14.1840229839, 14.1841004919, 14.1841779957, 14.1842554954, 14.1843329909, 14.1844104822, 14.1844879694, 14.1845654524, 14.1846429313, 14.184720406, 14.1847978765, 14.1848753429, 14.1849528051, 14.1850302632, 14.1851077171, 14.1851851668, 14.1852626124, 14.1853400538, 14.1854174911, 14.1854949242, 14.1855723532, 14.185649778, 14.1857271986, 14.1858046151, 14.1858820274, 14.1859594356, 14.1860368397, 14.1861142395, 14.1861916353, 14.1862690268, 14.1863464143, 14.1864237975, 14.1865011767, 14.1865785516, 14.1866559225, 14.1867332891, 14.1868106517, 14.18688801, 14.1869653643, 14.1870427143, 14.1871200603, 14.1871974021, 14.1872747397, 14.1873520732, 14.1874294026, 14.1875067278, 14.1875840488, 14.1876613657, 14.1877386785, 14.1878159871, 14.1878932916, 14.187970592, 14.1880478882, 14.1881251803, 14.1882024682, 14.188279752, 14.1883570316, 14.1884343071, 14.1885115785, 14.1885888457, 14.1886661088, 14.1887433677, 14.1888206226, 14.1888978732, 14.1889751198, 14.1890523622, 14.1891296005, 14.1892068346, 14.1892840646, 14.1893612905, 14.1894385122, 14.1895157298, 14.1895929433, 14.1896701526, 14.1897473578, 14.1898245589, 14.1899017558, 14.1899789486, 14.1900561373, 14.1901333219, 14.1902105023, 14.1902876786, 14.1903648507, 14.1904420188, 14.1905191827, 14.1905963425, 14.1906734981, 14.1907506497, 14.1908277971, 14.1909049403, 14.1909820795, 14.1910592145, 14.1911363454, 14.1912134722, 14.1912905949, 14.1913677134, 14.1914448278, 14.1915219381, 14.1915990443, 14.1916761464, 14.1917532443, 14.1918303381, 14.1919074278, 14.1919845134, 14.1920615948, 14.1921386722, 14.1922157454, 14.1922928145, 14.1923698795, 14.1924469403, 14.1925239971, 14.1926010497, 14.1926780982, 14.1927551426, 14.1928321829, 14.1929092191, 14.1929862512, 14.1930632791, 14.193140303, 14.1932173227, 14.1932943383, 14.1933713498, 14.1934483572, 14.1935253605, 14.1936023597, 14.1936793547, 14.1937563457, 14.1938333325, 14.1939103153, 14.1939872939, 14.1940642684, 14.1941412389, 14.1942182052, 14.1942951674, 14.1943721255, 14.1944490795, 14.1945260294, 14.1946029752, 14.1946799168, 14.1947568544, 14.1948337879, 14.1949107173, 14.1949876425, 14.1950645637, 14.1951414808, 14.1952183938, 14.1952953026, 14.1953722074, 14.1954491081, 14.1955260046, 14.1956028971, 14.1956797855, 14.1957566698, 14.19583355, 14.195910426, 14.195987298, 14.1960641659, 14.1961410297, 14.1962178894, 14.196294745, 14.1963715965, 14.196448444, 14.1965252873, 14.1966021265, 14.1966789617, 14.1967557927, 14.1968326197, 14.1969094425, 14.1969862613, 14.197063076, 14.1971398866, 14.1972166931, 14.1972934955, 14.1973702939, 14.1974470881, 14.1975238783, 14.1976006643, 14.1976774463, 14.1977542242, 14.197830998, 14.1979077677, 14.1979845334, 14.1980612949, 14.1981380524, 14.1982148058, 14.1982915551, 14.1983683003, 14.1984450415, 14.1985217785, 14.1985985115, 14.1986752404, 14.1987519652, 14.1988286859, 14.1989054026, 14.1989821152, 14.1990588237, 14.1991355281, 14.1992122284, 14.1992889247, 14.1993656169, 14.199442305, 14.199518989, 14.199595669, 14.1996723448, 14.1997490166, 14.1998256844, 14.199902348, 14.1999790076, 14.2000556631, 14.2001323146, 14.2002089619, 14.2002856052, 14.2003622444, 14.2004388796, 14.2005155107, 14.2005921377, 14.2006687606, 14.2007453795, 14.2008219943, 14.200898605, 14.2009752117, 14.2010518143, 14.2011284128, 14.2012050073, 14.2012815977, 14.201358184, 14.2014347663, 14.2015113445, 14.2015879186, 14.2016644887, 14.2017410547, 14.2018176167, 14.2018941746, 14.2019707284, 14.2020472781, 14.2021238238, 14.2022003655, 14.202276903, 14.2023534366, 14.202429966, 14.2025064914, 14.2025830127, 14.20265953, 14.2027360433, 14.2028125524, 14.2028890575, 14.2029655586, 14.2030420556, 14.2031185485, 14.2031950374, 14.2032715222, 14.203348003, 14.2034244797, 14.2035009524, 14.203577421, 14.2036538855, 14.203730346, 14.2038068025, 14.2038832549, 14.2039597032, 14.2040361475, 14.2041125878, 14.204189024, 14.2042654561, 14.2043418842, 14.2044183083, 14.2044947283, 14.2045711442, 14.2046475562, 14.204723964, 14.2048003678, 14.2048767676, 14.2049531633, 14.205029555, 14.2051059426, 14.2051823262, 14.2052587058, 14.2053350813, 14.2054114527, 14.2054878202, 14.2055641835, 14.2056405429, 14.2057168981, 14.2057932494, 14.2058695966, 14.2059459398, 14.2060222789, 14.206098614, 14.206174945, 14.2062512721, 14.206327595, 14.206403914, 14.2064802289, 14.2065565397, 14.2066328466, 14.2067091494, 14.2067854481, 14.2068617428, 14.2069380335, 14.2070143202, 14.2070906028, 14.2071668814, 14.2072431559, 14.2073194265, 14.2073956929, 14.2074719554, 14.2075482138, 14.2076244682, 14.2077007186, 14.2077769649, 14.2078532072, 14.2079294455, 14.2080056798, 14.20808191, 14.2081581362, 14.2082343583, 14.2083105765, 14.2083867906, 14.2084630007, 14.2085392067, 14.2086154088, 14.2086916068, 14.2087678008, 14.2088439907, 14.2089201767, 14.2089963586, 14.2090725365, 14.2091487104, 14.2092248802, 14.209301046, 14.2093772078, 14.2094533656, 14.2095295194, 14.2096056691, 14.2096818149, 14.2097579566, 14.2098340943, 14.2099102279, 14.2099863576, 14.2100624832, 14.2101386049, 14.2102147225, 14.2102908361, 14.2103669456, 14.2104430512, 14.2105191527, 14.2105952503, 14.2106713438, 14.2107474333, 14.2108235188, 14.2108996003, 14.2109756777, 14.2110517512, 14.2111278206, 14.2112038861, 14.2112799475, 14.2113560049, 14.2114320583, 14.2115081077, 14.2115841531, 14.2116601945, 14.2117362318, 14.2118122652, 14.2118882945, 14.2119643199, 14.2120403412, 14.2121163586, 14.2121923719, 14.2122683812, 14.2123443866, 14.2124203879, 14.2124963852, 14.2125723785, 14.2126483678, 14.2127243531, 14.2128003344, 14.2128763117, 14.212952285, 14.2130282543, 14.2131042196, 14.2131801809, 14.2132561382, 14.2133320916, 14.2134080409, 14.2134839862, 14.2135599275, 14.2136358648, 14.2137117981, 14.2137877274, 14.2138636527, 14.2139395741, 14.2140154914, 14.2140914047, 14.2141673141, 14.2142432194, 14.2143191208, 14.2143950182, 14.2144709115, 14.2145468009, 14.2146226863, 14.2146985677, 14.2147744451, 14.2148503185, 14.2149261879, 14.2150020534, 14.2150779148, 14.2151537723, 14.2152296257, 14.2153054752, 14.2153813207, 14.2154571622, 14.2155329997, 14.2156088333, 14.2156846628, 14.2157604884, 14.21583631, 14.2159121276, 14.2159879412, 14.2160637508, 14.2161395564, 14.2162153581, 14.2162911558, 14.2163669494, 14.2164427392, 14.2165185249, 14.2165943066, 14.2166700844, 14.2167458582, 14.216821628, 14.2168973938, 14.2169731557, 14.2170489136, 14.2171246675, 14.2172004174, 14.2172761633, 14.2173519053, 14.2174276433, 14.2175033773, 14.2175791073, 14.2176548334, 14.2177305554, 14.2178062736, 14.2178819877, 14.2179576979, 14.2180334041, 14.2181091063, 14.2181848045, 14.2182604988, 14.2183361891, 14.2184118754, 14.2184875578, 14.2185632362, 14.2186389106, 14.2187145811, 14.2187902476, 14.2188659101, 14.2189415686, 14.2190172232, 14.2190928738, 14.2191685205, 14.2192441631, 14.2193198019, 14.2193954366, 14.2194710674, 14.2195466942, 14.2196223171, 14.219697936, 14.2197735509, 14.2198491619, 14.2199247689, 14.2200003719, 14.220075971, 14.2201515661, 14.2202271573, 14.2203027445, 14.2203783277, 14.220453907, 14.2205294823, 14.2206050537, 14.2206806211, 14.2207561845, 14.220831744, 14.2209072995, 14.2209828511, 14.2210583987, 14.2211339424, 14.2212094821, 14.2212850178, 14.2213605496, 14.2214360774, 14.2215116013, 14.2215871213, 14.2216626372, 14.2217381493, 14.2218136573, 14.2218891615, 14.2219646616, 14.2220401579, 14.2221156501, 14.2221911385, 14.2222666228, 14.2223421032, 14.2224175797, 14.2224930522, 14.2225685208, 14.2226439855, 14.2227194461, 14.2227949029, 14.2228703557, 14.2229458045, 14.2230212494, 14.2230966903, 14.2231721274, 14.2232475604, 14.2233229895, 14.2233984147, 14.2234738359, 14.2235492532, 14.2236246666, 14.223700076, 14.2237754815, 14.223850883, 14.2239262806, 14.2240016742, 14.2240770639, 14.2241524497, 14.2242278315, 14.2243032094, 14.2243785833, 14.2244539533, 14.2245293194, 14.2246046815, 14.2246800397, 14.224755394, 14.2248307443, 14.2249060907, 14.2249814332, 14.2250567717, 14.2251321063, 14.2252074369, 14.2252827637, 14.2253580865, 14.2254334053, 14.2255087202, 14.2255840312, 14.2256593383, 14.2257346414, 14.2258099406, 14.2258852359, 14.2259605272, 14.2260358146, 14.2261110981, 14.2261863777, 14.2262616533, 14.226336925, 14.2264121928, 14.2264874566, 14.2265627166, 14.2266379725, 14.2267132246, 14.2267884728, 14.226863717, 14.2269389573, 14.2270141936, 14.2270894261, 14.2271646546, 14.2272398792, 14.2273150999, 14.2273903167, 14.2274655295, 14.2275407384, 14.2276159434, 14.2276911445, 14.2277663416, 14.2278415349, 14.2279167242, 14.2279919096, 14.2280670911, 14.2281422686, 14.2282174423, 14.228292612, 14.2283677778, 14.2284429397, 14.2285180977, 14.2285932518, 14.2286684019, 14.2287435482, 14.2288186905, 14.2288938289, 14.2289689634, 14.229044094, 14.2291192207, 14.2291943434, 14.2292694623, 14.2293445772, 14.2294196882, 14.2294947953, 14.2295698986, 14.2296449978, 14.2297200932, 14.2297951847, 14.2298702723, 14.229945356, 14.2300204357, 14.2300955116, 14.2301705835, 14.2302456515, 14.2303207157, 14.2303957759, 14.2304708322, 14.2305458846, 14.2306209331, 14.2306959777, 14.2307710184, 14.2308460552, 14.2309210881, 14.2309961171, 14.2310711422, 14.2311461634, 14.2312211807, 14.2312961941, 14.2313712036, 14.2314462092, 14.2315212109, 14.2315962087, 14.2316712026, 14.2317461926, 14.2318211787, 14.2318961609, 14.2319711392, 14.2320461136, 14.2321210841, 14.2321960507, 14.2322710134, 14.2323459722, 14.2324209272, 14.2324958782, 14.2325708254, 14.2326457686, 14.232720708, 14.2327956434, 14.232870575, 14.2329455027, 14.2330204265, 14.2330953464, 14.2331702624, 14.2332451745, 14.2333200827, 14.2333949871, 14.2334698875, 14.2335447841, 14.2336196768, 14.2336945655, 14.2337694504, 14.2338443315, 14.2339192086, 14.2339940818, 14.2340689512, 14.2341438167, 14.2342186782, 14.2342935359, 14.2343683898, 14.2344432397, 14.2345180857, 14.2345929279, 14.2346677662, 14.2347426006, 14.2348174311, 14.2348922578, 14.2349670805, 14.2350418994, 14.2351167144, 14.2351915255, 14.2352663328, 14.2353411361, 14.2354159356, 14.2354907312, 14.2355655229, 14.2356403108, 14.2357150948, 14.2357898749, 14.2358646511, 14.2359394234, 14.2360141919, 14.2360889565, 14.2361637172, 14.2362384741, 14.236313227, 14.2363879761, 14.2364627214, 14.2365374627, 14.2366122002, 14.2366869338, 14.2367616636, 14.2368363894, 14.2369111114, 14.2369858296, 14.2370605438, 14.2371352542, 14.2372099608, 14.2372846634, 14.2373593622, 14.2374340571, 14.2375087482, 14.2375834354, 14.2376581187, 14.2377327981, 14.2378074737, 14.2378821454, 14.2379568133, 14.2380314773, 14.2381061374, 14.2381807937, 14.2382554461, 14.2383300946, 14.2384047393, 14.2384793801, 14.2385540171, 14.2386286502, 14.2387032794, 14.2387779048, 14.2388525263, 14.238927144, 14.2390017578, 14.2390763677, 14.2391509738, 14.239225576, 14.2393001744, 14.2393747689, 14.2394493595, 14.2395239463, 14.2395985292, 14.2396731083, 14.2397476836, 14.2398222549, 14.2398968224, 14.2399713861, 14.2400459459, 14.2401205019, 14.240195054, 14.2402696022, 14.2403441466, 14.2404186872, 14.2404932239, 14.2405677567, 14.2406422857, 14.2407168109, 14.2407913322, 14.2408658496, 14.2409403632, 14.241014873, 14.2410893789, 14.2411638809, 14.2412383791, 14.2413128735, 14.241387364, 14.2414618507, 14.2415363335, 14.2416108125, 14.2416852876, 14.2417597589, 14.2418342263, 14.2419086899, 14.2419831497, 14.2420576056, 14.2421320577, 14.2422065059, 14.2422809503, 14.2423553909, 14.2424298276, 14.2425042604, 14.2425786895, 14.2426531146, 14.242727536, 14.2428019535, 14.2428763672, 14.242950777, 14.243025183, 14.2430995852, 14.2431739835, 14.243248378, 14.2433227686, 14.2433971554, 14.2434715384, 14.2435459175, 14.2436202928, 14.2436946643, 14.243769032, 14.2438433958, 14.2439177557, 14.2439921119, 14.2440664642, 14.2441408127, 14.2442151573, 14.2442894981, 14.2443638351, 14.2444381683, 14.2445124976, 14.2445868231, 14.2446611448, 14.2447354626, 14.2448097766, 14.2448840868, 14.2449583932, 14.2450326957, 14.2451069944, 14.2451812893, 14.2452555803, 14.2453298675, 14.2454041509, 14.2454784305, 14.2455527063, 14.2456269782, 14.2457012463, 14.2457755106, 14.245849771, 14.2459240277, 14.2459982805, 14.2460725295, 14.2461467746, 14.246221016, 14.2462952535, 14.2463694872, 14.2464437171, 14.2465179432, 14.2465921654, 14.2466663839, 14.2467405985, 14.2468148093, 14.2468890163, 14.2469632194, 14.2470374188, 14.2471116143, 14.247185806, 14.2472599939, 14.247334178, 14.2474083583, 14.2474825348, 14.2475567074, 14.2476308762, 14.2477050413, 14.2477792025, 14.2478533599, 14.2479275134, 14.2480016632, 14.2480758092, 14.2481499513, 14.2482240897, 14.2482982242, 14.2483723549, 14.2484464818, 14.2485206049, 14.2485947242, 14.2486688397, 14.2487429514, 14.2488170593, 14.2488911633, 14.2489652636, 14.2490393601, 14.2491134527, 14.2491875416, 14.2492616266, 14.2493357078, 14.2494097853, 14.2494838589, 14.2495579287, 14.2496319947, 14.249706057, 14.2497801154, 14.24985417, 14.2499282208, 14.2500022678, 14.2500763111, 14.2501503505, 14.2502243861, 14.2502984179, 14.2503724459, 14.2504464701, 14.2505204906, 14.2505945072, 14.25066852, 14.2507425291, 14.2508165343, 14.2508905357, 14.2509645334, 14.2510385272, 14.2511125173, 14.2511865035, 14.251260486, 14.2513344647, 14.2514084395, 14.2514824106, 14.2515563779, 14.2516303414, 14.2517043011, 14.251778257, 14.2518522092, 14.2519261575, 14.252000102, 14.2520740428, 14.2521479798, 14.2522219129, 14.2522958423, 14.2523697679, 14.2524436897, 14.2525176078, 14.252591522, 14.2526654325, 14.2527393391, 14.252813242, 14.2528871411, 14.2529610364, 14.2530349279, 14.2531088157, 14.2531826996, 14.2532565798, 14.2533304562, 14.2534043288, 14.2534781976, 14.2535520626, 14.2536259239, 14.2536997814, 14.2537736351, 14.253847485, 14.2539213311, 14.2539951735, 14.2540690121, 14.2541428469, 14.2542166779, 14.2542905051, 14.2543643286, 14.2544381483, 14.2545119642, 14.2545857763, 14.2546595847, 14.2547333892, 14.2548071901, 14.2548809871, 14.2549547803, 14.2550285698, 14.2551023555, 14.2551761375, 14.2552499156, 14.25532369, 14.2553974606, 14.2554712275, 14.2555449905, 14.2556187498, 14.2556925054, 14.2557662571, 14.2558400051, 14.2559137493, 14.2559874898, 14.2560612265, 14.2561349594, 14.2562086885, 14.2562824139, 14.2563561355, 14.2564298534, 14.2565035674, 14.2565772777, 14.2566509843, 14.2567246871, 14.2567983861, 14.2568720813, 14.2569457728, 14.2570194605, 14.2570931445, 14.2571668247, 14.2572405011, 14.2573141738, 14.2573878427, 14.2574615078, 14.2575351692, 14.2576088268, 14.2576824807, 14.2577561308, 14.2578297772, 14.2579034197, 14.2579770586, 14.2580506936, 14.2581243249, 14.2581979525, 14.2582715763, 14.2583451963, 14.2584188126, 14.2584924251, 14.2585660339, 14.2586396389, 14.2587132402, 14.2587868377, 14.2588604314, 14.2589340214, 14.2590076076, 14.2590811901, 14.2591547689, 14.2592283438, 14.2593019151, 14.2593754826, 14.2594490463, 14.2595226063, 14.2595961625, 14.259669715, 14.2597432637, 14.2598168087, 14.2598903499, 14.2599638874, 14.2600374211, 14.2601109511, 14.2601844773, 14.2602579998, 14.2603315186, 14.2604050336, 14.2604785448, 14.2605520523, 14.2606255561, 14.2606990561, 14.2607725524, 14.2608460449, 14.2609195337, 14.2609930187, 14.2610665, 14.2611399776, 14.2612134514, 14.2612869214, 14.2613603878, 14.2614338504, 14.2615073092, 14.2615807643, 14.2616542157, 14.2617276633, 14.2618011072, 14.2618745473, 14.2619479838, 14.2620214164, 14.2620948454, 14.2621682706, 14.262241692, 14.2623151098, 14.2623885238, 14.262461934, 14.2625353405, 14.2626087433, 14.2626821424, 14.2627555377, 14.2628289293, 14.2629023171, 14.2629757012, 14.2630490816, 14.2631224583, 14.2631958312, 14.2632692004, 14.2633425658, 14.2634159276, 14.2634892856, 14.2635626398, 14.2636359904, 14.2637093372, 14.2637826802, 14.2638560196, 14.2639293552, 14.2640026871, 14.2640760153, 14.2641493397, 14.2642226604, 14.2642959774, 14.2643692907, 14.2644426002, 14.264515906, 14.2645892081, 14.2646625065, 14.2647358011, 14.264809092, 14.2648823792, 14.2649556627, 14.2650289425, 14.2651022185, 14.2651754908, 14.2652487594, 14.2653220242, 14.2653952854, 14.2654685428, 14.2655417965, 14.2656150465, 14.2656882927, 14.2657615353, 14.2658347741, 14.2659080092, 14.2659812406, 14.2660544683, 14.2661276923, 14.2662009125, 14.266274129, 14.2663473418, 14.2664205509, 14.2664937563, 14.266566958, 14.2666401559, 14.2667133502, 14.2667865407, 14.2668597275, 14.2669329106, 14.26700609, 14.2670792657, 14.2671524376, 14.2672256059, 14.2672987704, 14.2673719313, 14.2674450884, 14.2675182418, 14.2675913915, 14.2676645375, 14.2677376798, 14.2678108184, 14.2678839532, 14.2679570844, 14.2680302119, 14.2681033356, 14.2681764557, 14.268249572, 14.2683226846, 14.2683957936, 14.2684688988, 14.2685420003, 14.2686150981, 14.2686881922, 14.2687612826, 14.2688343693, 14.2689074523, 14.2689805316, 14.2690536073, 14.2691266791, 14.2691997473, 14.2692728118, 14.2693458726, 14.2694189297, 14.2694919831, 14.2695650328, 14.2696380788, 14.2697111211, 14.2697841597, 14.2698571947, 14.2699302259, 14.2700032534, 14.2700762772, 14.2701492973, 14.2702223137, 14.2702953265, 14.2703683355, 14.2704413408, 14.2705143425, 14.2705873404, 14.2706603347, 14.2707333253, 14.2708063121, 14.2708792953, 14.2709522748, 14.2710252506, 14.2710982227, 14.2711711911, 14.2712441559, 14.2713171169, 14.2713900742, 14.2714630279, 14.2715359779, 14.2716089242, 14.2716818667, 14.2717548056, 14.2718277409, 14.2719006724, 14.2719736002, 14.2720465244, 14.2721194449, 14.2721923616, 14.2722652747, 14.2723381842, 14.2724110899, 14.2724839919, 14.2725568903, 14.272629785, 14.272702676, 14.2727755633, 14.2728484469, 14.2729213269, 14.2729942031, 14.2730670757, 14.2731399446, 14.2732128099, 14.2732856714, 14.2733585293, 14.2734313835, 14.273504234, 14.2735770808, 14.2736499239, 14.2737227634, 14.2737955992, 14.2738684313, 14.2739412598, 14.2740140845, 14.2740869056, 14.274159723, 14.2742325368, 14.2743053469, 14.2743781532, 14.274450956, 14.274523755, 14.2745965504, 14.2746693421, 14.2747421301, 14.2748149145, 14.2748876951, 14.2749604721, 14.2750332455, 14.2751060151, 14.2751787811, 14.2752515435, 14.2753243021, 14.2753970571, 14.2754698084, 14.2755425561, 14.2756153001, 14.2756880404, 14.275760777, 14.27583351, 14.2759062393, 14.275978965, 14.276051687, 14.2761244053, 14.2761971199, 14.2762698309, 14.2763425382, 14.2764152419, 14.2764879419, 14.2765606382, 14.2766333309, 14.2767060199, 14.2767787052, 14.2768513869, 14.2769240649, 14.2769967393, 14.27706941, 14.277142077, 14.2772147404, 14.2772874001, 14.2773600562, 14.2774327086, 14.2775053573, 14.2775780024, 14.2776506438, 14.2777232816, 14.2777959157, 14.2778685462, 14.277941173, 14.2780137961, 14.2780864156, 14.2781590314, 14.2782316436, 14.2783042521, 14.278376857, 14.2784494582, 14.2785220558, 14.2785946497, 14.2786672399, 14.2787398266, 14.2788124095, 14.2788849888, 14.2789575645, 14.2790301364, 14.2791027048, 14.2791752695, 14.2792478305, 14.2793203879, 14.2793929417, 14.2794654918, 14.2795380382, 14.2796105811, 14.2796831202, 14.2797556557, 14.2798281876, 14.2799007158, 14.2799732404, 14.2800457613, 14.2801182786, 14.2801907922, 14.2802633022, 14.2803358086, 14.2804083113, 14.2804808103, 14.2805533057, 14.2806257975, 14.2806982856, 14.2807707701, 14.280843251, 14.2809157282, 14.2809882018, 14.2810606717, 14.281133138, 14.2812056006, 14.2812780596, 14.281350515, 14.2814229667, 14.2814954148, 14.2815678593, 14.2816403001, 14.2817127372, 14.2817851708, 14.2818576007, 14.281930027, 14.2820024496, 14.2820748686, 14.2821472839, 14.2822196957, 14.2822921038, 14.2823645082, 14.282436909, 14.2825093062, 14.2825816998, 14.2826540897, 14.282726476, 14.2827988587, 14.2828712377, 14.2829436131, 14.2830159849, 14.283088353, 14.2831607175, 14.2832330784, 14.2833054357, 14.2833777893, 14.2834501393, 14.2835224856, 14.2835948284, 14.2836671675, 14.283739503, 14.2838118348, 14.2838841631, 14.2839564877, 14.2840288086, 14.284101126, 14.2841734397, 14.2842457498, 14.2843180563, 14.2843903592, 14.2844626584, 14.284534954, 14.284607246, 14.2846795344, 14.2847518191, 14.2848241002, 14.2848963777, 14.2849686516, 14.2850409219, 14.2851131885, 14.2851854515, 14.2852577109, 14.2853299667, 14.2854022189, 14.2854744674, 14.2855467123, 14.2856189536, 14.2856911913, 14.2857634254, 14.2858356559, 14.2859078827, 14.2859801059, 14.2860523255, 14.2861245415, 14.2861967539, 14.2862689627, 14.2863411678, 14.2864133694, 14.2864855673, 14.2865577616, 14.2866299523, 14.2867021394, 14.2867743229, 14.2868465027, 14.286918679, 14.2869908516, 14.2870630207, 14.2871351861, 14.2872073479, 14.2872795061, 14.2873516607, 14.2874238117, 14.2874959591, 14.2875681028, 14.287640243, 14.2877123795, 14.2877845125, 14.2878566418, 14.2879287676, 14.2880008897, 14.2880730082, 14.2881451232, 14.2882172345, 14.2882893422, 14.2883614463, 14.2884335468, 14.2885056437, 14.288577737, 14.2886498267, 14.2887219128, 14.2887939953, 14.2888660742, 14.2889381495, 14.2890102211, 14.2890822892, 14.2891543537, 14.2892264146, 14.2892984719, 14.2893705256, 14.2894425757, 14.2895146222, 14.2895866651, 14.2896587044, 14.2897307401, 14.2898027722, 14.2898748007, 14.2899468256, 14.2900188469, 14.2900908647, 14.2901628788, 14.2902348893, 14.2903068963, 14.2903788996, 14.2904508994, 14.2905228955, 14.2905948881, 14.2906668771, 14.2907388624, 14.2908108442, 14.2908828224, 14.290954797, 14.2910267681, 14.2910987355, 14.2911706993, 14.2912426596, 14.2913146162, 14.2913865693, 14.2914585188, 14.2915304647, 14.291602407, 14.2916743457, 14.2917462808, 14.2918182124, 14.2918901403, 14.2919620647, 14.2920339855, 14.2921059027, 14.2921778163, 14.2922497264, 14.2923216328, 14.2923935357, 14.2924654349, 14.2925373306, 14.2926092228, 14.2926811113, 14.2927529962, 14.2928248776, 14.2928967554, 14.2929686296, 14.2930405002, 14.2931123673, 14.2931842308, 14.2932560906, 14.293327947, 14.2933997997, 14.2934716488, 14.2935434944, 14.2936153364, 14.2936871748, 14.2937590097, 14.2938308409, 14.2939026686, 14.2939744927, 14.2940463133, 14.2941181302, 14.2941899436, 14.2942617534, 14.2943335597, 14.2944053623, 14.2944771614, 14.2945489569, 14.2946207489, 14.2946925373, 14.2947643221, 14.2948361033, 14.294907881, 14.294979655, 14.2950514256, 14.2951231925, 14.2951949559, 14.2952667157, 14.2953384719, 14.2954102246, 14.2954819737, 14.2955537192, 14.2956254612, 14.2956971996, 14.2957689344, 14.2958406657, 14.2959123934, 14.2959841175, 14.2960558381, 14.2961275551, 14.2961992685, 14.2962709784, 14.2963426847, 14.2964143874, 14.2964860866, 14.2965577822, 14.2966294743, 14.2967011628, 14.2967728477, 14.2968445291, 14.2969162069, 14.2969878811, 14.2970595518, 14.2971312189, 14.2972028825, 14.2972745425, 14.2973461989, 14.2974178518, 14.2974895012, 14.2975611469, 14.2976327891, 14.2977044278, 14.2977760629, 14.2978476944, 14.2979193224, 14.2979909468, 14.2980625677, 14.298134185, 14.2982057988, 14.298277409, 14.2983490157, 14.2984206188, 14.2984922183, 14.2985638143, 14.2986354067, 14.2987069956, 14.298778581, 14.2988501627, 14.298921741, 14.2989933156, 14.2990648868, 14.2991364544, 14.2992080184, 14.2992795789, 14.2993511358, 14.2994226892, 14.299494239, 14.2995657853, 14.299637328, 14.2997088672, 14.2997804029, 14.299851935, 14.2999234635, 14.2999949885, 14.30006651, 14.3001380279, 14.3002095422, 14.3002810531, 14.3003525603, 14.3004240641, 14.3004955642, 14.3005670609, 14.300638554, 14.3007100436, 14.3007815296, 14.300853012, 14.300924491, 14.3009959664, 14.3010674382, 14.3011389065, 14.3012103713, 14.3012818325, 14.3013532902, 14.3014247444, 14.301496195, 14.3015676421, 14.3016390856, 14.3017105256, 14.3017819621, 14.301853395, 14.3019248244, 14.3019962502, 14.3020676725, 14.3021390913, 14.3022105065, 14.3022819183, 14.3023533264, 14.3024247311, 14.3024961322, 14.3025675297, 14.3026389238, 14.3027103143, 14.3027817013, 14.3028530847, 14.3029244646, 14.302995841, 14.3030672138, 14.3031385832, 14.3032099489, 14.3032813112, 14.3033526699, 14.3034240251, 14.3034953768, 14.3035667249, 14.3036380695, 14.3037094106, 14.3037807482, 14.3038520822, 14.3039234127, 14.3039947397, 14.3040660631, 14.304137383, 14.3042086994, 14.3042800123, 14.3043513217, 14.3044226275, 14.3044939298, 14.3045652286, 14.3046365238, 14.3047078155, 14.3047791037, 14.3048503884, 14.3049216696, 14.3049929472, 14.3050642213, 14.3051354919, 14.305206759, 14.3052780226, 14.3053492826, 14.3054205391, 14.3054917921, 14.3055630416, 14.3056342875, 14.30570553, 14.3057767689, 14.3058480043, 14.3059192362, 14.3059904646, 14.3060616894, 14.3061329108, 14.3062041286, 14.3062753429, 14.3063465537, 14.306417761, 14.3064889647, 14.306560165, 14.3066313617, 14.3067025549, 14.3067737446, 14.3068449308, 14.3069161135, 14.3069872927, 14.3070584684, 14.3071296405, 14.3072008091, 14.3072719743, 14.3073431359, 14.307414294, 14.3074854486, 14.3075565997, 14.3076277473, 14.3076988913, 14.3077700319, 14.3078411689, 14.3079123025, 14.3079834325, 14.3080545591, 14.3081256821, 14.3081968016, 14.3082679176, 14.3083390301, 14.3084101391, 14.3084812446, 14.3085523466, 14.3086234451, 14.3086945401, 14.3087656316, 14.3088367196, 14.3089078041, 14.308978885, 14.3090499625, 14.3091210365, 14.309192107, 14.3092631739, 14.3093342374, 14.3094052974, 14.3094763538, 14.3095474068, 14.3096184563, 14.3096895023, 14.3097605447, 14.3098315837, 14.3099026192, 14.3099736512, 14.3100446796, 14.3101157046, 14.3101867261, 14.3102577441, 14.3103287586, 14.3103997696, 14.3104707771, 14.3105417811, 14.3106127817, 14.3106837787, 14.3107547722, 14.3108257623, 14.3108967488, 14.3109677318, 14.3110387114, 14.3111096875, 14.3111806601, 14.3112516291, 14.3113225947, 14.3113935568, 14.3114645154, 14.3115354706, 14.3116064222, 14.3116773703, 14.311748315, 14.3118192562, 14.3118901939, 14.311961128, 14.3120320587, 14.312102986, 14.3121739097, 14.3122448299, 14.3123157467, 14.31238666, 14.3124575697, 14.312528476, 14.3125993789, 14.3126702782, 14.312741174, 14.3128120664, 14.3128829553, 14.3129538407, 14.3130247226, 14.313095601, 14.313166476, 14.3132373474, 14.3133082154, 14.3133790799, 14.313449941, 14.3135207985, 14.3135916526, 14.3136625032, 14.3137333503, 14.3138041939, 14.313875034, 14.3139458707, 14.3140167039, 14.3140875336, 14.3141583599, 14.3142291826, 14.3143000019, 14.3143708177, 14.31444163, 14.3145124389, 14.3145832443, 14.3146540462, 14.3147248446, 14.3147956396, 14.3148664311, 14.3149372191, 14.3150080036, 14.3150787847, 14.3151495623, 14.3152203364, 14.315291107, 14.3153618742, 14.3154326379, 14.3155033981, 14.3155741549, 14.3156449082, 14.315715658, 14.3157864044, 14.3158571473, 14.3159278867, 14.3159986226, 14.3160693551, 14.3161400841, 14.3162108097, 14.3162815317, 14.3163522504, 14.3164229655, 14.3164936772, 14.3165643854, 14.3166350901, 14.3167057914, 14.3167764892, 14.3168471836, 14.3169178745, 14.3169885619, 14.3170592459, 14.3171299264, 14.3172006034, 14.317271277, 14.3173419471, 14.3174126138, 14.317483277, 14.3175539367, 14.317624593, 14.3176952458, 14.3177658951, 14.317836541, 14.3179071834, 14.3179778224, 14.3180484579, 14.31811909, 14.3181897186, 14.3182603437, 14.3183309654, 14.3184015836, 14.3184721984, 14.3185428097, 14.3186134176, 14.318684022, 14.3187546229, 14.3188252204, 14.3188958144, 14.318966405, 14.3190369921, 14.3191075758, 14.319178156, 14.3192487328, 14.3193193061, 14.319389876, 14.3194604424, 14.3195310054, 14.3196015649, 14.3196721209, 14.3197426736, 14.3198132227, 14.3198837684, 14.3199543107, 14.3200248495, 14.3200953849, 14.3201659168, 14.3202364452, 14.3203069703, 14.3203774918, 14.32044801, 14.3205185246, 14.3205890359, 14.3206595436, 14.320730048, 14.3208005489, 14.3208710463, 14.3209415403, 14.3210120309, 14.321082518, 14.3211530017, 14.3212234819, 14.3212939587, 14.321364432, 14.3214349019, 14.3215053684, 14.3215758314, 14.321646291, 14.3217167471, 14.3217871998, 14.3218576491, 14.3219280949, 14.3219985373, 14.3220689762, 14.3221394117, 14.3222098437, 14.3222802724, 14.3223506975, 14.3224211193, 14.3224915376, 14.3225619525, 14.3226323639, 14.3227027719, 14.3227731765, 14.3228435776, 14.3229139753, 14.3229843695, 14.3230547603, 14.3231251477, 14.3231955317, 14.3232659122, 14.3233362893, 14.3234066629, 14.3234770332, 14.3235473999, 14.3236177633, 14.3236881232, 14.3237584797, 14.3238288328, 14.3238991824, 14.3239695286, 14.3240398714, 14.3241102107, 14.3241805466, 14.3242508791, 14.3243212082, 14.3243915338, 14.324461856, 14.3245321747, 14.3246024901, 14.324672802, 14.3247431105, 14.3248134156, 14.3248837172, 14.3249540154, 14.3250243102, 14.3250946016, 14.3251648895, 14.325235174, 14.3253054551, 14.3253757328, 14.325446007, 14.3255162778, 14.3255865452, 14.3256568092, 14.3257270697, 14.3257973269, 14.3258675806, 14.3259378309, 14.3260080777, 14.3260783212, 14.3261485612, 14.3262187978, 14.326289031, 14.3263592608, 14.3264294871, 14.3264997101, 14.3265699296, 14.3266401457, 14.3267103583, 14.3267805676, 14.3268507735, 14.3269209759, 14.3269911749, 14.3270613705, 14.3271315627, 14.3272017515, 14.3272719368, 14.3273421187, 14.3274122973, 14.3274824724, 14.3275526441, 14.3276228124, 14.3276929772, 14.3277631387, 14.3278332968, 14.3279034514, 14.3279736026, 14.3280437504, 14.3281138948, 14.3281840358, 14.3282541734, 14.3283243076, 14.3283944384, 14.3284645657, 14.3285346897, 14.3286048102, 14.3286749273, 14.3287450411, 14.3288151514, 14.3288852583, 14.3289553618, 14.3290254619, 14.3290955586, 14.3291656519, 14.3292357417, 14.3293058282, 14.3293759113, 14.3294459909, 14.3295160672, 14.3295861401, 14.3296562095, 14.3297262756, 14.3297963382, 14.3298663975, 14.3299364533, 14.3300065058, 14.3300765548, 14.3301466004, 14.3302166427, 14.3302866815, 14.330356717, 14.330426749, 14.3304967776, 14.3305668029, 14.3306368247, 14.3307068432, 14.3307768582, 14.3308468699, 14.3309168781, 14.330986883, 14.3310568844, 14.3311268825, 14.3311968772, 14.3312668684, 14.3313368563, 14.3314068408, 14.3314768219, 14.3315467995, 14.3316167738, 14.3316867447, 14.3317567123, 14.3318266764, 14.3318966371, 14.3319665944, 14.3320365484, 14.3321064989, 14.3321764461, 14.3322463898, 14.3323163302, 14.3323862672, 14.3324562008, 14.332526131, 14.3325960578, 14.3326659812, 14.3327359012, 14.3328058179, 14.3328757312, 14.332945641, 14.3330155475, 14.3330854506, 14.3331553503, 14.3332252466, 14.3332951396, 14.3333650291, 14.3334349153, 14.3335047981, 14.3335746775, 14.3336445535, 14.3337144261, 14.3337842953, 14.3338541612, 14.3339240237, 14.3339938828, 14.3340637385, 14.3341335908, 14.3342034397, 14.3342732853, 14.3343431275, 14.3344129663, 14.3344828017, 14.3345526338, 14.3346224624, 14.3346922877, 14.3347621096, 14.3348319281, 14.3349017433, 14.334971555, 14.3350413634, 14.3351111684, 14.3351809701, 14.3352507683, 14.3353205632, 14.3353903547, 14.3354601428, 14.3355299276, 14.3355997089, 14.3356694869, 14.3357392616, 14.3358090328, 14.3358788007, 14.3359485652, 14.3360183263, 14.3360880841, 14.3361578385, 14.3362275895, 14.3362973371, 14.3363670814, 14.3364368223, 14.3365065598, 14.336576294, 14.3366460247, 14.3367157522, 14.3367854762, 14.3368551969, 14.3369249142, 14.3369946281, 14.3370643387, 14.3371340459, 14.3372037497, 14.3372734502, 14.3373431473, 14.337412841, 14.3374825314, 14.3375522184, 14.337621902, 14.3376915823, 14.3377612592, 14.3378309327, 14.3379006029, 14.3379702697, 14.3380399331, 14.3381095932, 14.3381792499, 14.3382489033, 14.3383185532, 14.3383881999, 14.3384578431, 14.338527483, 14.3385971196, 14.3386667528, 14.3387363826, 14.338806009, 14.3388756321, 14.3389452519, 14.3390148683, 14.3390844813, 14.3391540909, 14.3392236972, 14.3392933002, 14.3393628998, 14.339432496, 14.3395020889, 14.3395716784, 14.3396412645, 14.3397108473, 14.3397804268, 14.3398500029, 14.3399195756, 14.339989145, 14.340058711, 14.3401282737, 14.340197833, 14.340267389, 14.3403369416, 14.3404064909, 14.3404760368, 14.3405455793, 14.3406151185, 14.3406846544, 14.3407541869, 14.340823716, 14.3408932418, 14.3409627643, 14.3410322833, 14.3411017991, 14.3411713115, 14.3412408205, 14.3413103262, 14.3413798286, 14.3414493276, 14.3415188232, 14.3415883156, 14.3416578045, 14.3417272901, 14.3417967724, 14.3418662513, 14.3419357269, 14.3420051991, 14.342074668, 14.3421441335, 14.3422135957, 14.3422830546, 14.3423525101, 14.3424219623, 14.3424914111, 14.3425608565, 14.3426302987, 14.3426997375, 14.3427691729, 14.342838605, 14.3429080338, 14.3429774592, 14.3430468813, 14.3431163, 14.3431857154, 14.3432551275, 14.3433245362, 14.3433939416, 14.3434633437, 14.3435327424, 14.3436021377, 14.3436715298, 14.3437409185, 14.3438103038, 14.3438796858, 14.3439490645, 14.3440184399, 14.3440878119, 14.3441571806, 14.3442265459, 14.3442959079, 14.3443652666, 14.3444346219, 14.3445039739, 14.3445733226, 14.3446426679, 14.3447120099, 14.3447813486, 14.3448506839, 14.3449200159, 14.3449893446, 14.34505867, 14.345127992, 14.3451973107, 14.345266626, 14.345335938, 14.3454052467, 14.3454745521, 14.3455438541, 14.3456131528, 14.3456824482, 14.3457517402, 14.345821029, 14.3458903143, 14.3459595964, 14.3460288751, 14.3460981505, 14.3461674226, 14.3462366914, 14.3463059568, 14.3463752189, 14.3464444777, 14.3465137332, 14.3465829853, 14.3466522341, 14.3467214796, 14.3467907218, 14.3468599606, 14.3469291961, 14.3469984283, 14.3470676572, 14.3471368827, 14.3472061049, 14.3472753238, 14.3473445394, 14.3474137517, 14.3474829606, 14.3475521663, 14.3476213686, 14.3476905676, 14.3477597632, 14.3478289556, 14.3478981446, 14.3479673303, 14.3480365127, 14.3481056918, 14.3481748675, 14.34824404, 14.3483132091, 14.3483823749, 14.3484515374, 14.3485206966, 14.3485898524, 14.348659005, 14.3487281542, 14.3487973002, 14.3488664428, 14.348935582, 14.349004718, 14.3490738507, 14.34914298, 14.3492121061, 14.3492812288, 14.3493503482, 14.3494194643, 14.3494885771, 14.3495576866, 14.3496267928, 14.3496958957, 14.3497649952, 14.3498340915, 14.3499031844, 14.349972274, 14.3500413603, 14.3501104433, 14.3501795231, 14.3502485994, 14.3503176725, 14.3503867423, 14.3504558088, 14.350524872, 14.3505939318, 14.3506629884, 14.3507320416, 14.3508010916, 14.3508701382, 14.3509391815, 14.3510082216, 14.3510772583, 14.3511462917, 14.3512153219, 14.3512843487, 14.3513533722, 14.3514223924, 14.3514914093, 14.3515604229, 14.3516294332, 14.3516984403, 14.351767444, 14.3518364444, 14.3519054415, 14.3519744353, 14.3520434258, 14.352112413, 14.3521813969, 14.3522503775, 14.3523193548, 14.3523883289, 14.3524572996, 14.352526267, 14.3525952311, 14.352664192, 14.3527331495, 14.3528021037, 14.3528710547, 14.3529400023, 14.3530089467, 14.3530778877, 14.3531468255, 14.35321576, 14.3532846911, 14.353353619, 14.3534225436, 14.3534914649, 14.3535603829, 14.3536292976, 14.353698209, 14.3537671172, 14.353836022, 14.3539049236, 14.3539738218, 14.3540427168, 14.3541116085, 14.3541804968, 14.3542493819, 14.3543182638, 14.3543871423, 14.3544560175, 14.3545248894, 14.3545937581, 14.3546626235, 14.3547314856, 14.3548003444, 14.3548691999, 14.3549380521, 14.355006901, 14.3550757467, 14.355144589, 14.3552134281, 14.3552822639, 14.3553510964, 14.3554199257, 14.3554887516, 14.3555575743, 14.3556263936, 14.3556952097, 14.3557640225, 14.3558328321, 14.3559016383, 14.3559704413, 14.356039241, 14.3561080374, 14.3561768305, 14.3562456204, 14.3563144069, 14.3563831902, 14.3564519702, 14.356520747, 14.3565895204, 14.3566582906, 14.3567270575, 14.3567958211, 14.3568645814, 14.3569333385, 14.3570020923, 14.3570708428, 14.35713959, 14.357208334, 14.3572770746, 14.357345812, 14.3574145462, 14.357483277, 14.3575520046, 14.3576207289, 14.35768945, 14.3577581677, 14.3578268822, 14.3578955934, 14.3579643014, 14.358033006, 14.3581017074, 14.3581704056, 14.3582391004, 14.358307792, 14.3583764803, 14.3584451654, 14.3585138471, 14.3585825257, 14.3586512009, 14.3587198729, 14.3587885416, 14.358857207, 14.3589258692, 14.3589945281, 14.3590631837, 14.359131836, 14.3592004851, 14.359269131, 14.3593377735, 14.3594064128, 14.3594750488, 14.3595436816, 14.3596123111, 14.3596809374, 14.3597495603, 14.35981818, 14.3598867965, 14.3599554097, 14.3600240196, 14.3600926262, 14.3601612296, 14.3602298297, 14.3602984266, 14.3603670202, 14.3604356106, 14.3605041977, 14.3605727815, 14.360641362, 14.3607099393, 14.3607785134, 14.3608470842, 14.3609156517, 14.360984216, 14.361052777, 14.3611213347, 14.3611898892, 14.3612584405, 14.3613269884, 14.3613955332, 14.3614640746, 14.3615326128, 14.3616011478, 14.3616696795, 14.3617382079, 14.3618067331, 14.3618752551, 14.3619437737, 14.3620122892, 14.3620808013, 14.3621493102, 14.3622178159, 14.3622863183, 14.3623548175, 14.3624233134, 14.362491806, 14.3625602954, 14.3626287816, 14.3626972645, 14.3627657442, 14.3628342206, 14.3629026937, 14.3629711636, 14.3630396303, 14.3631080937, 14.3631765538, 14.3632450107, 14.3633134644, 14.3633819148, 14.3634503619, 14.3635188059, 14.3635872465, 14.3636556839, 14.3637241181, 14.363792549, 14.3638609767, 14.3639294012, 14.3639978224, 14.3640662403, 14.364134655, 14.3642030665, 14.3642714747, 14.3643398797, 14.3644082814, 14.3644766799, 14.3645450751, 14.3646134671, 14.3646818559, 14.3647502414, 14.3648186237, 14.3648870027, 14.3649553785, 14.365023751, 14.3650921203, 14.3651604864, 14.3652288493, 14.3652972088, 14.3653655652, 14.3654339183, 14.3655022682, 14.3655706148, 14.3656389582, 14.3657072984, 14.3657756353, 14.365843969, 14.3659122995, 14.3659806267, 14.3660489507, 14.3661172714, 14.3661855889, 14.3662539032, 14.3663222142, 14.3663905221, 14.3664588266, 14.366527128, 14.3665954261, 14.3666637209, 14.3667320126, 14.366800301, 14.3668685862, 14.3669368681, 14.3670051468, 14.3670734223, 14.3671416946, 14.3672099636, 14.3672782294, 14.3673464919, 14.3674147512, 14.3674830073, 14.3675512602, 14.3676195099, 14.3676877563, 14.3677559995, 14.3678242394, 14.3678924761, 14.3679607096, 14.3680289399, 14.368097167, 14.3681653908, 14.3682336114, 14.3683018288, 14.3683700429, 14.3684382538, 14.3685064615, 14.368574666, 14.3686428672, 14.3687110652, 14.36877926, 14.3688474516, 14.36891564, 14.3689838251, 14.369052007, 14.3691201857, 14.3691883611, 14.3692565334, 14.3693247024, 14.3693928682, 14.3694610308, 14.3695291901, 14.3695973463, 14.3696654992, 14.3697336489, 14.3698017954, 14.3698699386, 14.3699380787, 14.3700062155, 14.3700743491, 14.3701424795, 14.3702106067, 14.3702787306, 14.3703468514, 14.3704149689, 14.3704830832, 14.3705511943, 14.3706193021, 14.3706874068, 14.3707555083, 14.3708236065, 14.3708917015, 14.3709597933, 14.3710278819, 14.3710959673, 14.3711640494, 14.3712321284, 14.3713002041, 14.3713682766, 14.3714363459, 14.371504412, 14.3715724749, 14.3716405346, 14.3717085911, 14.3717766443, 14.3718446944, 14.3719127412, 14.3719807849, 14.3720488253, 14.3721168625, 14.3721848965, 14.3722529273, 14.3723209549, 14.3723889792, 14.3724570004, 14.3725250184, 14.3725930331, 14.3726610447, 14.372729053, 14.3727970582, 14.3728650601, 14.3729330588, 14.3730010544, 14.3730690467, 14.3731370358, 14.3732050217, 14.3732730044, 14.3733409839, 14.3734089602, 14.3734769333, 14.3735449032, 14.3736128699, 14.3736808334, 14.3737487937, 14.3738167508, 14.3738847047, 14.3739526554, 14.3740206029, 14.3740885471, 14.3741564882, 14.3742244261, 14.3742923608, 14.3743602923, 14.3744282206, 14.3744961457, 14.3745640676, 14.3746319863, 14.3746999018, 14.3747678141, 14.3748357232, 14.3749036291, 14.3749715318, 14.3750394313, 14.3751073277, 14.3751752208, 14.3752431107, 14.3753109975, 14.375378881, 14.3754467614, 14.3755146385, 14.3755825125, 14.3756503833, 14.3757182508, 14.3757861152, 14.3758539764, 14.3759218344, 14.3759896892, 14.3760575408, 14.3761253893, 14.3761932345, 14.3762610766, 14.3763289154, 14.3763967511, 14.3764645836, 14.3765324128, 14.3766002389, 14.3766680619, 14.3767358816, 14.3768036981, 14.3768715115, 14.3769393216, 14.3770071286, 14.3770749324, 14.377142733, 14.3772105304, 14.3772783246, 14.3773461157, 14.3774139035, 14.3774816882, 14.3775494697, 14.377617248, 14.3776850231, 14.377752795, 14.3778205638, 14.3778883293, 14.3779560917, 14.3780238509, 14.3780916069, 14.3781593598, 14.3782271094, 14.3782948559, 14.3783625992, 14.3784303393, 14.3784980762, 14.37856581, 14.3786335406, 14.378701268, 14.3787689922, 14.3788367132, 14.3789044311, 14.3789721457, 14.3790398572, 14.3791075656, 14.3791752707, 14.3792429727, 14.3793106715, 14.3793783671, 14.3794460595, 14.3795137488, 14.3795814349, 14.3796491178, 14.3797167975, 14.3797844741, 14.3798521474, 14.3799198176, 14.3799874847, 14.3800551485, 14.3801228092, 14.3801904667, 14.3802581211, 14.3803257723, 14.3803934203, 14.3804610651, 14.3805287067, 14.3805963452, 14.3806639805, 14.3807316127, 14.3807992417, 14.3808668675, 14.3809344901, 14.3810021096, 14.3810697258, 14.381137339, 14.3812049489, 14.3812725557, 14.3813401593, 14.3814077598, 14.3814753571, 14.3815429512, 14.3816105421, 14.3816781299, 14.3817457145, 14.381813296, 14.3818808743, 14.3819484494, 14.3820160214, 14.3820835901, 14.3821511558, 14.3822187182, 14.3822862775, 14.3823538337, 14.3824213866, 14.3824889364, 14.3825564831, 14.3826240266, 14.3826915669, 14.3827591041, 14.3828266381, 14.3828941689, 14.3829616966, 14.3830292211, 14.3830967424, 14.3831642606, 14.3832317757, 14.3832992875, 14.3833667963, 14.3834343018, 14.3835018042, 14.3835693035, 14.3836367995, 14.3837042925, 14.3837717822, 14.3838392689, 14.3839067523, 14.3839742326, 14.3840417098, 14.3841091837, 14.3841766546, 14.3842441222, 14.3843115868, 14.3843790481, 14.3844465063, 14.3845139614, 14.3845814133, 14.3846488621, 14.3847163076, 14.3847837501, 14.3848511894, 14.3849186255, 14.3849860585, 14.3850534883, 14.385120915, 14.3851883386, 14.3852557589, 14.3853231762, 14.3853905903, 14.3854580012, 14.385525409, 14.3855928136, 14.3856602151, 14.3857276134, 14.3857950086, 14.3858624006, 14.3859297895, 14.3859971753, 14.3860645579, 14.3861319373, 14.3861993136, 14.3862666868, 14.3863340568, 14.3864014236, 14.3864687874, 14.3865361479, 14.3866035054, 14.3866708596, 14.3867382108, 14.3868055588, 14.3868729036, 14.3869402453, 14.3870075839, 14.3870749193, 14.3871422516, 14.3872095807, 14.3872769067, 14.3873442296, 14.3874115493, 14.3874788658, 14.3875461793, 14.3876134896, 14.3876807967, 14.3877481007, 14.3878154016, 14.3878826993, 14.3879499939, 14.3880172853, 14.3880845737, 14.3881518588, 14.3882191409, 14.3882864198, 14.3883536955, 14.3884209681, 14.3884882376, 14.388555504, 14.3886227672, 14.3886900273, 14.3887572842, 14.388824538, 14.3888917887, 14.3889590362, 14.3890262806, 14.3890935219, 14.38916076, 14.389227995, 14.3892952269, 14.3893624556, 14.3894296812, 14.3894969037, 14.3895641231, 14.3896313393, 14.3896985523, 14.3897657623, 14.3898329691, 14.3899001728, 14.3899673733, 14.3900345707, 14.390101765, 14.3901689562, 14.3902361442, 14.3903033291, 14.3903705109, 14.3904376896, 14.3905048651, 14.3905720375, 14.3906392067, 14.3907063729, 14.3907735359, 14.3908406958, 14.3909078525, 14.3909750062, 14.3910421567, 14.391109304, 14.3911764483, 14.3912435894, 14.3913107274, 14.3913778623, 14.3914449941, 14.3915121227, 14.3915792482, 14.3916463706, 14.3917134899, 14.391780606, 14.391847719, 14.3919148289, 14.3919819357, 14.3920490394, 14.3921161399, 14.3921832373, 14.3922503316, 14.3923174228, 14.3923845108, 14.3924515958, 14.3925186776, 14.3925857563, 14.3926528319, 14.3927199043, 14.3927869737, 14.3928540399, 14.392921103, 14.392988163, 14.3930552198, 14.3931222736, 14.3931893242, 14.3932563717, 14.3933234162, 14.3933904574, 14.3934574956, 14.3935245307, 14.3935915626, 14.3936585915, 14.3937256172, 14.3937926398, 14.3938596593, 14.3939266756, 14.3939936889, 14.3940606991, 14.3941277061, 14.39419471, 14.3942617108, 14.3943287085, 14.3943957031, 14.3944626946, 14.394529683, 14.3945966682, 14.3946636504, 14.3947306294, 14.3947976054, 14.3948645782, 14.3949315479, 14.3949985145, 14.395065478, 14.3951324384, 14.3951993957, 14.3952663498, 14.3953333009, 14.3954002489, 14.3954671937, 14.3955341355, 14.3956010741, 14.3956680096, 14.3957349421, 14.3958018714, 14.3958687976, 14.3959357207, 14.3960026407, 14.3960695576, 14.3961364714, 14.3962033821, 14.3962702897, 14.3963371942, 14.3964040956, 14.3964709939, 14.3965378891, 14.3966047812, 14.3966716702, 14.396738556, 14.3968054388, 14.3968723185, 14.3969391951, 14.3970060686, 14.397072939, 14.3971398062, 14.3972066704, 14.3972735315, 14.3973403895, 14.3974072444, 14.3974740962, 14.3975409449, 14.3976077905, 14.3976746329, 14.3977414723, 14.3978083087, 14.3978751419, 14.397941972, 14.398008799, 14.3980756229, 14.3981424437, 14.3982092615, 14.3982760761, 14.3983428876, 14.3984096961, 14.3984765014, 14.3985433037, 14.3986101029, 14.398676899, 14.3987436919, 14.3988104818, 14.3988772686, 14.3989440523, 14.399010833, 14.3990776105, 14.3991443849, 14.3992111563, 14.3992779245, 14.3993446897, 14.3994114517, 14.3994782107, 14.3995449666, 14.3996117194, 14.3996784692, 14.3997452158, 14.3998119593, 14.3998786998, 14.3999454371, 14.4000121714, 14.4000789026, 14.4001456307, 14.4002123558, 14.4002790777, 14.4003457965, 14.4004125123, 14.400479225, 14.4005459346, 14.4006126411, 14.4006793445, 14.4007460448, 14.4008127421, 14.4008794363, 14.4009461274, 14.4010128154, 14.4010795003, 14.4011461822, 14.4012128609, 14.4012795366, 14.4013462092, 14.4014128787, 14.4014795452, 14.4015462085, 14.4016128688, 14.401679526, 14.4017461801, 14.4018128311, 14.4018794791, 14.401946124, 14.4020127658, 14.4020794045, 14.4021460401, 14.4022126727, 14.4022793022, 14.4023459286, 14.402412552, 14.4024791722, 14.4025457894, 14.4026124035, 14.4026790145, 14.4027456225, 14.4028122274, 14.4028788292, 14.4029454279, 14.4030120236, 14.4030786162, 14.4031452057, 14.4032117921, 14.4032783755, 14.4033449558, 14.403411533, 14.4034781071, 14.4035446782, 14.4036112462, 14.4036778111, 14.403744373, 14.4038109318, 14.4038774875, 14.4039440402, 14.4040105897, 14.4040771362, 14.4041436797, 14.4042102201, 14.4042767574, 14.4043432916, 14.4044098228, 14.4044763508, 14.4045428759, 14.4046093978, 14.4046759167, 14.4047424326, 14.4048089453, 14.404875455, 14.4049419616, 14.4050084652, 14.4050749657, 14.4051414631, 14.4052079575, 14.4052744488, 14.405340937, 14.4054074222, 14.4054739043, 14.4055403834, 14.4056068594, 14.4056733323, 14.4057398021, 14.4058062689, 14.4058727327, 14.4059391933, 14.406005651, 14.4060721055, 14.406138557, 14.4062050054, 14.4062714508, 14.4063378931, 14.4064043323, 14.4064707685, 14.4065372017, 14.4066036317, 14.4066700587, 14.4067364827, 14.4068029036, 14.4068693214, 14.4069357362, 14.4070021479, 14.4070685566, 14.4071349622, 14.4072013647, 14.4072677642, 14.4073341607, 14.4074005541, 14.4074669444, 14.4075333317, 14.4075997159, 14.4076660971, 14.4077324752, 14.4077988502, 14.4078652222, 14.4079315912, 14.4079979571, 14.4080643199, 14.4081306797, 14.4081970364, 14.4082633901, 14.4083297408, 14.4083960884, 14.4084624329, 14.4085287744, 14.4085951128, 14.4086614482, 14.4087277805, 14.4087941098, 14.408860436, 14.4089267592, 14.4089930793, 14.4090593964, 14.4091257105, 14.4091920215, 14.4092583294, 14.4093246343, 14.4093909361, 14.4094572349, 14.4095235307, 14.4095898234, 14.4096561131, 14.4097223997, 14.4097886832, 14.4098549638, 14.4099212412, 14.4099875157, 14.4100537871, 14.4101200554, 14.4101863207, 14.410252583, 14.4103188422, 14.4103850984, 14.4104513515, 14.4105176016, 14.4105838486, 14.4106500926, 14.4107163336, 14.4107825715, 14.4108488064, 14.4109150382, 14.410981267, 14.4110474928, 14.4111137155, 14.4111799352, 14.4112461518, 14.4113123654, 14.411378576, 14.4114447835, 14.411510988, 14.4115771895, 14.4116433879, 14.4117095832, 14.4117757756, 14.4118419649, 14.4119081511, 14.4119743344, 14.4120405146, 14.4121066917, 14.4121728658, 14.4122390369, 14.412305205, 14.41237137, 14.4124375319, 14.4125036909, 14.4125698468, 14.4126359997, 14.4127021495, 14.4127682963, 14.4128344401, 14.4129005809, 14.4129667186, 14.4130328533, 14.4130989849, 14.4131651135, 14.4132312391, 14.4132973617, 14.4133634812, 14.4134295977, 14.4134957112, 14.4135618216, 14.413627929, 14.4136940334, 14.4137601348, 14.4138262331, 14.4138923284, 14.4139584206, 14.4140245099, 14.4140905961, 14.4141566793, 14.4142227594, 14.4142888366, 14.4143549107, 14.4144209817, 14.4144870498, 14.4145531148, 14.4146191768, 14.4146852358, 14.4147512918, 14.4148173447, 14.4148833946, 14.4149494415, 14.4150154853, 14.4150815262, 14.415147564, 14.4152135988, 14.4152796305, 14.4153456593, 14.415411685, 14.4154777077, 14.4155437274, 14.415609744, 14.4156757577, 14.4157417683, 14.4158077759, 14.4158737805, 14.415939782, 14.4160057806, 14.4160717761, 14.4161377686, 14.4162037581, 14.4162697445, 14.416335728, 14.4164017084, 14.4164676858, 14.4165336602, 14.4165996316, 14.4166655999, 14.4167315653, 14.4167975276, 14.4168634869, 14.4169294432, 14.4169953965, 14.4170613468, 14.417127294, 14.4171932382, 14.4172591795, 14.4173251177, 14.4173910529, 14.4174569851, 14.4175229142, 14.4175888404, 14.4176547635, 14.4177206837, 14.4177866008, 14.4178525149, 14.417918426, 14.4179843341, 14.4180502391, 14.4181161412, 14.4181820403, 14.4182479363, 14.4183138293, 14.4183797194, 14.4184456064, 14.4185114904, 14.4185773714, 14.4186432494, 14.4187091244, 14.4187749963, 14.4188408653, 14.4189067313, 14.4189725942, 14.4190384542, 14.4191043111, 14.419170165, 14.419236016, 14.4193018639, 14.4193677088, 14.4194335507, 14.4194993896, 14.4195652255, 14.4196310584, 14.4196968883, 14.4197627152, 14.4198285391, 14.41989436, 14.4199601778, 14.4200259927, 14.4200918046, 14.4201576135, 14.4202234193, 14.4202892222, 14.4203550221, 14.420420819, 14.4204866128, 14.4205524037, 14.4206181916, 14.4206839764, 14.4207497583, 14.4208155372, 14.420881313, 14.4209470859, 14.4210128558, 14.4210786227, 14.4211443865, 14.4212101474, 14.4212759053, 14.4213416602, 14.4214074121, 14.421473161, 14.4215389068, 14.4216046497, 14.4216703897, 14.4217361266, 14.4218018605, 14.4218675914, 14.4219333193, 14.4219990442, 14.4220647662, 14.4221304851, 14.4221962011, 14.422261914, 14.422327624, 14.4223933309, 14.4224590349, 14.4225247359, 14.4225904339, 14.4226561289, 14.4227218209, 14.4227875099, 14.4228531959, 14.422918879, 14.422984559, 14.4230502361, 14.4231159101, 14.4231815812, 14.4232472493, 14.4233129144, 14.4233785765, 14.4234442356, 14.4235098918, 14.4235755449, 14.4236411951, 14.4237068422, 14.4237724864, 14.4238381276, 14.4239037658, 14.4239694011, 14.4240350333, 14.4241006626, 14.4241662888, 14.4242319121, 14.4242975324, 14.4243631497, 14.424428764, 14.4244943754, 14.4245599837, 14.4246255891, 14.4246911915, 14.4247567909, 14.4248223874, 14.4248879808, 14.4249535713, 14.4250191587, 14.4250847432, 14.4251503248, 14.4252159033, 14.4252814789, 14.4253470514, 14.425412621, 14.4254781876, 14.4255437513, 14.4256093119, 14.4256748696, 14.4257404243, 14.425805976, 14.4258715248, 14.4259370705, 14.4260026133, 14.4260681531, 14.42613369, 14.4261992238, 14.4262647547, 14.4263302826, 14.4263958075, 14.4264613295, 14.4265268485, 14.4265923645, 14.4266578775, 14.4267233875, 14.4267888946, 14.4268543987, 14.4269198998, 14.426985398, 14.4270508932, 14.4271163854, 14.4271818746, 14.4272473608, 14.4273128441, 14.4273783245, 14.4274438018, 14.4275092762, 14.4275747476, 14.427640216, 14.4277056815, 14.4277711439, 14.4278366035, 14.42790206, 14.4279675136, 14.4280329642, 14.4280984118, 14.4281638565, 14.4282292982, 14.4282947369, 14.4283601727, 14.4284256055, 14.4284910353, 14.4285564622, 14.4286218861, 14.428687307, 14.428752725, 14.42881814, 14.428883552, 14.4289489611, 14.4290143672, 14.4290797703, 14.4291451705, 14.4292105677, 14.4292759619, 14.4293413532, 14.4294067415, 14.4294721269, 14.4295375092, 14.4296028887, 14.4296682651, 14.4297336386, 14.4297990092, 14.4298643767, 14.4299297414, 14.429995103, 14.4300604617, 14.4301258174, 14.4301911702, 14.43025652, 14.4303218668, 14.4303872107, 14.4304525517, 14.4305178896, 14.4305832246, 14.4306485567, 14.4307138858, 14.4307792119, 14.4308445351, 14.4309098553, 14.4309751726, 14.4310404869, 14.4311057982, 14.4311711066, 14.4312364121, 14.4313017146, 14.4313670141, 14.4314323106, 14.4314976043, 14.4315628949, 14.4316281826, 14.4316934674, 14.4317587492, 14.431824028, 14.4318893039, 14.4319545768, 14.4320198468, 14.4320851138, 14.4321503779, 14.432215639, 14.4322808972, 14.4323461524, 14.4324114047, 14.432476654, 14.4325419004, 14.4326071438, 14.4326723843, 14.4327376218, 14.4328028564, 14.432868088, 14.4329333166, 14.4329985424, 14.4330637651, 14.4331289849, 14.4331942018, 14.4332594157, 14.4333246267, 14.4333898347, 14.4334550398, 14.433520242, 14.4335854412, 14.4336506374, 14.4337158307, 14.433781021, 14.4338462084, 14.4339113929, 14.4339765744, 14.434041753, 14.4341069286, 14.4341721013, 14.434237271, 14.4343024378, 14.4343676017, 14.4344327626, 14.4344979205, 14.4345630756, 14.4346282276, 14.4346933768, 14.434758523, 14.4348236662, 14.4348888065, 14.4349539439, 14.4350190783, 14.4350842098, 14.4351493384, 14.435214464, 14.4352795866, 14.4353447064, 14.4354098232, 14.435474937, 14.4355400479, 14.4356051559, 14.4356702609, 14.435735363, 14.4358004622, 14.4358655584, 14.4359306517, 14.4359957421, 14.4360608295, 14.4361259139, 14.4361909955, 14.4362560741, 14.4363211498, 14.4363862225, 14.4364512923, 14.4365163592, 14.4365814231, 14.4366464841, 14.4367115421, 14.4367765973, 14.4368416495, 14.4369066987, 14.436971745, 14.4370367884, 14.4371018289, 14.4371668664, 14.437231901, 14.4372969327, 14.4373619614, 14.4374269873, 14.4374920101, 14.4375570301, 14.4376220471, 14.4376870612, 14.4377520723, 14.4378170805, 14.4378820858, 14.4379470882, 14.4380120877, 14.4380770842, 14.4381420777, 14.4382070684, 14.4382720561, 14.4383370409, 14.4384020228, 14.4384670017, 14.4385319778, 14.4385969509, 14.438661921, 14.4387268883, 14.4387918526, 14.438856814, 14.4389217724, 14.438986728, 14.4390516806, 14.4391166303, 14.4391815771, 14.4392465209, 14.4393114618, 14.4393763998, 14.4394413349, 14.439506267, 14.4395711963, 14.4396361226, 14.439701046, 14.4397659664, 14.439830884, 14.4398957986, 14.4399607103, 14.4400256191, 14.440090525, 14.4401554279, 14.4402203279, 14.440285225, 14.4403501192, 14.4404150105, 14.4404798988, 14.4405447842, 14.4406096667, 14.4406745463, 14.440739423, 14.4408042968, 14.4408691676, 14.4409340355, 14.4409989005, 14.4410637626, 14.4411286218, 14.4411934781, 14.4412583314, 14.4413231818, 14.4413880293, 14.4414528739, 14.4415177156, 14.4415825544, 14.4416473903, 14.4417122232, 14.4417770532, 14.4418418803, 14.4419067045, 14.4419715258, 14.4420363442, 14.4421011597, 14.4421659722, 14.4422307819, 14.4422955886, 14.4423603924, 14.4424251933, 14.4424899913, 14.4425547864, 14.4426195786, 14.4426843679, 14.4427491542, 14.4428139377, 14.4428787182, 14.4429434958, 14.4430082706, 14.4430730424, 14.4431378113, 14.4432025773, 14.4432673404, 14.4433321006, 14.4433968579, 14.4434616122, 14.4435263637, 14.4435911123, 14.4436558579, 14.4437206007, 14.4437853405, 14.4438500774, 14.4439148115, 14.4439795426, 14.4440442708, 14.4441089961, 14.4441737186, 14.4442384381, 14.4443031547, 14.4443678684, 14.4444325792, 14.4444972871, 14.4445619921, 14.4446266942, 14.4446913934, 14.4447560897, 14.4448207831, 14.4448854736, 14.4449501612, 14.4450148459, 14.4450795277, 14.4451442066, 14.4452088825, 14.4452735556, 14.4453382258, 14.4454028931, 14.4454675575, 14.445532219, 14.4455968776, 14.4456615333, 14.4457261861, 14.445790836, 14.4458554831, 14.4459201272, 14.4459847684, 14.4460494067, 14.4461140421, 14.4461786747, 14.4462433043, 14.4463079311, 14.4463725549, 14.4464371758, 14.4465017939, 14.4465664091, 14.4466310213, 14.4466956307, 14.4467602372, 14.4468248408, 14.4468894415, 14.4469540393, 14.4470186342, 14.4470832262, 14.4471478153, 14.4472124016, 14.4472769849, 14.4473415654, 14.4474061429, 14.4474707176, 14.4475352894, 14.4475998583, 14.4476644243, 14.4477289874, 14.4477935476, 14.447858105, 14.4479226594, 14.447987211, 14.4480517596, 14.4481163054, 14.4481808483, 14.4482453883, 14.4483099254, 14.4483744597, 14.448438991, 14.4485035195, 14.448568045, 14.4486325677, 14.4486970875, 14.4487616045, 14.4488261185, 14.4488906296, 14.4489551379, 14.4490196433, 14.4490841458, 14.4491486454, 14.4492131421, 14.4492776359, 14.4493421269, 14.449406615, 14.4494711002, 14.4495355825, 14.4496000619, 14.4496645385, 14.4497290121, 14.4497934829, 14.4498579508, 14.4499224159, 14.449986878, 14.4500513373, 14.4501157937, 14.4501802472, 14.4502446978, 14.4503091455, 14.4503735904, 14.4504380324, 14.4505024715, 14.4505669077, 14.4506313411, 14.4506957716, 14.4507601992, 14.4508246239, 14.4508890457, 14.4509534647, 14.4510178808, 14.451082294, 14.4511467044, 14.4512111118, 14.4512755164, 14.4513399181, 14.451404317, 14.4514687129, 14.451533106, 14.4515974963, 14.4516618836, 14.4517262681, 14.4517906497, 14.4518550284, 14.4519194043, 14.4519837772, 14.4520481473, 14.4521125146, 14.4521768789, 14.4522412404, 14.4523055991, 14.4523699548, 14.4524343077, 14.4524986577, 14.4525630048, 14.4526273491, 14.4526916905, 14.452756029, 14.4528203647, 14.4528846975, 14.4529490274, 14.4530133545, 14.4530776787, 14.453142, 14.4532063184, 14.453270634, 14.4533349467, 14.4533992566, 14.4534635636, 14.4535278677, 14.4535921689, 14.4536564673, 14.4537207628, 14.4537850555, 14.4538493453, 14.4539136322, 14.4539779163, 14.4540421975, 14.4541064758, 14.4541707513, 14.4542350239, 14.4542992936, 14.4543635605, 14.4544278245, 14.4544920857, 14.454556344, 14.4546205994, 14.454684852, 14.4547491017, 14.4548133485, 14.4548775925, 14.4549418336, 14.4550060719, 14.4550703073, 14.4551345398, 14.4551987695, 14.4552629963, 14.4553272203, 14.4553914414, 14.4554556597, 14.455519875, 14.4555840876, 14.4556482973, 14.4557125041, 14.455776708, 14.4558409091, 14.4559051074, 14.4559693028, 14.4560334953, 14.456097685, 14.4561618718, 14.4562260557, 14.4562902369, 14.4563544151, 14.4564185905, 14.4564827631, 14.4565469327, 14.4566110996, 14.4566752636, 14.4567394247, 14.456803583, 14.4568677384, 14.4569318909, 14.4569960407, 14.4570601875, 14.4571243315, 14.4571884727, 14.457252611, 14.4573167465, 14.4573808791, 14.4574450088, 14.4575091357, 14.4575732598, 14.457637381, 14.4577014993, 14.4577656149, 14.4578297275, 14.4578938373, 14.4579579443, 14.4580220484, 14.4580861496, 14.4581502481, 14.4582143436, 14.4582784363, 14.4583425262, 14.4584066132, 14.4584706974, 14.4585347787, 14.4585988572, 14.4586629329, 14.4587270057, 14.4587910756, 14.4588551427, 14.458919207, 14.4589832684, 14.4590473269, 14.4591113827, 14.4591754356, 14.4592394856, 14.4593035328, 14.4593675771, 14.4594316186, 14.4594956573, 14.4595596931, 14.4596237261, 14.4596877562, 14.4597517835, 14.459815808, 14.4598798296, 14.4599438484, 14.4600078643, 14.4600718774, 14.4601358876, 14.4601998951, 14.4602638996, 14.4603279014, 14.4603919003, 14.4604558963, 14.4605198895, 14.4605838799, 14.4606478674, 14.4607118521, 14.460775834, 14.460839813, 14.4609037892, 14.4609677626, 14.4610317331, 14.4610957008, 14.4611596656, 14.4612236276, 14.4612875868, 14.4613515431, 14.4614154966, 14.4614794473, 14.4615433951, 14.4616073401, 14.4616712823, 14.4617352216, 14.4617991581, 14.4618630918, 14.4619270226, 14.4619909506, 14.4620548757, 14.4621187981, 14.4621827176, 14.4622466342, 14.4623105481, 14.4623744591, 14.4624383673, 14.4625022726, 14.4625661751, 14.4626300748, 14.4626939716, 14.4627578657, 14.4628217569, 14.4628856452, 14.4629495307, 14.4630134134, 14.4630772933, 14.4631411704, 14.4632050446, 14.463268916, 14.4633327845, 14.4633966503, 14.4634605132, 14.4635243733, 14.4635882305, 14.463652085, 14.4637159366, 14.4637797853, 14.4638436313, 14.4639074744, 14.4639713147, 14.4640351522, 14.4640989868, 14.4641628187, 14.4642266477, 14.4642904739, 14.4643542972, 14.4644181177, 14.4644819354, 14.4645457503, 14.4646095624, 14.4646733716, 14.4647371781, 14.4648009817, 14.4648647824, 14.4649285804, 14.4649923755, 14.4650561678, 14.4651199573, 14.465183744, 14.4652475278, 14.4653113089, 14.4653750871, 14.4654388625, 14.4655026351, 14.4655664048, 14.4656301717, 14.4656939359, 14.4657576972, 14.4658214556, 14.4658852113, 14.4659489642, 14.4660127142, 14.4660764614, 14.4661402058, 14.4662039474, 14.4662676861, 14.4663314221, 14.4663951552, 14.4664588855, 14.466522613, 14.4665863377, 14.4666500596, 14.4667137786, 14.4667774949, 14.4668412083, 14.4669049189, 14.4669686267, 14.4670323317, 14.4670960339, 14.4671597333, 14.4672234298, 14.4672871236, 14.4673508145, 14.4674145026, 14.4674781879, 14.4675418704, 14.4676055501, 14.467669227, 14.467732901, 14.4677965723, 14.4678602407, 14.4679239063, 14.4679875692, 14.4680512292, 14.4681148864, 14.4681785408, 14.4682421924, 14.4683058411, 14.4683694871, 14.4684331303, 14.4684967706, 14.4685604082, 14.4686240429, 14.4686876749, 14.468751304, 14.4688149303, 14.4688785538, 14.4689421745, 14.4690057924, 14.4690694075, 14.4691330198, 14.4691966293, 14.469260236, 14.4693238399, 14.469387441, 14.4694510392, 14.4695146347, 14.4695782274, 14.4696418172, 14.4697054043, 14.4697689886, 14.46983257, 14.4698961487, 14.4699597245, 14.4700232976, 14.4700868678, 14.4701504353, 14.4702139999, 14.4702775618, 14.4703411208, 14.4704046771, 14.4704682305, 14.4705317812, 14.470595329, 14.4706588741, 14.4707224163, 14.4707859558, 14.4708494924, 14.4709130263, 14.4709765573, 14.4710400856, 14.4711036111, 14.4711671337, 14.4712306536, 14.4712941707, 14.4713576849, 14.4714211964, 14.4714847051, 14.471548211, 14.4716117141, 14.4716752144, 14.4717387119, 14.4718022066, 14.4718656985, 14.4719291876, 14.471992674, 14.4720561575, 14.4721196382, 14.4721831162, 14.4722465913, 14.4723100637, 14.4723735333, 14.4724370001, 14.472500464, 14.4725639252, 14.4726273836, 14.4726908392, 14.4727542921, 14.4728177421, 14.4728811893, 14.4729446338, 14.4730080754, 14.4730715143, 14.4731349504, 14.4731983837, 14.4732618142, 14.4733252419, 14.4733886668, 14.473452089, 14.4735155083, 14.4735789249, 14.4736423386, 14.4737057496, 14.4737691578, 14.4738325632, 14.4738959659, 14.4739593657, 14.4740227627, 14.474086157, 14.4741495485, 14.4742129372, 14.4742763231, 14.4743397062, 14.4744030866, 14.4744664641, 14.4745298389, 14.4745932109, 14.4746565801, 14.4747199465, 14.4747833102, 14.474846671, 14.4749100291, 14.4749733844, 14.4750367369, 14.4751000866, 14.4751634336, 14.4752267777, 14.4752901191, 14.4753534577, 14.4754167936, 14.4754801266, 14.4755434569, 14.4756067843, 14.475670109, 14.475733431, 14.4757967501, 14.4758600665, 14.4759233801, 14.4759866909, 14.4760499989, 14.4761133042, 14.4761766066, 14.4762399063, 14.4763032032, 14.4763664974, 14.4764297888, 14.4764930773, 14.4765563632, 14.4766196462, 14.4766829265, 14.4767462039, 14.4768094787, 14.4768727506, 14.4769360197, 14.4769992861, 14.4770625497, 14.4771258106, 14.4771890686, 14.4772523239, 14.4773155765, 14.4773788262, 14.4774420732, 14.4775053174, 14.4775685588, 14.4776317975, 14.4776950333, 14.4777582664, 14.4778214968, 14.4778847244, 14.4779479491, 14.4780111712, 14.4780743904, 14.4781376069, 14.4782008206, 14.4782640316, 14.4783272398, 14.4783904452, 14.4784536478, 14.4785168477, 14.4785800448, 14.4786432391, 14.4787064307, 14.4787696195, 14.4788328055, 14.4788959888, 14.4789591693, 14.479022347, 14.479085522, 14.4791486942, 14.4792118636, 14.4792750303, 14.4793381941, 14.4794013553, 14.4794645137, 14.4795276693, 14.4795908221, 14.4796539722, 14.4797171195, 14.479780264, 14.4798434058, 14.4799065448, 14.4799696811, 14.4800328146, 14.4800959453, 14.4801590733, 14.4802221985, 14.4802853209, 14.4803484406, 14.4804115575, 14.4804746717, 14.4805377831, 14.4806008917, 14.4806639976, 14.4807271007, 14.4807902011, 14.4808532987, 14.4809163935, 14.4809794856, 14.4810425749, 14.4811056615, 14.4811687453, 14.4812318263, 14.4812949046, 14.4813579802, 14.4814210529, 14.4814841229, 14.4815471902, 14.4816102547, 14.4816733164, 14.4817363754, 14.4817994317, 14.4818624851, 14.4819255359, 14.4819885838, 14.482051629, 14.4821146715, 14.4821777112, 14.4822407481, 14.4823037823, 14.4823668138, 14.4824298424, 14.4824928684, 14.4825558915, 14.482618912, 14.4826819296, 14.4827449446, 14.4828079567, 14.4828709661, 14.4829339728, 14.4829969767, 14.4830599779, 14.4831229763, 14.4831859719, 14.4832489648, 14.483311955, 14.4833749424, 14.4834379271, 14.483500909, 14.4835638881, 14.4836268645, 14.4836898382, 14.4837528091, 14.4838157773, 14.4838787427, 14.4839417053, 14.4840046653, 14.4840676224, 14.4841305769, 14.4841935285, 14.4842564775, 14.4843194236, 14.4843823671, 14.4844453078, 14.4845082457, 14.4845711809, 14.4846341134, 14.4846970431, 14.48475997, 14.4848228943, 14.4848858157, 14.4849487345, 14.4850116505, 14.4850745637, 14.4851374742, 14.485200382, 14.485263287, 14.4853261892, 14.4853890888, 14.4854519856, 14.4855148796, 14.4855777709, 14.4856406595, 14.4857035453, 14.4857664284, 14.4858293087, 14.4858921863, 14.4859550612, 14.4860179333, 14.4860808027, 14.4861436693, 14.4862065332, 14.4862693943, 14.4863322528, 14.4863951085, 14.4864579614, 14.4865208116, 14.4865836591, 14.4866465038, 14.4867093458, 14.486772185, 14.4868350216, 14.4868978553, 14.4869606864, 14.4870235147, 14.4870863403, 14.4871491631, 14.4872119832, 14.4872748006, 14.4873376152, 14.4874004271, 14.4874632363, 14.4875260427, 14.4875888464, 14.4876516473, 14.4877144456, 14.4877772411, 14.4878400338, 14.4879028238, 14.4879656111, 14.4880283957, 14.4880911775, 14.4881539566, 14.488216733, 14.4882795066, 14.4883422775, 14.4884050457, 14.4884678111, 14.4885305739, 14.4885933338, 14.4886560911, 14.4887188456, 14.4887815974, 14.4888443465, 14.4889070928, 14.4889698364, 14.4890325773, 14.4890953154, 14.4891580508, 14.4892207835, 14.4892835135, 14.4893462407, 14.4894089652, 14.489471687, 14.4895344061, 14.4895971224, 14.489659836, 14.4897225469, 14.489785255, 14.4898479604, 14.4899106631, 14.4899733631, 14.4900360604, 14.4900987549, 14.4901614467, 14.4902241358, 14.4902868221, 14.4903495057, 14.4904121866, 14.4904748648, 14.4905375403, 14.490600213, 14.490662883, 14.4907255503, 14.4907882149, 14.4908508767, 14.4909135359, 14.4909761923, 14.491038846, 14.4911014969, 14.4911641452, 14.4912267907, 14.4912894335, 14.4913520736, 14.4914147109, 14.4914773456, 14.4915399775, 14.4916026067, 14.4916652332, 14.4917278569, 14.491790478, 14.4918530963, 14.4919157119, 14.4919783248, 14.492040935, 14.4921035425, 14.4921661472, 14.4922287493, 14.4922913486, 14.4923539452, 14.492416539, 14.4924791302, 14.4925417187, 14.4926043044, 14.4926668874, 14.4927294677, 14.4927920453, 14.4928546202, 14.4929171923, 14.4929797618, 14.4930423285, 14.4931048925, 14.4931674538, 14.4932300124, 14.4932925683, 14.4933551215, 14.493417672, 14.4934802197, 14.4935427647, 14.4936053071, 14.4936678467, 14.4937303836, 14.4937929178, 14.4938554492, 14.493917978, 14.4939805041, 14.4940430274, 14.4941055481, 14.494168066, 14.4942305812, 14.4942930937, 14.4943556035, 14.4944181106, 14.494480615, 14.4945431167, 14.4946056157, 14.4946681119, 14.4947306055, 14.4947930963, 14.4948555845, 14.4949180699, 14.4949805527, 14.4950430327, 14.49510551, 14.4951679846, 14.4952304565, 14.4952929257, 14.4953553922, 14.495417856, 14.4954803171, 14.4955427755, 14.4956052312, 14.4956676842, 14.4957301344, 14.495792582, 14.4958550269, 14.4959174691, 14.4959799085, 14.4960423453, 14.4961047793, 14.4961672107, 14.4962296394, 14.4962920653, 14.4963544886, 14.4964169091, 14.496479327, 14.4965417421, 14.4966041546, 14.4966665643, 14.4967289714, 14.4967913757, 14.4968537774, 14.4969161763, 14.4969785726, 14.4970409662, 14.497103357, 14.4971657452, 14.4972281306, 14.4972905134, 14.4973528935, 14.4974152708, 14.4974776455, 14.4975400175, 14.4976023868, 14.4976647534, 14.4977271173, 14.4977894785, 14.497851837, 14.4979141928, 14.4979765459, 14.4980388963, 14.498101244, 14.498163589, 14.4982259313, 14.498288271, 14.4983506079, 14.4984129422, 14.4984752737, 14.4985376026, 14.4985999288, 14.4986622522, 14.498724573, 14.4987868911, 14.4988492065, 14.4989115192, 14.4989738293, 14.4990361366, 14.4990984412, 14.4991607432, 14.4992230424, 14.499285339, 14.4993476329, 14.4994099241, 14.4994722126, 14.4995344984, 14.4995967815, 14.4996590619, 14.4997213397, 14.4997836147, 14.4998458871, 14.4999081568, 14.4999704238, 14.5000326881, 14.5000949497, 14.5001572086, 14.5002194648, 14.5002817184, 14.5003439693, 14.5004062175, 14.500468463, 14.5005307058, 14.5005929459, 14.5006551833, 14.5007174181, 14.5007796502, 14.5008418796, 14.5009041063, 14.5009663303, 14.5010285516, 14.5010907703, 14.5011529862, 14.5012151995, 14.5012774101, 14.5013396181, 14.5014018233, 14.5014640259, 14.5015262257, 14.5015884229, 14.5016506174, 14.5017128093, 14.5017749984, 14.5018371849, 14.5018993687, 14.5019615498, 14.5020237282, 14.502085904, 14.5021480771, 14.5022102474, 14.5022724152, 14.5023345802, 14.5023967426, 14.5024589022, 14.5025210592, 14.5025832136, 14.5026453652, 14.5027075142, 14.5027696605, 14.5028318041, 14.502893945, 14.5029560833, 14.5030182188, 14.5030803518, 14.503142482, 14.5032046095, 14.5032667344, 14.5033288566, 14.5033909762, 14.503453093, 14.5035152072, 14.5035773187, 14.5036394275, 14.5037015337, 14.5037636372, 14.503825738, 14.5038878361, 14.5039499316, 14.5040120244, 14.5040741145, 14.504136202, 14.5041982867, 14.5042603689, 14.5043224483, 14.5043845251, 14.5044465991, 14.5045086706, 14.5045707393, 14.5046328054, 14.5046948688, 14.5047569296, 14.5048189876, 14.504881043, 14.5049430958, 14.5050051458, 14.5050671932, 14.505129238, 14.50519128, 14.5052533194, 14.5053153561, 14.5053773902, 14.5054394216, 14.5055014503, 14.5055634764, 14.5056254997, 14.5056875205, 14.5057495385, 14.5058115539, 14.5058735666, 14.5059355767, 14.5059975841, 14.5060595888, 14.5061215909, 14.5061835903, 14.506245587, 14.5063075811, 14.5063695725, 14.5064315613, 14.5064935473, 14.5065555308, 14.5066175115, 14.5066794896, 14.506741465, 14.5068034378, 14.5068654079, 14.5069273753, 14.5069893401, 14.5070513022, 14.5071132617, 14.5071752185, 14.5072371726, 14.5072991241, 14.5073610729, 14.5074230191, 14.5074849626, 14.5075469034, 14.5076088416, 14.5076707771, 14.50773271, 14.5077946402, 14.5078565677, 14.5079184926, 14.5079804149, 14.5080423344, 14.5081042513, 14.5081661656, 14.5082280772, 14.5082899861, 14.5083518924, 14.5084137961, 14.508475697, 14.5085375953, 14.508599491, 14.508661384, 14.5087232744, 14.5087851621, 14.5088470471, 14.5089089295, 14.5089708092, 14.5090326863, 14.5090945607, 14.5091564325, 14.5092183016, 14.5092801681, 14.5093420319, 14.5094038931, 14.5094657516, 14.5095276074, 14.5095894606, 14.5096513112, 14.5097131591, 14.5097750043, 14.5098368469, 14.5098986869, 14.5099605242, 14.5100223588, 14.5100841908, 14.5101460202, 14.5102078469, 14.5102696709, 14.5103314923, 14.510393311, 14.5104551271, 14.5105169406, 14.5105787514, 14.5106405596, 14.5107023651, 14.5107641679, 14.5108259681, 14.5108877657, 14.5109495606, 14.5110113529, 14.5110731425, 14.5111349295, 14.5111967138, 14.5112584955, 14.5113202745, 14.5113820509, 14.5114438247, 14.5115055958, 14.5115673643, 14.5116291301, 14.5116908932, 14.5117526538, 14.5118144117, 14.5118761669, 14.5119379195, 14.5119996694, 14.5120614168, 14.5121231614, 14.5121849034, 14.5122466428, 14.5123083796, 14.5123701137, 14.5124318451, 14.5124935739, 14.5125553001, 14.5126170237, 14.5126787445, 14.5127404628, 14.5128021784, 14.5128638914, 14.5129256017, 14.5129873094, 14.5130490145, 14.5131107169, 14.5131724167, 14.5132341138, 14.5132958083, 14.5133575002, 14.5134191894, 14.513480876, 14.5135425599, 14.5136042412, 14.5136659199, 14.513727596, 14.5137892694, 14.5138509401, 14.5139126082, 14.5139742737, 14.5140359366, 14.5140975968, 14.5141592544, 14.5142209094, 14.5142825617, 14.5143442114, 14.5144058584, 14.5144675028, 14.5145291446, 14.5145907837, 14.5146524203, 14.5147140541, 14.5147756854, 14.514837314, 14.51489894, 14.5149605633, 14.515022184, 14.5150838021, 14.5151454176, 14.5152070304, 14.5152686406, 14.5153302482, 14.5153918531, 14.5154534554, 14.5155150551, 14.5155766521, 14.5156382465, 14.5156998383, 14.5157614274, 14.515823014, 14.5158845978, 14.5159461791, 14.5160077577, 14.5160693338, 14.5161309071, 14.5161924779, 14.516254046, 14.5163156115, 14.5163771744, 14.5164387346, 14.5165002922, 14.5165618472, 14.5166233996, 14.5166849493, 14.5167464964, 14.5168080409, 14.5168695828, 14.516931122, 14.5169926586, 14.5170541926, 14.517115724, 14.5171772527, 14.5172387788, 14.5173003023, 14.5173618232, 14.5174233414, 14.517484857, 14.51754637, 14.5176078804, 14.5176693881, 14.5177308933, 14.5177923958, 14.5178538957, 14.5179153929, 14.5179768876, 14.5180383796, 14.518099869, 14.5181613558, 14.5182228399, 14.5182843215, 14.5183458004, 14.5184072767, 14.5184687504, 14.5185302214, 14.5185916899, 14.5186531557, 14.5187146189, 14.5187760795, 14.5188375374, 14.5188989928, 14.5189604455, 14.5190218956, 14.5190833431, 14.519144788, 14.5192062303, 14.5192676699, 14.5193291069, 14.5193905413, 14.5194519731, 14.5195134023, 14.5195748289, 14.5196362528, 14.5196976742, 14.5197590929, 14.519820509, 14.5198819225, 14.5199433334, 14.5200047416, 14.5200661473, 14.5201275503, 14.5201889507, 14.5202503486, 14.5203117438, 14.5203731363, 14.5204345263, 14.5204959137, 14.5205572984, 14.5206186806, 14.5206800601, 14.520741437, 14.5208028113, 14.520864183, 14.5209255521, 14.5209869185, 14.5210482824, 14.5211096437, 14.5211710023, 14.5212323583, 14.5212937117, 14.5213550626, 14.5214164108, 14.5214777564, 14.5215390993, 14.5216004397, 14.5216617775, 14.5217231127, 14.5217844452, 14.5218457752, 14.5219071025, 14.5219684272, 14.5220297494, 14.5220910689, 14.5221523858, 14.5222137001, 14.5222750118, 14.5223363209, 14.5223976274, 14.5224589313, 14.5225202326, 14.5225815313, 14.5226428273, 14.5227041208, 14.5227654117, 14.5228266999, 14.5228879856, 14.5229492686, 14.5230105491, 14.5230718269, 14.5231331022, 14.5231943748, 14.5232556449, 14.5233169123, 14.5233781772, 14.5234394394, 14.523500699, 14.5235619561, 14.5236232105, 14.5236844623, 14.5237457116, 14.5238069582, 14.5238682022, 14.5239294437, 14.5239906825, 14.5240519187, 14.5241131524, 14.5241743834, 14.5242356118, 14.5242968377, 14.5243580609, 14.5244192815, 14.5244804996, 14.524541715, 14.5246029279, 14.5246641381, 14.5247253458, 14.5247865509, 14.5248477533, 14.5249089532, 14.5249701504, 14.5250313451, 14.5250925372, 14.5251537267, 14.5252149136, 14.5252760979, 14.5253372796, 14.5253984587, 14.5254596352, 14.5255208091, 14.5255819804, 14.5256431491, 14.5257043153, 14.5257654788, 14.5258266398, 14.5258877981, 14.5259489539, 14.5260101071, 14.5260712576, 14.5261324056, 14.526193551, 14.5262546938, 14.526315834, 14.5263769717, 14.5264381067, 14.5264992391, 14.526560369, 14.5266214962, 14.5266826209, 14.526743743, 14.5268048625, 14.5268659794, 14.5269270937, 14.5269882054, 14.5270493146, 14.5271104211, 14.5271715251, 14.5272326264, 14.5272937252, 14.5273548214, 14.527415915, 14.5274770061, 14.5275380945, 14.5275991803, 14.5276602636, 14.5277213443, 14.5277824224, 14.5278434979, 14.5279045708, 14.5279656411, 14.5280267089, 14.528087774, 14.5281488366, 14.5282098966, 14.528270954, 14.5283320089, 14.5283930611, 14.5284541108, 14.5285151578, 14.5285762023, 14.5286372442, 14.5286982836, 14.5287593203, 14.5288203545, 14.5288813861, 14.5289424151, 14.5290034415, 14.5290644653, 14.5291254866, 14.5291865053, 14.5292475213, 14.5293085349, 14.5293695458, 14.5294305541, 14.5294915599, 14.5295525631, 14.5296135637, 14.5296745618, 14.5297355572, 14.5297965501, 14.5298575404, 14.5299185281, 14.5299795133, 14.5300404958, 14.5301014758, 14.5301624532, 14.5302234281, 14.5302844003, 14.53034537, 14.5304063371, 14.5304673016, 14.5305282636, 14.530589223, 14.5306501798, 14.530711134, 14.5307720856, 14.5308330347, 14.5308939812, 14.5309549251, 14.5310158665, 14.5310768052, 14.5311377414, 14.5311986751, 14.5312596061, 14.5313205346, 14.5313814605, 14.5314423839, 14.5315033046, 14.5315642228, 14.5316251384, 14.5316860515, 14.5317469619, 14.5318078698, 14.5318687752, 14.5319296779, 14.5319905781, 14.5320514757, 14.5321123708, 14.5321732633, 14.5322341532, 14.5322950405, 14.5323559253, 14.5324168075, 14.5324776871, 14.5325385642, 14.5325994387, 14.5326603106, 14.53272118, 14.5327820467, 14.532842911, 14.5329037726, 14.5329646317, 14.5330254882, 14.5330863422, 14.5331471936, 14.5332080424, 14.5332688886, 14.5333297323, 14.5333905734, 14.533451412, 14.533512248, 14.5335730814, 14.5336339122, 14.5336947405, 14.5337555663, 14.5338163894, 14.53387721, 14.5339380281, 14.5339988435, 14.5340596565, 14.5341204668, 14.5341812746, 14.5342420798, 14.5343028825, 14.5343636825, 14.5344244801, 14.5344852751, 14.5345460675, 14.5346068573, 14.5346676446, 14.5347284293, 14.5347892115, 14.5348499911, 14.5349107681, 14.5349715426, 14.5350323145, 14.5350930839, 14.5351538507, 14.5352146149, 14.5352753766, 14.5353361357, 14.5353968923, 14.5354576463, 14.5355183978, 14.5355791467, 14.535639893, 14.5357006368, 14.535761378, 14.5358221166, 14.5358828528, 14.5359435863, 14.5360043173, 14.5360650457, 14.5361257716, 14.5361864949, 14.5362472157, 14.5363079339, 14.5363686496, 14.5364293627, 14.5364900732, 14.5365507812, 14.5366114866, 14.5366721895, 14.5367328898, 14.5367935876, 14.5368542828, 14.5369149755, 14.5369756656, 14.5370363532, 14.5370970382, 14.5371577206, 14.5372184005, 14.5372790779, 14.5373397527, 14.5374004249, 14.5374610946, 14.5375217618, 14.5375824264, 14.5376430884, 14.5377037479, 14.5377644048, 14.5378250592, 14.5378857111, 14.5379463604, 14.5380070071, 14.5380676513, 14.538128293, 14.5381889321, 14.5382495686, 14.5383102026, 14.538370834, 14.538431463, 14.5384920893, 14.5385527131, 14.5386133344, 14.5386739531, 14.5387345692, 14.5387951829, 14.5388557939, 14.5389164025, 14.5389770084, 14.5390376119, 14.5390982128, 14.5391588111, 14.5392194069, 14.5392800002, 14.5393405909, 14.539401179, 14.5394617646, 14.5395223477, 14.5395829283, 14.5396435062, 14.5397040817, 14.5397646546, 14.5398252249, 14.5398857928, 14.539946358, 14.5400069208, 14.5400674809, 14.5401280386, 14.5401885937, 14.5402491462, 14.5403096963, 14.5403702437, 14.5404307887, 14.5404913311, 14.5405518709, 14.5406124082, 14.540672943, 14.5407334753, 14.540794005, 14.5408545321, 14.5409150567, 14.5409755788, 14.5410360983, 14.5410966153, 14.5411571298, 14.5412176417, 14.5412781511, 14.541338658, 14.5413991623, 14.5414596641, 14.5415201633, 14.54158066, 14.5416411542, 14.5417016458, 14.5417621349, 14.5418226214, 14.5418831054, 14.5419435869, 14.5420040659, 14.5420645423, 14.5421250162, 14.5421854875, 14.5422459563, 14.5423064226, 14.5423668863, 14.5424273475, 14.5424878062, 14.5425482623, 14.5426087159, 14.542669167, 14.5427296155, 14.5427900616, 14.542850505, 14.542910946, 14.5429713844, 14.5430318203, 14.5430922536, 14.5431526844, 14.5432131127, 14.5432735384, 14.5433339617, 14.5433943824, 14.5434548005, 14.5435152162, 14.5435756293, 14.5436360398, 14.5436964479, 14.5437568534, 14.5438172564, 14.5438776568, 14.5439380547, 14.5439984501, 14.544058843, 14.5441192333, 14.5441796212, 14.5442400064, 14.5443003892, 14.5443607694, 14.5444211471, 14.5444815223, 14.544541895, 14.5446022651, 14.5446626327, 14.5447229978, 14.5447833603, 14.5448437203, 14.5449040778, 14.5449644328, 14.5450247852, 14.5450851352, 14.5451454826, 14.5452058274, 14.5452661698, 14.5453265096, 14.5453868469, 14.5454471817, 14.5455075139, 14.5455678437, 14.5456281709, 14.5456884956, 14.5457488177, 14.5458091374, 14.5458694545, 14.5459297691, 14.5459900812, 14.5460503907, 14.5461106978, 14.5461710023, 14.5462313043, 14.5462916037, 14.5463519007, 14.5464121951, 14.546472487, 14.5465327764, 14.5465930633, 14.5466533477, 14.5467136295, 14.5467739088, 14.5468341856, 14.5468944599, 14.5469547317, 14.5470150009, 14.5470752676, 14.5471355318, 14.5471957935, 14.5472560527, 14.5473163094, 14.5473765635, 14.5474368151, 14.5474970642, 14.5475573108, 14.5476175549, 14.5476777965, 14.5477380355, 14.547798272, 14.5478585061, 14.5479187376, 14.5479789665, 14.548039193, 14.548099417, 14.5481596384, 14.5482198574, 14.5482800738, 14.5483402877, 14.5484004991, 14.5484607079, 14.5485209143, 14.5485811182, 14.5486413195, 14.5487015183, 14.5487617147, 14.5488219085, 14.5488820998, 14.5489422885, 14.5490024748, 14.5490626586, 14.5491228398, 14.5491830186, 14.5492431948, 14.5493033685, 14.5493635397, 14.5494237084, 14.5494838746, 14.5495440383, 14.5496041995, 14.5496643581, 14.5497245143, 14.5497846679, 14.5498448191, 14.5499049677, 14.5499651138, 14.5500252575, 14.5500853986, 14.5501455372, 14.5502056733, 14.5502658069, 14.550325938, 14.5503860665, 14.5504461926, 14.5505063162, 14.5505664372, 14.5506265558, 14.5506866718, 14.5507467854, 14.5508068964, 14.550867005, 14.550927111, 14.5509872145, 14.5510473155, 14.5511074141, 14.5511675101, 14.5512276036, 14.5512876946, 14.5513477831, 14.5514078691, 14.5514679526, 14.5515280336, 14.5515881121, 14.5516481881, 14.5517082616, 14.5517683326, 14.5518284011, 14.5518884671, 14.5519485306, 14.5520085916, 14.5520686501, 14.5521287061, 14.5521887596, 14.5522488105, 14.552308859, 14.552368905, 14.5524289485, 14.5524889895, 14.552549028, 14.552609064, 14.5526690975, 14.5527291285, 14.552789157, 14.552849183, 14.5529092065, 14.5529692275, 14.5530292461, 14.5530892621, 14.5531492756, 14.5532092866, 14.5532692952, 14.5533293012, 14.5533893047, 14.5534493058, 14.5535093043, 14.5535693004, 14.5536292939, 14.553689285, 14.5537492735, 14.5538092596, 14.5538692432, 14.5539292243, 14.5539892029, 14.554049179, 14.5541091526, 14.5541691237, 14.5542290923, 14.5542890584, 14.5543490221, 14.5544089832, 14.5544689419, 14.554528898, 14.5545888517, 14.5546488029, 14.5547087515, 14.5547686977, 14.5548286414, 14.5548885826, 14.5549485214, 14.5550084576, 14.5550683913, 14.5551283226, 14.5551882513, 14.5552481776, 14.5553081014, 14.5553680227, 14.5554279415, 14.5554878578, 14.5555477716, 14.555607683, 14.5556675918, 14.5557274982, 14.5557874021, 14.5558473035, 14.5559072024, 14.5559670988, 14.5560269927, 14.5560868842, 14.5561467731, 14.5562066596, 14.5562665436, 14.5563264251, 14.5563863041, 14.5564461806, 14.5565060547, 14.5565659262, 14.5566257953, 14.5566856619, 14.556745526, 14.5568053876, 14.5568652468, 14.5569251034, 14.5569849576, 14.5570448093, 14.5571046585, 14.5571645052, 14.5572243495, 14.5572841912, 14.5573440305, 14.5574038673, 14.5574637016, 14.5575235334, 14.5575833628, 14.5576431896, 14.557703014, 14.5577628359, 14.5578226554, 14.5578824723, 14.5579422868, 14.5580020988, 14.5580619083, 14.5581217153, 14.5581815199, 14.5582413219, 14.5583011215, 14.5583609186, 14.5584207133, 14.5584805054, 14.5585402951, 14.5586000823, 14.558659867, 14.5587196493, 14.558779429, 14.5588392063, 14.5588989811, 14.5589587535, 14.5590185233, 14.5590782907, 14.5591380556, 14.5591978181, 14.559257578, 14.5593173355, 14.5593770905, 14.5594368431, 14.5594965931, 14.5595563407, 14.5596160858, 14.5596758284, 14.5597355686, 14.5597953063, 14.5598550415, 14.5599147743, 14.5599745045, 14.5600342323, 14.5600939576, 14.5601536805, 14.5602134009, 14.5602731188, 14.5603328342, 14.5603925472, 14.5604522577, 14.5605119657, 14.5605716712, 14.5606313743, 14.5606910749, 14.5607507731, 14.5608104687, 14.5608701619, 14.5609298527, 14.5609895409, 14.5610492267, 14.56110891, 14.5611685909, 14.5612282693, 14.5612879452, 14.5613476186, 14.5614072896, 14.5614669581, 14.5615266241, 14.5615862877, 14.5616459488, 14.5617056075, 14.5617652636, 14.5618249173, 14.5618845686, 14.5619442173, 14.5620038637, 14.5620635075, 14.5621231489, 14.5621827878, 14.5622424242, 14.5623020582, 14.5623616897, 14.5624213188, 14.5624809453, 14.5625405695, 14.5626001911, 14.5626598103, 14.562719427, 14.5627790413, 14.5628386531, 14.5628982625, 14.5629578693, 14.5630174737, 14.5630770757, 14.5631366752, 14.5631962722, 14.5632558668, 14.5633154589, 14.5633750485, 14.5634346357, 14.5634942204, 14.5635538027, 14.5636133825, 14.5636729598, 14.5637325347, 14.5637921071, 14.5638516771, 14.5639112446, 14.5639708096, 14.5640303722, 14.5640899323, 14.56414949, 14.5642090452, 14.5642685979, 14.5643281482, 14.5643876961, 14.5644472414, 14.5645067843, 14.5645663248, 14.5646258628, 14.5646853983, 14.5647449314, 14.5648044621, 14.5648639902, 14.5649235159, 14.5649830392, 14.56504256, 14.5651020784, 14.5651615943, 14.5652211077, 14.5652806187, 14.5653401272, 14.5653996333, 14.5654591369, 14.5655186381, 14.5655781368, 14.565637633, 14.5656971268, 14.5657566182, 14.5658161071, 14.5658755935, 14.5659350775, 14.5659945591, 14.5660540382, 14.5661135148, 14.566172989, 14.5662324607, 14.56629193, 14.5663513968, 14.5664108612, 14.5664703231, 14.5665297826, 14.5665892397, 14.5666486942, 14.5667081464, 14.566767596, 14.5668270433, 14.566886488, 14.5669459304, 14.5670053702, 14.5670648077, 14.5671242427, 14.5671836752, 14.5672431053, 14.5673025329, 14.5673619581, 14.5674213808, 14.5674808011, 14.567540219, 14.5675996344, 14.5676590473, 14.5677184579, 14.5677778659, 14.5678372715, 14.5678966747, 14.5679560754, 14.5680154737, 14.5680748695, 14.5681342629, 14.5681936539, 14.5682530423, 14.5683124284, 14.568371812, 14.5684311932, 14.5684905719, 14.5685499482, 14.568609322, 14.5686686934, 14.5687280623, 14.5687874288, 14.5688467929, 14.5689061545, 14.5689655137, 14.5690248704, 14.5690842247, 14.5691435765, 14.569202926, 14.5692622729, 14.5693216174, 14.5693809595, 14.5694402992, 14.5694996364, 14.5695589711, 14.5696183034, 14.5696776333, 14.5697369608, 14.5697962858, 14.5698556083, 14.5699149285, 14.5699742461, 14.5700335614, 14.5700928742, 14.5701521846, 14.5702114925, 14.570270798, 14.570330101, 14.5703894016, 14.5704486998, 14.5705079956, 14.5705672889, 14.5706265797, 14.5706858682, 14.5707451542, 14.5708044377, 14.5708637188, 14.5709229975, 14.5709822738, 14.5710415476, 14.571100819, 14.5711600879, 14.5712193544, 14.5712786185, 14.5713378802, 14.5713971394, 14.5714563961, 14.5715156505, 14.5715749024, 14.5716341519, 14.5716933989, 14.5717526435, 14.5718118857, 14.5718711254, 14.5719303627, 14.5719895976, 14.57204883, 14.5721080601, 14.5721672876, 14.5722265128, 14.5722857355, 14.5723449558, 14.5724041737, 14.5724633891, 14.5725226021, 14.5725818126, 14.5726410208, 14.5727002265, 14.5727594298, 14.5728186306, 14.572877829, 14.572937025, 14.5729962186, 14.5730554097, 14.5731145984, 14.5731737847, 14.5732329685, 14.57329215, 14.5733513289, 14.5734105055, 14.5734696796, 14.5735288514, 14.5735880206, 14.5736471875, 14.5737063519, 14.5737655139, 14.5738246735, 14.5738838307, 14.5739429854, 14.5740021377, 14.5740612876, 14.574120435, 14.57417958, 14.5742387226, 14.5742978628, 14.5743570006, 14.5744161359, 14.5744752688, 14.5745343993, 14.5745935273, 14.574652653, 14.5747117762, 14.574770897, 14.5748300153, 14.5748891313, 14.5749482448, 14.5750073559, 14.5750664646, 14.5751255708, 14.5751846747, 14.5752437761, 14.5753028751, 14.5753619716, 14.5754210658, 14.5754801575, 14.5755392468, 14.5755983337, 14.5756574182, 14.5757165002, 14.5757755799, 14.5758346571, 14.5758937319, 14.5759528043, 14.5760118742, 14.5760709417, 14.5761300069, 14.5761890696, 14.5762481298, 14.5763071877, 14.5763662432, 14.5764252962, 14.5764843468, 14.576543395, 14.5766024408, 14.5766614841, 14.5767205251, 14.5767795636, 14.5768385997, 14.5768976334, 14.5769566647, 14.5770156936, 14.57707472, 14.5771337441, 14.5771927657, 14.5772517849, 14.5773108017, 14.5773698161, 14.577428828, 14.5774878376, 14.5775468447, 14.5776058495, 14.5776648518, 14.5777238517, 14.5777828492, 14.5778418442, 14.5779008369, 14.5779598271, 14.578018815, 14.5780778004, 14.5781367834, 14.578195764, 14.5782547422, 14.578313718, 14.5783726914, 14.5784316623, 14.5784906309, 14.578549597, 14.5786085607, 14.5786675221, 14.578726481, 14.5787854375, 14.5788443916, 14.5789033432, 14.5789622925, 14.5790212394, 14.5790801838, 14.5791391259, 14.5791980655, 14.5792570028, 14.5793159376, 14.57937487, 14.5794338, 14.5794927276, 14.5795516528, 14.5796105756, 14.579669496, 14.579728414, 14.5797873295, 14.5798462427, 14.5799051535, 14.5799640618, 14.5800229678, 14.5800818713, 14.5801407724, 14.5801996712, 14.5802585675, 14.5803174614, 14.5803763529, 14.5804352421, 14.5804941288, 14.5805530131, 14.580611895, 14.5806707745, 14.5807296516, 14.5807885263, 14.5808473986, 14.5809062685, 14.580965136, 14.5810240011, 14.5810828638, 14.581141724, 14.5812005819, 14.5812594374, 14.5813182905, 14.5813771412, 14.5814359895, 14.5814948353, 14.5815536788, 14.5816125199, 14.5816713586, 14.5817301949, 14.5817890287, 14.5818478602, 14.5819066893, 14.581965516, 14.5820243403, 14.5820831622, 14.5821419817, 14.5822007988, 14.5822596134, 14.5823184257, 14.5823772356, 14.5824360431, 14.5824948482, 14.582553651, 14.5826124513, 14.5826712492, 14.5827300447, 14.5827888378, 14.5828476286, 14.5829064169, 14.5829652028, 14.5830239864, 14.5830827675, 14.5831415463, 14.5832003226, 14.5832590966, 14.5833178681, 14.5833766373, 14.5834354041, 14.5834941685, 14.5835529305, 14.5836116901, 14.5836704473, 14.5837292021, 14.5837879545, 14.5838467045, 14.5839054522, 14.5839641974, 14.5840229403, 14.5840816807, 14.5841404188, 14.5841991545, 14.5842578877, 14.5843166186, 14.5843753471, 14.5844340733, 14.584492797, 14.5845515183, 14.5846102372, 14.5846689538, 14.584727668, 14.5847863797, 14.5848450891, 14.5849037961, 14.5849625007, 14.5850212029, 14.5850799028, 14.5851386002, 14.5851972953, 14.5852559879, 14.5853146782, 14.5853733661, 14.5854320516, 14.5854907347, 14.5855494154, 14.5856080938, 14.5856667697, 14.5857254433, 14.5857841145, 14.5858427833, 14.5859014497, 14.5859601137, 14.5860187754, 14.5860774346, 14.5861360915, 14.586194746, 14.5862533981, 14.5863120478, 14.5863706951, 14.5864293401, 14.5864879826, 14.5865466228, 14.5866052606, 14.586663896, 14.586722529, 14.5867811597, 14.586839788, 14.5868984138, 14.5869570373, 14.5870156585, 14.5870742772, 14.5871328936, 14.5871915075, 14.5872501191, 14.5873087283, 14.5873673352, 14.5874259396, 14.5874845417, 14.5875431414, 14.5876017387, 14.5876603336, 14.5877189262, 14.5877775163, 14.5878361041, 14.5878946895, 14.5879532726, 14.5880118532, 14.5880704315, 14.5881290074, 14.5881875809, 14.588246152, 14.5883047208, 14.5883632872, 14.5884218512, 14.5884804128, 14.5885389721, 14.588597529, 14.5886560835, 14.5887146356, 14.5887731853, 14.5888317327, 14.5888902777, 14.5889488203, 14.5890073606, 14.5890658984, 14.5891244339, 14.589182967, 14.5892414978, 14.5893000262, 14.5893585521, 14.5894170758, 14.589475597, 14.5895341159, 14.5895926324, 14.5896511465, 14.5897096583, 14.5897681676, 14.5898266747, 14.5898851793, 14.5899436816, 14.5900021814, 14.590060679, 14.5901191741, 14.5901776669, 14.5902361573, 14.5902946453, 14.590353131, 14.5904116143, 14.5904700952, 14.5905285737, 14.5905870499, 14.5906455237, 14.5907039952, 14.5907624642, 14.5908209309, 14.5908793953, 14.5909378572, 14.5909963168, 14.591054774, 14.5911132289, 14.5911716814, 14.5912301315, 14.5912885792, 14.5913470246, 14.5914054676, 14.5914639083, 14.5915223466, 14.5915807825, 14.591639216, 14.5916976472, 14.591756076, 14.5918145025, 14.5918729266, 14.5919313483, 14.5919897676, 14.5920481846, 14.5921065992, 14.5921650115, 14.5922234214, 14.5922818289, 14.592340234, 14.5923986368, 14.5924570373, 14.5925154353, 14.592573831, 14.5926322244, 14.5926906154, 14.592749004, 14.5928073902, 14.5928657741, 14.5929241556, 14.5929825348, 14.5930409116, 14.593099286, 14.5931576581, 14.5932160278, 14.5932743952, 14.5933327602, 14.5933911228, 14.5934494831, 14.593507841, 14.5935661965, 14.5936245497, 14.5936829005, 14.593741249, 14.5937995951, 14.5938579389, 14.5939162802, 14.5939746193, 14.5940329559, 14.5940912903, 14.5941496222, 14.5942079518, 14.594266279, 14.5943246039, 14.5943829264, 14.5944412466, 14.5944995644, 14.5945578799, 14.594616193, 14.5946745037, 14.5947328121, 14.5947911181, 14.5948494218, 14.5949077231, 14.594966022, 14.5950243186, 14.5950826129, 14.5951409047, 14.5951991943, 14.5952574814, 14.5953157663, 14.5953740487, 14.5954323288, 14.5954906066, 14.595548882, 14.5956071551, 14.5956654258, 14.5957236941, 14.5957819601, 14.5958402237, 14.595898485, 14.5959567439, 14.5960150005, 14.5960732547, 14.5961315066, 14.5961897561, 14.5962480033, 14.5963062481, 14.5963644906, 14.5964227307, 14.5964809685, 14.5965392039, 14.596597437, 14.5966556677, 14.596713896, 14.5967721221, 14.5968303457, 14.596888567, 14.596946786, 14.5970050026, 14.5970632169, 14.5971214288, 14.5971796384, 14.5972378456, 14.5972960504, 14.597354253, 14.5974124531, 14.597470651, 14.5975288465, 14.5975870396, 14.5976452304, 14.5977034188, 14.5977616049, 14.5978197886, 14.59787797, 14.5979361491, 14.5979943258, 14.5980525002, 14.5981106722, 14.5981688418, 14.5982270092, 14.5982851741, 14.5983433368, 14.5984014971, 14.598459655, 14.5985178106, 14.5985759639, 14.5986341148, 14.5986922633, 14.5987504096, 14.5988085535, 14.598866695, 14.5989248342, 14.598982971, 14.5990411055, 14.5990992377, 14.5991573675, 14.599215495, 14.5992736202, 14.599331743, 14.5993898634, 14.5994479815, 14.5995060973, 14.5995642107, 14.5996223218, 14.5996804306, 14.599738537, 14.5997966411, 14.5998547428, 14.5999128422, 14.5999709392, 14.600029034, 14.6000871263, 14.6001452164, 14.6002033041, 14.6002613894, 14.6003194724, 14.6003775531, 14.6004356314, 14.6004937075, 14.6005517811, 14.6006098524, 14.6006679214, 14.6007259881, 14.6007840524, 14.6008421144, 14.600900174, 14.6009582313, 14.6010162863, 14.6010743389, 14.6011323892, 14.6011904372, 14.6012484828, 14.6013065261, 14.6013645671, 14.6014226057, 14.601480642, 14.6015386759, 14.6015967076, 14.6016547368, 14.6017127638, 14.6017707884, 14.6018288107, 14.6018868306, 14.6019448483, 14.6020028635, 14.6020608765, 14.6021188871, 14.6021768954, 14.6022349013, 14.602292905, 14.6023509062, 14.6024089052, 14.6024669018, 14.6025248961, 14.6025828881, 14.6026408777, 14.602698865, 14.60275685, 14.6028148326, 14.6028728129, 14.6029307909, 14.6029887666, 14.6030467399, 14.6031047109, 14.6031626795, 14.6032206459, 14.6032786099, 14.6033365715, 14.6033945309, 14.6034524879, 14.6035104426, 14.603568395, 14.603626345, 14.6036842927, 14.6037422381, 14.6038001811, 14.6038581218, 14.6039160602, 14.6039739963, 14.6040319301, 14.6040898615, 14.6041477906, 14.6042057173, 14.6042636418, 14.6043215639, 14.6043794837, 14.6044374011, 14.6044953163, 14.6045532291, 14.6046111396, 14.6046690477, 14.6047269536, 14.6047848571, 14.6048427583, 14.6049006571, 14.6049585537, 14.6050164479, 14.6050743398, 14.6051322294, 14.6051901166, 14.6052480016, 14.6053058842, 14.6053637645, 14.6054216424, 14.6054795181, 14.6055373914, 14.6055952624, 14.6056531311, 14.6057109974, 14.6057688614, 14.6058267232, 14.6058845826, 14.6059424396, 14.6060002944, 14.6060581468, 14.6061159969, 14.6061738447, 14.6062316902, 14.6062895333, 14.6063473742, 14.6064052127, 14.6064630489, 14.6065208828, 14.6065787143, 14.6066365436, 14.6066943705, 14.6067521951, 14.6068100174, 14.6068678374, 14.606925655, 14.6069834704, 14.6070412834, 14.6070990941, 14.6071569025, 14.6072147086, 14.6072725123, 14.6073303137, 14.6073881129, 14.6074459097, 14.6075037042, 14.6075614964, 14.6076192862, 14.6076770738, 14.607734859, 14.6077926419, 14.6078504225, 14.6079082008, 14.6079659768, 14.6080237505, 14.6080815218, 14.6081392908, 14.6081970576, 14.608254822, 14.6083125841, 14.6083703439, 14.6084281013, 14.6084858565, 14.6085436093, 14.6086013599, 14.6086591081, 14.608716854, 14.6087745976, 14.6088323389, 14.6088900779, 14.6089478146, 14.6090055489, 14.609063281, 14.6091210107, 14.6091787381, 14.6092364633, 14.6092941861, 14.6093519066, 14.6094096248, 14.6094673406, 14.6095250542, 14.6095827655, 14.6096404744, 14.6096981811, 14.6097558854, 14.6098135875, 14.6098712872, 14.6099289846, 14.6099866797, 14.6100443725, 14.610102063, 14.6101597512, 14.6102174371, 14.6102751206, 14.6103328019, 14.6103904809, 14.6104481575, 14.6105058319, 14.6105635039, 14.6106211737, 14.6106788411, 14.6107365062, 14.6107941691, 14.6108518296, 14.6109094878, 14.6109671437, 14.6110247973, 14.6110824486, 14.6111400976, 14.6111977443, 14.6112553887, 14.6113130308, 14.6113706706, 14.6114283081, 14.6114859432, 14.6115435761, 14.6116012067, 14.611658835, 14.6117164609, 14.6117740846, 14.611831706, 14.6118893251, 14.6119469418, 14.6120045563, 14.6120621685, 14.6121197783, 14.6121773859, 14.6122349911, 14.6122925941, 14.6123501948, 14.6124077931, 14.6124653892, 14.612522983, 14.6125805744, 14.6126381636, 14.6126957505, 14.612753335, 14.6128109173, 14.6128684973, 14.612926075, 14.6129836503, 14.6130412234, 14.6130987942, 14.6131563627, 14.6132139289, 14.6132714928, 14.6133290544, 14.6133866137, 14.6134441707, 14.6135017254, 14.6135592778, 14.6136168279, 14.6136743757, 14.6137319212, 14.6137894645, 14.6138470054, 14.613904544, 14.6139620804, 14.6140196144, 14.6140771462, 14.6141346757, 14.6141922028, 14.6142497277, 14.6143072503, 14.6143647706, 14.6144222885, 14.6144798042, 14.6145373177, 14.6145948288, 14.6146523376, 14.6147098441, 14.6147673484, 14.6148248503, 14.6148823499, 14.6149398473, 14.6149973424, 14.6150548352, 14.6151123256, 14.6151698138, 14.6152272997, 14.6152847834, 14.6153422647, 14.6153997437, 14.6154572205, 14.6155146949, 14.6155721671, 14.615629637, 14.6156871046, 14.6157445699, 14.6158020329, 14.6158594936, 14.615916952, 14.6159744082, 14.616031862, 14.6160893136, 14.6161467629, 14.6162042099, 14.6162616546, 14.616319097, 14.6163765371, 14.616433975, 14.6164914105, 14.6165488438, 14.6166062748, 14.6166637035, 14.6167211299, 14.616778554, 14.6168359758, 14.6168933954, 14.6169508127, 14.6170082277, 14.6170656404, 14.6171230508, 14.6171804589, 14.6172378647, 14.6172952683, 14.6173526696, 14.6174100686, 14.6174674653, 14.6175248597, 14.6175822519, 14.6176396417, 14.6176970293, 14.6177544146, 14.6178117976, 14.6178691783, 14.6179265568, 14.617983933, 14.6180413069, 14.6180986785, 14.6181560478, 14.6182134148, 14.6182707796, 14.6183281421, 14.6183855023, 14.6184428602, 14.6185002158, 14.6185575692, 14.6186149203, 14.618672269, 14.6187296156, 14.6187869598, 14.6188443018, 14.6189016414, 14.6189589788, 14.619016314, 14.6190736468, 14.6191309774, 14.6191883057, 14.6192456317, 14.6193029554, 14.6193602769, 14.619417596, 14.6194749129, 14.6195322276, 14.6195895399, 14.61964685, 14.6197041578, 14.6197614633, 14.6198187665, 14.6198760675, 14.6199333662, 14.6199906626, 14.6200479567, 14.6201052486, 14.6201625382, 14.6202198255, 14.6202771105, 14.6203343933, 14.6203916738, 14.620448952, 14.620506228, 14.6205635016, 14.620620773, 14.6206780421, 14.620735309, 14.6207925736, 14.6208498359, 14.6209070959, 14.6209643536, 14.6210216091, 14.6210788623, 14.6211361133, 14.6211933619, 14.6212506083, 14.6213078525, 14.6213650943, 14.6214223339, 14.6214795712, 14.6215368062, 14.621594039, 14.6216512695, 14.6217084977, 14.6217657237, 14.6218229474, 14.6218801688, 14.621937388, 14.6219946048, 14.6220518195, 14.6221090318, 14.6221662419, 14.6222234497, 14.6222806552, 14.6223378585, 14.6223950595, 14.6224522582, 14.6225094547, 14.6225666489, 14.6226238408, 14.6226810305, 14.6227382179, 14.622795403, 14.6228525859, 14.6229097665, 14.6229669448, 14.6230241209, 14.6230812947, 14.6231384662, 14.6231956355, 14.6232528025, 14.6233099672, 14.6233671297, 14.6234242899, 14.6234814478, 14.6235386035, 14.6235957569, 14.6236529081, 14.6237100569, 14.6237672036, 14.6238243479, 14.62388149, 14.6239386298, 14.6239957674, 14.6240529027, 14.6241100358, 14.6241671665, 14.6242242951, 14.6242814213, 14.6243385453, 14.624395667, 14.6244527865, 14.6245099037, 14.6245670187, 14.6246241314, 14.6246812418, 14.62473835, 14.6247954559, 14.6248525595, 14.6249096609, 14.62496676, 14.6250238569, 14.6250809515, 14.6251380438, 14.6251951339, 14.6252522217, 14.6253093073, 14.6253663906, 14.6254234717, 14.6254805505, 14.625537627, 14.6255947013, 14.6256517733, 14.6257088431, 14.6257659106, 14.6258229758, 14.6258800388, 14.6259370995, 14.625994158, 14.6260512142, 14.6261082682, 14.6261653199, 14.6262223694, 14.6262794166, 14.6263364615, 14.6263935042, 14.6264505446, 14.6265075828, 14.6265646187, 14.6266216524, 14.6266786838, 14.6267357129, 14.6267927398, 14.6268497645, 14.6269067869, 14.626963807, 14.6270208249, 14.6270778405, 14.6271348539, 14.627191865, 14.6272488739, 14.6273058805, 14.6273628849, 14.627419887, 14.6274768869, 14.6275338845, 14.6275908798, 14.6276478729, 14.6277048638, 14.6277618524, 14.6278188388, 14.6278758229, 14.6279328047, 14.6279897843, 14.6280467617, 14.6281037368, 14.6281607096, 14.6282176802, 14.6282746486, 14.6283316147, 14.6283885785, 14.6284455401, 14.6285024995, 14.6285594566, 14.6286164115, 14.6286733641, 14.6287303144, 14.6287872625, 14.6288442084, 14.628901152, 14.6289580934, 14.6290150325, 14.6290719694, 14.629128904, 14.6291858364, 14.6292427665, 14.6292996944, 14.6293566201, 14.6294135435, 14.6294704646, 14.6295273835, 14.6295843002, 14.6296412146, 14.6296981268, 14.6297550367, 14.6298119444, 14.6298688498, 14.629925753, 14.629982654, 14.6300395527, 14.6300964491, 14.6301533433, 14.6302102353, 14.630267125, 14.6303240125, 14.6303808978, 14.6304377808, 14.6304946615, 14.63055154, 14.6306084163, 14.6306652903, 14.6307221621, 14.6307790316, 14.630835899, 14.630892764, 14.6309496268, 14.6310064874, 14.6310633457, 14.6311202018, 14.6311770557, 14.6312339073, 14.6312907567, 14.6313476038, 14.6314044487, 14.6314612914, 14.6315181318, 14.63157497, 14.6316318059, 14.6316886396, 14.6317454711, 14.6318023003, 14.6318591273, 14.631915952, 14.6319727745, 14.6320295948, 14.6320864128, 14.6321432286, 14.6322000422, 14.6322568535, 14.6323136626, 14.6323704694, 14.632427274, 14.6324840764, 14.6325408765, 14.6325976744, 14.6326544701, 14.6327112635, 14.6327680547, 14.6328248437, 14.6328816304, 14.6329384149, 14.6329951971, 14.6330519772, 14.6331087549, 14.6331655305, 14.6332223038, 14.6332790749, 14.6333358437, 14.6333926103, 14.6334493747, 14.6335061369, 14.6335628968, 14.6336196544, 14.6336764099, 14.6337331631, 14.6337899141, 14.6338466628, 14.6339034093, 14.6339601536, 14.6340168957, 14.6340736355, 14.6341303731, 14.6341871085, 14.6342438416, 14.6343005725, 14.6343573011, 14.6344140276, 14.6344707518, 14.6345274737, 14.6345841935, 14.634640911, 14.6346976263, 14.6347543393, 14.6348110502, 14.6348677588, 14.6349244651, 14.6349811693, 14.6350378712, 14.6350945709, 14.6351512683, 14.6352079635, 14.6352646565, 14.6353213473, 14.6353780359, 14.6354347222, 14.6354914063, 14.6355480881, 14.6356047677, 14.6356614452, 14.6357181203, 14.6357747933, 14.635831464, 14.6358881325, 14.6359447988, 14.6360014628, 14.6360581247, 14.6361147843, 14.6361714416, 14.6362280968, 14.6362847497, 14.6363414004, 14.6363980489, 14.6364546951, 14.6365113392, 14.636567981, 14.6366246205, 14.6366812579, 14.636737893, 14.6367945259, 14.6368511566, 14.6369077851, 14.6369644113, 14.6370210353, 14.6370776571, 14.6371342767, 14.6371908941, 14.6372475092, 14.6373041221, 14.6373607328, 14.6374173413, 14.6374739475, 14.6375305515, 14.6375871533, 14.6376437529, 14.6377003503, 14.6377569454, 14.6378135383, 14.637870129, 14.6379267175, 14.6379833038, 14.6380398878, 14.6380964696, 14.6381530492, 14.6382096266, 14.6382662018, 14.6383227747, 14.6383793455, 14.638435914, 14.6384924803, 14.6385490444, 14.6386056062, 14.6386621659, 14.6387187233, 14.6387752785, 14.6388318315, 14.6388883823, 14.6389449308, 14.6390014771, 14.6390580213, 14.6391145632, 14.6391711029, 14.6392276403, 14.6392841756, 14.6393407087, 14.6393972395, 14.6394537681, 14.6395102945, 14.6395668187, 14.6396233407, 14.6396798604, 14.639736378, 14.6397928933, 14.6398494064, 14.6399059173, 14.639962426, 14.6400189325, 14.6400754367, 14.6401319388, 14.6401884386, 14.6402449362, 14.6403014316, 14.6403579248, 14.6404144158, 14.6404709046, 14.6405273912, 14.6405838755, 14.6406403576, 14.6406968376, 14.6407533153, 14.6408097908, 14.6408662641, 14.6409227352, 14.640979204, 14.6410356707, 14.6410921352, 14.6411485974, 14.6412050574, 14.6412615153, 14.6413179709, 14.6413744243, 14.6414308755, 14.6414873245, 14.6415437713, 14.6416002158, 14.6416566582, 14.6417130984, 14.6417695363, 14.641825972, 14.6418824056, 14.6419388369, 14.641995266, 14.6420516929, 14.6421081176, 14.6421645401, 14.6422209604, 14.6422773785, 14.6423337944, 14.6423902081, 14.6424466195, 14.6425030288, 14.6425594358, 14.6426158407, 14.6426722433, 14.6427286438, 14.642785042, 14.642841438, 14.6428978319, 14.6429542235, 14.6430106129, 14.6430670001, 14.6431233851, 14.6431797679, 14.6432361485, 14.6432925269, 14.6433489031, 14.6434052771, 14.6434616489, 14.6435180185, 14.6435743859, 14.6436307511, 14.643687114, 14.6437434748, 14.6437998334, 14.6438561898, 14.6439125439, 14.6439688959, 14.6440252457, 14.6440815933, 14.6441379386, 14.6441942818, 14.6442506228, 14.6443069615, 14.6443632981, 14.6444196325, 14.6444759647, 14.6445322946, 14.6445886224, 14.644644948, 14.6447012713, 14.6447575925, 14.6448139115, 14.6448702283, 14.6449265428, 14.6449828552, 14.6450391654, 14.6450954734, 14.6451517792, 14.6452080828, 14.6452643842, 14.6453206834, 14.6453769804, 14.6454332752, 14.6454895678, 14.6455458582, 14.6456021464, 14.6456584324, 14.6457147162, 14.6457709979, 14.6458272773, 14.6458835545, 14.6459398296, 14.6459961024, 14.6460523731, 14.6461086415, 14.6461649078, 14.6462211718, 14.6462774337, 14.6463336934, 14.6463899509, 14.6464462062, 14.6465024593, 14.6465587102, 14.6466149589, 14.6466712054, 14.6467274497, 14.6467836918, 14.6468399318, 14.6468961695, 14.6469524051, 14.6470086384, 14.6470648696, 14.6471210986, 14.6471773254, 14.64723355, 14.6472897724, 14.6473459926, 14.6474022106, 14.6474584265, 14.6475146401, 14.6475708516, 14.6476270608, 14.6476832679, 14.6477394728, 14.6477956755, 14.647851876, 14.6479080743, 14.6479642704, 14.6480204643, 14.6480766561, 14.6481328457, 14.648189033, 14.6482452182, 14.6483014012, 14.648357582, 14.6484137606, 14.6484699371, 14.6485261113, 14.6485822834, 14.6486384532, 14.6486946209, 14.6487507864, 14.6488069497, 14.6488631109, 14.6489192698, 14.6489754265, 14.6490315811, 14.6490877335, 14.6491438837, 14.6492000317, 14.6492561775, 14.6493123212, 14.6493684626, 14.6494246019, 14.649480739, 14.6495368739, 14.6495930066, 14.6496491371, 14.6497052655, 14.6497613916, 14.6498175156, 14.6498736374, 14.649929757, 14.6499858745, 14.6500419897, 14.6500981028, 14.6501542137, 14.6502103224, 14.6502664289, 14.6503225332, 14.6503786354, 14.6504347354, 14.6504908332, 14.6505469288, 14.6506030222, 14.6506591135, 14.6507152025, 14.6507712894, 14.6508273741, 14.6508834567, 14.650939537, 14.6509956152, 14.6510516912, 14.651107765, 14.6511638366, 14.6512199061, 14.6512759733, 14.6513320384, 14.6513881014, 14.6514441621, 14.6515002207, 14.651556277, 14.6516123312, 14.6516683833, 14.6517244331, 14.6517804808, 14.6518365263, 14.6518925696, 14.6519486107, 14.6520046497, 14.6520606865, 14.6521167211, 14.6521727535, 14.6522287838, 14.6522848118, 14.6523408377, 14.6523968615, 14.652452883, 14.6525089024, 14.6525649196, 14.6526209346, 14.6526769475, 14.6527329582, 14.6527889667, 14.652844973, 14.6529009772, 14.6529569791, 14.6530129789, 14.6530689766, 14.653124972, 14.6531809653, 14.6532369564, 14.6532929454, 14.6533489322, 14.6534049167, 14.6534608992, 14.6535168794, 14.6535728575, 14.6536288334, 14.6536848071, 14.6537407787, 14.6537967481, 14.6538527153, 14.6539086804, 14.6539646432, 14.654020604, 14.6540765625, 14.6541325189, 14.6541884731, 14.6542444251, 14.6543003749, 14.6543563226, 14.6544122681, 14.6544682115, 14.6545241527, 14.6545800917, 14.6546360285, 14.6546919632, 14.6547478957, 14.654803826, 14.6548597542, 14.6549156802, 14.654971604, 14.6550275257, 14.6550834452, 14.6551393625, 14.6551952777, 14.6552511907, 14.6553071015, 14.6553630102, 14.6554189167, 14.655474821, 14.6555307232, 14.6555866232, 14.655642521, 14.6556984166, 14.6557543101, 14.6558102015, 14.6558660906, 14.6559219776, 14.6559778625, 14.6560337452, 14.6560896257, 14.656145504, 14.6562013802, 14.6562572542, 14.6563131261, 14.6563689958, 14.6564248633, 14.6564807286, 14.6565365918, 14.6565924529, 14.6566483117, 14.6567041685, 14.656760023, 14.6568158754, 14.6568717256, 14.6569275737, 14.6569834196, 14.6570392633, 14.6570951049, 14.6571509443, 14.6572067816, 14.6572626166, 14.6573184496, 14.6573742804, 14.657430109, 14.6574859354, 14.6575417597, 14.6575975818, 14.6576534018, 14.6577092196, 14.6577650353, 14.6578208488, 14.6578766601, 14.6579324693, 14.6579882763, 14.6580440811, 14.6580998838, 14.6581556844, 14.6582114828, 14.658267279, 14.658323073, 14.6583788649, 14.6584346547, 14.6584904423, 14.6585462277, 14.658602011, 14.6586577921, 14.6587135711, 14.6587693479, 14.6588251226, 14.658880895, 14.6589366654, 14.6589924336, 14.6590481996, 14.6591039635, 14.6591597252, 14.6592154848, 14.6592712422, 14.6593269974, 14.6593827505, 14.6594385015, 14.6594942502, 14.6595499969, 14.6596057414, 14.6596614837, 14.6597172239, 14.6597729619, 14.6598286977, 14.6598844315, 14.659940163, 14.6599958924, 14.6600516197, 14.6601073448, 14.6601630677, 14.6602187885, 14.6602745072, 14.6603302237, 14.660385938, 14.6604416502, 14.6604973602, 14.6605530681, 14.6606087739, 14.6606644775, 14.6607201789, 14.6607758782, 14.6608315753, 14.6608872703, 14.6609429631, 14.6609986538, 14.6610543424, 14.6611100287, 14.661165713, 14.6612213951, 14.661277075, 14.6613327528, 14.6613884284, 14.6614441019, 14.6614997733, 14.6615554425, 14.6616111095, 14.6616667744, 14.6617224372, 14.6617780978, 14.6618337562, 14.6618894125, 14.6619450667, 14.6620007187, 14.6620563686, 14.6621120163, 14.6621676619, 14.6622233053, 14.6622789466, 14.6623345857, 14.6623902227, 14.6624458576, 14.6625014903, 14.6625571208, 14.6626127493, 14.6626683755, 14.6627239996, 14.6627796216, 14.6628352415, 14.6628908591, 14.6629464747, 14.6630020881, 14.6630576993, 14.6631133085, 14.6631689154, 14.6632245203, 14.6632801229, 14.6633357235, 14.6633913219, 14.6634469181, 14.6635025122, 14.6635581042, 14.663613694, 14.6636692817, 14.6637248673, 14.6637804507, 14.6638360319, 14.6638916111, 14.663947188, 14.6640027629, 14.6640583356, 14.6641139061, 14.6641694746, 14.6642250408, 14.664280605, 14.664336167, 14.6643917268, 14.6644472845, 14.6645028401, 14.6645583936, 14.6646139449, 14.664669494, 14.664725041, 14.6647805859, 14.6648361287, 14.6648916693, 14.6649472078, 14.6650027441, 14.6650582783, 14.6651138103, 14.6651693403, 14.665224868, 14.6652803937, 14.6653359172, 14.6653914386, 14.6654469578, 14.6655024749, 14.6655579898, 14.6656135027, 14.6656690134, 14.6657245219, 14.6657800283, 14.6658355326, 14.6658910348, 14.6659465348, 14.6660020326, 14.6660575284, 14.666113022, 14.6661685135, 14.6662240028, 14.66627949, 14.6663349751, 14.666390458, 14.6664459388, 14.6665014175, 14.666556894, 14.6666123684, 14.6666678407, 14.6667233108, 14.6667787788, 14.6668342447, 14.6668897084, 14.66694517, 14.6670006295, 14.6670560869, 14.6671115421, 14.6671669952, 14.6672224461, 14.6672778949, 14.6673333416, 14.6673887862, 14.6674442286, 14.6674996689, 14.667555107, 14.6676105431, 14.667665977, 14.6677214088, 14.6677768384, 14.6678322659, 14.6678876913, 14.6679431145, 14.6679985357, 14.6680539547, 14.6681093715, 14.6681647863, 14.6682201989, 14.6682756094, 14.6683310177, 14.668386424, 14.6684418281, 14.66849723, 14.6685526299, 14.6686080276, 14.6686634232, 14.6687188166, 14.668774208, 14.6688295972, 14.6688849843, 14.6689403692, 14.6689957521, 14.6690511328, 14.6691065113, 14.6691618878, 14.6692172621, 14.6692726343, 14.6693280044, 14.6693833723, 14.6694387382, 14.6694941019, 14.6695494635, 14.6696048229, 14.6696601802, 14.6697155354, 14.6697708885, 14.6698262395, 14.6698815883, 14.669936935, 14.6699922796, 14.6700476221, 14.6701029624, 14.6701583006, 14.6702136367, 14.6702689707, 14.6703243026, 14.6703796323, 14.6704349599, 14.6704902854, 14.6705456088, 14.67060093, 14.6706562491, 14.6707115661, 14.670766881, 14.6708221938, 14.6708775044, 14.6709328129, 14.6709881193, 14.6710434236, 14.6710987257, 14.6711540258, 14.6712093237, 14.6712646195, 14.6713199132, 14.6713752047, 14.6714304942, 14.6714857815, 14.6715410667, 14.6715963498, 14.6716516308, 14.6717069096, 14.6717621863, 14.671817461, 14.6718727335, 14.6719280038, 14.6719832721, 14.6720385382, 14.6720938023, 14.6721490642, 14.672204324, 14.6722595816, 14.6723148372, 14.6723700906, 14.672425342, 14.6724805912, 14.6725358383, 14.6725910833, 14.6726463261, 14.6727015669, 14.6727568055, 14.672812042, 14.6728672764, 14.6729225087, 14.6729777389, 14.673032967, 14.6730881929, 14.6731434167, 14.6731986385, 14.6732538581, 14.6733090756, 14.6733642909, 14.6734195042, 14.6734747154, 14.6735299244, 14.6735851313, 14.6736403361, 14.6736955388, 14.6737507394, 14.6738059379, 14.6738611343, 14.6739163285, 14.6739715207, 14.6740267107, 14.6740818986, 14.6741370844, 14.6741922681, 14.6742474497, 14.6743026292, 14.6743578066, 14.6744129818, 14.674468155, 14.674523326, 14.6745784949, 14.6746336618, 14.6746888265, 14.6747439891, 14.6747991496, 14.6748543079, 14.6749094642, 14.6749646184, 14.6750197704, 14.6750749204, 14.6751300682, 14.675185214, 14.6752403576, 14.6752954991, 14.6753506385, 14.6754057758, 14.675460911, 14.6755160441, 14.6755711751, 14.6756263039, 14.6756814307, 14.6757365554, 14.6757916779, 14.6758467984, 14.6759019167, 14.6759570329, 14.6760121471, 14.6760672591, 14.676122369, 14.6761774768, 14.6762325825, 14.6762876861, 14.6763427876, 14.676397887, 14.6764529843, 14.6765080795, 14.6765631726, 14.6766182636, 14.6766733525, 14.6767284392, 14.6767835239, 14.6768386065, 14.6768936869, 14.6769487653, 14.6770038416, 14.6770589157, 14.6771139878, 14.6771690577, 14.6772241256, 14.6772791913, 14.677334255, 14.6773893165, 14.6774443759, 14.6774994333, 14.6775544885, 14.6776095417, 14.6776645927, 14.6777196416, 14.6777746885, 14.6778297332, 14.6778847759, 14.6779398164, 14.6779948548, 14.6780498912, 14.6781049254, 14.6781599575, 14.6782149876, 14.6782700155, 14.6783250414, 14.6783800651, 14.6784350868, 14.6784901063, 14.6785451237, 14.6786001391, 14.6786551524, 14.6787101635, 14.6787651726, 14.6788201795, 14.6788751844, 14.6789301872, 14.6789851878, 14.6790401864, 14.6790951829, 14.6791501772, 14.6792051695, 14.6792601597, 14.6793151478, 14.6793701338, 14.6794251177, 14.6794800995, 14.6795350792, 14.6795900568, 14.6796450323, 14.6797000058, 14.6797549771, 14.6798099463, 14.6798649135, 14.6799198785, 14.6799748415, 14.6800298023, 14.6800847611, 14.6801397178, 14.6801946723, 14.6802496248, 14.6803045752, 14.6803595235, 14.6804144697, 14.6804694138, 14.6805243559, 14.6805792958, 14.6806342336, 14.6806891694, 14.680744103, 14.6807990346, 14.680853964, 14.6809088914, 14.6809638167, 14.6810187399, 14.681073661, 14.68112858, 14.6811834969, 14.6812384118, 14.6812933245, 14.6813482352, 14.6814031437, 14.6814580502, 14.6815129546, 14.6815678569, 14.6816227571, 14.6816776552, 14.6817325512, 14.6817874452, 14.681842337, 14.6818972268, 14.6819521145, 14.682007, 14.6820618835, 14.682116765, 14.6821716443, 14.6822265215, 14.6822813967, 14.6823362697, 14.6823911407, 14.6824460096, 14.6825008764, 14.6825557411, 14.6826106037, 14.6826654642, 14.6827203227, 14.6827751791, 14.6828300333, 14.6828848855, 14.6829397357, 14.6829945837, 14.6830494296, 14.6831042735, 14.6831591152, 14.6832139549, 14.6832687925, 14.6833236281, 14.6833784615, 14.6834332928, 14.6834881221, 14.6835429493, 14.6835977744, 14.6836525974, 14.6837074183, 14.6837622372, 14.6838170539, 14.6838718686, 14.6839266812, 14.6839814917, 14.6840363002, 14.6840911065, 14.6841459108, 14.684200713, 14.6842555131, 14.6843103111, 14.6843651071, 14.6844199009, 14.6844746927, 14.6845294824, 14.68458427, 14.6846390556, 14.684693839, 14.6847486204, 14.6848033997, 14.6848581769, 14.6849129521, 14.6849677251, 14.6850224961, 14.685077265, 14.6851320319, 14.6851867966, 14.6852415593, 14.6852963198, 14.6853510784, 14.6854058348, 14.6854605891, 14.6855153414, 14.6855700916, 14.6856248397, 14.6856795858, 14.6857343297, 14.6857890716, 14.6858438114, 14.6858985492, 14.6859532848, 14.6860080184, 14.6860627499, 14.6861174793, 14.6861722067, 14.6862269319, 14.6862816551, 14.6863363763, 14.6863910953, 14.6864458123, 14.6865005272, 14.68655524, 14.6866099508, 14.6866646594, 14.686719366, 14.6867740705, 14.686828773, 14.6868834734, 14.6869381717, 14.6869928679, 14.6870475621, 14.6871022541, 14.6871569441, 14.6872116321, 14.6872663179, 14.6873210017, 14.6873756834, 14.6874303631, 14.6874850407, 14.6875397161, 14.6875943896, 14.6876490609, 14.6877037302, 14.6877583974, 14.6878130626, 14.6878677256, 14.6879223866, 14.6879770456, 14.6880317024, 14.6880863572, 14.6881410099, 14.6881956606, 14.6882503091, 14.6883049556, 14.6883596001, 14.6884142424, 14.6884688827, 14.688523521, 14.6885781571, 14.6886327912, 14.6886874232, 14.6887420532, 14.6887966811, 14.6888513069, 14.6889059306, 14.6889605523, 14.6890151719, 14.6890697894, 14.6891244049, 14.6891790183, 14.6892336297, 14.6892882389, 14.6893428461, 14.6893974513, 14.6894520543, 14.6895066553, 14.6895612543, 14.6896158512, 14.689670446, 14.6897250387, 14.6897796294, 14.689834218, 14.6898888045, 14.689943389, 14.6899979714, 14.6900525518, 14.6901071301, 14.6901617063, 14.6902162804, 14.6902708525, 14.6903254225, 14.6903799905, 14.6904345564, 14.6904891202, 14.690543682, 14.6905982417, 14.6906527993, 14.6907073549, 14.6907619084, 14.6908164599, 14.6908710093, 14.6909255566, 14.6909801019, 14.6910346451, 14.6910891862, 14.6911437253, 14.6911982623, 14.6912527973, 14.6913073302, 14.691361861, 14.6914163898, 14.6914709165, 14.6915254412, 14.6915799638, 14.6916344843, 14.6916890028, 14.6917435192, 14.6917980335, 14.6918525458, 14.691907056, 14.6919615642, 14.6920160703, 14.6920705744, 14.6921250764, 14.6921795763, 14.6922340742, 14.69228857, 14.6923430638, 14.6923975555, 14.6924520451, 14.6925065327, 14.6925610182, 14.6926155017, 14.6926699831, 14.6927244625, 14.6927789398, 14.692833415, 14.6928878882, 14.6929423593, 14.6929968284, 14.6930512954, 14.6931057604, 14.6931602233, 14.6932146841, 14.6932691429, 14.6933235996, 14.6933780543, 14.6934325069, 14.6934869575, 14.693541406, 14.6935958525, 14.6936502969, 14.6937047392, 14.6937591795, 14.6938136178, 14.6938680539, 14.6939224881, 14.6939769202, 14.6940313502, 14.6940857782, 14.6941402041, 14.6941946279, 14.6942490498, 14.6943034695, 14.6943578872, 14.6944123029, 14.6944667165, 14.694521128, 14.6945755375, 14.694629945, 14.6946843504, 14.6947387537, 14.694793155, 14.6948475542, 14.6949019514, 14.6949563466, 14.6950107397, 14.6950651307, 14.6951195197, 14.6951739066, 14.6952282915, 14.6952826743, 14.6953370551, 14.6953914339, 14.6954458105, 14.6955001852, 14.6955545578, 14.6956089283, 14.6956632968, 14.6957176632, 14.6957720276, 14.69582639, 14.6958807503, 14.6959351085, 14.6959894647, 14.6960438189, 14.696098171, 14.696152521, 14.696206869, 14.696261215, 14.6963155589, 14.6963699008, 14.6964242406, 14.6964785784, 14.6965329141, 14.6965872478, 14.6966415794, 14.696695909, 14.6967502365, 14.696804562, 14.6968588855, 14.6969132069, 14.6969675262, 14.6970218435, 14.6970761588, 14.697130472, 14.6971847832, 14.6972390924, 14.6972933995, 14.6973477045, 14.6974020075, 14.6974563085, 14.6975106074, 14.6975649043, 14.6976191991, 14.6976734919, 14.6977277826, 14.6977820713, 14.697836358, 14.6978906426, 14.6979449251, 14.6979992057, 14.6980534842, 14.6981077606, 14.698162035, 14.6982163074, 14.6982705777, 14.698324846, 14.6983791122, 14.6984333764, 14.6984876386, 14.6985418987, 14.6985961567, 14.6986504128, 14.6987046668, 14.6987589187, 14.6988131686, 14.6988674165, 14.6989216623, 14.6989759061, 14.6990301479, 14.6990843876, 14.6991386253, 14.6991928609, 14.6992470945, 14.6993013261, 14.6993555556, 14.6994097831, 14.6994640085, 14.6995182319, 14.6995724533, 14.6996266726, 14.6996808899, 14.6997351052, 14.6997893184, 14.6998435296, 14.6998977387, 14.6999519458, 14.7000061509, 14.7000603539, 14.7001145549, 14.7001687539, 14.7002229508, 14.7002771457, 14.7003313385, 14.7003855294, 14.7004397181, 14.7004939049, 14.7005480896, 14.7006022723, 14.7006564529, 14.7007106315, 14.7007648081, 14.7008189826, 14.7008731551, 14.7009273256, 14.700981494, 14.7010356604, 14.7010898248, 14.7011439872, 14.7011981475, 14.7012523057, 14.701306462, 14.7013606162, 14.7014147683, 14.7014689185, 14.7015230666, 14.7015772126, 14.7016313567, 14.7016854987, 14.7017396387, 14.7017937766, 14.7018479125, 14.7019020464, 14.7019561783, 14.7020103081, 14.7020644359, 14.7021185616, 14.7021726854, 14.7022268071, 14.7022809267, 14.7023350444, 14.70238916, 14.7024432736, 14.7024973851, 14.7025514946, 14.7026056021, 14.7026597076, 14.702713811, 14.7027679124, 14.7028220118, 14.7028761091, 14.7029302044, 14.7029842977, 14.703038389, 14.7030924782, 14.7031465654, 14.7032006506, 14.7032547337, 14.7033088149, 14.703362894, 14.703416971, 14.7034710461, 14.7035251191, 14.7035791901, 14.703633259, 14.703687326, 14.7037413909, 14.7037954538, 14.7038495146, 14.7039035734, 14.7039576302, 14.704011685, 14.7040657378, 14.7041197885, 14.7041738372, 14.7042278839, 14.7042819286, 14.7043359712, 14.7043900118, 14.7044440504, 14.7044980869, 14.7045521215, 14.704606154, 14.7046601845, 14.7047142129, 14.7047682394, 14.7048222638, 14.7048762862, 14.7049303065, 14.7049843249, 14.7050383412, 14.7050923555, 14.7051463678, 14.7052003781, 14.7052543863, 14.7053083925, 14.7053623967, 14.7054163989, 14.705470399, 14.7055243972, 14.7055783933, 14.7056323874, 14.7056863794, 14.7057403695, 14.7057943575, 14.7058483435, 14.7059023275, 14.7059563095, 14.7060102894, 14.7060642673, 14.7061182432, 14.7061722171, 14.706226189, 14.7062801588, 14.7063341267, 14.7063880925, 14.7064420563, 14.7064960181, 14.7065499778, 14.7066039356, 14.7066578913, 14.706711845, 14.7067657967, 14.7068197463, 14.706873694, 14.7069276396, 14.7069815832, 14.7070355248, 14.7070894644, 14.707143402, 14.7071973375, 14.7072512711, 14.7073052026, 14.7073591321, 14.7074130596, 14.707466985, 14.7075209085, 14.7075748299, 14.7076287493, 14.7076826668, 14.7077365822, 14.7077904955, 14.7078444069, 14.7078983162, 14.7079522236, 14.7080061289, 14.7080600322, 14.7081139335, 14.7081678328, 14.70822173, 14.7082756253, 14.7083295185, 14.7083834098, 14.708437299, 14.7084911862, 14.7085450714, 14.7085989545, 14.7086528357, 14.7087067148, 14.708760592, 14.7088144671, 14.7088683402, 14.7089222113, 14.7089760804, 14.7090299475, 14.7090838126, 14.7091376756, 14.7091915367, 14.7092453957, 14.7092992527, 14.7093531077, 14.7094069607, 14.7094608117, 14.7095146607, 14.7095685077, 14.7096223526, 14.7096761956, 14.7097300365, 14.7097838755, 14.7098377124, 14.7098915473, 14.7099453802, 14.7099992111, 14.71005304, 14.7101068669, 14.7101606918, 14.7102145147, 14.7102683355, 14.7103221544, 14.7103759712, 14.710429786, 14.7104835989, 14.7105374097, 14.7105912185, 14.7106450253, 14.7106988301, 14.7107526329, 14.7108064337, 14.7108602325, 14.7109140293, 14.710967824, 14.7110216168, 14.7110754076, 14.7111291963, 14.7111829831, 14.7112367678, 14.7112905505, 14.7113443313, 14.71139811, 14.7114518867, 14.7115056614, 14.7115594341, 14.7116132049, 14.7116669736, 14.7117207403, 14.711774505, 14.7118282677, 14.7118820284, 14.711935787, 14.7119895437, 14.7120432984, 14.7120970511, 14.7121508018, 14.7122045504, 14.7122582971, 14.7123120418, 14.7123657844, 14.7124195251, 14.7124732638, 14.7125270004, 14.7125807351, 14.7126344678, 14.7126881984, 14.7127419271, 14.7127956537, 14.7128493784, 14.712903101, 14.7129568217, 14.7130105404, 14.713064257, 14.7131179717, 14.7131716843, 14.713225395, 14.7132791036, 14.7133328103, 14.7133865149, 14.7134402176, 14.7134939183, 14.7135476169, 14.7136013136, 14.7136550082, 14.7137087009, 14.7137623916, 14.7138160802, 14.7138697669, 14.7139234516, 14.7139771343, 14.7140308149, 14.7140844936, 14.7141381703, 14.714191845, 14.7142455177, 14.7142991884, 14.7143528571, 14.7144065238, 14.7144601885, 14.7145138512, 14.7145675119, 14.7146211706, 14.7146748273, 14.714728482, 14.7147821348, 14.7148357855, 14.7148894342, 14.714943081, 14.7149967257, 14.7150503685, 14.7151040092, 14.715157648, 14.7152112848, 14.7152649195, 14.7153185523, 14.7153721831, 14.7154258119, 14.7154794387, 14.7155330635, 14.7155866863, 14.7156403072, 14.715693926, 14.7157475428, 14.7158011577, 14.7158547705, 14.7159083814, 14.7159619903, 14.7160155971, 14.716069202, 14.7161228049, 14.7161764058, 14.7162300047, 14.7162836016, 14.7163371966, 14.7163907895, 14.7164443804, 14.7164979694, 14.7165515564, 14.7166051413, 14.7166587243, 14.7167123053, 14.7167658843, 14.7168194613, 14.7168730364, 14.7169266094, 14.7169801804, 14.7170337495, 14.7170873166, 14.7171408816, 14.7171944447, 14.7172480058, 14.7173015649, 14.7173551221, 14.7174086772, 14.7174622303, 14.7175157815, 14.7175693307, 14.7176228779, 14.7176764231, 14.7177299663, 14.7177835075, 14.7178370467, 14.717890584, 14.7179441193, 14.7179976525, 14.7180511838, 14.7181047131, 14.7181582404, 14.7182117658, 14.7182652891, 14.7183188105, 14.7183723299, 14.7184258472, 14.7184793626, 14.7185328761, 14.7185863875, 14.718639897, 14.7186934044, 14.7187469099, 14.7188004134, 14.7188539149, 14.7189074144, 14.718960912, 14.7190144075, 14.7190679011, 14.7191213927, 14.7191748823, 14.71922837, 14.7192818556, 14.7193353393, 14.7193888209, 14.7194423006, 14.7194957784, 14.7195492541, 14.7196027278, 14.7196561996, 14.7197096694, 14.7197631372, 14.719816603, 14.7198700669, 14.7199235287, 14.7199769886, 14.7200304465, 14.7200839024, 14.7201373564, 14.7201908083, 14.7202442583, 14.7202977063, 14.7203511523, 14.7204045963, 14.7204580384, 14.7205114785, 14.7205649166, 14.7206183527, 14.7206717868, 14.720725219, 14.7207786492, 14.7208320774, 14.7208855036, 14.7209389278, 14.7209923501, 14.7210457704, 14.7210991887, 14.721152605, 14.7212060194, 14.7212594318, 14.7213128422, 14.7213662506, 14.721419657, 14.7214730615, 14.721526464, 14.7215798645, 14.7216332631, 14.7216866596, 14.7217400542, 14.7217934468, 14.7218468375, 14.7219002261, 14.7219536128, 14.7220069975, 14.7220603802, 14.722113761, 14.7221671398, 14.7222205166, 14.7222738914, 14.7223272643, 14.7223806352, 14.7224340041, 14.722487371, 14.722540736, 14.722594099, 14.72264746, 14.722700819, 14.7227541761, 14.7228075312, 14.7228608843, 14.7229142354, 14.7229675846, 14.7230209318, 14.723074277, 14.7231276203, 14.7231809616, 14.7232343009, 14.7232876382, 14.7233409736, 14.723394307, 14.7234476384, 14.7235009679, 14.7235542954, 14.7236076209, 14.7236609444, 14.723714266, 14.7237675856, 14.7238209032, 14.7238742189, 14.7239275326, 14.7239808443, 14.724034154, 14.7240874618, 14.7241407676, 14.7241940714, 14.7242473733, 14.7243006732, 14.7243539711, 14.7244072671, 14.7244605611, 14.7245138531, 14.7245671432, 14.7246204313, 14.7246737174, 14.7247270015, 14.7247802837, 14.7248335639, 14.7248868422, 14.7249401185, 14.7249933928, 14.7250466651, 14.7250999355, 14.7251532039, 14.7252064704, 14.7252597348, 14.7253129973, 14.7253662579, 14.7254195165, 14.7254727731, 14.7255260277, 14.7255792804, 14.7256325311, 14.7256857799, 14.7257390267, 14.7257922715, 14.7258455143, 14.7258987552, 14.7259519942, 14.7260052311, 14.7260584661, 14.7261116992, 14.7261649302, 14.7262181593, 14.7262713865, 14.7263246117, 14.7263778349, 14.7264310561, 14.7264842754, 14.7265374927, 14.7265907081, 14.7266439215, 14.7266971329, 14.7267503424, 14.7268035499, 14.7268567555, 14.726909959, 14.7269631607, 14.7270163603, 14.727069558, 14.7271227538, 14.7271759475, 14.7272291394, 14.7272823292, 14.7273355171, 14.727388703, 14.727441887, 14.727495069, 14.7275482491, 14.7276014272, 14.7276546033, 14.7277077775, 14.7277609497, 14.7278141199, 14.7278672882, 14.7279204546, 14.7279736189, 14.7280267814, 14.7280799418, 14.7281331003, 14.7281862568, 14.7282394114, 14.728292564, 14.7283457147, 14.7283988634, 14.7284520102, 14.728505155, 14.7285582978, 14.7286114387, 14.7286645776, 14.7287177145, 14.7287708495, 14.7288239826, 14.7288771137, 14.7289302428, 14.72898337, 14.7290364952, 14.7290896185, 14.7291427398, 14.7291958591, 14.7292489765, 14.729302092, 14.7293552055, 14.729408317, 14.7294614266, 14.7295145342, 14.7295676398, 14.7296207436, 14.7296738453, 14.7297269451, 14.729780043, 14.7298331388, 14.7298862328, 14.7299393248, 14.7299924148, 14.7300455029, 14.730098589, 14.7301516732, 14.7302047554, 14.7302578357, 14.730310914, 14.7303639903, 14.7304170647, 14.7304701372, 14.7305232077, 14.7305762762, 14.7306293428, 14.7306824075, 14.7307354702, 14.7307885309, 14.7308415897, 14.7308946465, 14.7309477014, 14.7310007544, 14.7310538054, 14.7311068544, 14.7311599015, 14.7312129466, 14.7312659898, 14.731319031, 14.7313720703, 14.7314251076, 14.731478143, 14.7315311765, 14.7315842079, 14.7316372375, 14.7316902651, 14.7317432907, 14.7317963144, 14.7318493361, 14.7319023559, 14.7319553738, 14.7320083897, 14.7320614036, 14.7321144156, 14.7321674257, 14.7322204338, 14.7322734399, 14.7323264441, 14.7323794464, 14.7324324467, 14.7324854451, 14.7325384415, 14.732591436, 14.7326444285, 14.7326974191, 14.7327504077, 14.7328033944, 14.7328563791, 14.7329093619, 14.7329623428, 14.7330153217, 14.7330682986, 14.7331212737, 14.7331742467, 14.7332272179, 14.733280187, 14.7333331543, 14.7333861196, 14.7334390829, 14.7334920443, 14.7335450038, 14.7335979613, 14.7336509168, 14.7337038705, 14.7337568221, 14.7338097719, 14.7338627197, 14.7339156655, 14.7339686094, 14.7340215514, 14.7340744914, 14.7341274295, 14.7341803656, 14.7342332998, 14.7342862321, 14.7343391624, 14.7343920908, 14.7344450172, 14.7344979417, 14.7345508642, 14.7346037848, 14.7346567035, 14.7347096202, 14.734762535, 14.7348154478, 14.7348683587, 14.7349212677, 14.7349741747, 14.7350270798, 14.7350799829, 14.7351328841, 14.7351857834, 14.7352386807, 14.7352915761, 14.7353444695, 14.735397361, 14.7354502506, 14.7355031382, 14.7355560239, 14.7356089077, 14.7356617895, 14.7357146693, 14.7357675473, 14.7358204233, 14.7358732973, 14.7359261694, 14.7359790396, 14.7360319079, 14.7360847742, 14.7361376385, 14.736190501, 14.7362433615, 14.73629622, 14.7363490766, 14.7364019313, 14.7364547841, 14.7365076349, 14.7365604838, 14.7366133307, 14.7366661757, 14.7367190188, 14.7367718599, 14.7368246991, 14.7368775364, 14.7369303717, 14.7369832051, 14.7370360365, 14.7370888661, 14.7371416937, 14.7371945193, 14.737247343, 14.7373001648, 14.7373529847, 14.7374058026, 14.7374586186, 14.7375114326, 14.7375642447, 14.7376170549, 14.7376698632, 14.7377226695, 14.7377754739, 14.7378282763, 14.7378810769, 14.7379338754, 14.7379866721, 14.7380394668, 14.7380922596, 14.7381450505, 14.7381978394, 14.7382506264, 14.7383034115, 14.7383561946, 14.7384089758, 14.7384617551, 14.7385145324, 14.7385673078, 14.7386200813, 14.7386728529, 14.7387256225, 14.7387783902, 14.7388311559, 14.7388839198, 14.7389366817, 14.7389894416, 14.7390421997, 14.7390949558, 14.73914771, 14.7392004622, 14.7392532126, 14.739305961, 14.7393587074, 14.739411452, 14.7394641946, 14.7395169353, 14.739569674, 14.7396224109, 14.7396751458, 14.7397278787, 14.7397806098, 14.7398333389, 14.7398860661, 14.7399387913, 14.7399915147, 14.7400442361, 14.7400969556, 14.7401496731, 14.7402023888, 14.7402551025, 14.7403078143, 14.7403605241, 14.740413232, 14.740465938, 14.7405186421, 14.7405713443, 14.7406240445, 14.7406767428, 14.7407294392, 14.7407821336, 14.7408348261, 14.7408875167, 14.7409402054, 14.7409928922, 14.741045577, 14.7410982599, 14.7411509409, 14.74120362, 14.7412562971, 14.7413089723, 14.7413616456, 14.741414317, 14.7414669864, 14.7415196539, 14.7415723195, 14.7416249832, 14.7416776449, 14.7417303048, 14.7417829627, 14.7418356187, 14.7418882727, 14.7419409249, 14.7419935751, 14.7420462234, 14.7420988698, 14.7421515142, 14.7422041568, 14.7422567974, 14.7423094361, 14.7423620729, 14.7424147077, 14.7424673406, 14.7425199717, 14.7425726008, 14.7426252279, 14.7426778532, 14.7427304765, 14.7427830979, 14.7428357174, 14.742888335, 14.7429409507, 14.7429935644, 14.7430461762, 14.7430987861, 14.7431513941, 14.7432040002, 14.7432566043, 14.7433092066, 14.7433618069, 14.7434144053, 14.7434670017, 14.7435195963, 14.7435721889, 14.7436247797, 14.7436773685, 14.7437299554, 14.7437825403, 14.7438351234, 14.7438877045, 14.7439402838, 14.7439928611, 14.7440454365, 14.7440980099, 14.7441505815, 14.7442031511, 14.7442557189, 14.7443082847, 14.7443608486, 14.7444134106, 14.7444659706, 14.7445185288, 14.744571085, 14.7446236393, 14.7446761918, 14.7447287422, 14.7447812908, 14.7448338375, 14.7448863823, 14.7449389251, 14.744991466, 14.745044005, 14.7450965421, 14.7451490773, 14.7452016106, 14.745254142, 14.7453066714, 14.7453591989, 14.7454117246, 14.7454642483, 14.7455167701, 14.74556929, 14.7456218079, 14.745674324, 14.7457268382, 14.7457793504, 14.7458318607, 14.7458843691, 14.7459368756, 14.7459893802, 14.7460418829, 14.7460943837, 14.7461468826, 14.7461993795, 14.7462518746, 14.7463043677, 14.7463568589, 14.7464093482, 14.7464618356, 14.7465143211, 14.7465668047, 14.7466192864, 14.7466717662, 14.746724244, 14.74677672, 14.746829194, 14.7468816661, 14.7469341364, 14.7469866047, 14.7470390711, 14.7470915356, 14.7471439982, 14.7471964589, 14.7472489176, 14.7473013745, 14.7473538295, 14.7474062825, 14.7474587337, 14.7475111829, 14.7475636303, 14.7476160757, 14.7476685192, 14.7477209608, 14.7477734005, 14.7478258383, 14.7478782742, 14.7479307082, 14.7479831403, 14.7480355705, 14.7480879988, 14.7481404251, 14.7481928496, 14.7482452721, 14.7482976928, 14.7483501116, 14.7484025284, 14.7484549433, 14.7485073564, 14.7485597675, 14.7486121767, 14.7486645841, 14.7487169895, 14.748769393, 14.7488217946, 14.7488741943, 14.7489265921, 14.748978988, 14.749031382, 14.7490837741, 14.7491361643, 14.7491885526, 14.749240939, 14.7492933235, 14.7493457061, 14.7493980868, 14.7494504656, 14.7495028425, 14.7495552174, 14.7496075905, 14.7496599617, 14.749712331, 14.7497646983, 14.7498170638, 14.7498694274, 14.7499217891, 14.7499741488, 14.7500265067, 14.7500788627, 14.7501312168, 14.7501835689, 14.7502359192, 14.7502882676, 14.7503406141, 14.7503929586, 14.7504453013, 14.7504976421, 14.750549981, 14.750602318, 14.750654653, 14.7507069862, 14.7507593175, 14.7508116469, 14.7508639744, 14.7509163, 14.7509686237, 14.7510209455, 14.7510732654, 14.7511255834, 14.7511778995, 14.7512302137, 14.751282526, 14.7513348364, 14.7513871449, 14.7514394515, 14.7514917563, 14.7515440591, 14.75159636, 14.7516486591, 14.7517009562, 14.7517532514, 14.7518055448, 14.7518578362, 14.7519101258, 14.7519624135, 14.7520146992, 14.7520669831, 14.7521192651, 14.7521715452, 14.7522238234, 14.7522760996, 14.752328374, 14.7523806466, 14.7524329172, 14.7524851859, 14.7525374527, 14.7525897176, 14.7526419807, 14.7526942418, 14.7527465011, 14.7527987584, 14.7528510139, 14.7529032675, 14.7529555192, 14.7530077689, 14.7530600168, 14.7531122628, 14.753164507, 14.7532167492, 14.7532689895, 14.7533212279, 14.7533734645, 14.7534256991, 14.7534779319, 14.7535301628, 14.7535823918, 14.7536346189, 14.7536868441, 14.7537390674, 14.7537912888, 14.7538435083, 14.753895726, 14.7539479417, 14.7540001556, 14.7540523675, 14.7541045776, 14.7541567858, 14.7542089921, 14.7542611965, 14.754313399, 14.7543655997, 14.7544177984, 14.7544699953, 14.7545221902, 14.7545743833, 14.7546265745, 14.7546787638, 14.7547309512, 14.7547831368, 14.7548353204, 14.7548875022, 14.754939682, 14.75499186, 14.7550440361, 14.7550962103, 14.7551483826, 14.7552005531, 14.7552527216, 14.7553048883, 14.755357053, 14.7554092159, 14.7554613769, 14.755513536, 14.7555656933, 14.7556178486, 14.7556700021, 14.7557221536, 14.7557743033, 14.7558264511, 14.7558785971, 14.7559307411, 14.7559828832, 14.7560350235, 14.7560871619, 14.7561392984, 14.756191433, 14.7562435657, 14.7562956966, 14.7563478255, 14.7563999526, 14.7564520778, 14.7565042011, 14.7565563225, 14.7566084421, 14.7566605597, 14.7567126755, 14.7567647894, 14.7568169014, 14.7568690115, 14.7569211198, 14.7569732262, 14.7570253307, 14.7570774333, 14.757129534, 14.7571816328, 14.7572337298, 14.7572858249, 14.7573379181, 14.7573900094, 14.7574420988, 14.7574941864, 14.757546272, 14.7575983558, 14.7576504377, 14.7577025178, 14.7577545959, 14.7578066722, 14.7578587466, 14.7579108191, 14.7579628897, 14.7580149585, 14.7580670254, 14.7581190904, 14.7581711535, 14.7582232147, 14.7582752741, 14.7583273316, 14.7583793872, 14.7584314409, 14.7584834927, 14.7585355427, 14.7585875908, 14.758639637, 14.7586916814, 14.7587437238, 14.7587957644, 14.7588478031, 14.7588998399, 14.7589518749, 14.759003908, 14.7590559392, 14.7591079685, 14.7591599959, 14.7592120215, 14.7592640452, 14.759316067, 14.7593680869, 14.759420105, 14.7594721212, 14.7595241355, 14.759576148, 14.7596281585, 14.7596801672, 14.759732174, 14.759784179, 14.759836182, 14.7598881832, 14.7599401825, 14.75999218, 14.7600441755, 14.7600961692, 14.7601481611, 14.760200151, 14.7602521391, 14.7603041253, 14.7603561096, 14.7604080921, 14.7604600726, 14.7605120514, 14.7605640282, 14.7606160032, 14.7606679762, 14.7607199475, 14.7607719168, 14.7608238843, 14.7608758499, 14.7609278136, 14.7609797755, 14.7610317355, 14.7610836936, 14.7611356498, 14.7611876042, 14.7612395567, 14.7612915073, 14.7613434561, 14.761395403, 14.761447348, 14.7614992912, 14.7615512324, 14.7616031719, 14.7616551094, 14.7617070451, 14.7617589789, 14.7618109108, 14.7618628409, 14.7619147691, 14.7619666954, 14.7620186198, 14.7620705424, 14.7621224631, 14.762174382, 14.762226299, 14.7622782141, 14.7623301273, 14.7623820387, 14.7624339482, 14.7624858559, 14.7625377616, 14.7625896655, 14.7626415676, 14.7626934678, 14.7627453661, 14.7627972625, 14.7628491571, 14.7629010498, 14.7629529406, 14.7630048296, 14.7630567167, 14.7631086019, 14.7631604853, 14.7632123668, 14.7632642465, 14.7633161242, 14.7633680001, 14.7634198742, 14.7634717464, 14.7635236167, 14.7635754851, 14.7636273517, 14.7636792164, 14.7637310793, 14.7637829403, 14.7638347994, 14.7638866567, 14.7639385121, 14.7639903656, 14.7640422173, 14.7640940671, 14.7641459151, 14.7641977611, 14.7642496054, 14.7643014477, 14.7643532882, 14.7644051269, 14.7644569636, 14.7645087985, 14.7645606316, 14.7646124628, 14.7646642921, 14.7647161195, 14.7647679451, 14.7648197689, 14.7648715907, 14.7649234107, 14.7649752289, 14.7650270452, 14.7650788596, 14.7651306722, 14.7651824829, 14.7652342917, 14.7652860987, 14.7653379038, 14.7653897071, 14.7654415085, 14.7654933081, 14.7655451058, 14.7655969016, 14.7656486955, 14.7657004877, 14.7657522779, 14.7658040663, 14.7658558528, 14.7659076375, 14.7659594203, 14.7660112013, 14.7660629803, 14.7661147576, 14.766166533, 14.7662183065, 14.7662700781, 14.766321848, 14.7663736159, 14.766425382, 14.7664771462, 14.7665289086, 14.7665806691, 14.7666324278, 14.7666841846, 14.7667359395, 14.7667876926, 14.7668394439, 14.7668911932, 14.7669429408, 14.7669946864, 14.7670464302, 14.7670981722, 14.7671499123, 14.7672016505, 14.7672533869, 14.7673051214, 14.7673568541, 14.7674085849, 14.7674603139, 14.767512041, 14.7675637663, 14.7676154897, 14.7676672112, 14.7677189309, 14.7677706488, 14.7678223648, 14.7678740789, 14.7679257912, 14.7679775016, 14.7680292102, 14.7680809169, 14.7681326218, 14.7681843248, 14.7682360259, 14.7682877252, 14.7683394227, 14.7683911183, 14.7684428121, 14.768494504, 14.768546194, 14.7685978822, 14.7686495685, 14.768701253, 14.7687529357, 14.7688046165, 14.7688562954, 14.7689079725, 14.7689596477, 14.7690113211, 14.7690629926, 14.7691146623, 14.7691663301, 14.7692179961, 14.7692696603, 14.7693213225, 14.769372983, 14.7694246416, 14.7694762983, 14.7695279532, 14.7695796062, 14.7696312574, 14.7696829067, 14.7697345542, 14.7697861998, 14.7698378436, 14.7698894856, 14.7699411257, 14.7699927639, 14.7700444003, 14.7700960348, 14.7701476675, 14.7701992984, 14.7702509274, 14.7703025546, 14.7703541799, 14.7704058033, 14.7704574249, 14.7705090447, 14.7705606626, 14.7706122787, 14.7706638929, 14.7707155053, 14.7707671158, 14.7708187245, 14.7708703314, 14.7709219364, 14.7709735395, 14.7710251408, 14.7710767403, 14.7711283379, 14.7711799336, 14.7712315276, 14.7712831196, 14.7713347099, 14.7713862983, 14.7714378848, 14.7714894695, 14.7715410524, 14.7715926334, 14.7716442125, 14.7716957899, 14.7717473653, 14.771798939, 14.7718505108, 14.7719020807, 14.7719536488, 14.7720052151, 14.7720567795, 14.7721083421, 14.7721599028, 14.7722114617, 14.7722630187, 14.7723145739, 14.7723661273, 14.7724176788, 14.7724692285, 14.7725207763, 14.7725723223, 14.7726238665, 14.7726754088, 14.7727269492, 14.7727784879, 14.7728300247, 14.7728815596, 14.7729330927, 14.772984624, 14.7730361534, 14.773087681, 14.7731392067, 14.7731907306, 14.7732422527, 14.7732937729, 14.7733452913, 14.7733968078, 14.7734483225, 14.7734998354, 14.7735513464, 14.7736028556, 14.773654363, 14.7737058685, 14.7737573721, 14.773808874, 14.773860374, 14.7739118721, 14.7739633684, 14.7740148629, 14.7740663556, 14.7741178464, 14.7741693353, 14.7742208224, 14.7742723077, 14.7743237912, 14.7743752728, 14.7744267526, 14.7744782305, 14.7745297066, 14.7745811809, 14.7746326533, 14.7746841239, 14.7747355927, 14.7747870596, 14.7748385247, 14.7748899879, 14.7749414494, 14.7749929089, 14.7750443667, 14.7750958226, 14.7751472767, 14.7751987289, 14.7752501793, 14.7753016279, 14.7753530746, 14.7754045195, 14.7754559626, 14.7755074038, 14.7755588432, 14.7756102808, 14.7756617165, 14.7757131504, 14.7757645824, 14.7758160127, 14.7758674411, 14.7759188676, 14.7759702924, 14.7760217153, 14.7760731363, 14.7761245555, 14.7761759729, 14.7762273885, 14.7762788022, 14.7763302141, 14.7763816242, 14.7764330324, 14.7764844388, 14.7765358434, 14.7765872462, 14.7766386471, 14.7766900462, 14.7767414434, 14.7767928388, 14.7768442324, 14.7768956242, 14.7769470141, 14.7769984022, 14.7770497884, 14.7771011729, 14.7771525555, 14.7772039362, 14.7772553152, 14.7773066923, 14.7773580676, 14.777409441, 14.7774608127, 14.7775121825, 14.7775635504, 14.7776149166, 14.7776662809, 14.7777176434, 14.777769004, 14.7778203628, 14.7778717198, 14.777923075, 14.7779744283, 14.7780257799, 14.7780771295, 14.7781284774, 14.7781798234, 14.7782311676, 14.77828251, 14.7783338505, 14.7783851893, 14.7784365262, 14.7784878612, 14.7785391945, 14.7785905259, 14.7786418555, 14.7786931832, 14.7787445092, 14.7787958333, 14.7788471556, 14.778898476, 14.7789497946, 14.7790011114, 14.7790524264, 14.7791037396, 14.7791550509, 14.7792063604, 14.7792576681, 14.779308974, 14.779360278, 14.7794115802, 14.7794628806, 14.7795141791, 14.7795654759, 14.7796167708, 14.7796680639, 14.7797193551, 14.7797706446, 14.7798219322, 14.779873218, 14.779924502, 14.7799757841, 14.7800270644, 14.7800783429, 14.7801296196, 14.7801808945, 14.7802321675, 14.7802834387, 14.7803347081, 14.7803859757, 14.7804372414, 14.7804885054, 14.7805397675, 14.7805910278, 14.7806422862, 14.7806935429, 14.7807447977, 14.7807960507, 14.7808473019, 14.7808985512, 14.7809497987, 14.7810010445, 14.7810522884, 14.7811035304, 14.7811547707, 14.7812060091, 14.7812572457, 14.7813084805, 14.7813597135, 14.7814109447, 14.781462174, 14.7815134015, 14.7815646272, 14.7816158511, 14.7816670732, 14.7817182934, 14.7817695119, 14.7818207285, 14.7818719433, 14.7819231562, 14.7819743674, 14.7820255767, 14.7820767842, 14.7821279899, 14.7821791938, 14.7822303959, 14.7822815961, 14.7823327946, 14.7823839912, 14.782435186, 14.782486379, 14.7825375701, 14.7825887595, 14.782639947, 14.7826911327, 14.7827423166, 14.7827934987, 14.782844679, 14.7828958575, 14.7829470341, 14.7829982089, 14.7830493819, 14.7831005531, 14.7831517225, 14.7832028901, 14.7832540558, 14.7833052197, 14.7833563819, 14.7834075422, 14.7834587007, 14.7835098573, 14.7835610122, 14.7836121653, 14.7836633165, 14.7837144659, 14.7837656135, 14.7838167593, 14.7838679033, 14.7839190455, 14.7839701858, 14.7840213244, 14.7840724611, 14.784123596, 14.7841747291, 14.7842258604, 14.7842769899, 14.7843281176, 14.7843792434, 14.7844303675, 14.7844814897, 14.7845326101, 14.7845837288, 14.7846348456, 14.7846859605, 14.7847370737, 14.7847881851, 14.7848392947, 14.7848904024, 14.7849415083, 14.7849926125, 14.7850437148, 14.7850948153, 14.785145914, 14.7851970109, 14.7852481059, 14.7852991992, 14.7853502907, 14.7854013803, 14.7854524682, 14.7855035542, 14.7855546384, 14.7856057208, 14.7856568014, 14.7857078802, 14.7857589572, 14.7858100324, 14.7858611058, 14.7859121773, 14.7859632471, 14.786014315, 14.7860653812, 14.7861164455, 14.786167508, 14.7862185687, 14.7862696276, 14.7863206848, 14.78637174, 14.7864227935, 14.7864738452, 14.7865248951, 14.7865759432, 14.7866269894, 14.7866780339, 14.7867290765, 14.7867801174, 14.7868311564, 14.7868821937, 14.7869332291, 14.7869842627, 14.7870352945, 14.7870863246, 14.7871373528, 14.7871883792, 14.7872394038, 14.7872904266, 14.7873414476, 14.7873924667, 14.7874434841, 14.7874944997, 14.7875455135, 14.7875965254, 14.7876475356, 14.787698544, 14.7877495505, 14.7878005553, 14.7878515582, 14.7879025594, 14.7879535587, 14.7880045563, 14.788055552, 14.788106546, 14.7881575381, 14.7882085284, 14.788259517, 14.7883105037, 14.7883614886, 14.7884124718, 14.7884634531, 14.7885144326, 14.7885654103, 14.7886163863, 14.7886673604, 14.7887183327, 14.7887693032, 14.7888202719, 14.7888712388, 14.788922204, 14.7889731673, 14.7890241288, 14.7890750885, 14.7891260464, 14.7891770025, 14.7892279569, 14.7892789094, 14.7893298601, 14.789380809, 14.7894317561, 14.7894827014, 14.789533645, 14.7895845867, 14.7896355266, 14.7896864647, 14.7897374011, 14.7897883356, 14.7898392683, 14.7898901993, 14.7899411284, 14.7899920557, 14.7900429813, 14.790093905, 14.7901448269, 14.7901957471, 14.7902466654, 14.790297582, 14.7903484968, 14.7903994097, 14.7904503209, 14.7905012302, 14.7905521378, 14.7906030436, 14.7906539476, 14.7907048497, 14.7907557501, 14.7908066487, 14.7908575455, 14.7909084405, 14.7909593337, 14.7910102251, 14.7910611147, 14.7911120025, 14.7911628886, 14.7912137728, 14.7912646552, 14.7913155359, 14.7913664147, 14.7914172917, 14.791468167, 14.7915190405, 14.7915699121, 14.791620782, 14.7916716501, 14.7917225164, 14.7917733809, 14.7918242436, 14.7918751045, 14.7919259636, 14.7919768209, 14.7920276764, 14.7920785302, 14.7921293821, 14.7921802323, 14.7922310806, 14.7922819272, 14.792332772, 14.7923836149, 14.7924344561, 14.7924852955, 14.7925361331, 14.7925869689, 14.792637803, 14.7926886352, 14.7927394656, 14.7927902943, 14.7928411212, 14.7928919462, 14.7929427695, 14.792993591, 14.7930444107, 14.7930952286, 14.7931460447, 14.7931968591, 14.7932476716, 14.7932984824, 14.7933492913, 14.7934000985, 14.7934509039, 14.7935017075, 14.7935525093, 14.7936033093, 14.7936541075, 14.7937049039, 14.7937556986, 14.7938064915, 14.7938572825, 14.7939080718, 14.7939588593, 14.794009645, 14.7940604289, 14.7941112111, 14.7941619914, 14.79421277, 14.7942635468, 14.7943143217, 14.7943650949, 14.7944158664, 14.794466636, 14.7945174038, 14.7945681699, 14.7946189341, 14.7946696966, 14.7947204573, 14.7947712162, 14.7948219733, 14.7948727287, 14.7949234822, 14.794974234, 14.795024984, 14.7950757322, 14.7951264786, 14.7951772232, 14.795227966, 14.7952787071, 14.7953294464, 14.7953801838, 14.7954309195, 14.7954816535, 14.7955323856, 14.7955831159, 14.7956338445, 14.7956845713, 14.7957352963, 14.7957860195, 14.7958367409, 14.7958874606, 14.7959381784, 14.7959888945, 14.7960396088, 14.7960903213, 14.7961410321, 14.796191741, 14.7962424482, 14.7962931536, 14.7963438572, 14.796394559, 14.7964452591, 14.7964959573, 14.7965466538, 14.7965973485, 14.7966480414, 14.7966987325, 14.7967494219, 14.7968001095, 14.7968507953, 14.7969014793, 14.7969521615, 14.797002842, 14.7970535206, 14.7971041975, 14.7971548726, 14.797205546, 14.7972562175, 14.7973068873, 14.7973575553, 14.7974082215, 14.7974588859, 14.7975095486, 14.7975602094, 14.7976108685, 14.7976615259, 14.7977121814, 14.7977628352, 14.7978134871, 14.7978641373, 14.7979147858, 14.7979654324, 14.7980160773, 14.7980667204, 14.7981173617, 14.7981680012, 14.798218639, 14.7982692749, 14.7983199092, 14.7983705416, 14.7984211722, 14.7984718011, 14.7985224282, 14.7985730535, 14.7986236771, 14.7986742988, 14.7987249188, 14.798775537, 14.7988261535, 14.7988767681, 14.798927381, 14.7989779921, 14.7990286015, 14.799079209, 14.7991298148, 14.7991804188, 14.7992310211, 14.7992816215, 14.7993322202, 14.7993828171, 14.7994334123, 14.7994840056, 14.7995345972, 14.799585187, 14.7996357751, 14.7996863613, 14.7997369458, 14.7997875285, 14.7998381095, 14.7998886887, 14.7999392661, 14.7999898417, 14.8000404155, 14.8000909876, 14.8001415579, 14.8001921265, 14.8002426932, 14.8002932582, 14.8003438214, 14.8003943829, 14.8004449426, 14.8004955005, 14.8005460566, 14.800596611, 14.8006471635, 14.8006977144, 14.8007482634, 14.8007988107, 14.8008493562, 14.8008998999, 14.8009504419, 14.8010009821, 14.8010515205, 14.8011020571, 14.801152592, 14.8012031251, 14.8012536565, 14.801304186, 14.8013547139, 14.8014052399, 14.8014557641, 14.8015062866, 14.8015568074, 14.8016073263, 14.8016578435, 14.8017083589, 14.8017588726, 14.8018093844, 14.8018598946, 14.8019104029, 14.8019609095, 14.8020114143, 14.8020619173, 14.8021124186, 14.8021629181, 14.8022134158, 14.8022639118, 14.802314406, 14.8023648984, 14.8024153891, 14.802465878, 14.8025163651, 14.8025668505, 14.8026173341, 14.8026678159, 14.802718296, 14.8027687743, 14.8028192508, 14.8028697256, 14.8029201986, 14.8029706698, 14.8030211393, 14.803071607, 14.8031220729, 14.8031725371, 14.8032229995, 14.8032734602, 14.803323919, 14.8033743762, 14.8034248315, 14.8034752851, 14.8035257369, 14.803576187, 14.8036266353, 14.8036770818, 14.8037275266, 14.8037779696, 14.8038284108, 14.8038788503, 14.803929288, 14.8039797239, 14.8040301581, 14.8040805905, 14.8041310212, 14.8041814501, 14.8042318772, 14.8042823026, 14.8043327262, 14.804383148, 14.8044335681, 14.8044839864, 14.804534403, 14.8045848178, 14.8046352308, 14.8046856421, 14.8047360516, 14.8047864594, 14.8048368654, 14.8048872696, 14.8049376721, 14.8049880728, 14.8050384717, 14.8050888689, 14.8051392643, 14.805189658, 14.8052400499, 14.80529044, 14.8053408284, 14.805391215, 14.8054415999, 14.805491983, 14.8055423644, 14.8055927439, 14.8056431218, 14.8056934978, 14.8057438722, 14.8057942447, 14.8058446155, 14.8058949845, 14.8059453518, 14.8059957173, 14.8060460811, 14.8060964431, 14.8061468033, 14.8061971618, 14.8062475185, 14.8062978735, 14.8063482267, 14.8063985782, 14.8064489279, 14.8064992758, 14.806549622, 14.8065999664, 14.8066503091, 14.80670065, 14.8067509891, 14.8068013265, 14.8068516622, 14.8069019961, 14.8069523282, 14.8070026586, 14.8070529872, 14.8071033141, 14.8071536392, 14.8072039625, 14.8072542841, 14.807304604, 14.8073549221, 14.8074052384, 14.807455553, 14.8075058658, 14.8075561769, 14.8076064862, 14.8076567937, 14.8077070995, 14.8077574036, 14.8078077059, 14.8078580064, 14.8079083052, 14.8079586023, 14.8080088975, 14.8080591911, 14.8081094828, 14.8081597729, 14.8082100611, 14.8082603477, 14.8083106324, 14.8083609154, 14.8084111967, 14.8084614762, 14.808511754, 14.80856203, 14.8086123042, 14.8086625767, 14.8087128475, 14.8087631165, 14.8088133837, 14.8088636492, 14.8089139129, 14.8089641749, 14.8090144352, 14.8090646936, 14.8091149504, 14.8091652054, 14.8092154586, 14.8092657101, 14.8093159598, 14.8093662078, 14.8094164541, 14.8094666985, 14.8095169413, 14.8095671823, 14.8096174215, 14.809667659, 14.8097178947, 14.8097681287, 14.809818361, 14.8098685914, 14.8099188202, 14.8099690472, 14.8100192724, 14.8100694959, 14.8101197177, 14.8101699377, 14.8102201559, 14.8102703724, 14.8103205872, 14.8103708002, 14.8104210114, 14.810471221, 14.8105214287, 14.8105716347, 14.810621839, 14.8106720415, 14.8107222423, 14.8107724413, 14.8108226386, 14.8108728342, 14.810923028, 14.81097322, 14.8110234103, 14.8110735989, 14.8111237857, 14.8111739707, 14.811224154, 14.8112743356, 14.8113245154, 14.8113746935, 14.8114248698, 14.8114750444, 14.8115252173, 14.8115753884, 14.8116255577, 14.8116757253, 14.8117258912, 14.8117760553, 14.8118262177, 14.8118763783, 14.8119265372, 14.8119766944, 14.8120268498, 14.8120770034, 14.8121271553, 14.8121773055, 14.8122274539, 14.8122776006, 14.8123277456, 14.8123778888, 14.8124280302, 14.8124781699, 14.8125283079, 14.8125784441, 14.8126285786, 14.8126787114, 14.8127288424, 14.8127789716, 14.8128290991, 14.8128792249, 14.812929349, 14.8129794713, 14.8130295918, 14.8130797106, 14.8131298277, 14.813179943, 14.8132300566, 14.8132801685, 14.8133302786, 14.8133803869, 14.8134304936, 14.8134805984, 14.8135307016, 14.813580803, 14.8136309027, 14.8136810006, 14.8137310968, 14.8137811912, 14.8138312839, 14.8138813749, 14.8139314641, 14.8139815516, 14.8140316374, 14.8140817214, 14.8141318037, 14.8141818842, 14.814231963, 14.81428204, 14.8143321154, 14.814382189, 14.8144322608, 14.8144823309, 14.8145323993, 14.8145824659, 14.8146325308, 14.814682594, 14.8147326554, 14.8147827151, 14.814832773, 14.8148828292, 14.8149328837, 14.8149829364, 14.8150329874, 14.8150830367, 14.8151330842, 14.81518313, 14.8152331741, 14.8152832164, 14.815333257, 14.8153832958, 14.8154333329, 14.8154833683, 14.8155334019, 14.8155834339, 14.815633464, 14.8156834925, 14.8157335192, 14.8157835441, 14.8158335674, 14.8158835889, 14.8159336086, 14.8159836267, 14.8160336429, 14.8160836575, 14.8161336703, 14.8161836814, 14.8162336908, 14.8162836984, 14.8163337043, 14.8163837085, 14.8164337109, 14.8164837116, 14.8165337106, 14.8165837078, 14.8166337033, 14.816683697, 14.8167336891, 14.8167836794, 14.8168336679, 14.8168836548, 14.8169336399, 14.8169836233, 14.8170336049, 14.8170835848, 14.817133563, 14.8171835394, 14.8172335141, 14.8172834871, 14.8173334584, 14.8173834279, 14.8174333957, 14.8174833617, 14.8175333261, 14.8175832887, 14.8176332495, 14.8176832087, 14.8177331661, 14.8177831218, 14.8178330757, 14.8178830279, 14.8179329784, 14.8179829272, 14.8180328742, 14.8180828195, 14.8181327631, 14.8181827049, 14.8182326451, 14.8182825835, 14.8183325201, 14.818382455, 14.8184323882, 14.8184823197, 14.8185322495, 14.8185821775, 14.8186321038, 14.8186820283, 14.8187319512, 14.8187818723, 14.8188317917, 14.8188817093, 14.8189316252, 14.8189815394, 14.8190314519, 14.8190813626, 14.8191312717, 14.819181179, 14.8192310845, 14.8192809884, 14.8193308905, 14.8193807909, 14.8194306895, 14.8194805865, 14.8195304817, 14.8195803752, 14.8196302669, 14.8196801569, 14.8197300453, 14.8197799318, 14.8198298167, 14.8198796998, 14.8199295812, 14.8199794609, 14.8200293389, 14.8200792151, 14.8201290896, 14.8201789624, 14.8202288335, 14.8202787028, 14.8203285704, 14.8203784363, 14.8204283005, 14.8204781629, 14.8205280237, 14.8205778827, 14.8206277399, 14.8206775955, 14.8207274493, 14.8207773014, 14.8208271518, 14.8208770005, 14.8209268474, 14.8209766926, 14.8210265361, 14.8210763779, 14.8211262179, 14.8211760563, 14.8212258929, 14.8212757278, 14.8213255609, 14.8213753924, 14.8214252221, 14.8214750501, 14.8215248764, 14.8215747009, 14.8216245238, 14.8216743449, 14.8217241643, 14.821773982, 14.8218237979, 14.8218736122, 14.8219234247, 14.8219732355, 14.8220230446, 14.8220728519, 14.8221226576, 14.8221724615, 14.8222222637, 14.8222720642, 14.8223218629, 14.82237166, 14.8224214553, 14.8224712489, 14.8225210408, 14.822570831, 14.8226206194, 14.8226704061, 14.8227201911, 14.8227699744, 14.822819756, 14.8228695359, 14.822919314, 14.8229690905, 14.8230188652, 14.8230686382, 14.8231184094, 14.823168179, 14.8232179468, 14.8232677129, 14.8233174774, 14.82336724, 14.823417001, 14.8234667603, 14.8235165178, 14.8235662736, 14.8236160278, 14.8236657801, 14.8237155308, 14.8237652798, 14.823815027, 14.8238647726, 14.8239145164, 14.8239642585, 14.8240139989, 14.8240637375, 14.8241134745, 14.8241632097, 14.8242129433, 14.8242626751, 14.8243124052, 14.8243621336, 14.8244118602, 14.8244615852, 14.8245113084, 14.82456103, 14.8246107498, 14.8246604679, 14.8247101843, 14.824759899, 14.8248096119, 14.8248593232, 14.8249090327, 14.8249587405, 14.8250084466, 14.825058151, 14.8251078537, 14.8251575547, 14.825207254, 14.8252569515, 14.8253066474, 14.8253563415, 14.8254060339, 14.8254557246, 14.8255054136, 14.8255551009, 14.8256047864, 14.8256544703, 14.8257041524, 14.8257538329, 14.8258035116, 14.8258531886, 14.8259028639, 14.8259525375, 14.8260022094, 14.8260518796, 14.826101548, 14.8261512148, 14.8262008798, 14.8262505432, 14.8263002048, 14.8263498647, 14.8263995229, 14.8264491794, 14.8264988342, 14.8265484873, 14.8265981387, 14.8266477883, 14.8266974363, 14.8267470825, 14.8267967271, 14.8268463699, 14.826896011, 14.8269456504, 14.8269952881, 14.8270449241, 14.8270945584, 14.827144191, 14.8271938219, 14.827243451, 14.8272930785, 14.8273427042, 14.8273923283, 14.8274419506, 14.8274915712, 14.8275411902, 14.8275908074, 14.8276404229, 14.8276900367, 14.8277396488, 14.8277892592, 14.8278388679, 14.8278884749, 14.8279380801, 14.8279876837, 14.8280372856, 14.8280868857, 14.8281364842, 14.8281860809, 14.828235676, 14.8282852693, 14.828334861, 14.8283844509, 14.8284340391, 14.8284836256, 14.8285332105, 14.8285827936, 14.828632375, 14.8286819547, 14.8287315327, 14.828781109, 14.8288306836, 14.8288802565, 14.8289298277, 14.8289793971, 14.8290289649, 14.829078531, 14.8291280954, 14.829177658, 14.829227219, 14.8292767783, 14.8293263358, 14.8293758917, 14.8294254459, 14.8294749983, 14.8295245491, 14.8295740981, 14.8296236455, 14.8296731911, 14.8297227351, 14.8297722773, 14.8298218179, 14.8298713567, 14.8299208939, 14.8299704293, 14.8300199631, 14.8300694951, 14.8301190254, 14.8301685541, 14.830218081, 14.8302676063, 14.8303171298, 14.8303666517, 14.8304161718, 14.8304656902, 14.830515207, 14.830564722, 14.8306142354, 14.830663747, 14.830713257, 14.8307627652, 14.8308122717, 14.8308617766, 14.8309112797, 14.8309607812, 14.8310102809, 14.831059779, 14.8311092754, 14.83115877, 14.831208263, 14.8312577542, 14.8313072438, 14.8313567317, 14.8314062178, 14.8314557023, 14.8315051851, 14.8315546662, 14.8316041455, 14.8316536232, 14.8317030992, 14.8317525735, 14.8318020461, 14.831851517, 14.8319009862, 14.8319504537, 14.8319999195, 14.8320493836, 14.832098846, 14.8321483068, 14.8321977658, 14.8322472231, 14.8322966787, 14.8323461327, 14.8323955849, 14.8324450355, 14.8324944843, 14.8325439315, 14.832593377, 14.8326428207, 14.8326922628, 14.8327417032, 14.8327911419, 14.8328405789, 14.8328900142, 14.8329394478, 14.8329888797, 14.8330383099, 14.8330877384, 14.8331371653, 14.8331865904, 14.8332360138, 14.8332854356, 14.8333348556, 14.833384274, 14.8334336907, 14.8334831057, 14.8335325189, 14.8335819305, 14.8336313404, 14.8336807487, 14.8337301552, 14.83377956, 14.8338289631, 14.8338783646, 14.8339277643, 14.8339771624, 14.8340265588, 14.8340759534, 14.8341253464, 14.8341747377, 14.8342241273, 14.8342735152, 14.8343229015, 14.834372286, 14.8344216688, 14.83447105, 14.8345204294, 14.8345698072, 14.8346191833, 14.8346685577, 14.8347179304, 14.8347673014, 14.8348166707, 14.8348660384, 14.8349154043, 14.8349647686, 14.8350141311, 14.835063492, 14.8351128512, 14.8351622087, 14.8352115645, 14.8352609186, 14.8353102711, 14.8353596218, 14.8354089709, 14.8354583182, 14.8355076639, 14.8355570079, 14.8356063502, 14.8356556908, 14.8357050298, 14.835754367, 14.8358037026, 14.8358530364, 14.8359023686, 14.8359516991, 14.8360010279, 14.8360503551, 14.8360996805, 14.8361490042, 14.8361983263, 14.8362476467, 14.8362969654, 14.8363462824, 14.8363955977, 14.8364449113, 14.8364942233, 14.8365435336, 14.8365928421, 14.836642149, 14.8366914542, 14.8367407578, 14.8367900596, 14.8368393597, 14.8368886582, 14.836937955, 14.8369872501, 14.8370365435, 14.8370858352, 14.8371351253, 14.8371844137, 14.8372337003, 14.8372829853, 14.8373322686, 14.8373815503, 14.8374308302, 14.8374801085, 14.8375293851, 14.83757866, 14.8376279332, 14.8376772047, 14.8377264745, 14.8377757427, 14.8378250092, 14.837874274, 14.8379235371, 14.8379727986, 14.8380220583, 14.8380713164, 14.8381205728, 14.8381698275, 14.8382190805, 14.8382683318, 14.8383175815, 14.8383668295, 14.8384160758, 14.8384653204, 14.8385145634, 14.8385638046, 14.8386130442, 14.8386622821, 14.8387115183, 14.8387607529, 14.8388099857, 14.8388592169, 14.8389084464, 14.8389576742, 14.8390069003, 14.8390561248, 14.8391053476, 14.8391545687, 14.8392037881, 14.8392530058, 14.8393022219, 14.8393514363, 14.839400649, 14.83944986, 14.8394990694, 14.839548277, 14.839597483, 14.8396466873, 14.83969589, 14.8397450909, 14.8397942902, 14.8398434878, 14.8398926837, 14.839941878, 14.8399910705, 14.8400402614, 14.8400894506, 14.8401386382, 14.840187824, 14.8402370082, 14.8402861907, 14.8403353716, 14.8403845507, 14.8404337282, 14.840482904, 14.8405320781, 14.8405812506, 14.8406304213, 14.8406795904, 14.8407287578, 14.8407779236, 14.8408270877, 14.8408762501, 14.8409254108, 14.8409745698, 14.8410237272, 14.8410728829, 14.8411220369, 14.8411711892, 14.8412203399, 14.8412694889, 14.8413186362, 14.8413677819, 14.8414169259, 14.8414660682, 14.8415152088, 14.8415643477, 14.841613485, 14.8416626206, 14.8417117545, 14.8417608868, 14.8418100174, 14.8418591463, 14.8419082735, 14.8419573991, 14.842006523, 14.8420556452, 14.8421047658, 14.8421538846, 14.8422030018, 14.8422521174, 14.8423012312, 14.8423503434, 14.8423994539, 14.8424485628, 14.8424976699, 14.8425467754, 14.8425958793, 14.8426449814, 14.8426940819, 14.8427431807, 14.8427922779, 14.8428413733, 14.8428904672, 14.8429395593, 14.8429886497, 14.8430377385, 14.8430868257, 14.8431359111, 14.8431849949, 14.843234077, 14.8432831574, 14.8433322362, 14.8433813133, 14.8434303888, 14.8434794625, 14.8435285346, 14.843577605, 14.8436266738, 14.8436757409, 14.8437248063, 14.84377387, 14.8438229321, 14.8438719925, 14.8439210513, 14.8439701084, 14.8440191638, 14.8440682175, 14.8441172696, 14.84416632, 14.8442153687, 14.8442644158, 14.8443134612, 14.8443625049, 14.844411547, 14.8444605874, 14.8445096261, 14.8445586632, 14.8446076986, 14.8446567323, 14.8447057644, 14.8447547948, 14.8448038235, 14.8448528506, 14.844901876, 14.8449508998, 14.8449999218, 14.8450489422, 14.845097961, 14.845146978, 14.8451959935, 14.8452450072, 14.8452940193, 14.8453430297, 14.8453920384, 14.8454410455, 14.8454900509, 14.8455390547, 14.8455880568, 14.8456370572, 14.845686056, 14.8457350531, 14.8457840485, 14.8458330423, 14.8458820344, 14.8459310248, 14.8459800136, 14.8460290007, 14.8460779862, 14.84612697, 14.8461759521, 14.8462249325, 14.8462739113, 14.8463228885, 14.846371864, 14.8464208378, 14.8464698099, 14.8465187804, 14.8465677492, 14.8466167164, 14.8466656819, 14.8467146457, 14.8467636079, 14.8468125684, 14.8468615273, 14.8469104845, 14.84695944, 14.8470083939, 14.8470573461, 14.8471062966, 14.8471552455, 14.8472041928, 14.8472531383, 14.8473020822, 14.8473510245, 14.8473999651, 14.847448904, 14.8474978412, 14.8475467769, 14.8475957108, 14.8476446431, 14.8476935737, 14.8477425027, 14.84779143, 14.8478403556, 14.8478892796, 14.8479382019, 14.8479871226, 14.8480360416, 14.848084959, 14.8481338747, 14.8481827887, 14.8482317011, 14.8482806118, 14.8483295209, 14.8483784283, 14.848427334, 14.8484762381, 14.8485251405, 14.8485740413, 14.8486229404, 14.8486718379, 14.8487207337, 14.8487696278, 14.8488185203, 14.8488674111, 14.8489163003, 14.8489651878, 14.8490140737, 14.8490629579, 14.8491118404, 14.8491607213, 14.8492096006, 14.8492584781, 14.8493073541, 14.8493562283, 14.8494051009, 14.8494539719, 14.8495028412, 14.8495517088, 14.8496005748, 14.8496494392, 14.8496983019, 14.8497471629, 14.8497960222, 14.84984488, 14.849893736, 14.8499425904, 14.8499914432, 14.8500402943, 14.8500891437, 14.8501379915, 14.8501868376, 14.8502356821, 14.850284525, 14.8503333661, 14.8503822057, 14.8504310435, 14.8504798797, 14.8505287143, 14.8505775472, 14.8506263785, 14.8506752081, 14.850724036, 14.8507728623, 14.850821687, 14.85087051, 14.8509193313, 14.850968151, 14.851016969, 14.8510657854, 14.8511146001, 14.8511634132, 14.8512122247, 14.8512610344, 14.8513098426, 14.851358649, 14.8514074539, 14.851456257, 14.8515050586, 14.8515538584, 14.8516026567, 14.8516514532, 14.8517002481, 14.8517490414, 14.851797833, 14.851846623, 14.8518954113, 14.851944198, 14.851992983, 14.8520417664, 14.8520905481, 14.8521393282, 14.8521881066, 14.8522368834, 14.8522856585, 14.852334432, 14.8523832038, 14.852431974, 14.8524807425, 14.8525295094, 14.8525782746, 14.8526270382, 14.8526758002, 14.8527245604, 14.8527733191, 14.8528220761, 14.8528708314, 14.8529195851, 14.8529683372, 14.8530170876, 14.8530658363, 14.8531145834, 14.8531633289, 14.8532120727, 14.8532608149, 14.8533095554, 14.8533582943, 14.8534070315, 14.8534557671, 14.853504501, 14.8535532333, 14.853601964, 14.8536506929, 14.8536994203, 14.853748146, 14.8537968701, 14.8538455925, 14.8538943132, 14.8539430324, 14.8539917498, 14.8540404657, 14.8540891799, 14.8541378924, 14.8541866033, 14.8542353126, 14.8542840202, 14.8543327261, 14.8543814305, 14.8544301331, 14.8544788342, 14.8545275336, 14.8545762313, 14.8546249274, 14.8546736219, 14.8547223147, 14.8547710058, 14.8548196954, 14.8548683833, 14.8549170695, 14.8549657541, 14.8550144371, 14.8550631184, 14.855111798, 14.8551604761, 14.8552091525, 14.8552578272, 14.8553065003, 14.8553551718, 14.8554038416, 14.8554525097, 14.8555011763, 14.8555498412, 14.8555985044, 14.855647166, 14.855695826, 14.8557444843, 14.855793141, 14.855841796, 14.8558904495, 14.8559391012, 14.8559877513, 14.8560363998, 14.8560850467, 14.8561336919, 14.8561823354, 14.8562309773, 14.8562796176, 14.8563282563, 14.8563768933, 14.8564255286, 14.8564741623, 14.8565227944, 14.8565714249, 14.8566200537, 14.8566686808, 14.8567173064, 14.8567659303, 14.8568145525, 14.8568631731, 14.8569117921, 14.8569604094, 14.8570090251, 14.8570576392, 14.8571062516, 14.8571548624, 14.8572034715, 14.857252079, 14.8573006849, 14.8573492891, 14.8573978917, 14.8574464927, 14.857495092, 14.8575436897, 14.8575922857, 14.8576408801, 14.8576894729, 14.857738064, 14.8577866535, 14.8578352414, 14.8578838276, 14.8579324122, 14.8579809951, 14.8580295764, 14.8580781561, 14.8581267342, 14.8581753106, 14.8582238853, 14.8582724585, 14.85832103, 14.8583695999, 14.8584181681, 14.8584667347, 14.8585152996, 14.858563863, 14.8586124247, 14.8586609847, 14.8587095431, 14.8587580999, 14.8588066551, 14.8588552086, 14.8589037605, 14.8589523108, 14.8590008594, 14.8590494064, 14.8590979517, 14.8591464954, 14.8591950375, 14.859243578, 14.8592921168, 14.859340654, 14.8593891895, 14.8594377234, 14.8594862557, 14.8595347864, 14.8595833154, 14.8596318428, 14.8596803686, 14.8597288927, 14.8597774152, 14.859825936, 14.8598744553, 14.8599229729, 14.8599714888, 14.8600200032, 14.8600685159, 14.8601170269, 14.8601655364, 14.8602140442, 14.8602625504, 14.8603110549, 14.8603595578, 14.8604080591, 14.8604565588, 14.8605050568, 14.8605535532, 14.860602048, 14.8606505411, 14.8606990326, 14.8607475225, 14.8607960107, 14.8608444974, 14.8608929823, 14.8609414657, 14.8609899474, 14.8610384275, 14.861086906, 14.8611353828, 14.861183858, 14.8612323316, 14.8612808036, 14.8613292739, 14.8613777426, 14.8614262097, 14.8614746751, 14.8615231389, 14.8615716011, 14.8616200617, 14.8616685206, 14.8617169779, 14.8617654336, 14.8618138876, 14.8618623401, 14.8619107909, 14.86195924, 14.8620076876, 14.8620561335, 14.8621045778, 14.8621530204, 14.8622014614, 14.8622499009, 14.8622983386, 14.8623467748, 14.8623952093, 14.8624436422, 14.8624920735, 14.8625405031, 14.8625889312, 14.8626373576, 14.8626857823, 14.8627342055, 14.862782627, 14.8628310469, 14.8628794652, 14.8629278818, 14.8629762968, 14.8630247102, 14.863073122, 14.8631215322, 14.8631699407, 14.8632183476, 14.8632667529, 14.8633151565, 14.8633635585, 14.8634119589, 14.8634603577, 14.8635087549, 14.8635571504, 14.8636055443, 14.8636539366, 14.8637023273, 14.8637507163, 14.8637991037, 14.8638474895, 14.8638958737, 14.8639442562, 14.8639926372, 14.8640410165, 14.8640893942, 14.8641377702, 14.8641861447, 14.8642345175, 14.8642828887, 14.8643312582, 14.8643796262, 14.8644279925, 14.8644763572, 14.8645247203, 14.8645730818, 14.8646214416, 14.8646697998, 14.8647181564, 14.8647665114, 14.8648148648, 14.8648632165, 14.8649115666, 14.8649599151, 14.865008262, 14.8650566073, 14.8651049509, 14.8651532929, 14.8652016333, 14.8652499721, 14.8652983093, 14.8653466448, 14.8653949787, 14.865443311, 14.8654916417, 14.8655399708, 14.8655882982, 14.8656366241, 14.8656849483, 14.8657332709, 14.8657815918, 14.8658299112, 14.8658782289, 14.865926545, 14.8659748595, 14.8660231724, 14.8660714837, 14.8661197933, 14.8661681013, 14.8662164077, 14.8662647125, 14.8663130157, 14.8663613173, 14.8664096172, 14.8664579155, 14.8665062122, 14.8665545073, 14.8666028008, 14.8666510926, 14.8666993829, 14.8667476715, 14.8667959585, 14.8668442439, 14.8668925277, 14.8669408098, 14.8669890904, 14.8670373693, 14.8670856466, 14.8671339223, 14.8671821964, 14.8672304689, 14.8672787397, 14.8673270089, 14.8673752766, 14.8674235426, 14.867471807, 14.8675200697, 14.8675683309, 14.8676165904, 14.8676648484, 14.8677131047, 14.8677613594, 14.8678096125, 14.867857864, 14.8679061138, 14.8679543621, 14.8680026087, 14.8680508537, 14.8680990972, 14.868147339, 14.8681955791, 14.8682438177, 14.8682920547, 14.86834029, 14.8683885237, 14.8684367559, 14.8684849864, 14.8685332153, 14.8685814425, 14.8686296682, 14.8686778923, 14.8687261147, 14.8687743356, 14.8688225548, 14.8688707724, 14.8689189884, 14.8689672028, 14.8690154156, 14.8690636267, 14.8691118363, 14.8691600442, 14.8692082506, 14.8692564553, 14.8693046584, 14.8693528599, 14.8694010598, 14.8694492581, 14.8694974547, 14.8695456498, 14.8695938432, 14.8696420351, 14.8696902253, 14.8697384139, 14.8697866009, 14.8698347863, 14.8698829701, 14.8699311523, 14.8699793329, 14.8700275119, 14.8700756892, 14.870123865, 14.8701720391, 14.8702202116, 14.8702683826, 14.8703165519, 14.8703647196, 14.8704128857, 14.8704610502, 14.8705092131, 14.8705573743, 14.870605534, 14.8706536921, 14.8707018485, 14.8707500033, 14.8707981566, 14.8708463082, 14.8708944582, 14.8709426066, 14.8709907535, 14.8710388987, 14.8710870423, 14.8711351842, 14.8711833246, 14.8712314634, 14.8712796006, 14.8713277361, 14.8713758701, 14.8714240024, 14.8714721332, 14.8715202623, 14.8715683899, 14.8716165158, 14.8716646401, 14.8717127628, 14.8717608839, 14.8718090035, 14.8718571214, 14.8719052377, 14.8719533524, 14.8720014654, 14.8720495769, 14.8720976868, 14.8721457951, 14.8721939018, 14.8722420068, 14.8722901103, 14.8723382121, 14.8723863124, 14.8724344111, 14.8724825081, 14.8725306036, 14.8725786974, 14.8726267896, 14.8726748803, 14.8727229693, 14.8727710567, 14.8728191426, 14.8728672268, 14.8729153094, 14.8729633904, 14.8730114698, 14.8730595477, 14.8731076239, 14.8731556985, 14.8732037715, 14.8732518429, 14.8732999127, 14.8733479809, 14.8733960475, 14.8734441125, 14.8734921759, 14.8735402377, 14.8735882979, 14.8736363565, 14.8736844135, 14.8737324689, 14.8737805227, 14.8738285749, 14.8738766255, 14.8739246745, 14.8739727219, 14.8740207677, 14.8740688119, 14.8741168544, 14.8741648954, 14.8742129348, 14.8742609726, 14.8743090088, 14.8743570434, 14.8744050764, 14.8744531078, 14.8745011376, 14.8745491658, 14.8745971924, 14.8746452174, 14.8746932408, 14.8747412626, 14.8747892828, 14.8748373014, 14.8748853184, 14.8749333338, 14.8749813477, 14.8750293599, 14.8750773705, 14.8751253795, 14.8751733869, 14.8752213928, 14.875269397, 14.8753173996, 14.8753654006, 14.8754134001, 14.8754613979, 14.8755093942, 14.8755573888, 14.8756053819, 14.8756533733, 14.8757013632, 14.8757493514, 14.8757973381, 14.8758453232, 14.8758933066, 14.8759412885, 14.8759892688, 14.8760372475, 14.8760852245, 14.8761332, 14.8761811739, 14.8762291462, 14.876277117, 14.8763250861, 14.8763730536, 14.8764210195, 14.8764689838, 14.8765169466, 14.8765649077, 14.8766128672, 14.8766608252, 14.8767087816, 14.8767567363, 14.8768046895, 14.8768526411, 14.876900591, 14.8769485394, 14.8769964862, 14.8770444314, 14.877092375, 14.877140317, 14.8771882575, 14.8772361963, 14.8772841335, 14.8773320692, 14.8773800032, 14.8774279357, 14.8774758665, 14.8775237958, 14.8775717235, 14.8776196496, 14.8776675741, 14.877715497, 14.8777634183, 14.877811338, 14.8778592561, 14.8779071727, 14.8779550876, 14.878003001, 14.8780509127, 14.8780988229, 14.8781467315, 14.8781946385, 14.8782425439, 14.8782904477, 14.8783383499, 14.8783862505, 14.8784341496, 14.878482047, 14.8785299429, 14.8785778371, 14.8786257298, 14.8786736209, 14.8787215104, 14.8787693983, 14.8788172846, 14.8788651693, 14.8789130525, 14.878960934, 14.879008814, 14.8790566924, 14.8791045691, 14.8791524443, 14.8792003179, 14.87924819, 14.8792960604, 14.8793439292, 14.8793917965, 14.8794396621, 14.8794875262, 14.8795353887, 14.8795832496, 14.8796311089, 14.8796789666, 14.8797268228, 14.8797746773, 14.8798225303, 14.8798703817, 14.8799182315, 14.8799660797, 14.8800139263, 14.8800617713, 14.8801096147, 14.8801574566, 14.8802052969, 14.8802531356, 14.8803009726, 14.8803488082, 14.8803966421, 14.8804444744, 14.8804923052, 14.8805401343, 14.8805879619, 14.8806357879, 14.8806836123, 14.8807314351, 14.8807792564, 14.880827076, 14.8808748941, 14.8809227106, 14.8809705255, 14.8810183388, 14.8810661505, 14.8811139607, 14.8811617692, 14.8812095762, 14.8812573816, 14.8813051854, 14.8813529876, 14.8814007883, 14.8814485873, 14.8814963848, 14.8815441807, 14.881591975, 14.8816397677, 14.8816875589, 14.8817353484, 14.8817831364, 14.8818309228, 14.8818787076, 14.8819264908, 14.8819742725, 14.8820220525, 14.882069831, 14.8821176079, 14.8821653832, 14.8822131569, 14.8822609291, 14.8823086997, 14.8823564687, 14.8824042361, 14.8824520019, 14.8824997661, 14.8825475288, 14.8825952899, 14.8826430494, 14.8826908073, 14.8827385636, 14.8827863184, 14.8828340715, 14.8828818231, 14.8829295732, 14.8829773216, 14.8830250684, 14.8830728137, 14.8831205574, 14.8831682995, 14.8832160401, 14.883263779, 14.8833115164, 14.8833592522, 14.8834069864, 14.883454719, 14.8835024501, 14.8835501796, 14.8835979075, 14.8836456338, 14.8836933585, 14.8837410817, 14.8837888033, 14.8838365233, 14.8838842417, 14.8839319585, 14.8839796738, 14.8840273875, 14.8840750996, 14.8841228102, 14.8841705191, 14.8842182265, 14.8842659323, 14.8843136365, 14.8843613392, 14.8844090402, 14.8844567397, 14.8845044376, 14.884552134, 14.8845998288, 14.8846475219, 14.8846952135, 14.8847429036, 14.884790592, 14.8848382789, 14.8848859642, 14.8849336479, 14.8849813301, 14.8850290107, 14.8850766897, 14.8851243671, 14.885172043, 14.8852197172, 14.8852673899, 14.885315061, 14.8853627306, 14.8854103986, 14.885458065, 14.8855057298, 14.885553393, 14.8856010547, 14.8856487148, 14.8856963733, 14.8857440303, 14.8857916857, 14.8858393395, 14.8858869917, 14.8859346424, 14.8859822914, 14.8860299389, 14.8860775849, 14.8861252292, 14.886172872, 14.8862205132, 14.8862681529, 14.8863157909, 14.8863634274, 14.8864110624, 14.8864586957, 14.8865063275, 14.8865539577, 14.8866015863, 14.8866492134, 14.8866968389, 14.8867444628, 14.8867920851, 14.8868397059, 14.8868873251, 14.8869349427, 14.8869825588, 14.8870301732, 14.8870777862, 14.8871253975, 14.8871730073, 14.8872206155, 14.8872682221, 14.8873158272, 14.8873634306, 14.8874110326, 14.8874586329, 14.8875062317, 14.8875538289, 14.8876014245, 14.8876490186, 14.8876966111, 14.887744202, 14.8877917913, 14.8878393791, 14.8878869653, 14.88793455, 14.8879821331, 14.8880297146, 14.8880772945, 14.8881248729, 14.8881724497, 14.8882200249, 14.8882675986, 14.8883151706, 14.8883627412, 14.8884103101, 14.8884578775, 14.8885054433, 14.8885530076, 14.8886005703, 14.8886481314, 14.8886956909, 14.8887432489, 14.8887908053, 14.8888383602, 14.8888859134, 14.8889334651, 14.8889810153, 14.8890285638, 14.8890761109, 14.8891236563, 14.8891712002, 14.8892187425, 14.8892662832, 14.8893138224, 14.88936136, 14.889408896, 14.8894564305, 14.8895039634, 14.8895514948, 14.8895990245, 14.8896465527, 14.8896940794, 14.8897416045, 14.889789128, 14.8898366499, 14.8898841703, 14.8899316891, 14.8899792064, 14.8900267221, 14.8900742362, 14.8901217487, 14.8901692597, 14.8902167692, 14.890264277, 14.8903117833, 14.8903592881, 14.8904067912, 14.8904542928, 14.8905017929, 14.8905492914, 14.8905967883, 14.8906442836, 14.8906917774, 14.8907392696, 14.8907867603, 14.8908342494, 14.8908817369, 14.8909292229, 14.8909767073, 14.8910241901, 14.8910716714, 14.8911191512, 14.8911666293, 14.8912141059, 14.8912615809, 14.8913090544, 14.8913565263, 14.8914039967, 14.8914514654, 14.8914989327, 14.8915463983, 14.8915938624, 14.891641325, 14.8916887859, 14.8917362454, 14.8917837032, 14.8918311595, 14.8918786142, 14.8919260674, 14.891973519, 14.8920209691, 14.8920684176, 14.8921158645, 14.8921633099, 14.8922107537, 14.8922581959, 14.8923056366, 14.8923530757, 14.8924005133, 14.8924479493, 14.8924953838, 14.8925428166, 14.892590248, 14.8926376777, 14.892685106, 14.8927325326, 14.8927799577, 14.8928273812, 14.8928748032, 14.8929222236, 14.8929696425, 14.8930170598, 14.8930644755, 14.8931118897, 14.8931593023, 14.8932067134, 14.8932541229, 14.8933015309, 14.8933489373, 14.8933963421, 14.8934437454, 14.8934911471, 14.8935385472, 14.8935859459, 14.8936333429, 14.8936807384, 14.8937281323, 14.8937755247, 14.8938229155, 14.8938703048, 14.8939176925, 14.8939650786, 14.8940124632, 14.8940598463, 14.8941072278, 14.8941546077, 14.8942019861, 14.8942493629, 14.8942967381, 14.8943441118, 14.894391484, 14.8944388546, 14.8944862236, 14.8945335911, 14.894580957, 14.8946283214, 14.8946756842, 14.8947230455, 14.8947704052, 14.8948177633, 14.8948651199, 14.8949124749, 14.8949598284, 14.8950071804, 14.8950545307, 14.8951018796, 14.8951492268, 14.8951965726, 14.8952439167, 14.8952912593, 14.8953386004, 14.8953859399, 14.8954332778, 14.8954806142, 14.8955279491, 14.8955752824, 14.8956226141, 14.8956699443, 14.8957172729, 14.8957646, 14.8958119255, 14.8958592495, 14.8959065719, 14.8959538928, 14.8960012121, 14.8960485299, 14.8960958461, 14.8961431608, 14.8961904739, 14.8962377854, 14.8962850955, 14.8963324039, 14.8963797108, 14.8964270162, 14.89647432, 14.8965216222, 14.8965689229, 14.8966162221, 14.8966635197, 14.8967108157, 14.8967581102, 14.8968054032, 14.8968526946, 14.8968999844, 14.8969472727, 14.8969945595, 14.8970418447, 14.8970891283, 14.8971364104, 14.897183691, 14.89723097, 14.8972782474, 14.8973255233, 14.8973727977, 14.8974200705, 14.8974673417, 14.8975146114, 14.8975618796, 14.8976091462, 14.8976564113, 14.8977036748, 14.8977509367, 14.8977981971, 14.897845456, 14.8978927133, 14.8979399691, 14.8979872233, 14.898034476, 14.8980817271, 14.8981289767, 14.8981762247, 14.8982234712, 14.8982707162, 14.8983179595, 14.8983652014, 14.8984124417, 14.8984596804, 14.8985069176, 14.8985541533, 14.8986013874, 14.89864862, 14.898695851, 14.8987430805, 14.8987903084, 14.8988375348, 14.8988847596, 14.8989319829, 14.8989792046, 14.8990264248, 14.8990736435, 14.8991208606, 14.8991680761, 14.8992152901, 14.8992625026, 14.8993097135, 14.8993569229, 14.8994041308, 14.899451337, 14.8994985418, 14.899545745, 14.8995929467, 14.8996401468, 14.8996873453, 14.8997345424, 14.8997817378, 14.8998289318, 14.8998761242, 14.899923315, 14.8999705043, 14.9000176921, 14.9000648783, 14.900112063, 14.9001592461, 14.9002064277, 14.9002536077, 14.9003007862, 14.9003479632, 14.9003951386, 14.9004423125, 14.9004894848, 14.9005366556, 14.9005838249, 14.9006309926, 14.9006781587, 14.9007253234, 14.9007724864, 14.900819648, 14.900866808, 14.9009139664, 14.9009611233, 14.9010082787, 14.9010554326, 14.9011025848, 14.9011497356, 14.9011968848, 14.9012440325, 14.9012911786, 14.9013383232, 14.9013854662, 14.9014326077, 14.9014797477, 14.9015268861, 14.901574023, 14.9016211583, 14.9016682922, 14.9017154244, 14.9017625551, 14.9018096843, 14.901856812, 14.9019039381, 14.9019510626, 14.9019981857, 14.9020453072, 14.9020924271, 14.9021395455, 14.9021866624, 14.9022337777, 14.9022808915, 14.9023280038, 14.9023751145, 14.9024222237, 14.9024693313, 14.9025164374, 14.902563542, 14.902610645, 14.9026577465, 14.9027048464, 14.9027519449, 14.9027990417, 14.9028461371, 14.9028932309, 14.9029403231, 14.9029874139, 14.903034503, 14.9030815907, 14.9031286768, 14.9031757614, 14.9032228444, 14.9032699259, 14.9033170059, 14.9033640843, 14.9034111612, 14.9034582366, 14.9035053104, 14.9035523827, 14.9035994535, 14.9036465227, 14.9036935904, 14.9037406565, 14.9037877211, 14.9038347842, 14.9038818457, 14.9039289057, 14.9039759642, 14.9040230211, 14.9040700765, 14.9041171304, 14.9041641827, 14.9042112335, 14.9042582828, 14.9043053305, 14.9043523767, 14.9043994214, 14.9044464645, 14.9044935061, 14.9045405462, 14.9045875847, 14.9046346217, 14.9046816571, 14.904728691, 14.9047757234, 14.9048227543, 14.9048697836, 14.9049168114, 14.9049638377, 14.9050108624, 14.9050578856, 14.9051049072, 14.9051519274, 14.905198946, 14.905245963, 14.9052929786, 14.9053399926, 14.905387005, 14.905434016, 14.9054810254, 14.9055280332, 14.9055750396, 14.9056220444, 14.9056690476, 14.9057160494, 14.9057630496, 14.9058100483, 14.9058570454, 14.9059040411, 14.9059510351, 14.9059980277, 14.9060450187, 14.9060920082, 14.9061389962, 14.9061859826, 14.9062329675, 14.9062799509, 14.9063269328, 14.9063739131, 14.9064208919, 14.9064678691, 14.9065148448, 14.906561819, 14.9066087917, 14.9066557629, 14.9067027325, 14.9067497005, 14.9067966671, 14.9068436321, 14.9068905956, 14.9069375576, 14.906984518, 14.9070314769, 14.9070784343, 14.9071253901, 14.9071723445, 14.9072192973, 14.9072662485, 14.9073131983, 14.9073601465, 14.9074070932, 14.9074540383, 14.9075009819, 14.907547924, 14.9075948646, 14.9076418037, 14.9076887412, 14.9077356772, 14.9077826116, 14.9078295446, 14.907876476, 14.9079234059, 14.9079703342, 14.9080172611, 14.9080641864, 14.9081111101, 14.9081580324, 14.9082049531, 14.9082518723, 14.90829879, 14.9083457062, 14.9083926208, 14.9084395339, 14.9084864454, 14.9085333555, 14.908580264, 14.908627171, 14.9086740765, 14.9087209804, 14.9087678828, 14.9088147837, 14.9088616831, 14.908908581, 14.9089554773, 14.9090023721, 14.9090492654, 14.9090961571, 14.9091430473, 14.909189936, 14.9092368232, 14.9092837089, 14.909330593, 14.9093774756, 14.9094243567, 14.9094712363, 14.9095181143, 14.9095649908, 14.9096118658, 14.9096587393, 14.9097056112, 14.9097524816, 14.9097993505, 14.9098462179, 14.9098930838, 14.9099399481, 14.9099868109, 14.9100336722, 14.910080532, 14.9101273902, 14.9101742469, 14.9102211021, 14.9102679558, 14.910314808, 14.9103616586, 14.9104085077, 14.9104553553, 14.9105022014, 14.9105490459, 14.910595889, 14.9106427305, 14.9106895705, 14.9107364089, 14.9107832459, 14.9108300813, 14.9108769152, 14.9109237476, 14.9109705785, 14.9110174078, 14.9110642356, 14.9111110619, 14.9111578867, 14.91120471, 14.9112515317, 14.9112983519, 14.9113451707, 14.9113919878, 14.9114388035, 14.9114856177, 14.9115324303, 14.9115792414, 14.911626051, 14.9116728591, 14.9117196656, 14.9117664707, 14.9118132742, 14.9118600762, 14.9119068767, 14.9119536756, 14.9120004731, 14.912047269, 14.9120940634, 14.9121408563, 14.9121876477, 14.9122344375, 14.9122812259, 14.9123280127, 14.912374798, 14.9124215818, 14.912468364, 14.9125151448, 14.912561924, 14.9126087018, 14.912655478, 14.9127022526, 14.9127490258, 14.9127957975, 14.9128425676, 14.9128893362, 14.9129361033, 14.9129828689, 14.913029633, 14.9130763956, 14.9131231566, 14.9131699161, 14.9132166741, 14.9132634306, 14.9133101856, 14.9133569391, 14.913403691, 14.9134504415, 14.9134971904, 14.9135439378, 14.9135906837, 14.913637428, 14.9136841709, 14.9137309123, 14.9137776521, 14.9138243904, 14.9138711272, 14.9139178625, 14.9139645963, 14.9140113285, 14.9140580593, 14.9141047885, 14.9141515162, 14.9141982425, 14.9142449671, 14.9142916903, 14.914338412, 14.9143851322, 14.9144318508, 14.9144785679, 14.9145252835, 14.9145719976, 14.9146187102, 14.9146654213, 14.9147121309, 14.9147588389, 14.9148055455, 14.9148522505, 14.914898954, 14.914945656, 14.9149923565, 14.9150390555, 14.915085753, 14.915132449, 14.9151791434, 14.9152258363, 14.9152725278, 14.9153192177, 14.9153659061, 14.915412593, 14.9154592784, 14.9155059622, 14.9155526446, 14.9155993254, 14.9156460048, 14.9156926826, 14.9157393589, 14.9157860337, 14.915832707, 14.9158793788, 14.9159260491, 14.9159727179, 14.9160193851, 14.9160660509, 14.9161127151, 14.9161593779, 14.9162060391, 14.9162526988, 14.916299357, 14.9163460137, 14.9163926689, 14.9164393226, 14.9164859748, 14.9165326254, 14.9165792746, 14.9166259222, 14.9166725683, 14.916719213, 14.9167658561, 14.9168124977, 14.9168591378, 14.9169057764, 14.9169524135, 14.9169990491, 14.9170456832, 14.9170923157, 14.9171389468, 14.9171855763, 14.9172322044, 14.9172788309, 14.917325456, 14.9173720795, 14.9174187015, 14.917465322, 14.917511941, 14.9175585585, 14.9176051745, 14.917651789, 14.917698402, 14.9177450134, 14.9177916234, 14.9178382319, 14.9178848388, 14.9179314443, 14.9179780482, 14.9180246507, 14.9180712516, 14.918117851, 14.918164449, 14.9182110454, 14.9182576403, 14.9183042337, 14.9183508256, 14.918397416, 14.9184440049, 14.9184905923, 14.9185371782, 14.9185837626, 14.9186303454, 14.9186769268, 14.9187235067, 14.9187700851, 14.9188166619, 14.9188632373, 14.9189098111, 14.9189563835, 14.9190029543, 14.9190495237, 14.9190960915, 14.9191426579, 14.9191892227, 14.919235786, 14.9192823479, 14.9193289082, 14.919375467, 14.9194220243, 14.9194685802, 14.9195151345, 14.9195616873, 14.9196082386, 14.9196547884, 14.9197013367, 14.9197478835, 14.9197944288, 14.9198409726, 14.9198875149, 14.9199340557, 14.919980595, 14.9200271328, 14.9200736691, 14.9201202039, 14.9201667372, 14.920213269, 14.9202597993, 14.9203063281, 14.9203528554, 14.9203993812, 14.9204459055, 14.9204924283, 14.9205389496, 14.9205854694, 14.9206319877, 14.9206785045, 14.9207250198, 14.9207715335, 14.9208180458, 14.9208645566, 14.9209110659, 14.9209575737, 14.92100408, 14.9210505848, 14.9210970881, 14.9211435899, 14.9211900902, 14.921236589, 14.9212830863, 14.9213295821, 14.9213760764, 14.9214225692, 14.9214690605, 14.9215155503, 14.9215620387, 14.9216085255, 14.9216550108, 14.9217014946, 14.9217479769, 14.9217944577, 14.9218409371, 14.9218874149, 14.9219338912, 14.9219803661, 14.9220268394, 14.9220733112, 14.9221197816, 14.9221662504, 14.9222127178, 14.9222591836, 14.922305648, 14.9223521109, 14.9223985722, 14.9224450321, 14.9224914905, 14.9225379473, 14.9225844027, 14.9226308566, 14.922677309, 14.9227237599, 14.9227702093, 14.9228166572, 14.9228631036, 14.9229095485, 14.9229559919, 14.9230024338, 14.9230488743, 14.9230953132, 14.9231417506, 14.9231881866, 14.923234621, 14.923281054, 14.9233274854, 14.9233739154, 14.9234203439, 14.9234667708, 14.9235131963, 14.9235596203, 14.9236060428, 14.9236524638, 14.9236988833, 14.9237453013, 14.9237917178, 14.9238381329, 14.9238845464, 14.9239309584, 14.923977369, 14.924023778, 14.9240701856, 14.9241165917, 14.9241629962, 14.9242093993, 14.9242558009, 14.924302201, 14.9243485996, 14.9243949967, 14.9244413923, 14.9244877865, 14.9245341791, 14.9245805703, 14.9246269599, 14.9246733481, 14.9247197347, 14.9247661199, 14.9248125036, 14.9248588858, 14.9249052665, 14.9249516457, 14.9249980234, 14.9250443997, 14.9250907744, 14.9251371477, 14.9251835194, 14.9252298897, 14.9252762585, 14.9253226258, 14.9253689916, 14.9254153559, 14.9254617187, 14.92550808, 14.9255544399, 14.9256007982, 14.9256471551, 14.9256935105, 14.9257398643, 14.9257862167, 14.9258325676, 14.925878917, 14.925925265, 14.9259716114, 14.9260179564, 14.9260642998, 14.9261106418, 14.9261569823, 14.9262033213, 14.9262496588, 14.9262959948, 14.9263423293, 14.9263886623, 14.9264349939, 14.926481324, 14.9265276525, 14.9265739796, 14.9266203052, 14.9266666293, 14.926712952, 14.9267592731, 14.9268055928, 14.9268519109, 14.9268982276, 14.9269445428, 14.9269908565, 14.9270371687, 14.9270834795, 14.9271297887, 14.9271760965, 14.9272224027, 14.9272687075, 14.9273150108, 14.9273613126, 14.9274076129, 14.9274539118, 14.9275002091, 14.927546505, 14.9275927994, 14.9276390923, 14.9276853837, 14.9277316736, 14.9277779621, 14.927824249, 14.9278705345, 14.9279168185, 14.927963101, 14.928009382, 14.9280556616, 14.9281019396, 14.9281482162, 14.9281944912, 14.9282407648, 14.928287037, 14.9283333076, 14.9283795767, 14.9284258444, 14.9284721106, 14.9285183753, 14.9285646385, 14.9286109002, 14.9286571604, 14.9287034192, 14.9287496765, 14.9287959323, 14.9288421866, 14.9288884394, 14.9289346907, 14.9289809406, 14.929027189, 14.9290734359, 14.9291196813, 14.9291659252, 14.9292121677, 14.9292584086, 14.9293046481, 14.9293508861, 14.9293971226, 14.9294433577, 14.9294895912, 14.9295358233, 14.9295820539, 14.929628283, 14.9296745107, 14.9297207368, 14.9297669615, 14.9298131847, 14.9298594064, 14.9299056266, 14.9299518453, 14.9299980626, 14.9300442784, 14.9300904927, 14.9301367055, 14.9301829169, 14.9302291267, 14.9302753351, 14.930321542, 14.9303677474, 14.9304139514, 14.9304601538, 14.9305063548, 14.9305525543, 14.9305987524, 14.9306449489, 14.930691144, 14.9307373376, 14.9307835297, 14.9308297203, 14.9308759095, 14.9309220971, 14.9309682833, 14.931014468, 14.9310606513, 14.931106833, 14.9311530133, 14.9311991921, 14.9312453694, 14.9312915453, 14.9313377196, 14.9313838925, 14.931430064, 14.9314762339, 14.9315224023, 14.9315685693, 14.9316147348, 14.9316608989, 14.9317070614, 14.9317532225, 14.9317993821, 14.9318455402, 14.9318916968, 14.931937852, 14.9319840057, 14.9320301579, 14.9320763086, 14.9321224579, 14.9321686057, 14.932214752, 14.9322608968, 14.9323070402, 14.932353182, 14.9323993224, 14.9324454614, 14.9324915988, 14.9325377348, 14.9325838693, 14.9326300023, 14.9326761339, 14.9327222639, 14.9327683925, 14.9328145197, 14.9328606453, 14.9329067695, 14.9329528922, 14.9329990134, 14.9330451332, 14.9330912515, 14.9331373683, 14.9331834836, 14.9332295974, 14.9332757098, 14.9333218207, 14.9333679302, 14.9334140381, 14.9334601446, 14.9335062496, 14.9335523532, 14.9335984552, 14.9336445558, 14.933690655, 14.9337367526, 14.9337828488, 14.9338289435, 14.9338750367, 14.9339211285, 14.9339672187, 14.9340133076, 14.9340593949, 14.9341054808, 14.9341515652, 14.9341976481, 14.9342437295, 14.9342898095, 14.934335888, 14.9343819651, 14.9344280406, 14.9344741147, 14.9345201873, 14.9345662585, 14.9346123282, 14.9346583964, 14.9347044631, 14.9347505284, 14.9347965922, 14.9348426545, 14.9348887154, 14.9349347747, 14.9349808327, 14.9350268891, 14.9350729441, 14.9351189976, 14.9351650496, 14.9352111002, 14.9352571493, 14.9353031969, 14.935349243, 14.9353952877, 14.9354413309, 14.9354873727, 14.935533413, 14.9355794518, 14.9356254891, 14.935671525, 14.9357175594, 14.9357635923, 14.9358096238, 14.9358556537, 14.9359016823, 14.9359477093, 14.9359937349, 14.936039759, 14.9360857817, 14.9361318029, 14.9361778226, 14.9362238408, 14.9362698576, 14.9363158729, 14.9363618868, 14.9364078991, 14.93645391, 14.9364999195, 14.9365459275, 14.936591934, 14.936637939, 14.9366839426, 14.9367299447, 14.9367759453, 14.9368219445, 14.9368679422, 14.9369139384, 14.9369599332, 14.9370059265, 14.9370519184, 14.9370979087, 14.9371438976, 14.9371898851, 14.9372358711, 14.9372818556, 14.9373278386, 14.9373738202, 14.9374198003, 14.937465779, 14.9375117561, 14.9375577319, 14.9376037061, 14.9376496789, 14.9376956502, 14.9377416201, 14.9377875885, 14.9378335554, 14.9378795209, 14.9379254849, 14.9379714474, 14.9380174085, 14.9380633681, 14.9381093262, 14.9381552829, 14.9382012381, 14.9382471919, 14.9382931442, 14.938339095, 14.9383850443, 14.9384309922, 14.9384769387, 14.9385228836, 14.9385688271, 14.9386147692, 14.9386607098, 14.9387066489, 14.9387525865, 14.9387985227, 14.9388444575, 14.9388903907, 14.9389363225, 14.9389822529, 14.9390281818, 14.9390741092, 14.9391200351, 14.9391659596, 14.9392118827, 14.9392578042, 14.9393037243, 14.939349643, 14.9393955602, 14.9394414759, 14.9394873902, 14.939533303, 14.9395792143, 14.9396251242, 14.9396710326, 14.9397169396, 14.9397628451, 14.9398087491, 14.9398546517, 14.9399005528, 14.9399464525, 14.9399923507, 14.9400382474, 14.9400841427, 14.9401300365, 14.9401759288, 14.9402218197, 14.9402677092, 14.9403135971, 14.9403594837, 14.9404053687, 14.9404512523, 14.9404971345, 14.9405430151, 14.9405888944, 14.9406347721, 14.9406806484, 14.9407265233, 14.9407723967, 14.9408182686, 14.940864139, 14.9409100081, 14.9409558756, 14.9410017417, 14.9410476063, 14.9410934695, 14.9411393312, 14.9411851915, 14.9412310503, 14.9412769076, 14.9413227635, 14.941368618, 14.9414144709, 14.9414603225, 14.9415061725, 14.9415520211, 14.9415978683, 14.941643714, 14.9416895582, 14.941735401, 14.9417812423, 14.9418270821, 14.9418729205, 14.9419187575, 14.941964593, 14.942010427, 14.9420562596, 14.9421020907, 14.9421479204, 14.9421937486, 14.9422395754, 14.9422854007, 14.9423312245, 14.9423770469, 14.9424228678, 14.9424686873, 14.9425145053, 14.9425603219, 14.942606137, 14.9426519507, 14.9426977629, 14.9427435736, 14.9427893829, 14.9428351908, 14.9428809972, 14.9429268021, 14.9429726056, 14.9430184076, 14.9430642082, 14.9431100073, 14.9431558049, 14.9432016011, 14.9432473959, 14.9432931892, 14.943338981, 14.9433847714, 14.9434305604, 14.9434763479, 14.9435221339, 14.9435679185, 14.9436137016, 14.9436594833, 14.9437052635, 14.9437510423, 14.9437968196, 14.9438425955, 14.9438883699, 14.9439341428, 14.9439799143, 14.9440256844, 14.944071453, 14.9441172202, 14.9441629859, 14.9442087501, 14.9442545129, 14.9443002742, 14.9443460341, 14.9443917926, 14.9444375496, 14.9444833051, 14.9445290592, 14.9445748118, 14.944620563, 14.9446663128, 14.944712061, 14.9447578079, 14.9448035533, 14.9448492972, 14.9448950397, 14.9449407807, 14.9449865203, 14.9450322584, 14.9450779951, 14.9451237303, 14.9451694641, 14.9452151965, 14.9452609273, 14.9453066568, 14.9453523848, 14.9453981113, 14.9454438364, 14.94548956, 14.9455352822, 14.9455810029, 14.9456267222, 14.9456724401, 14.9457181565, 14.9457638714, 14.9458095849, 14.9458552969, 14.9459010075, 14.9459467167, 14.9459924244, 14.9460381307, 14.9460838355, 14.9461295388, 14.9461752407, 14.9462209412, 14.9462666402, 14.9463123378, 14.9463580339, 14.9464037286, 14.9464494218, 14.9464951136, 14.9465408039, 14.9465864928, 14.9466321802, 14.9466778662, 14.9467235507, 14.9467692338, 14.9468149155, 14.9468605957, 14.9469062745, 14.9469519518, 14.9469976276, 14.9470433021, 14.947088975, 14.9471346466, 14.9471803166, 14.9472259853, 14.9472716525, 14.9473173182, 14.9473629825, 14.9474086454, 14.9474543068, 14.9474999667, 14.9475456252, 14.9475912823, 14.947636938, 14.9476825921, 14.9477282449, 14.9477738962, 14.947819546, 14.9478651944, 14.9479108414, 14.9479564869, 14.948002131, 14.9480477736, 14.9480934148, 14.9481390545, 14.9481846928, 14.9482303297, 14.9482759651, 14.9483215991, 14.9483672316, 14.9484128627, 14.9484584923, 14.9485041205, 14.9485497472, 14.9485953726, 14.9486409964, 14.9486866188, 14.9487322398, 14.9487778594, 14.9488234775, 14.9488690941, 14.9489147093, 14.9489603231, 14.9490059354, 14.9490515463, 14.9490971557, 14.9491427637, 14.9491883703, 14.9492339754, 14.9492795791, 14.9493251813, 14.9493707821, 14.9494163815, 14.9494619794, 14.9495075758, 14.9495531709, 14.9495987644, 14.9496443566, 14.9496899473, 14.9497355366, 14.9497811244, 14.9498267108, 14.9498722957, 14.9499178792, 14.9499634613, 14.9500090419, 14.9500546211, 14.9501001988, 14.9501457751, 14.95019135, 14.9502369234, 14.9502824954, 14.9503280659, 14.950373635, 14.9504192027, 14.9504647689, 14.9505103337, 14.950555897, 14.950601459, 14.9506470194, 14.9506925785, 14.950738136, 14.9507836922, 14.9508292469, 14.9508748002, 14.950920352, 14.9509659024, 14.9510114514, 14.9510569989, 14.951102545, 14.9511480896, 14.9511936329, 14.9512391746, 14.951284715, 14.9513302539, 14.9513757913, 14.9514213273, 14.9514668619, 14.9515123951, 14.9515579268, 14.9516034571, 14.9516489859, 14.9516945133, 14.9517400393, 14.9517855638, 14.9518310869, 14.9518766085, 14.9519221288, 14.9519676475, 14.9520131649, 14.9520586808, 14.9521041953, 14.9521497083, 14.9521952199, 14.9522407301, 14.9522862388, 14.9523317461, 14.952377252, 14.9524227564, 14.9524682594, 14.9525137609, 14.9525592611, 14.9526047597, 14.952650257, 14.9526957528, 14.9527412472, 14.9527867401, 14.9528322316, 14.9528777217, 14.9529232104, 14.9529686976, 14.9530141833, 14.9530596677, 14.9531051506, 14.9531506321, 14.9531961121, 14.9532415907, 14.9532870679, 14.9533325436, 14.9533780179, 14.9534234908, 14.9534689622, 14.9535144322, 14.9535599008, 14.9536053679, 14.9536508336, 14.9536962979, 14.9537417608, 14.9537872222, 14.9538326821, 14.9538781407, 14.9539235978, 14.9539690535, 14.9540145077, 14.9540599605, 14.9541054119, 14.9541508619, 14.9541963104, 14.9542417575, 14.9542872031, 14.9543326474, 14.9543780901, 14.9544235315, 14.9544689714, 14.9545144099, 14.954559847, 14.9546052826, 14.9546507168, 14.9546961496, 14.954741581, 14.9547870109, 14.9548324394, 14.9548778664, 14.954923292, 14.9549687162, 14.955014139, 14.9550595603, 14.9551049802, 14.9551503987, 14.9551958157, 14.9552412313, 14.9552866455, 14.9553320583, 14.9553774696, 14.9554228795, 14.955468288, 14.955513695, 14.9555591006, 14.9556045048, 14.9556499075, 14.9556953088, 14.9557407087, 14.9557861072, 14.9558315042, 14.9558768998, 14.955922294, 14.9559676868, 14.9560130781, 14.956058468, 14.9561038564, 14.9561492435, 14.9561946291, 14.9562400133, 14.956285396, 14.9563307774, 14.9563761572, 14.9564215357, 14.9564669128, 14.9565122884, 14.9565576626, 14.9566030353, 14.9566484067, 14.9566937766, 14.9567391451, 14.9567845121, 14.9568298777, 14.9568752419, 14.9569206047, 14.9569659661, 14.957011326, 14.9570566845, 14.9571020416, 14.9571473972, 14.9571927514, 14.9572381042, 14.9572834556, 14.9573288055, 14.957374154, 14.9574195011, 14.9574648468, 14.957510191, 14.9575555339, 14.9576008753, 14.9576462152, 14.9576915538, 14.9577368909, 14.9577822266, 14.9578275608, 14.9578728937, 14.9579182251, 14.9579635551, 14.9580088837, 14.9580542108, 14.9580995365, 14.9581448608, 14.9581901837, 14.9582355051, 14.9582808252, 14.9583261438, 14.9583714609, 14.9584167767, 14.958462091, 14.9585074039, 14.9585527154, 14.9585980255, 14.9586433341, 14.9586886413, 14.9587339471, 14.9587792515, 14.9588245545, 14.958869856, 14.9589151561, 14.9589604548, 14.959005752, 14.9590510479, 14.9590963423, 14.9591416353, 14.9591869268, 14.959232217, 14.9592775057, 14.959322793, 14.9593680789, 14.9594133634, 14.9594586464, 14.959503928, 14.9595492082, 14.959594487, 14.9596397644, 14.9596850403, 14.9597303148, 14.9597755879, 14.9598208596, 14.9598661298, 14.9599113987, 14.9599566661, 14.9600019321, 14.9600471966, 14.9600924598, 14.9601377215, 14.9601829818, 14.9602282407, 14.9602734982, 14.9603187542, 14.9603640089, 14.9604092621, 14.9604545139, 14.9604997643, 14.9605450132, 14.9605902607, 14.9606355069, 14.9606807516, 14.9607259948, 14.9607712367, 14.9608164771, 14.9608617162, 14.9609069538, 14.96095219, 14.9609974247, 14.9610426581, 14.96108789, 14.9611331205, 14.9611783496, 14.9612235773, 14.9612688035, 14.9613140284, 14.9613592518, 14.9614044738, 14.9614496944, 14.9614949136, 14.9615401313, 14.9615853477, 14.9616305626, 14.9616757761, 14.9617209882, 14.9617661988, 14.9618114081, 14.9618566159, 14.9619018223, 14.9619470273, 14.9619922309, 14.9620374331, 14.9620826339, 14.9621278332, 14.9621730311, 14.9622182276, 14.9622634227, 14.9623086164, 14.9623538086, 14.9623989995, 14.9624441889, 14.9624893769, 14.9625345635, 14.9625797487, 14.9626249325, 14.9626701148, 14.9627152957, 14.9627604753, 14.9628056534, 14.9628508301, 14.9628960053, 14.9629411792, 14.9629863516, 14.9630315227, 14.9630766923, 14.9631218605, 14.9631670273, 14.9632121927, 14.9632573566, 14.9633025192, 14.9633476803, 14.96339284, 14.9634379983, 14.9634831552, 14.9635283107, 14.9635734648, 14.9636186174, 14.9636637687, 14.9637089185, 14.9637540669, 14.9637992139, 14.9638443595, 14.9638895037, 14.9639346465, 14.9639797878, 14.9640249278, 14.9640700663, 14.9641152034, 14.9641603391, 14.9642054734, 14.9642506063, 14.9642957377, 14.9643408678, 14.9643859964, 14.9644311237, 14.9644762495, 14.9645213739, 14.9645664969, 14.9646116185, 14.9646567387, 14.9647018574, 14.9647469748, 14.9647920907, 14.9648372052, 14.9648823184, 14.9649274301, 14.9649725404, 14.9650176493, 14.9650627567, 14.9651078628, 14.9651529675, 14.9651980707, 14.9652431726, 14.965288273, 14.965333372, 14.9653784696, 14.9654235658, 14.9654686606, 14.965513754, 14.9655588459, 14.9656039365, 14.9656490257, 14.9656941134, 14.9657391997, 14.9657842847, 14.9658293682, 14.9658744503, 14.965919531, 14.9659646103, 14.9660096882, 14.9660547646, 14.9660998397, 14.9661449133, 14.9661899856, 14.9662350564, 14.9662801259, 14.9663251939, 14.9663702605, 14.9664153257, 14.9664603895, 14.9665054519, 14.9665505129, 14.9665955725, 14.9666406306, 14.9666856874, 14.9667307428, 14.9667757967, 14.9668208493, 14.9668659004, 14.9669109501, 14.9669559984, 14.9670010454, 14.9670460909, 14.967091135, 14.9671361777, 14.967181219, 14.9672262588, 14.9672712973, 14.9673163344, 14.9673613701, 14.9674064043, 14.9674514372, 14.9674964686, 14.9675414987, 14.9675865273, 14.9676315545, 14.9676765804, 14.9677216048, 14.9677666278, 14.9678116494, 14.9678566696, 14.9679016884, 14.9679467058, 14.9679917218, 14.9680367364, 14.9680817496, 14.9681267614, 14.9681717717, 14.9682167807, 14.9682617883, 14.9683067944, 14.9683517992, 14.9683968025, 14.9684418045, 14.968486805, 14.9685318042, 14.9685768019, 14.9686217983, 14.9686667932, 14.9687117867, 14.9687567789, 14.9688017696, 14.9688467589, 14.9688917468, 14.9689367333, 14.9689817184, 14.9690267022, 14.9690716845, 14.9691166654, 14.9691616449, 14.969206623, 14.9692515997, 14.969296575, 14.9693415489, 14.9693865213, 14.9694314924, 14.9694764621, 14.9695214304, 14.9695663973, 14.9696113628, 14.9696563269, 14.9697012895, 14.9697462508, 14.9697912107, 14.9698361692, 14.9698811262, 14.9699260819, 14.9699710362, 14.9700159891, 14.9700609405, 14.9701058906, 14.9701508393, 14.9701957866, 14.9702407324, 14.9702856769, 14.97033062, 14.9703755616, 14.9704205019, 14.9704654408, 14.9705103783, 14.9705553143, 14.970600249, 14.9706451823, 14.9706901141, 14.9707350446, 14.9707799737, 14.9708249014, 14.9708698276, 14.9709147525, 14.970959676, 14.9710045981, 14.9710495188, 14.971094438, 14.9711393559, 14.9711842724, 14.9712291875, 14.9712741012, 14.9713190135, 14.9713639244, 14.9714088339, 14.971453742, 14.9714986487, 14.971543554, 14.9715884579, 14.9716333604, 14.9716782615, 14.9717231612, 14.9717680595, 14.9718129564, 14.9718578519, 14.971902746, 14.9719476388, 14.9719925301, 14.97203742, 14.9720823086, 14.9721271957, 14.9721720814, 14.9722169658, 14.9722618487, 14.9723067303, 14.9723516104, 14.9723964892, 14.9724413666, 14.9724862425, 14.9725311171, 14.9725759903, 14.9726208621, 14.9726657324, 14.9727106014, 14.972755469, 14.9728003352, 14.9728452, 14.9728900634, 14.9729349254, 14.9729797861, 14.9730246453, 14.9730695031, 14.9731143596, 14.9731592146, 14.9732040682, 14.9732489205, 14.9732937713, 14.9733386208, 14.9733834689, 14.9734283155, 14.9734731608, 14.9735180047, 14.9735628472, 14.9736076883, 14.973652528, 14.9736973663, 14.9737422032, 14.9737870387, 14.9738318729, 14.9738767056, 14.973921537, 14.9739663669, 14.9740111955, 14.9740560226, 14.9741008484, 14.9741456728, 14.9741904958, 14.9742353174, 14.9742801376, 14.9743249564, 14.9743697738, 14.9744145898, 14.9744594044, 14.9745042177, 14.9745490295, 14.97459384, 14.974638649, 14.9746834567, 14.974728263, 14.9747730679, 14.9748178714, 14.9748626735, 14.9749074742, 14.9749522735, 14.9749970715, 14.975041868, 14.9750866632, 14.9751314569, 14.9751762493, 14.9752210403, 14.9752658299, 14.9753106181, 14.9753554049, 14.9754001903, 14.9754449743, 14.9754897569, 14.9755345382, 14.975579318, 14.9756240965, 14.9756688736, 14.9757136493, 14.9757584236, 14.9758031965, 14.975847968, 14.9758927381, 14.9759375069, 14.9759822742, 14.9760270402, 14.9760718048, 14.9761165679, 14.9761613297, 14.9762060901, 14.9762508492, 14.9762956068, 14.976340363, 14.9763851179, 14.9764298714, 14.9764746234, 14.9765193741, 14.9765641234, 14.9766088713, 14.9766536179, 14.976698363, 14.9767431067, 14.9767878491, 14.9768325901, 14.9768773297, 14.9769220679, 14.9769668047, 14.9770115401, 14.9770562741, 14.9771010068, 14.977145738, 14.9771904679, 14.9772351964, 14.9772799235, 14.9773246492, 14.9773693735, 14.9774140965, 14.977458818, 14.9775035382, 14.977548257, 14.9775929744, 14.9776376904, 14.977682405, 14.9777271183, 14.9777718301, 14.9778165406, 14.9778612497, 14.9779059574, 14.9779506637, 14.9779953686, 14.9780400722, 14.9780847743, 14.9781294751, 14.9781741745, 14.9782188725, 14.9782635691, 14.9783082643, 14.9783529582, 14.9783976506, 14.9784423417, 14.9784870314, 14.9785317197, 14.9785764066, 14.9786210922, 14.9786657763, 14.9787104591, 14.9787551405, 14.9787998205, 14.9788444991, 14.9788891764, 14.9789338522, 14.9789785267, 14.9790231998, 14.9790678715, 14.9791125418, 14.9791572107, 14.9792018783, 14.9792465445, 14.9792912093, 14.9793358727, 14.9793805347, 14.9794251953, 14.9794698546, 14.9795145125, 14.979559169, 14.9796038241, 14.9796484778, 14.9796931302, 14.9797377811, 14.9797824307, 14.9798270789, 14.9798717257, 14.9799163712, 14.9799610152, 14.9800056579, 14.9800502992, 14.9800949391, 14.9801395776, 14.9801842148, 14.9802288506, 14.9802734849, 14.980318118, 14.9803627496, 14.9804073798, 14.9804520087, 14.9804966362, 14.9805412623, 14.980585887, 14.9806305104, 14.9806751323, 14.9807197529, 14.9807643721, 14.9808089899, 14.9808536064, 14.9808982214, 14.9809428351, 14.9809874474, 14.9810320584, 14.9810766679, 14.9811212761, 14.9811658829, 14.9812104883, 14.9812550923, 14.981299695, 14.9813442962, 14.9813888961, 14.9814334946, 14.9814780918, 14.9815226875, 14.9815672819, 14.9816118749, 14.9816564665, 14.9817010568, 14.9817456456, 14.9817902331, 14.9818348192, 14.981879404, 14.9819239873, 14.9819685693, 14.9820131499, 14.9820577291, 14.982102307, 14.9821468834, 14.9821914585, 14.9822360322, 14.9822806046, 14.9823251755, 14.9823697451, 14.9824143133, 14.9824588801, 14.9825034456, 14.9825480097, 14.9825925723, 14.9826371337, 14.9826816936, 14.9827262522, 14.9827708094, 14.9828153652, 14.9828599196, 14.9829044727, 14.9829490244, 14.9829935747, 14.9830381236, 14.9830826712, 14.9831272174, 14.9831717622, 14.9832163056, 14.9832608477, 14.9833053884, 14.9833499277, 14.9833944656, 14.9834390022, 14.9834835374, 14.9835280712, 14.9835726036, 14.9836171347, 14.9836616643, 14.9837061927, 14.9837507196, 14.9837952452, 14.9838397693, 14.9838842922, 14.9839288136, 14.9839733337, 14.9840178524, 14.9840623697, 14.9841068856, 14.9841514002, 14.9841959134, 14.9842404252, 14.9842849357, 14.9843294448, 14.9843739525, 14.9844184588, 14.9844629638, 14.9845074673, 14.9845519696, 14.9845964704, 14.9846409699, 14.984685468, 14.9847299647, 14.98477446, 14.984818954, 14.9848634466, 14.9849079379, 14.9849524277, 14.9849969162, 14.9850414033, 14.9850858891, 14.9851303735, 14.9851748565, 14.9852193381, 14.9852638184, 14.9853082973, 14.9853527748, 14.9853972509, 14.9854417257, 14.9854861991, 14.9855306711, 14.9855751418, 14.9856196111, 14.985664079, 14.9857085456, 14.9857530108, 14.9857974746, 14.985841937, 14.9858863981, 14.9859308578, 14.9859753161, 14.9860197731, 14.9860642287, 14.9861086829, 14.9861531357, 14.9861975872, 14.9862420373, 14.9862864861, 14.9863309334, 14.9863753794, 14.9864198241, 14.9864642673, 14.9865087092, 14.9865531498, 14.9865975889, 14.9866420267, 14.9866864631, 14.9867308982, 14.9867753319, 14.9868197642, 14.9868641951, 14.9869086247, 14.9869530529, 14.9869974797, 14.9870419052, 14.9870863293, 14.9871307521, 14.9871751734, 14.9872195934, 14.9872640121, 14.9873084293, 14.9873528452, 14.9873972598, 14.9874416729, 14.9874860847, 14.9875304952, 14.9875749042, 14.9876193119, 14.9876637183, 14.9877081232, 14.9877525268, 14.987796929, 14.9878413299, 14.9878857294, 14.9879301275, 14.9879745243, 14.9880189197, 14.9880633137, 14.9881077064, 14.9881520977, 14.9881964876, 14.9882408762, 14.9882852634, 14.9883296492, 14.9883740337, 14.9884184168, 14.9884627985, 14.9885071789, 14.9885515579, 14.9885959356, 14.9886403119, 14.9886846868, 14.9887290603, 14.9887734325, 14.9888178033, 14.9888621728, 14.9889065409, 14.9889509076, 14.988995273, 14.989039637, 14.9890839996, 14.9891283609, 14.9891727208, 14.9892170793, 14.9892614365, 14.9893057923, 14.9893501468, 14.9893944998, 14.9894388516, 14.9894832019, 14.9895275509, 14.9895718986, 14.9896162448, 14.9896605897, 14.9897049333, 14.9897492755, 14.9897936163, 14.9898379557, 14.9898822938, 14.9899266306, 14.9899709659, 14.9900152999, 14.9900596326, 14.9901039639, 14.9901482938, 14.9901926223, 14.9902369495, 14.9902812754, 14.9903255998, 14.9903699229, 14.9904142447, 14.9904585651, 14.9905028841, 14.9905472018, 14.9905915181, 14.990635833, 14.9906801466, 14.9907244588, 14.9907687697, 14.9908130792, 14.9908573873, 14.9909016941, 14.9909459995, 14.9909903035, 14.9910346062, 14.9910789076, 14.9911232075, 14.9911675061, 14.9912118034, 14.9912560993, 14.9913003938, 14.991344687, 14.9913889788, 14.9914332693, 14.9914775583, 14.9915218461, 14.9915661324, 14.9916104175, 14.9916547011, 14.9916989834, 14.9917432643, 14.9917875439, 14.9918318221, 14.991876099, 14.9919203745, 14.9919646486, 14.9920089214, 14.9920531929, 14.9920974629, 14.9921417316, 14.992185999, 14.992230265, 14.9922745296, 14.9923187929, 14.9923630548, 14.9924073153, 14.9924515745, 14.9924958324, 14.9925400889, 14.992584344, 14.9926285978, 14.9926728502, 14.9927171012, 14.9927613509, 14.9928055993, 14.9928498463, 14.9928940919, 14.9929383362, 14.9929825791, 14.9930268206, 14.9930710608, 14.9931152997, 14.9931595372, 14.9932037733, 14.9932480081, 14.9932922415, 14.9933364736, 14.9933807043, 14.9934249336, 14.9934691616, 14.9935133882, 14.9935576135, 14.9936018374, 14.99364606, 14.9936902812, 14.9937345011, 14.9937787196, 14.9938229367, 14.9938671525, 14.993911367, 14.9939555801, 14.9939997918, 14.9940440022, 14.9940882112, 14.9941324189, 14.9941766252, 14.9942208301, 14.9942650337, 14.994309236, 14.9943534369, 14.9943976364, 14.9944418346, 14.9944860314, 14.9945302269, 14.994574421, 14.9946186138, 14.9946628052, 14.9947069953, 14.994751184, 14.9947953713, 14.9948395573, 14.994883742, 14.9949279253, 14.9949721072, 14.9950162878, 14.995060467, 14.9951046449, 14.9951488214, 14.9951929966, 14.9952371704, 14.9952813429, 14.995325514, 14.9953696838, 14.9954138522, 14.9954580193, 14.995502185, 14.9955463494, 14.9955905124, 14.995634674, 14.9956788343, 14.9957229933, 14.9957671509, 14.9958113071, 14.995855462, 14.9958996156, 14.9959437678, 14.9959879186, 14.9960320681, 14.9960762162, 14.996120363, 14.9961645085, 14.9962086526, 14.9962527953, 14.9962969367, 14.9963410767, 14.9963852154, 14.9964293527, 14.9964734887, 14.9965176234, 14.9965617567, 14.9966058886, 14.9966500192, 14.9966941484, 14.9967382763, 14.9967824028, 14.996826528, 14.9968706519, 14.9969147743, 14.9969588955, 14.9970030153, 14.9970471337, 14.9970912508, 14.9971353665, 14.9971794809, 14.997223594, 14.9972677057, 14.997311816, 14.997355925, 14.9974000327, 14.997444139, 14.9974882439, 14.9975323475, 14.9975764498, 14.9976205507, 14.9976646502, 14.9977087485, 14.9977528453, 14.9977969408, 14.997841035, 14.9978851278, 14.9979292193, 14.9979733094, 14.9980173982, 14.9980614856, 14.9981055717, 14.9981496565, 14.9981937398, 14.9982378219, 14.9982819026, 14.9983259819, 14.9983700599, 14.9984141366, 14.9984582119, 14.9985022859, 14.9985463585, 14.9985904297, 14.9986344997, 14.9986785682, 14.9987226355, 14.9987667014, 14.9988107659, 14.9988548291, 14.9988988909, 14.9989429514, 14.9989870106, 14.9990310684, 14.9990751249, 14.99911918, 14.9991632338, 14.9992072862, 14.9992513373, 14.999295387, 14.9993394354, 14.9993834825, 14.9994275282, 14.9994715725, 14.9995156155, 14.9995596572, 14.9996036975, 14.9996477365, 14.9996917742, 14.9997358105, 14.9997798454, 14.999823879, 14.9998679113, 14.9999119422, 14.9999559718, 15.0, 15.0000440269, 15.0000880524, 15.0001320766, 15.0001760995, 15.000220121, 15.0002641412, 15.00030816, 15.0003521775, 15.0003961936, 15.0004402084, 15.0004842219, 15.000528234, 15.0005722448, 15.0006162542, 15.0006602623, 15.000704269, 15.0007482744, 15.0007922785, 15.0008362812, 15.0008802826, 15.0009242826, 15.0009682813, 15.0010122786, 15.0010562746, 15.0011002693, 15.0011442626, 15.0011882546, 15.0012322452, 15.0012762345, 15.0013202225, 15.0013642091, 15.0014081944, 15.0014521783, 15.0014961609, 15.0015401422, 15.0015841221, 15.0016281007, 15.0016720779, 15.0017160538, 15.0017600283, 15.0018040015, 15.0018479734, 15.0018919439, 15.0019359131, 15.001979881, 15.0020238475, 15.0020678127, 15.0021117765, 15.002155739, 15.0021997001, 15.0022436599, 15.0022876184, 15.0023315755, 15.0023755313, 15.0024194858, 15.0024634389, 15.0025073907, 15.0025513411, 15.0025952902, 15.002639238, 15.0026831844, 15.0027271295, 15.0027710732, 15.0028150156, 15.0028589567, 15.0029028964, 15.0029468348, 15.0029907718, 15.0030347076, 15.0030786419, 15.003122575, 15.0031665067, 15.003210437, 15.0032543661, 15.0032982937, 15.0033422201, 15.0033861451, 15.0034300688, 15.0034739911, 15.0035179121, 15.0035618318, 15.0036057501, 15.0036496671, 15.0036935827, 15.0037374971, 15.00378141, 15.0038253217, 15.003869232, 15.0039131409, 15.0039570486, 15.0040009549, 15.0040448598, 15.0040887635, 15.0041326657, 15.0041765667, 15.0042204663, 15.0042643646, 15.0043082615, 15.0043521572, 15.0043960514, 15.0044399444, 15.004483836, 15.0045277262, 15.0045716152, 15.0046155028, 15.004659389, 15.004703274, 15.0047471575, 15.0047910398, 15.0048349207, 15.0048788003, 15.0049226786, 15.0049665555, 15.0050104311, 15.0050543053, 15.0050981782, 15.0051420498, 15.0051859201, 15.005229789, 15.0052736566, 15.0053175228, 15.0053613877, 15.0054052513, 15.0054491135, 15.0054929745, 15.005536834, 15.0055806923, 15.0056245492, 15.0056684048, 15.005712259, 15.0057561119, 15.0057999635, 15.0058438138, 15.0058876627, 15.0059315103, 15.0059753565, 15.0060192014, 15.006063045, 15.0061068873, 15.0061507282, 15.0061945678, 15.006238406, 15.0062822429, 15.0063260785, 15.0063699128, 15.0064137457, 15.0064575773, 15.0065014076, 15.0065452365, 15.0065890641, 15.0066328904, 15.0066767153, 15.0067205389, 15.0067643612, 15.0068081821, 15.0068520017, 15.00689582, 15.006939637, 15.0069834526, 15.0070272669, 15.0070710799, 15.0071148915, 15.0071587018, 15.0072025107, 15.0072463184, 15.0072901247, 15.0073339297, 15.0073777333, 15.0074215356, 15.0074653366, 15.0075091363, 15.0075529346, 15.0075967316, 15.0076405273, 15.0076843216, 15.0077281146, 15.0077719063, 15.0078156967, 15.0078594857, 15.0079032734, 15.0079470597, 15.0079908448, 15.0080346285, 15.0080784109, 15.0081221919, 15.0081659716, 15.00820975, 15.0082535271, 15.0082973028, 15.0083410772, 15.0083848503, 15.0084286221, 15.0084723925, 15.0085161616, 15.0085599294, 15.0086036958, 15.0086474609, 15.0086912247, 15.0087349872, 15.0087787483, 15.0088225081, 15.0088662666, 15.0089100237, 15.0089537795, 15.008997534, 15.0090412872, 15.009085039, 15.0091287895, 15.0091725387, 15.0092162866, 15.0092600331, 15.0093037783, 15.0093475222, 15.0093912648, 15.009435006, 15.0094787459, 15.0095224845, 15.0095662217, 15.0096099576, 15.0096536922, 15.0096974255, 15.0097411575, 15.0097848881, 15.0098286174, 15.0098723453, 15.009916072, 15.0099597973, 15.0100035213, 15.010047244, 15.0100909653, 15.0101346853, 15.010178404, 15.0102221214, 15.0102658374, 15.0103095522, 15.0103532655, 15.0103969776, 15.0104406884, 15.0104843978, 15.0105281059, 15.0105718127, 15.0106155181, 15.0106592222, 15.010702925, 15.0107466265, 15.0107903267, 15.0108340255, 15.010877723, 15.0109214192, 15.0109651141, 15.0110088076, 15.0110524998, 15.0110961907, 15.0111398803, 15.0111835685, 15.0112272554, 15.011270941, 15.0113146253, 15.0113583082, 15.0114019899, 15.0114456702, 15.0114893492, 15.0115330268, 15.0115767032, 15.0116203782, 15.0116640519, 15.0117077243, 15.0117513953, 15.011795065, 15.0118387335, 15.0118824005, 15.0119260663, 15.0119697308, 15.0120133939, 15.0120570557, 15.0121007162, 15.0121443753, 15.0121880331, 15.0122316897, 15.0122753449, 15.0123189987, 15.0123626513, 15.0124063025, 15.0124499524, 15.012493601, 15.0125372483, 15.0125808942, 15.0126245389, 15.0126681822, 15.0127118242, 15.0127554648, 15.0127991042, 15.0128427422, 15.0128863789, 15.0129300143, 15.0129736484, 15.0130172811, 15.0130609126, 15.0131045427, 15.0131481715, 15.0131917989, 15.0132354251, 15.0132790499, 15.0133226734, 15.0133662956, 15.0134099165, 15.0134535361, 15.0134971543, 15.0135407712, 15.0135843868, 15.0136280011, 15.0136716141, 15.0137152257, 15.013758836, 15.013802445, 15.0138460527, 15.0138896591, 15.0139332642, 15.0139768679, 15.0140204703, 15.0140640714, 15.0141076712, 15.0141512697, 15.0141948668, 15.0142384626, 15.0142820572, 15.0143256504, 15.0143692422, 15.0144128328, 15.014456422, 15.01450001, 15.0145435966, 15.0145871819, 15.0146307659, 15.0146743485, 15.0147179299, 15.0147615099, 15.0148050886, 15.014848666, 15.0148922421, 15.0149358168, 15.0149793903, 15.0150229624, 15.0150665332, 15.0151101027, 15.0151536709, 15.0151972378, 15.0152408033, 15.0152843676, 15.0153279305, 15.0153714921, 15.0154150524, 15.0154586114, 15.015502169, 15.0155457254, 15.0155892804, 15.0156328341, 15.0156763865, 15.0157199376, 15.0157634874, 15.0158070358, 15.015850583, 15.0158941288, 15.0159376733, 15.0159812165, 15.0160247584, 15.016068299, 15.0161118382, 15.0161553762, 15.0161989128, 15.0162424481, 15.0162859821, 15.0163295148, 15.0163730462, 15.0164165762, 15.016460105, 15.0165036324, 15.0165471585, 15.0165906833, 15.0166342068, 15.016677729, 15.0167212499, 15.0167647694, 15.0168082877, 15.0168518046, 15.0168953202, 15.0169388345, 15.0169823475, 15.0170258592, 15.0170693696, 15.0171128786, 15.0171563864, 15.0171998928, 15.0172433979, 15.0172869017, 15.0173304042, 15.0173739054, 15.0174174053, 15.0174609039, 15.0175044011, 15.017547897, 15.0175913917, 15.017634885, 15.017678377, 15.0177218677, 15.0177653571, 15.0178088451, 15.0178523319, 15.0178958174, 15.0179393015, 15.0179827843, 15.0180262658, 15.0180697461, 15.0181132249, 15.0181567025, 15.0182001788, 15.0182436538, 15.0182871274, 15.0183305998, 15.0183740708, 15.0184175405, 15.018461009, 15.0185044761, 15.0185479419, 15.0185914064, 15.0186348695, 15.0186783314, 15.018721792, 15.0187652512, 15.0188087092, 15.0188521658, 15.0188956211, 15.0189390751, 15.0189825278, 15.0190259792, 15.0190694293, 15.0191128781, 15.0191563256, 15.0191997717, 15.0192432166, 15.0192866602, 15.0193301024, 15.0193735433, 15.0194169829, 15.0194604213, 15.0195038583, 15.019547294, 15.0195907284, 15.0196341614, 15.0196775932, 15.0197210237, 15.0197644528, 15.0198078807, 15.0198513073, 15.0198947325, 15.0199381564, 15.0199815791, 15.0200250004, 15.0200684204, 15.0201118391, 15.0201552565, 15.0201986726, 15.0202420874, 15.0202855008, 15.020328913, 15.0203723239, 15.0204157334, 15.0204591417, 15.0205025486, 15.0205459543, 15.0205893586, 15.0206327617, 15.0206761634, 15.0207195638, 15.0207629629, 15.0208063607, 15.0208497572, 15.0208931524, 15.0209365463, 15.0209799389, 15.0210233302, 15.0210667202, 15.0211101088, 15.0211534962, 15.0211968823, 15.021240267, 15.0212836505, 15.0213270326, 15.0213704135, 15.021413793, 15.0214571712, 15.0215005482, 15.0215439238, 15.0215872981, 15.0216306711, 15.0216740429, 15.0217174133, 15.0217607824, 15.0218041502, 15.0218475167, 15.0218908819, 15.0219342458, 15.0219776084, 15.0220209696, 15.0220643296, 15.0221076883, 15.0221510457, 15.0221944018, 15.0222377565, 15.02228111, 15.0223244622, 15.022367813, 15.0224111626, 15.0224545108, 15.0224978578, 15.0225412035, 15.0225845478, 15.0226278909, 15.0226712326, 15.022714573, 15.0227579122, 15.02280125, 15.0228445866, 15.0228879218, 15.0229312557, 15.0229745884, 15.0230179197, 15.0230612497, 15.0231045785, 15.0231479059, 15.023191232, 15.0232345568, 15.0232778804, 15.0233212026, 15.0233645235, 15.0234078431, 15.0234511615, 15.0234944785, 15.0235377942, 15.0235811086, 15.0236244217, 15.0236677336, 15.0237110441, 15.0237543533, 15.0237976612, 15.0238409678, 15.0238842732, 15.0239275772, 15.0239708799, 15.0240141813, 15.0240574814, 15.0241007803, 15.0241440778, 15.024187374, 15.0242306689, 15.0242739625, 15.0243172549, 15.0243605459, 15.0244038356, 15.024447124, 15.0244904112, 15.024533697, 15.0245769815, 15.0246202648, 15.0246635467, 15.0247068273, 15.0247501067, 15.0247933847, 15.0248366614, 15.0248799369, 15.024923211, 15.0249664839, 15.0250097554, 15.0250530257, 15.0250962946, 15.0251395623, 15.0251828286, 15.0252260937, 15.0252693575, 15.0253126199, 15.0253558811, 15.025399141, 15.0254423995, 15.0254856568, 15.0255289128, 15.0255721675, 15.0256154209, 15.0256586729, 15.0257019237, 15.0257451732, 15.0257884214, 15.0258316683, 15.0258749139, 15.0259181582, 15.0259614013, 15.026004643, 15.0260478834, 15.0260911225, 15.0261343604, 15.0261775969, 15.0262208321, 15.0262640661, 15.0263072987, 15.0263505301, 15.0263937601, 15.0264369889, 15.0264802163, 15.0265234425, 15.0265666674, 15.026609891, 15.0266531133, 15.0266963342, 15.0267395539, 15.0267827723, 15.0268259895, 15.0268692053, 15.0269124198, 15.026955633, 15.0269988449, 15.0270420556, 15.0270852649, 15.027128473, 15.0271716797, 15.0272148852, 15.0272580893, 15.0273012922, 15.0273444938, 15.0273876941, 15.027430893, 15.0274740907, 15.0275172871, 15.0275604822, 15.0276036761, 15.0276468686, 15.0276900598, 15.0277332498, 15.0277764384, 15.0278196257, 15.0278628118, 15.0279059966, 15.02794918, 15.0279923622, 15.0280355431, 15.0280787227, 15.028121901, 15.028165078, 15.0282082537, 15.0282514282, 15.0282946013, 15.0283377731, 15.0283809437, 15.0284241129, 15.0284672809, 15.0285104476, 15.028553613, 15.0285967771, 15.0286399399, 15.0286831014, 15.0287262616, 15.0287694205, 15.0288125782, 15.0288557345, 15.0288988896, 15.0289420433, 15.0289851958, 15.029028347, 15.0290714969, 15.0291146455, 15.0291577928, 15.0292009388, 15.0292440835, 15.029287227, 15.0293303691, 15.02937351, 15.0294166495, 15.0294597878, 15.0295029248, 15.0295460605, 15.0295891949, 15.029632328, 15.0296754599, 15.0297185904, 15.0297617197, 15.0298048476, 15.0298479743, 15.0298910997, 15.0299342238, 15.0299773466, 15.0300204681, 15.0300635883, 15.0301067073, 15.0301498249, 15.0301929413, 15.0302360564, 15.0302791701, 15.0303222826, 15.0303653939, 15.0304085038, 15.0304516124, 15.0304947197, 15.0305378258, 15.0305809306, 15.0306240341, 15.0306671362, 15.0307102372, 15.0307533368, 15.0307964351, 15.0308395321, 15.0308826279, 15.0309257224, 15.0309688155, 15.0310119074, 15.031054998, 15.0310980874, 15.0311411754, 15.0311842621, 15.0312273476, 15.0312704318, 15.0313135147, 15.0313565963, 15.0313996766, 15.0314427556, 15.0314858333, 15.0315289098, 15.031571985, 15.0316150588, 15.0316581314, 15.0317012027, 15.0317442728, 15.0317873415, 15.031830409, 15.0318734751, 15.03191654, 15.0319596036, 15.0320026659, 15.0320457269, 15.0320887867, 15.0321318451, 15.0321749023, 15.0322179582, 15.0322610128, 15.0323040661, 15.0323471181, 15.0323901689, 15.0324332183, 15.0324762665, 15.0325193134, 15.032562359, 15.0326054033, 15.0326484464, 15.0326914881, 15.0327345286, 15.0327775678, 15.0328206057, 15.0328636423, 15.0329066776, 15.0329497117, 15.0329927444, 15.0330357759, 15.0330788061, 15.033121835, 15.0331648627, 15.033207889, 15.0332509141, 15.0332939379, 15.0333369604, 15.0333799816, 15.0334230015, 15.0334660202, 15.0335090376, 15.0335520536, 15.0335950685, 15.033638082, 15.0336810942, 15.0337241052, 15.0337671148, 15.0338101232, 15.0338531304, 15.0338961362, 15.0339391407, 15.033982144, 15.034025146, 15.0340681467, 15.0341111461, 15.0341541442, 15.0341971411, 15.0342401367, 15.034283131, 15.034326124, 15.0343691157, 15.0344121062, 15.0344550953, 15.0344980832, 15.0345410698, 15.0345840552, 15.0346270392, 15.034670022, 15.0347130034, 15.0347559837, 15.0347989626, 15.0348419402, 15.0348849166, 15.0349278917, 15.0349708655, 15.035013838, 15.0350568092, 15.0350997792, 15.0351427479, 15.0351857153, 15.0352286814, 15.0352716463, 15.0353146098, 15.0353575721, 15.0354005331, 15.0354434928, 15.0354864513, 15.0355294085, 15.0355723644, 15.035615319, 15.0356582723, 15.0357012243, 15.0357441751, 15.0357871246, 15.0358300728, 15.0358730198, 15.0359159654, 15.0359589098, 15.0360018529, 15.0360447947, 15.0360877353, 15.0361306746, 15.0361736126, 15.0362165493, 15.0362594847, 15.0363024189, 15.0363453517, 15.0363882833, 15.0364312137, 15.0364741427, 15.0365170705, 15.036559997, 15.0366029222, 15.0366458461, 15.0366887688, 15.0367316902, 15.0367746103, 15.0368175291, 15.0368604467, 15.036903363, 15.036946278, 15.0369891917, 15.0370321041, 15.0370750153, 15.0371179252, 15.0371608338, 15.0372037412, 15.0372466472, 15.037289552, 15.0373324555, 15.0373753578, 15.0374182587, 15.0374611584, 15.0375040568, 15.037546954, 15.0375898498, 15.0376327444, 15.0376756377, 15.0377185298, 15.0377614205, 15.03780431, 15.0378471982, 15.0378900851, 15.0379329708, 15.0379758552, 15.0380187383, 15.0380616201, 15.0381045007, 15.03814738, 15.038190258, 15.0382331347, 15.0382760102, 15.0383188844, 15.0383617573, 15.0384046289, 15.0384474993, 15.0384903684, 15.0385332362, 15.0385761028, 15.038618968, 15.038661832, 15.0387046948, 15.0387475562, 15.0387904164, 15.0388332753, 15.0388761329, 15.0389189893, 15.0389618444, 15.0390046982, 15.0390475507, 15.039090402, 15.039133252, 15.0391761007, 15.0392189482, 15.0392617943, 15.0393046392, 15.0393474829, 15.0393903252, 15.0394331663, 15.0394760061, 15.0395188447, 15.039561682, 15.039604518, 15.0396473527, 15.0396901861, 15.0397330183, 15.0397758492, 15.0398186789, 15.0398615072, 15.0399043343, 15.0399471602, 15.0399899847, 15.040032808, 15.04007563, 15.0401184508, 15.0401612702, 15.0402040884, 15.0402469054, 15.040289721, 15.0403325354, 15.0403753485, 15.0404181604, 15.040460971, 15.0405037803, 15.0405465883, 15.0405893951, 15.0406322006, 15.0406750048, 15.0407178077, 15.0407606094, 15.0408034098, 15.040846209, 15.0408890069, 15.0409318035, 15.0409745988, 15.0410173929, 15.0410601857, 15.0411029772, 15.0411457675, 15.0411885565, 15.0412313442, 15.0412741306, 15.0413169158, 15.0413596997, 15.0414024824, 15.0414452638, 15.0414880439, 15.0415308227, 15.0415736003, 15.0416163766, 15.0416591516, 15.0417019254, 15.0417446979, 15.0417874691, 15.0418302391, 15.0418730078, 15.0419157752, 15.0419585414, 15.0420013063, 15.0420440699, 15.0420868323, 15.0421295934, 15.0421723532, 15.0422151117, 15.042257869, 15.042300625, 15.0423433798, 15.0423861333, 15.0424288855, 15.0424716365, 15.0425143861, 15.0425571346, 15.0425998817, 15.0426426276, 15.0426853722, 15.0427281156, 15.0427708577, 15.0428135985, 15.042856338, 15.0428990763, 15.0429418133, 15.0429845491, 15.0430272836, 15.0430700168, 15.0431127488, 15.0431554795, 15.0431982089, 15.0432409371, 15.043283664, 15.0433263896, 15.043369114, 15.0434118371, 15.0434545589, 15.0434972795, 15.0435399988, 15.0435827168, 15.0436254336, 15.0436681491, 15.0437108633, 15.0437535763, 15.043796288, 15.0438389985, 15.0438817077, 15.0439244156, 15.0439671223, 15.0440098277, 15.0440525318, 15.0440952347, 15.0441379363, 15.0441806366, 15.0442233357, 15.0442660335, 15.0443087301, 15.0443514253, 15.0443941194, 15.0444368121, 15.0444795036, 15.0445221938, 15.0445648828, 15.0446075705, 15.044650257, 15.0446929421, 15.0447356261, 15.0447783087, 15.0448209901, 15.0448636702, 15.0449063491, 15.0449490267, 15.044991703, 15.0450343781, 15.0450770519, 15.0451197245, 15.0451623958, 15.0452050658, 15.0452477346, 15.0452904021, 15.0453330683, 15.0453757333, 15.045418397, 15.0454610595, 15.0455037207, 15.0455463806, 15.0455890393, 15.0456316967, 15.0456743529, 15.0457170078, 15.0457596614, 15.0458023138, 15.0458449649, 15.0458876147, 15.0459302633, 15.0459729106, 15.0460155567, 15.0460582015, 15.046100845, 15.0461434873, 15.0461861283, 15.0462287681, 15.0462714066, 15.0463140438, 15.0463566798, 15.0463993145, 15.046441948, 15.0464845802, 15.0465272112, 15.0465698408, 15.0466124693, 15.0466550964, 15.0466977223, 15.046740347, 15.0467829704, 15.0468255925, 15.0468682133, 15.046910833, 15.0469534513, 15.0469960684, 15.0470386842, 15.0470812988, 15.0471239121, 15.0471665242, 15.047209135, 15.0472517445, 15.0472943528, 15.0473369598, 15.0473795656, 15.0474221701, 15.0474647733, 15.0475073753, 15.047549976, 15.0475925755, 15.0476351737, 15.0476777707, 15.0477203664, 15.0477629608, 15.047805554, 15.0478481459, 15.0478907366, 15.047933326, 15.0479759142, 15.0480185011, 15.0480610867, 15.0481036711, 15.0481462542, 15.0481888361, 15.0482314167, 15.0482739961, 15.0483165742, 15.048359151, 15.0484017266, 15.0484443009, 15.048486874, 15.0485294458, 15.0485720164, 15.0486145857, 15.0486571537, 15.0486997205, 15.0487422861, 15.0487848503, 15.0488274134, 15.0488699751, 15.0489125356, 15.0489550949, 15.0489976529, 15.0490402097, 15.0490827652, 15.0491253194, 15.0491678724, 15.0492104241, 15.0492529746, 15.0492955238, 15.0493380718, 15.0493806185, 15.0494231639, 15.0494657081, 15.0495082511, 15.0495507927, 15.0495933332, 15.0496358724, 15.0496784103, 15.049720947, 15.0497634824, 15.0498060165, 15.0498485495, 15.0498910811, 15.0499336115, 15.0499761407, 15.0500186686, 15.0500611952, 15.0501037206, 15.0501462447, 15.0501887676, 15.0502312892, 15.0502738096, 15.0503163287, 15.0503588466, 15.0504013632, 15.0504438786, 15.0504863927, 15.0505289055, 15.0505714171, 15.0506139275, 15.0506564366, 15.0506989444, 15.050741451, 15.0507839564, 15.0508264605, 15.0508689633, 15.0509114649, 15.0509539652, 15.0509964643, 15.0510389621, 15.0510814587, 15.051123954, 15.0511664481, 15.0512089409, 15.0512514325, 15.0512939228, 15.0513364119, 15.0513788997, 15.0514213863, 15.0514638716, 15.0515063556, 15.0515488384, 15.05159132, 15.0516338003, 15.0516762794, 15.0517187572, 15.0517612337, 15.051803709, 15.0518461831, 15.0518886559, 15.0519311275, 15.0519735978, 15.0520160668, 15.0520585346, 15.0521010012, 15.0521434665, 15.0521859305, 15.0522283933, 15.0522708549, 15.0523133152, 15.0523557743, 15.0523982321, 15.0524406886, 15.0524831439, 15.052525598, 15.0525680508, 15.0526105024, 15.0526529527, 15.0526954017, 15.0527378495, 15.0527802961, 15.0528227414, 15.0528651855, 15.0529076283, 15.0529500699, 15.0529925102, 15.0530349493, 15.0530773871, 15.0531198237, 15.053162259, 15.0532046931, 15.0532471259, 15.0532895575, 15.0533319878, 15.0533744169, 15.0534168448, 15.0534592713, 15.0535016967, 15.0535441208, 15.0535865436, 15.0536289652, 15.0536713856, 15.0537138047, 15.0537562226, 15.0537986392, 15.0538410545, 15.0538834687, 15.0539258815, 15.0539682932, 15.0540107035, 15.0540531127, 15.0540955206, 15.0541379272, 15.0541803326, 15.0542227367, 15.0542651396, 15.0543075413, 15.0543499417, 15.0543923408, 15.0544347388, 15.0544771354, 15.0545195309, 15.054561925, 15.054604318, 15.0546467096, 15.0546891001, 15.0547314893, 15.0547738772, 15.0548162639, 15.0548586494, 15.0549010336, 15.0549434166, 15.0549857983, 15.0550281788, 15.055070558, 15.055112936, 15.0551553127, 15.0551976882, 15.0552400625, 15.0552824355, 15.0553248073, 15.0553671778, 15.0554095471, 15.0554519151, 15.0554942819, 15.0555366474, 15.0555790117, 15.0556213748, 15.0556637366, 15.0557060972, 15.0557484565, 15.0557908146, 15.0558331714, 15.055875527, 15.0559178813, 15.0559602345, 15.0560025863, 15.0560449369, 15.0560872863, 15.0561296344, 15.0561719813, 15.056214327, 15.0562566714, 15.0562990146, 15.0563413565, 15.0563836971, 15.0564260366, 15.0564683748, 15.0565107117, 15.0565530474, 15.0565953819, 15.0566377151, 15.0566800471, 15.0567223778, 15.0567647073, 15.0568070356, 15.0568493626, 15.0568916884, 15.0569340129, 15.0569763362, 15.0570186582, 15.057060979, 15.0571032986, 15.0571456169, 15.057187934, 15.0572302498, 15.0572725644, 15.0573148778, 15.0573571899, 15.0573995008, 15.0574418104, 15.0574841188, 15.057526426, 15.0575687319, 15.0576110365, 15.05765334, 15.0576956422, 15.0577379431, 15.0577802428, 15.0578225413, 15.0578648385, 15.0579071345, 15.0579494292, 15.0579917228, 15.058034015, 15.0580763061, 15.0581185958, 15.0581608844, 15.0582031717, 15.0582454578, 15.0582877426, 15.0583300262, 15.0583723086, 15.0584145897, 15.0584568695, 15.0584991482, 15.0585414256, 15.0585837017, 15.0586259767, 15.0586682503, 15.0587105228, 15.058752794, 15.058795064, 15.0588373327, 15.0588796002, 15.0589218664, 15.0589641314, 15.0590063952, 15.0590486577, 15.059090919, 15.0591331791, 15.0591754379, 15.0592176955, 15.0592599518, 15.059302207, 15.0593444608, 15.0593867135, 15.0594289649, 15.059471215, 15.0595134639, 15.0595557116, 15.0595979581, 15.0596402033, 15.0596824472, 15.05972469, 15.0597669315, 15.0598091717, 15.0598514108, 15.0598936486, 15.0599358851, 15.0599781204, 15.0600203545, 15.0600625874, 15.060104819, 15.0601470493, 15.0601892785, 15.0602315064, 15.060273733, 15.0603159585, 15.0603581826, 15.0604004056, 15.0604426273, 15.0604848478, 15.060527067, 15.0605692851, 15.0606115018, 15.0606537174, 15.0606959317, 15.0607381448, 15.0607803566, 15.0608225672, 15.0608647766, 15.0609069847, 15.0609491916, 15.0609913973, 15.0610336017, 15.0610758049, 15.0611180068, 15.0611602076, 15.061202407, 15.0612446053, 15.0612868023, 15.0613289981, 15.0613711927, 15.061413386, 15.0614555781, 15.0614977689, 15.0615399585, 15.0615821469, 15.0616243341, 15.06166652, 15.0617087047, 15.0617508881, 15.0617930703, 15.0618352513, 15.0618774311, 15.0619196096, 15.0619617869, 15.0620039629, 15.0620461377, 15.0620883113, 15.0621304837, 15.0621726548, 15.0622148247, 15.0622569933, 15.0622991607, 15.0623413269, 15.0623834919, 15.0624256556, 15.0624678181, 15.0625099793, 15.0625521394, 15.0625942982, 15.0626364557, 15.0626786121, 15.0627207672, 15.062762921, 15.0628050737, 15.0628472251, 15.0628893752, 15.0629315242, 15.0629736719, 15.0630158184, 15.0630579636, 15.0631001076, 15.0631422504, 15.063184392, 15.0632265323, 15.0632686714, 15.0633108093, 15.0633529459, 15.0633950813, 15.0634372155, 15.0634793484, 15.0635214801, 15.0635636106, 15.0636057398, 15.0636478679, 15.0636899946, 15.0637321202, 15.0637742445, 15.0638163676, 15.0638584895, 15.0639006101, 15.0639427295, 15.0639848477, 15.0640269647, 15.0640690804, 15.0641111949, 15.0641533081, 15.0641954202, 15.064237531, 15.0642796405, 15.0643217489, 15.064363856, 15.0644059619, 15.0644480665, 15.06449017, 15.0645322722, 15.0645743731, 15.0646164729, 15.0646585714, 15.0647006687, 15.0647427648, 15.0647848596, 15.0648269532, 15.0648690456, 15.0649111367, 15.0649532266, 15.0649953153, 15.0650374028, 15.065079489, 15.065121574, 15.0651636578, 15.0652057403, 15.0652478217, 15.0652899018, 15.0653319806, 15.0653740583, 15.0654161347, 15.0654582099, 15.0655002838, 15.0655423566, 15.0655844281, 15.0656264983, 15.0656685674, 15.0657106352, 15.0657527018, 15.0657947672, 15.0658368313, 15.0658788943, 15.0659209559, 15.0659630164, 15.0660050757, 15.0660471337, 15.0660891905, 15.066131246, 15.0661733004, 15.0662153535, 15.0662574054, 15.066299456, 15.0663415054, 15.0663835537, 15.0664256006, 15.0664676464, 15.0665096909, 15.0665517342, 15.0665937763, 15.0666358172, 15.0666778568, 15.0667198952, 15.0667619324, 15.0668039683, 15.0668460031, 15.0668880366, 15.0669300689, 15.0669720999, 15.0670141298, 15.0670561584, 15.0670981857, 15.0671402119, 15.0671822368, 15.0672242606, 15.067266283, 15.0673083043, 15.0673503243, 15.0673923432, 15.0674343608, 15.0674763771, 15.0675183923, 15.0675604062, 15.0676024189, 15.0676444304, 15.0676864406, 15.0677284496, 15.0677704574, 15.067812464, 15.0678544694, 15.0678964735, 15.0679384764, 15.0679804781, 15.0680224786, 15.0680644778, 15.0681064759, 15.0681484727, 15.0681904682, 15.0682324626, 15.0682744557, 15.0683164476, 15.0683584383, 15.0684004278, 15.068442416, 15.068484403, 15.0685263888, 15.0685683734, 15.0686103568, 15.0686523389, 15.0686943198, 15.0687362995, 15.068778278, 15.0688202552, 15.0688622313, 15.0689042061, 15.0689461796, 15.068988152, 15.0690301232, 15.0690720931, 15.0691140618, 15.0691560293, 15.0691979955, 15.0692399605, 15.0692819244, 15.069323887, 15.0693658483, 15.0694078085, 15.0694497674, 15.0694917251, 15.0695336816, 15.0695756369, 15.069617591, 15.0696595438, 15.0697014954, 15.0697434458, 15.069785395, 15.0698273429, 15.0698692897, 15.0699112352, 15.0699531795, 15.0699951226, 15.0700370644, 15.0700790051, 15.0701209445, 15.0701628827, 15.0702048197, 15.0702467554, 15.07028869, 15.0703306233, 15.0703725554, 15.0704144863, 15.0704564159, 15.0704983444, 15.0705402716, 15.0705821976, 15.0706241224, 15.070666046, 15.0707079684, 15.0707498895, 15.0707918094, 15.0708337281, 15.0708756456, 15.0709175619, 15.0709594769, 15.0710013908, 15.0710433034, 15.0710852148, 15.0711271249, 15.0711690339, 15.0712109417, 15.0712528482, 15.0712947535, 15.0713366576, 15.0713785605, 15.0714204621, 15.0714623626, 15.0715042618, 15.0715461598, 15.0715880566, 15.0716299522, 15.0716718465, 15.0717137397, 15.0717556316, 15.0717975223, 15.0718394118, 15.0718813001, 15.0719231871, 15.071965073, 15.0720069576, 15.072048841, 15.0720907232, 15.0721326042, 15.0721744839, 15.0722163625, 15.0722582398, 15.0723001159, 15.0723419908, 15.0723838645, 15.072425737, 15.0724676082, 15.0725094783, 15.0725513471, 15.0725932147, 15.0726350811, 15.0726769463, 15.0727188103, 15.072760673, 15.0728025345, 15.0728443949, 15.072886254, 15.0729281119, 15.0729699685, 15.073011824, 15.0730536783, 15.0730955313, 15.0731373831, 15.0731792337, 15.0732210831, 15.0732629313, 15.0733047783, 15.073346624, 15.0733884685, 15.0734303119, 15.073472154, 15.0735139949, 15.0735558346, 15.073597673, 15.0736395103, 15.0736813463, 15.0737231812, 15.0737650148, 15.0738068472, 15.0738486784, 15.0738905083, 15.0739323371, 15.0739741647, 15.074015991, 15.0740578161, 15.07409964, 15.0741414628, 15.0741832842, 15.0742251045, 15.0742669236, 15.0743087414, 15.0743505581, 15.0743923735, 15.0744341877, 15.0744760007, 15.0745178125, 15.0745596231, 15.0746014325, 15.0746432406, 15.0746850476, 15.0747268533, 15.0747686578, 15.0748104612, 15.0748522633, 15.0748940642, 15.0749358638, 15.0749776623, 15.0750194596, 15.0750612556, 15.0751030504, 15.0751448441, 15.0751866365, 15.0752284277, 15.0752702177, 15.0753120065, 15.075353794, 15.0753955804, 15.0754373655, 15.0754791495, 15.0755209322, 15.0755627137, 15.0756044941, 15.0756462732, 15.075688051, 15.0757298277, 15.0757716032, 15.0758133775, 15.0758551505, 15.0758969224, 15.075938693, 15.0759804624, 15.0760222306, 15.0760639976, 15.0761057634, 15.076147528, 15.0761892914, 15.0762310536, 15.0762728145, 15.0763145743, 15.0763563328, 15.0763980902, 15.0764398463, 15.0764816012, 15.0765233549, 15.0765651074, 15.0766068587, 15.0766486088, 15.0766903577, 15.0767321053, 15.0767738518, 15.0768155971, 15.0768573411, 15.0768990839, 15.0769408256, 15.076982566, 15.0770243052, 15.0770660432, 15.07710778, 15.0771495156, 15.07719125, 15.0772329831, 15.0772747151, 15.0773164459, 15.0773581754, 15.0773999038, 15.0774416309, 15.0774833569, 15.0775250816, 15.0775668051, 15.0776085274, 15.0776502485, 15.0776919684, 15.0777336871, 15.0777754046, 15.0778171209, 15.077858836, 15.0779005498, 15.0779422625, 15.077983974, 15.0780256842, 15.0780673933, 15.0781091011, 15.0781508077, 15.0781925132, 15.0782342174, 15.0782759204, 15.0783176222, 15.0783593228, 15.0784010222, 15.0784427204, 15.0784844174, 15.0785261132, 15.0785678078, 15.0786095012, 15.0786511933, 15.0786928843, 15.0787345741, 15.0787762626, 15.07881795, 15.0788596361, 15.0789013211, 15.0789430048, 15.0789846873, 15.0790263687, 15.0790680488, 15.0791097277, 15.0791514054, 15.0791930819, 15.0792347572, 15.0792764314, 15.0793181043, 15.079359776, 15.0794014464, 15.0794431157, 15.0794847838, 15.0795264507, 15.0795681164, 15.0796097809, 15.0796514441, 15.0796931062, 15.0797347671, 15.0797764267, 15.0798180852, 15.0798597425, 15.0799013985, 15.0799430534, 15.079984707, 15.0800263595, 15.0800680107, 15.0801096608, 15.0801513096, 15.0801929573, 15.0802346037, 15.0802762489, 15.080317893, 15.0803595358, 15.0804011774, 15.0804428178, 15.0804844571, 15.0805260951, 15.0805677319, 15.0806093675, 15.0806510019, 15.0806926352, 15.0807342672, 15.080775898, 15.0808175276, 15.080859156, 15.0809007832, 15.0809424092, 15.080984034, 15.0810256577, 15.0810672801, 15.0811089013, 15.0811505213, 15.0811921401, 15.0812337577, 15.0812753741, 15.0813169893, 15.0813586033, 15.0814002161, 15.0814418277, 15.0814834381, 15.0815250473, 15.0815666553, 15.0816082621, 15.0816498677, 15.0816914721, 15.0817330753, 15.0817746773, 15.0818162781, 15.0818578777, 15.0818994761, 15.0819410733, 15.0819826693, 15.0820242641, 15.0820658577, 15.0821074501, 15.0821490414, 15.0821906314, 15.0822322202, 15.0822738078, 15.0823153942, 15.0823569794, 15.0823985634, 15.0824401462, 15.0824817279, 15.0825233083, 15.0825648875, 15.0826064655, 15.0826480424, 15.082689618, 15.0827311924, 15.0827727656, 15.0828143377, 15.0828559085, 15.0828974781, 15.0829390466, 15.0829806138, 15.0830221799, 15.0830637447, 15.0831053084, 15.0831468708, 15.0831884321, 15.0832299921, 15.083271551, 15.0833131087, 15.0833546651, 15.0833962204, 15.0834377745, 15.0834793273, 15.083520879, 15.0835624295, 15.0836039788, 15.0836455269, 15.0836870738, 15.0837286195, 15.083770164, 15.0838117073, 15.0838532494, 15.0838947903, 15.08393633, 15.0839778685, 15.0840194058, 15.084060942, 15.0841024769, 15.0841440106, 15.0841855432, 15.0842270745, 15.0842686046, 15.0843101336, 15.0843516614, 15.0843931879, 15.0844347133, 15.0844762375, 15.0845177604, 15.0845592822, 15.0846008028, 15.0846423222, 15.0846838404, 15.0847253574, 15.0847668732, 15.0848083878, 15.0848499012, 15.0848914134, 15.0849329245, 15.0849744343, 15.0850159429, 15.0850574504, 15.0850989566, 15.0851404617, 15.0851819656, 15.0852234682, 15.0852649697, 15.08530647, 15.0853479691, 15.085389467, 15.0854309637, 15.0854724592, 15.0855139535, 15.0855554466, 15.0855969385, 15.0856384293, 15.0856799188, 15.0857214072, 15.0857628943, 15.0858043803, 15.085845865, 15.0858873486, 15.085928831, 15.0859703122, 15.0860117922, 15.086053271, 15.0860947486, 15.086136225, 15.0861777003, 15.0862191743, 15.0862606471, 15.0863021188, 15.0863435892, 15.0863850585, 15.0864265266, 15.0864679935, 15.0865094592, 15.0865509237, 15.086592387, 15.0866338491, 15.08667531, 15.0867167697, 15.0867582283, 15.0867996856, 15.0868411418, 15.0868825967, 15.0869240505, 15.0869655031, 15.0870069545, 15.0870484047, 15.0870898537, 15.0871313015, 15.0871727482, 15.0872141936, 15.0872556379, 15.0872970809, 15.0873385228, 15.0873799635, 15.087421403, 15.0874628413, 15.0875042784, 15.0875457143, 15.087587149, 15.0876285825, 15.0876700149, 15.087711446, 15.087752876, 15.0877943048, 15.0878357324, 15.0878771588, 15.087918584, 15.087960008, 15.0880014308, 15.0880428525, 15.0880842729, 15.0881256922, 15.0881671103, 15.0882085271, 15.0882499428, 15.0882913573, 15.0883327707, 15.0883741828, 15.0884155937, 15.0884570035, 15.088498412, 15.0885398194, 15.0885812256, 15.0886226306, 15.0886640344, 15.088705437, 15.0887468385, 15.0887882387, 15.0888296378, 15.0888710356, 15.0889124323, 15.0889538278, 15.0889952221, 15.0890366152, 15.0890780072, 15.0891193979, 15.0891607875, 15.0892021758, 15.089243563, 15.089284949, 15.0893263338, 15.0893677174, 15.0894090999, 15.0894504811, 15.0894918612, 15.08953324, 15.0895746177, 15.0896159942, 15.0896573695, 15.0896987437, 15.0897401166, 15.0897814884, 15.0898228589, 15.0898642283, 15.0899055965, 15.0899469635, 15.0899883293, 15.090029694, 15.0900710574, 15.0901124197, 15.0901537807, 15.0901951406, 15.0902364993, 15.0902778569, 15.0903192132, 15.0903605683, 15.0904019223, 15.0904432751, 15.0904846267, 15.0905259771, 15.0905673263, 15.0906086743, 15.0906500212, 15.0906913669, 15.0907327113, 15.0907740546, 15.0908153968, 15.0908567377, 15.0908980774, 15.090939416, 15.0909807534, 15.0910220895, 15.0910634246, 15.0911047584, 15.091146091, 15.0911874225, 15.0912287527, 15.0912700818, 15.0913114097, 15.0913527364, 15.091394062, 15.0914353863, 15.0914767095, 15.0915180315, 15.0915593523, 15.0916006719, 15.0916419903, 15.0916833076, 15.0917246236, 15.0917659385, 15.0918072522, 15.0918485647, 15.0918898761, 15.0919311862, 15.0919724952, 15.092013803, 15.0920551096, 15.092096415, 15.0921377192, 15.0921790223, 15.0922203242, 15.0922616248, 15.0923029244, 15.0923442227, 15.0923855198, 15.0924268158, 15.0924681106, 15.0925094042, 15.0925506966, 15.0925919878, 15.0926332779, 15.0926745667, 15.0927158544, 15.0927571409, 15.0927984262, 15.0928397104, 15.0928809934, 15.0929222751, 15.0929635557, 15.0930048352, 15.0930461134, 15.0930873904, 15.0931286663, 15.093169941, 15.0932112145, 15.0932524869, 15.093293758, 15.093335028, 15.0933762968, 15.0934175644, 15.0934588308, 15.0935000961, 15.0935413601, 15.093582623, 15.0936238847, 15.0936651453, 15.0937064046, 15.0937476628, 15.0937889198, 15.0938301756, 15.0938714302, 15.0939126837, 15.0939539359, 15.093995187, 15.0940364369, 15.0940776857, 15.0941189332, 15.0941601796, 15.0942014248, 15.0942426688, 15.0942839116, 15.0943251533, 15.0943663938, 15.0944076331, 15.0944488712, 15.0944901081, 15.0945313439, 15.0945725785, 15.0946138119, 15.0946550441, 15.0946962752, 15.094737505, 15.0947787337, 15.0948199613, 15.0948611876, 15.0949024128, 15.0949436367, 15.0949848595, 15.0950260812, 15.0950673016, 15.0951085209, 15.095149739, 15.0951909559, 15.0952321716, 15.0952733862, 15.0953145996, 15.0953558118, 15.0953970228, 15.0954382326, 15.0954794413, 15.0955206488, 15.0955618551, 15.0956030603, 15.0956442642, 15.095685467, 15.0957266686, 15.0957678691, 15.0958090683, 15.0958502664, 15.0958914633, 15.0959326591, 15.0959738536, 15.096015047, 15.0960562392, 15.0960974302, 15.0961386201, 15.0961798087, 15.0962209962, 15.0962621825, 15.0963033677, 15.0963445517, 15.0963857345, 15.0964269161, 15.0964680965, 15.0965092758, 15.0965504539, 15.0965916308, 15.0966328065, 15.0966739811, 15.0967151545, 15.0967563267, 15.0967974977, 15.0968386676, 15.0968798363, 15.0969210038, 15.0969621702, 15.0970033353, 15.0970444993, 15.0970856621, 15.0971268238, 15.0971679843, 15.0972091436, 15.0972503017, 15.0972914586, 15.0973326144, 15.097373769, 15.0974149224, 15.0974560747, 15.0974972257, 15.0975383756, 15.0975795244, 15.0976206719, 15.0976618183, 15.0977029635, 15.0977441076, 15.0977852504, 15.0978263921, 15.0978675326, 15.097908672, 15.0979498101, 15.0979909471, 15.098032083, 15.0980732176, 15.0981143511, 15.0981554834, 15.0981966145, 15.0982377445, 15.0982788733, 15.0983200009, 15.0983611273, 15.0984022526, 15.0984433767, 15.0984844996, 15.0985256214, 15.098566742, 15.0986078614, 15.0986489796, 15.0986900967, 15.0987312126, 15.0987723273, 15.0988134408, 15.0988545532, 15.0988956644, 15.0989367745, 15.0989778833, 15.099018991, 15.0990600975, 15.0991012029, 15.0991423071, 15.0991834101, 15.0992245119, 15.0992656126, 15.0993067121, 15.0993478104, 15.0993889076, 15.0994300035, 15.0994710984, 15.099512192, 15.0995532845, 15.0995943758, 15.0996354659, 15.0996765549, 15.0997176427, 15.0997587293, 15.0997998147, 15.099840899, 15.0998819821, 15.0999230641, 15.0999641448, 15.1000052244, 15.1000463029, 15.1000873801, 15.1001284562, 15.1001695311, 15.1002106049, 15.1002516775, 15.1002927489, 15.1003338191, 15.1003748882, 15.1004159561, 15.1004570228, 15.1004980884, 15.1005391528, 15.100580216, 15.1006212781, 15.100662339, 15.1007033987, 15.1007444573, 15.1007855147, 15.1008265709, 15.1008676259, 15.1009086798, 15.1009497325, 15.1009907841, 15.1010318345, 15.1010728837, 15.1011139317, 15.1011549786, 15.1011960243, 15.1012370688, 15.1012781122, 15.1013191544, 15.1013601955, 15.1014012353, 15.101442274, 15.1014833116, 15.1015243479, 15.1015653831, 15.1016064172, 15.10164745, 15.1016884817, 15.1017295123, 15.1017705416, 15.1018115698, 15.1018525969, 15.1018936227, 15.1019346474, 15.1019756709, 15.1020166933, 15.1020577145, 15.1020987345, 15.1021397534, 15.1021807711, 15.1022217876, 15.102262803, 15.1023038172, 15.1023448302, 15.1023858421, 15.1024268528, 15.1024678624, 15.1025088707, 15.1025498779, 15.102590884, 15.1026318889, 15.1026728926, 15.1027138951, 15.1027548965, 15.1027958967, 15.1028368958, 15.1028778936, 15.1029188904, 15.1029598859, 15.1030008803, 15.1030418735, 15.1030828656, 15.1031238565, 15.1031648462, 15.1032058348, 15.1032468222, 15.1032878084, 15.1033287935, 15.1033697774, 15.1034107601, 15.1034517417, 15.1034927221, 15.1035337014, 15.1035746795, 15.1036156564, 15.1036566322, 15.1036976068, 15.1037385802, 15.1037795525, 15.1038205236, 15.1038614935, 15.1039024623, 15.1039434299, 15.1039843963, 15.1040253616, 15.1040663258, 15.1041072887, 15.1041482505, 15.1041892112, 15.1042301706, 15.1042711289, 15.1043120861, 15.1043530421, 15.1043939969, 15.1044349506, 15.104475903, 15.1045168544, 15.1045578046, 15.1045987536, 15.1046397014, 15.1046806481, 15.1047215936, 15.104762538, 15.1048034812, 15.1048444232, 15.1048853641, 15.1049263038, 15.1049672424, 15.1050081798, 15.105049116, 15.105090051, 15.105130985, 15.1051719177, 15.1052128493, 15.1052537797, 15.105294709, 15.1053356371, 15.105376564, 15.1054174898, 15.1054584144, 15.1054993378, 15.1055402601, 15.1055811813, 15.1056221013, 15.1056630201, 15.1057039377, 15.1057448542, 15.1057857695, 15.1058266837, 15.1058675967, 15.1059085086, 15.1059494193, 15.1059903288, 15.1060312372, 15.1060721444, 15.1061130504, 15.1061539553, 15.106194859, 15.1062357616, 15.106276663, 15.1063175633, 15.1063584624, 15.1063993603, 15.1064402571, 15.1064811527, 15.1065220471, 15.1065629404, 15.1066038326, 15.1066447236, 15.1066856134, 15.106726502, 15.1067673895, 15.1068082759, 15.1068491611, 15.1068900451, 15.106930928, 15.1069718097, 15.1070126902, 15.1070535696, 15.1070944478, 15.1071353249, 15.1071762008, 15.1072170756, 15.1072579492, 15.1072988216, 15.1073396929, 15.107380563, 15.107421432, 15.1074622998, 15.1075031665, 15.107544032, 15.1075848963, 15.1076257595, 15.1076666215, 15.1077074824, 15.1077483421, 15.1077892006, 15.107830058, 15.1078709143, 15.1079117694, 15.1079526233, 15.1079934761, 15.1080343277, 15.1080751781, 15.1081160274, 15.1081568756, 15.1081977225, 15.1082385684, 15.108279413, 15.1083202565, 15.1083610989, 15.1084019401, 15.1084427802, 15.108483619, 15.1085244568, 15.1085652934, 15.1086061288, 15.108646963, 15.1086877962, 15.1087286281, 15.1087694589, 15.1088102886, 15.108851117, 15.1088919444, 15.1089327706, 15.1089735956, 15.1090144194, 15.1090552422, 15.1090960637, 15.1091368841, 15.1091777034, 15.1092185214, 15.1092593384, 15.1093001542, 15.1093409688, 15.1093817823, 15.1094225946, 15.1094634057, 15.1095042158, 15.1095450246, 15.1095858323, 15.1096266389, 15.1096674443, 15.1097082485, 15.1097490516, 15.1097898535, 15.1098306543, 15.1098714539, 15.1099122524, 15.1099530497, 15.1099938458, 15.1100346409, 15.1100754347, 15.1101162274, 15.110157019, 15.1101978093, 15.1102385986, 15.1102793867, 15.1103201736, 15.1103609594, 15.110401744, 15.1104425275, 15.1104833098, 15.110524091, 15.110564871, 15.1106056499, 15.1106464276, 15.1106872041, 15.1107279795, 15.1107687538, 15.1108095269, 15.1108502988, 15.1108910696, 15.1109318393, 15.1109726078, 15.1110133751, 15.1110541413, 15.1110949063, 15.1111356702, 15.111176433, 15.1112171945, 15.111257955, 15.1112987143, 15.1113394724, 15.1113802294, 15.1114209852, 15.1114617399, 15.1115024934, 15.1115432457, 15.111583997, 15.111624747, 15.111665496, 15.1117062437, 15.1117469903, 15.1117877358, 15.1118284801, 15.1118692233, 15.1119099653, 15.1119507062, 15.1119914459, 15.1120321844, 15.1120729218, 15.1121136581, 15.1121543932, 15.1121951272, 15.11223586, 15.1122765916, 15.1123173221, 15.1123580515, 15.1123987797, 15.1124395068, 15.1124802327, 15.1125209575, 15.1125616811, 15.1126024035, 15.1126431248, 15.112683845, 15.112724564, 15.1127652819, 15.1128059986, 15.1128467142, 15.1128874286, 15.1129281419, 15.112968854, 15.1130095649, 15.1130502748, 15.1130909834, 15.113131691, 15.1131723973, 15.1132131026, 15.1132538067, 15.1132945096, 15.1133352114, 15.113375912, 15.1134166115, 15.1134573098, 15.113498007, 15.1135387031, 15.113579398, 15.1136200917, 15.1136607843, 15.1137014757, 15.113742166, 15.1137828552, 15.1138235432, 15.1138642301, 15.1139049158, 15.1139456004, 15.1139862838, 15.114026966, 15.1140676472, 15.1141083271, 15.114149006, 15.1141896837, 15.1142303602, 15.1142710356, 15.1143117098, 15.1143523829, 15.1143930549, 15.1144337257, 15.1144743953, 15.1145150638, 15.1145557312, 15.1145963974, 15.1146370625, 15.1146777264, 15.1147183892, 15.1147590508, 15.1147997113, 15.1148403706, 15.1148810288, 15.1149216859, 15.1149623418, 15.1150029966, 15.1150436502, 15.1150843026, 15.1151249539, 15.1151656041, 15.1152062532, 15.115246901, 15.1152875478, 15.1153281934, 15.1153688378, 15.1154094811, 15.1154501233, 15.1154907643, 15.1155314042, 15.1155720429, 15.1156126805, 15.1156533169, 15.1156939522, 15.1157345863, 15.1157752193, 15.1158158512, 15.1158564819, 15.1158971115, 15.1159377399, 15.1159783672, 15.1160189933, 15.1160596183, 15.1161002422, 15.1161408649, 15.1161814864, 15.1162221068, 15.1162627261, 15.1163033443, 15.1163439612, 15.1163845771, 15.1164251918, 15.1164658053, 15.1165064177, 15.116547029, 15.1165876391, 15.1166282481, 15.116668856, 15.1167094627, 15.1167500682, 15.1167906726, 15.1168312759, 15.116871878, 15.116912479, 15.1169530788, 15.1169936775, 15.1170342751, 15.1170748715, 15.1171154668, 15.1171560609, 15.1171966539, 15.1172372457, 15.1172778364, 15.117318426, 15.1173590144, 15.1173996017, 15.1174401878, 15.1174807728, 15.1175213567, 15.1175619394, 15.117602521, 15.1176431014, 15.1176836807, 15.1177242588, 15.1177648358, 15.1178054117, 15.1178459864, 15.11788656, 15.1179271324, 15.1179677037, 15.1180082739, 15.1180488429, 15.1180894108, 15.1181299775, 15.1181705431, 15.1182111075, 15.1182516709, 15.118292233, 15.1183327941, 15.1183733539, 15.1184139127, 15.1184544703, 15.1184950268, 15.1185355821, 15.1185761363, 15.1186166894, 15.1186572413, 15.118697792, 15.1187383417, 15.1187788902, 15.1188194375, 15.1188599837, 15.1189005288, 15.1189410727, 15.1189816155, 15.1190221572, 15.1190626977, 15.1191032371, 15.1191437753, 15.1191843124, 15.1192248484, 15.1192653832, 15.1193059169, 15.1193464494, 15.1193869808, 15.1194275111, 15.1194680402, 15.1195085682, 15.119549095, 15.1195896207, 15.1196301453, 15.1196706687, 15.119711191, 15.1197517122, 15.1197922322, 15.1198327511, 15.1198732688, 15.1199137855, 15.1199543009, 15.1199948153, 15.1200353284, 15.1200758405, 15.1201163514, 15.1201568612, 15.1201973698, 15.1202378773, 15.1202783837, 15.1203188889, 15.120359393, 15.120399896, 15.1204403978, 15.1204808985, 15.120521398, 15.1205618964, 15.1206023937, 15.1206428898, 15.1206833848, 15.1207238787, 15.1207643714, 15.120804863, 15.1208453535, 15.1208858428, 15.120926331, 15.120966818, 15.1210073039, 15.1210477887, 15.1210882723, 15.1211287548, 15.1211692362, 15.1212097164, 15.1212501955, 15.1212906735, 15.1213311503, 15.121371626, 15.1214121005, 15.1214525739, 15.1214930462, 15.1215335173, 15.1215739873, 15.1216144562, 15.121654924, 15.1216953906, 15.121735856, 15.1217763204, 15.1218167836, 15.1218572456, 15.1218977065, 15.1219381663, 15.121978625, 15.1220190825, 15.1220595389, 15.1220999942, 15.1221404483, 15.1221809013, 15.1222213531, 15.1222618038, 15.1223022534, 15.1223427019, 15.1223831492, 15.1224235954, 15.1224640404, 15.1225044843, 15.1225449271, 15.1225853687, 15.1226258093, 15.1226662486, 15.1227066869, 15.122747124, 15.12278756, 15.1228279948, 15.1228684285, 15.1229088611, 15.1229492925, 15.1229897229, 15.123030152, 15.1230705801, 15.123111007, 15.1231514328, 15.1231918574, 15.1232322809, 15.1232727033, 15.1233131246, 15.1233535447, 15.1233939637, 15.1234343815, 15.1234747982, 15.1235152138, 15.1235556283, 15.1235960416, 15.1236364538, 15.1236768649, 15.1237172748, 15.1237576836, 15.1237980913, 15.1238384978, 15.1238789032, 15.1239193075, 15.1239597106, 15.1240001126, 15.1240405135, 15.1240809132, 15.1241213118, 15.1241617093, 15.1242021057, 15.1242425009, 15.124282895, 15.1243232879, 15.1243636797, 15.1244040704, 15.12444446, 15.1244848484, 15.1245252357, 15.1245656219, 15.124606007, 15.1246463909, 15.1246867737, 15.1247271553, 15.1247675358, 15.1248079152, 15.1248482935, 15.1248886706, 15.1249290466, 15.1249694215, 15.1250097952, 15.1250501678, 15.1250905393, 15.1251309097, 15.1251712789, 15.125211647, 15.1252520139, 15.1252923798, 15.1253327445, 15.125373108, 15.1254134705, 15.1254538318, 15.125494192, 15.125534551, 15.125574909, 15.1256152658, 15.1256556214, 15.125695976, 15.1257363294, 15.1257766817, 15.1258170328, 15.1258573829, 15.1258977318, 15.1259380795, 15.1259784262, 15.1260187717, 15.1260591161, 15.1260994593, 15.1261398015, 15.1261801425, 15.1262204823, 15.1262608211, 15.1263011587, 15.1263414952, 15.1263818305, 15.1264221648, 15.1264624979, 15.1265028299, 15.1265431607, 15.1265834904, 15.126623819, 15.1266641465, 15.1267044728, 15.1267447981, 15.1267851221, 15.1268254451, 15.1268657669, 15.1269060876, 15.1269464072, 15.1269867257, 15.127027043, 15.1270673592, 15.1271076743, 15.1271479882, 15.127188301, 15.1272286127, 15.1272689233, 15.1273092327, 15.1273495411, 15.1273898482, 15.1274301543, 15.1274704592, 15.1275107631, 15.1275510657, 15.1275913673, 15.1276316677, 15.127671967, 15.1277122652, 15.1277525623, 15.1277928582, 15.127833153, 15.1278734467, 15.1279137392, 15.1279540307, 15.127994321, 15.1280346102, 15.1280748982, 15.1281151851, 15.1281554709, 15.1281957556, 15.1282360392, 15.1282763216, 15.1283166029, 15.1283568831, 15.1283971621, 15.1284374401, 15.1284777169, 15.1285179926, 15.1285582671, 15.1285985405, 15.1286388129, 15.128679084, 15.1287193541, 15.128759623, 15.1287998908, 15.1288401575, 15.1288804231, 15.1289206875, 15.1289609509, 15.129001213, 15.1290414741, 15.1290817341, 15.1291219929, 15.1291622506, 15.1292025072, 15.1292427626, 15.1292830169, 15.1293232702, 15.1293635222, 15.1294037732, 15.129444023, 15.1294842717, 15.1295245193, 15.1295647658, 15.1296050112, 15.1296452554, 15.1296854985, 15.1297257405, 15.1297659813, 15.129806221, 15.1298464597, 15.1298866971, 15.1299269335, 15.1299671688, 15.1300074029, 15.1300476359, 15.1300878678, 15.1301280985, 15.1301683281, 15.1302085567, 15.1302487841, 15.1302890103, 15.1303292355, 15.1303694595, 15.1304096824, 15.1304499042, 15.1304901248, 15.1305303444, 15.1305705628, 15.1306107801, 15.1306509963, 15.1306912113, 15.1307314253, 15.1307716381, 15.1308118498, 15.1308520604, 15.1308922698, 15.1309324781, 15.1309726853, 15.1310128914, 15.1310530964, 15.1310933003, 15.131133503, 15.1311737046, 15.1312139051, 15.1312541045, 15.1312943027, 15.1313344998, 15.1313746958, 15.1314148907, 15.1314550845, 15.1314952771, 15.1315354687, 15.1315756591, 15.1316158484, 15.1316560365, 15.1316962236, 15.1317364095, 15.1317765943, 15.131816778, 15.1318569606, 15.1318971421, 15.1319373224, 15.1319775016, 15.1320176797, 15.1320578567, 15.1320980326, 15.1321382073, 15.1321783809, 15.1322185534, 15.1322587248, 15.1322988951, 15.1323390642, 15.1323792322, 15.1324193992, 15.132459565, 15.1324997296, 15.1325398932, 15.1325800556, 15.1326202169, 15.1326603771, 15.1327005362, 15.1327406942, 15.132780851, 15.1328210068, 15.1328611614, 15.1329013149, 15.1329414673, 15.1329816185, 15.1330217687, 15.1330619177, 15.1331020656, 15.1331422124, 15.1331823581, 15.1332225026, 15.1332626461, 15.1333027884, 15.1333429296, 15.1333830697, 15.1334232087, 15.1334633465, 15.1335034833, 15.1335436189, 15.1335837534, 15.1336238868, 15.1336640191, 15.1337041502, 15.1337442803, 15.1337844092, 15.133824537, 15.1338646637, 15.1339047893, 15.1339449137, 15.1339850371, 15.1340251593, 15.1340652804, 15.1341054004, 15.1341455193, 15.134185637, 15.1342257537, 15.1342658692, 15.1343059837, 15.134346097, 15.1343862091, 15.1344263202, 15.1344664302, 15.134506539, 15.1345466468, 15.1345867534, 15.1346268589, 15.1346669632, 15.1347070665, 15.1347471687, 15.1347872697, 15.1348273696, 15.1348674684, 15.1349075661, 15.1349476627, 15.1349877582, 15.1350278525, 15.1350679458, 15.1351080379, 15.1351481289, 15.1351882188, 15.1352283076, 15.1352683953, 15.1353084818, 15.1353485673, 15.1353886516, 15.1354287348, 15.1354688169, 15.1355088979, 15.1355489777, 15.1355890565, 15.1356291342, 15.1356692107, 15.1357092861, 15.1357493604, 15.1357894336, 15.1358295057, 15.1358695766, 15.1359096465, 15.1359497152, 15.1359897829, 15.1360298494, 15.1360699148, 15.1361099791, 15.1361500423, 15.1361901043, 15.1362301653, 15.1362702251, 15.1363102838, 15.1363503415, 15.136390398, 15.1364304533, 15.1364705076, 15.1365105608, 15.1365506128, 15.1365906638, 15.1366307136, 15.1366707623, 15.1367108099, 15.1367508564, 15.1367909018, 15.1368309461, 15.1368709893, 15.1369110313, 15.1369510723, 15.1369911121, 15.1370311508, 15.1370711884, 15.1371112249, 15.1371512603, 15.1371912946, 15.1372313277, 15.1372713598, 15.1373113907, 15.1373514205, 15.1373914492, 15.1374314769, 15.1374715034, 15.1375115287, 15.137551553, 15.1375915762, 15.1376315982, 15.1376716192, 15.137711639, 15.1377516577, 15.1377916754, 15.1378316919, 15.1378717073, 15.1379117215, 15.1379517347, 15.1379917468, 15.1380317577, 15.1380717676, 15.1381117763, 15.1381517839, 15.1381917905, 15.1382317959, 15.1382718002, 15.1383118034, 15.1383518054, 15.1383918064, 15.1384318063, 15.138471805, 15.1385118027, 15.1385517992, 15.1385917946, 15.138631789, 15.1386717822, 15.1387117743, 15.1387517653, 15.1387917551, 15.1388317439, 15.1388717316, 15.1389117181, 15.1389517036, 15.1389916879, 15.1390316712, 15.1390716533, 15.1391116343, 15.1391516142, 15.139191593, 15.1392315707, 15.1392715473, 15.1393115228, 15.1393514972, 15.1393914704, 15.1394314426, 15.1394714136, 15.1395113836, 15.1395513524, 15.1395913201, 15.1396312867, 15.1396712523, 15.1397112167, 15.13975118, 15.1397911422, 15.1398311032, 15.1398710632, 15.1399110221, 15.1399509798, 15.1399909365, 15.1400308921, 15.1400708465, 15.1401107998, 15.1401507521, 15.1401907032, 15.1402306532, 15.1402706021, 15.1403105499, 15.1403504966, 15.1403904422, 15.1404303867, 15.1404703301, 15.1405102724, 15.1405502135, 15.1405901536, 15.1406300926, 15.1406700304, 15.1407099672, 15.1407499028, 15.1407898373, 15.1408297708, 15.1408697031, 15.1409096343, 15.1409495644, 15.1409894934, 15.1410294214, 15.1410693482, 15.1411092738, 15.1411491984, 15.1411891219, 15.1412290443, 15.1412689656, 15.1413088858, 15.1413488048, 15.1413887228, 15.1414286396, 15.1414685554, 15.14150847, 15.1415483836, 15.141588296, 15.1416282074, 15.1416681176, 15.1417080267, 15.1417479348, 15.1417878417, 15.1418277475, 15.1418676522, 15.1419075558, 15.1419474583, 15.1419873597, 15.14202726, 15.1420671592, 15.1421070573, 15.1421469543, 15.1421868502, 15.142226745, 15.1422666386, 15.1423065312, 15.1423464227, 15.1423863131, 15.1424262023, 15.1424660905, 15.1425059775, 15.1425458635, 15.1425857484, 15.1426256321, 15.1426655148, 15.1427053963, 15.1427452768, 15.1427851561, 15.1428250343, 15.1428649115, 15.1429047875, 15.1429446624, 15.1429845363, 15.143024409, 15.1430642806, 15.1431041512, 15.1431440206, 15.1431838889, 15.1432237561, 15.1432636222, 15.1433034873, 15.1433433512, 15.143383214, 15.1434230757, 15.1434629363, 15.1435027958, 15.1435426542, 15.1435825115, 15.1436223677, 15.1436622229, 15.1437020769, 15.1437419298, 15.1437817816, 15.1438216323, 15.1438614819, 15.1439013304, 15.1439411778, 15.1439810241, 15.1440208693, 15.1440607134, 15.1441005564, 15.1441403983, 15.1441802391, 15.1442200788, 15.1442599174, 15.1442997549, 15.1443395912, 15.1443794265, 15.1444192607, 15.1444590938, 15.1444989258, 15.1445387567, 15.1445785865, 15.1446184152, 15.1446582428, 15.1446980693, 15.1447378947, 15.144777719, 15.1448175422, 15.1448573643, 15.1448971853, 15.1449370052, 15.1449768241, 15.1450166418, 15.1450564584, 15.1450962739, 15.1451360883, 15.1451759016, 15.1452157138, 15.1452555249, 15.1452953349, 15.1453351439, 15.1453749517, 15.1454147584, 15.145454564, 15.1454943685, 15.145534172, 15.1455739743, 15.1456137755, 15.1456535756, 15.1456933747, 15.1457331726, 15.1457729694, 15.1458127652, 15.1458525598, 15.1458923534, 15.1459321458, 15.1459719372, 15.1460117274, 15.1460515166, 15.1460913046, 15.1461310916, 15.1461708775, 15.1462106622, 15.1462504459, 15.1462902285, 15.1463300099, 15.1463697903, 15.1464095696, 15.1464493478, 15.1464891249, 15.1465289008, 15.1465686757, 15.1466084495, 15.1466482222, 15.1466879938, 15.1467277643, 15.1467675338, 15.1468073021, 15.1468470693, 15.1468868354, 15.1469266004, 15.1469663644, 15.1470061272, 15.1470458889, 15.1470856496, 15.1471254091, 15.1471651676, 15.1472049249, 15.1472446812, 15.1472844364, 15.1473241904, 15.1473639434, 15.1474036953, 15.1474434461, 15.1474831958, 15.1475229444, 15.1475626918, 15.1476024383, 15.1476421836, 15.1476819278, 15.1477216709, 15.1477614129, 15.1478011538, 15.1478408937, 15.1478806324, 15.1479203701, 15.1479601066, 15.1479998421, 15.1480395764, 15.1480793097, 15.1481190419, 15.1481587729, 15.1481985029, 15.1482382318, 15.1482779596, 15.1483176863, 15.1483574119, 15.1483971364, 15.1484368599, 15.1484765822, 15.1485163034, 15.1485560236, 15.1485957426, 15.1486354605, 15.1486751774, 15.1487148932, 15.1487546078, 15.1487943214, 15.1488340339, 15.1488737453, 15.1489134556, 15.1489531648, 15.1489928729, 15.1490325799, 15.1490722859, 15.1491119907, 15.1491516944, 15.1491913971, 15.1492310987, 15.1492707991, 15.1493104985, 15.1493501968, 15.149389894, 15.1494295901, 15.1494692851, 15.149508979, 15.1495486718, 15.1495883635, 15.1496280542, 15.1496677437, 15.1497074321, 15.1497471195, 15.1497868058, 15.1498264909, 15.149866175, 15.149905858, 15.1499455399, 15.1499852207, 15.1500249005, 15.1500645791, 15.1501042566, 15.1501439331, 15.1501836084, 15.1502232827, 15.1502629558, 15.1503026279, 15.1503422989, 15.1503819688, 15.1504216376, 15.1504613053, 15.150500972, 15.1505406375, 15.150580302, 15.1506199653, 15.1506596276, 15.1506992887, 15.1507389488, 15.1507786078, 15.1508182657, 15.1508579225, 15.1508975783, 15.1509372329, 15.1509768864, 15.1510165389, 15.1510561903, 15.1510958405, 15.1511354897, 15.1511751378, 15.1512147848, 15.1512544307, 15.1512940756, 15.1513337193, 15.1513733619, 15.1514130035, 15.151452644, 15.1514922833, 15.1515319216, 15.1515715588, 15.1516111949, 15.15165083, 15.1516904639, 15.1517300968, 15.1517697285, 15.1518093592, 15.1518489888, 15.1518886173, 15.1519282447, 15.151967871, 15.1520074962, 15.1520471203, 15.1520867434, 15.1521263653, 15.1521659862, 15.152205606, 15.1522452247, 15.1522848423, 15.1523244588, 15.1523640743, 15.1524036886, 15.1524433019, 15.152482914, 15.1525225251, 15.1525621351, 15.152601744, 15.1526413518, 15.1526809586, 15.1527205642, 15.1527601688, 15.1527997722, 15.1528393746, 15.1528789759, 15.1529185761, 15.1529581753, 15.1529977733, 15.1530373702, 15.1530769661, 15.1531165609, 15.1531561546, 15.1531957472, 15.1532353387, 15.1532749291, 15.1533145185, 15.1533541067, 15.1533936939, 15.15343328, 15.153472865, 15.1535124489, 15.1535520317, 15.1535916134, 15.1536311941, 15.1536707737, 15.1537103522, 15.1537499295, 15.1537895059, 15.1538290811, 15.1538686552, 15.1539082283, 15.1539478002, 15.1539873711, 15.1540269409, 15.1540665096, 15.1541060773, 15.1541456438, 15.1541852093, 15.1542247736, 15.1542643369, 15.1543038991, 15.1543434602, 15.1543830203, 15.1544225792, 15.1544621371, 15.1545016939, 15.1545412496, 15.1545808042, 15.1546203577, 15.1546599101, 15.1546994615, 15.1547390118, 15.1547785609, 15.1548181091, 15.1548576561, 15.154897202, 15.1549367469, 15.1549762906, 15.1550158333, 15.1550553749, 15.1550949154, 15.1551344549, 15.1551739932, 15.1552135305, 15.1552530667, 15.1552926018, 15.1553321358, 15.1553716687, 15.1554112005, 15.1554507313, 15.155490261, 15.1555297896, 15.1555693171, 15.1556088435, 15.1556483689, 15.1556878932, 15.1557274163, 15.1557669384, 15.1558064595, 15.1558459794, 15.1558854983, 15.155925016, 15.1559645327, 15.1560040483, 15.1560435628, 15.1560830763, 15.1561225886, 15.1561620999, 15.1562016101, 15.1562411192, 15.1562806273, 15.1563201342, 15.1563596401, 15.1563991449, 15.1564386486, 15.1564781512, 15.1565176527, 15.1565571532, 15.1565966526, 15.1566361509, 15.1566756481, 15.1567151442, 15.1567546393, 15.1567941332, 15.1568336261, 15.1568731179, 15.1569126087, 15.1569520983, 15.1569915869, 15.1570310744, 15.1570705608, 15.1571100461, 15.1571495304, 15.1571890135, 15.1572284956, 15.1572679766, 15.1573074565, 15.1573469354, 15.1573864131, 15.1574258898, 15.1574653654, 15.1575048399, 15.1575443134, 15.1575837857, 15.157623257, 15.1576627272, 15.1577021963, 15.1577416644, 15.1577811313, 15.1578205972, 15.157860062, 15.1578995257, 15.1579389884, 15.1579784499, 15.1580179104, 15.1580573698, 15.1580968282, 15.1581362854, 15.1581757416, 15.1582151967, 15.1582546507, 15.1582941036, 15.1583335555, 15.1583730062, 15.1584124559, 15.1584519045, 15.1584913521, 15.1585307985, 15.1585702439, 15.1586096882, 15.1586491314, 15.1586885736, 15.1587280146, 15.1587674546, 15.1588068935, 15.1588463314, 15.1588857681, 15.1589252038, 15.1589646384, 15.1590040719, 15.1590435044, 15.1590829357, 15.159122366, 15.1591617952, 15.1592012234, 15.1592406504, 15.1592800764, 15.1593195013, 15.1593589251, 15.1593983479, 15.1594377695, 15.1594771901, 15.1595166096, 15.1595560281, 15.1595954454, 15.1596348617, 15.1596742769, 15.159713691, 15.1597531041, 15.1597925161, 15.159831927, 15.1598713368, 15.1599107455, 15.1599501532, 15.1599895598, 15.1600289653, 15.1600683697, 15.1601077731, 15.1601471754, 15.1601865766, 15.1602259767, 15.1602653758, 15.1603047738, 15.1603441707, 15.1603835665, 15.1604229613, 15.160462355, 15.1605017476, 15.1605411391, 15.1605805295, 15.1606199189, 15.1606593072, 15.1606986944, 15.1607380806, 15.1607774657, 15.1608168497, 15.1608562326, 15.1608956145, 15.1609349952, 15.1609743749, 15.1610137536, 15.1610531311, 15.1610925076, 15.161131883, 15.1611712573, 15.1612106306, 15.1612500027, 15.1612893738, 15.1613287439, 15.1613681128, 15.1614074807, 15.1614468475, 15.1614862133, 15.1615255779, 15.1615649415, 15.161604304, 15.1616436654, 15.1616830258, 15.1617223851, 15.1617617433, 15.1618011004, 15.1618404565, 15.1618798115, 15.1619191654, 15.1619585183, 15.16199787, 15.1620372207, 15.1620765704, 15.1621159189, 15.1621552664, 15.1621946128, 15.1622339581, 15.1622733024, 15.1623126456, 15.1623519877, 15.1623913288, 15.1624306687, 15.1624700076, 15.1625093454, 15.1625486822, 15.1625880179, 15.1626273525, 15.162666686, 15.1627060185, 15.1627453499, 15.1627846802, 15.1628240094, 15.1628633376, 15.1629026647, 15.1629419907, 15.1629813157, 15.1630206396, 15.1630599624, 15.1630992841, 15.1631386048, 15.1631779244, 15.1632172429, 15.1632565604, 15.1632958768, 15.1633351921, 15.1633745063, 15.1634138195, 15.1634531316, 15.1634924426, 15.1635317526, 15.1635710615, 15.1636103693, 15.163649676, 15.1636889817, 15.1637282863, 15.1637675898, 15.1638068923, 15.1638461937, 15.163885494, 15.1639247932, 15.1639640914, 15.1640033885, 15.1640426846, 15.1640819795, 15.1641212734, 15.1641605662, 15.164199858, 15.1642391487, 15.1642784383, 15.1643177268, 15.1643570143, 15.1643963007, 15.1644355861, 15.1644748703, 15.1645141535, 15.1645534357, 15.1645927167, 15.1646319967, 15.1646712756, 15.1647105535, 15.1647498302, 15.164789106, 15.1648283806, 15.1648676542, 15.1649069267, 15.1649461981, 15.1649854685, 15.1650247378, 15.165064006, 15.1651032732, 15.1651425392, 15.1651818043, 15.1652210682, 15.1652603311, 15.1652995929, 15.1653388537, 15.1653781133, 15.165417372, 15.1654566295, 15.165495886, 15.1655351414, 15.1655743957, 15.165613649, 15.1656529012, 15.1656921523, 15.1657314024, 15.1657706514, 15.1658098993, 15.1658491462, 15.165888392, 15.1659276367, 15.1659668804, 15.166006123, 15.1660453645, 15.1660846049, 15.1661238443, 15.1661630826, 15.1662023199, 15.1662415561, 15.1662807912, 15.1663200253, 15.1663592583, 15.1663984902, 15.166437721, 15.1664769508, 15.1665161795, 15.1665554072, 15.1665946338, 15.1666338593, 15.1666730838, 15.1667123071, 15.1667515295, 15.1667907507, 15.1668299709, 15.16686919, 15.1669084081, 15.1669476251, 15.166986841, 15.1670260559, 15.1670652697, 15.1671044824, 15.167143694, 15.1671829046, 15.1672221142, 15.1672613226, 15.16730053, 15.1673397364, 15.1673789416, 15.1674181458, 15.167457349, 15.167496551, 15.167535752, 15.167574952, 15.1676141509, 15.1676533487, 15.1676925454, 15.1677317411, 15.1677709357, 15.1678101293, 15.1678493218, 15.1678885132, 15.1679277035, 15.1679668928, 15.1680060811, 15.1680452682, 15.1680844543, 15.1681236394, 15.1681628233, 15.1682020062, 15.1682411881, 15.1682803689, 15.1683195486, 15.1683587272, 15.1683979048, 15.1684370813, 15.1684762568, 15.1685154312, 15.1685546045, 15.1685937768, 15.168632948, 15.1686721181, 15.1687112872, 15.1687504552, 15.1687896222, 15.1688287881, 15.1688679529, 15.1689071166, 15.1689462793, 15.168985441, 15.1690246016, 15.1690637611, 15.1691029195, 15.1691420769, 15.1691812332, 15.1692203885, 15.1692595427, 15.1692986958, 15.1693378479, 15.1693769989, 15.1694161488, 15.1694552977, 15.1694944455, 15.1695335923, 15.169572738, 15.1696118826, 15.1696510262, 15.1696901687, 15.1697293101, 15.1697684505, 15.1698075898, 15.1698467281, 15.1698858653, 15.1699250014, 15.1699641365, 15.1700032705, 15.1700424035, 15.1700815354, 15.1701206662, 15.170159796, 15.1701989247, 15.1702380523, 15.1702771789, 15.1703163044, 15.1703554289, 15.1703945523, 15.1704336747, 15.1704727959, 15.1705119162, 15.1705510353, 15.1705901534, 15.1706292705, 15.1706683864, 15.1707075013, 15.1707466152, 15.170785728, 15.1708248397, 15.1708639504, 15.17090306, 15.1709421686, 15.1709812761, 15.1710203825, 15.1710594879, 15.1710985922, 15.1711376955, 15.1711767977, 15.1712158988, 15.1712549989, 15.1712940979, 15.1713331958, 15.1713722927, 15.1714113886, 15.1714504833, 15.1714895771, 15.1715286697, 15.1715677613, 15.1716068519, 15.1716459413, 15.1716850298, 15.1717241171, 15.1717632034, 15.1718022887, 15.1718413729, 15.171880456, 15.1719195381, 15.1719586191, 15.171997699, 15.1720367779, 15.1720758558, 15.1721149325, 15.1721540083, 15.1721930829, 15.1722321565, 15.1722712291, 15.1723103005, 15.172349371, 15.1723884403, 15.1724275086, 15.1724665759, 15.1725056421, 15.1725447072, 15.1725837713, 15.1726228343, 15.1726618963, 15.1727009572, 15.172740017, 15.1727790758, 15.1728181336, 15.1728571903, 15.1728962459, 15.1729353004, 15.1729743539, 15.1730134064, 15.1730524578, 15.1730915081, 15.1731305574, 15.1731696056, 15.1732086528, 15.1732476989, 15.1732867439, 15.1733257879, 15.1733648308, 15.1734038727, 15.1734429136, 15.1734819533, 15.173520992, 15.1735600297, 15.1735990663, 15.1736381018, 15.1736771363, 15.1737161697, 15.1737552021, 15.1737942334, 15.1738332637, 15.1738722929, 15.173911321, 15.1739503481, 15.1739893742, 15.1740283991, 15.1740674231, 15.1741064459, 15.1741454678, 15.1741844885, 15.1742235082, 15.1742625269, 15.1743015445, 15.174340561, 15.1743795765, 15.1744185909, 15.1744576043, 15.1744966166, 15.1745356279, 15.1745746381, 15.1746136472, 15.1746526553, 15.1746916624, 15.1747306684, 15.1747696733, 15.1748086772, 15.17484768, 15.1748866818, 15.1749256825, 15.1749646822, 15.1750036808, 15.1750426783, 15.1750816748, 15.1751206703, 15.1751596647, 15.175198658, 15.1752376503, 15.1752766415, 15.1753156317, 15.1753546208, 15.1753936089, 15.1754325959, 15.1754715819, 15.1755105668, 15.1755495506, 15.1755885334, 15.1756275152, 15.1756664959, 15.1757054755, 15.1757444541, 15.1757834317, 15.1758224081, 15.1758613836, 15.1759003579, 15.1759393313, 15.1759783035, 15.1760172748, 15.1760562449, 15.176095214, 15.1761341821, 15.1761731491, 15.1762121151, 15.17625108, 15.1762900438, 15.1763290066, 15.1763679684, 15.1764069291, 15.1764458887, 15.1764848473, 15.1765238048, 15.1765627613, 15.1766017168, 15.1766406711, 15.1766796245, 15.1767185767, 15.176757528, 15.1767964781, 15.1768354273, 15.1768743753, 15.1769133224, 15.1769522683, 15.1769912133, 15.1770301571, 15.1770690999, 15.1771080417, 15.1771469824, 15.1771859221, 15.1772248607, 15.1772637983, 15.1773027348, 15.1773416702, 15.1773806046, 15.177419538, 15.1774584703, 15.1774974016, 15.1775363318, 15.1775752609, 15.177614189, 15.1776531161, 15.1776920421, 15.177730967, 15.1777698909, 15.1778088138, 15.1778477356, 15.1778866563, 15.1779255761, 15.1779644947, 15.1780034123, 15.1780423289, 15.1780812444, 15.1781201588, 15.1781590722, 15.1781979846, 15.1782368959, 15.1782758061, 15.1783147154, 15.1783536235, 15.1783925306, 15.1784314367, 15.1784703417, 15.1785092457, 15.1785481486, 15.1785870504, 15.1786259512, 15.178664851, 15.1787037497, 15.1787426474, 15.178781544, 15.1788204396, 15.1788593341, 15.1788982276, 15.17893712, 15.1789760114, 15.1790149017, 15.179053791, 15.1790926792, 15.1791315664, 15.1791704525, 15.1792093376, 15.1792482217, 15.1792871046, 15.1793259866, 15.1793648675, 15.1794037473, 15.1794426261, 15.1794815039, 15.1795203806, 15.1795592562, 15.1795981308, 15.1796370044, 15.1796758769, 15.1797147484, 15.1797536188, 15.1797924882, 15.1798313565, 15.1798702238, 15.17990909, 15.1799479552, 15.1799868193, 15.1800256824, 15.1800645445, 15.1801034055, 15.1801422654, 15.1801811243, 15.1802199822, 15.180258839, 15.1802976947, 15.1803365495, 15.1803754031, 15.1804142558, 15.1804531073, 15.1804919579, 15.1805308073, 15.1805696558, 15.1806085032, 15.1806473495, 15.1806861948, 15.1807250391, 15.1807638823, 15.1808027244, 15.1808415656, 15.1808804056, 15.1809192447, 15.1809580826, 15.1809969196, 15.1810357555, 15.1810745903, 15.1811134241, 15.1811522569, 15.1811910886, 15.1812299192, 15.1812687489, 15.1813075774, 15.181346405, 15.1813852314, 15.1814240569, 15.1814628813, 15.1815017046, 15.1815405269, 15.1815793482, 15.1816181684, 15.1816569876, 15.1816958057, 15.1817346228, 15.1817734388, 15.1818122538, 15.1818510677, 15.1818898807, 15.1819286925, 15.1819675033, 15.1820063131, 15.1820451218, 15.1820839295, 15.1821227362, 15.1821615417, 15.1822003463, 15.1822391498, 15.1822779523, 15.1823167537, 15.1823555541, 15.1823943534, 15.1824331517, 15.1824719489, 15.1825107451, 15.1825495403, 15.1825883344, 15.1826271275, 15.1826659195, 15.1827047105, 15.1827435005, 15.1827822894, 15.1828210772, 15.182859864, 15.1828986498, 15.1829374345, 15.1829762182, 15.1830150009, 15.1830537825, 15.183092563, 15.1831313426, 15.183170121, 15.1832088985, 15.1832476749, 15.1832864502, 15.1833252245, 15.1833639978, 15.18340277, 15.1834415412, 15.1834803113, 15.1835190804, 15.1835578485, 15.1835966155, 15.1836353815, 15.1836741464, 15.1837129103, 15.1837516731, 15.1837904349, 15.1838291957, 15.1838679554, 15.1839067141, 15.1839454718, 15.1839842284, 15.1840229839, 15.1840617384, 15.1841004919, 15.1841392443, 15.1841779957, 15.1842167461, 15.1842554954, 15.1842942437, 15.1843329909, 15.1843717371, 15.1844104822, 15.1844492264, 15.1844879694, 15.1845267115, 15.1845654524, 15.1846041924, 15.1846429313, 15.1846816692, 15.184720406, 15.1847591418, 15.1847978765, 15.1848366102, 15.1848753429, 15.1849140745, 15.1849528051, 15.1849915347, 15.1850302632, 15.1850689907, 15.1851077171, 15.1851464425, 15.1851851668, 15.1852238901, 15.1852626124, 15.1853013336, 15.1853400538, 15.185378773, 15.1854174911, 15.1854562082, 15.1854949242, 15.1855336392, 15.1855723532, 15.1856110661, 15.185649778, 15.1856884888, 15.1857271986, 15.1857659074, 15.1858046151, 15.1858433218, 15.1858820274, 15.1859207321, 15.1859594356, 15.1859981382, 15.1860368397, 15.1860755401, 15.1861142395, 15.1861529379, 15.1861916353, 15.1862303316, 15.1862690268, 15.1863077211, 15.1863464143, 15.1863851064, 15.1864237975, 15.1864624876, 15.1865011767, 15.1865398647, 15.1865785516, 15.1866172376, 15.1866559225, 15.1866946063, 15.1867332891, 15.1867719709, 15.1868106517, 15.1868493314, 15.18688801, 15.1869266877, 15.1869653643, 15.1870040398, 15.1870427143, 15.1870813878, 15.1871200603, 15.1871587317, 15.1871974021, 15.1872360714, 15.1872747397, 15.187313407, 15.1873520732, 15.1873907384, 15.1874294026, 15.1874680657, 15.1875067278, 15.1875453888, 15.1875840488, 15.1876227078, 15.1876613657, 15.1877000226, 15.1877386785, 15.1877773333, 15.1878159871, 15.1878546399, 15.1878932916, 15.1879319423, 15.187970592, 15.1880092406, 15.1880478882, 15.1880865347, 15.1881251803, 15.1881638247, 15.1882024682, 15.1882411106, 15.188279752, 15.1883183923, 15.1883570316, 15.1883956699, 15.1884343071, 15.1884729433, 15.1885115785, 15.1885502126, 15.1885888457, 15.1886274778, 15.1886661088, 15.1887047388, 15.1887433677, 15.1887819957, 15.1888206226, 15.1888592484, 15.1888978732, 15.188936497, 15.1889751198, 15.1890137415, 15.1890523622, 15.1890909818, 15.1891296005, 15.189168218, 15.1892068346, 15.1892454501, 15.1892840646, 15.189322678, 15.1893612905, 15.1893999018, 15.1894385122, 15.1894771215, 15.1895157298, 15.1895543371, 15.1895929433, 15.1896315485, 15.1896701526, 15.1897087557, 15.1897473578, 15.1897859589, 15.1898245589, 15.1898631579, 15.1899017558, 15.1899403527, 15.1899789486, 15.1900175435, 15.1900561373, 15.1900947301, 15.1901333219, 15.1901719126, 15.1902105023, 15.1902490909, 15.1902876786, 15.1903262652, 15.1903648507, 15.1904034353, 15.1904420188, 15.1904806013, 15.1905191827, 15.1905577631, 15.1905963425, 15.1906349208, 15.1906734981, 15.1907120744, 15.1907506497, 15.1907892239, 15.1908277971, 15.1908663692, 15.1909049403, 15.1909435104, 15.1909820795, 15.1910206475, 15.1910592145, 15.1910977805, 15.1911363454, 15.1911749093, 15.1912134722, 15.1912520341, 15.1912905949, 15.1913291547, 15.1913677134, 15.1914062711, 15.1914448278, 15.1914833835, 15.1915219381, 15.1915604917, 15.1915990443, 15.1916375958, 15.1916761464, 15.1917146958, 15.1917532443, 15.1917917917, 15.1918303381, 15.1918688835, 15.1919074278, 15.1919459711, 15.1919845134, 15.1920230546, 15.1920615948, 15.192100134, 15.1921386722, 15.1921772093, 15.1922157454, 15.1922542804, 15.1922928145, 15.1923313475, 15.1923698795, 15.1924084104, 15.1924469403, 15.1924854692, 15.1925239971, 15.1925625239, 15.1926010497, 15.1926395745, 15.1926780982, 15.192716621, 15.1927551426, 15.1927936633, 15.1928321829, 15.1928707015, 15.1929092191, 15.1929477357, 15.1929862512, 15.1930247657, 15.1930632791, 15.1931017916, 15.193140303, 15.1931788133, 15.1932173227, 15.193255831, 15.1932943383, 15.1933328446, 15.1933713498, 15.193409854, 15.1934483572, 15.1934868594, 15.1935253605, 15.1935638606, 15.1936023597, 15.1936408577, 15.1936793547, 15.1937178507, 15.1937563457, 15.1937948396, 15.1938333325, 15.1938718244, 15.1939103153, 15.1939488051, 15.1939872939, 15.1940257817, 15.1940642684, 15.1941027542, 15.1941412389, 15.1941797225, 15.1942182052, 15.1942566868, 15.1942951674, 15.1943336469, 15.1943721255, 15.194410603, 15.1944490795, 15.1944875549, 15.1945260294, 15.1945645028, 15.1946029752, 15.1946414465, 15.1946799168, 15.1947183861, 15.1947568544, 15.1947953217, 15.1948337879, 15.1948722531, 15.1949107173, 15.1949491804, 15.1949876425, 15.1950261036, 15.1950645637, 15.1951030228, 15.1951414808, 15.1951799378, 15.1952183938, 15.1952568487, 15.1952953026, 15.1953337555, 15.1953722074, 15.1954106583, 15.1954491081, 15.1954875569, 15.1955260046, 15.1955644514, 15.1956028971, 15.1956413418, 15.1956797855, 15.1957182281, 15.1957566698, 15.1957951104, 15.19583355, 15.1958719885, 15.195910426, 15.1959488625, 15.195987298, 15.1960257325, 15.1960641659, 15.1961025983, 15.1961410297, 15.1961794601, 15.1962178894, 15.1962563177, 15.196294745, 15.1963331713, 15.1963715965, 15.1964100208, 15.196448444, 15.1964868661, 15.1965252873, 15.1965637074, 15.1966021265, 15.1966405446, 15.1966789617, 15.1967173777, 15.1967557927, 15.1967942067, 15.1968326197, 15.1968710316, 15.1969094425, 15.1969478524, 15.1969862613, 15.1970246692, 15.197063076, 15.1971014818, 15.1971398866, 15.1971782904, 15.1972166931, 15.1972550948, 15.1972934955, 15.1973318952, 15.1973702939, 15.1974086915, 15.1974470881, 15.1974854837, 15.1975238783, 15.1975622718, 15.1976006643, 15.1976390558, 15.1976774463, 15.1977158358, 15.1977542242, 15.1977926116, 15.197830998, 15.1978693834, 15.1979077677, 15.1979461511, 15.1979845334, 15.1980229147, 15.1980612949, 15.1980996742, 15.1981380524, 15.1981764296, 15.1982148058, 15.198253181, 15.1982915551, 15.1983299282, 15.1983683003, 15.1984066714, 15.1984450415, 15.1984834105, 15.1985217785, 15.1985601455, 15.1985985115, 15.1986368764, 15.1986752404, 15.1987136033, 15.1987519652, 15.1987903261, 15.1988286859, 15.1988670448, 15.1989054026, 15.1989437594, 15.1989821152, 15.1990204699, 15.1990588237, 15.1990971764, 15.1991355281, 15.1991738788, 15.1992122284, 15.1992505771, 15.1992889247, 15.1993272713, 15.1993656169, 15.1994039614, 15.199442305, 15.1994806475, 15.199518989, 15.1995573295, 15.199595669, 15.1996340074, 15.1996723448, 15.1997106812, 15.1997490166, 15.199787351, 15.1998256844, 15.1998640167, 15.199902348, 15.1999406783, 15.1999790076, 15.2000173359, 15.2000556631, 15.2000939894, 15.2001323146, 15.2001706388, 15.2002089619, 15.2002472841, 15.2002856052, 15.2003239253, 15.2003622444, 15.2004005625, 15.2004388796, 15.2004771956, 15.2005155107, 15.2005538247, 15.2005921377, 15.2006304497, 15.2006687606, 15.2007070706, 15.2007453795, 15.2007836874, 15.2008219943, 15.2008603002, 15.200898605, 15.2009369089, 15.2009752117, 15.2010135135, 15.2010518143, 15.2010901141, 15.2011284128, 15.2011667106, 15.2012050073, 15.201243303, 15.2012815977, 15.2013198914, 15.201358184, 15.2013964757, 15.2014347663, 15.2014730559, 15.2015113445, 15.2015496321, 15.2015879186, 15.2016262042, 15.2016644887, 15.2017027722, 15.2017410547, 15.2017793362, 15.2018176167, 15.2018558961, 15.2018941746, 15.201932452, 15.2019707284, 15.2020090038, 15.2020472781, 15.2020855515, 15.2021238238, 15.2021620952, 15.2022003655, 15.2022386348, 15.202276903, 15.2023151703, 15.2023534366, 15.2023917018, 15.202429966, 15.2024682292, 15.2025064914, 15.2025447526, 15.2025830127, 15.2026212719, 15.20265953, 15.2026977871, 15.2027360433, 15.2027742983, 15.2028125524, 15.2028508055, 15.2028890575, 15.2029273086, 15.2029655586, 15.2030038076, 15.2030420556, 15.2030803025, 15.2031185485, 15.2031567934, 15.2031950374, 15.2032332803, 15.2032715222, 15.2033097631, 15.203348003, 15.2033862418, 15.2034244797, 15.2034627165, 15.2035009524, 15.2035391872, 15.203577421, 15.2036156538, 15.2036538855, 15.2036921163, 15.203730346, 15.2037685748, 15.2038068025, 15.2038450292, 15.2038832549, 15.2039214796, 15.2039597032, 15.2039979259, 15.2040361475, 15.2040743682, 15.2041125878, 15.2041508064, 15.204189024, 15.2042272406, 15.2042654561, 15.2043036707, 15.2043418842, 15.2043800968, 15.2044183083, 15.2044565188, 15.2044947283, 15.2045329368, 15.2045711442, 15.2046093507, 15.2046475562, 15.2046857606, 15.204723964, 15.2047621664, 15.2048003678, 15.2048385682, 15.2048767676, 15.204914966, 15.2049531633, 15.2049913597, 15.205029555, 15.2050677493, 15.2051059426, 15.2051441349, 15.2051823262, 15.2052205165, 15.2052587058, 15.205296894, 15.2053350813, 15.2053732675, 15.2054114527, 15.2054496369, 15.2054878202, 15.2055260023, 15.2055641835, 15.2056023637, 15.2056405429, 15.205678721, 15.2057168981, 15.2057550743, 15.2057932494, 15.2058314235, 15.2058695966, 15.2059077687, 15.2059459398, 15.2059841098, 15.2060222789, 15.206060447, 15.206098614, 15.20613678, 15.206174945, 15.2062131091, 15.2062512721, 15.2062894341, 15.206327595, 15.206365755, 15.206403914, 15.2064420719, 15.2064802289, 15.2065183848, 15.2065565397, 15.2065946937, 15.2066328466, 15.2066709985, 15.2067091494, 15.2067472992, 15.2067854481, 15.206823596, 15.2068617428, 15.2068998887, 15.2069380335, 15.2069761774, 15.2070143202, 15.207052462, 15.2070906028, 15.2071287426, 15.2071668814, 15.2072050192, 15.2072431559, 15.2072812917, 15.2073194265, 15.2073575602, 15.2073956929, 15.2074338247, 15.2074719554, 15.2075100851, 15.2075482138, 15.2075863415, 15.2076244682, 15.2076625939, 15.2077007186, 15.2077388423, 15.2077769649, 15.2078150866, 15.2078532072, 15.2078913269, 15.2079294455, 15.2079675631, 15.2080056798, 15.2080437954, 15.20808191, 15.2081200236, 15.2081581362, 15.2081962478, 15.2082343583, 15.2082724679, 15.2083105765, 15.208348684, 15.2083867906, 15.2084248961, 15.2084630007, 15.2085011042, 15.2085392067, 15.2085773083, 15.2086154088, 15.2086535083, 15.2086916068, 15.2087297043, 15.2087678008, 15.2088058963, 15.2088439907, 15.2088820842, 15.2089201767, 15.2089582681, 15.2089963586, 15.209034448, 15.2090725365, 15.2091106239, 15.2091487104, 15.2091867958, 15.2092248802, 15.2092629636, 15.209301046, 15.2093391274, 15.2093772078, 15.2094152872, 15.2094533656, 15.209491443, 15.2095295194, 15.2095675948, 15.2096056691, 15.2096437425, 15.2096818149, 15.2097198862, 15.2097579566, 15.2097960259, 15.2098340943, 15.2098721616, 15.2099102279, 15.2099482933, 15.2099863576, 15.2100244209, 15.2100624832, 15.2101005446, 15.2101386049, 15.2101766642, 15.2102147225, 15.2102527798, 15.2102908361, 15.2103288913, 15.2103669456, 15.2104049989, 15.2104430512, 15.2104811025, 15.2105191527, 15.210557202, 15.2105952503, 15.2106332975, 15.2106713438, 15.210709389, 15.2107474333, 15.2107854765, 15.2108235188, 15.21086156, 15.2108996003, 15.2109376395, 15.2109756777, 15.211013715, 15.2110517512, 15.2110897864, 15.2111278206, 15.2111658538, 15.2112038861, 15.2112419173, 15.2112799475, 15.2113179767, 15.2113560049, 15.2113940321, 15.2114320583, 15.2114700835, 15.2115081077, 15.2115461309, 15.2115841531, 15.2116221743, 15.2116601945, 15.2116982136, 15.2117362318, 15.211774249, 15.2118122652, 15.2118502804, 15.2118882945, 15.2119263077, 15.2119643199, 15.2120023311, 15.2120403412, 15.2120783504, 15.2121163586, 15.2121543657, 15.2121923719, 15.2122303771, 15.2122683812, 15.2123063844, 15.2123443866, 15.2123823877, 15.2124203879, 15.212458387, 15.2124963852, 15.2125343824, 15.2125723785, 15.2126103737, 15.2126483678, 15.212686361, 15.2127243531, 15.2127623443, 15.2128003344, 15.2128383236, 15.2128763117, 15.2129142989, 15.212952285, 15.2129902702, 15.2130282543, 15.2130662375, 15.2131042196, 15.2131422008, 15.2131801809, 15.2132181601, 15.2132561382, 15.2132941154, 15.2133320916, 15.2133700667, 15.2134080409, 15.213446014, 15.2134839862, 15.2135219573, 15.2135599275, 15.2135978966, 15.2136358648, 15.2136738319, 15.2137117981, 15.2137497633, 15.2137877274, 15.2138256906, 15.2138636527, 15.2139016139, 15.2139395741, 15.2139775332, 15.2140154914, 15.2140534486, 15.2140914047, 15.2141293599, 15.2141673141, 15.2142052673, 15.2142432194, 15.2142811706, 15.2143191208, 15.21435707, 15.2143950182, 15.2144329653, 15.2144709115, 15.2145088567, 15.2145468009, 15.2145847441, 15.2146226863, 15.2146606275, 15.2146985677, 15.2147365069, 15.2147744451, 15.2148123823, 15.2148503185, 15.2148882537, 15.2149261879, 15.2149641212, 15.2150020534, 15.2150399846, 15.2150779148, 15.215115844, 15.2151537723, 15.2151916995, 15.2152296257, 15.215267551, 15.2153054752, 15.2153433985, 15.2153813207, 15.215419242, 15.2154571622, 15.2154950815, 15.2155329997, 15.215570917, 15.2156088333, 15.2156467485, 15.2156846628, 15.2157225761, 15.2157604884, 15.2157983997, 15.21583631, 15.2158742193, 15.2159121276, 15.2159500349, 15.2159879412, 15.2160258465, 15.2160637508, 15.2161016541, 15.2161395564, 15.2161774578, 15.2162153581, 15.2162532574, 15.2162911558, 15.2163290531, 15.2163669494, 15.2164048448, 15.2164427392, 15.2164806325, 15.2165185249, 15.2165564163, 15.2165943066, 15.216632196, 15.2166700844, 15.2167079718, 15.2167458582, 15.2167837436, 15.216821628, 15.2168595114, 15.2168973938, 15.2169352753, 15.2169731557, 15.2170110351, 15.2170489136, 15.217086791, 15.2171246675, 15.2171625429, 15.2172004174, 15.2172382908, 15.2172761633, 15.2173140348, 15.2173519053, 15.2173897748, 15.2174276433, 15.2174655108, 15.2175033773, 15.2175412428, 15.2175791073, 15.2176169708, 15.2176548334, 15.2176926949, 15.2177305554, 15.217768415, 15.2178062736, 15.2178441311, 15.2178819877, 15.2179198433, 15.2179576979, 15.2179955515, 15.2180334041, 15.2180712557, 15.2181091063, 15.2181469559, 15.2181848045, 15.2182226522, 15.2182604988, 15.2182983444, 15.2183361891, 15.2183740328, 15.2184118754, 15.2184497171, 15.2184875578, 15.2185253975, 15.2185632362, 15.2186010739, 15.2186389106, 15.2186767463, 15.2187145811, 15.2187524148, 15.2187902476, 15.2188280793, 15.2188659101, 15.2189037398, 15.2189415686, 15.2189793964, 15.2190172232, 15.219055049, 15.2190928738, 15.2191306976, 15.2191685205, 15.2192063423, 15.2192441631, 15.219281983, 15.2193198019, 15.2193576197, 15.2193954366, 15.2194332525, 15.2194710674, 15.2195088813, 15.2195466942, 15.2195845061, 15.2196223171, 15.219660127, 15.219697936, 15.2197357439, 15.2197735509, 15.2198113569, 15.2198491619, 15.2198869659, 15.2199247689, 15.2199625709, 15.2200003719, 15.2200381719, 15.220075971, 15.220113769, 15.2201515661, 15.2201893622, 15.2202271573, 15.2202649514, 15.2203027445, 15.2203405366, 15.2203783277, 15.2204161178, 15.220453907, 15.2204916951, 15.2205294823, 15.2205672685, 15.2206050537, 15.2206428378, 15.2206806211, 15.2207184033, 15.2207561845, 15.2207939647, 15.220831744, 15.2208695222, 15.2209072995, 15.2209450758, 15.2209828511, 15.2210206254, 15.2210583987, 15.221096171, 15.2211339424, 15.2211717127, 15.2212094821, 15.2212472504, 15.2212850178, 15.2213227842, 15.2213605496, 15.221398314, 15.2214360774, 15.2214738399, 15.2215116013, 15.2215493618, 15.2215871213, 15.2216248797, 15.2216626372, 15.2217003938, 15.2217381493, 15.2217759038, 15.2218136573, 15.2218514099, 15.2218891615, 15.2219269121, 15.2219646616, 15.2220024102, 15.2220401579, 15.2220779045, 15.2221156501, 15.2221533948, 15.2221911385, 15.2222288811, 15.2222666228, 15.2223043635, 15.2223421032, 15.222379842, 15.2224175797, 15.2224553165, 15.2224930522, 15.222530787, 15.2225685208, 15.2226062536, 15.2226439855, 15.2226817163, 15.2227194461, 15.222757175, 15.2227949029, 15.2228326298, 15.2228703557, 15.2229080806, 15.2229458045, 15.2229835274, 15.2230212494, 15.2230589704, 15.2230966903, 15.2231344093, 15.2231721274, 15.2232098444, 15.2232475604, 15.2232852755, 15.2233229895, 15.2233607026, 15.2233984147, 15.2234361258, 15.2234738359, 15.2235115451, 15.2235492532, 15.2235869604, 15.2236246666, 15.2236623718, 15.223700076, 15.2237377792, 15.2237754815, 15.2238131827, 15.223850883, 15.2238885823, 15.2239262806, 15.2239639779, 15.2240016742, 15.2240393695, 15.2240770639, 15.2241147573, 15.2241524497, 15.2241901411, 15.2242278315, 15.2242655209, 15.2243032094, 15.2243408968, 15.2243785833, 15.2244162688, 15.2244539533, 15.2244916369, 15.2245293194, 15.224567001, 15.2246046815, 15.2246423611, 15.2246800397, 15.2247177174, 15.224755394, 15.2247930697, 15.2248307443, 15.224868418, 15.2249060907, 15.2249437624, 15.2249814332, 15.2250191029, 15.2250567717, 15.2250944395, 15.2251321063, 15.2251697721, 15.2252074369, 15.2252451008, 15.2252827637, 15.2253204256, 15.2253580865, 15.2253957464, 15.2254334053, 15.2254710633, 15.2255087202, 15.2255463762, 15.2255840312, 15.2256216853, 15.2256593383, 15.2256969903, 15.2257346414, 15.2257722915, 15.2258099406, 15.2258475888, 15.2258852359, 15.2259228821, 15.2259605272, 15.2259981714, 15.2260358146, 15.2260734569, 15.2261110981, 15.2261487384, 15.2261863777, 15.226224016, 15.2262616533, 15.2262992897, 15.226336925, 15.2263745594, 15.2264121928, 15.2264498252, 15.2264874566, 15.2265250871, 15.2265627166, 15.226600345, 15.2266379725, 15.2266755991, 15.2267132246, 15.2267508492, 15.2267884728, 15.2268260954, 15.226863717, 15.2269013376, 15.2269389573, 15.226976576, 15.2270141936, 15.2270518104, 15.2270894261, 15.2271270409, 15.2271646546, 15.2272022674, 15.2272398792, 15.2272774901, 15.2273150999, 15.2273527088, 15.2273903167, 15.2274279236, 15.2274655295, 15.2275031345, 15.2275407384, 15.2275783414, 15.2276159434, 15.2276535444, 15.2276911445, 15.2277287436, 15.2277663416, 15.2278039388, 15.2278415349, 15.22787913, 15.2279167242, 15.2279543174, 15.2279919096, 15.2280295008, 15.2280670911, 15.2281046804, 15.2281422686, 15.228179856, 15.2282174423, 15.2282550276, 15.228292612, 15.2283301954, 15.2283677778, 15.2284053593, 15.2284429397, 15.2284805192, 15.2285180977, 15.2285556752, 15.2285932518, 15.2286308273, 15.2286684019, 15.2287059755, 15.2287435482, 15.2287811198, 15.2288186905, 15.2288562602, 15.2288938289, 15.2289313966, 15.2289689634, 15.2290065292, 15.229044094, 15.2290816578, 15.2291192207, 15.2291567825, 15.2291943434, 15.2292319033, 15.2292694623, 15.2293070202, 15.2293445772, 15.2293821332, 15.2294196882, 15.2294572423, 15.2294947953, 15.2295323474, 15.2295698986, 15.2296074487, 15.2296449978, 15.229682546, 15.2297200932, 15.2297576395, 15.2297951847, 15.229832729, 15.2298702723, 15.2299078146, 15.229945356, 15.2299828963, 15.2300204357, 15.2300579741, 15.2300955116, 15.230133048, 15.2301705835, 15.230208118, 15.2302456515, 15.2302831841, 15.2303207157, 15.2303582463, 15.2303957759, 15.2304333045, 15.2304708322, 15.2305083589, 15.2305458846, 15.2305834094, 15.2306209331, 15.2306584559, 15.2306959777, 15.2307334986, 15.2307710184, 15.2308085373, 15.2308460552, 15.2308835722, 15.2309210881, 15.2309586031, 15.2309961171, 15.2310336302, 15.2310711422, 15.2311086533, 15.2311461634, 15.2311836726, 15.2312211807, 15.2312586879, 15.2312961941, 15.2313336993, 15.2313712036, 15.2314087069, 15.2314462092, 15.2314837105, 15.2315212109, 15.2315587103, 15.2315962087, 15.2316337061, 15.2316712026, 15.231708698, 15.2317461926, 15.2317836861, 15.2318211787, 15.2318586702, 15.2318961609, 15.2319336505, 15.2319711392, 15.2320086269, 15.2320461136, 15.2320835993, 15.2321210841, 15.2321585679, 15.2321960507, 15.2322335325, 15.2322710134, 15.2323084933, 15.2323459722, 15.2323834502, 15.2324209272, 15.2324584032, 15.2324958782, 15.2325333523, 15.2325708254, 15.2326082975, 15.2326457686, 15.2326832388, 15.232720708, 15.2327581762, 15.2327956434, 15.2328331097, 15.232870575, 15.2329080393, 15.2329455027, 15.2329829651, 15.2330204265, 15.2330578869, 15.2330953464, 15.2331328049, 15.2331702624, 15.2332077189, 15.2332451745, 15.2332826291, 15.2333200827, 15.2333575354, 15.2333949871, 15.2334324378, 15.2334698875, 15.2335073363, 15.2335447841, 15.2335822309, 15.2336196768, 15.2336571216, 15.2336945655, 15.2337320085, 15.2337694504, 15.2338068914, 15.2338443315, 15.2338817705, 15.2339192086, 15.2339566457, 15.2339940818, 15.234031517, 15.2340689512, 15.2341063844, 15.2341438167, 15.2341812479, 15.2342186782, 15.2342561076, 15.2342935359, 15.2343309633, 15.2343683898, 15.2344058152, 15.2344432397, 15.2344806632, 15.2345180857, 15.2345555073, 15.2345929279, 15.2346303475, 15.2346677662, 15.2347051839, 15.2347426006, 15.2347800163, 15.2348174311, 15.2348548449, 15.2348922578, 15.2349296696, 15.2349670805, 15.2350044904, 15.2350418994, 15.2350793074, 15.2351167144, 15.2351541204, 15.2351915255, 15.2352289296, 15.2352663328, 15.2353037349, 15.2353411361, 15.2353785363, 15.2354159356, 15.2354533339, 15.2354907312, 15.2355281276, 15.2355655229, 15.2356029173, 15.2356403108, 15.2356777033, 15.2357150948, 15.2357524853, 15.2357898749, 15.2358272635, 15.2358646511, 15.2359020377, 15.2359394234, 15.2359768081, 15.2360141919, 15.2360515747, 15.2360889565, 15.2361263373, 15.2361637172, 15.2362010961, 15.2362384741, 15.236275851, 15.236313227, 15.2363506021, 15.2363879761, 15.2364253492, 15.2364627214, 15.2365000925, 15.2365374627, 15.236574832, 15.2366122002, 15.2366495675, 15.2366869338, 15.2367242992, 15.2367616636, 15.236799027, 15.2368363894, 15.2368737509, 15.2369111114, 15.236948471, 15.2369858296, 15.2370231872, 15.2370605438, 15.2370978995, 15.2371352542, 15.237172608, 15.2372099608, 15.2372473126, 15.2372846634, 15.2373220133, 15.2373593622, 15.2373967101, 15.2374340571, 15.2374714031, 15.2375087482, 15.2375460922, 15.2375834354, 15.2376207775, 15.2376581187, 15.2376954589, 15.2377327981, 15.2377701364, 15.2378074737, 15.2378448101, 15.2378821454, 15.2379194799, 15.2379568133, 15.2379941458, 15.2380314773, 15.2380688078, 15.2381061374, 15.238143466, 15.2381807937, 15.2382181204, 15.2382554461, 15.2382927709, 15.2383300946, 15.2383674175, 15.2384047393, 15.2384420602, 15.2384793801, 15.2385166991, 15.2385540171, 15.2385913341, 15.2386286502, 15.2386659653, 15.2387032794, 15.2387405926, 15.2387779048, 15.238815216, 15.2388525263, 15.2388898356, 15.238927144, 15.2389644514, 15.2390017578, 15.2390390632, 15.2390763677, 15.2391136712, 15.2391509738, 15.2391882754, 15.239225576, 15.2392628757, 15.2393001744, 15.2393374721, 15.2393747689, 15.2394120647, 15.2394493595, 15.2394866534, 15.2395239463, 15.2395612383, 15.2395985292, 15.2396358193, 15.2396731083, 15.2397103964, 15.2397476836, 15.2397849697, 15.2398222549, 15.2398595392, 15.2398968224, 15.2399341048, 15.2399713861, 15.2400086665, 15.2400459459, 15.2400832244, 15.2401205019, 15.2401577784, 15.240195054, 15.2402323286, 15.2402696022, 15.2403068749, 15.2403441466, 15.2403814174, 15.2404186872, 15.240455956, 15.2404932239, 15.2405304908, 15.2405677567, 15.2406050217, 15.2406422857, 15.2406795488, 15.2407168109, 15.240754072, 15.2407913322, 15.2408285914, 15.2408658496, 15.2409031069, 15.2409403632, 15.2409776186, 15.241014873, 15.2410521264, 15.2410893789, 15.2411266304, 15.2411638809, 15.2412011305, 15.2412383791, 15.2412756268, 15.2413128735, 15.2413501192, 15.241387364, 15.2414246078, 15.2414618507, 15.2414990926, 15.2415363335, 15.2415735735, 15.2416108125, 15.2416480505, 15.2416852876, 15.2417225237, 15.2417597589, 15.2417969931, 15.2418342263, 15.2418714586, 15.2419086899, 15.2419459203, 15.2419831497, 15.2420203781, 15.2420576056, 15.2420948321, 15.2421320577, 15.2421692823, 15.2422065059, 15.2422437286, 15.2422809503, 15.2423181711, 15.2423553909, 15.2423926097, 15.2424298276, 15.2424670445, 15.2425042604, 15.2425414754, 15.2425786895, 15.2426159025, 15.2426531146, 15.2426903258, 15.242727536, 15.2427647452, 15.2428019535, 15.2428391608, 15.2428763672, 15.2429135726, 15.242950777, 15.2429879805, 15.243025183, 15.2430623846, 15.2430995852, 15.2431367848, 15.2431739835, 15.2432111812, 15.243248378, 15.2432855738, 15.2433227686, 15.2433599625, 15.2433971554, 15.2434343474, 15.2434715384, 15.2435087284, 15.2435459175, 15.2435831057, 15.2436202928, 15.2436574791, 15.2436946643, 15.2437318486, 15.243769032, 15.2438062143, 15.2438433958, 15.2438805762, 15.2439177557, 15.2439549343, 15.2439921119, 15.2440292885, 15.2440664642, 15.2441036389, 15.2441408127, 15.2441779855, 15.2442151573, 15.2442523282, 15.2442894981, 15.2443266671, 15.2443638351, 15.2444010022, 15.2444381683, 15.2444753334, 15.2445124976, 15.2445496608, 15.2445868231, 15.2446239844, 15.2446611448, 15.2446983042, 15.2447354626, 15.2447726201, 15.2448097766, 15.2448469322, 15.2448840868, 15.2449212405, 15.2449583932, 15.2449955449, 15.2450326957, 15.2450698455, 15.2451069944, 15.2451441423, 15.2451812893, 15.2452184353, 15.2452555803, 15.2452927244, 15.2453298675, 15.2453670097, 15.2454041509, 15.2454412912, 15.2454784305, 15.2455155689, 15.2455527063, 15.2455898427, 15.2456269782, 15.2456641127, 15.2457012463, 15.2457383789, 15.2457755106, 15.2458126413, 15.245849771, 15.2458868998, 15.2459240277, 15.2459611545, 15.2459982805, 15.2460354054, 15.2460725295, 15.2461096525, 15.2461467746, 15.2461838958, 15.246221016, 15.2462581352, 15.2462952535, 15.2463323708, 15.2463694872, 15.2464066026, 15.2464437171, 15.2464808306, 15.2465179432, 15.2465550548, 15.2465921654, 15.2466292751, 15.2466663839, 15.2467034917, 15.2467405985, 15.2467777044, 15.2468148093, 15.2468519133, 15.2468890163, 15.2469261183, 15.2469632194, 15.2470003196, 15.2470374188, 15.247074517, 15.2471116143, 15.2471487107, 15.247185806, 15.2472229005, 15.2472599939, 15.2472970865, 15.247334178, 15.2473712686, 15.2474083583, 15.247445447, 15.2474825348, 15.2475196216, 15.2475567074, 15.2475937923, 15.2476308762, 15.2476679592, 15.2477050413, 15.2477421223, 15.2477792025, 15.2478162816, 15.2478533599, 15.2478904371, 15.2479275134, 15.2479645888, 15.2480016632, 15.2480387367, 15.2480758092, 15.2481128807, 15.2481499513, 15.248187021, 15.2482240897, 15.2482611574, 15.2482982242, 15.24833529, 15.2483723549, 15.2484094189, 15.2484464818, 15.2484835439, 15.2485206049, 15.2485576651, 15.2485947242, 15.2486317825, 15.2486688397, 15.248705896, 15.2487429514, 15.2487800058, 15.2488170593, 15.2488541118, 15.2488911633, 15.248928214, 15.2489652636, 15.2490023123, 15.2490393601, 15.2490764069, 15.2491134527, 15.2491504976, 15.2491875416, 15.2492245846, 15.2492616266, 15.2492986677, 15.2493357078, 15.249372747, 15.2494097853, 15.2494468226, 15.2494838589, 15.2495208943, 15.2495579287, 15.2495949622, 15.2496319947, 15.2496690263, 15.249706057, 15.2497430867, 15.2497801154, 15.2498171432, 15.24985417, 15.2498911959, 15.2499282208, 15.2499652448, 15.2500022678, 15.2500392899, 15.2500763111, 15.2501133312, 15.2501503505, 15.2501873688, 15.2502243861, 15.2502614025, 15.2502984179, 15.2503354324, 15.2503724459, 15.2504094585, 15.2504464701, 15.2504834808, 15.2505204906, 15.2505574994, 15.2505945072, 15.2506315141, 15.25066852, 15.250705525, 15.2507425291, 15.2507795321, 15.2508165343, 15.2508535355, 15.2508905357, 15.250927535, 15.2509645334, 15.2510015308, 15.2510385272, 15.2510755227, 15.2511125173, 15.2511495109, 15.2511865035, 15.2512234952, 15.251260486, 15.2512974758, 15.2513344647, 15.2513714526, 15.2514084395, 15.2514454256, 15.2514824106, 15.2515193947, 15.2515563779, 15.2515933601, 15.2516303414, 15.2516673217, 15.2517043011, 15.2517412796, 15.251778257, 15.2518152336, 15.2518522092, 15.2518891838, 15.2519261575, 15.2519631302, 15.252000102, 15.2520370729, 15.2520740428, 15.2521110118, 15.2521479798, 15.2521849468, 15.2522219129, 15.2522588781, 15.2522958423, 15.2523328056, 15.2523697679, 15.2524067293, 15.2524436897, 15.2524806492, 15.2525176078, 15.2525545654, 15.252591522, 15.2526284777, 15.2526654325, 15.2527023863, 15.2527393391, 15.252776291, 15.252813242, 15.252850192, 15.2528871411, 15.2529240892, 15.2529610364, 15.2529979826, 15.2530349279, 15.2530718723, 15.2531088157, 15.2531457581, 15.2531826996, 15.2532196402, 15.2532565798, 15.2532935184, 15.2533304562, 15.2533673929, 15.2534043288, 15.2534412637, 15.2534781976, 15.2535151306, 15.2535520626, 15.2535889937, 15.2536259239, 15.2536628531, 15.2536997814, 15.2537367087, 15.2537736351, 15.2538105605, 15.253847485, 15.2538844085, 15.2539213311, 15.2539582528, 15.2539951735, 15.2540320932, 15.2540690121, 15.2541059299, 15.2541428469, 15.2541797628, 15.2542166779, 15.254253592, 15.2542905051, 15.2543274173, 15.2543643286, 15.2544012389, 15.2544381483, 15.2544750567, 15.2545119642, 15.2545488707, 15.2545857763, 15.254622681, 15.2546595847, 15.2546964874, 15.2547333892, 15.2547702901, 15.2548071901, 15.254844089, 15.2548809871, 15.2549178842, 15.2549547803, 15.2549916755, 15.2550285698, 15.2550654631, 15.2551023555, 15.255139247, 15.2551761375, 15.255213027, 15.2552499156, 15.2552868033, 15.25532369, 15.2553605758, 15.2553974606, 15.2554343445, 15.2554712275, 15.2555081095, 15.2555449905, 15.2555818707, 15.2556187498, 15.2556556281, 15.2556925054, 15.2557293817, 15.2557662571, 15.2558031316, 15.2558400051, 15.2558768777, 15.2559137493, 15.25595062, 15.2559874898, 15.2560243586, 15.2560612265, 15.2560980934, 15.2561349594, 15.2561718244, 15.2562086885, 15.2562455517, 15.2562824139, 15.2563192752, 15.2563561355, 15.2563929949, 15.2564298534, 15.2564667109, 15.2565035674, 15.2565404231, 15.2565772777, 15.2566141315, 15.2566509843, 15.2566878361, 15.2567246871, 15.256761537, 15.2567983861, 15.2568352342, 15.2568720813, 15.2569089275, 15.2569457728, 15.2569826171, 15.2570194605, 15.257056303, 15.2570931445, 15.2571299851, 15.2571668247, 15.2572036634, 15.2572405011, 15.2572773379, 15.2573141738, 15.2573510087, 15.2573878427, 15.2574246757, 15.2574615078, 15.257498339, 15.2575351692, 15.2575719985, 15.2576088268, 15.2576456542, 15.2576824807, 15.2577193062, 15.2577561308, 15.2577929545, 15.2578297772, 15.2578665989, 15.2579034197, 15.2579402396, 15.2579770586, 15.2580138766, 15.2580506936, 15.2580875098, 15.2581243249, 15.2581611392, 15.2581979525, 15.2582347649, 15.2582715763, 15.2583083868, 15.2583451963, 15.2583820049, 15.2584188126, 15.2584556193, 15.2584924251, 15.25852923, 15.2585660339, 15.2586028369, 15.2586396389, 15.25867644, 15.2587132402, 15.2587500394, 15.2587868377, 15.258823635, 15.2588604314, 15.2588972269, 15.2589340214, 15.258970815, 15.2590076076, 15.2590443994, 15.2590811901, 15.25911798, 15.2591547689, 15.2591915568, 15.2592283438, 15.2592651299, 15.2593019151, 15.2593386993, 15.2593754826, 15.2594122649, 15.2594490463, 15.2594858267, 15.2595226063, 15.2595593848, 15.2595961625, 15.2596329392, 15.259669715, 15.2597064898, 15.2597432637, 15.2597800366, 15.2598168087, 15.2598535798, 15.2598903499, 15.2599271191, 15.2599638874, 15.2600006547, 15.2600374211, 15.2600741866, 15.2601109511, 15.2601477147, 15.2601844773, 15.260221239, 15.2602579998, 15.2602947597, 15.2603315186, 15.2603682765, 15.2604050336, 15.2604417896, 15.2604785448, 15.260515299, 15.2605520523, 15.2605888047, 15.2606255561, 15.2606623065, 15.2606990561, 15.2607358047, 15.2607725524, 15.2608092991, 15.2608460449, 15.2608827897, 15.2609195337, 15.2609562767, 15.2609930187, 15.2610297598, 15.2610665, 15.2611032392, 15.2611399776, 15.2611767149, 15.2612134514, 15.2612501869, 15.2612869214, 15.2613236551, 15.2613603878, 15.2613971195, 15.2614338504, 15.2614705802, 15.2615073092, 15.2615440372, 15.2615807643, 15.2616174905, 15.2616542157, 15.26169094, 15.2617276633, 15.2617643857, 15.2618011072, 15.2618378277, 15.2618745473, 15.261911266, 15.2619479838, 15.2619847006, 15.2620214164, 15.2620581314, 15.2620948454, 15.2621315584, 15.2621682706, 15.2622049818, 15.262241692, 15.2622784014, 15.2623151098, 15.2623518172, 15.2623885238, 15.2624252293, 15.262461934, 15.2624986377, 15.2625353405, 15.2625720424, 15.2626087433, 15.2626454433, 15.2626821424, 15.2627188405, 15.2627555377, 15.2627922339, 15.2628289293, 15.2628656237, 15.2629023171, 15.2629390096, 15.2629757012, 15.2630123919, 15.2630490816, 15.2630857704, 15.2631224583, 15.2631591452, 15.2631958312, 15.2632325162, 15.2632692004, 15.2633058836, 15.2633425658, 15.2633792472, 15.2634159276, 15.263452607, 15.2634892856, 15.2635259632, 15.2635626398, 15.2635993156, 15.2636359904, 15.2636726642, 15.2637093372, 15.2637460092, 15.2637826802, 15.2638193504, 15.2638560196, 15.2638926879, 15.2639293552, 15.2639660216, 15.2640026871, 15.2640393517, 15.2640760153, 15.264112678, 15.2641493397, 15.2641860005, 15.2642226604, 15.2642593194, 15.2642959774, 15.2643326345, 15.2643692907, 15.2644059459, 15.2644426002, 15.2644792536, 15.264515906, 15.2645525575, 15.2645892081, 15.2646258578, 15.2646625065, 15.2646991543, 15.2647358011, 15.2647724471, 15.264809092, 15.2648457361, 15.2648823792, 15.2649190214, 15.2649556627, 15.264992303, 15.2650289425, 15.2650655809, 15.2651022185, 15.2651388551, 15.2651754908, 15.2652121255, 15.2652487594, 15.2652853923, 15.2653220242, 15.2653586553, 15.2653952854, 15.2654319146, 15.2654685428, 15.2655051701, 15.2655417965, 15.265578422, 15.2656150465, 15.2656516701, 15.2656882927, 15.2657249145, 15.2657615353, 15.2657981552, 15.2658347741, 15.2658713921, 15.2659080092, 15.2659446254, 15.2659812406, 15.2660178549, 15.2660544683, 15.2660910807, 15.2661276923, 15.2661643028, 15.2662009125, 15.2662375212, 15.266274129, 15.2663107359, 15.2663473418, 15.2663839468, 15.2664205509, 15.2664571541, 15.2664937563, 15.2665303576, 15.266566958, 15.2666035574, 15.2666401559, 15.2666767535, 15.2667133502, 15.2667499459, 15.2667865407, 15.2668231346, 15.2668597275, 15.2668963195, 15.2669329106, 15.2669695008, 15.26700609, 15.2670426783, 15.2670792657, 15.2671158521, 15.2671524376, 15.2671890222, 15.2672256059, 15.2672621886, 15.2672987704, 15.2673353513, 15.2673719313, 15.2674085103, 15.2674450884, 15.2674816656, 15.2675182418, 15.2675548171, 15.2675913915, 15.267627965, 15.2676645375, 15.2677011091, 15.2677376798, 15.2677742495, 15.2678108184, 15.2678473863, 15.2678839532, 15.2679205193, 15.2679570844, 15.2679936486, 15.2680302119, 15.2680667742, 15.2681033356, 15.2681398961, 15.2681764557, 15.2682130143, 15.268249572, 15.2682861288, 15.2683226846, 15.2683592396, 15.2683957936, 15.2684323466, 15.2684688988, 15.26850545, 15.2685420003, 15.2685785497, 15.2686150981, 15.2686516456, 15.2686881922, 15.2687247379, 15.2687612826, 15.2687978265, 15.2688343693, 15.2688709113, 15.2689074523, 15.2689439925, 15.2689805316, 15.2690170699, 15.2690536073, 15.2690901437, 15.2691266791, 15.2691632137, 15.2691997473, 15.2692362801, 15.2692728118, 15.2693093427, 15.2693458726, 15.2693824017, 15.2694189297, 15.2694554569, 15.2694919831, 15.2695285085, 15.2695650328, 15.2696015563, 15.2696380788, 15.2696746005, 15.2697111211, 15.2697476409, 15.2697841597, 15.2698206777, 15.2698571947, 15.2698937107, 15.2699302259, 15.2699667401, 15.2700032534, 15.2700397657, 15.2700762772, 15.2701127877, 15.2701492973, 15.270185806, 15.2702223137, 15.2702588206, 15.2702953265, 15.2703318315, 15.2703683355, 15.2704048386, 15.2704413408, 15.2704778421, 15.2705143425, 15.2705508419, 15.2705873404, 15.270623838, 15.2706603347, 15.2706968305, 15.2707333253, 15.2707698192, 15.2708063121, 15.2708428042, 15.2708792953, 15.2709157855, 15.2709522748, 15.2709887632, 15.2710252506, 15.2710617371, 15.2710982227, 15.2711347074, 15.2711711911, 15.271207674, 15.2712441559, 15.2712806368, 15.2713171169, 15.271353596, 15.2713900742, 15.2714265515, 15.2714630279, 15.2714995033, 15.2715359779, 15.2715724515, 15.2716089242, 15.2716453959, 15.2716818667, 15.2717183367, 15.2717548056, 15.2717912737, 15.2718277409, 15.2718642071, 15.2719006724, 15.2719371368, 15.2719736002, 15.2720100628, 15.2720465244, 15.2720829851, 15.2721194449, 15.2721559037, 15.2721923616, 15.2722288187, 15.2722652747, 15.2723017299, 15.2723381842, 15.2723746375, 15.2724110899, 15.2724475414, 15.2724839919, 15.2725204416, 15.2725568903, 15.2725933381, 15.272629785, 15.2726662309, 15.272702676, 15.2727391201, 15.2727755633, 15.2728120056, 15.2728484469, 15.2728848874, 15.2729213269, 15.2729577655, 15.2729942031, 15.2730306399, 15.2730670757, 15.2731035106, 15.2731399446, 15.2731763777, 15.2732128099, 15.2732492411, 15.2732856714, 15.2733221008, 15.2733585293, 15.2733949568, 15.2734313835, 15.2734678092, 15.273504234, 15.2735406578, 15.2735770808, 15.2736135028, 15.2736499239, 15.2736863441, 15.2737227634, 15.2737591818, 15.2737955992, 15.2738320157, 15.2738684313, 15.273904846, 15.2739412598, 15.2739776726, 15.2740140845, 15.2740504955, 15.2740869056, 15.2741233148, 15.274159723, 15.2741961304, 15.2742325368, 15.2742689423, 15.2743053469, 15.2743417505, 15.2743781532, 15.2744145551, 15.274450956, 15.2744873559, 15.274523755, 15.2745601532, 15.2745965504, 15.2746329467, 15.2746693421, 15.2747057365, 15.2747421301, 15.2747785227, 15.2748149145, 15.2748513053, 15.2748876951, 15.2749240841, 15.2749604721, 15.2749968593, 15.2750332455, 15.2750696308, 15.2751060151, 15.2751423986, 15.2751787811, 15.2752151628, 15.2752515435, 15.2752879233, 15.2753243021, 15.2753606801, 15.2753970571, 15.2754334332, 15.2754698084, 15.2755061827, 15.2755425561, 15.2755789285, 15.2756153001, 15.2756516707, 15.2756880404, 15.2757244092, 15.275760777, 15.275797144, 15.27583351, 15.2758698751, 15.2759062393, 15.2759426026, 15.275978965, 15.2760153264, 15.276051687, 15.2760880466, 15.2761244053, 15.2761607631, 15.2761971199, 15.2762334759, 15.2762698309, 15.276306185, 15.2763425382, 15.2763788905, 15.2764152419, 15.2764515923, 15.2764879419, 15.2765242905, 15.2765606382, 15.276596985, 15.2766333309, 15.2766696758, 15.2767060199, 15.276742363, 15.2767787052, 15.2768150465, 15.2768513869, 15.2768877264, 15.2769240649, 15.2769604026, 15.2769967393, 15.2770330751, 15.27706941, 15.277105744, 15.277142077, 15.2771784092, 15.2772147404, 15.2772510707, 15.2772874001, 15.2773237286, 15.2773600562, 15.2773963828, 15.2774327086, 15.2774690334, 15.2775053573, 15.2775416803, 15.2775780024, 15.2776143236, 15.2776506438, 15.2776869632, 15.2777232816, 15.2777595991, 15.2777959157, 15.2778322314, 15.2778685462, 15.27790486, 15.277941173, 15.277977485, 15.2780137961, 15.2780501063, 15.2780864156, 15.278122724, 15.2781590314, 15.278195338, 15.2782316436, 15.2782679483, 15.2783042521, 15.278340555, 15.278376857, 15.2784131581, 15.2784494582, 15.2784857575, 15.2785220558, 15.2785583532, 15.2785946497, 15.2786309453, 15.2786672399, 15.2787035337, 15.2787398266, 15.2787761185, 15.2788124095, 15.2788486996, 15.2788849888, 15.2789212771, 15.2789575645, 15.2789938509, 15.2790301364, 15.2790664211, 15.2791027048, 15.2791389876, 15.2791752695, 15.2792115505, 15.2792478305, 15.2792841097, 15.2793203879, 15.2793566653, 15.2793929417, 15.2794292172, 15.2794654918, 15.2795017655, 15.2795380382, 15.2795743101, 15.2796105811, 15.2796468511, 15.2796831202, 15.2797193884, 15.2797556557, 15.2797919221, 15.2798281876, 15.2798644521, 15.2799007158, 15.2799369785, 15.2799732404, 15.2800095013, 15.2800457613, 15.2800820204, 15.2801182786, 15.2801545359, 15.2801907922, 15.2802270477, 15.2802633022, 15.2802995558, 15.2803358086, 15.2803720604, 15.2804083113, 15.2804445612, 15.2804808103, 15.2805170585, 15.2805533057, 15.2805895521, 15.2806257975, 15.280662042, 15.2806982856, 15.2807345283, 15.2807707701, 15.280807011, 15.280843251, 15.28087949, 15.2809157282, 15.2809519654, 15.2809882018, 15.2810244372, 15.2810606717, 15.2810969053, 15.281133138, 15.2811693697, 15.2812056006, 15.2812418306, 15.2812780596, 15.2813142878, 15.281350515, 15.2813867413, 15.2814229667, 15.2814591912, 15.2814954148, 15.2815316375, 15.2815678593, 15.2816040801, 15.2816403001, 15.2816765191, 15.2817127372, 15.2817489545, 15.2817851708, 15.2818213862, 15.2818576007, 15.2818938143, 15.281930027, 15.2819662387, 15.2820024496, 15.2820386595, 15.2820748686, 15.2821110767, 15.2821472839, 15.2821834903, 15.2822196957, 15.2822559002, 15.2822921038, 15.2823283064, 15.2823645082, 15.2824007091, 15.282436909, 15.2824731081, 15.2825093062, 15.2825455035, 15.2825816998, 15.2826178952, 15.2826540897, 15.2826902833, 15.282726476, 15.2827626678, 15.2827988587, 15.2828350487, 15.2828712377, 15.2829074259, 15.2829436131, 15.2829797995, 15.2830159849, 15.2830521694, 15.283088353, 15.2831245357, 15.2831607175, 15.2831968984, 15.2832330784, 15.2832692575, 15.2833054357, 15.2833416129, 15.2833777893, 15.2834139647, 15.2834501393, 15.2834863129, 15.2835224856, 15.2835586575, 15.2835948284, 15.2836309984, 15.2836671675, 15.2837033357, 15.283739503, 15.2837756694, 15.2838118348, 15.2838479994, 15.2838841631, 15.2839203258, 15.2839564877, 15.2839926486, 15.2840288086, 15.2840649678, 15.284101126, 15.2841372833, 15.2841734397, 15.2842095952, 15.2842457498, 15.2842819035, 15.2843180563, 15.2843542082, 15.2843903592, 15.2844265092, 15.2844626584, 15.2844988067, 15.284534954, 15.2845711005, 15.284607246, 15.2846433906, 15.2846795344, 15.2847156772, 15.2847518191, 15.2847879601, 15.2848241002, 15.2848602394, 15.2848963777, 15.2849325151, 15.2849686516, 15.2850047872, 15.2850409219, 15.2850770556, 15.2851131885, 15.2851493205, 15.2851854515, 15.2852215817, 15.2852577109, 15.2852938393, 15.2853299667, 15.2853660932, 15.2854022189, 15.2854383436, 15.2854744674, 15.2855105903, 15.2855467123, 15.2855828334, 15.2856189536, 15.2856550729, 15.2856911913, 15.2857273088, 15.2857634254, 15.2857995411, 15.2858356559, 15.2858717697, 15.2859078827, 15.2859439948, 15.2859801059, 15.2860162162, 15.2860523255, 15.286088434, 15.2861245415, 15.2861606482, 15.2861967539, 15.2862328587, 15.2862689627, 15.2863050657, 15.2863411678, 15.2863772691, 15.2864133694, 15.2864494688, 15.2864855673, 15.2865216649, 15.2865577616, 15.2865938574, 15.2866299523, 15.2866660463, 15.2867021394, 15.2867382316, 15.2867743229, 15.2868104133, 15.2868465027, 15.2868825913, 15.286918679, 15.2869547658, 15.2869908516, 15.2870269366, 15.2870630207, 15.2870991038, 15.2871351861, 15.2871712674, 15.2872073479, 15.2872434275, 15.2872795061, 15.2873155839, 15.2873516607, 15.2873877366, 15.2874238117, 15.2874598858, 15.2874959591, 15.2875320314, 15.2875681028, 15.2876041734, 15.287640243, 15.2876763117, 15.2877123795, 15.2877484465, 15.2877845125, 15.2878205776, 15.2878566418, 15.2878927052, 15.2879287676, 15.2879648291, 15.2880008897, 15.2880369494, 15.2880730082, 15.2881090661, 15.2881451232, 15.2881811793, 15.2882172345, 15.2882532888, 15.2882893422, 15.2883253947, 15.2883614463, 15.288397497, 15.2884335468, 15.2884695957, 15.2885056437, 15.2885416908, 15.288577737, 15.2886137823, 15.2886498267, 15.2886858702, 15.2887219128, 15.2887579545, 15.2887939953, 15.2888300352, 15.2888660742, 15.2889021123, 15.2889381495, 15.2889741858, 15.2890102211, 15.2890462556, 15.2890822892, 15.2891183219, 15.2891543537, 15.2891903846, 15.2892264146, 15.2892624437, 15.2892984719, 15.2893344992, 15.2893705256, 15.2894065511, 15.2894425757, 15.2894785994, 15.2895146222, 15.2895506441, 15.2895866651, 15.2896226852, 15.2896587044, 15.2896947227, 15.2897307401, 15.2897667566, 15.2898027722, 15.2898387869, 15.2898748007, 15.2899108136, 15.2899468256, 15.2899828367, 15.2900188469, 15.2900548562, 15.2900908647, 15.2901268722, 15.2901628788, 15.2901988845, 15.2902348893, 15.2902708932, 15.2903068963, 15.2903428984, 15.2903788996, 15.2904148999, 15.2904508994, 15.2904868979, 15.2905228955, 15.2905588922, 15.2905948881, 15.290630883, 15.2906668771, 15.2907028702, 15.2907388624, 15.2907748538, 15.2908108442, 15.2908468338, 15.2908828224, 15.2909188102, 15.290954797, 15.290990783, 15.2910267681, 15.2910627522, 15.2910987355, 15.2911347179, 15.2911706993, 15.2912066799, 15.2912426596, 15.2912786383, 15.2913146162, 15.2913505932, 15.2913865693, 15.2914225445, 15.2914585188, 15.2914944922, 15.2915304647, 15.2915664363, 15.291602407, 15.2916383768, 15.2916743457, 15.2917103137, 15.2917462808, 15.2917822471, 15.2918182124, 15.2918541768, 15.2918901403, 15.291926103, 15.2919620647, 15.2919980256, 15.2920339855, 15.2920699445, 15.2921059027, 15.29214186, 15.2921778163, 15.2922137718, 15.2922497264, 15.29228568, 15.2923216328, 15.2923575847, 15.2923935357, 15.2924294858, 15.2924654349, 15.2925013832, 15.2925373306, 15.2925732772, 15.2926092228, 15.2926451675, 15.2926811113, 15.2927170542, 15.2927529962, 15.2927889374, 15.2928248776, 15.292860817, 15.2928967554, 15.292932693, 15.2929686296, 15.2930045654, 15.2930405002, 15.2930764342, 15.2931123673, 15.2931482995, 15.2931842308, 15.2932201612, 15.2932560906, 15.2932920192, 15.293327947, 15.2933638738, 15.2933997997, 15.2934357247, 15.2934716488, 15.2935075721, 15.2935434944, 15.2935794159, 15.2936153364, 15.2936512561, 15.2936871748, 15.2937230927, 15.2937590097, 15.2937949257, 15.2938308409, 15.2938667552, 15.2939026686, 15.2939385811, 15.2939744927, 15.2940104034, 15.2940463133, 15.2940822222, 15.2941181302, 15.2941540374, 15.2941899436, 15.294225849, 15.2942617534, 15.294297657, 15.2943335597, 15.2943694615, 15.2944053623, 15.2944412623, 15.2944771614, 15.2945130596, 15.2945489569, 15.2945848534, 15.2946207489, 15.2946566435, 15.2946925373, 15.2947284301, 15.2947643221, 15.2948002131, 15.2948361033, 15.2948719926, 15.294907881, 15.2949437684, 15.294979655, 15.2950155407, 15.2950514256, 15.2950873095, 15.2951231925, 15.2951590746, 15.2951949559, 15.2952308362, 15.2952667157, 15.2953025943, 15.2953384719, 15.2953743487, 15.2954102246, 15.2954460996, 15.2954819737, 15.2955178469, 15.2955537192, 15.2955895907, 15.2956254612, 15.2956613308, 15.2956971996, 15.2957330675, 15.2957689344, 15.2958048005, 15.2958406657, 15.29587653, 15.2959123934, 15.2959482559, 15.2959841175, 15.2960199782, 15.2960558381, 15.296091697, 15.2961275551, 15.2961634122, 15.2961992685, 15.2962351239, 15.2962709784, 15.296306832, 15.2963426847, 15.2963785365, 15.2964143874, 15.2964502375, 15.2964860866, 15.2965219349, 15.2965577822, 15.2965936287, 15.2966294743, 15.296665319, 15.2967011628, 15.2967370057, 15.2967728477, 15.2968086888, 15.2968445291, 15.2968803684, 15.2969162069, 15.2969520444, 15.2969878811, 15.2970237169, 15.2970595518, 15.2970953858, 15.2971312189, 15.2971670512, 15.2972028825, 15.2972387129, 15.2972745425, 15.2973103712, 15.2973461989, 15.2973820258, 15.2974178518, 15.2974536769, 15.2974895012, 15.2975253245, 15.2975611469, 15.2975969685, 15.2976327891, 15.2976686089, 15.2977044278, 15.2977402458, 15.2977760629, 15.2978118791, 15.2978476944, 15.2978835089, 15.2979193224, 15.2979551351, 15.2979909468, 15.2980267577, 15.2980625677, 15.2980983768, 15.298134185, 15.2981699924, 15.2982057988, 15.2982416043, 15.298277409, 15.2983132128, 15.2983490157, 15.2983848177, 15.2984206188, 15.298456419, 15.2984922183, 15.2985280167, 15.2985638143, 15.298599611, 15.2986354067, 15.2986712016, 15.2987069956, 15.2987427887, 15.298778581, 15.2988143723, 15.2988501627, 15.2988859523, 15.298921741, 15.2989575288, 15.2989933156, 15.2990291017, 15.2990648868, 15.299100671, 15.2991364544, 15.2991722368, 15.2992080184, 15.2992437991, 15.2992795789, 15.2993153578, 15.2993511358, 15.2993869129, 15.2994226892, 15.2994584645, 15.299494239, 15.2995300126, 15.2995657853, 15.2996015571, 15.299637328, 15.2996730981, 15.2997088672, 15.2997446355, 15.2997804029, 15.2998161693, 15.299851935, 15.2998876997, 15.2999234635, 15.2999592264, 15.2999949885, 15.3000307497, 15.30006651, 15.3001022694, 15.3001380279, 15.3001737855, 15.3002095422, 15.3002452981, 15.3002810531, 15.3003168071, 15.3003525603, 15.3003883126, 15.3004240641, 15.3004598146, 15.3004955642, 15.300531313, 15.3005670609, 15.3006028079, 15.300638554, 15.3006742992, 15.3007100436, 15.300745787, 15.3007815296, 15.3008172712, 15.300853012, 15.300888752, 15.300924491, 15.3009602291, 15.3009959664, 15.3010317027, 15.3010674382, 15.3011031728, 15.3011389065, 15.3011746394, 15.3012103713, 15.3012461024, 15.3012818325, 15.3013175618, 15.3013532902, 15.3013890177, 15.3014247444, 15.3014604701, 15.301496195, 15.301531919, 15.3015676421, 15.3016033643, 15.3016390856, 15.301674806, 15.3017105256, 15.3017462443, 15.3017819621, 15.301817679, 15.301853395, 15.3018891101, 15.3019248244, 15.3019605377, 15.3019962502, 15.3020319618, 15.3020676725, 15.3021033824, 15.3021390913, 15.3021747994, 15.3022105065, 15.3022462128, 15.3022819183, 15.3023176228, 15.3023533264, 15.3023890292, 15.3024247311, 15.3024604321, 15.3024961322, 15.3025318314, 15.3025675297, 15.3026032272, 15.3026389238, 15.3026746195, 15.3027103143, 15.3027460082, 15.3027817013, 15.3028173934, 15.3028530847, 15.3028887751, 15.3029244646, 15.3029601532, 15.302995841, 15.3030315279, 15.3030672138, 15.3031028989, 15.3031385832, 15.3031742665, 15.3032099489, 15.3032456305, 15.3032813112, 15.303316991, 15.3033526699, 15.303388348, 15.3034240251, 15.3034597014, 15.3034953768, 15.3035310513, 15.3035667249, 15.3036023977, 15.3036380695, 15.3036737405, 15.3037094106, 15.3037450798, 15.3037807482, 15.3038164156, 15.3038520822, 15.3038877479, 15.3039234127, 15.3039590766, 15.3039947397, 15.3040304018, 15.3040660631, 15.3041017235, 15.304137383, 15.3041730417, 15.3042086994, 15.3042443563, 15.3042800123, 15.3043156674, 15.3043513217, 15.304386975, 15.3044226275, 15.3044582791, 15.3044939298, 15.3045295796, 15.3045652286, 15.3046008766, 15.3046365238, 15.3046721701, 15.3047078155, 15.3047434601, 15.3047791037, 15.3048147465, 15.3048503884, 15.3048860294, 15.3049216696, 15.3049573088, 15.3049929472, 15.3050285847, 15.3050642213, 15.3050998571, 15.3051354919, 15.3051711259, 15.305206759, 15.3052423912, 15.3052780226, 15.305313653, 15.3053492826, 15.3053849113, 15.3054205391, 15.3054561661, 15.3054917921, 15.3055274173, 15.3055630416, 15.305598665, 15.3056342875, 15.3056699092, 15.30570553, 15.3057411499, 15.3057767689, 15.3058123871, 15.3058480043, 15.3058836207, 15.3059192362, 15.3059548508, 15.3059904646, 15.3060260774, 15.3060616894, 15.3060973005, 15.3061329108, 15.3061685201, 15.3062041286, 15.3062397362, 15.3062753429, 15.3063109487, 15.3063465537, 15.3063821578, 15.306417761, 15.3064533633, 15.3064889647, 15.3065245653, 15.306560165, 15.3065957638, 15.3066313617, 15.3066669588, 15.3067025549, 15.3067381502, 15.3067737446, 15.3068093382, 15.3068449308, 15.3068805226, 15.3069161135, 15.3069517035, 15.3069872927, 15.307022881, 15.3070584684, 15.3070940549, 15.3071296405, 15.3071652253, 15.3072008091, 15.3072363921, 15.3072719743, 15.3073075555, 15.3073431359, 15.3073787154, 15.307414294, 15.3074498717, 15.3074854486, 15.3075210246, 15.3075565997, 15.3075921739, 15.3076277473, 15.3076633197, 15.3076988913, 15.307734462, 15.3077700319, 15.3078056009, 15.3078411689, 15.3078767362, 15.3079123025, 15.307947868, 15.3079834325, 15.3080189962, 15.3080545591, 15.308090121, 15.3081256821, 15.3081612423, 15.3081968016, 15.3082323601, 15.3082679176, 15.3083034743, 15.3083390301, 15.3083745851, 15.3084101391, 15.3084456923, 15.3084812446, 15.3085167961, 15.3085523466, 15.3085878963, 15.3086234451, 15.3086589931, 15.3086945401, 15.3087300863, 15.3087656316, 15.308801176, 15.3088367196, 15.3088722623, 15.3089078041, 15.308943345, 15.308978885, 15.3090144242, 15.3090499625, 15.3090854999, 15.3091210365, 15.3091565722, 15.309192107, 15.3092276409, 15.3092631739, 15.3092987061, 15.3093342374, 15.3093697678, 15.3094052974, 15.309440826, 15.3094763538, 15.3095118808, 15.3095474068, 15.309582932, 15.3096184563, 15.3096539797, 15.3096895023, 15.3097250239, 15.3097605447, 15.3097960647, 15.3098315837, 15.3098671019, 15.3099026192, 15.3099381356, 15.3099736512, 15.3100091658, 15.3100446796, 15.3100801926, 15.3101157046, 15.3101512158, 15.3101867261, 15.3102222356, 15.3102577441, 15.3102932518, 15.3103287586, 15.3103642646, 15.3103997696, 15.3104352738, 15.3104707771, 15.3105062796, 15.3105417811, 15.3105772818, 15.3106127817, 15.3106482806, 15.3106837787, 15.3107192759, 15.3107547722, 15.3107902677, 15.3108257623, 15.310861256, 15.3108967488, 15.3109322408, 15.3109677318, 15.3110032221, 15.3110387114, 15.3110741999, 15.3111096875, 15.3111451742, 15.3111806601, 15.311216145, 15.3112516291, 15.3112871124, 15.3113225947, 15.3113580762, 15.3113935568, 15.3114290366, 15.3114645154, 15.3114999934, 15.3115354706, 15.3115709468, 15.3116064222, 15.3116418967, 15.3116773703, 15.3117128431, 15.311748315, 15.311783786, 15.3118192562, 15.3118547254, 15.3118901939, 15.3119256614, 15.311961128, 15.3119965938, 15.3120320587, 15.3120675228, 15.312102986, 15.3121384483, 15.3121739097, 15.3122093702, 15.3122448299, 15.3122802887, 15.3123157467, 15.3123512038, 15.31238666, 15.3124221153, 15.3124575697, 15.3124930233, 15.312528476, 15.3125639279, 15.3125993789, 15.312634829, 15.3126702782, 15.3127057266, 15.312741174, 15.3127766207, 15.3128120664, 15.3128475113, 15.3128829553, 15.3129183984, 15.3129538407, 15.3129892821, 15.3130247226, 15.3130601622, 15.313095601, 15.3131310389, 15.313166476, 15.3132019121, 15.3132373474, 15.3132727819, 15.3133082154, 15.3133436481, 15.3133790799, 15.3134145109, 15.313449941, 15.3134853702, 15.3135207985, 15.313556226, 15.3135916526, 15.3136270783, 15.3136625032, 15.3136979271, 15.3137333503, 15.3137687725, 15.3138041939, 15.3138396144, 15.313875034, 15.3139104528, 15.3139458707, 15.3139812877, 15.3140167039, 15.3140521192, 15.3140875336, 15.3141229472, 15.3141583599, 15.3141937717, 15.3142291826, 15.3142645927, 15.3143000019, 15.3143354102, 15.3143708177, 15.3144062243, 15.31444163, 15.3144770349, 15.3145124389, 15.314547842, 15.3145832443, 15.3146186457, 15.3146540462, 15.3146894458, 15.3147248446, 15.3147602425, 15.3147956396, 15.3148310357, 15.3148664311, 15.3149018255, 15.3149372191, 15.3149726118, 15.3150080036, 15.3150433946, 15.3150787847, 15.3151141739, 15.3151495623, 15.3151849498, 15.3152203364, 15.3152557221, 15.315291107, 15.315326491, 15.3153618742, 15.3153972565, 15.3154326379, 15.3154680185, 15.3155033981, 15.315538777, 15.3155741549, 15.315609532, 15.3156449082, 15.3156802835, 15.315715658, 15.3157510316, 15.3157864044, 15.3158217763, 15.3158571473, 15.3158925174, 15.3159278867, 15.3159632551, 15.3159986226, 15.3160339893, 15.3160693551, 15.31610472, 15.3161400841, 15.3161754473, 15.3162108097, 15.3162461711, 15.3162815317, 15.3163168915, 15.3163522504, 15.3163876084, 15.3164229655, 15.3164583218, 15.3164936772, 15.3165290317, 15.3165643854, 15.3165997382, 15.3166350901, 15.3166704412, 15.3167057914, 15.3167411408, 15.3167764892, 15.3168118369, 15.3168471836, 15.3168825295, 15.3169178745, 15.3169532186, 15.3169885619, 15.3170239043, 15.3170592459, 15.3170945866, 15.3171299264, 15.3171652653, 15.3172006034, 15.3172359406, 15.317271277, 15.3173066125, 15.3173419471, 15.3173772809, 15.3174126138, 15.3174479458, 15.317483277, 15.3175186073, 15.3175539367, 15.3175892653, 15.317624593, 15.3176599198, 15.3176952458, 15.3177305709, 15.3177658951, 15.3178012185, 15.317836541, 15.3178718627, 15.3179071834, 15.3179425034, 15.3179778224, 15.3180131406, 15.3180484579, 15.3180837744, 15.31811909, 15.3181544047, 15.3181897186, 15.3182250316, 15.3182603437, 15.318295655, 15.3183309654, 15.3183662749, 15.3184015836, 15.3184368914, 15.3184721984, 15.3185075045, 15.3185428097, 15.3185781141, 15.3186134176, 15.3186487202, 15.318684022, 15.3187193229, 15.3187546229, 15.3187899221, 15.3188252204, 15.3188605179, 15.3188958144, 15.3189311102, 15.318966405, 15.319001699, 15.3190369921, 15.3190722844, 15.3191075758, 15.3191428664, 15.319178156, 15.3192134449, 15.3192487328, 15.3192840199, 15.3193193061, 15.3193545915, 15.319389876, 15.3194251596, 15.3194604424, 15.3194957243, 15.3195310054, 15.3195662856, 15.3196015649, 15.3196368433, 15.3196721209, 15.3197073977, 15.3197426736, 15.3197779486, 15.3198132227, 15.319848496, 15.3198837684, 15.31991904, 15.3199543107, 15.3199895805, 15.3200248495, 15.3200601176, 15.3200953849, 15.3201306512, 15.3201659168, 15.3202011814, 15.3202364452, 15.3202717082, 15.3203069703, 15.3203422315, 15.3203774918, 15.3204127513, 15.32044801, 15.3204832677, 15.3205185246, 15.3205537807, 15.3205890359, 15.3206242902, 15.3206595436, 15.3206947962, 15.320730048, 15.3207652989, 15.3208005489, 15.320835798, 15.3208710463, 15.3209062938, 15.3209415403, 15.320976786, 15.3210120309, 15.3210472749, 15.321082518, 15.3211177603, 15.3211530017, 15.3211882422, 15.3212234819, 15.3212587207, 15.3212939587, 15.3213291958, 15.321364432, 15.3213996674, 15.3214349019, 15.3214701356, 15.3215053684, 15.3215406003, 15.3215758314, 15.3216110616, 15.321646291, 15.3216815195, 15.3217167471, 15.3217519739, 15.3217871998, 15.3218224249, 15.3218576491, 15.3218928724, 15.3219280949, 15.3219633165, 15.3219985373, 15.3220337572, 15.3220689762, 15.3221041944, 15.3221394117, 15.3221746282, 15.3222098437, 15.3222450585, 15.3222802724, 15.3223154854, 15.3223506975, 15.3223859088, 15.3224211193, 15.3224563289, 15.3224915376, 15.3225267455, 15.3225619525, 15.3225971586, 15.3226323639, 15.3226675683, 15.3227027719, 15.3227379746, 15.3227731765, 15.3228083774, 15.3228435776, 15.3228787769, 15.3229139753, 15.3229491728, 15.3229843695, 15.3230195654, 15.3230547603, 15.3230899545, 15.3231251477, 15.3231603401, 15.3231955317, 15.3232307224, 15.3232659122, 15.3233011012, 15.3233362893, 15.3233714765, 15.3234066629, 15.3234418485, 15.3234770332, 15.323512217, 15.3235473999, 15.323582582, 15.3236177633, 15.3236529437, 15.3236881232, 15.3237233019, 15.3237584797, 15.3237936567, 15.3238288328, 15.323864008, 15.3238991824, 15.3239343559, 15.3239695286, 15.3240047004, 15.3240398714, 15.3240750415, 15.3241102107, 15.3241453791, 15.3241805466, 15.3242157133, 15.3242508791, 15.3242860441, 15.3243212082, 15.3243563714, 15.3243915338, 15.3244266953, 15.324461856, 15.3244970158, 15.3245321747, 15.3245673328, 15.3246024901, 15.3246376465, 15.324672802, 15.3247079567, 15.3247431105, 15.3247782635, 15.3248134156, 15.3248485668, 15.3248837172, 15.3249188667, 15.3249540154, 15.3249891632, 15.3250243102, 15.3250594563, 15.3250946016, 15.3251297459, 15.3251648895, 15.3252000322, 15.325235174, 15.325270315, 15.3253054551, 15.3253405943, 15.3253757328, 15.3254108703, 15.325446007, 15.3254811428, 15.3255162778, 15.3255514119, 15.3255865452, 15.3256216776, 15.3256568092, 15.3256919399, 15.3257270697, 15.3257621987, 15.3257973269, 15.3258324541, 15.3258675806, 15.3259027061, 15.3259378309, 15.3259729547, 15.3260080777, 15.3260431999, 15.3260783212, 15.3261134416, 15.3261485612, 15.3261836799, 15.3262187978, 15.3262539148, 15.326289031, 15.3263241463, 15.3263592608, 15.3263943744, 15.3264294871, 15.326464599, 15.3264997101, 15.3265348202, 15.3265699296, 15.326605038, 15.3266401457, 15.3266752524, 15.3267103583, 15.3267454634, 15.3267805676, 15.326815671, 15.3268507735, 15.3268858751, 15.3269209759, 15.3269560758, 15.3269911749, 15.3270262731, 15.3270613705, 15.327096467, 15.3271315627, 15.3271666575, 15.3272017515, 15.3272368446, 15.3272719368, 15.3273070282, 15.3273421187, 15.3273772084, 15.3274122973, 15.3274473853, 15.3274824724, 15.3275175587, 15.3275526441, 15.3275877287, 15.3276228124, 15.3276578952, 15.3276929772, 15.3277280584, 15.3277631387, 15.3277982182, 15.3278332968, 15.3278683745, 15.3279034514, 15.3279385274, 15.3279736026, 15.3280086769, 15.3280437504, 15.3280788231, 15.3281138948, 15.3281489658, 15.3281840358, 15.328219105, 15.3282541734, 15.3282892409, 15.3283243076, 15.3283593734, 15.3283944384, 15.3284295025, 15.3284645657, 15.3284996281, 15.3285346897, 15.3285697504, 15.3286048102, 15.3286398692, 15.3286749273, 15.3287099846, 15.3287450411, 15.3287800966, 15.3288151514, 15.3288502052, 15.3288852583, 15.3289203105, 15.3289553618, 15.3289904123, 15.3290254619, 15.3290605106, 15.3290955586, 15.3291306056, 15.3291656519, 15.3292006972, 15.3292357417, 15.3292707854, 15.3293058282, 15.3293408702, 15.3293759113, 15.3294109515, 15.3294459909, 15.3294810295, 15.3295160672, 15.3295511041, 15.3295861401, 15.3296211752, 15.3296562095, 15.329691243, 15.3297262756, 15.3297613073, 15.3297963382, 15.3298313683, 15.3298663975, 15.3299014258, 15.3299364533, 15.32997148, 15.3300065058, 15.3300415307, 15.3300765548, 15.330111578, 15.3301466004, 15.330181622, 15.3302166427, 15.3302516625, 15.3302866815, 15.3303216997, 15.330356717, 15.3303917334, 15.330426749, 15.3304617637, 15.3304967776, 15.3305317907, 15.3305668029, 15.3306018142, 15.3306368247, 15.3306718344, 15.3307068432, 15.3307418511, 15.3307768582, 15.3308118645, 15.3308468699, 15.3308818744, 15.3309168781, 15.330951881, 15.330986883, 15.3310218841, 15.3310568844, 15.3310918839, 15.3311268825, 15.3311618802, 15.3311968772, 15.3312318732, 15.3312668684, 15.3313018628, 15.3313368563, 15.331371849, 15.3314068408, 15.3314418317, 15.3314768219, 15.3315118111, 15.3315467995, 15.3315817871, 15.3316167738, 15.3316517597, 15.3316867447, 15.3317217289, 15.3317567123, 15.3317916947, 15.3318266764, 15.3318616572, 15.3318966371, 15.3319316162, 15.3319665944, 15.3320015718, 15.3320365484, 15.3320715241, 15.3321064989, 15.3321414729, 15.3321764461, 15.3322114184, 15.3322463898, 15.3322813604, 15.3323163302, 15.3323512991, 15.3323862672, 15.3324212344, 15.3324562008, 15.3324911663, 15.332526131, 15.3325610948, 15.3325960578, 15.3326310199, 15.3326659812, 15.3327009417, 15.3327359012, 15.33277086, 15.3328058179, 15.3328407749, 15.3328757312, 15.3329106865, 15.332945641, 15.3329805947, 15.3330155475, 15.3330504995, 15.3330854506, 15.3331204009, 15.3331553503, 15.3331902989, 15.3332252466, 15.3332601935, 15.3332951396, 15.3333300848, 15.3333650291, 15.3333999726, 15.3334349153, 15.3334698571, 15.3335047981, 15.3335397382, 15.3335746775, 15.3336096159, 15.3336445535, 15.3336794902, 15.3337144261, 15.3337493611, 15.3337842953, 15.3338192287, 15.3338541612, 15.3338890929, 15.3339240237, 15.3339589536, 15.3339938828, 15.334028811, 15.3340637385, 15.3340986651, 15.3341335908, 15.3341685157, 15.3342034397, 15.3342383629, 15.3342732853, 15.3343082068, 15.3343431275, 15.3343780473, 15.3344129663, 15.3344478844, 15.3344828017, 15.3345177182, 15.3345526338, 15.3345875485, 15.3346224624, 15.3346573755, 15.3346922877, 15.3347271991, 15.3347621096, 15.3347970193, 15.3348319281, 15.3348668361, 15.3349017433, 15.3349366496, 15.334971555, 15.3350064596, 15.3350413634, 15.3350762663, 15.3351111684, 15.3351460697, 15.3351809701, 15.3352158696, 15.3352507683, 15.3352856662, 15.3353205632, 15.3353554594, 15.3353903547, 15.3354252492, 15.3354601428, 15.3354950356, 15.3355299276, 15.3355648187, 15.3355997089, 15.3356345984, 15.3356694869, 15.3357043747, 15.3357392616, 15.3357741476, 15.3358090328, 15.3358439172, 15.3358788007, 15.3359136834, 15.3359485652, 15.3359834462, 15.3360183263, 15.3360532056, 15.3360880841, 15.3361229617, 15.3361578385, 15.3361927144, 15.3362275895, 15.3362624637, 15.3362973371, 15.3363322097, 15.3363670814, 15.3364019523, 15.3364368223, 15.3364716915, 15.3365065598, 15.3365414273, 15.336576294, 15.3366111598, 15.3366460247, 15.3366808889, 15.3367157522, 15.3367506146, 15.3367854762, 15.336820337, 15.3368551969, 15.336890056, 15.3369249142, 15.3369597716, 15.3369946281, 15.3370294838, 15.3370643387, 15.3370991927, 15.3371340459, 15.3371688982, 15.3372037497, 15.3372386004, 15.3372734502, 15.3373082991, 15.3373431473, 15.3373779946, 15.337412841, 15.3374476866, 15.3374825314, 15.3375173753, 15.3375522184, 15.3375870606, 15.337621902, 15.3376567425, 15.3376915823, 15.3377264211, 15.3377612592, 15.3377960963, 15.3378309327, 15.3378657682, 15.3379006029, 15.3379354367, 15.3379702697, 15.3380051018, 15.3380399331, 15.3380747636, 15.3381095932, 15.338144422, 15.3381792499, 15.338214077, 15.3382489033, 15.3382837287, 15.3383185532, 15.338353377, 15.3383881999, 15.3384230219, 15.3384578431, 15.3384926635, 15.338527483, 15.3385623017, 15.3385971196, 15.3386319366, 15.3386667528, 15.3387015681, 15.3387363826, 15.3387711962, 15.338806009, 15.338840821, 15.3388756321, 15.3389104424, 15.3389452519, 15.3389800605, 15.3390148683, 15.3390496752, 15.3390844813, 15.3391192865, 15.3391540909, 15.3391888945, 15.3392236972, 15.3392584991, 15.3392933002, 15.3393281004, 15.3393628998, 15.3393976983, 15.339432496, 15.3394672929, 15.3395020889, 15.339536884, 15.3395716784, 15.3396064719, 15.3396412645, 15.3396760564, 15.3397108473, 15.3397456375, 15.3397804268, 15.3398152153, 15.3398500029, 15.3398847897, 15.3399195756, 15.3399543607, 15.339989145, 15.3400239284, 15.340058711, 15.3400934928, 15.3401282737, 15.3401630538, 15.340197833, 15.3402326114, 15.340267389, 15.3403021657, 15.3403369416, 15.3403717166, 15.3404064909, 15.3404412642, 15.3404760368, 15.3405108085, 15.3405455793, 15.3405803493, 15.3406151185, 15.3406498869, 15.3406846544, 15.340719421, 15.3407541869, 15.3407889519, 15.340823716, 15.3408584793, 15.3408932418, 15.3409280034, 15.3409627643, 15.3409975242, 15.3410322833, 15.3410670416, 15.3411017991, 15.3411365557, 15.3411713115, 15.3412060664, 15.3412408205, 15.3412755738, 15.3413103262, 15.3413450778, 15.3413798286, 15.3414145785, 15.3414493276, 15.3414840758, 15.3415188232, 15.3415535698, 15.3415883156, 15.3416230605, 15.3416578045, 15.3416925477, 15.3417272901, 15.3417620317, 15.3417967724, 15.3418315123, 15.3418662513, 15.3419009895, 15.3419357269, 15.3419704634, 15.3420051991, 15.342039934, 15.342074668, 15.3421094012, 15.3421441335, 15.3421788651, 15.3422135957, 15.3422483256, 15.3422830546, 15.3423177828, 15.3423525101, 15.3423872366, 15.3424219623, 15.3424566871, 15.3424914111, 15.3425261342, 15.3425608565, 15.342595578, 15.3426302987, 15.3426650185, 15.3426997375, 15.3427344556, 15.3427691729, 15.3428038894, 15.342838605, 15.3428733198, 15.3429080338, 15.3429427469, 15.3429774592, 15.3430121707, 15.3430468813, 15.3430815911, 15.3431163, 15.3431510082, 15.3431857154, 15.3432204219, 15.3432551275, 15.3432898323, 15.3433245362, 15.3433592393, 15.3433939416, 15.3434286431, 15.3434633437, 15.3434980434, 15.3435327424, 15.3435674405, 15.3436021377, 15.3436368342, 15.3436715298, 15.3437062245, 15.3437409185, 15.3437756116, 15.3438103038, 15.3438449953, 15.3438796858, 15.3439143756, 15.3439490645, 15.3439837526, 15.3440184399, 15.3440531263, 15.3440878119, 15.3441224966, 15.3441571806, 15.3441918637, 15.3442265459, 15.3442612273, 15.3442959079, 15.3443305877, 15.3443652666, 15.3443999447, 15.3444346219, 15.3444692983, 15.3445039739, 15.3445386487, 15.3445733226, 15.3446079957, 15.3446426679, 15.3446773394, 15.3447120099, 15.3447466797, 15.3447813486, 15.3448160167, 15.3448506839, 15.3448853504, 15.3449200159, 15.3449546807, 15.3449893446, 15.3450240077, 15.34505867, 15.3450933314, 15.345127992, 15.3451626517, 15.3451973107, 15.3452319687, 15.345266626, 15.3453012824, 15.345335938, 15.3453705928, 15.3454052467, 15.3454398998, 15.3454745521, 15.3455092035, 15.3455438541, 15.3455785039, 15.3456131528, 15.3456478009, 15.3456824482, 15.3457170946, 15.3457517402, 15.345786385, 15.345821029, 15.3458556721, 15.3458903143, 15.3459249558, 15.3459595964, 15.3459942362, 15.3460288751, 15.3460635133, 15.3460981505, 15.346132787, 15.3461674226, 15.3462020574, 15.3462366914, 15.3462713245, 15.3463059568, 15.3463405883, 15.3463752189, 15.3464098487, 15.3464444777, 15.3464791059, 15.3465137332, 15.3465483596, 15.3465829853, 15.3466176101, 15.3466522341, 15.3466868573, 15.3467214796, 15.3467561011, 15.3467907218, 15.3468253416, 15.3468599606, 15.3468945788, 15.3469291961, 15.3469638126, 15.3469984283, 15.3470330431, 15.3470676572, 15.3471022704, 15.3471368827, 15.3471714942, 15.3472061049, 15.3472407148, 15.3472753238, 15.3473099321, 15.3473445394, 15.347379146, 15.3474137517, 15.3474483566, 15.3474829606, 15.3475175639, 15.3475521663, 15.3475867678, 15.3476213686, 15.3476559685, 15.3476905676, 15.3477251658, 15.3477597632, 15.3477943598, 15.3478289556, 15.3478635505, 15.3478981446, 15.3479327379, 15.3479673303, 15.3480019219, 15.3480365127, 15.3480711027, 15.3481056918, 15.3481402801, 15.3481748675, 15.3482094542, 15.34824404, 15.348278625, 15.3483132091, 15.3483477924, 15.3483823749, 15.3484169566, 15.3484515374, 15.3484861174, 15.3485206966, 15.3485552749, 15.3485898524, 15.3486244291, 15.348659005, 15.34869358, 15.3487281542, 15.3487627276, 15.3487973002, 15.3488318719, 15.3488664428, 15.3489010128, 15.348935582, 15.3489701505, 15.349004718, 15.3490392848, 15.3490738507, 15.3491084158, 15.34914298, 15.3491775435, 15.3492121061, 15.3492466679, 15.3492812288, 15.3493157889, 15.3493503482, 15.3493849067, 15.3494194643, 15.3494540212, 15.3494885771, 15.3495231323, 15.3495576866, 15.3495922401, 15.3496267928, 15.3496613446, 15.3496958957, 15.3497304458, 15.3497649952, 15.3497995437, 15.3498340915, 15.3498686383, 15.3499031844, 15.3499377296, 15.349972274, 15.3500068176, 15.3500413603, 15.3500759023, 15.3501104433, 15.3501449836, 15.3501795231, 15.3502140617, 15.3502485994, 15.3502831364, 15.3503176725, 15.3503522078, 15.3503867423, 15.350421276, 15.3504558088, 15.3504903408, 15.350524872, 15.3505594023, 15.3505939318, 15.3506284605, 15.3506629884, 15.3506975154, 15.3507320416, 15.350766567, 15.3508010916, 15.3508356153, 15.3508701382, 15.3509046603, 15.3509391815, 15.350973702, 15.3510082216, 15.3510427404, 15.3510772583, 15.3511117754, 15.3511462917, 15.3511808072, 15.3512153219, 15.3512498357, 15.3512843487, 15.3513188608, 15.3513533722, 15.3513878827, 15.3514223924, 15.3514569013, 15.3514914093, 15.3515259165, 15.3515604229, 15.3515949285, 15.3516294332, 15.3516639372, 15.3516984403, 15.3517329425, 15.351767444, 15.3518019446, 15.3518364444, 15.3518709433, 15.3519054415, 15.3519399388, 15.3519744353, 15.352008931, 15.3520434258, 15.3520779198, 15.352112413, 15.3521469054, 15.3521813969, 15.3522158876, 15.3522503775, 15.3522848666, 15.3523193548, 15.3523538423, 15.3523883289, 15.3524228146, 15.3524572996, 15.3524917837, 15.352526267, 15.3525607495, 15.3525952311, 15.352629712, 15.352664192, 15.3526986711, 15.3527331495, 15.352767627, 15.3528021037, 15.3528365796, 15.3528710547, 15.3529055289, 15.3529400023, 15.3529744749, 15.3530089467, 15.3530434176, 15.3530778877, 15.353112357, 15.3531468255, 15.3531812931, 15.35321576, 15.353250226, 15.3532846911, 15.3533191555, 15.353353619, 15.3533880817, 15.3534225436, 15.3534570047, 15.3534914649, 15.3535259243, 15.3535603829, 15.3535948407, 15.3536292976, 15.3536637537, 15.353698209, 15.3537326635, 15.3537671172, 15.35380157, 15.353836022, 15.3538704732, 15.3539049236, 15.3539393731, 15.3539738218, 15.3540082697, 15.3540427168, 15.354077163, 15.3541116085, 15.3541460531, 15.3541804968, 15.3542149398, 15.3542493819, 15.3542838233, 15.3543182638, 15.3543527034, 15.3543871423, 15.3544215803, 15.3544560175, 15.3544904539, 15.3545248894, 15.3545593242, 15.3545937581, 15.3546281912, 15.3546626235, 15.3546970549, 15.3547314856, 15.3547659154, 15.3548003444, 15.3548347725, 15.3548691999, 15.3549036264, 15.3549380521, 15.354972477, 15.355006901, 15.3550413243, 15.3550757467, 15.3551101683, 15.355144589, 15.355179009, 15.3552134281, 15.3552478464, 15.3552822639, 15.3553166806, 15.3553510964, 15.3553855114, 15.3554199257, 15.355454339, 15.3554887516, 15.3555231633, 15.3555575743, 15.3555919844, 15.3556263936, 15.3556608021, 15.3556952097, 15.3557296166, 15.3557640225, 15.3557984277, 15.3558328321, 15.3558672356, 15.3559016383, 15.3559360402, 15.3559704413, 15.3560048416, 15.356039241, 15.3560736396, 15.3561080374, 15.3561424344, 15.3561768305, 15.3562112258, 15.3562456204, 15.3562800141, 15.3563144069, 15.356348799, 15.3563831902, 15.3564175806, 15.3564519702, 15.356486359, 15.356520747, 15.3565551341, 15.3565895204, 15.3566239059, 15.3566582906, 15.3566926744, 15.3567270575, 15.3567614397, 15.3567958211, 15.3568302017, 15.3568645814, 15.3568989604, 15.3569333385, 15.3569677158, 15.3570020923, 15.3570364679, 15.3570708428, 15.3571052168, 15.35713959, 15.3571739624, 15.357208334, 15.3572427047, 15.3572770746, 15.3573114438, 15.357345812, 15.3573801795, 15.3574145462, 15.357448912, 15.357483277, 15.3575176412, 15.3575520046, 15.3575863672, 15.3576207289, 15.3576550899, 15.35768945, 15.3577238093, 15.3577581677, 15.3577925254, 15.3578268822, 15.3578612382, 15.3578955934, 15.3579299478, 15.3579643014, 15.3579986541, 15.358033006, 15.3580673571, 15.3581017074, 15.3581360569, 15.3581704056, 15.3582047534, 15.3582391004, 15.3582734466, 15.358307792, 15.3583421366, 15.3583764803, 15.3584108233, 15.3584451654, 15.3584795067, 15.3585138471, 15.3585481868, 15.3585825257, 15.3586168637, 15.3586512009, 15.3586855373, 15.3587198729, 15.3587542076, 15.3587885416, 15.3588228747, 15.358857207, 15.3588915385, 15.3589258692, 15.358960199, 15.3589945281, 15.3590288563, 15.3590631837, 15.3590975103, 15.359131836, 15.359166161, 15.3592004851, 15.3592348085, 15.359269131, 15.3593034527, 15.3593377735, 15.3593720936, 15.3594064128, 15.3594407312, 15.3594750488, 15.3595093656, 15.3595436816, 15.3595779968, 15.3596123111, 15.3596466246, 15.3596809374, 15.3597152492, 15.3597495603, 15.3597838706, 15.35981818, 15.3598524887, 15.3598867965, 15.3599211035, 15.3599554097, 15.359989715, 15.3600240196, 15.3600583233, 15.3600926262, 15.3601269283, 15.3601612296, 15.3601955301, 15.3602298297, 15.3602641286, 15.3602984266, 15.3603327238, 15.3603670202, 15.3604013158, 15.3604356106, 15.3604699045, 15.3605041977, 15.36053849, 15.3605727815, 15.3606070722, 15.360641362, 15.3606756511, 15.3607099393, 15.3607442268, 15.3607785134, 15.3608127992, 15.3608470842, 15.3608813684, 15.3609156517, 15.3609499342, 15.360984216, 15.3610184969, 15.361052777, 15.3610870563, 15.3611213347, 15.3611556124, 15.3611898892, 15.3612241653, 15.3612584405, 15.3612927149, 15.3613269884, 15.3613612612, 15.3613955332, 15.3614298043, 15.3614640746, 15.3614983441, 15.3615326128, 15.3615668807, 15.3616011478, 15.3616354141, 15.3616696795, 15.3617039441, 15.3617382079, 15.3617724709, 15.3618067331, 15.3618409945, 15.3618752551, 15.3619095148, 15.3619437737, 15.3619780319, 15.3620122892, 15.3620465457, 15.3620808013, 15.3621150562, 15.3621493102, 15.3621835635, 15.3622178159, 15.3622520675, 15.3622863183, 15.3623205683, 15.3623548175, 15.3623890658, 15.3624233134, 15.3624575601, 15.362491806, 15.3625260512, 15.3625602954, 15.3625945389, 15.3626287816, 15.3626630235, 15.3626972645, 15.3627315047, 15.3627657442, 15.3627999828, 15.3628342206, 15.3628684575, 15.3629026937, 15.3629369291, 15.3629711636, 15.3630053973, 15.3630396303, 15.3630738624, 15.3631080937, 15.3631423241, 15.3631765538, 15.3632107827, 15.3632450107, 15.363279238, 15.3633134644, 15.36334769, 15.3633819148, 15.3634161388, 15.3634503619, 15.3634845843, 15.3635188059, 15.3635530266, 15.3635872465, 15.3636214656, 15.3636556839, 15.3636899014, 15.3637241181, 15.363758334, 15.363792549, 15.3638267633, 15.3638609767, 15.3638951894, 15.3639294012, 15.3639636122, 15.3639978224, 15.3640320317, 15.3640662403, 15.3641004481, 15.364134655, 15.3641688611, 15.3642030665, 15.364237271, 15.3642714747, 15.3643056776, 15.3643398797, 15.3643740809, 15.3644082814, 15.364442481, 15.3644766799, 15.3645108779, 15.3645450751, 15.3645792715, 15.3646134671, 15.3646476619, 15.3646818559, 15.364716049, 15.3647502414, 15.3647844329, 15.3648186237, 15.3648528136, 15.3648870027, 15.364921191, 15.3649553785, 15.3649895652, 15.365023751, 15.3650579361, 15.3650921203, 15.3651263038, 15.3651604864, 15.3651946682, 15.3652288493, 15.3652630295, 15.3652972088, 15.3653313874, 15.3653655652, 15.3653997422, 15.3654339183, 15.3654680937, 15.3655022682, 15.3655364419, 15.3655706148, 15.3656047869, 15.3656389582, 15.3656731287, 15.3657072984, 15.3657414673, 15.3657756353, 15.3658098026, 15.365843969, 15.3658781346, 15.3659122995, 15.3659464635, 15.3659806267, 15.3660147891, 15.3660489507, 15.3660831114, 15.3661172714, 15.3661514306, 15.3661855889, 15.3662197465, 15.3662539032, 15.3662880591, 15.3663222142, 15.3663563686, 15.3663905221, 15.3664246747, 15.3664588266, 15.3664929777, 15.366527128, 15.3665612774, 15.3665954261, 15.3666295739, 15.3666637209, 15.3666978672, 15.3667320126, 15.3667661572, 15.366800301, 15.366834444, 15.3668685862, 15.3669027275, 15.3669368681, 15.3669710079, 15.3670051468, 15.367039285, 15.3670734223, 15.3671075588, 15.3671416946, 15.3671758295, 15.3672099636, 15.3672440969, 15.3672782294, 15.367312361, 15.3673464919, 15.367380622, 15.3674147512, 15.3674488797, 15.3674830073, 15.3675171342, 15.3675512602, 15.3675853854, 15.3676195099, 15.3676536335, 15.3676877563, 15.3677218783, 15.3677559995, 15.3677901198, 15.3678242394, 15.3678583582, 15.3678924761, 15.3679265933, 15.3679607096, 15.3679948252, 15.3680289399, 15.3680630538, 15.368097167, 15.3681312793, 15.3681653908, 15.3681995015, 15.3682336114, 15.3682677205, 15.3683018288, 15.3683359362, 15.3683700429, 15.3684041488, 15.3684382538, 15.3684723581, 15.3685064615, 15.3685405641, 15.368574666, 15.368608767, 15.3686428672, 15.3686769666, 15.3687110652, 15.368745163, 15.36877926, 15.3688133562, 15.3688474516, 15.3688815462, 15.36891564, 15.3689497329, 15.3689838251, 15.3690179165, 15.369052007, 15.3690860967, 15.3691201857, 15.3691542738, 15.3691883611, 15.3692224477, 15.3692565334, 15.3692906183, 15.3693247024, 15.3693587857, 15.3693928682, 15.3694269499, 15.3694610308, 15.3694951109, 15.3695291901, 15.3695632686, 15.3695973463, 15.3696314231, 15.3696654992, 15.3696995744, 15.3697336489, 15.3697677225, 15.3698017954, 15.3698358674, 15.3698699386, 15.3699040091, 15.3699380787, 15.3699721475, 15.3700062155, 15.3700402827, 15.3700743491, 15.3701084147, 15.3701424795, 15.3701765435, 15.3702106067, 15.370244669, 15.3702787306, 15.3703127914, 15.3703468514, 15.3703809105, 15.3704149689, 15.3704490264, 15.3704830832, 15.3705171391, 15.3705511943, 15.3705852486, 15.3706193021, 15.3706533549, 15.3706874068, 15.3707214579, 15.3707555083, 15.3707895578, 15.3708236065, 15.3708576544, 15.3708917015, 15.3709257478, 15.3709597933, 15.370993838, 15.3710278819, 15.371061925, 15.3710959673, 15.3711300087, 15.3711640494, 15.3711980893, 15.3712321284, 15.3712661666, 15.3713002041, 15.3713342408, 15.3713682766, 15.3714023117, 15.3714363459, 15.3714703794, 15.371504412, 15.3715384439, 15.3715724749, 15.3716065052, 15.3716405346, 15.3716745632, 15.3717085911, 15.3717426181, 15.3717766443, 15.3718106698, 15.3718446944, 15.3718787182, 15.3719127412, 15.3719467634, 15.3719807849, 15.3720148055, 15.3720488253, 15.3720828443, 15.3721168625, 15.3721508799, 15.3721848965, 15.3722189123, 15.3722529273, 15.3722869415, 15.3723209549, 15.3723549675, 15.3723889792, 15.3724229902, 15.3724570004, 15.3724910098, 15.3725250184, 15.3725590262, 15.3725930331, 15.3726270393, 15.3726610447, 15.3726950493, 15.372729053, 15.372763056, 15.3727970582, 15.3728310595, 15.3728650601, 15.3728990599, 15.3729330588, 15.372967057, 15.3730010544, 15.3730350509, 15.3730690467, 15.3731030416, 15.3731370358, 15.3731710292, 15.3732050217, 15.3732390135, 15.3732730044, 15.3733069946, 15.3733409839, 15.3733749725, 15.3734089602, 15.3734429472, 15.3734769333, 15.3735109187, 15.3735449032, 15.373578887, 15.3736128699, 15.3736468521, 15.3736808334, 15.373714814, 15.3737487937, 15.3737827726, 15.3738167508, 15.3738507281, 15.3738847047, 15.3739186804, 15.3739526554, 15.3739866295, 15.3740206029, 15.3740545754, 15.3740885471, 15.3741225181, 15.3741564882, 15.3741904576, 15.3742244261, 15.3742583939, 15.3742923608, 15.374326327, 15.3743602923, 15.3743942569, 15.3744282206, 15.3744621835, 15.3744961457, 15.374530107, 15.3745640676, 15.3745980273, 15.3746319863, 15.3746659444, 15.3746999018, 15.3747338583, 15.3747678141, 15.374801769, 15.3748357232, 15.3748696766, 15.3749036291, 15.3749375809, 15.3749715318, 15.375005482, 15.3750394313, 15.3750733799, 15.3751073277, 15.3751412746, 15.3751752208, 15.3752091662, 15.3752431107, 15.3752770545, 15.3753109975, 15.3753449396, 15.375378881, 15.3754128216, 15.3754467614, 15.3754807003, 15.3755146385, 15.3755485759, 15.3755825125, 15.3756164483, 15.3756503833, 15.3756843174, 15.3757182508, 15.3757521834, 15.3757861152, 15.3758200462, 15.3758539764, 15.3758879058, 15.3759218344, 15.3759557622, 15.3759896892, 15.3760236154, 15.3760575408, 15.3760914655, 15.3761253893, 15.3761593123, 15.3761932345, 15.3762271559, 15.3762610766, 15.3762949964, 15.3763289154, 15.3763628336, 15.3763967511, 15.3764306677, 15.3764645836, 15.3764984986, 15.3765324128, 15.3765663263, 15.3766002389, 15.3766341508, 15.3766680619, 15.3767019721, 15.3767358816, 15.3767697902, 15.3768036981, 15.3768376052, 15.3768715115, 15.3769054169, 15.3769393216, 15.3769732255, 15.3770071286, 15.3770410309, 15.3770749324, 15.3771088331, 15.377142733, 15.3771766321, 15.3772105304, 15.3772444279, 15.3772783246, 15.3773122205, 15.3773461157, 15.37738001, 15.3774139035, 15.3774477962, 15.3774816882, 15.3775155793, 15.3775494697, 15.3775833592, 15.377617248, 15.3776511359, 15.3776850231, 15.3777189095, 15.377752795, 15.3777866798, 15.3778205638, 15.377854447, 15.3778883293, 15.3779222109, 15.3779560917, 15.3779899717, 15.3780238509, 15.3780577293, 15.3780916069, 15.3781254838, 15.3781593598, 15.378193235, 15.3782271094, 15.3782609831, 15.3782948559, 15.378328728, 15.3783625992, 15.3783964697, 15.3784303393, 15.3784642082, 15.3784980762, 15.3785319435, 15.37856581, 15.3785996757, 15.3786335406, 15.3786674047, 15.378701268, 15.3787351305, 15.3787689922, 15.3788028531, 15.3788367132, 15.3788705725, 15.3789044311, 15.3789382888, 15.3789721457, 15.3790060019, 15.3790398572, 15.3790737118, 15.3791075656, 15.3791414185, 15.3791752707, 15.3792091221, 15.3792429727, 15.3792768225, 15.3793106715, 15.3793445197, 15.3793783671, 15.3794122137, 15.3794460595, 15.3794799045, 15.3795137488, 15.3795475922, 15.3795814349, 15.3796152767, 15.3796491178, 15.379682958, 15.3797167975, 15.3797506362, 15.3797844741, 15.3798183111, 15.3798521474, 15.3798859829, 15.3799198176, 15.3799536516, 15.3799874847, 15.380021317, 15.3800551485, 15.3800889793, 15.3801228092, 15.3801566384, 15.3801904667, 15.3802242943, 15.3802581211, 15.3802919471, 15.3803257723, 15.3803595967, 15.3803934203, 15.3804272431, 15.3804610651, 15.3804948863, 15.3805287067, 15.3805625264, 15.3805963452, 15.3806301633, 15.3806639805, 15.380697797, 15.3807316127, 15.3807654276, 15.3807992417, 15.380833055, 15.3808668675, 15.3809006792, 15.3809344901, 15.3809683002, 15.3810021096, 15.3810359181, 15.3810697258, 15.3811035328, 15.381137339, 15.3811711443, 15.3812049489, 15.3812387527, 15.3812725557, 15.3813063579, 15.3813401593, 15.38137396, 15.3814077598, 15.3814415588, 15.3814753571, 15.3815091545, 15.3815429512, 15.3815767471, 15.3816105421, 15.3816443364, 15.3816781299, 15.3817119226, 15.3817457145, 15.3817795057, 15.381813296, 15.3818470855, 15.3818808743, 15.3819146622, 15.3819484494, 15.3819822358, 15.3820160214, 15.3820498061, 15.3820835901, 15.3821173734, 15.3821511558, 15.3821849374, 15.3822187182, 15.3822524983, 15.3822862775, 15.382320056, 15.3823538337, 15.3823876105, 15.3824213866, 15.3824551619, 15.3824889364, 15.3825227102, 15.3825564831, 15.3825902552, 15.3826240266, 15.3826577971, 15.3826915669, 15.3827253359, 15.3827591041, 15.3827928715, 15.3828266381, 15.3828604039, 15.3828941689, 15.3829279331, 15.3829616966, 15.3829954592, 15.3830292211, 15.3830629822, 15.3830967424, 15.3831305019, 15.3831642606, 15.3831980185, 15.3832317757, 15.383265532, 15.3832992875, 15.3833330423, 15.3833667963, 15.3834005494, 15.3834343018, 15.3834680534, 15.3835018042, 15.3835355542, 15.3835693035, 15.3836030519, 15.3836367995, 15.3836705464, 15.3837042925, 15.3837380378, 15.3837717822, 15.3838055259, 15.3838392689, 15.383873011, 15.3839067523, 15.3839404929, 15.3839742326, 15.3840079716, 15.3840417098, 15.3840754471, 15.3841091837, 15.3841429195, 15.3841766546, 15.3842103888, 15.3842441222, 15.3842778549, 15.3843115868, 15.3843453178, 15.3843790481, 15.3844127776, 15.3844465063, 15.3844802343, 15.3845139614, 15.3845476877, 15.3845814133, 15.3846151381, 15.3846488621, 15.3846825852, 15.3847163076, 15.3847500293, 15.3847837501, 15.3848174701, 15.3848511894, 15.3848849078, 15.3849186255, 15.3849523424, 15.3849860585, 15.3850197738, 15.3850534883, 15.3850872021, 15.385120915, 15.3851546272, 15.3851883386, 15.3852220491, 15.3852557589, 15.385289468, 15.3853231762, 15.3853568836, 15.3853905903, 15.3854242961, 15.3854580012, 15.3854917055, 15.385525409, 15.3855591117, 15.3855928136, 15.3856265147, 15.3856602151, 15.3856939146, 15.3857276134, 15.3857613114, 15.3857950086, 15.385828705, 15.3858624006, 15.3858960955, 15.3859297895, 15.3859634828, 15.3859971753, 15.386030867, 15.3860645579, 15.386098248, 15.3861319373, 15.3861656259, 15.3861993136, 15.3862330006, 15.3862666868, 15.3863003722, 15.3863340568, 15.3863677406, 15.3864014236, 15.3864351059, 15.3864687874, 15.386502468, 15.3865361479, 15.386569827, 15.3866035054, 15.3866371829, 15.3866708596, 15.3867045356, 15.3867382108, 15.3867718852, 15.3868055588, 15.3868392316, 15.3868729036, 15.3869065749, 15.3869402453, 15.386973915, 15.3870075839, 15.387041252, 15.3870749193, 15.3871085858, 15.3871422516, 15.3871759165, 15.3872095807, 15.3872432441, 15.3872769067, 15.3873105685, 15.3873442296, 15.3873778898, 15.3874115493, 15.387445208, 15.3874788658, 15.3875125229, 15.3875461793, 15.3875798348, 15.3876134896, 15.3876471435, 15.3876807967, 15.3877144491, 15.3877481007, 15.3877817515, 15.3878154016, 15.3878490508, 15.3878826993, 15.387916347, 15.3879499939, 15.38798364, 15.3880172853, 15.3880509299, 15.3880845737, 15.3881182166, 15.3881518588, 15.3881855002, 15.3882191409, 15.3882527807, 15.3882864198, 15.388320058, 15.3883536955, 15.3883873322, 15.3884209681, 15.3884546033, 15.3884882376, 15.3885218712, 15.388555504, 15.388589136, 15.3886227672, 15.3886563976, 15.3886900273, 15.3887236561, 15.3887572842, 15.3887909115, 15.388824538, 15.3888581638, 15.3888917887, 15.3889254129, 15.3889590362, 15.3889926588, 15.3890262806, 15.3890599017, 15.3890935219, 15.3891271414, 15.38916076, 15.3891943779, 15.389227995, 15.3892616114, 15.3892952269, 15.3893288417, 15.3893624556, 15.3893960688, 15.3894296812, 15.3894632929, 15.3894969037, 15.3895305138, 15.3895641231, 15.3895977315, 15.3896313393, 15.3896649462, 15.3896985523, 15.3897321577, 15.3897657623, 15.3897993661, 15.3898329691, 15.3898665713, 15.3899001728, 15.3899337734, 15.3899673733, 15.3900009724, 15.3900345707, 15.3900681683, 15.390101765, 15.390135361, 15.3901689562, 15.3902025506, 15.3902361442, 15.3902697371, 15.3903033291, 15.3903369204, 15.3903705109, 15.3904041006, 15.3904376896, 15.3904712777, 15.3905048651, 15.3905384517, 15.3905720375, 15.3906056225, 15.3906392067, 15.3906727902, 15.3907063729, 15.3907399548, 15.3907735359, 15.3908071162, 15.3908406958, 15.3908742745, 15.3909078525, 15.3909414297, 15.3909750062, 15.3910085818, 15.3910421567, 15.3910757307, 15.391109304, 15.3911428766, 15.3911764483, 15.3912100193, 15.3912435894, 15.3912771588, 15.3913107274, 15.3913442953, 15.3913778623, 15.3914114286, 15.3914449941, 15.3914785588, 15.3915121227, 15.3915456859, 15.3915792482, 15.3916128098, 15.3916463706, 15.3916799306, 15.3917134899, 15.3917470483, 15.391780606, 15.3918141629, 15.391847719, 15.3918812744, 15.3919148289, 15.3919483827, 15.3919819357, 15.3920154879, 15.3920490394, 15.39208259, 15.3921161399, 15.392149689, 15.3921832373, 15.3922167848, 15.3922503316, 15.3922838776, 15.3923174228, 15.3923509672, 15.3923845108, 15.3924180537, 15.3924515958, 15.3924851371, 15.3925186776, 15.3925522173, 15.3925857563, 15.3926192945, 15.3926528319, 15.3926863685, 15.3927199043, 15.3927534394, 15.3927869737, 15.3928205072, 15.3928540399, 15.3928875718, 15.392921103, 15.3929546334, 15.392988163, 15.3930216918, 15.3930552198, 15.3930887471, 15.3931222736, 15.3931557993, 15.3931893242, 15.3932228484, 15.3932563717, 15.3932898943, 15.3933234162, 15.3933569372, 15.3933904574, 15.3934239769, 15.3934574956, 15.3934910135, 15.3935245307, 15.393558047, 15.3935915626, 15.3936250774, 15.3936585915, 15.3936921047, 15.3937256172, 15.3937591289, 15.3937926398, 15.3938261499, 15.3938596593, 15.3938931678, 15.3939266756, 15.3939601827, 15.3939936889, 15.3940271944, 15.3940606991, 15.394094203, 15.3941277061, 15.3941612084, 15.39419471, 15.3942282108, 15.3942617108, 15.3942952101, 15.3943287085, 15.3943622062, 15.3943957031, 15.3944291993, 15.3944626946, 15.3944961892, 15.394529683, 15.394563176, 15.3945966682, 15.3946301597, 15.3946636504, 15.3946971403, 15.3947306294, 15.3947641178, 15.3947976054, 15.3948310922, 15.3948645782, 15.3948980634, 15.3949315479, 15.3949650316, 15.3949985145, 15.3950319966, 15.395065478, 15.3950989586, 15.3951324384, 15.3951659174, 15.3951993957, 15.3952328731, 15.3952663498, 15.3952998258, 15.3953333009, 15.3953667753, 15.3954002489, 15.3954337217, 15.3954671937, 15.395500665, 15.3955341355, 15.3955676052, 15.3956010741, 15.3956345423, 15.3956680096, 15.3957014762, 15.3957349421, 15.3957684071, 15.3958018714, 15.3958353349, 15.3958687976, 15.3959022596, 15.3959357207, 15.3959691811, 15.3960026407, 15.3960360996, 15.3960695576, 15.3961030149, 15.3961364714, 15.3961699272, 15.3962033821, 15.3962368363, 15.3962702897, 15.3963037424, 15.3963371942, 15.3963706453, 15.3964040956, 15.3964375452, 15.3964709939, 15.3965044419, 15.3965378891, 15.3965713355, 15.3966047812, 15.3966382261, 15.3966716702, 15.3967051135, 15.396738556, 15.3967719978, 15.3968054388, 15.3968388791, 15.3968723185, 15.3969057572, 15.3969391951, 15.3969726322, 15.3970060686, 15.3970395042, 15.397072939, 15.397106373, 15.3971398062, 15.3971732387, 15.3972066704, 15.3972401013, 15.3972735315, 15.3973069609, 15.3973403895, 15.3973738173, 15.3974072444, 15.3974406707, 15.3974740962, 15.3975075209, 15.3975409449, 15.397574368, 15.3976077905, 15.3976412121, 15.3976746329, 15.397708053, 15.3977414723, 15.3977748909, 15.3978083087, 15.3978417256, 15.3978751419, 15.3979085573, 15.397941972, 15.3979753859, 15.398008799, 15.3980422113, 15.3980756229, 15.3981090337, 15.3981424437, 15.398175853, 15.3982092615, 15.3982426692, 15.3982760761, 15.3983094823, 15.3983428876, 15.3983762923, 15.3984096961, 15.3984430992, 15.3984765014, 15.398509903, 15.3985433037, 15.3985767037, 15.3986101029, 15.3986435013, 15.398676899, 15.3987102958, 15.3987436919, 15.3987770873, 15.3988104818, 15.3988438756, 15.3988772686, 15.3989106609, 15.3989440523, 15.398977443, 15.399010833, 15.3990442221, 15.3990776105, 15.3991109981, 15.3991443849, 15.399177771, 15.3992111563, 15.3992445408, 15.3992779245, 15.3993113075, 15.3993446897, 15.3993780711, 15.3994114517, 15.3994448316, 15.3994782107, 15.3995115891, 15.3995449666, 15.3995783434, 15.3996117194, 15.3996450947, 15.3996784692, 15.3997118429, 15.3997452158, 15.3997785879, 15.3998119593, 15.3998453299, 15.3998786998, 15.3999120689, 15.3999454371, 15.3999788047, 15.4000121714, 15.4000455374, 15.4000789026, 15.4001122671, 15.4001456307, 15.4001789936, 15.4002123558, 15.4002457171, 15.4002790777, 15.4003124375, 15.4003457965, 15.4003791548, 15.4004125123, 15.400445869, 15.400479225, 15.4005125802, 15.4005459346, 15.4005792882, 15.4006126411, 15.4006459932, 15.4006793445, 15.4007126951, 15.4007460448, 15.4007793939, 15.4008127421, 15.4008460896, 15.4008794363, 15.4009127822, 15.4009461274, 15.4009794718, 15.4010128154, 15.4010461582, 15.4010795003, 15.4011128416, 15.4011461822, 15.4011795219, 15.4012128609, 15.4012461991, 15.4012795366, 15.4013128733, 15.4013462092, 15.4013795443, 15.4014128787, 15.4014462123, 15.4014795452, 15.4015128772, 15.4015462085, 15.401579539, 15.4016128688, 15.4016461978, 15.401679526, 15.4017128534, 15.4017461801, 15.401779506, 15.4018128311, 15.4018461555, 15.4018794791, 15.4019128019, 15.401946124, 15.4019794453, 15.4020127658, 15.4020460855, 15.4020794045, 15.4021127227, 15.4021460401, 15.4021793568, 15.4022126727, 15.4022459878, 15.4022793022, 15.4023126158, 15.4023459286, 15.4023792407, 15.402412552, 15.4024458625, 15.4024791722, 15.4025124812, 15.4025457894, 15.4025790968, 15.4026124035, 15.4026457094, 15.4026790145, 15.4027123189, 15.4027456225, 15.4027789253, 15.4028122274, 15.4028455287, 15.4028788292, 15.4029121289, 15.4029454279, 15.4029787261, 15.4030120236, 15.4030453203, 15.4030786162, 15.4031119113, 15.4031452057, 15.4031784993, 15.4032117921, 15.4032450842, 15.4032783755, 15.403311666, 15.4033449558, 15.4033782448, 15.403411533, 15.4034448204, 15.4034781071, 15.403511393, 15.4035446782, 15.4035779626, 15.4036112462, 15.4036445291, 15.4036778111, 15.4037110925, 15.403744373, 15.4037776528, 15.4038109318, 15.40384421, 15.4038774875, 15.4039107642, 15.4039440402, 15.4039773153, 15.4040105897, 15.4040438634, 15.4040771362, 15.4041104083, 15.4041436797, 15.4041769502, 15.4042102201, 15.4042434891, 15.4042767574, 15.4043100249, 15.4043432916, 15.4043765576, 15.4044098228, 15.4044430872, 15.4044763508, 15.4045096137, 15.4045428759, 15.4045761372, 15.4046093978, 15.4046426577, 15.4046759167, 15.404709175, 15.4047424326, 15.4047756893, 15.4048089453, 15.4048422006, 15.404875455, 15.4049087087, 15.4049419616, 15.4049752138, 15.4050084652, 15.4050417158, 15.4050749657, 15.4051082148, 15.4051414631, 15.4051747107, 15.4052079575, 15.4052412035, 15.4052744488, 15.4053076933, 15.405340937, 15.40537418, 15.4054074222, 15.4054406637, 15.4054739043, 15.4055071442, 15.4055403834, 15.4055736218, 15.4056068594, 15.4056400962, 15.4056733323, 15.4057065676, 15.4057398021, 15.4057730359, 15.4058062689, 15.4058395012, 15.4058727327, 15.4059059634, 15.4059391933, 15.4059724225, 15.406005651, 15.4060388786, 15.4060721055, 15.4061053316, 15.406138557, 15.4061717816, 15.4062050054, 15.4062382285, 15.4062714508, 15.4063046723, 15.4063378931, 15.4063711131, 15.4064043323, 15.4064375508, 15.4064707685, 15.4065039855, 15.4065372017, 15.4065704171, 15.4066036317, 15.4066368456, 15.4066700587, 15.4067032711, 15.4067364827, 15.4067696935, 15.4068029036, 15.4068361129, 15.4068693214, 15.4069025292, 15.4069357362, 15.4069689424, 15.4070021479, 15.4070353526, 15.4070685566, 15.4071017598, 15.4071349622, 15.4071681639, 15.4072013647, 15.4072345649, 15.4072677642, 15.4073009628, 15.4073341607, 15.4073673578, 15.4074005541, 15.4074337496, 15.4074669444, 15.4075001384, 15.4075333317, 15.4075665242, 15.4075997159, 15.4076329069, 15.4076660971, 15.4076992865, 15.4077324752, 15.4077656631, 15.4077988502, 15.4078320366, 15.4078652222, 15.4078984071, 15.4079315912, 15.4079647745, 15.4079979571, 15.4080311389, 15.4080643199, 15.4080975002, 15.4081306797, 15.4081638585, 15.4081970364, 15.4082302137, 15.4082633901, 15.4082965658, 15.4083297408, 15.4083629149, 15.4083960884, 15.408429261, 15.4084624329, 15.408495604, 15.4085287744, 15.408561944, 15.4085951128, 15.4086282809, 15.4086614482, 15.4086946147, 15.4087277805, 15.4087609455, 15.4087941098, 15.4088272733, 15.408860436, 15.408893598, 15.4089267592, 15.4089599197, 15.4089930793, 15.4090262383, 15.4090593964, 15.4090925538, 15.4091257105, 15.4091588663, 15.4091920215, 15.4092251758, 15.4092583294, 15.4092914822, 15.4093246343, 15.4093577856, 15.4093909361, 15.4094240859, 15.4094572349, 15.4094903832, 15.4095235307, 15.4095566774, 15.4095898234, 15.4096229686, 15.4096561131, 15.4096892567, 15.4097223997, 15.4097555418, 15.4097886832, 15.4098218239, 15.4098549638, 15.4098881029, 15.4099212412, 15.4099543788, 15.4099875157, 15.4100206518, 15.4100537871, 15.4100869216, 15.4101200554, 15.4101531885, 15.4101863207, 15.4102194522, 15.410252583, 15.410285713, 15.4103188422, 15.4103519707, 15.4103850984, 15.4104182253, 15.4104513515, 15.4104844769, 15.4105176016, 15.4105507255, 15.4105838486, 15.410616971, 15.4106500926, 15.4106832135, 15.4107163336, 15.4107494529, 15.4107825715, 15.4108156893, 15.4108488064, 15.4108819227, 15.4109150382, 15.410948153, 15.410981267, 15.4110143803, 15.4110474928, 15.4110806045, 15.4111137155, 15.4111468257, 15.4111799352, 15.4112130439, 15.4112461518, 15.411279259, 15.4113123654, 15.4113454711, 15.411378576, 15.4114116801, 15.4114447835, 15.4114778861, 15.411510988, 15.4115440891, 15.4115771895, 15.411610289, 15.4116433879, 15.4116764859, 15.4117095832, 15.4117426798, 15.4117757756, 15.4118088706, 15.4118419649, 15.4118750584, 15.4119081511, 15.4119412431, 15.4119743344, 15.4120074248, 15.4120405146, 15.4120736035, 15.4121066917, 15.4121397791, 15.4121728658, 15.4122059517, 15.4122390369, 15.4122721213, 15.412305205, 15.4123382878, 15.41237137, 15.4124044513, 15.4124375319, 15.4124706118, 15.4125036909, 15.4125367692, 15.4125698468, 15.4126029236, 15.4126359997, 15.412669075, 15.4127021495, 15.4127352233, 15.4127682963, 15.4128013686, 15.4128344401, 15.4128675109, 15.4129005809, 15.4129336501, 15.4129667186, 15.4129997863, 15.4130328533, 15.4130659195, 15.4130989849, 15.4131320496, 15.4131651135, 15.4131981767, 15.4132312391, 15.4132643008, 15.4132973617, 15.4133304218, 15.4133634812, 15.4133965398, 15.4134295977, 15.4134626548, 15.4134957112, 15.4135287668, 15.4135618216, 15.4135948757, 15.413627929, 15.4136609816, 15.4136940334, 15.4137270845, 15.4137601348, 15.4137931843, 15.4138262331, 15.4138592811, 15.4138923284, 15.4139253749, 15.4139584206, 15.4139914656, 15.4140245099, 15.4140575534, 15.4140905961, 15.4141236381, 15.4141566793, 15.4141897197, 15.4142227594, 15.4142557984, 15.4142888366, 15.414321874, 15.4143549107, 15.4143879466, 15.4144209817, 15.4144540162, 15.4144870498, 15.4145200827, 15.4145531148, 15.4145861462, 15.4146191768, 15.4146522067, 15.4146852358, 15.4147182642, 15.4147512918, 15.4147843186, 15.4148173447, 15.41485037, 15.4148833946, 15.4149164184, 15.4149494415, 15.4149824638, 15.4150154853, 15.4150485061, 15.4150815262, 15.4151145454, 15.415147564, 15.4151805817, 15.4152135988, 15.415246615, 15.4152796305, 15.4153126453, 15.4153456593, 15.4153786725, 15.415411685, 15.4154446967, 15.4154777077, 15.4155107179, 15.4155437274, 15.4155767361, 15.415609744, 15.4156427512, 15.4156757577, 15.4157087634, 15.4157417683, 15.4157747725, 15.4158077759, 15.4158407786, 15.4158737805, 15.4159067816, 15.415939782, 15.4159727817, 15.4160057806, 15.4160387787, 15.4160717761, 15.4161047727, 15.4161377686, 15.4161707637, 15.4162037581, 15.4162367517, 15.4162697445, 15.4163027366, 15.416335728, 15.4163687186, 15.4164017084, 15.4164346975, 15.4164676858, 15.4165006734, 15.4165336602, 15.4165666463, 15.4165996316, 15.4166326161, 15.4166655999, 15.416698583, 15.4167315653, 15.4167645468, 15.4167975276, 15.4168305076, 15.4168634869, 15.4168964654, 15.4169294432, 15.4169624202, 15.4169953965, 15.417028372, 15.4170613468, 15.4170943208, 15.417127294, 15.4171602665, 15.4171932382, 15.4172262092, 15.4172591795, 15.417292149, 15.4173251177, 15.4173580857, 15.4173910529, 15.4174240193, 15.4174569851, 15.41748995, 15.4175229142, 15.4175558777, 15.4175888404, 15.4176218023, 15.4176547635, 15.417687724, 15.4177206837, 15.4177536426, 15.4177866008, 15.4178195582, 15.4178525149, 15.4178854708, 15.417918426, 15.4179513804, 15.4179843341, 15.418017287, 15.4180502391, 15.4180831906, 15.4181161412, 15.4181490911, 15.4181820403, 15.4182149887, 15.4182479363, 15.4182808832, 15.4183138293, 15.4183467747, 15.4183797194, 15.4184126632, 15.4184456064, 15.4184785488, 15.4185114904, 15.4185444313, 15.4185773714, 15.4186103108, 15.4186432494, 15.4186761872, 15.4187091244, 15.4187420607, 15.4187749963, 15.4188079312, 15.4188408653, 15.4188737987, 15.4189067313, 15.4189396631, 15.4189725942, 15.4190055246, 15.4190384542, 15.419071383, 15.4191043111, 15.4191372384, 15.419170165, 15.4192030909, 15.419236016, 15.4192689403, 15.4193018639, 15.4193347867, 15.4193677088, 15.4194006301, 15.4194335507, 15.4194664705, 15.4194993896, 15.4195323079, 15.4195652255, 15.4195981423, 15.4196310584, 15.4196639737, 15.4196968883, 15.4197298021, 15.4197627152, 15.4197956275, 15.4198285391, 15.4198614499, 15.41989436, 15.4199272693, 15.4199601778, 15.4199930857, 15.4200259927, 15.420058899, 15.4200918046, 15.4201247094, 15.4201576135, 15.4201905168, 15.4202234193, 15.4202563212, 15.4202892222, 15.4203221225, 15.4203550221, 15.4203879209, 15.420420819, 15.4204537163, 15.4204866128, 15.4205195086, 15.4205524037, 15.420585298, 15.4206181916, 15.4206510844, 15.4206839764, 15.4207168677, 15.4207497583, 15.4207826481, 15.4208155372, 15.4208484255, 15.420881313, 15.4209141998, 15.4209470859, 15.4209799712, 15.4210128558, 15.4210457396, 15.4210786227, 15.421111505, 15.4211443865, 15.4211772673, 15.4212101474, 15.4212430267, 15.4212759053, 15.4213087831, 15.4213416602, 15.4213745365, 15.4214074121, 15.4214402869, 15.421473161, 15.4215060343, 15.4215389068, 15.4215717787, 15.4216046497, 15.4216375201, 15.4216703897, 15.4217032585, 15.4217361266, 15.4217689939, 15.4218018605, 15.4218347263, 15.4218675914, 15.4219004557, 15.4219333193, 15.4219661821, 15.4219990442, 15.4220319056, 15.4220647662, 15.422097626, 15.4221304851, 15.4221633435, 15.4221962011, 15.4222290579, 15.422261914, 15.4222947694, 15.422327624, 15.4223604778, 15.4223933309, 15.4224261833, 15.4224590349, 15.4224918858, 15.4225247359, 15.4225575853, 15.4225904339, 15.4226232818, 15.4226561289, 15.4226889753, 15.4227218209, 15.4227546658, 15.4227875099, 15.4228203533, 15.4228531959, 15.4228860378, 15.422918879, 15.4229517194, 15.422984559, 15.4230173979, 15.4230502361, 15.4230830735, 15.4231159101, 15.4231487461, 15.4231815812, 15.4232144156, 15.4232472493, 15.4232800822, 15.4233129144, 15.4233457458, 15.4233785765, 15.4234114065, 15.4234442356, 15.4234770641, 15.4235098918, 15.4235427187, 15.4235755449, 15.4236083704, 15.4236411951, 15.423674019, 15.4237068422, 15.4237396647, 15.4237724864, 15.4238053074, 15.4238381276, 15.4238709471, 15.4239037658, 15.4239365838, 15.4239694011, 15.4240022176, 15.4240350333, 15.4240678483, 15.4241006626, 15.4241334761, 15.4241662888, 15.4241991008, 15.4242319121, 15.4242647226, 15.4242975324, 15.4243303414, 15.4243631497, 15.4243959572, 15.424428764, 15.4244615701, 15.4244943754, 15.4245271799, 15.4245599837, 15.4245927868, 15.4246255891, 15.4246583907, 15.4246911915, 15.4247239916, 15.4247567909, 15.4247895895, 15.4248223874, 15.4248551844, 15.4248879808, 15.4249207764, 15.4249535713, 15.4249863654, 15.4250191587, 15.4250519514, 15.4250847432, 15.4251175344, 15.4251503248, 15.4251831144, 15.4252159033, 15.4252486915, 15.4252814789, 15.4253142655, 15.4253470514, 15.4253798366, 15.425412621, 15.4254454047, 15.4254781876, 15.4255109698, 15.4255437513, 15.425576532, 15.4256093119, 15.4256420912, 15.4256748696, 15.4257076473, 15.4257404243, 15.4257732005, 15.425805976, 15.4258387508, 15.4258715248, 15.425904298, 15.4259370705, 15.4259698423, 15.4260026133, 15.4260353836, 15.4260681531, 15.4261009219, 15.42613369, 15.4261664573, 15.4261992238, 15.4262319896, 15.4262647547, 15.426297519, 15.4263302826, 15.4263630454, 15.4263958075, 15.4264285689, 15.4264613295, 15.4264940893, 15.4265268485, 15.4265596068, 15.4265923645, 15.4266251213, 15.4266578775, 15.4266906329, 15.4267233875, 15.4267561414, 15.4267888946, 15.426821647, 15.4268543987, 15.4268871496, 15.4269198998, 15.4269526493, 15.426985398, 15.4270181459, 15.4270508932, 15.4270836396, 15.4271163854, 15.4271491303, 15.4271818746, 15.4272146181, 15.4272473608, 15.4272801029, 15.4273128441, 15.4273455847, 15.4273783245, 15.4274110635, 15.4274438018, 15.4274765394, 15.4275092762, 15.4275420122, 15.4275747476, 15.4276074822, 15.427640216, 15.4276729491, 15.4277056815, 15.4277384131, 15.4277711439, 15.4278038741, 15.4278366035, 15.4278693321, 15.42790206, 15.4279347872, 15.4279675136, 15.4280002393, 15.4280329642, 15.4280656884, 15.4280984118, 15.4281311345, 15.4281638565, 15.4281965777, 15.4282292982, 15.4282620179, 15.4282947369, 15.4283274552, 15.4283601727, 15.4283928895, 15.4284256055, 15.4284583208, 15.4284910353, 15.4285237491, 15.4285564622, 15.4285891745, 15.4286218861, 15.4286545969, 15.428687307, 15.4287200164, 15.428752725, 15.4287854329, 15.42881814, 15.4288508464, 15.428883552, 15.4289162569, 15.4289489611, 15.4289816645, 15.4290143672, 15.4290470691, 15.4290797703, 15.4291124708, 15.4291451705, 15.4291778695, 15.4292105677, 15.4292432652, 15.4292759619, 15.4293086579, 15.4293413532, 15.4293740477, 15.4294067415, 15.4294394346, 15.4294721269, 15.4295048184, 15.4295375092, 15.4295701993, 15.4296028887, 15.4296355773, 15.4296682651, 15.4297009523, 15.4297336386, 15.4297663243, 15.4297990092, 15.4298316933, 15.4298643767, 15.4298970594, 15.4299297414, 15.4299624225, 15.429995103, 15.4300277827, 15.4300604617, 15.4300931399, 15.4301258174, 15.4301584942, 15.4301911702, 15.4302238455, 15.43025652, 15.4302891938, 15.4303218668, 15.4303545392, 15.4303872107, 15.4304198816, 15.4304525517, 15.430485221, 15.4305178896, 15.4305505575, 15.4305832246, 15.430615891, 15.4306485567, 15.4306812216, 15.4307138858, 15.4307465492, 15.4307792119, 15.4308118739, 15.4308445351, 15.4308771956, 15.4309098553, 15.4309425143, 15.4309751726, 15.4310078301, 15.4310404869, 15.4310731429, 15.4311057982, 15.4311384528, 15.4311711066, 15.4312037597, 15.4312364121, 15.4312690637, 15.4313017146, 15.4313343647, 15.4313670141, 15.4313996627, 15.4314323106, 15.4314649578, 15.4314976043, 15.43153025, 15.4315628949, 15.4315955391, 15.4316281826, 15.4316608254, 15.4316934674, 15.4317261086, 15.4317587492, 15.431791389, 15.431824028, 15.4318566663, 15.4318893039, 15.4319219407, 15.4319545768, 15.4319872122, 15.4320198468, 15.4320524807, 15.4320851138, 15.4321177462, 15.4321503779, 15.4321830088, 15.432215639, 15.4322482685, 15.4322808972, 15.4323135252, 15.4323461524, 15.4323787789, 15.4324114047, 15.4324440297, 15.432476654, 15.4325092776, 15.4325419004, 15.4325745225, 15.4326071438, 15.4326397644, 15.4326723843, 15.4327050034, 15.4327376218, 15.4327702394, 15.4328028564, 15.4328354725, 15.432868088, 15.4329007027, 15.4329333166, 15.4329659299, 15.4329985424, 15.4330311541, 15.4330637651, 15.4330963754, 15.4331289849, 15.4331615937, 15.4331942018, 15.4332268091, 15.4332594157, 15.4332920216, 15.4333246267, 15.4333572311, 15.4333898347, 15.4334224377, 15.4334550398, 15.4334876413, 15.433520242, 15.4335528419, 15.4335854412, 15.4336180396, 15.4336506374, 15.4336832344, 15.4337158307, 15.4337484262, 15.433781021, 15.4338136151, 15.4338462084, 15.433878801, 15.4339113929, 15.433943984, 15.4339765744, 15.4340091641, 15.434041753, 15.4340743412, 15.4341069286, 15.4341395153, 15.4341721013, 15.4342046865, 15.434237271, 15.4342698548, 15.4343024378, 15.4343350201, 15.4343676017, 15.4344001825, 15.4344327626, 15.4344653419, 15.4344979205, 15.4345304984, 15.4345630756, 15.434595652, 15.4346282276, 15.4346608026, 15.4346933768, 15.4347259502, 15.434758523, 15.434791095, 15.4348236662, 15.4348562367, 15.4348888065, 15.4349213756, 15.4349539439, 15.4349865115, 15.4350190783, 15.4350516444, 15.4350842098, 15.4351167745, 15.4351493384, 15.4351819015, 15.435214464, 15.4352470257, 15.4352795866, 15.4353121469, 15.4353447064, 15.4353772651, 15.4354098232, 15.4354423805, 15.435474937, 15.4355074928, 15.4355400479, 15.4355726023, 15.4356051559, 15.4356377088, 15.4356702609, 15.4357028124, 15.435735363, 15.435767913, 15.4358004622, 15.4358330107, 15.4358655584, 15.4358981054, 15.4359306517, 15.4359631972, 15.4359957421, 15.4360282861, 15.4360608295, 15.4360933721, 15.4361259139, 15.4361584551, 15.4361909955, 15.4362235352, 15.4362560741, 15.4362886123, 15.4363211498, 15.4363536865, 15.4363862225, 15.4364187578, 15.4364512923, 15.4364838261, 15.4365163592, 15.4365488915, 15.4365814231, 15.4366139539, 15.4366464841, 15.4366790135, 15.4367115421, 15.4367440701, 15.4367765973, 15.4368091237, 15.4368416495, 15.4368741745, 15.4369066987, 15.4369392223, 15.436971745, 15.4370042671, 15.4370367884, 15.437069309, 15.4371018289, 15.437134348, 15.4371668664, 15.4371993841, 15.437231901, 15.4372644172, 15.4372969327, 15.4373294474, 15.4373619614, 15.4373944747, 15.4374269873, 15.4374594991, 15.4374920101, 15.4375245205, 15.4375570301, 15.4375895389, 15.4376220471, 15.4376545545, 15.4376870612, 15.4377195671, 15.4377520723, 15.4377845768, 15.4378170805, 15.4378495836, 15.4378820858, 15.4379145874, 15.4379470882, 15.4379795883, 15.4380120877, 15.4380445863, 15.4380770842, 15.4381095813, 15.4381420777, 15.4381745734, 15.4382070684, 15.4382395626, 15.4382720561, 15.4383045489, 15.4383370409, 15.4383695322, 15.4384020228, 15.4384345126, 15.4384670017, 15.4384994901, 15.4385319778, 15.4385644647, 15.4385969509, 15.4386294363, 15.438661921, 15.438694405, 15.4387268883, 15.4387593708, 15.4387918526, 15.4388243336, 15.438856814, 15.4388892936, 15.4389217724, 15.4389542506, 15.438986728, 15.4390192046, 15.4390516806, 15.4390841558, 15.4391166303, 15.439149104, 15.4391815771, 15.4392140493, 15.4392465209, 15.4392789917, 15.4393114618, 15.4393439312, 15.4393763998, 15.4394088677, 15.4394413349, 15.4394738013, 15.439506267, 15.439538732, 15.4395711963, 15.4396036598, 15.4396361226, 15.4396685846, 15.439701046, 15.4397335066, 15.4397659664, 15.4397984256, 15.439830884, 15.4398633417, 15.4398957986, 15.4399282548, 15.4399607103, 15.4399931651, 15.4400256191, 15.4400580724, 15.440090525, 15.4401229768, 15.4401554279, 15.4401878783, 15.4402203279, 15.4402527768, 15.440285225, 15.4403176725, 15.4403501192, 15.4403825652, 15.4404150105, 15.440447455, 15.4404798988, 15.4405123419, 15.4405447842, 15.4405772259, 15.4406096667, 15.4406421069, 15.4406745463, 15.440706985, 15.440739423, 15.4407718603, 15.4408042968, 15.4408367326, 15.4408691676, 15.4409016019, 15.4409340355, 15.4409664684, 15.4409989005, 15.4410313319, 15.4410637626, 15.4410961926, 15.4411286218, 15.4411610503, 15.4411934781, 15.4412259051, 15.4412583314, 15.441290757, 15.4413231818, 15.441355606, 15.4413880293, 15.441420452, 15.4414528739, 15.4414852952, 15.4415177156, 15.4415501354, 15.4415825544, 15.4416149727, 15.4416473903, 15.4416798071, 15.4417122232, 15.4417446386, 15.4417770532, 15.4418094671, 15.4418418803, 15.4418742928, 15.4419067045, 15.4419391156, 15.4419715258, 15.4420039354, 15.4420363442, 15.4420687523, 15.4421011597, 15.4421335663, 15.4421659722, 15.4421983774, 15.4422307819, 15.4422631856, 15.4422955886, 15.4423279909, 15.4423603924, 15.4423927932, 15.4424251933, 15.4424575927, 15.4424899913, 15.4425223892, 15.4425547864, 15.4425871829, 15.4426195786, 15.4426519736, 15.4426843679, 15.4427167614, 15.4427491542, 15.4427815463, 15.4428139377, 15.4428463283, 15.4428787182, 15.4429111074, 15.4429434958, 15.4429758836, 15.4430082706, 15.4430406568, 15.4430730424, 15.4431054272, 15.4431378113, 15.4431701947, 15.4432025773, 15.4432349592, 15.4432673404, 15.4432997208, 15.4433321006, 15.4433644796, 15.4433968579, 15.4434292354, 15.4434616122, 15.4434939883, 15.4435263637, 15.4435587383, 15.4435911123, 15.4436234854, 15.4436558579, 15.4436882296, 15.4437206007, 15.4437529709, 15.4437853405, 15.4438177093, 15.4438500774, 15.4438824448, 15.4439148115, 15.4439471774, 15.4439795426, 15.4440119071, 15.4440442708, 15.4440766338, 15.4441089961, 15.4441413577, 15.4441737186, 15.4442060787, 15.4442384381, 15.4442707967, 15.4443031547, 15.4443355119, 15.4443678684, 15.4444002242, 15.4444325792, 15.4444649335, 15.4444972871, 15.44452964, 15.4445619921, 15.4445943435, 15.4446266942, 15.4446590442, 15.4446913934, 15.4447237419, 15.4447560897, 15.4447884368, 15.4448207831, 15.4448531287, 15.4448854736, 15.4449178177, 15.4449501612, 15.4449825039, 15.4450148459, 15.4450471871, 15.4450795277, 15.4451118675, 15.4451442066, 15.4451765449, 15.4452088825, 15.4452412195, 15.4452735556, 15.4453058911, 15.4453382258, 15.4453705598, 15.4454028931, 15.4454352257, 15.4454675575, 15.4454998886, 15.445532219, 15.4455645487, 15.4455968776, 15.4456292058, 15.4456615333, 15.4456938601, 15.4457261861, 15.4457585115, 15.445790836, 15.4458231599, 15.4458554831, 15.4458878055, 15.4459201272, 15.4459524481, 15.4459847684, 15.4460170879, 15.4460494067, 15.4460817248, 15.4461140421, 15.4461463588, 15.4461786747, 15.4462109899, 15.4462433043, 15.446275618, 15.4463079311, 15.4463402433, 15.4463725549, 15.4464048657, 15.4464371758, 15.4464694852, 15.4465017939, 15.4465341018, 15.4465664091, 15.4465987156, 15.4466310213, 15.4466633264, 15.4466956307, 15.4467279343, 15.4467602372, 15.4467925393, 15.4468248408, 15.4468571415, 15.4468894415, 15.4469217407, 15.4469540393, 15.4469863371, 15.4470186342, 15.4470509306, 15.4470832262, 15.4471155211, 15.4471478153, 15.4471801088, 15.4472124016, 15.4472446936, 15.4472769849, 15.4473092755, 15.4473415654, 15.4473738545, 15.4474061429, 15.4474384306, 15.4474707176, 15.4475030039, 15.4475352894, 15.4475675742, 15.4475998583, 15.4476321416, 15.4476644243, 15.4476967062, 15.4477289874, 15.4477612679, 15.4477935476, 15.4478258266, 15.447858105, 15.4478903825, 15.4479226594, 15.4479549355, 15.447987211, 15.4480194857, 15.4480517596, 15.4480840329, 15.4481163054, 15.4481485772, 15.4481808483, 15.4482131187, 15.4482453883, 15.4482776572, 15.4483099254, 15.4483421929, 15.4483744597, 15.4484067257, 15.448438991, 15.4484712556, 15.4485035195, 15.4485357826, 15.448568045, 15.4486003067, 15.4486325677, 15.448664828, 15.4486970875, 15.4487293464, 15.4487616045, 15.4487938618, 15.4488261185, 15.4488583744, 15.4488906296, 15.4489228841, 15.4489551379, 15.4489873909, 15.4490196433, 15.4490518949, 15.4490841458, 15.4491163959, 15.4491486454, 15.4491808941, 15.4492131421, 15.4492453894, 15.4492776359, 15.4493098818, 15.4493421269, 15.4493743713, 15.449406615, 15.4494388579, 15.4494711002, 15.4495033417, 15.4495355825, 15.4495678226, 15.4496000619, 15.4496323006, 15.4496645385, 15.4496967757, 15.4497290121, 15.4497612479, 15.4497934829, 15.4498257172, 15.4498579508, 15.4498901837, 15.4499224159, 15.4499546473, 15.449986878, 15.450019108, 15.4500513373, 15.4500835658, 15.4501157937, 15.4501480208, 15.4501802472, 15.4502124728, 15.4502446978, 15.450276922, 15.4503091455, 15.4503413683, 15.4503735904, 15.4504058118, 15.4504380324, 15.4504702523, 15.4505024715, 15.45053469, 15.4505669077, 15.4505991248, 15.4506313411, 15.4506635567, 15.4506957716, 15.4507279857, 15.4507601992, 15.4507924119, 15.4508246239, 15.4508568352, 15.4508890457, 15.4509212556, 15.4509534647, 15.4509856731, 15.4510178808, 15.4510500878, 15.451082294, 15.4511144996, 15.4511467044, 15.4511789085, 15.4512111118, 15.4512433145, 15.4512755164, 15.4513077176, 15.4513399181, 15.4513721179, 15.451404317, 15.4514365153, 15.4514687129, 15.4515009099, 15.451533106, 15.4515653015, 15.4515974963, 15.4516296903, 15.4516618836, 15.4516940762, 15.4517262681, 15.4517584592, 15.4517906497, 15.4518228394, 15.4518550284, 15.4518872167, 15.4519194043, 15.4519515911, 15.4519837772, 15.4520159626, 15.4520481473, 15.4520803313, 15.4521125146, 15.4521446971, 15.4521768789, 15.45220906, 15.4522412404, 15.4522734201, 15.4523055991, 15.4523377773, 15.4523699548, 15.4524021316, 15.4524343077, 15.452466483, 15.4524986577, 15.4525308316, 15.4525630048, 15.4525951773, 15.4526273491, 15.4526595202, 15.4526916905, 15.4527238601, 15.452756029, 15.4527881972, 15.4528203647, 15.4528525314, 15.4528846975, 15.4529168628, 15.4529490274, 15.4529811913, 15.4530133545, 15.4530455169, 15.4530776787, 15.4531098397, 15.453142, 15.4531741596, 15.4532063184, 15.4532384766, 15.453270634, 15.4533027907, 15.4533349467, 15.453367102, 15.4533992566, 15.4534314104, 15.4534635636, 15.453495716, 15.4535278677, 15.4535600187, 15.4535921689, 15.4536243185, 15.4536564673, 15.4536886154, 15.4537207628, 15.4537529095, 15.4537850555, 15.4538172007, 15.4538493453, 15.4538814891, 15.4539136322, 15.4539457746, 15.4539779163, 15.4540100572, 15.4540421975, 15.454074337, 15.4541064758, 15.4541386139, 15.4541707513, 15.4542028879, 15.4542350239, 15.4542671591, 15.4542992936, 15.4543314274, 15.4543635605, 15.4543956929, 15.4544278245, 15.4544599555, 15.4544920857, 15.4545242152, 15.454556344, 15.454588472, 15.4546205994, 15.454652726, 15.454684852, 15.4547169772, 15.4547491017, 15.4547812254, 15.4548133485, 15.4548454709, 15.4548775925, 15.4549097134, 15.4549418336, 15.4549739531, 15.4550060719, 15.4550381899, 15.4550703073, 15.4551024239, 15.4551345398, 15.455166655, 15.4551987695, 15.4552308833, 15.4552629963, 15.4552951087, 15.4553272203, 15.4553593312, 15.4553914414, 15.4554235509, 15.4554556597, 15.4554877677, 15.455519875, 15.4555519817, 15.4555840876, 15.4556161928, 15.4556482973, 15.455680401, 15.4557125041, 15.4557446064, 15.455776708, 15.4558088089, 15.4558409091, 15.4558730086, 15.4559051074, 15.4559372054, 15.4559693028, 15.4560013994, 15.4560334953, 15.4560655905, 15.456097685, 15.4561297787, 15.4561618718, 15.4561939641, 15.4562260557, 15.4562581467, 15.4562902369, 15.4563223263, 15.4563544151, 15.4563865032, 15.4564185905, 15.4564506771, 15.4564827631, 15.4565148483, 15.4565469327, 15.4565790165, 15.4566110996, 15.4566431819, 15.4566752636, 15.4567073445, 15.4567394247, 15.4567715042, 15.456803583, 15.456835661, 15.4568677384, 15.456899815, 15.4569318909, 15.4569639662, 15.4569960407, 15.4570281145, 15.4570601875, 15.4570922599, 15.4571243315, 15.4571564025, 15.4571884727, 15.4572205422, 15.457252611, 15.4572846791, 15.4573167465, 15.4573488131, 15.4573808791, 15.4574129443, 15.4574450088, 15.4574770726, 15.4575091357, 15.4575411981, 15.4575732598, 15.4576053207, 15.457637381, 15.4576694405, 15.4577014993, 15.4577335575, 15.4577656149, 15.4577976715, 15.4578297275, 15.4578617828, 15.4578938373, 15.4579258911, 15.4579579443, 15.4579899967, 15.4580220484, 15.4580540994, 15.4580861496, 15.4581181992, 15.4581502481, 15.4581822962, 15.4582143436, 15.4582463903, 15.4582784363, 15.4583104816, 15.4583425262, 15.4583745701, 15.4584066132, 15.4584386557, 15.4584706974, 15.4585027384, 15.4585347787, 15.4585668183, 15.4585988572, 15.4586308954, 15.4586629329, 15.4586949696, 15.4587270057, 15.458759041, 15.4587910756, 15.4588231095, 15.4588551427, 15.4588871752, 15.458919207, 15.458951238, 15.4589832684, 15.459015298, 15.4590473269, 15.4590793552, 15.4591113827, 15.4591434095, 15.4591754356, 15.4592074609, 15.4592394856, 15.4592715095, 15.4593035328, 15.4593355553, 15.4593675771, 15.4593995982, 15.4594316186, 15.4594636383, 15.4594956573, 15.4595276756, 15.4595596931, 15.45959171, 15.4596237261, 15.4596557415, 15.4596877562, 15.4597197702, 15.4597517835, 15.4597837961, 15.459815808, 15.4598478192, 15.4598798296, 15.4599118393, 15.4599438484, 15.4599758567, 15.4600078643, 15.4600398712, 15.4600718774, 15.4601038829, 15.4601358876, 15.4601678917, 15.4601998951, 15.4602318977, 15.4602638996, 15.4602959009, 15.4603279014, 15.4603599012, 15.4603919003, 15.4604238986, 15.4604558963, 15.4604878933, 15.4605198895, 15.4605518851, 15.4605838799, 15.460615874, 15.4606478674, 15.4606798601, 15.4607118521, 15.4607438434, 15.460775834, 15.4608078239, 15.460839813, 15.4608718015, 15.4609037892, 15.4609357762, 15.4609677626, 15.4609997482, 15.4610317331, 15.4610637173, 15.4610957008, 15.4611276835, 15.4611596656, 15.461191647, 15.4612236276, 15.4612556076, 15.4612875868, 15.4613195653, 15.4613515431, 15.4613835202, 15.4614154966, 15.4614474723, 15.4614794473, 15.4615114216, 15.4615433951, 15.461575368, 15.4616073401, 15.4616393115, 15.4616712823, 15.4617032523, 15.4617352216, 15.4617671902, 15.4617991581, 15.4618311253, 15.4618630918, 15.4618950575, 15.4619270226, 15.4619589869, 15.4619909506, 15.4620229135, 15.4620548757, 15.4620868373, 15.4621187981, 15.4621507582, 15.4621827176, 15.4622146763, 15.4622466342, 15.4622785915, 15.4623105481, 15.4623425039, 15.4623744591, 15.4624064135, 15.4624383673, 15.4624703203, 15.4625022726, 15.4625342242, 15.4625661751, 15.4625981253, 15.4626300748, 15.4626620236, 15.4626939716, 15.462725919, 15.4627578657, 15.4627898116, 15.4628217569, 15.4628537014, 15.4628856452, 15.4629175883, 15.4629495307, 15.4629814725, 15.4630134134, 15.4630453537, 15.4630772933, 15.4631092322, 15.4631411704, 15.4631731078, 15.4632050446, 15.4632369806, 15.463268916, 15.4633008506, 15.4633327845, 15.4633647178, 15.4633966503, 15.4634285821, 15.4634605132, 15.4634924436, 15.4635243733, 15.4635563023, 15.4635882305, 15.4636201581, 15.463652085, 15.4636840111, 15.4637159366, 15.4637478613, 15.4637797853, 15.4638117087, 15.4638436313, 15.4638755532, 15.4639074744, 15.4639393949, 15.4639713147, 15.4640032338, 15.4640351522, 15.4640670699, 15.4640989868, 15.4641309031, 15.4641628187, 15.4641947335, 15.4642266477, 15.4642585611, 15.4642904739, 15.4643223859, 15.4643542972, 15.4643862078, 15.4644181177, 15.4644500269, 15.4644819354, 15.4645138432, 15.4645457503, 15.4645776567, 15.4646095624, 15.4646414674, 15.4646733716, 15.4647052752, 15.4647371781, 15.4647690802, 15.4648009817, 15.4648328824, 15.4648647824, 15.4648966818, 15.4649285804, 15.4649604783, 15.4649923755, 15.465024272, 15.4650561678, 15.4650880629, 15.4651199573, 15.465151851, 15.465183744, 15.4652156363, 15.4652475278, 15.4652794187, 15.4653113089, 15.4653431983, 15.4653750871, 15.4654069751, 15.4654388625, 15.4654707491, 15.4655026351, 15.4655345203, 15.4655664048, 15.4655982886, 15.4656301717, 15.4656620542, 15.4656939359, 15.4657258169, 15.4657576972, 15.4657895768, 15.4658214556, 15.4658533338, 15.4658852113, 15.4659170881, 15.4659489642, 15.4659808395, 15.4660127142, 15.4660445881, 15.4660764614, 15.4661083339, 15.4661402058, 15.4661720769, 15.4662039474, 15.4662358171, 15.4662676861, 15.4662995545, 15.4663314221, 15.466363289, 15.4663951552, 15.4664270207, 15.4664588855, 15.4664907496, 15.466522613, 15.4665544757, 15.4665863377, 15.466618199, 15.4666500596, 15.4666819195, 15.4667137786, 15.4667456371, 15.4667774949, 15.466809352, 15.4668412083, 15.466873064, 15.4669049189, 15.4669367732, 15.4669686267, 15.4670004796, 15.4670323317, 15.4670641832, 15.4670960339, 15.4671278839, 15.4671597333, 15.4671915819, 15.4672234298, 15.467255277, 15.4672871236, 15.4673189694, 15.4673508145, 15.4673826589, 15.4674145026, 15.4674463456, 15.4674781879, 15.4675100295, 15.4675418704, 15.4675737106, 15.4676055501, 15.4676373889, 15.467669227, 15.4677010643, 15.467732901, 15.467764737, 15.4677965723, 15.4678284068, 15.4678602407, 15.4678920739, 15.4679239063, 15.4679557381, 15.4679875692, 15.4680193995, 15.4680512292, 15.4680830581, 15.4681148864, 15.4681467139, 15.4681785408, 15.4682103669, 15.4682421924, 15.4682740171, 15.4683058411, 15.4683376645, 15.4683694871, 15.468401309, 15.4684331303, 15.4684649508, 15.4684967706, 15.4685285898, 15.4685604082, 15.4685922259, 15.4686240429, 15.4686558592, 15.4686876749, 15.4687194898, 15.468751304, 15.4687831175, 15.4688149303, 15.4688467424, 15.4688785538, 15.4689103645, 15.4689421745, 15.4689739838, 15.4690057924, 15.4690376003, 15.4690694075, 15.469101214, 15.4691330198, 15.4691648249, 15.4691966293, 15.469228433, 15.469260236, 15.4692920383, 15.4693238399, 15.4693556408, 15.469387441, 15.4694192405, 15.4694510392, 15.4694828373, 15.4695146347, 15.4695464314, 15.4695782274, 15.4696100227, 15.4696418172, 15.4696736111, 15.4697054043, 15.4697371968, 15.4697689886, 15.4698007796, 15.46983257, 15.4698643597, 15.4698961487, 15.4699279369, 15.4699597245, 15.4699915114, 15.4700232976, 15.4700550831, 15.4700868678, 15.4701186519, 15.4701504353, 15.4701822179, 15.4702139999, 15.4702457812, 15.4702775618, 15.4703093416, 15.4703411208, 15.4703728993, 15.4704046771, 15.4704364541, 15.4704682305, 15.4705000062, 15.4705317812, 15.4705635554, 15.470595329, 15.4706271019, 15.4706588741, 15.4706906455, 15.4707224163, 15.4707541864, 15.4707859558, 15.4708177244, 15.4708494924, 15.4708812597, 15.4709130263, 15.4709447922, 15.4709765573, 15.4710083218, 15.4710400856, 15.4710718487, 15.4711036111, 15.4711353727, 15.4711671337, 15.471198894, 15.4712306536, 15.4712624125, 15.4712941707, 15.4713259282, 15.4713576849, 15.471389441, 15.4714211964, 15.4714529511, 15.4714847051, 15.4715164584, 15.471548211, 15.4715799629, 15.4716117141, 15.4716434646, 15.4716752144, 15.4717069635, 15.4717387119, 15.4717704596, 15.4718022066, 15.4718339529, 15.4718656985, 15.4718974434, 15.4719291876, 15.4719609312, 15.471992674, 15.4720244161, 15.4720561575, 15.4720878982, 15.4721196382, 15.4721513776, 15.4721831162, 15.4722148541, 15.4722465913, 15.4722783279, 15.4723100637, 15.4723417988, 15.4723735333, 15.472405267, 15.4724370001, 15.4724687324, 15.472500464, 15.472532195, 15.4725639252, 15.4725956548, 15.4726273836, 15.4726591118, 15.4726908392, 15.472722566, 15.4727542921, 15.4727860174, 15.4728177421, 15.4728494661, 15.4728811893, 15.4729129119, 15.4729446338, 15.472976355, 15.4730080754, 15.4730397952, 15.4730715143, 15.4731032327, 15.4731349504, 15.4731666674, 15.4731983837, 15.4732300993, 15.4732618142, 15.4732935284, 15.4733252419, 15.4733569547, 15.4733886668, 15.4734203782, 15.473452089, 15.473483799, 15.4735155083, 15.4735472169, 15.4735789249, 15.4736106321, 15.4736423386, 15.4736740445, 15.4737057496, 15.4737374541, 15.4737691578, 15.4738008609, 15.4738325632, 15.4738642649, 15.4738959659, 15.4739276661, 15.4739593657, 15.4739910646, 15.4740227627, 15.4740544602, 15.474086157, 15.4741178531, 15.4741495485, 15.4741812432, 15.4742129372, 15.4742446305, 15.4742763231, 15.474308015, 15.4743397062, 15.4743713968, 15.4744030866, 15.4744347757, 15.4744664641, 15.4744981519, 15.4745298389, 15.4745615252, 15.4745932109, 15.4746248958, 15.4746565801, 15.4746882637, 15.4747199465, 15.4747516287, 15.4747833102, 15.4748149909, 15.474846671, 15.4748783504, 15.4749100291, 15.4749417071, 15.4749733844, 15.475005061, 15.4750367369, 15.4750684121, 15.4751000866, 15.4751317605, 15.4751634336, 15.475195106, 15.4752267777, 15.4752584488, 15.4752901191, 15.4753217888, 15.4753534577, 15.475385126, 15.4754167936, 15.4754484604, 15.4754801266, 15.4755117921, 15.4755434569, 15.4755751209, 15.4756067843, 15.475638447, 15.475670109, 15.4757017704, 15.475733431, 15.4757650909, 15.4757967501, 15.4758284086, 15.4758600665, 15.4758917236, 15.4759233801, 15.4759550358, 15.4759866909, 15.4760183452, 15.4760499989, 15.4760816519, 15.4761133042, 15.4761449557, 15.4761766066, 15.4762082568, 15.4762399063, 15.4762715551, 15.4763032032, 15.4763348507, 15.4763664974, 15.4763981434, 15.4764297888, 15.4764614334, 15.4764930773, 15.4765247206, 15.4765563632, 15.476588005, 15.4766196462, 15.4766512867, 15.4766829265, 15.4767145655, 15.4767462039, 15.4767778416, 15.4768094787, 15.476841115, 15.4768727506, 15.4769043855, 15.4769360197, 15.4769676533, 15.4769992861, 15.4770309183, 15.4770625497, 15.4770941805, 15.4771258106, 15.47715744, 15.4771890686, 15.4772206966, 15.4772523239, 15.4772839505, 15.4773155765, 15.4773472017, 15.4773788262, 15.47741045, 15.4774420732, 15.4774736956, 15.4775053174, 15.4775369384, 15.4775685588, 15.4776001785, 15.4776317975, 15.4776634157, 15.4776950333, 15.4777266502, 15.4777582664, 15.477789882, 15.4778214968, 15.4778531109, 15.4778847244, 15.4779163371, 15.4779479491, 15.4779795605, 15.4780111712, 15.4780427812, 15.4780743904, 15.478105999, 15.4781376069, 15.4781692141, 15.4782008206, 15.4782324265, 15.4782640316, 15.478295636, 15.4783272398, 15.4783588428, 15.4783904452, 15.4784220468, 15.4784536478, 15.4784852481, 15.4785168477, 15.4785484466, 15.4785800448, 15.4786116423, 15.4786432391, 15.4786748352, 15.4787064307, 15.4787380254, 15.4787696195, 15.4788012128, 15.4788328055, 15.4788643975, 15.4788959888, 15.4789275794, 15.4789591693, 15.4789907585, 15.479022347, 15.4790539348, 15.479085522, 15.4791171084, 15.4791486942, 15.4791802792, 15.4792118636, 15.4792434473, 15.4792750303, 15.4793066125, 15.4793381941, 15.4793697751, 15.4794013553, 15.4794329348, 15.4794645137, 15.4794960918, 15.4795276693, 15.479559246, 15.4795908221, 15.4796223975, 15.4796539722, 15.4796855462, 15.4797171195, 15.4797486921, 15.479780264, 15.4798118353, 15.4798434058, 15.4798749757, 15.4799065448, 15.4799381133, 15.4799696811, 15.4800012482, 15.4800328146, 15.4800643803, 15.4800959453, 15.4801275096, 15.4801590733, 15.4801906362, 15.4802221985, 15.4802537601, 15.4802853209, 15.4803168811, 15.4803484406, 15.4803799994, 15.4804115575, 15.480443115, 15.4804746717, 15.4805062277, 15.4805377831, 15.4805693378, 15.4806008917, 15.480632445, 15.4806639976, 15.4806955495, 15.4807271007, 15.4807586513, 15.4807902011, 15.4808217502, 15.4808532987, 15.4808848465, 15.4809163935, 15.4809479399, 15.4809794856, 15.4810110306, 15.4810425749, 15.4810741186, 15.4811056615, 15.4811372037, 15.4811687453, 15.4812002862, 15.4812318263, 15.4812633658, 15.4812949046, 15.4813264427, 15.4813579802, 15.4813895169, 15.4814210529, 15.4814525883, 15.4814841229, 15.4815156569, 15.4815471902, 15.4815787228, 15.4816102547, 15.4816417859, 15.4816733164, 15.4817048463, 15.4817363754, 15.4817679039, 15.4817994317, 15.4818309587, 15.4818624851, 15.4818940108, 15.4819255359, 15.4819570602, 15.4819885838, 15.4820201068, 15.482051629, 15.4820831506, 15.4821146715, 15.4821461917, 15.4821777112, 15.48220923, 15.4822407481, 15.4822722656, 15.4823037823, 15.4823352984, 15.4823668138, 15.4823983284, 15.4824298424, 15.4824613558, 15.4824928684, 15.4825243803, 15.4825558915, 15.4825874021, 15.482618912, 15.4826504212, 15.4826819296, 15.4827134374, 15.4827449446, 15.482776451, 15.4828079567, 15.4828394618, 15.4828709661, 15.4829024698, 15.4829339728, 15.4829654751, 15.4829969767, 15.4830284776, 15.4830599779, 15.4830914774, 15.4831229763, 15.4831544745, 15.4831859719, 15.4832174687, 15.4832489648, 15.4832804603, 15.483311955, 15.483343449, 15.4833749424, 15.4834064351, 15.4834379271, 15.4834694184, 15.483500909, 15.4835323989, 15.4835638881, 15.4835953767, 15.4836268645, 15.4836583517, 15.4836898382, 15.483721324, 15.4837528091, 15.4837842935, 15.4838157773, 15.4838472603, 15.4838787427, 15.4839102244, 15.4839417053, 15.4839731856, 15.4840046653, 15.4840361442, 15.4840676224, 15.4840991, 15.4841305769, 15.484162053, 15.4841935285, 15.4842250033, 15.4842564775, 15.4842879509, 15.4843194236, 15.4843508957, 15.4843823671, 15.4844138378, 15.4844453078, 15.4844767771, 15.4845082457, 15.4845397137, 15.4845711809, 15.4846026475, 15.4846341134, 15.4846655786, 15.4846970431, 15.4847285069, 15.48475997, 15.4847914325, 15.4848228943, 15.4848543553, 15.4848858157, 15.4849172754, 15.4849487345, 15.4849801928, 15.4850116505, 15.4850431074, 15.4850745637, 15.4851060193, 15.4851374742, 15.4851689284, 15.485200382, 15.4852318348, 15.485263287, 15.4852947384, 15.4853261892, 15.4853576393, 15.4853890888, 15.4854205375, 15.4854519856, 15.4854834329, 15.4855148796, 15.4855463256, 15.4855777709, 15.4856092155, 15.4856406595, 15.4856721027, 15.4857035453, 15.4857349872, 15.4857664284, 15.4857978689, 15.4858293087, 15.4858607478, 15.4858921863, 15.4859236241, 15.4859550612, 15.4859864976, 15.4860179333, 15.4860493683, 15.4860808027, 15.4861122363, 15.4861436693, 15.4861751016, 15.4862065332, 15.4862379641, 15.4862693943, 15.4863008239, 15.4863322528, 15.486363681, 15.4863951085, 15.4864265353, 15.4864579614, 15.4864893868, 15.4865208116, 15.4865522357, 15.4865836591, 15.4866150818, 15.4866465038, 15.4866779251, 15.4867093458, 15.4867407658, 15.486772185, 15.4868036036, 15.4868350216, 15.4868664388, 15.4868978553, 15.4869292712, 15.4869606864, 15.4869921009, 15.4870235147, 15.4870549278, 15.4870863403, 15.487117752, 15.4871491631, 15.4871805735, 15.4872119832, 15.4872433922, 15.4872748006, 15.4873062082, 15.4873376152, 15.4873690215, 15.4874004271, 15.487431832, 15.4874632363, 15.4874946398, 15.4875260427, 15.4875574449, 15.4875888464, 15.4876202472, 15.4876516473, 15.4876830468, 15.4877144456, 15.4877458437, 15.4877772411, 15.4878086378, 15.4878400338, 15.4878714292, 15.4879028238, 15.4879342178, 15.4879656111, 15.4879970038, 15.4880283957, 15.488059787, 15.4880911775, 15.4881225674, 15.4881539566, 15.4881853452, 15.488216733, 15.4882481202, 15.4882795066, 15.4883108924, 15.4883422775, 15.488373662, 15.4884050457, 15.4884364288, 15.4884678111, 15.4884991928, 15.4885305739, 15.4885619542, 15.4885933338, 15.4886247128, 15.4886560911, 15.4886874687, 15.4887188456, 15.4887502218, 15.4887815974, 15.4888129723, 15.4888443465, 15.48887572, 15.4889070928, 15.4889384649, 15.4889698364, 15.4890012072, 15.4890325773, 15.4890639467, 15.4890953154, 15.4891266835, 15.4891580508, 15.4891894175, 15.4892207835, 15.4892521488, 15.4892835135, 15.4893148774, 15.4893462407, 15.4893776033, 15.4894089652, 15.4894403265, 15.489471687, 15.4895030469, 15.4895344061, 15.4895657646, 15.4895971224, 15.4896284795, 15.489659836, 15.4896911918, 15.4897225469, 15.4897539013, 15.489785255, 15.4898166081, 15.4898479604, 15.4898793121, 15.4899106631, 15.4899420135, 15.4899733631, 15.4900047121, 15.4900360604, 15.490067408, 15.4900987549, 15.4901301011, 15.4901614467, 15.4901927916, 15.4902241358, 15.4902554793, 15.4902868221, 15.4903181643, 15.4903495057, 15.4903808465, 15.4904121866, 15.4904435261, 15.4904748648, 15.4905062029, 15.4905375403, 15.490568877, 15.490600213, 15.4906315484, 15.490662883, 15.490694217, 15.4907255503, 15.4907568829, 15.4907882149, 15.4908195462, 15.4908508767, 15.4908822066, 15.4909135359, 15.4909448644, 15.4909761923, 15.4910075195, 15.491038846, 15.4910701718, 15.4911014969, 15.4911328214, 15.4911641452, 15.4911954683, 15.4912267907, 15.4912581124, 15.4912894335, 15.4913207539, 15.4913520736, 15.4913833926, 15.4914147109, 15.4914460286, 15.4914773456, 15.4915086619, 15.4915399775, 15.4915712924, 15.4916026067, 15.4916339203, 15.4916652332, 15.4916965454, 15.4917278569, 15.4917591678, 15.491790478, 15.4918217875, 15.4918530963, 15.4918844045, 15.4919157119, 15.4919470187, 15.4919783248, 15.4920096303, 15.492040935, 15.4920722391, 15.4921035425, 15.4921348452, 15.4921661472, 15.4921974486, 15.4922287493, 15.4922600492, 15.4922913486, 15.4923226472, 15.4923539452, 15.4923852424, 15.492416539, 15.492447835, 15.4924791302, 15.4925104248, 15.4925417187, 15.4925730119, 15.4926043044, 15.4926355962, 15.4926668874, 15.4926981779, 15.4927294677, 15.4927607568, 15.4927920453, 15.4928233331, 15.4928546202, 15.4928859066, 15.4929171923, 15.4929484774, 15.4929797618, 15.4930110455, 15.4930423285, 15.4930736109, 15.4931048925, 15.4931361735, 15.4931674538, 15.4931987335, 15.4932300124, 15.4932612907, 15.4932925683, 15.4933238452, 15.4933551215, 15.4933863971, 15.493417672, 15.4934489462, 15.4934802197, 15.4935114926, 15.4935427647, 15.4935740362, 15.4936053071, 15.4936365772, 15.4936678467, 15.4936991155, 15.4937303836, 15.493761651, 15.4937929178, 15.4938241838, 15.4938554492, 15.493886714, 15.493917978, 15.4939492414, 15.4939805041, 15.4940117661, 15.4940430274, 15.4940742881, 15.4941055481, 15.4941368074, 15.494168066, 15.4941993239, 15.4942305812, 15.4942618378, 15.4942930937, 15.494324349, 15.4943556035, 15.4943868574, 15.4944181106, 15.4944493632, 15.494480615, 15.4945118662, 15.4945431167, 15.4945743665, 15.4946056157, 15.4946368641, 15.4946681119, 15.4946993591, 15.4947306055, 15.4947618513, 15.4947930963, 15.4948243408, 15.4948555845, 15.4948868275, 15.4949180699, 15.4949493116, 15.4949805527, 15.495011793, 15.4950430327, 15.4950742717, 15.49510551, 15.4951367477, 15.4951679846, 15.4951992209, 15.4952304565, 15.4952616915, 15.4952929257, 15.4953241593, 15.4953553922, 15.4953866245, 15.495417856, 15.4954490869, 15.4954803171, 15.4955115467, 15.4955427755, 15.4955740037, 15.4956052312, 15.495636458, 15.4956676842, 15.4956989096, 15.4957301344, 15.4957613586, 15.495792582, 15.4958238048, 15.4958550269, 15.4958862483, 15.4959174691, 15.4959486891, 15.4959799085, 15.4960111272, 15.4960423453, 15.4960735626, 15.4961047793, 15.4961359954, 15.4961672107, 15.4961984254, 15.4962296394, 15.4962608527, 15.4962920653, 15.4963232773, 15.4963544886, 15.4963856992, 15.4964169091, 15.4964481184, 15.496479327, 15.4965105349, 15.4965417421, 15.4965729487, 15.4966041546, 15.4966353598, 15.4966665643, 15.4966977682, 15.4967289714, 15.4967601739, 15.4967913757, 15.4968225769, 15.4968537774, 15.4968849772, 15.4969161763, 15.4969473748, 15.4969785726, 15.4970097697, 15.4970409662, 15.4970721619, 15.497103357, 15.4971345514, 15.4971657452, 15.4971969382, 15.4972281306, 15.4972593224, 15.4972905134, 15.4973217038, 15.4973528935, 15.4973840825, 15.4974152708, 15.4974464585, 15.4974776455, 15.4975088318, 15.4975400175, 15.4975712025, 15.4976023868, 15.4976335704, 15.4976647534, 15.4976959357, 15.4977271173, 15.4977582982, 15.4977894785, 15.497820658, 15.497851837, 15.4978830152, 15.4979141928, 15.4979453696, 15.4979765459, 15.4980077214, 15.4980388963, 15.4980700705, 15.498101244, 15.4981324168, 15.498163589, 15.4981947605, 15.4982259313, 15.4982571015, 15.498288271, 15.4983194398, 15.4983506079, 15.4983817754, 15.4984129422, 15.4984441083, 15.4984752737, 15.4985064385, 15.4985376026, 15.498568766, 15.4985999288, 15.4986310908, 15.4986622522, 15.498693413, 15.498724573, 15.4987557324, 15.4987868911, 15.4988180492, 15.4988492065, 15.4988803632, 15.4989115192, 15.4989426746, 15.4989738293, 15.4990049833, 15.4990361366, 15.4990672892, 15.4990984412, 15.4991295925, 15.4991607432, 15.4991918931, 15.4992230424, 15.4992541911, 15.499285339, 15.4993164863, 15.4993476329, 15.4993787788, 15.4994099241, 15.4994410686, 15.4994722126, 15.4995033558, 15.4995344984, 15.4995656403, 15.4995967815, 15.499627922, 15.4996590619, 15.4996902011, 15.4997213397, 15.4997524775, 15.4997836147, 15.4998147512, 15.4998458871, 15.4998770223, 15.4999081568, 15.4999392906, 15.4999704238, 15.5000015562, 15.5000326881, 15.5000638192, 15.5000949497, 15.5001260795, 15.5001572086, 15.5001883371, 15.5002194648, 15.500250592, 15.5002817184, 15.5003128442, 15.5003439693, 15.5003750937, 15.5004062175, 15.5004373405, 15.500468463, 15.5004995847, 15.5005307058, 15.5005618262, 15.5005929459, 15.500624065, 15.5006551833, 15.5006863011, 15.5007174181, 15.5007485345, 15.5007796502, 15.5008107652, 15.5008418796, 15.5008729932, 15.5009041063, 15.5009352186, 15.5009663303, 15.5009974413, 15.5010285516, 15.5010596613, 15.5010907703, 15.5011218786, 15.5011529862, 15.5011840932, 15.5012151995, 15.5012463052, 15.5012774101, 15.5013085144, 15.5013396181, 15.501370721, 15.5014018233, 15.5014329249, 15.5014640259, 15.5014951261, 15.5015262257, 15.5015573247, 15.5015884229, 15.5016195205, 15.5016506174, 15.5016817137, 15.5017128093, 15.5017439042, 15.5017749984, 15.501806092, 15.5018371849, 15.5018682771, 15.5018993687, 15.5019304596, 15.5019615498, 15.5019926394, 15.5020237282, 15.5020548164, 15.502085904, 15.5021169909, 15.5021480771, 15.5021791626, 15.5022102474, 15.5022413316, 15.5022724152, 15.502303498, 15.5023345802, 15.5023656617, 15.5023967426, 15.5024278227, 15.5024589022, 15.5024899811, 15.5025210592, 15.5025521367, 15.5025832136, 15.5026142897, 15.5026453652, 15.50267644, 15.5027075142, 15.5027385876, 15.5027696605, 15.5028007326, 15.5028318041, 15.5028628749, 15.502893945, 15.5029250145, 15.5029560833, 15.5029871514, 15.5030182188, 15.5030492856, 15.5030803518, 15.5031114172, 15.503142482, 15.5031735461, 15.5032046095, 15.5032356723, 15.5032667344, 15.5032977959, 15.5033288566, 15.5033599167, 15.5033909762, 15.5034220349, 15.503453093, 15.5034841504, 15.5035152072, 15.5035462633, 15.5035773187, 15.5036083735, 15.5036394275, 15.503670481, 15.5037015337, 15.5037325858, 15.5037636372, 15.5037946879, 15.503825738, 15.5038567874, 15.5038878361, 15.5039188842, 15.5039499316, 15.5039809783, 15.5040120244, 15.5040430698, 15.5040741145, 15.5041051586, 15.504136202, 15.5041672447, 15.5041982867, 15.5042293281, 15.5042603689, 15.5042914089, 15.5043224483, 15.504353487, 15.5043845251, 15.5044155624, 15.5044465991, 15.5044776352, 15.5045086706, 15.5045397053, 15.5045707393, 15.5046017727, 15.5046328054, 15.5046638374, 15.5046948688, 15.5047258995, 15.5047569296, 15.5047879589, 15.5048189876, 15.5048500157, 15.504881043, 15.5049120697, 15.5049430958, 15.5049741211, 15.5050051458, 15.5050361699, 15.5050671932, 15.5050982159, 15.505129238, 15.5051602593, 15.50519128, 15.5052223, 15.5052533194, 15.5052843381, 15.5053153561, 15.5053463735, 15.5053773902, 15.5054084062, 15.5054394216, 15.5054704363, 15.5055014503, 15.5055324637, 15.5055634764, 15.5055944884, 15.5056254997, 15.5056565104, 15.5056875205, 15.5057185298, 15.5057495385, 15.5057805466, 15.5058115539, 15.5058425606, 15.5058735666, 15.505904572, 15.5059355767, 15.5059665807, 15.5059975841, 15.5060285868, 15.5060595888, 15.5060905902, 15.5061215909, 15.5061525909, 15.5061835903, 15.506214589, 15.506245587, 15.5062765844, 15.5063075811, 15.5063385771, 15.5063695725, 15.5064005672, 15.5064315613, 15.5064625546, 15.5064935473, 15.5065245394, 15.5065555308, 15.5065865215, 15.5066175115, 15.5066485009, 15.5066794896, 15.5067104776, 15.506741465, 15.5067724517, 15.5068034378, 15.5068344232, 15.5068654079, 15.506896392, 15.5069273753, 15.5069583581, 15.5069893401, 15.5070203215, 15.5070513022, 15.5070822823, 15.5071132617, 15.5071442404, 15.5071752185, 15.5072061959, 15.5072371726, 15.5072681487, 15.5072991241, 15.5073300989, 15.5073610729, 15.5073920464, 15.5074230191, 15.5074539912, 15.5074849626, 15.5075159333, 15.5075469034, 15.5075778729, 15.5076088416, 15.5076398097, 15.5076707771, 15.5077017439, 15.50773271, 15.5077636754, 15.5077946402, 15.5078256043, 15.5078565677, 15.5078875305, 15.5079184926, 15.5079494541, 15.5079804149, 15.508011375, 15.5080423344, 15.5080732932, 15.5081042513, 15.5081352088, 15.5081661656, 15.5081971217, 15.5082280772, 15.508259032, 15.5082899861, 15.5083209396, 15.5083518924, 15.5083828446, 15.5084137961, 15.5084447469, 15.508475697, 15.5085066465, 15.5085375953, 15.5085685435, 15.508599491, 15.5086304378, 15.508661384, 15.5086923295, 15.5087232744, 15.5087542185, 15.5087851621, 15.5088161049, 15.5088470471, 15.5088779886, 15.5089089295, 15.5089398697, 15.5089708092, 15.5090017481, 15.5090326863, 15.5090636239, 15.5090945607, 15.5091254969, 15.5091564325, 15.5091873674, 15.5092183016, 15.5092492352, 15.5092801681, 15.5093111003, 15.5093420319, 15.5093729628, 15.5094038931, 15.5094348226, 15.5094657516, 15.5094966798, 15.5095276074, 15.5095585344, 15.5095894606, 15.5096203862, 15.5096513112, 15.5096822355, 15.5097131591, 15.509744082, 15.5097750043, 15.509805926, 15.5098368469, 15.5098677672, 15.5098986869, 15.5099296059, 15.5099605242, 15.5099914418, 15.5100223588, 15.5100532751, 15.5100841908, 15.5101151058, 15.5101460202, 15.5101769338, 15.5102078469, 15.5102387592, 15.5102696709, 15.5103005819, 15.5103314923, 15.510362402, 15.510393311, 15.5104242194, 15.5104551271, 15.5104860342, 15.5105169406, 15.5105478463, 15.5105787514, 15.5106096558, 15.5106405596, 15.5106714626, 15.5107023651, 15.5107332668, 15.5107641679, 15.5107950684, 15.5108259681, 15.5108568672, 15.5108877657, 15.5109186635, 15.5109495606, 15.5109804571, 15.5110113529, 15.511042248, 15.5110731425, 15.5111040363, 15.5111349295, 15.511165822, 15.5111967138, 15.511227605, 15.5112584955, 15.5112893854, 15.5113202745, 15.5113511631, 15.5113820509, 15.5114129381, 15.5114438247, 15.5114747106, 15.5115055958, 15.5115364804, 15.5115673643, 15.5115982475, 15.5116291301, 15.511660012, 15.5116908932, 15.5117217738, 15.5117526538, 15.511783533, 15.5118144117, 15.5118452896, 15.5118761669, 15.5119070435, 15.5119379195, 15.5119687948, 15.5119996694, 15.5120305434, 15.5120614168, 15.5120922894, 15.5121231614, 15.5121540328, 15.5121849034, 15.5122157735, 15.5122466428, 15.5122775115, 15.5123083796, 15.512339247, 15.5123701137, 15.5124009797, 15.5124318451, 15.5124627099, 15.5124935739, 15.5125244374, 15.5125553001, 15.5125861622, 15.5126170237, 15.5126478844, 15.5126787445, 15.512709604, 15.5127404628, 15.5127713209, 15.5128021784, 15.5128330352, 15.5128638914, 15.5128947469, 15.5129256017, 15.5129564559, 15.5129873094, 15.5130181623, 15.5130490145, 15.513079866, 15.5131107169, 15.5131415671, 15.5131724167, 15.5132032656, 15.5132341138, 15.5132649614, 15.5132958083, 15.5133266546, 15.5133575002, 15.5133883451, 15.5134191894, 15.513450033, 15.513480876, 15.5135117183, 15.5135425599, 15.5135734009, 15.5136042412, 15.5136350809, 15.5136659199, 15.5136967583, 15.513727596, 15.513758433, 15.5137892694, 15.5138201051, 15.5138509401, 15.5138817745, 15.5139126082, 15.5139434413, 15.5139742737, 15.5140051055, 15.5140359366, 15.514066767, 15.5140975968, 15.5141284259, 15.5141592544, 15.5141900822, 15.5142209094, 15.5142517358, 15.5142825617, 15.5143133868, 15.5143442114, 15.5143750352, 15.5144058584, 15.5144366809, 15.5144675028, 15.514498324, 15.5145291446, 15.5145599645, 15.5145907837, 15.5146216023, 15.5146524203, 15.5146832375, 15.5147140541, 15.5147448701, 15.5147756854, 15.5148065, 15.514837314, 15.5148681273, 15.51489894, 15.514929752, 15.5149605633, 15.514991374, 15.515022184, 15.5150529934, 15.5150838021, 15.5151146102, 15.5151454176, 15.5151762243, 15.5152070304, 15.5152378358, 15.5152686406, 15.5152994447, 15.5153302482, 15.515361051, 15.5153918531, 15.5154226546, 15.5154534554, 15.5154842556, 15.5155150551, 15.5155458539, 15.5155766521, 15.5156074496, 15.5156382465, 15.5156690427, 15.5156998383, 15.5157306332, 15.5157614274, 15.515792221, 15.515823014, 15.5158538062, 15.5158845978, 15.5159153888, 15.5159461791, 15.5159769688, 15.5160077577, 15.5160385461, 15.5160693338, 15.5161001208, 15.5161309071, 15.5161616928, 15.5161924779, 15.5162232623, 15.516254046, 15.5162848291, 15.5163156115, 15.5163463933, 15.5163771744, 15.5164079548, 15.5164387346, 15.5164695137, 15.5165002922, 15.51653107, 15.5165618472, 15.5165926237, 15.5166233996, 15.5166541748, 15.5166849493, 15.5167157232, 15.5167464964, 15.516777269, 15.5168080409, 15.5168388122, 15.5168695828, 15.5169003527, 15.516931122, 15.5169618906, 15.5169926586, 15.5170234259, 15.5170541926, 15.5170849586, 15.517115724, 15.5171464886, 15.5171772527, 15.5172080161, 15.5172387788, 15.5172695409, 15.5173003023, 15.5173310631, 15.5173618232, 15.5173925826, 15.5174233414, 15.5174540995, 15.517484857, 15.5175156138, 15.51754637, 15.5175771255, 15.5176078804, 15.5176386346, 15.5176693881, 15.517700141, 15.5177308933, 15.5177616448, 15.5177923958, 15.517823146, 15.5178538957, 15.5178846446, 15.5179153929, 15.5179461406, 15.5179768876, 15.5180076339, 15.5180383796, 15.5180691246, 15.518099869, 15.5181306127, 15.5181613558, 15.5181920982, 15.5182228399, 15.518253581, 15.5182843215, 15.5183150612, 15.5183458004, 15.5183765388, 15.5184072767, 15.5184380138, 15.5184687504, 15.5184994862, 15.5185302214, 15.518560956, 15.5185916899, 15.5186224231, 15.5186531557, 15.5186838876, 15.5187146189, 15.5187453495, 15.5187760795, 15.5188068088, 15.5188375374, 15.5188682654, 15.5188989928, 15.5189297195, 15.5189604455, 15.5189911709, 15.5190218956, 15.5190526197, 15.5190833431, 15.5191140659, 15.519144788, 15.5191755095, 15.5192062303, 15.5192369504, 15.5192676699, 15.5192983887, 15.5193291069, 15.5193598245, 15.5193905413, 15.5194212576, 15.5194519731, 15.5194826881, 15.5195134023, 15.5195441159, 15.5195748289, 15.5196055412, 15.5196362528, 15.5196669638, 15.5196976742, 15.5197283839, 15.5197590929, 15.5197898013, 15.519820509, 15.5198512161, 15.5198819225, 15.5199126283, 15.5199433334, 15.5199740378, 15.5200047416, 15.5200354448, 15.5200661473, 15.5200968491, 15.5201275503, 15.5201582509, 15.5201889507, 15.52021965, 15.5202503486, 15.5202810465, 15.5203117438, 15.5203424404, 15.5203731363, 15.5204038317, 15.5204345263, 15.5204652203, 15.5204959137, 15.5205266064, 15.5205572984, 15.5205879898, 15.5206186806, 15.5206493706, 15.5206800601, 15.5207107489, 15.520741437, 15.5207721245, 15.5208028113, 15.5208334975, 15.520864183, 15.5208948679, 15.5209255521, 15.5209562356, 15.5209869185, 15.5210176008, 15.5210482824, 15.5210789634, 15.5211096437, 15.5211403233, 15.5211710023, 15.5212016806, 15.5212323583, 15.5212630354, 15.5212937117, 15.5213243875, 15.5213550626, 15.521385737, 15.5214164108, 15.5214470839, 15.5214777564, 15.5215084282, 15.5215390993, 15.5215697699, 15.5216004397, 15.5216311089, 15.5216617775, 15.5216924454, 15.5217231127, 15.5217537793, 15.5217844452, 15.5218151105, 15.5218457752, 15.5218764392, 15.5219071025, 15.5219377652, 15.5219684272, 15.5219990886, 15.5220297494, 15.5220604095, 15.5220910689, 15.5221217277, 15.5221523858, 15.5221830433, 15.5222137001, 15.5222443563, 15.5222750118, 15.5223056667, 15.5223363209, 15.5223669745, 15.5223976274, 15.5224282797, 15.5224589313, 15.5224895823, 15.5225202326, 15.5225508822, 15.5225815313, 15.5226121796, 15.5226428273, 15.5226734744, 15.5227041208, 15.5227347666, 15.5227654117, 15.5227960561, 15.5228266999, 15.5228573431, 15.5228879856, 15.5229186274, 15.5229492686, 15.5229799092, 15.5230105491, 15.5230411883, 15.5230718269, 15.5231024649, 15.5231331022, 15.5231637388, 15.5231943748, 15.5232250102, 15.5232556449, 15.5232862789, 15.5233169123, 15.5233475451, 15.5233781772, 15.5234088086, 15.5234394394, 15.5234700695, 15.523500699, 15.5235313279, 15.5235619561, 15.5235925836, 15.5236232105, 15.5236538367, 15.5236844623, 15.5237150873, 15.5237457116, 15.5237763352, 15.5238069582, 15.5238375805, 15.5238682022, 15.5238988233, 15.5239294437, 15.5239600634, 15.5239906825, 15.5240213009, 15.5240519187, 15.5240825359, 15.5241131524, 15.5241437682, 15.5241743834, 15.5242049979, 15.5242356118, 15.5242662251, 15.5242968377, 15.5243274496, 15.5243580609, 15.5243886715, 15.5244192815, 15.5244498909, 15.5244804996, 15.5245111076, 15.524541715, 15.5245723218, 15.5246029279, 15.5246335333, 15.5246641381, 15.5246947423, 15.5247253458, 15.5247559486, 15.5247865509, 15.5248171524, 15.5248477533, 15.5248783536, 15.5249089532, 15.5249395521, 15.5249701504, 15.5250007481, 15.5250313451, 15.5250619415, 15.5250925372, 15.5251231323, 15.5251537267, 15.5251843205, 15.5252149136, 15.525245506, 15.5252760979, 15.525306689, 15.5253372796, 15.5253678694, 15.5253984587, 15.5254290472, 15.5254596352, 15.5254902225, 15.5255208091, 15.5255513951, 15.5255819804, 15.5256125651, 15.5256431491, 15.5256737325, 15.5257043153, 15.5257348974, 15.5257654788, 15.5257960596, 15.5258266398, 15.5258572193, 15.5258877981, 15.5259183763, 15.5259489539, 15.5259795308, 15.5260101071, 15.5260406827, 15.5260712576, 15.526101832, 15.5261324056, 15.5261629787, 15.526193551, 15.5262241228, 15.5262546938, 15.5262852643, 15.526315834, 15.5263464032, 15.5263769717, 15.5264075395, 15.5264381067, 15.5264686732, 15.5264992391, 15.5265298044, 15.526560369, 15.5265909329, 15.5266214962, 15.5266520589, 15.5266826209, 15.5267131823, 15.526743743, 15.5267743031, 15.5268048625, 15.5268354213, 15.5268659794, 15.5268965369, 15.5269270937, 15.5269576499, 15.5269882054, 15.5270187603, 15.5270493146, 15.5270798682, 15.5271104211, 15.5271409734, 15.5271715251, 15.5272020761, 15.5272326264, 15.5272631762, 15.5272937252, 15.5273242737, 15.5273548214, 15.5273853686, 15.527415915, 15.5274464609, 15.5274770061, 15.5275075506, 15.5275380945, 15.5275686377, 15.5275991803, 15.5276297223, 15.5276602636, 15.5276908043, 15.5277213443, 15.5277518837, 15.5277824224, 15.5278129605, 15.5278434979, 15.5278740347, 15.5279045708, 15.5279351063, 15.5279656411, 15.5279961753, 15.5280267089, 15.5280572418, 15.528087774, 15.5281183057, 15.5281488366, 15.5281793669, 15.5282098966, 15.5282404257, 15.528270954, 15.5283014818, 15.5283320089, 15.5283625353, 15.5283930611, 15.5284235863, 15.5284541108, 15.5284846346, 15.5285151578, 15.5285456804, 15.5285762023, 15.5286067236, 15.5286372442, 15.5286677642, 15.5286982836, 15.5287288023, 15.5287593203, 15.5287898377, 15.5288203545, 15.5288508706, 15.5288813861, 15.5289119009, 15.5289424151, 15.5289729286, 15.5290034415, 15.5290339537, 15.5290644653, 15.5290949763, 15.5291254866, 15.5291559962, 15.5291865053, 15.5292170136, 15.5292475213, 15.5292780284, 15.5293085349, 15.5293390406, 15.5293695458, 15.5294000503, 15.5294305541, 15.5294610574, 15.5294915599, 15.5295220618, 15.5295525631, 15.5295830637, 15.5296135637, 15.5296440631, 15.5296745618, 15.5297050598, 15.5297355572, 15.529766054, 15.5297965501, 15.5298270456, 15.5298575404, 15.5298880346, 15.5299185281, 15.529949021, 15.5299795133, 15.5300100049, 15.5300404958, 15.5300709861, 15.5301014758, 15.5301319648, 15.5301624532, 15.530192941, 15.5302234281, 15.5302539145, 15.5302844003, 15.5303148855, 15.53034537, 15.5303758539, 15.5304063371, 15.5304368197, 15.5304673016, 15.5304977829, 15.5305282636, 15.5305587436, 15.530589223, 15.5306197017, 15.5306501798, 15.5306806572, 15.530711134, 15.5307416101, 15.5307720856, 15.5308025605, 15.5308330347, 15.5308635083, 15.5308939812, 15.5309244535, 15.5309549251, 15.5309853961, 15.5310158665, 15.5310463362, 15.5310768052, 15.5311072737, 15.5311377414, 15.5311682086, 15.5311986751, 15.5312291409, 15.5312596061, 15.5312900707, 15.5313205346, 15.5313509979, 15.5313814605, 15.5314119225, 15.5314423839, 15.5314728446, 15.5315033046, 15.531533764, 15.5315642228, 15.5315946809, 15.5316251384, 15.5316555953, 15.5316860515, 15.531716507, 15.5317469619, 15.5317774162, 15.5318078698, 15.5318383228, 15.5318687752, 15.5318992269, 15.5319296779, 15.5319601284, 15.5319905781, 15.5320210273, 15.5320514757, 15.5320819236, 15.5321123708, 15.5321428174, 15.5321732633, 15.5322037085, 15.5322341532, 15.5322645972, 15.5322950405, 15.5323254832, 15.5323559253, 15.5323863667, 15.5324168075, 15.5324472476, 15.5324776871, 15.532508126, 15.5325385642, 15.5325690017, 15.5325994387, 15.532629875, 15.5326603106, 15.5326907456, 15.53272118, 15.5327516137, 15.5327820467, 15.5328124792, 15.532842911, 15.5328733421, 15.5329037726, 15.5329342025, 15.5329646317, 15.5329950603, 15.5330254882, 15.5330559155, 15.5330863422, 15.5331167682, 15.5331471936, 15.5331776183, 15.5332080424, 15.5332384658, 15.5332688886, 15.5332993108, 15.5333297323, 15.5333601532, 15.5333905734, 15.533420993, 15.533451412, 15.5334818303, 15.533512248, 15.533542665, 15.5335730814, 15.5336034971, 15.5336339122, 15.5336643267, 15.5336947405, 15.5337251537, 15.5337555663, 15.5337859782, 15.5338163894, 15.5338468001, 15.53387721, 15.5339076194, 15.5339380281, 15.5339684361, 15.5339988435, 15.5340292503, 15.5340596565, 15.5340900619, 15.5341204668, 15.534150871, 15.5341812746, 15.5342116775, 15.5342420798, 15.5342724814, 15.5343028825, 15.5343332828, 15.5343636825, 15.5343940816, 15.5344244801, 15.5344548779, 15.5344852751, 15.5345156716, 15.5345460675, 15.5345764627, 15.5346068573, 15.5346372513, 15.5346676446, 15.5346980373, 15.5347284293, 15.5347588207, 15.5347892115, 15.5348196016, 15.5348499911, 15.5348803799, 15.5349107681, 15.5349411557, 15.5349715426, 15.5350019289, 15.5350323145, 15.5350626995, 15.5350930839, 15.5351234676, 15.5351538507, 15.5351842331, 15.5352146149, 15.5352449961, 15.5352753766, 15.5353057565, 15.5353361357, 15.5353665143, 15.5353968923, 15.5354272696, 15.5354576463, 15.5354880224, 15.5355183978, 15.5355487725, 15.5355791467, 15.5356095201, 15.535639893, 15.5356702652, 15.5357006368, 15.5357310077, 15.535761378, 15.5357917476, 15.5358221166, 15.535852485, 15.5358828528, 15.5359132198, 15.5359435863, 15.5359739521, 15.5360043173, 15.5360346818, 15.5360650457, 15.536095409, 15.5361257716, 15.5361561336, 15.5361864949, 15.5362168556, 15.5362472157, 15.5362775751, 15.5363079339, 15.536338292, 15.5363686496, 15.5363990064, 15.5364293627, 15.5364597182, 15.5364900732, 15.5365204275, 15.5365507812, 15.5365811342, 15.5366114866, 15.5366418384, 15.5366721895, 15.53670254, 15.5367328898, 15.536763239, 15.5367935876, 15.5368239355, 15.5368542828, 15.5368846295, 15.5369149755, 15.5369453209, 15.5369756656, 15.5370060097, 15.5370363532, 15.537066696, 15.5370970382, 15.5371273797, 15.5371577206, 15.5371880609, 15.5372184005, 15.5372487395, 15.5372790779, 15.5373094156, 15.5373397527, 15.5373700891, 15.5374004249, 15.5374307601, 15.5374610946, 15.5374914285, 15.5375217618, 15.5375520944, 15.5375824264, 15.5376127577, 15.5376430884, 15.5376734185, 15.5377037479, 15.5377340767, 15.5377644048, 15.5377947324, 15.5378250592, 15.5378553855, 15.5378857111, 15.537916036, 15.5379463604, 15.5379766841, 15.5380070071, 15.5380373295, 15.5380676513, 15.5380979725, 15.538128293, 15.5381586128, 15.5381889321, 15.5382192506, 15.5382495686, 15.5382798859, 15.5383102026, 15.5383405186, 15.538370834, 15.5384011488, 15.538431463, 15.5384617764, 15.5384920893, 15.5385224015, 15.5385527131, 15.5385830241, 15.5386133344, 15.538643644, 15.5386739531, 15.5387042615, 15.5387345692, 15.5387648764, 15.5387951829, 15.5388254887, 15.5388557939, 15.5388860985, 15.5389164025, 15.5389467058, 15.5389770084, 15.5390073105, 15.5390376119, 15.5390679126, 15.5390982128, 15.5391285123, 15.5391588111, 15.5391891093, 15.5392194069, 15.5392497038, 15.5392800002, 15.5393102958, 15.5393405909, 15.5393708853, 15.539401179, 15.5394314722, 15.5394617646, 15.5394920565, 15.5395223477, 15.5395526383, 15.5395829283, 15.5396132176, 15.5396435062, 15.5396737943, 15.5397040817, 15.5397343684, 15.5397646546, 15.5397949401, 15.5398252249, 15.5398555092, 15.5398857928, 15.5399160757, 15.539946358, 15.5399766397, 15.5400069208, 15.5400372012, 15.5400674809, 15.5400977601, 15.5401280386, 15.5401583165, 15.5401885937, 15.5402188703, 15.5402491462, 15.5402794216, 15.5403096963, 15.5403399703, 15.5403702437, 15.5404005165, 15.5404307887, 15.5404610602, 15.5404913311, 15.5405216013, 15.5405518709, 15.5405821399, 15.5406124082, 15.540642676, 15.540672943, 15.5407032095, 15.5407334753, 15.5407637404, 15.540794005, 15.5408242689, 15.5408545321, 15.5408847947, 15.5409150567, 15.5409453181, 15.5409755788, 15.5410058389, 15.5410360983, 15.5410663572, 15.5410966153, 15.5411268729, 15.5411571298, 15.5411873861, 15.5412176417, 15.5412478967, 15.5412781511, 15.5413084049, 15.541338658, 15.5413689104, 15.5413991623, 15.5414294135, 15.5414596641, 15.541489914, 15.5415201633, 15.541550412, 15.54158066, 15.5416109074, 15.5416411542, 15.5416714003, 15.5417016458, 15.5417318906, 15.5417621349, 15.5417923785, 15.5418226214, 15.5418528638, 15.5418831054, 15.5419133465, 15.5419435869, 15.5419738267, 15.5420040659, 15.5420343044, 15.5420645423, 15.5420947795, 15.5421250162, 15.5421552521, 15.5421854875, 15.5422157222, 15.5422459563, 15.5422761898, 15.5423064226, 15.5423366548, 15.5423668863, 15.5423971172, 15.5424273475, 15.5424575772, 15.5424878062, 15.5425180346, 15.5425482623, 15.5425784895, 15.5426087159, 15.5426389418, 15.542669167, 15.5426993916, 15.5427296155, 15.5427598389, 15.5427900616, 15.5428202836, 15.542850505, 15.5428807258, 15.542910946, 15.5429411655, 15.5429713844, 15.5430016026, 15.5430318203, 15.5430620372, 15.5430922536, 15.5431224693, 15.5431526844, 15.5431828989, 15.5432131127, 15.5432433259, 15.5432735384, 15.5433037504, 15.5433339617, 15.5433641723, 15.5433943824, 15.5434245918, 15.5434548005, 15.5434850087, 15.5435152162, 15.543545423, 15.5435756293, 15.5436058349, 15.5436360398, 15.5436662442, 15.5436964479, 15.5437266509, 15.5437568534, 15.5437870552, 15.5438172564, 15.5438474569, 15.5438776568, 15.5439078561, 15.5439380547, 15.5439682528, 15.5439984501, 15.5440286469, 15.544058843, 15.5440890385, 15.5441192333, 15.5441494276, 15.5441796212, 15.5442098141, 15.5442400064, 15.5442701981, 15.5443003892, 15.5443305796, 15.5443607694, 15.5443909586, 15.5444211471, 15.544451335, 15.5444815223, 15.544511709, 15.544541895, 15.5445720803, 15.5446022651, 15.5446324492, 15.5446626327, 15.5446928155, 15.5447229978, 15.5447531793, 15.5447833603, 15.5448135406, 15.5448437203, 15.5448738994, 15.5449040778, 15.5449342556, 15.5449644328, 15.5449946093, 15.5450247852, 15.5450549605, 15.5450851352, 15.5451153092, 15.5451454826, 15.5451756553, 15.5452058274, 15.5452359989, 15.5452661698, 15.54529634, 15.5453265096, 15.5453566786, 15.5453868469, 15.5454170146, 15.5454471817, 15.5454773481, 15.5455075139, 15.5455376791, 15.5455678437, 15.5455980076, 15.5456281709, 15.5456583335, 15.5456884956, 15.545718657, 15.5457488177, 15.5457789779, 15.5458091374, 15.5458392962, 15.5458694545, 15.5458996121, 15.5459297691, 15.5459599254, 15.5459900812, 15.5460202363, 15.5460503907, 15.5460805446, 15.5461106978, 15.5461408503, 15.5461710023, 15.5462011536, 15.5462313043, 15.5462614543, 15.5462916037, 15.5463217525, 15.5463519007, 15.5463820482, 15.5464121951, 15.5464423414, 15.546472487, 15.546502632, 15.5465327764, 15.5465629202, 15.5465930633, 15.5466232058, 15.5466533477, 15.5466834889, 15.5467136295, 15.5467437695, 15.5467739088, 15.5468040475, 15.5468341856, 15.5468643231, 15.5468944599, 15.5469245961, 15.5469547317, 15.5469848666, 15.5470150009, 15.5470451346, 15.5470752676, 15.5471054, 15.5471355318, 15.547165663, 15.5471957935, 15.5472259234, 15.5472560527, 15.5472861813, 15.5473163094, 15.5473464367, 15.5473765635, 15.5474066896, 15.5474368151, 15.54746694, 15.5474970642, 15.5475271878, 15.5475573108, 15.5475874332, 15.5476175549, 15.547647676, 15.5476777965, 15.5477079163, 15.5477380355, 15.5477681541, 15.547798272, 15.5478283894, 15.5478585061, 15.5478886221, 15.5479187376, 15.5479488524, 15.5479789665, 15.5480090801, 15.548039193, 15.5480693053, 15.548099417, 15.548129528, 15.5481596384, 15.5481897482, 15.5482198574, 15.5482499659, 15.5482800738, 15.548310181, 15.5483402877, 15.5483703937, 15.5484004991, 15.5484306038, 15.5484607079, 15.5484908114, 15.5485209143, 15.5485510166, 15.5485811182, 15.5486112191, 15.5486413195, 15.5486714192, 15.5487015183, 15.5487316168, 15.5487617147, 15.5487918119, 15.5488219085, 15.5488520044, 15.5488820998, 15.5489121945, 15.5489422885, 15.548972382, 15.5490024748, 15.549032567, 15.5490626586, 15.5490927495, 15.5491228398, 15.5491529295, 15.5491830186, 15.549213107, 15.5492431948, 15.549273282, 15.5493033685, 15.5493334544, 15.5493635397, 15.5493936244, 15.5494237084, 15.5494537918, 15.5494838746, 15.5495139568, 15.5495440383, 15.5495741192, 15.5496041995, 15.5496342791, 15.5496643581, 15.5496944365, 15.5497245143, 15.5497545914, 15.5497846679, 15.5498147438, 15.5498448191, 15.5498748937, 15.5499049677, 15.5499350411, 15.5499651138, 15.549995186, 15.5500252575, 15.5500553283, 15.5500853986, 15.5501154682, 15.5501455372, 15.5501756055, 15.5502056733, 15.5502357404, 15.5502658069, 15.5502958727, 15.550325938, 15.5503560026, 15.5503860665, 15.5504161299, 15.5504461926, 15.5504762547, 15.5505063162, 15.550536377, 15.5505664372, 15.5505964968, 15.5506265558, 15.5506566141, 15.5506866718, 15.5507167289, 15.5507467854, 15.5507768412, 15.5508068964, 15.550836951, 15.550867005, 15.5508970583, 15.550927111, 15.5509571631, 15.5509872145, 15.5510172653, 15.5510473155, 15.5510773651, 15.5511074141, 15.5511374624, 15.5511675101, 15.5511975572, 15.5512276036, 15.5512576494, 15.5512876946, 15.5513177392, 15.5513477831, 15.5513778264, 15.5514078691, 15.5514379112, 15.5514679526, 15.5514979934, 15.5515280336, 15.5515580732, 15.5515881121, 15.5516181504, 15.5516481881, 15.5516782252, 15.5517082616, 15.5517382974, 15.5517683326, 15.5517983672, 15.5518284011, 15.5518584344, 15.5518884671, 15.5519184992, 15.5519485306, 15.5519785614, 15.5520085916, 15.5520386211, 15.5520686501, 15.5520986784, 15.5521287061, 15.5521587331, 15.5521887596, 15.5522187854, 15.5522488105, 15.5522788351, 15.552308859, 15.5523388823, 15.552368905, 15.5523989271, 15.5524289485, 15.5524589693, 15.5524889895, 15.5525190091, 15.552549028, 15.5525790463, 15.552609064, 15.5526390811, 15.5526690975, 15.5526991133, 15.5527291285, 15.5527591431, 15.552789157, 15.5528191703, 15.552849183, 15.5528791951, 15.5529092065, 15.5529392174, 15.5529692275, 15.5529992371, 15.5530292461, 15.5530592544, 15.5530892621, 15.5531192692, 15.5531492756, 15.5531792814, 15.5532092866, 15.5532392912, 15.5532692952, 15.5532992985, 15.5533293012, 15.5533593033, 15.5533893047, 15.5534193056, 15.5534493058, 15.5534793053, 15.5535093043, 15.5535393026, 15.5535693004, 15.5535992975, 15.5536292939, 15.5536592898, 15.553689285, 15.5537192796, 15.5537492735, 15.5537792669, 15.5538092596, 15.5538392517, 15.5538692432, 15.5538992341, 15.5539292243, 15.5539592139, 15.5539892029, 15.5540191912, 15.554049179, 15.5540791661, 15.5541091526, 15.5541391384, 15.5541691237, 15.5541991083, 15.5542290923, 15.5542590757, 15.5542890584, 15.5543190406, 15.5543490221, 15.5543790029, 15.5544089832, 15.5544389628, 15.5544689419, 15.5544989202, 15.554528898, 15.5545588752, 15.5545888517, 15.5546188276, 15.5546488029, 15.5546787775, 15.5547087515, 15.5547387249, 15.5547686977, 15.5547986699, 15.5548286414, 15.5548586123, 15.5548885826, 15.5549185523, 15.5549485214, 15.5549784898, 15.5550084576, 15.5550384248, 15.5550683913, 15.5550983573, 15.5551283226, 15.5551582873, 15.5551882513, 15.5552182148, 15.5552481776, 15.5552781398, 15.5553081014, 15.5553380624, 15.5553680227, 15.5553979824, 15.5554279415, 15.5554579, 15.5554878578, 15.555517815, 15.5555477716, 15.5555777276, 15.555607683, 15.5556376377, 15.5556675918, 15.5556975453, 15.5557274982, 15.5557574505, 15.5557874021, 15.5558173531, 15.5558473035, 15.5558772532, 15.5559072024, 15.5559371509, 15.5559670988, 15.5559970461, 15.5560269927, 15.5560569388, 15.5560868842, 15.556116829, 15.5561467731, 15.5561767167, 15.5562066596, 15.5562366019, 15.5562665436, 15.5562964846, 15.5563264251, 15.5563563649, 15.5563863041, 15.5564162427, 15.5564461806, 15.556476118, 15.5565060547, 15.5565359908, 15.5565659262, 15.5565958611, 15.5566257953, 15.5566557289, 15.5566856619, 15.5567155943, 15.556745526, 15.5567754571, 15.5568053876, 15.5568353175, 15.5568652468, 15.5568951754, 15.5569251034, 15.5569550308, 15.5569849576, 15.5570148837, 15.5570448093, 15.5570747342, 15.5571046585, 15.5571345822, 15.5571645052, 15.5571944276, 15.5572243495, 15.5572542706, 15.5572841912, 15.5573141112, 15.5573440305, 15.5573739492, 15.5574038673, 15.5574337848, 15.5574637016, 15.5574936178, 15.5575235334, 15.5575534484, 15.5575833628, 15.5576132765, 15.5576431896, 15.5576731022, 15.557703014, 15.5577329253, 15.5577628359, 15.557792746, 15.5578226554, 15.5578525642, 15.5578824723, 15.5579123799, 15.5579422868, 15.5579721931, 15.5580020988, 15.5580320038, 15.5580619083, 15.5580918121, 15.5581217153, 15.5581516179, 15.5581815199, 15.5582114212, 15.5582413219, 15.558271222, 15.5583011215, 15.5583310204, 15.5583609186, 15.5583908163, 15.5584207133, 15.5584506097, 15.5584805054, 15.5585104006, 15.5585402951, 15.558570189, 15.5586000823, 15.558629975, 15.558659867, 15.5586897585, 15.5587196493, 15.5587495395, 15.558779429, 15.558809318, 15.5588392063, 15.558869094, 15.5588989811, 15.5589288676, 15.5589587535, 15.5589886387, 15.5590185233, 15.5590484073, 15.5590782907, 15.5591081735, 15.5591380556, 15.5591679372, 15.5591978181, 15.5592276984, 15.559257578, 15.5592874571, 15.5593173355, 15.5593472133, 15.5593770905, 15.5594069671, 15.5594368431, 15.5594667184, 15.5594965931, 15.5595264672, 15.5595563407, 15.5595862136, 15.5596160858, 15.5596459574, 15.5596758284, 15.5597056988, 15.5597355686, 15.5597654378, 15.5597953063, 15.5598251742, 15.5598550415, 15.5598849082, 15.5599147743, 15.5599446397, 15.5599745045, 15.5600043687, 15.5600342323, 15.5600640953, 15.5600939576, 15.5601238194, 15.5601536805, 15.560183541, 15.5602134009, 15.5602432601, 15.5602731188, 15.5603029768, 15.5603328342, 15.560362691, 15.5603925472, 15.5604224027, 15.5604522577, 15.560482112, 15.5605119657, 15.5605418188, 15.5605716712, 15.5606015231, 15.5606313743, 15.5606612249, 15.5606910749, 15.5607209243, 15.5607507731, 15.5607806212, 15.5608104687, 15.5608403156, 15.5608701619, 15.5609000076, 15.5609298527, 15.5609596971, 15.5609895409, 15.5610193841, 15.5610492267, 15.5610790687, 15.56110891, 15.5611387508, 15.5611685909, 15.5611984304, 15.5612282693, 15.5612581075, 15.5612879452, 15.5613177822, 15.5613476186, 15.5613774544, 15.5614072896, 15.5614371241, 15.5614669581, 15.5614967914, 15.5615266241, 15.5615564562, 15.5615862877, 15.5616161186, 15.5616459488, 15.5616757784, 15.5617056075, 15.5617354358, 15.5617652636, 15.5617950908, 15.5618249173, 15.5618547433, 15.5618845686, 15.5619143933, 15.5619442173, 15.5619740408, 15.5620038637, 15.5620336859, 15.5620635075, 15.5620933285, 15.5621231489, 15.5621529686, 15.5621827878, 15.5622126063, 15.5622424242, 15.5622722415, 15.5623020582, 15.5623318743, 15.5623616897, 15.5623915045, 15.5624213188, 15.5624511324, 15.5624809453, 15.5625107577, 15.5625405695, 15.5625703806, 15.5626001911, 15.562630001, 15.5626598103, 15.562689619, 15.562719427, 15.5627492345, 15.5627790413, 15.5628088475, 15.5628386531, 15.5628684581, 15.5628982625, 15.5629280662, 15.5629578693, 15.5629876718, 15.5630174737, 15.563047275, 15.5630770757, 15.5631068758, 15.5631366752, 15.563166474, 15.5631962722, 15.5632260698, 15.5632558668, 15.5632856631, 15.5633154589, 15.563345254, 15.5633750485, 15.5634048424, 15.5634346357, 15.5634644284, 15.5634942204, 15.5635240119, 15.5635538027, 15.5635835929, 15.5636133825, 15.5636431715, 15.5636729598, 15.5637027476, 15.5637325347, 15.5637623212, 15.5637921071, 15.5638218924, 15.5638516771, 15.5638814611, 15.5639112446, 15.5639410274, 15.5639708096, 15.5640005912, 15.5640303722, 15.5640601526, 15.5640899323, 15.5641197115, 15.56414949, 15.5641792679, 15.5642090452, 15.5642388219, 15.5642685979, 15.5642983734, 15.5643281482, 15.5643579224, 15.5643876961, 15.564417469, 15.5644472414, 15.5644770132, 15.5645067843, 15.5645365549, 15.5645663248, 15.5645960941, 15.5646258628, 15.5646556309, 15.5646853983, 15.5647151652, 15.5647449314, 15.564774697, 15.5648044621, 15.5648342264, 15.5648639902, 15.5648937534, 15.5649235159, 15.5649532779, 15.5649830392, 15.5650127999, 15.56504256, 15.5650723195, 15.5651020784, 15.5651318366, 15.5651615943, 15.5651913513, 15.5652211077, 15.5652508635, 15.5652806187, 15.5653103733, 15.5653401272, 15.5653698806, 15.5653996333, 15.5654293854, 15.5654591369, 15.5654888878, 15.5655186381, 15.5655483877, 15.5655781368, 15.5656078852, 15.565637633, 15.5656673803, 15.5656971268, 15.5657268728, 15.5657566182, 15.565786363, 15.5658161071, 15.5658458506, 15.5658755935, 15.5659053359, 15.5659350775, 15.5659648186, 15.5659945591, 15.5660242989, 15.5660540382, 15.5660837768, 15.5661135148, 15.5661432522, 15.566172989, 15.5662027252, 15.5662324607, 15.5662621957, 15.56629193, 15.5663216637, 15.5663513968, 15.5663811293, 15.5664108612, 15.5664405925, 15.5664703231, 15.5665000532, 15.5665297826, 15.5665595114, 15.5665892397, 15.5666189672, 15.5666486942, 15.5666784206, 15.5667081464, 15.5667378715, 15.566767596, 15.56679732, 15.5668270433, 15.566856766, 15.566886488, 15.5669162095, 15.5669459304, 15.5669756506, 15.5670053702, 15.5670350893, 15.5670648077, 15.5670945255, 15.5671242427, 15.5671539592, 15.5671836752, 15.5672133905, 15.5672431053, 15.5672728194, 15.5673025329, 15.5673322458, 15.5673619581, 15.5673916698, 15.5674213808, 15.5674510913, 15.5674808011, 15.5675105104, 15.567540219, 15.567569927, 15.5675996344, 15.5676293412, 15.5676590473, 15.5676887529, 15.5677184579, 15.5677481622, 15.5677778659, 15.567807569, 15.5678372715, 15.5678669734, 15.5678966747, 15.5679263754, 15.5679560754, 15.5679857749, 15.5680154737, 15.5680451719, 15.5680748695, 15.5681045665, 15.5681342629, 15.5681639587, 15.5681936539, 15.5682233484, 15.5682530423, 15.5682827357, 15.5683124284, 15.5683421205, 15.568371812, 15.5684015029, 15.5684311932, 15.5684608828, 15.5684905719, 15.5685202603, 15.5685499482, 15.5685796354, 15.568609322, 15.568639008, 15.5686686934, 15.5686983782, 15.5687280623, 15.5687577459, 15.5687874288, 15.5688171112, 15.5688467929, 15.568876474, 15.5689061545, 15.5689358344, 15.5689655137, 15.5689951923, 15.5690248704, 15.5690545479, 15.5690842247, 15.5691139009, 15.5691435765, 15.5691732516, 15.569202926, 15.5692325997, 15.5692622729, 15.5692919455, 15.5693216174, 15.5693512888, 15.5693809595, 15.5694106296, 15.5694402992, 15.5694699681, 15.5694996364, 15.5695293041, 15.5695589711, 15.5695886376, 15.5696183034, 15.5696479687, 15.5696776333, 15.5697072974, 15.5697369608, 15.5697666236, 15.5697962858, 15.5698259474, 15.5698556083, 15.5698852687, 15.5699149285, 15.5699445876, 15.5699742461, 15.5700039041, 15.5700335614, 15.5700632181, 15.5700928742, 15.5701225297, 15.5701521846, 15.5701818388, 15.5702114925, 15.5702411455, 15.570270798, 15.5703004498, 15.570330101, 15.5703597516, 15.5703894016, 15.570419051, 15.5704486998, 15.570478348, 15.5705079956, 15.5705376425, 15.5705672889, 15.5705969346, 15.5706265797, 15.5706562243, 15.5706858682, 15.5707155115, 15.5707451542, 15.5707747962, 15.5708044377, 15.5708340786, 15.5708637188, 15.5708933585, 15.5709229975, 15.570952636, 15.5709822738, 15.571011911, 15.5710415476, 15.5710711836, 15.571100819, 15.5711304538, 15.5711600879, 15.5711897215, 15.5712193544, 15.5712489868, 15.5712786185, 15.5713082496, 15.5713378802, 15.5713675101, 15.5713971394, 15.5714267681, 15.5714563961, 15.5714860236, 15.5715156505, 15.5715452767, 15.5715749024, 15.5716045274, 15.5716341519, 15.5716637757, 15.5716933989, 15.5717230215, 15.5717526435, 15.5717822649, 15.5718118857, 15.5718415059, 15.5718711254, 15.5719007444, 15.5719303627, 15.5719599805, 15.5719895976, 15.5720192141, 15.57204883, 15.5720784454, 15.5721080601, 15.5721376742, 15.5721672876, 15.5721969005, 15.5722265128, 15.5722561245, 15.5722857355, 15.572315346, 15.5723449558, 15.572374565, 15.5724041737, 15.5724337817, 15.5724633891, 15.5724929959, 15.5725226021, 15.5725522077, 15.5725818126, 15.572611417, 15.5726410208, 15.5726706239, 15.5727002265, 15.5727298284, 15.5727594298, 15.5727890305, 15.5728186306, 15.5728482301, 15.572877829, 15.5729074273, 15.572937025, 15.5729666221, 15.5729962186, 15.5730258144, 15.5730554097, 15.5730850044, 15.5731145984, 15.5731441919, 15.5731737847, 15.5732033769, 15.5732329685, 15.5732625595, 15.57329215, 15.5733217398, 15.5733513289, 15.5733809175, 15.5734105055, 15.5734400929, 15.5734696796, 15.5734992658, 15.5735288514, 15.5735584363, 15.5735880206, 15.5736176044, 15.5736471875, 15.57367677, 15.5737063519, 15.5737359332, 15.5737655139, 15.573795094, 15.5738246735, 15.5738542524, 15.5738838307, 15.5739134083, 15.5739429854, 15.5739725618, 15.5740021377, 15.5740317129, 15.5740612876, 15.5740908616, 15.574120435, 15.5741500078, 15.57417958, 15.5742091516, 15.5742387226, 15.574268293, 15.5742978628, 15.574327432, 15.5743570006, 15.5743865685, 15.5744161359, 15.5744457026, 15.5744752688, 15.5745048343, 15.5745343993, 15.5745639636, 15.5745935273, 15.5746230905, 15.574652653, 15.5746822149, 15.5747117762, 15.5747413369, 15.574770897, 15.5748004565, 15.5748300153, 15.5748595736, 15.5748891313, 15.5749186883, 15.5749482448, 15.5749778007, 15.5750073559, 15.5750369105, 15.5750664646, 15.575096018, 15.5751255708, 15.5751551231, 15.5751846747, 15.5752142257, 15.5752437761, 15.5752733259, 15.5753028751, 15.5753324237, 15.5753619716, 15.575391519, 15.5754210658, 15.575450612, 15.5754801575, 15.5755097025, 15.5755392468, 15.5755687906, 15.5755983337, 15.5756278763, 15.5756574182, 15.5756869595, 15.5757165002, 15.5757460404, 15.5757755799, 15.5758051188, 15.5758346571, 15.5758641948, 15.5758937319, 15.5759232684, 15.5759528043, 15.5759823395, 15.5760118742, 15.5760414083, 15.5760709417, 15.5761004746, 15.5761300069, 15.5761595385, 15.5761890696, 15.5762186, 15.5762481298, 15.5762776591, 15.5763071877, 15.5763367157, 15.5763662432, 15.57639577, 15.5764252962, 15.5764548218, 15.5764843468, 15.5765138712, 15.576543395, 15.5765729182, 15.5766024408, 15.5766319628, 15.5766614841, 15.5766910049, 15.5767205251, 15.5767500446, 15.5767795636, 15.576809082, 15.5768385997, 15.5768681169, 15.5768976334, 15.5769271494, 15.5769566647, 15.5769861794, 15.5770156936, 15.5770452071, 15.57707472, 15.5771042323, 15.5771337441, 15.5771632552, 15.5771927657, 15.5772222756, 15.5772517849, 15.5772812936, 15.5773108017, 15.5773403092, 15.5773698161, 15.5773993224, 15.577428828, 15.5774583331, 15.5774878376, 15.5775173415, 15.5775468447, 15.5775763474, 15.5776058495, 15.5776353509, 15.5776648518, 15.577694352, 15.5777238517, 15.5777533507, 15.5777828492, 15.577812347, 15.5778418442, 15.5778713409, 15.5779008369, 15.5779303323, 15.5779598271, 15.5779893214, 15.578018815, 15.578048308, 15.5780778004, 15.5781072922, 15.5781367834, 15.578166274, 15.578195764, 15.5782252534, 15.5782547422, 15.5782842304, 15.578313718, 15.578343205, 15.5783726914, 15.5784021771, 15.5784316623, 15.5784611469, 15.5784906309, 15.5785201142, 15.578549597, 15.5785790792, 15.5786085607, 15.5786380417, 15.5786675221, 15.5786970018, 15.578726481, 15.5787559595, 15.5787854375, 15.5788149148, 15.5788443916, 15.5788738677, 15.5789033432, 15.5789328182, 15.5789622925, 15.5789917662, 15.5790212394, 15.5790507119, 15.5790801838, 15.5791096552, 15.5791391259, 15.579168596, 15.5791980655, 15.5792275344, 15.5792570028, 15.5792864705, 15.5793159376, 15.5793454041, 15.57937487, 15.5794043353, 15.5794338, 15.5794632641, 15.5794927276, 15.5795221905, 15.5795516528, 15.5795811145, 15.5796105756, 15.5796400361, 15.579669496, 15.5796989553, 15.579728414, 15.579757872, 15.5797873295, 15.5798167864, 15.5798462427, 15.5798756984, 15.5799051535, 15.5799346079, 15.5799640618, 15.5799935151, 15.5800229678, 15.5800524198, 15.5800818713, 15.5801113222, 15.5801407724, 15.5801702221, 15.5801996712, 15.5802291196, 15.5802585675, 15.5802880148, 15.5803174614, 15.5803469075, 15.5803763529, 15.5804057978, 15.5804352421, 15.5804646857, 15.5804941288, 15.5805235712, 15.5805530131, 15.5805824543, 15.580611895, 15.580641335, 15.5806707745, 15.5807002133, 15.5807296516, 15.5807590892, 15.5807885263, 15.5808179627, 15.5808473986, 15.5808768338, 15.5809062685, 15.5809357025, 15.580965136, 15.5809945688, 15.5810240011, 15.5810534327, 15.5810828638, 15.5811122942, 15.581141724, 15.5811711533, 15.5812005819, 15.58123001, 15.5812594374, 15.5812888642, 15.5813182905, 15.5813477161, 15.5813771412, 15.5814065656, 15.5814359895, 15.5814654127, 15.5814948353, 15.5815242574, 15.5815536788, 15.5815830997, 15.5816125199, 15.5816419395, 15.5816713586, 15.581700777, 15.5817301949, 15.5817596121, 15.5817890287, 15.5818184448, 15.5818478602, 15.5818772751, 15.5819066893, 15.581936103, 15.581965516, 15.5819949284, 15.5820243403, 15.5820537515, 15.5820831622, 15.5821125722, 15.5821419817, 15.5821713905, 15.5822007988, 15.5822302064, 15.5822596134, 15.5822890199, 15.5823184257, 15.582347831, 15.5823772356, 15.5824066397, 15.5824360431, 15.582465446, 15.5824948482, 15.5825242499, 15.582553651, 15.5825830514, 15.5826124513, 15.5826418505, 15.5826712492, 15.5827006472, 15.5827300447, 15.5827594416, 15.5827888378, 15.5828182335, 15.5828476286, 15.582877023, 15.5829064169, 15.5829358101, 15.5829652028, 15.5829945949, 15.5830239864, 15.5830533772, 15.5830827675, 15.5831121572, 15.5831415463, 15.5831709347, 15.5832003226, 15.5832297099, 15.5832590966, 15.5832884827, 15.5833178681, 15.583347253, 15.5833766373, 15.583406021, 15.5834354041, 15.5834647866, 15.5834941685, 15.5835235498, 15.5835529305, 15.5835823106, 15.5836116901, 15.583641069, 15.5836704473, 15.583699825, 15.5837292021, 15.5837585786, 15.5837879545, 15.5838173298, 15.5838467045, 15.5838760786, 15.5839054522, 15.5839348251, 15.5839641974, 15.5839935691, 15.5840229403, 15.5840523108, 15.5840816807, 15.58411105, 15.5841404188, 15.5841697869, 15.5841991545, 15.5842285214, 15.5842578877, 15.5842872535, 15.5843166186, 15.5843459832, 15.5843753471, 15.5844047105, 15.5844340733, 15.5844634354, 15.584492797, 15.5845221579, 15.5845515183, 15.5845808781, 15.5846102372, 15.5846395958, 15.5846689538, 15.5846983112, 15.584727668, 15.5847570241, 15.5847863797, 15.5848157347, 15.5848450891, 15.5848744429, 15.5849037961, 15.5849331487, 15.5849625007, 15.5849918521, 15.5850212029, 15.5850505532, 15.5850799028, 15.5851092518, 15.5851386002, 15.585167948, 15.5851972953, 15.5852266419, 15.5852559879, 15.5852853334, 15.5853146782, 15.5853440224, 15.5853733661, 15.5854027091, 15.5854320516, 15.5854613934, 15.5854907347, 15.5855200754, 15.5855494154, 15.5855787549, 15.5856080938, 15.5856374321, 15.5856667697, 15.5856961068, 15.5857254433, 15.5857547792, 15.5857841145, 15.5858134492, 15.5858427833, 15.5858721168, 15.5859014497, 15.585930782, 15.5859601137, 15.5859894448, 15.5860187754, 15.5860481053, 15.5860774346, 15.5861067633, 15.5861360915, 15.586165419, 15.586194746, 15.5862240723, 15.5862533981, 15.5862827232, 15.5863120478, 15.5863413717, 15.5863706951, 15.5864000179, 15.5864293401, 15.5864586616, 15.5864879826, 15.586517303, 15.5865466228, 15.586575942, 15.5866052606, 15.5866345786, 15.586663896, 15.5866932128, 15.586722529, 15.5867518447, 15.5867811597, 15.5868104741, 15.586839788, 15.5868691012, 15.5868984138, 15.5869277259, 15.5869570373, 15.5869863482, 15.5870156585, 15.5870449681, 15.5870742772, 15.5871035857, 15.5871328936, 15.5871622008, 15.5871915075, 15.5872208136, 15.5872501191, 15.587279424, 15.5873087283, 15.587338032, 15.5873673352, 15.5873966377, 15.5874259396, 15.5874552409, 15.5874845417, 15.5875138418, 15.5875431414, 15.5875724403, 15.5876017387, 15.5876310364, 15.5876603336, 15.5876896302, 15.5877189262, 15.5877482215, 15.5877775163, 15.5878068105, 15.5878361041, 15.5878653971, 15.5878946895, 15.5879239813, 15.5879532726, 15.5879825632, 15.5880118532, 15.5880411426, 15.5880704315, 15.5880997197, 15.5881290074, 15.5881582944, 15.5881875809, 15.5882168668, 15.588246152, 15.5882754367, 15.5883047208, 15.5883340043, 15.5883632872, 15.5883925695, 15.5884218512, 15.5884511323, 15.5884804128, 15.5885096928, 15.5885389721, 15.5885682508, 15.588597529, 15.5886268065, 15.5886560835, 15.5886853598, 15.5887146356, 15.5887439108, 15.5887731853, 15.5888024593, 15.5888317327, 15.5888610055, 15.5888902777, 15.5889195493, 15.5889488203, 15.5889780907, 15.5890073606, 15.5890366298, 15.5890658984, 15.5890951665, 15.5891244339, 15.5891537008, 15.589182967, 15.5892122327, 15.5892414978, 15.5892707623, 15.5893000262, 15.5893292894, 15.5893585521, 15.5893878143, 15.5894170758, 15.5894463367, 15.589475597, 15.5895048567, 15.5895341159, 15.5895633744, 15.5895926324, 15.5896218897, 15.5896511465, 15.5896804027, 15.5897096583, 15.5897389133, 15.5897681676, 15.5897974214, 15.5898266747, 15.5898559273, 15.5898851793, 15.5899144307, 15.5899436816, 15.5899729318, 15.5900021814, 15.5900314305, 15.590060679, 15.5900899268, 15.5901191741, 15.5901484208, 15.5901776669, 15.5902069124, 15.5902361573, 15.5902654016, 15.5902946453, 15.5903238884, 15.590353131, 15.5903823729, 15.5904116143, 15.590440855, 15.5904700952, 15.5904993348, 15.5905285737, 15.5905578121, 15.5905870499, 15.5906162871, 15.5906455237, 15.5906747597, 15.5907039952, 15.59073323, 15.5907624642, 15.5907916979, 15.5908209309, 15.5908501634, 15.5908793953, 15.5909086265, 15.5909378572, 15.5909670873, 15.5909963168, 15.5910255457, 15.591054774, 15.5910840018, 15.5911132289, 15.5911424554, 15.5911716814, 15.5912009067, 15.5912301315, 15.5912593557, 15.5912885792, 15.5913178022, 15.5913470246, 15.5913762464, 15.5914054676, 15.5914346883, 15.5914639083, 15.5914931277, 15.5915223466, 15.5915515648, 15.5915807825, 15.5916099996, 15.591639216, 15.5916684319, 15.5916976472, 15.5917268619, 15.591756076, 15.5917852895, 15.5918145025, 15.5918437148, 15.5918729266, 15.5919021377, 15.5919313483, 15.5919605582, 15.5919897676, 15.5920189764, 15.5920481846, 15.5920773922, 15.5921065992, 15.5921358056, 15.5921650115, 15.5921942167, 15.5922234214, 15.5922526254, 15.5922818289, 15.5923110318, 15.592340234, 15.5923694357, 15.5923986368, 15.5924278373, 15.5924570373, 15.5924862366, 15.5925154353, 15.5925446335, 15.592573831, 15.592603028, 15.5926322244, 15.5926614202, 15.5926906154, 15.59271981, 15.592749004, 15.5927781974, 15.5928073902, 15.5928365825, 15.5928657741, 15.5928949652, 15.5929241556, 15.5929533455, 15.5929825348, 15.5930117235, 15.5930409116, 15.5930700991, 15.593099286, 15.5931284724, 15.5931576581, 15.5931868433, 15.5932160278, 15.5932452118, 15.5932743952, 15.593303578, 15.5933327602, 15.5933619418, 15.5933911228, 15.5934203032, 15.5934494831, 15.5934786623, 15.593507841, 15.593537019, 15.5935661965, 15.5935953734, 15.5936245497, 15.5936537254, 15.5936829005, 15.5937120751, 15.593741249, 15.5937704224, 15.5937995951, 15.5938287673, 15.5938579389, 15.5938871098, 15.5939162802, 15.5939454501, 15.5939746193, 15.5940037879, 15.5940329559, 15.5940621234, 15.5940912903, 15.5941204565, 15.5941496222, 15.5941787873, 15.5942079518, 15.5942371157, 15.594266279, 15.5942954418, 15.5943246039, 15.5943537655, 15.5943829264, 15.5944120868, 15.5944412466, 15.5944704058, 15.5944995644, 15.5945287224, 15.5945578799, 15.5945870367, 15.594616193, 15.5946453486, 15.5946745037, 15.5947036582, 15.5947328121, 15.5947619654, 15.5947911181, 15.5948202702, 15.5948494218, 15.5948785727, 15.5949077231, 15.5949368728, 15.594966022, 15.5949951706, 15.5950243186, 15.595053466, 15.5950826129, 15.5951117591, 15.5951409047, 15.5951700498, 15.5951991943, 15.5952283382, 15.5952574814, 15.5952866242, 15.5953157663, 15.5953449078, 15.5953740487, 15.5954031891, 15.5954323288, 15.595461468, 15.5954906066, 15.5955197446, 15.595548882, 15.5955780188, 15.5956071551, 15.5956362907, 15.5956654258, 15.5956945602, 15.5957236941, 15.5957528274, 15.5957819601, 15.5958110922, 15.5958402237, 15.5958693547, 15.595898485, 15.5959276148, 15.5959567439, 15.5959858725, 15.5960150005, 15.5960441279, 15.5960732547, 15.596102381, 15.5961315066, 15.5961606317, 15.5961897561, 15.59621888, 15.5962480033, 15.596277126, 15.5963062481, 15.5963353697, 15.5963644906, 15.596393611, 15.5964227307, 15.5964518499, 15.5964809685, 15.5965100865, 15.5965392039, 15.5965683207, 15.596597437, 15.5966265526, 15.5966556677, 15.5966847822, 15.596713896, 15.5967430093, 15.5967721221, 15.5968012342, 15.5968303457, 15.5968594567, 15.596888567, 15.5969176768, 15.596946786, 15.5969758946, 15.5970050026, 15.59703411, 15.5970632169, 15.5970923231, 15.5971214288, 15.5971505339, 15.5971796384, 15.5972087423, 15.5972378456, 15.5972669483, 15.5972960504, 15.597325152, 15.597354253, 15.5973833534, 15.5974124531, 15.5974415524, 15.597470651, 15.597499749, 15.5975288465, 15.5975579433, 15.5975870396, 15.5976161353, 15.5976452304, 15.5976743249, 15.5977034188, 15.5977325121, 15.5977616049, 15.5977906971, 15.5978197886, 15.5978488796, 15.59787797, 15.5979070599, 15.5979361491, 15.5979652377, 15.5979943258, 15.5980234133, 15.5980525002, 15.5980815865, 15.5981106722, 15.5981397573, 15.5981688418, 15.5981979258, 15.5982270092, 15.598256092, 15.5982851741, 15.5983142558, 15.5983433368, 15.5983724172, 15.5984014971, 15.5984305763, 15.598459655, 15.5984887331, 15.5985178106, 15.5985468875, 15.5985759639, 15.5986050396, 15.5986341148, 15.5986631894, 15.5986922633, 15.5987213368, 15.5987504096, 15.5987794818, 15.5988085535, 15.5988376245, 15.598866695, 15.5988957649, 15.5989248342, 15.5989539029, 15.598982971, 15.5990120386, 15.5990411055, 15.5990701719, 15.5990992377, 15.5991283029, 15.5991573675, 15.5991864316, 15.599215495, 15.5992445579, 15.5992736202, 15.5993026818, 15.599331743, 15.5993608035, 15.5993898634, 15.5994189228, 15.5994479815, 15.5994770397, 15.5995060973, 15.5995351543, 15.5995642107, 15.5995932666, 15.5996223218, 15.5996513765, 15.5996804306, 15.5997094841, 15.599738537, 15.5997675893, 15.5997966411, 15.5998256922, 15.5998547428, 15.5998837928, 15.5999128422, 15.599941891, 15.5999709392, 15.5999999869, 15.600029034, 15.6000580804, 15.6000871263, 15.6001161716, 15.6001452164, 15.6001742605, 15.6002033041, 15.600232347, 15.6002613894, 15.6002904312, 15.6003194724, 15.6003485131, 15.6003775531, 15.6004065926, 15.6004356314, 15.6004646697, 15.6004937075, 15.6005227446, 15.6005517811, 15.6005808171, 15.6006098524, 15.6006388872, 15.6006679214, 15.6006969551, 15.6007259881, 15.6007550205, 15.6007840524, 15.6008130837, 15.6008421144, 15.6008711445, 15.600900174, 15.600929203, 15.6009582313, 15.6009872591, 15.6010162863, 15.6010453129, 15.6010743389, 15.6011033644, 15.6011323892, 15.6011614135, 15.6011904372, 15.6012194603, 15.6012484828, 15.6012775048, 15.6013065261, 15.6013355469, 15.6013645671, 15.6013935867, 15.6014226057, 15.6014516241, 15.601480642, 15.6015096593, 15.6015386759, 15.601567692, 15.6015967076, 15.6016257225, 15.6016547368, 15.6016837506, 15.6017127638, 15.6017417764, 15.6017707884, 15.6017997998, 15.6018288107, 15.601857821, 15.6018868306, 15.6019158397, 15.6019448483, 15.6019738562, 15.6020028635, 15.6020318703, 15.6020608765, 15.6020898821, 15.6021188871, 15.6021478915, 15.6021768954, 15.6022058987, 15.6022349013, 15.6022639034, 15.602292905, 15.6023219059, 15.6023509062, 15.602379906, 15.6024089052, 15.6024379038, 15.6024669018, 15.6024958993, 15.6025248961, 15.6025538924, 15.6025828881, 15.6026118832, 15.6026408777, 15.6026698717, 15.602698865, 15.6027278578, 15.60275685, 15.6027858416, 15.6028148326, 15.6028438231, 15.6028728129, 15.6029018022, 15.6029307909, 15.602959779, 15.6029887666, 15.6030177535, 15.6030467399, 15.6030757257, 15.6031047109, 15.6031336955, 15.6031626795, 15.603191663, 15.6032206459, 15.6032496282, 15.6032786099, 15.603307591, 15.6033365715, 15.6033655515, 15.6033945309, 15.6034235097, 15.6034524879, 15.6034814655, 15.6035104426, 15.6035394191, 15.603568395, 15.6035973703, 15.603626345, 15.6036553191, 15.6036842927, 15.6037132657, 15.6037422381, 15.6037712099, 15.6038001811, 15.6038291518, 15.6038581218, 15.6038870913, 15.6039160602, 15.6039450286, 15.6039739963, 15.6040029635, 15.6040319301, 15.6040608961, 15.6040898615, 15.6041188263, 15.6041477906, 15.6041767542, 15.6042057173, 15.6042346798, 15.6042636418, 15.6042926031, 15.6043215639, 15.6043505241, 15.6043794837, 15.6044084427, 15.6044374011, 15.604466359, 15.6044953163, 15.604524273, 15.6045532291, 15.6045821846, 15.6046111396, 15.6046400939, 15.6046690477, 15.6046980009, 15.6047269536, 15.6047559056, 15.6047848571, 15.604813808, 15.6048427583, 15.604871708, 15.6049006571, 15.6049296057, 15.6049585537, 15.6049875011, 15.6050164479, 15.6050453942, 15.6050743398, 15.6051032849, 15.6051322294, 15.6051611733, 15.6051901166, 15.6052190594, 15.6052480016, 15.6052769432, 15.6053058842, 15.6053348246, 15.6053637645, 15.6053927037, 15.6054216424, 15.6054505805, 15.6054795181, 15.605508455, 15.6055373914, 15.6055663272, 15.6055952624, 15.605624197, 15.6056531311, 15.6056820645, 15.6057109974, 15.6057399297, 15.6057688614, 15.6057977926, 15.6058267232, 15.6058556531, 15.6058845826, 15.6059135114, 15.6059424396, 15.6059713673, 15.6060002944, 15.6060292209, 15.6060581468, 15.6060870722, 15.6061159969, 15.6061449211, 15.6061738447, 15.6062027677, 15.6062316902, 15.6062606121, 15.6062895333, 15.6063184541, 15.6063473742, 15.6063762937, 15.6064052127, 15.6064341311, 15.6064630489, 15.6064919661, 15.6065208828, 15.6065497988, 15.6065787143, 15.6066076292, 15.6066365436, 15.6066654573, 15.6066943705, 15.6067232831, 15.6067521951, 15.6067811065, 15.6068100174, 15.6068389277, 15.6068678374, 15.6068967465, 15.606925655, 15.606954563, 15.6069834704, 15.6070123772, 15.6070412834, 15.607070189, 15.6070990941, 15.6071279986, 15.6071569025, 15.6071858058, 15.6072147086, 15.6072436107, 15.6072725123, 15.6073014133, 15.6073303137, 15.6073592136, 15.6073881129, 15.6074170116, 15.6074459097, 15.6074748072, 15.6075037042, 15.6075326006, 15.6075614964, 15.6075903916, 15.6076192862, 15.6076481803, 15.6076770738, 15.6077059667, 15.607734859, 15.6077637507, 15.6077926419, 15.6078215325, 15.6078504225, 15.607879312, 15.6079082008, 15.6079370891, 15.6079659768, 15.6079948639, 15.6080237505, 15.6080526364, 15.6080815218, 15.6081104066, 15.6081392908, 15.6081681745, 15.6081970576, 15.6082259401, 15.608254822, 15.6082837033, 15.6083125841, 15.6083414643, 15.6083703439, 15.6083992229, 15.6084281013, 15.6084569792, 15.6084858565, 15.6085147332, 15.6085436093, 15.6085724849, 15.6086013599, 15.6086302343, 15.6086591081, 15.6086879814, 15.608716854, 15.6087457261, 15.6087745976, 15.6088034686, 15.6088323389, 15.6088612087, 15.6088900779, 15.6089189465, 15.6089478146, 15.608976682, 15.6090055489, 15.6090344152, 15.609063281, 15.6090921461, 15.6091210107, 15.6091498747, 15.6091787381, 15.609207601, 15.6092364633, 15.609265325, 15.6092941861, 15.6093230466, 15.6093519066, 15.609380766, 15.6094096248, 15.609438483, 15.6094673406, 15.6094961977, 15.6095250542, 15.6095539101, 15.6095827655, 15.6096116202, 15.6096404744, 15.609669328, 15.6096981811, 15.6097270335, 15.6097558854, 15.6097847367, 15.6098135875, 15.6098424376, 15.6098712872, 15.6099001362, 15.6099289846, 15.6099578324, 15.6099866797, 15.6100155264, 15.6100443725, 15.610073218, 15.610102063, 15.6101309074, 15.6101597512, 15.6101885944, 15.6102174371, 15.6102462791, 15.6102751206, 15.6103039616, 15.6103328019, 15.6103616417, 15.6103904809, 15.6104193195, 15.6104481575, 15.610476995, 15.6105058319, 15.6105346682, 15.6105635039, 15.6105923391, 15.6106211737, 15.6106500077, 15.6106788411, 15.610707674, 15.6107365062, 15.6107653379, 15.6107941691, 15.6108229996, 15.6108518296, 15.610880659, 15.6109094878, 15.610938316, 15.6109671437, 15.6109959708, 15.6110247973, 15.6110536232, 15.6110824486, 15.6111112734, 15.6111400976, 15.6111689212, 15.6111977443, 15.6112265668, 15.6112553887, 15.61128421, 15.6113130308, 15.611341851, 15.6113706706, 15.6113994896, 15.6114283081, 15.6114571259, 15.6114859432, 15.61151476, 15.6115435761, 15.6115723917, 15.6116012067, 15.6116300211, 15.611658835, 15.6116876482, 15.6117164609, 15.6117452731, 15.6117740846, 15.6118028956, 15.611831706, 15.6118605158, 15.6118893251, 15.6119181337, 15.6119469418, 15.6119757493, 15.6120045563, 15.6120333627, 15.6120621685, 15.6120909737, 15.6121197783, 15.6121485824, 15.6121773859, 15.6122061888, 15.6122349911, 15.6122637929, 15.6122925941, 15.6123213947, 15.6123501948, 15.6123789942, 15.6124077931, 15.6124365915, 15.6124653892, 15.6124941864, 15.612522983, 15.612551779, 15.6125805744, 15.6126093693, 15.6126381636, 15.6126669573, 15.6126957505, 15.612724543, 15.612753335, 15.6127821265, 15.6128109173, 15.6128397076, 15.6128684973, 15.6128972864, 15.612926075, 15.6129548629, 15.6129836503, 15.6130124372, 15.6130412234, 15.6130700091, 15.6130987942, 15.6131275787, 15.6131563627, 15.6131851461, 15.6132139289, 15.6132427111, 15.6132714928, 15.6133002739, 15.6133290544, 15.6133578343, 15.6133866137, 15.6134153925, 15.6134441707, 15.6134729483, 15.6135017254, 15.6135305019, 15.6135592778, 15.6135880531, 15.6136168279, 15.6136456021, 15.6136743757, 15.6137031488, 15.6137319212, 15.6137606931, 15.6137894645, 15.6138182352, 15.6138470054, 15.613875775, 15.613904544, 15.6139333125, 15.6139620804, 15.6139908477, 15.6140196144, 15.6140483806, 15.6140771462, 15.6141059112, 15.6141346757, 15.6141634395, 15.6141922028, 15.6142209655, 15.6142497277, 15.6142784893, 15.6143072503, 15.6143360107, 15.6143647706, 15.6143935298, 15.6144222885, 15.6144510467, 15.6144798042, 15.6145085612, 15.6145373177, 15.6145660735, 15.6145948288, 15.6146235835, 15.6146523376, 15.6146810911, 15.6147098441, 15.6147385965, 15.6147673484, 15.6147960996, 15.6148248503, 15.6148536004, 15.6148823499, 15.6149110989, 15.6149398473, 15.6149685951, 15.6149973424, 15.6150260891, 15.6150548352, 15.6150835807, 15.6151123256, 15.61514107, 15.6151698138, 15.6151985571, 15.6152272997, 15.6152560418, 15.6152847834, 15.6153135243, 15.6153422647, 15.6153710045, 15.6153997437, 15.6154284824, 15.6154572205, 15.615485958, 15.6155146949, 15.6155434313, 15.6155721671, 15.6156009023, 15.615629637, 15.615658371, 15.6156871046, 15.6157158375, 15.6157445699, 15.6157733016, 15.6158020329, 15.6158307635, 15.6158594936, 15.6158882231, 15.615916952, 15.6159456804, 15.6159744082, 15.6160031354, 15.616031862, 15.6160605881, 15.6160893136, 15.6161180385, 15.6161467629, 15.6161754866, 15.6162042099, 15.6162329325, 15.6162616546, 15.6162903761, 15.616319097, 15.6163478173, 15.6163765371, 15.6164052563, 15.616433975, 15.616462693, 15.6164914105, 15.6165201274, 15.6165488438, 15.6165775596, 15.6166062748, 15.6166349894, 15.6166637035, 15.616692417, 15.6167211299, 15.6167498422, 15.616778554, 15.6168072652, 15.6168359758, 15.6168646859, 15.6168933954, 15.6169221043, 15.6169508127, 15.6169795204, 15.6170082277, 15.6170369343, 15.6170656404, 15.6170943458, 15.6171230508, 15.6171517551, 15.6171804589, 15.6172091621, 15.6172378647, 15.6172665668, 15.6172952683, 15.6173239692, 15.6173526696, 15.6173813694, 15.6174100686, 15.6174387672, 15.6174674653, 15.6174961628, 15.6175248597, 15.6175535561, 15.6175822519, 15.6176109471, 15.6176396417, 15.6176683358, 15.6176970293, 15.6177257222, 15.6177544146, 15.6177831064, 15.6178117976, 15.6178404883, 15.6178691783, 15.6178978679, 15.6179265568, 15.6179552452, 15.617983933, 15.6180126202, 15.6180413069, 15.6180699929, 15.6180986785, 15.6181273634, 15.6181560478, 15.6181847316, 15.6182134148, 15.6182420975, 15.6182707796, 15.6182994611, 15.6183281421, 15.6183568224, 15.6183855023, 15.6184141815, 15.6184428602, 15.6184715383, 15.6185002158, 15.6185288928, 15.6185575692, 15.618586245, 15.6186149203, 15.6186435949, 15.618672269, 15.6187009426, 15.6187296156, 15.618758288, 15.6187869598, 15.6188156311, 15.6188443018, 15.6188729719, 15.6189016414, 15.6189303104, 15.6189589788, 15.6189876467, 15.619016314, 15.6190449807, 15.6190736468, 15.6191023124, 15.6191309774, 15.6191596418, 15.6191883057, 15.619216969, 15.6192456317, 15.6192742938, 15.6193029554, 15.6193316164, 15.6193602769, 15.6193889367, 15.619417596, 15.6194462548, 15.6194749129, 15.6195035705, 15.6195322276, 15.619560884, 15.6195895399, 15.6196181952, 15.61964685, 15.6196755042, 15.6197041578, 15.6197328108, 15.6197614633, 15.6197901152, 15.6198187665, 15.6198474173, 15.6198760675, 15.6199047171, 15.6199333662, 15.6199620147, 15.6199906626, 15.62001931, 15.6200479567, 15.620076603, 15.6201052486, 15.6201338937, 15.6201625382, 15.6201911821, 15.6202198255, 15.6202484683, 15.6202771105, 15.6203057522, 15.6203343933, 15.6203630338, 15.6203916738, 15.6204203132, 15.620448952, 15.6204775903, 15.620506228, 15.6205348651, 15.6205635016, 15.6205921376, 15.620620773, 15.6206494079, 15.6206780421, 15.6207066758, 15.620735309, 15.6207639416, 15.6207925736, 15.620821205, 15.6208498359, 15.6208784662, 15.6209070959, 15.620935725, 15.6209643536, 15.6209929817, 15.6210216091, 15.621050236, 15.6210788623, 15.6211074881, 15.6211361133, 15.6211647379, 15.6211933619, 15.6212219854, 15.6212506083, 15.6212792307, 15.6213078525, 15.6213364737, 15.6213650943, 15.6213937144, 15.6214223339, 15.6214509528, 15.6214795712, 15.621508189, 15.6215368062, 15.6215654229, 15.621594039, 15.6216226546, 15.6216512695, 15.6216798839, 15.6217084977, 15.621737111, 15.6217657237, 15.6217943358, 15.6218229474, 15.6218515584, 15.6218801688, 15.6219087787, 15.621937388, 15.6219659967, 15.6219946048, 15.6220232124, 15.6220518195, 15.6220804259, 15.6221090318, 15.6221376371, 15.6221662419, 15.6221948461, 15.6222234497, 15.6222520527, 15.6222806552, 15.6223092571, 15.6223378585, 15.6223664593, 15.6223950595, 15.6224236591, 15.6224522582, 15.6224808567, 15.6225094547, 15.6225380521, 15.6225666489, 15.6225952451, 15.6226238408, 15.6226524359, 15.6226810305, 15.6227096245, 15.6227382179, 15.6227668107, 15.622795403, 15.6228239947, 15.6228525859, 15.6228811764, 15.6229097665, 15.6229383559, 15.6229669448, 15.6229955331, 15.6230241209, 15.623052708, 15.6230812947, 15.6231098807, 15.6231384662, 15.6231670511, 15.6231956355, 15.6232242192, 15.6232528025, 15.6232813851, 15.6233099672, 15.6233385487, 15.6233671297, 15.62339571, 15.6234242899, 15.6234528691, 15.6234814478, 15.6235100259, 15.6235386035, 15.6235671805, 15.6235957569, 15.6236243328, 15.6236529081, 15.6236814828, 15.6237100569, 15.6237386305, 15.6237672036, 15.623795776, 15.6238243479, 15.6238529192, 15.62388149, 15.6239100602, 15.6239386298, 15.6239671989, 15.6239957674, 15.6240243353, 15.6240529027, 15.6240814695, 15.6241100358, 15.6241386014, 15.6241671665, 15.6241957311, 15.6242242951, 15.6242528585, 15.6242814213, 15.6243099836, 15.6243385453, 15.6243671065, 15.624395667, 15.6244242271, 15.6244527865, 15.6244813454, 15.6245099037, 15.6245384615, 15.6245670187, 15.6245955753, 15.6246241314, 15.6246526869, 15.6246812418, 15.6247097962, 15.62473835, 15.6247669032, 15.6247954559, 15.624824008, 15.6248525595, 15.6248811105, 15.6249096609, 15.6249382107, 15.62496676, 15.6249953087, 15.6250238569, 15.6250524045, 15.6250809515, 15.6251094979, 15.6251380438, 15.6251665892, 15.6251951339, 15.6252236781, 15.6252522217, 15.6252807648, 15.6253093073, 15.6253378493, 15.6253663906, 15.6253949314, 15.6254234717, 15.6254520114, 15.6254805505, 15.625509089, 15.625537627, 15.6255661644, 15.6255947013, 15.6256232376, 15.6256517733, 15.6256803085, 15.6257088431, 15.6257373771, 15.6257659106, 15.6257944435, 15.6258229758, 15.6258515076, 15.6258800388, 15.6259085695, 15.6259370995, 15.6259656291, 15.625994158, 15.6260226864, 15.6260512142, 15.6260797415, 15.6261082682, 15.6261367943, 15.6261653199, 15.6261938449, 15.6262223694, 15.6262508932, 15.6262794166, 15.6263079393, 15.6263364615, 15.6263649831, 15.6263935042, 15.6264220247, 15.6264505446, 15.626479064, 15.6265075828, 15.626536101, 15.6265646187, 15.6265931358, 15.6266216524, 15.6266501683, 15.6266786838, 15.6267071986, 15.6267357129, 15.6267642267, 15.6267927398, 15.6268212524, 15.6268497645, 15.6268782759, 15.6269067869, 15.6269352972, 15.626963807, 15.6269923162, 15.6270208249, 15.627049333, 15.6270778405, 15.6271063475, 15.6271348539, 15.6271633597, 15.627191865, 15.6272203697, 15.6272488739, 15.6272773775, 15.6273058805, 15.627334383, 15.6273628849, 15.6273913862, 15.627419887, 15.6274483872, 15.6274768869, 15.6275053859, 15.6275338845, 15.6275623824, 15.6275908798, 15.6276193767, 15.6276478729, 15.6276763687, 15.6277048638, 15.6277333584, 15.6277618524, 15.6277903459, 15.6278188388, 15.6278473311, 15.6278758229, 15.6279043141, 15.6279328047, 15.6279612948, 15.6279897843, 15.6280182733, 15.6280467617, 15.6280752495, 15.6281037368, 15.6281322235, 15.6281607096, 15.6281891952, 15.6282176802, 15.6282461647, 15.6282746486, 15.6283031319, 15.6283316147, 15.6283600969, 15.6283885785, 15.6284170596, 15.6284455401, 15.6284740201, 15.6285024995, 15.6285309783, 15.6285594566, 15.6285879343, 15.6286164115, 15.628644888, 15.6286733641, 15.6287018395, 15.6287303144, 15.6287587888, 15.6287872625, 15.6288157358, 15.6288442084, 15.6288726805, 15.628901152, 15.628929623, 15.6289580934, 15.6289865632, 15.6290150325, 15.6290435012, 15.6290719694, 15.629100437, 15.629128904, 15.6291573705, 15.6291858364, 15.6292143018, 15.6292427665, 15.6292712308, 15.6292996944, 15.6293281575, 15.6293566201, 15.6293850821, 15.6294135435, 15.6294420043, 15.6294704646, 15.6294989244, 15.6295273835, 15.6295558421, 15.6295843002, 15.6296127577, 15.6296412146, 15.629669671, 15.6296981268, 15.629726582, 15.6297550367, 15.6297834908, 15.6298119444, 15.6298403974, 15.6298688498, 15.6298973017, 15.629925753, 15.6299542038, 15.629982654, 15.6300111036, 15.6300395527, 15.6300680012, 15.6300964491, 15.6301248965, 15.6301533433, 15.6301817896, 15.6302102353, 15.6302386804, 15.630267125, 15.630295569, 15.6303240125, 15.6303524554, 15.6303808978, 15.6304093395, 15.6304377808, 15.6304662214, 15.6304946615, 15.630523101, 15.63055154, 15.6305799784, 15.6306084163, 15.6306368536, 15.6306652903, 15.6306937265, 15.6307221621, 15.6307505972, 15.6307790316, 15.6308074656, 15.630835899, 15.6308643318, 15.630892764, 15.6309211957, 15.6309496268, 15.6309780574, 15.6310064874, 15.6310349169, 15.6310633457, 15.6310917741, 15.6311202018, 15.6311486291, 15.6311770557, 15.6312054818, 15.6312339073, 15.6312623323, 15.6312907567, 15.6313191805, 15.6313476038, 15.6313760266, 15.6314044487, 15.6314328703, 15.6314612914, 15.6314897119, 15.6315181318, 15.6315465512, 15.63157497, 15.6316033882, 15.6316318059, 15.631660223, 15.6316886396, 15.6317170556, 15.6317454711, 15.631773886, 15.6318023003, 15.6318307141, 15.6318591273, 15.6318875399, 15.631915952, 15.6319443636, 15.6319727745, 15.6320011849, 15.6320295948, 15.6320580041, 15.6320864128, 15.632114821, 15.6321432286, 15.6321716357, 15.6322000422, 15.6322284481, 15.6322568535, 15.6322852583, 15.6323136626, 15.6323420663, 15.6323704694, 15.632398872, 15.632427274, 15.6324556755, 15.6324840764, 15.6325124768, 15.6325408765, 15.6325692758, 15.6325976744, 15.6326260726, 15.6326544701, 15.6326828671, 15.6327112635, 15.6327396594, 15.6327680547, 15.6327964495, 15.6328248437, 15.6328532373, 15.6328816304, 15.6329100229, 15.6329384149, 15.6329668063, 15.6329951971, 15.6330235874, 15.6330519772, 15.6330803663, 15.6331087549, 15.633137143, 15.6331655305, 15.6331939174, 15.6332223038, 15.6332506896, 15.6332790749, 15.6333074596, 15.6333358437, 15.6333642273, 15.6333926103, 15.6334209928, 15.6334493747, 15.6334777561, 15.6335061369, 15.6335345171, 15.6335628968, 15.6335912759, 15.6336196544, 15.6336480324, 15.6336764099, 15.6337047868, 15.6337331631, 15.6337615389, 15.6337899141, 15.6338182887, 15.6338466628, 15.6338750364, 15.6339034093, 15.6339317818, 15.6339601536, 15.6339885249, 15.6340168957, 15.6340452659, 15.6340736355, 15.6341020046, 15.6341303731, 15.6341587411, 15.6341871085, 15.6342154753, 15.6342438416, 15.6342722073, 15.6343005725, 15.6343289371, 15.6343573011, 15.6343856646, 15.6344140276, 15.63444239, 15.6344707518, 15.634499113, 15.6345274737, 15.6345558339, 15.6345841935, 15.6346125525, 15.634640911, 15.6346692689, 15.6346976263, 15.6347259831, 15.6347543393, 15.634782695, 15.6348110502, 15.6348394047, 15.6348677588, 15.6348961122, 15.6349244651, 15.6349528175, 15.6349811693, 15.6350095205, 15.6350378712, 15.6350662213, 15.6350945709, 15.6351229199, 15.6351512683, 15.6351796162, 15.6352079635, 15.6352363103, 15.6352646565, 15.6352930022, 15.6353213473, 15.6353496919, 15.6353780359, 15.6354063793, 15.6354347222, 15.6354630645, 15.6354914063, 15.6355197475, 15.6355480881, 15.6355764282, 15.6356047677, 15.6356331067, 15.6356614452, 15.635689783, 15.6357181203, 15.6357464571, 15.6357747933, 15.6358031289, 15.635831464, 15.6358597985, 15.6358881325, 15.6359164659, 15.6359447988, 15.6359731311, 15.6360014628, 15.636029794, 15.6360581247, 15.6360864547, 15.6361147843, 15.6361431132, 15.6361714416, 15.6361997695, 15.6362280968, 15.6362564235, 15.6362847497, 15.6363130753, 15.6363414004, 15.6363697249, 15.6363980489, 15.6364263723, 15.6364546951, 15.6364830174, 15.6365113392, 15.6365396603, 15.636567981, 15.636596301, 15.6366246205, 15.6366529395, 15.6366812579, 15.6367095757, 15.636737893, 15.6367662098, 15.6367945259, 15.6368228416, 15.6368511566, 15.6368794711, 15.6369077851, 15.6369360985, 15.6369644113, 15.6369927236, 15.6370210353, 15.6370493465, 15.6370776571, 15.6371059672, 15.6371342767, 15.6371625857, 15.6371908941, 15.6372192019, 15.6372475092, 15.6372758159, 15.6373041221, 15.6373324277, 15.6373607328, 15.6373890373, 15.6374173413, 15.6374456447, 15.6374739475, 15.6375022498, 15.6375305515, 15.6375588527, 15.6375871533, 15.6376154534, 15.6376437529, 15.6376720519, 15.6377003503, 15.6377286481, 15.6377569454, 15.6377852422, 15.6378135383, 15.637841834, 15.637870129, 15.6378984236, 15.6379267175, 15.6379550109, 15.6379833038, 15.6380115961, 15.6380398878, 15.638068179, 15.6380964696, 15.6381247597, 15.6381530492, 15.6381813382, 15.6382096266, 15.6382379145, 15.6382662018, 15.6382944886, 15.6383227747, 15.6383510604, 15.6383793455, 15.63840763, 15.638435914, 15.6384641974, 15.6384924803, 15.6385207626, 15.6385490444, 15.6385773256, 15.6386056062, 15.6386338863, 15.6386621659, 15.6386904448, 15.6387187233, 15.6387470012, 15.6387752785, 15.6388035553, 15.6388318315, 15.6388601071, 15.6388883823, 15.6389166568, 15.6389449308, 15.6389732043, 15.6390014771, 15.6390297495, 15.6390580213, 15.6390862925, 15.6391145632, 15.6391428333, 15.6391711029, 15.6391993719, 15.6392276403, 15.6392559083, 15.6392841756, 15.6393124424, 15.6393407087, 15.6393689743, 15.6393972395, 15.6394255041, 15.6394537681, 15.6394820316, 15.6395102945, 15.6395385569, 15.6395668187, 15.6395950799, 15.6396233407, 15.6396516008, 15.6396798604, 15.6397081195, 15.639736378, 15.6397646359, 15.6397928933, 15.6398211501, 15.6398494064, 15.6398776621, 15.6399059173, 15.6399341719, 15.639962426, 15.6399906795, 15.6400189325, 15.6400471849, 15.6400754367, 15.640103688, 15.6401319388, 15.640160189, 15.6401884386, 15.6402166877, 15.6402449362, 15.6402731842, 15.6403014316, 15.6403296785, 15.6403579248, 15.6403861706, 15.6404144158, 15.6404426605, 15.6404709046, 15.6404991481, 15.6405273912, 15.6405556336, 15.6405838755, 15.6406121168, 15.6406403576, 15.6406685979, 15.6406968376, 15.6407250767, 15.6407533153, 15.6407815533, 15.6408097908, 15.6408380277, 15.6408662641, 15.6408944999, 15.6409227352, 15.6409509699, 15.640979204, 15.6410074377, 15.6410356707, 15.6410639032, 15.6410921352, 15.6411203666, 15.6411485974, 15.6411768277, 15.6412050574, 15.6412332866, 15.6412615153, 15.6412897434, 15.6413179709, 15.6413461979, 15.6413744243, 15.6414026502, 15.6414308755, 15.6414591003, 15.6414873245, 15.6415155481, 15.6415437713, 15.6415719938, 15.6416002158, 15.6416284373, 15.6416566582, 15.6416848786, 15.6417130984, 15.6417413176, 15.6417695363, 15.6417977544, 15.641825972, 15.6418541891, 15.6418824056, 15.6419106215, 15.6419388369, 15.6419670517, 15.641995266, 15.6420234797, 15.6420516929, 15.6420799056, 15.6421081176, 15.6421363292, 15.6421645401, 15.6421927506, 15.6422209604, 15.6422491697, 15.6422773785, 15.6423055867, 15.6423337944, 15.6423620015, 15.6423902081, 15.6424184141, 15.6424466195, 15.6424748244, 15.6425030288, 15.6425312326, 15.6425594358, 15.6425876385, 15.6426158407, 15.6426440423, 15.6426722433, 15.6427004438, 15.6427286438, 15.6427568432, 15.642785042, 15.6428132403, 15.642841438, 15.6428696352, 15.6428978319, 15.6429260279, 15.6429542235, 15.6429824185, 15.6430106129, 15.6430388068, 15.6430670001, 15.6430951929, 15.6431233851, 15.6431515768, 15.6431797679, 15.6432079585, 15.6432361485, 15.643264338, 15.6432925269, 15.6433207153, 15.6433489031, 15.6433770904, 15.6434052771, 15.6434334633, 15.6434616489, 15.643489834, 15.6435180185, 15.6435462025, 15.6435743859, 15.6436025687, 15.6436307511, 15.6436589328, 15.643687114, 15.6437152947, 15.6437434748, 15.6437716544, 15.6437998334, 15.6438280119, 15.6438561898, 15.6438843671, 15.6439125439, 15.6439407202, 15.6439688959, 15.6439970711, 15.6440252457, 15.6440534198, 15.6440815933, 15.6441097662, 15.6441379386, 15.6441661105, 15.6441942818, 15.6442224526, 15.6442506228, 15.6442787924, 15.6443069615, 15.6443351301, 15.6443632981, 15.6443914656, 15.6444196325, 15.6444477988, 15.6444759647, 15.6445041299, 15.6445322946, 15.6445604588, 15.6445886224, 15.6446167855, 15.644644948, 15.6446731099, 15.6447012713, 15.6447294322, 15.6447575925, 15.6447857523, 15.6448139115, 15.6448420702, 15.6448702283, 15.6448983858, 15.6449265428, 15.6449546993, 15.6449828552, 15.6450110106, 15.6450391654, 15.6450673197, 15.6450954734, 15.6451236266, 15.6451517792, 15.6451799313, 15.6452080828, 15.6452362337, 15.6452643842, 15.645292534, 15.6453206834, 15.6453488321, 15.6453769804, 15.645405128, 15.6454332752, 15.6454614217, 15.6454895678, 15.6455177132, 15.6455458582, 15.6455740026, 15.6456021464, 15.6456302897, 15.6456584324, 15.6456865746, 15.6457147162, 15.6457428573, 15.6457709979, 15.6457991378, 15.6458272773, 15.6458554162, 15.6458835545, 15.6459116923, 15.6459398296, 15.6459679663, 15.6459961024, 15.646024238, 15.6460523731, 15.6460805076, 15.6461086415, 15.6461367749, 15.6461649078, 15.6461930401, 15.6462211718, 15.646249303, 15.6462774337, 15.6463055638, 15.6463336934, 15.6463618224, 15.6463899509, 15.6464180788, 15.6464462062, 15.646474333, 15.6465024593, 15.646530585, 15.6465587102, 15.6465868348, 15.6466149589, 15.6466430824, 15.6466712054, 15.6466993278, 15.6467274497, 15.646755571, 15.6467836918, 15.6468118121, 15.6468399318, 15.6468680509, 15.6468961695, 15.6469242876, 15.6469524051, 15.646980522, 15.6470086384, 15.6470367543, 15.6470648696, 15.6470929844, 15.6471210986, 15.6471492123, 15.6471773254, 15.647205438, 15.64723355, 15.6472616615, 15.6472897724, 15.6473178828, 15.6473459926, 15.6473741019, 15.6474022106, 15.6474303188, 15.6474584265, 15.6474865336, 15.6475146401, 15.6475427461, 15.6475708516, 15.6475989565, 15.6476270608, 15.6476551646, 15.6476832679, 15.6477113706, 15.6477394728, 15.6477675744, 15.6477956755, 15.647823776, 15.647851876, 15.6478799754, 15.6479080743, 15.6479361726, 15.6479642704, 15.6479923676, 15.6480204643, 15.6480485605, 15.6480766561, 15.6481047511, 15.6481328457, 15.6481609396, 15.648189033, 15.6482171259, 15.6482452182, 15.64827331, 15.6483014012, 15.6483294919, 15.648357582, 15.6483856716, 15.6484137606, 15.6484418491, 15.6484699371, 15.6484980245, 15.6485261113, 15.6485541976, 15.6485822834, 15.6486103686, 15.6486384532, 15.6486665373, 15.6486946209, 15.6487227039, 15.6487507864, 15.6487788683, 15.6488069497, 15.6488350306, 15.6488631109, 15.6488911906, 15.6489192698, 15.6489473484, 15.6489754265, 15.6490035041, 15.6490315811, 15.6490596576, 15.6490877335, 15.6491158089, 15.6491438837, 15.649171958, 15.6492000317, 15.6492281049, 15.6492561775, 15.6492842496, 15.6493123212, 15.6493403922, 15.6493684626, 15.6493965325, 15.6494246019, 15.6494526707, 15.649480739, 15.6495088067, 15.6495368739, 15.6495649405, 15.6495930066, 15.6496210721, 15.6496491371, 15.6496772016, 15.6497052655, 15.6497333288, 15.6497613916, 15.6497894539, 15.6498175156, 15.6498455768, 15.6498736374, 15.6499016975, 15.649929757, 15.649957816, 15.6499858745, 15.6500139324, 15.6500419897, 15.6500700465, 15.6500981028, 15.6501261585, 15.6501542137, 15.6501822683, 15.6502103224, 15.6502383759, 15.6502664289, 15.6502944813, 15.6503225332, 15.6503505846, 15.6503786354, 15.6504066857, 15.6504347354, 15.6504627845, 15.6504908332, 15.6505188812, 15.6505469288, 15.6505749758, 15.6506030222, 15.6506310681, 15.6506591135, 15.6506871583, 15.6507152025, 15.6507432463, 15.6507712894, 15.6507993321, 15.6508273741, 15.6508554157, 15.6508834567, 15.6509114971, 15.650939537, 15.6509675764, 15.6509956152, 15.6510236535, 15.6510516912, 15.6510797284, 15.651107765, 15.6511358011, 15.6511638366, 15.6511918716, 15.6512199061, 15.65124794, 15.6512759733, 15.6513040062, 15.6513320384, 15.6513600702, 15.6513881014, 15.651416132, 15.6514441621, 15.6514721916, 15.6515002207, 15.6515282491, 15.651556277, 15.6515843044, 15.6516123312, 15.6516403575, 15.6516683833, 15.6516964085, 15.6517244331, 15.6517524572, 15.6517804808, 15.6518085038, 15.6518365263, 15.6518645482, 15.6518925696, 15.6519205904, 15.6519486107, 15.6519766305, 15.6520046497, 15.6520326683, 15.6520606865, 15.652088704, 15.6521167211, 15.6521447376, 15.6521727535, 15.6522007689, 15.6522287838, 15.6522567981, 15.6522848118, 15.6523128251, 15.6523408377, 15.6523688499, 15.6523968615, 15.6524248725, 15.652452883, 15.652480893, 15.6525089024, 15.6525369113, 15.6525649196, 15.6525929274, 15.6526209346, 15.6526489413, 15.6526769475, 15.6527049531, 15.6527329582, 15.6527609627, 15.6527889667, 15.6528169701, 15.652844973, 15.6528729754, 15.6529009772, 15.6529289784, 15.6529569791, 15.6529849793, 15.6530129789, 15.653040978, 15.6530689766, 15.6530969746, 15.653124972, 15.653152969, 15.6531809653, 15.6532089612, 15.6532369564, 15.6532649512, 15.6532929454, 15.653320939, 15.6533489322, 15.6533769247, 15.6534049167, 15.6534329082, 15.6534608992, 15.6534888896, 15.6535168794, 15.6535448687, 15.6535728575, 15.6536008457, 15.6536288334, 15.6536568205, 15.6536848071, 15.6537127932, 15.6537407787, 15.6537687637, 15.6537967481, 15.653824732, 15.6538527153, 15.6538806981, 15.6539086804, 15.6539366621, 15.6539646432, 15.6539926239, 15.654020604, 15.6540485835, 15.6540765625, 15.654104541, 15.6541325189, 15.6541604962, 15.6541884731, 15.6542164493, 15.6542444251, 15.6542724003, 15.6543003749, 15.6543283491, 15.6543563226, 15.6543842957, 15.6544122681, 15.6544402401, 15.6544682115, 15.6544961824, 15.6545241527, 15.6545521225, 15.6545800917, 15.6546080604, 15.6546360285, 15.6546639961, 15.6546919632, 15.6547199297, 15.6547478957, 15.6547758611, 15.654803826, 15.6548317904, 15.6548597542, 15.6548877175, 15.6549156802, 15.6549436424, 15.654971604, 15.6549995651, 15.6550275257, 15.6550554857, 15.6550834452, 15.6551114041, 15.6551393625, 15.6551673204, 15.6551952777, 15.6552232345, 15.6552511907, 15.6552791464, 15.6553071015, 15.6553350561, 15.6553630102, 15.6553909637, 15.6554189167, 15.6554468691, 15.655474821, 15.6555027723, 15.6555307232, 15.6555586734, 15.6555866232, 15.6556145723, 15.655642521, 15.6556704691, 15.6556984166, 15.6557263637, 15.6557543101, 15.6557822561, 15.6558102015, 15.6558381463, 15.6558660906, 15.6558940344, 15.6559219776, 15.6559499203, 15.6559778625, 15.6560058041, 15.6560337452, 15.6560616857, 15.6560896257, 15.6561175651, 15.656145504, 15.6561734424, 15.6562013802, 15.6562293175, 15.6562572542, 15.6562851904, 15.6563131261, 15.6563410612, 15.6563689958, 15.6563969298, 15.6564248633, 15.6564527962, 15.6564807286, 15.6565086605, 15.6565365918, 15.6565645226, 15.6565924529, 15.6566203826, 15.6566483117, 15.6566762404, 15.6567041685, 15.656732096, 15.656760023, 15.6567879495, 15.6568158754, 15.6568438008, 15.6568717256, 15.6568996499, 15.6569275737, 15.6569554969, 15.6569834196, 15.6570113417, 15.6570392633, 15.6570671844, 15.6570951049, 15.6571230249, 15.6571509443, 15.6571788632, 15.6572067816, 15.6572346994, 15.6572626166, 15.6572905334, 15.6573184496, 15.6573463652, 15.6573742804, 15.6574021949, 15.657430109, 15.6574580225, 15.6574859354, 15.6575138478, 15.6575417597, 15.657569671, 15.6575975818, 15.6576254921, 15.6576534018, 15.657681311, 15.6577092196, 15.6577371277, 15.6577650353, 15.6577929423, 15.6578208488, 15.6578487547, 15.6578766601, 15.6579045649, 15.6579324693, 15.657960373, 15.6579882763, 15.658016179, 15.6580440811, 15.6580719828, 15.6580998838, 15.6581277844, 15.6581556844, 15.6581835838, 15.6582114828, 15.6582393811, 15.658267279, 15.6582951763, 15.658323073, 15.6583509693, 15.6583788649, 15.6584067601, 15.6584346547, 15.6584625488, 15.6584904423, 15.6585183353, 15.6585462277, 15.6585741196, 15.658602011, 15.6586299018, 15.6586577921, 15.6586856819, 15.6587135711, 15.6587414598, 15.6587693479, 15.6587972355, 15.6588251226, 15.6588530091, 15.658880895, 15.6589087805, 15.6589366654, 15.6589645497, 15.6589924336, 15.6590203169, 15.6590481996, 15.6590760818, 15.6591039635, 15.6591318446, 15.6591597252, 15.6591876052, 15.6592154848, 15.6592433637, 15.6592712422, 15.6592991201, 15.6593269974, 15.6593548742, 15.6593827505, 15.6594106263, 15.6594385015, 15.6594663761, 15.6594942502, 15.6595221238, 15.6595499969, 15.6595778694, 15.6596057414, 15.6596336128, 15.6596614837, 15.659689354, 15.6597172239, 15.6597450931, 15.6597729619, 15.6598008301, 15.6598286977, 15.6598565649, 15.6598844315, 15.6599122975, 15.659940163, 15.659968028, 15.6599958924, 15.6600237563, 15.6600516197, 15.6600794825, 15.6601073448, 15.6601352065, 15.6601630677, 15.6601909284, 15.6602187885, 15.6602466481, 15.6602745072, 15.6603023657, 15.6603302237, 15.6603580811, 15.660385938, 15.6604137944, 15.6604416502, 15.6604695055, 15.6604973602, 15.6605252145, 15.6605530681, 15.6605809213, 15.6606087739, 15.6606366259, 15.6606644775, 15.6606923284, 15.6607201789, 15.6607480288, 15.6607758782, 15.660803727, 15.6608315753, 15.6608594231, 15.6608872703, 15.660915117, 15.6609429631, 15.6609708087, 15.6609986538, 15.6610264984, 15.6610543424, 15.6610821858, 15.6611100287, 15.6611378711, 15.661165713, 15.6611935543, 15.6612213951, 15.6612492353, 15.661277075, 15.6613049142, 15.6613327528, 15.6613605909, 15.6613884284, 15.6614162655, 15.6614441019, 15.6614719379, 15.6614997733, 15.6615276081, 15.6615554425, 15.6615832763, 15.6616111095, 15.6616389422, 15.6616667744, 15.6616946061, 15.6617224372, 15.6617502677, 15.6617780978, 15.6618059273, 15.6618337562, 15.6618615847, 15.6618894125, 15.6619172399, 15.6619450667, 15.661972893, 15.6620007187, 15.6620285439, 15.6620563686, 15.6620841927, 15.6621120163, 15.6621398394, 15.6621676619, 15.6621954839, 15.6622233053, 15.6622511262, 15.6622789466, 15.6623067664, 15.6623345857, 15.6623624045, 15.6623902227, 15.6624180404, 15.6624458576, 15.6624736742, 15.6625014903, 15.6625293058, 15.6625571208, 15.6625849353, 15.6626127493, 15.6626405627, 15.6626683755, 15.6626961878, 15.6627239996, 15.6627518109, 15.6627796216, 15.6628074318, 15.6628352415, 15.6628630506, 15.6628908591, 15.6629186672, 15.6629464747, 15.6629742817, 15.6630020881, 15.663029894, 15.6630576993, 15.6630855042, 15.6631133085, 15.6631411122, 15.6631689154, 15.6631967181, 15.6632245203, 15.6632523219, 15.6632801229, 15.6633079235, 15.6633357235, 15.6633635229, 15.6633913219, 15.6634191203, 15.6634469181, 15.6634747155, 15.6635025122, 15.6635303085, 15.6635581042, 15.6635858994, 15.663613694, 15.6636414882, 15.6636692817, 15.6636970748, 15.6637248673, 15.6637526592, 15.6637804507, 15.6638082416, 15.6638360319, 15.6638638218, 15.6638916111, 15.6639193998, 15.663947188, 15.6639749757, 15.6640027629, 15.6640305495, 15.6640583356, 15.6640861211, 15.6641139061, 15.6641416906, 15.6641694746, 15.664197258, 15.6642250408, 15.6642528232, 15.664280605, 15.6643083862, 15.664336167, 15.6643639472, 15.6643917268, 15.664419506, 15.6644472845, 15.6644750626, 15.6645028401, 15.6645306171, 15.6645583936, 15.6645861695, 15.6646139449, 15.6646417197, 15.664669494, 15.6646972678, 15.664725041, 15.6647528138, 15.6647805859, 15.6648083576, 15.6648361287, 15.6648638992, 15.6648916693, 15.6649194388, 15.6649472078, 15.6649749762, 15.6650027441, 15.6650305115, 15.6650582783, 15.6650860446, 15.6651138103, 15.6651415756, 15.6651693403, 15.6651971044, 15.665224868, 15.6652526311, 15.6652803937, 15.6653081557, 15.6653359172, 15.6653636781, 15.6653914386, 15.6654191984, 15.6654469578, 15.6654747166, 15.6655024749, 15.6655302326, 15.6655579898, 15.6655857465, 15.6656135027, 15.6656412583, 15.6656690134, 15.6656967679, 15.6657245219, 15.6657522754, 15.6657800283, 15.6658077807, 15.6658355326, 15.665863284, 15.6658910348, 15.665918785, 15.6659465348, 15.665974284, 15.6660020326, 15.6660297808, 15.6660575284, 15.6660852755, 15.666113022, 15.666140768, 15.6661685135, 15.6661962584, 15.6662240028, 15.6662517467, 15.66627949, 15.6663072328, 15.6663349751, 15.6663627168, 15.666390458, 15.6664181987, 15.6664459388, 15.6664736784, 15.6665014175, 15.666529156, 15.666556894, 15.6665846315, 15.6666123684, 15.6666401048, 15.6666678407, 15.666695576, 15.6667233108, 15.6667510451, 15.6667787788, 15.666806512, 15.6668342447, 15.6668619768, 15.6668897084, 15.6669174395, 15.66694517, 15.6669729001, 15.6670006295, 15.6670283585, 15.6670560869, 15.6670838147, 15.6671115421, 15.6671392689, 15.6671669952, 15.6671947209, 15.6672224461, 15.6672501708, 15.6672778949, 15.6673056185, 15.6673333416, 15.6673610641, 15.6673887862, 15.6674165076, 15.6674442286, 15.667471949, 15.6674996689, 15.6675273882, 15.667555107, 15.6675828253, 15.6676105431, 15.6676382603, 15.667665977, 15.6676936931, 15.6677214088, 15.6677491238, 15.6677768384, 15.6678045524, 15.6678322659, 15.6678599789, 15.6678876913, 15.6679154032, 15.6679431145, 15.6679708254, 15.6679985357, 15.6680262454, 15.6680539547, 15.6680816634, 15.6681093715, 15.6681370792, 15.6681647863, 15.6681924928, 15.6682201989, 15.6682479044, 15.6682756094, 15.6683033138, 15.6683310177, 15.6683587211, 15.668386424, 15.6684141263, 15.6684418281, 15.6684695293, 15.66849723, 15.6685249302, 15.6685526299, 15.668580329, 15.6686080276, 15.6686357256, 15.6686634232, 15.6686911202, 15.6687188166, 15.6687465126, 15.668774208, 15.6688019028, 15.6688295972, 15.668857291, 15.6688849843, 15.668912677, 15.6689403692, 15.6689680609, 15.6689957521, 15.6690234427, 15.6690511328, 15.6690788223, 15.6691065113, 15.6691341998, 15.6691618878, 15.6691895752, 15.6692172621, 15.6692449485, 15.6692726343, 15.6693003196, 15.6693280044, 15.6693556886, 15.6693833723, 15.6694110555, 15.6694387382, 15.6694664203, 15.6694941019, 15.6695217829, 15.6695494635, 15.6695771434, 15.6696048229, 15.6696325018, 15.6696601802, 15.6696878581, 15.6697155354, 15.6697432123, 15.6697708885, 15.6697985643, 15.6698262395, 15.6698539142, 15.6698815883, 15.6699092619, 15.669936935, 15.6699646076, 15.6699922796, 15.6700199511, 15.6700476221, 15.6700752925, 15.6701029624, 15.6701306318, 15.6701583006, 15.670185969, 15.6702136367, 15.670241304, 15.6702689707, 15.6702966369, 15.6703243026, 15.6703519677, 15.6703796323, 15.6704072964, 15.6704349599, 15.6704626229, 15.6704902854, 15.6705179473, 15.6705456088, 15.6705732696, 15.67060093, 15.6706285898, 15.6706562491, 15.6706839079, 15.6707115661, 15.6707392238, 15.670766881, 15.6707945376, 15.6708221938, 15.6708498493, 15.6708775044, 15.6709051589, 15.6709328129, 15.6709604664, 15.6709881193, 15.6710157717, 15.6710434236, 15.6710710749, 15.6710987257, 15.671126376, 15.6711540258, 15.671181675, 15.6712093237, 15.6712369719, 15.6712646195, 15.6712922666, 15.6713199132, 15.6713475592, 15.6713752047, 15.6714028497, 15.6714304942, 15.6714581381, 15.6714857815, 15.6715134244, 15.6715410667, 15.6715687085, 15.6715963498, 15.6716239905, 15.6716516308, 15.6716792705, 15.6717069096, 15.6717345482, 15.6717621863, 15.6717898239, 15.671817461, 15.6718450975, 15.6718727335, 15.6719003689, 15.6719280038, 15.6719556382, 15.6719832721, 15.6720109054, 15.6720385382, 15.6720661705, 15.6720938023, 15.6721214335, 15.6721490642, 15.6721766943, 15.672204324, 15.6722319531, 15.6722595816, 15.6722872097, 15.6723148372, 15.6723424642, 15.6723700906, 15.6723977166, 15.672425342, 15.6724529668, 15.6724805912, 15.672508215, 15.6725358383, 15.672563461, 15.6725910833, 15.672618705, 15.6726463261, 15.6726739468, 15.6727015669, 15.6727291865, 15.6727568055, 15.672784424, 15.672812042, 15.6728396595, 15.6728672764, 15.6728948928, 15.6729225087, 15.6729501241, 15.6729777389, 15.6730053532, 15.673032967, 15.6730605802, 15.6730881929, 15.6731158051, 15.6731434167, 15.6731710279, 15.6731986385, 15.6732262485, 15.6732538581, 15.6732814671, 15.6733090756, 15.6733366835, 15.6733642909, 15.6733918978, 15.6734195042, 15.67344711, 15.6734747154, 15.6735023201, 15.6735299244, 15.6735575281, 15.6735851313, 15.673612734, 15.6736403361, 15.6736679378, 15.6736955388, 15.6737231394, 15.6737507394, 15.6737783389, 15.6738059379, 15.6738335364, 15.6738611343, 15.6738887317, 15.6739163285, 15.6739439249, 15.6739715207, 15.673999116, 15.6740267107, 15.6740543049, 15.6740818986, 15.6741094918, 15.6741370844, 15.6741646766, 15.6741922681, 15.6742198592, 15.6742474497, 15.6742750397, 15.6743026292, 15.6743302182, 15.6743578066, 15.6743853945, 15.6744129818, 15.6744405687, 15.674468155, 15.6744957408, 15.674523326, 15.6745509107, 15.6745784949, 15.6746060786, 15.6746336618, 15.6746612444, 15.6746888265, 15.674716408, 15.6747439891, 15.6747715696, 15.6747991496, 15.674826729, 15.6748543079, 15.6748818863, 15.6749094642, 15.6749370416, 15.6749646184, 15.6749921947, 15.6750197704, 15.6750473457, 15.6750749204, 15.6751024946, 15.6751300682, 15.6751576414, 15.675185214, 15.675212786, 15.6752403576, 15.6752679286, 15.6752954991, 15.6753230691, 15.6753506385, 15.6753782074, 15.6754057758, 15.6754333437, 15.675460911, 15.6754884778, 15.6755160441, 15.6755436098, 15.6755711751, 15.6755987398, 15.6756263039, 15.6756538676, 15.6756814307, 15.6757089933, 15.6757365554, 15.6757641169, 15.6757916779, 15.6758192384, 15.6758467984, 15.6758743578, 15.6759019167, 15.6759294751, 15.6759570329, 15.6759845903, 15.6760121471, 15.6760397033, 15.6760672591, 15.6760948143, 15.676122369, 15.6761499232, 15.6761774768, 15.67620503, 15.6762325825, 15.6762601346, 15.6762876861, 15.6763152372, 15.6763427876, 15.6763703376, 15.676397887, 15.676425436, 15.6764529843, 15.6764805322, 15.6765080795, 15.6765356263, 15.6765631726, 15.6765907184, 15.6766182636, 15.6766458083, 15.6766733525, 15.6767008961, 15.6767284392, 15.6767559818, 15.6767835239, 15.6768110655, 15.6768386065, 15.676866147, 15.6768936869, 15.6769212264, 15.6769487653, 15.6769763037, 15.6770038416, 15.6770313789, 15.6770589157, 15.677086452, 15.6771139878, 15.677141523, 15.6771690577, 15.6771965919, 15.6772241256, 15.6772516587, 15.6772791913, 15.6773067234, 15.677334255, 15.677361786, 15.6773893165, 15.6774168465, 15.6774443759, 15.6774719049, 15.6774994333, 15.6775269612, 15.6775544885, 15.6775820154, 15.6776095417, 15.6776370674, 15.6776645927, 15.6776921174, 15.6777196416, 15.6777471653, 15.6777746885, 15.6778022111, 15.6778297332, 15.6778572548, 15.6778847759, 15.6779122964, 15.6779398164, 15.6779673359, 15.6779948548, 15.6780223733, 15.6780498912, 15.6780774085, 15.6781049254, 15.6781324417, 15.6781599575, 15.6781874728, 15.6782149876, 15.6782425018, 15.6782700155, 15.6782975287, 15.6783250414, 15.6783525535, 15.6783800651, 15.6784075762, 15.6784350868, 15.6784625968, 15.6784901063, 15.6785176153, 15.6785451237, 15.6785726317, 15.6786001391, 15.678627646, 15.6786551524, 15.6786826582, 15.6787101635, 15.6787376683, 15.6787651726, 15.6787926763, 15.6788201795, 15.6788476822, 15.6788751844, 15.678902686, 15.6789301872, 15.6789576877, 15.6789851878, 15.6790126874, 15.6790401864, 15.6790676849, 15.6790951829, 15.6791226803, 15.6791501772, 15.6791776737, 15.6792051695, 15.6792326649, 15.6792601597, 15.679287654, 15.6793151478, 15.6793426411, 15.6793701338, 15.679397626, 15.6794251177, 15.6794526089, 15.6794800995, 15.6795075896, 15.6795350792, 15.6795625683, 15.6795900568, 15.6796175448, 15.6796450323, 15.6796725193, 15.6797000058, 15.6797274917, 15.6797549771, 15.679782462, 15.6798099463, 15.6798374302, 15.6798649135, 15.6798923963, 15.6799198785, 15.6799473603, 15.6799748415, 15.6800023222, 15.6800298023, 15.680057282, 15.6800847611, 15.6801122397, 15.6801397178, 15.6801671953, 15.6801946723, 15.6802221488, 15.6802496248, 15.6802771003, 15.6803045752, 15.6803320496, 15.6803595235, 15.6803869969, 15.6804144697, 15.680441942, 15.6804694138, 15.6804968851, 15.6805243559, 15.6805518261, 15.6805792958, 15.680606765, 15.6806342336, 15.6806617017, 15.6806891694, 15.6807166364, 15.680744103, 15.6807715691, 15.6807990346, 15.6808264996, 15.680853964, 15.680881428, 15.6809088914, 15.6809363543, 15.6809638167, 15.6809912786, 15.6810187399, 15.6810462007, 15.681073661, 15.6811011208, 15.68112858, 15.6811560387, 15.6811834969, 15.6812109546, 15.6812384118, 15.6812658684, 15.6812933245, 15.6813207801, 15.6813482352, 15.6813756897, 15.6814031437, 15.6814305972, 15.6814580502, 15.6814855027, 15.6815129546, 15.681540406, 15.6815678569, 15.6815953073, 15.6816227571, 15.6816502064, 15.6816776552, 15.6817051035, 15.6817325512, 15.6817599985, 15.6817874452, 15.6818148914, 15.681842337, 15.6818697822, 15.6818972268, 15.6819246709, 15.6819521145, 15.6819795575, 15.682007, 15.6820344421, 15.6820618835, 15.6820893245, 15.682116765, 15.6821442049, 15.6821716443, 15.6821990831, 15.6822265215, 15.6822539593, 15.6822813967, 15.6823088334, 15.6823362697, 15.6823637055, 15.6823911407, 15.6824185754, 15.6824460096, 15.6824734432, 15.6825008764, 15.682528309, 15.6825557411, 15.6825831727, 15.6826106037, 15.6826380342, 15.6826654642, 15.6826928937, 15.6827203227, 15.6827477511, 15.6827751791, 15.6828026065, 15.6828300333, 15.6828574597, 15.6828848855, 15.6829123109, 15.6829397357, 15.6829671599, 15.6829945837, 15.6830220069, 15.6830494296, 15.6830768518, 15.6831042735, 15.6831316946, 15.6831591152, 15.6831865354, 15.6832139549, 15.683241374, 15.6832687925, 15.6832962106, 15.6833236281, 15.683351045, 15.6833784615, 15.6834058774, 15.6834332928, 15.6834607077, 15.6834881221, 15.683515536, 15.6835429493, 15.6835703621, 15.6835977744, 15.6836251861, 15.6836525974, 15.6836800081, 15.6837074183, 15.683734828, 15.6837622372, 15.6837896458, 15.6838170539, 15.6838444615, 15.6838718686, 15.6838992752, 15.6839266812, 15.6839540867, 15.6839814917, 15.6840088962, 15.6840363002, 15.6840637036, 15.6840911065, 15.6841185089, 15.6841459108, 15.6841733122, 15.684200713, 15.6842281133, 15.6842555131, 15.6842829124, 15.6843103111, 15.6843377094, 15.6843651071, 15.6843925043, 15.6844199009, 15.6844472971, 15.6844746927, 15.6845020878, 15.6845294824, 15.6845568765, 15.68458427, 15.6846116631, 15.6846390556, 15.6846664476, 15.684693839, 15.68472123, 15.6847486204, 15.6847760103, 15.6848033997, 15.6848307886, 15.6848581769, 15.6848855648, 15.6849129521, 15.6849403389, 15.6849677251, 15.6849951109, 15.6850224961, 15.6850498808, 15.685077265, 15.6851046487, 15.6851320319, 15.6851594145, 15.6851867966, 15.6852141782, 15.6852415593, 15.6852689398, 15.6852963198, 15.6853236994, 15.6853510784, 15.6853784568, 15.6854058348, 15.6854332122, 15.6854605891, 15.6854879655, 15.6855153414, 15.6855427168, 15.6855700916, 15.6855974659, 15.6856248397, 15.685652213, 15.6856795858, 15.685706958, 15.6857343297, 15.6857617009, 15.6857890716, 15.6858164418, 15.6858438114, 15.6858711806, 15.6858985492, 15.6859259172, 15.6859532848, 15.6859806519, 15.6860080184, 15.6860353844, 15.6860627499, 15.6860901149, 15.6861174793, 15.6861448433, 15.6861722067, 15.6861995696, 15.6862269319, 15.6862542938, 15.6862816551, 15.686309016, 15.6863363763, 15.6863637361, 15.6863910953, 15.6864184541, 15.6864458123, 15.68647317, 15.6865005272, 15.6865278839, 15.68655524, 15.6865825956, 15.6866099508, 15.6866373053, 15.6866646594, 15.686692013, 15.686719366, 15.6867467185, 15.6867740705, 15.686801422, 15.686828773, 15.6868561234, 15.6868834734, 15.6869108228, 15.6869381717, 15.68696552, 15.6869928679, 15.6870202152, 15.6870475621, 15.6870749084, 15.6871022541, 15.6871295994, 15.6871569441, 15.6871842884, 15.6872116321, 15.6872389753, 15.6872663179, 15.6872936601, 15.6873210017, 15.6873483428, 15.6873756834, 15.6874030235, 15.6874303631, 15.6874577021, 15.6874850407, 15.6875123787, 15.6875397161, 15.6875670531, 15.6875943896, 15.6876217255, 15.6876490609, 15.6876763958, 15.6877037302, 15.6877310641, 15.6877583974, 15.6877857303, 15.6878130626, 15.6878403944, 15.6878677256, 15.6878950564, 15.6879223866, 15.6879497164, 15.6879770456, 15.6880043742, 15.6880317024, 15.6880590301, 15.6880863572, 15.6881136838, 15.6881410099, 15.6881683355, 15.6881956606, 15.6882229851, 15.6882503091, 15.6882776326, 15.6883049556, 15.6883322781, 15.6883596001, 15.6883869215, 15.6884142424, 15.6884415628, 15.6884688827, 15.6884962021, 15.688523521, 15.6885508393, 15.6885781571, 15.6886054744, 15.6886327912, 15.6886601075, 15.6886874232, 15.6887147385, 15.6887420532, 15.6887693674, 15.6887966811, 15.6888239942, 15.6888513069, 15.688878619, 15.6889059306, 15.6889332417, 15.6889605523, 15.6889878624, 15.6890151719, 15.6890424809, 15.6890697894, 15.6890970974, 15.6891244049, 15.6891517119, 15.6891790183, 15.6892063242, 15.6892336297, 15.6892609346, 15.6892882389, 15.6893155428, 15.6893428461, 15.689370149, 15.6893974513, 15.6894247531, 15.6894520543, 15.6894793551, 15.6895066553, 15.6895339551, 15.6895612543, 15.689588553, 15.6896158512, 15.6896431488, 15.689670446, 15.6896977426, 15.6897250387, 15.6897523343, 15.6897796294, 15.6898069239, 15.689834218, 15.6898615115, 15.6898888045, 15.689916097, 15.689943389, 15.6899706805, 15.6899979714, 15.6900252619, 15.6900525518, 15.6900798412, 15.6901071301, 15.6901344184, 15.6901617063, 15.6901889936, 15.6902162804, 15.6902435667, 15.6902708525, 15.6902981378, 15.6903254225, 15.6903527068, 15.6903799905, 15.6904072737, 15.6904345564, 15.6904618386, 15.6904891202, 15.6905164014, 15.690543682, 15.6905709621, 15.6905982417, 15.6906255208, 15.6906527993, 15.6906800774, 15.6907073549, 15.6907346319, 15.6907619084, 15.6907891844, 15.6908164599, 15.6908437349, 15.6908710093, 15.6908982832, 15.6909255566, 15.6909528295, 15.6909801019, 15.6910073737, 15.6910346451, 15.6910619159, 15.6910891862, 15.691116456, 15.6911437253, 15.6911709941, 15.6911982623, 15.6912255301, 15.6912527973, 15.691280064, 15.6913073302, 15.6913345959, 15.691361861, 15.6913891257, 15.6914163898, 15.6914436534, 15.6914709165, 15.6914981791, 15.6915254412, 15.6915527027, 15.6915799638, 15.6916072243, 15.6916344843, 15.6916617438, 15.6916890028, 15.6917162612, 15.6917435192, 15.6917707766, 15.6917980335, 15.6918252899, 15.6918525458, 15.6918798012, 15.691907056, 15.6919343104, 15.6919615642, 15.6919888175, 15.6920160703, 15.6920433226, 15.6920705744, 15.6920978256, 15.6921250764, 15.6921523266, 15.6921795763, 15.6922068255, 15.6922340742, 15.6922613224, 15.69228857, 15.6923158171, 15.6923430638, 15.6923703099, 15.6923975555, 15.6924248005, 15.6924520451, 15.6924792892, 15.6925065327, 15.6925337757, 15.6925610182, 15.6925882602, 15.6926155017, 15.6926427427, 15.6926699831, 15.692697223, 15.6927244625, 15.6927517014, 15.6927789398, 15.6928061776, 15.692833415, 15.6928606518, 15.6928878882, 15.692915124, 15.6929423593, 15.6929695941, 15.6929968284, 15.6930240621, 15.6930512954, 15.6930785281, 15.6931057604, 15.6931329921, 15.6931602233, 15.6931874539, 15.6932146841, 15.6932419138, 15.6932691429, 15.6932963715, 15.6933235996, 15.6933508272, 15.6933780543, 15.6934052809, 15.6934325069, 15.6934597325, 15.6934869575, 15.693514182, 15.693541406, 15.6935686295, 15.6935958525, 15.6936230749, 15.6936502969, 15.6936775183, 15.6937047392, 15.6937319596, 15.6937591795, 15.6937863989, 15.6938136178, 15.6938408361, 15.6938680539, 15.6938952713, 15.6939224881, 15.6939497044, 15.6939769202, 15.6940041354, 15.6940313502, 15.6940585644, 15.6940857782, 15.6941129914, 15.6941402041, 15.6941674163, 15.6941946279, 15.6942218391, 15.6942490498, 15.6942762599, 15.6943034695, 15.6943306786, 15.6943578872, 15.6943850953, 15.6944123029, 15.6944395099, 15.6944667165, 15.6944939225, 15.694521128, 15.694548333, 15.6945755375, 15.6946027415, 15.694629945, 15.6946571479, 15.6946843504, 15.6947115523, 15.6947387537, 15.6947659546, 15.694793155, 15.6948203549, 15.6948475542, 15.6948747531, 15.6949019514, 15.6949291493, 15.6949563466, 15.6949835434, 15.6950107397, 15.6950379354, 15.6950651307, 15.6950923254, 15.6951195197, 15.6951467134, 15.6951739066, 15.6952010993, 15.6952282915, 15.6952554832, 15.6952826743, 15.695309865, 15.6953370551, 15.6953642447, 15.6953914339, 15.6954186225, 15.6954458105, 15.6954729981, 15.6955001852, 15.6955273717, 15.6955545578, 15.6955817433, 15.6956089283, 15.6956361128, 15.6956632968, 15.6956904803, 15.6957176632, 15.6957448457, 15.6957720276, 15.695799209, 15.69582639, 15.6958535704, 15.6958807503, 15.6959079296, 15.6959351085, 15.6959622869, 15.6959894647, 15.696016642, 15.6960438189, 15.6960709952, 15.696098171, 15.6961253462, 15.696152521, 15.6961796953, 15.696206869, 15.6962340423, 15.696261215, 15.6962883872, 15.6963155589, 15.6963427301, 15.6963699008, 15.6963970709, 15.6964242406, 15.6964514097, 15.6964785784, 15.6965057465, 15.6965329141, 15.6965600812, 15.6965872478, 15.6966144138, 15.6966415794, 15.6966687444, 15.696695909, 15.696723073, 15.6967502365, 15.6967773995, 15.696804562, 15.696831724, 15.6968588855, 15.6968860464, 15.6969132069, 15.6969403668, 15.6969675262, 15.6969946851, 15.6970218435, 15.6970490014, 15.6970761588, 15.6971033157, 15.697130472, 15.6971576279, 15.6971847832, 15.697211938, 15.6972390924, 15.6972662462, 15.6972933995, 15.6973205522, 15.6973477045, 15.6973748563, 15.6974020075, 15.6974291582, 15.6974563085, 15.6974834582, 15.6975106074, 15.6975377561, 15.6975649043, 15.6975920519, 15.6976191991, 15.6976463457, 15.6976734919, 15.6977006375, 15.6977277826, 15.6977549272, 15.6977820713, 15.6978092149, 15.697836358, 15.6978635005, 15.6978906426, 15.6979177841, 15.6979449251, 15.6979720657, 15.6979992057, 15.6980263452, 15.6980534842, 15.6980806226, 15.6981077606, 15.6981348981, 15.698162035, 15.6981891714, 15.6982163074, 15.6982434428, 15.6982705777, 15.6982977121, 15.698324846, 15.6983519793, 15.6983791122, 15.6984062446, 15.6984333764, 15.6984605077, 15.6984876386, 15.6985147689, 15.6985418987, 15.698569028, 15.6985961567, 15.698623285, 15.6986504128, 15.69867754, 15.6987046668, 15.698731793, 15.6987589187, 15.6987860439, 15.6988131686, 15.6988402928, 15.6988674165, 15.6988945397, 15.6989216623, 15.6989487845, 15.6989759061, 15.6990030273, 15.6990301479, 15.699057268, 15.6990843876, 15.6991115067, 15.6991386253, 15.6991657433, 15.6991928609, 15.699219978, 15.6992470945, 15.6992742105, 15.6993013261, 15.6993284411, 15.6993555556, 15.6993826696, 15.6994097831, 15.699436896, 15.6994640085, 15.6994911205, 15.6995182319, 15.6995453429, 15.6995724533, 15.6995995632, 15.6996266726, 15.6996537815, 15.6996808899, 15.6997079978, 15.6997351052, 15.699762212, 15.6997893184, 15.6998164242, 15.6998435296, 15.6998706344, 15.6998977387, 15.6999248425, 15.6999519458, 15.6999790486, 15.7000061509, 15.7000332527, 15.7000603539, 15.7000874547, 15.7001145549, 15.7001416546, 15.7001687539, 15.7001958526, 15.7002229508, 15.7002500485, 15.7002771457, 15.7003042424, 15.7003313385, 15.7003584342, 15.7003855294, 15.700412624, 15.7004397181, 15.7004668118, 15.7004939049, 15.7005209975, 15.7005480896, 15.7005751812, 15.7006022723, 15.7006293629, 15.7006564529, 15.7006835425, 15.7007106315, 15.7007377201, 15.7007648081, 15.7007918956, 15.7008189826, 15.7008460691, 15.7008731551, 15.7009002406, 15.7009273256, 15.7009544101, 15.700981494, 15.7010085775, 15.7010356604, 15.7010627429, 15.7010898248, 15.7011169062, 15.7011439872, 15.7011710676, 15.7011981475, 15.7012252268, 15.7012523057, 15.7012793841, 15.701306462, 15.7013335393, 15.7013606162, 15.7013876925, 15.7014147683, 15.7014418437, 15.7014689185, 15.7014959928, 15.7015230666, 15.7015501399, 15.7015772126, 15.7016042849, 15.7016313567, 15.7016584279, 15.7016854987, 15.7017125689, 15.7017396387, 15.7017667079, 15.7017937766, 15.7018208448, 15.7018479125, 15.7018749797, 15.7019020464, 15.7019291126, 15.7019561783, 15.7019832434, 15.7020103081, 15.7020373722, 15.7020644359, 15.702091499, 15.7021185616, 15.7021456238, 15.7021726854, 15.7021997465, 15.7022268071, 15.7022538672, 15.7022809267, 15.7023079858, 15.7023350444, 15.7023621024, 15.70238916, 15.702416217, 15.7024432736, 15.7024703296, 15.7024973851, 15.7025244401, 15.7025514946, 15.7025785486, 15.7026056021, 15.7026326551, 15.7026597076, 15.7026867595, 15.702713811, 15.702740862, 15.7027679124, 15.7027949623, 15.7028220118, 15.7028490607, 15.7028761091, 15.702903157, 15.7029302044, 15.7029572513, 15.7029842977, 15.7030113436, 15.703038389, 15.7030654339, 15.7030924782, 15.7031195221, 15.7031465654, 15.7031736083, 15.7032006506, 15.7032276924, 15.7032547337, 15.7032817746, 15.7033088149, 15.7033358547, 15.703362894, 15.7033899328, 15.703416971, 15.7034440088, 15.7034710461, 15.7034980828, 15.7035251191, 15.7035521548, 15.7035791901, 15.7036062248, 15.703633259, 15.7036602928, 15.703687326, 15.7037143587, 15.7037413909, 15.7037684226, 15.7037954538, 15.7038224844, 15.7038495146, 15.7038765443, 15.7039035734, 15.7039306021, 15.7039576302, 15.7039846579, 15.704011685, 15.7040387117, 15.7040657378, 15.7040927634, 15.7041197885, 15.7041468131, 15.7041738372, 15.7042008608, 15.7042278839, 15.7042549065, 15.7042819286, 15.7043089501, 15.7043359712, 15.7043629917, 15.7043900118, 15.7044170313, 15.7044440504, 15.7044710689, 15.7044980869, 15.7045251044, 15.7045521215, 15.704579138, 15.704606154, 15.7046331695, 15.7046601845, 15.7046871989, 15.7047142129, 15.7047412264, 15.7047682394, 15.7047952518, 15.7048222638, 15.7048492752, 15.7048762862, 15.7049032966, 15.7049303065, 15.704957316, 15.7049843249, 15.7050113333, 15.7050383412, 15.7050653486, 15.7050923555, 15.7051193619, 15.7051463678, 15.7051733732, 15.7052003781, 15.7052273824, 15.7052543863, 15.7052813897, 15.7053083925, 15.7053353949, 15.7053623967, 15.705389398, 15.7054163989, 15.7054433992, 15.705470399, 15.7054973984, 15.7055243972, 15.7055513955, 15.7055783933, 15.7056053906, 15.7056323874, 15.7056593836, 15.7056863794, 15.7057133747, 15.7057403695, 15.7057673637, 15.7057943575, 15.7058213508, 15.7058483435, 15.7058753358, 15.7059023275, 15.7059293187, 15.7059563095, 15.7059832997, 15.7060102894, 15.7060372786, 15.7060642673, 15.7060912555, 15.7061182432, 15.7061452304, 15.7061722171, 15.7061992033, 15.706226189, 15.7062531742, 15.7062801588, 15.706307143, 15.7063341267, 15.7063611098, 15.7063880925, 15.7064150746, 15.7064420563, 15.7064690374, 15.7064960181, 15.7065229982, 15.7065499778, 15.7065769569, 15.7066039356, 15.7066309137, 15.7066578913, 15.7066848684, 15.706711845, 15.7067388211, 15.7067657967, 15.7067927718, 15.7068197463, 15.7068467204, 15.706873694, 15.7069006671, 15.7069276396, 15.7069546117, 15.7069815832, 15.7070085543, 15.7070355248, 15.7070624949, 15.7070894644, 15.7071164335, 15.707143402, 15.70717037, 15.7071973375, 15.7072243045, 15.7072512711, 15.7072782371, 15.7073052026, 15.7073321676, 15.7073591321, 15.7073860961, 15.7074130596, 15.7074400226, 15.707466985, 15.707493947, 15.7075209085, 15.7075478695, 15.7075748299, 15.7076017899, 15.7076287493, 15.7076557083, 15.7076826668, 15.7077096247, 15.7077365822, 15.7077635391, 15.7077904955, 15.7078174515, 15.7078444069, 15.7078713618, 15.7078983162, 15.7079252702, 15.7079522236, 15.7079791765, 15.7080061289, 15.7080330808, 15.7080600322, 15.7080869831, 15.7081139335, 15.7081408834, 15.7081678328, 15.7081947817, 15.70822173, 15.7082486779, 15.7082756253, 15.7083025722, 15.7083295185, 15.7083564644, 15.7083834098, 15.7084103546, 15.708437299, 15.7084642428, 15.7084911862, 15.708518129, 15.7085450714, 15.7085720132, 15.7085989545, 15.7086258954, 15.7086528357, 15.7086797755, 15.7087067148, 15.7087336537, 15.708760592, 15.7087875298, 15.7088144671, 15.7088414039, 15.7088683402, 15.708895276, 15.7089222113, 15.7089491461, 15.7089760804, 15.7090030142, 15.7090299475, 15.7090568803, 15.7090838126, 15.7091107443, 15.7091376756, 15.7091646064, 15.7091915367, 15.7092184664, 15.7092453957, 15.7092723245, 15.7092992527, 15.7093261805, 15.7093531077, 15.7093800345, 15.7094069607, 15.7094338865, 15.7094608117, 15.7094877365, 15.7095146607, 15.7095415844, 15.7095685077, 15.7095954304, 15.7096223526, 15.7096492744, 15.7096761956, 15.7097031163, 15.7097300365, 15.7097569563, 15.7097838755, 15.7098107942, 15.7098377124, 15.7098646301, 15.7098915473, 15.709918464, 15.7099453802, 15.7099722959, 15.7099992111, 15.7100261258, 15.71005304, 15.7100799537, 15.7101068669, 15.7101337796, 15.7101606918, 15.7101876035, 15.7102145147, 15.7102414253, 15.7102683355, 15.7102952452, 15.7103221544, 15.710349063, 15.7103759712, 15.7104028789, 15.710429786, 15.7104566927, 15.7104835989, 15.7105105045, 15.7105374097, 15.7105643144, 15.7105912185, 15.7106181222, 15.7106450253, 15.710671928, 15.7106988301, 15.7107257318, 15.7107526329, 15.7107795336, 15.7108064337, 15.7108333333, 15.7108602325, 15.7108871311, 15.7109140293, 15.7109409269, 15.710967824, 15.7109947207, 15.7110216168, 15.7110485124, 15.7110754076, 15.7111023022, 15.7111291963, 15.7111560899, 15.7111829831, 15.7112098757, 15.7112367678, 15.7112636594, 15.7112905505, 15.7113174411, 15.7113443313, 15.7113712209, 15.71139811, 15.7114249986, 15.7114518867, 15.7114787743, 15.7115056614, 15.711532548, 15.7115594341, 15.7115863198, 15.7116132049, 15.7116400895, 15.7116669736, 15.7116938572, 15.7117207403, 15.7117476229, 15.711774505, 15.7118013866, 15.7118282677, 15.7118551483, 15.7118820284, 15.7119089079, 15.711935787, 15.7119626656, 15.7119895437, 15.7120164213, 15.7120432984, 15.712070175, 15.7120970511, 15.7121239267, 15.7121508018, 15.7121776764, 15.7122045504, 15.712231424, 15.7122582971, 15.7122851697, 15.7123120418, 15.7123389134, 15.7123657844, 15.712392655, 15.7124195251, 15.7124463947, 15.7124732638, 15.7125001324, 15.7125270004, 15.712553868, 15.7125807351, 15.7126076017, 15.7126344678, 15.7126613333, 15.7126881984, 15.712715063, 15.7127419271, 15.7127687907, 15.7127956537, 15.7128225163, 15.7128493784, 15.71287624, 15.712903101, 15.7129299616, 15.7129568217, 15.7129836813, 15.7130105404, 15.7130373989, 15.713064257, 15.7130911146, 15.7131179717, 15.7131448282, 15.7131716843, 15.7131985399, 15.713225395, 15.7132522495, 15.7132791036, 15.7133059572, 15.7133328103, 15.7133596629, 15.7133865149, 15.7134133665, 15.7134402176, 15.7134670682, 15.7134939183, 15.7135207678, 15.7135476169, 15.7135744655, 15.7136013136, 15.7136281612, 15.7136550082, 15.7136818548, 15.7137087009, 15.7137355465, 15.7137623916, 15.7137892362, 15.7138160802, 15.7138429238, 15.7138697669, 15.7138966095, 15.7139234516, 15.7139502932, 15.7139771343, 15.7140039748, 15.7140308149, 15.7140576545, 15.7140844936, 15.7141113322, 15.7141381703, 15.7141650079, 15.714191845, 15.7142186816, 15.7142455177, 15.7142723533, 15.7142991884, 15.714326023, 15.7143528571, 15.7143796907, 15.7144065238, 15.7144333564, 15.7144601885, 15.7144870201, 15.7145138512, 15.7145406818, 15.7145675119, 15.7145943415, 15.7146211706, 15.7146479992, 15.7146748273, 15.7147016549, 15.714728482, 15.7147553086, 15.7147821348, 15.7148089604, 15.7148357855, 15.7148626101, 15.7148894342, 15.7149162579, 15.714943081, 15.7149699036, 15.7149967257, 15.7150235473, 15.7150503685, 15.7150771891, 15.7151040092, 15.7151308289, 15.715157648, 15.7151844666, 15.7152112848, 15.7152381024, 15.7152649195, 15.7152917362, 15.7153185523, 15.715345368, 15.7153721831, 15.7153989978, 15.7154258119, 15.7154526256, 15.7154794387, 15.7155062514, 15.7155330635, 15.7155598752, 15.7155866863, 15.715613497, 15.7156403072, 15.7156671168, 15.715693926, 15.7157207347, 15.7157475428, 15.7157743505, 15.7158011577, 15.7158279644, 15.7158547705, 15.7158815762, 15.7159083814, 15.7159351861, 15.7159619903, 15.7159887939, 15.7160155971, 15.7160423998, 15.716069202, 15.7160960037, 15.7161228049, 15.7161496056, 15.7161764058, 15.7162032055, 15.7162300047, 15.7162568034, 15.7162836016, 15.7163103993, 15.7163371966, 15.7163639933, 15.7163907895, 15.7164175852, 15.7164443804, 15.7164711752, 15.7164979694, 15.7165247631, 15.7165515564, 15.7165783491, 15.7166051413, 15.7166319331, 15.7166587243, 15.7166855151, 15.7167123053, 15.7167390951, 15.7167658843, 15.7167926731, 15.7168194613, 15.7168462491, 15.7168730364, 15.7168998231, 15.7169266094, 15.7169533952, 15.7169801804, 15.7170069652, 15.7170337495, 15.7170605333, 15.7170873166, 15.7171140993, 15.7171408816, 15.7171676634, 15.7171944447, 15.7172212255, 15.7172480058, 15.7172747856, 15.7173015649, 15.7173283438, 15.7173551221, 15.7173818999, 15.7174086772, 15.717435454, 15.7174622303, 15.7174890062, 15.7175157815, 15.7175425563, 15.7175693307, 15.7175961045, 15.7176228779, 15.7176496507, 15.7176764231, 15.7177031949, 15.7177299663, 15.7177567371, 15.7177835075, 15.7178102774, 15.7178370467, 15.7178638156, 15.717890584, 15.7179173519, 15.7179441193, 15.7179708861, 15.7179976525, 15.7180244184, 15.7180511838, 15.7180779487, 15.7181047131, 15.718131477, 15.7181582404, 15.7181850034, 15.7182117658, 15.7182385277, 15.7182652891, 15.71829205, 15.7183188105, 15.7183455704, 15.7183723299, 15.7183990888, 15.7184258472, 15.7184526052, 15.7184793626, 15.7185061196, 15.7185328761, 15.718559632, 15.7185863875, 15.7186131425, 15.718639897, 15.7186666509, 15.7186934044, 15.7187201574, 15.7187469099, 15.7187736619, 15.7188004134, 15.7188271644, 15.7188539149, 15.7188806649, 15.7189074144, 15.7189341635, 15.718960912, 15.71898766, 15.7190144075, 15.7190411546, 15.7190679011, 15.7190946472, 15.7191213927, 15.7191481378, 15.7191748823, 15.7192016264, 15.71922837, 15.719255113, 15.7192818556, 15.7193085977, 15.7193353393, 15.7193620804, 15.7193888209, 15.719415561, 15.7194423006, 15.7194690397, 15.7194957784, 15.7195225165, 15.7195492541, 15.7195759912, 15.7196027278, 15.719629464, 15.7196561996, 15.7196829347, 15.7197096694, 15.7197364035, 15.7197631372, 15.7197898704, 15.719816603, 15.7198433352, 15.7198700669, 15.719896798, 15.7199235287, 15.7199502589, 15.7199769886, 15.7200037178, 15.7200304465, 15.7200571747, 15.7200839024, 15.7201106296, 15.7201373564, 15.7201640826, 15.7201908083, 15.7202175335, 15.7202442583, 15.7202709825, 15.7202977063, 15.7203244295, 15.7203511523, 15.7203778746, 15.7204045963, 15.7204313176, 15.7204580384, 15.7204847587, 15.7205114785, 15.7205381978, 15.7205649166, 15.7205916349, 15.7206183527, 15.72064507, 15.7206717868, 15.7206985032, 15.720725219, 15.7207519343, 15.7207786492, 15.7208053635, 15.7208320774, 15.7208587907, 15.7208855036, 15.720912216, 15.7209389278, 15.7209656392, 15.7209923501, 15.7210190605, 15.7210457704, 15.7210724798, 15.7210991887, 15.7211258971, 15.721152605, 15.7211793125, 15.7212060194, 15.7212327258, 15.7212594318, 15.7212861372, 15.7213128422, 15.7213395466, 15.7213662506, 15.7213929541, 15.721419657, 15.7214463595, 15.7214730615, 15.721499763, 15.721526464, 15.7215531645, 15.7215798645, 15.721606564, 15.7216332631, 15.7216599616, 15.7216866596, 15.7217133572, 15.7217400542, 15.7217667508, 15.7217934468, 15.7218201424, 15.7218468375, 15.721873532, 15.7219002261, 15.7219269197, 15.7219536128, 15.7219803054, 15.7220069975, 15.7220336891, 15.7220603802, 15.7220870709, 15.722113761, 15.7221404506, 15.7221671398, 15.7221938284, 15.7222205166, 15.7222472043, 15.7222738914, 15.7223005781, 15.7223272643, 15.72235395, 15.7223806352, 15.7224073199, 15.7224340041, 15.7224606878, 15.722487371, 15.7225140537, 15.722540736, 15.7225674177, 15.722594099, 15.7226207797, 15.72264746, 15.7226741397, 15.722700819, 15.7227274978, 15.7227541761, 15.7227808539, 15.7228075312, 15.722834208, 15.7228608843, 15.7228875601, 15.7229142354, 15.7229409103, 15.7229675846, 15.7229942585, 15.7230209318, 15.7230476047, 15.723074277, 15.7231009489, 15.7231276203, 15.7231542912, 15.7231809616, 15.7232076315, 15.7232343009, 15.7232609698, 15.7232876382, 15.7233143062, 15.7233409736, 15.7233676405, 15.723394307, 15.723420973, 15.7234476384, 15.7234743034, 15.7235009679, 15.7235276319, 15.7235542954, 15.7235809584, 15.7236076209, 15.7236342829, 15.7236609444, 15.7236876054, 15.723714266, 15.723740926, 15.7237675856, 15.7237942446, 15.7238209032, 15.7238475613, 15.7238742189, 15.723900876, 15.7239275326, 15.7239541887, 15.7239808443, 15.7240074994, 15.724034154, 15.7240608082, 15.7240874618, 15.7241141149, 15.7241407676, 15.7241674198, 15.7241940714, 15.7242207226, 15.7242473733, 15.7242740235, 15.7243006732, 15.7243273224, 15.7243539711, 15.7243806194, 15.7244072671, 15.7244339143, 15.7244605611, 15.7244872074, 15.7245138531, 15.7245404984, 15.7245671432, 15.7245937875, 15.7246204313, 15.7246470746, 15.7246737174, 15.7247003597, 15.7247270015, 15.7247536429, 15.7247802837, 15.7248069241, 15.7248335639, 15.7248602033, 15.7248868422, 15.7249134806, 15.7249401185, 15.7249667559, 15.7249933928, 15.7250200292, 15.7250466651, 15.7250733006, 15.7250999355, 15.72512657, 15.7251532039, 15.7251798374, 15.7252064704, 15.7252331028, 15.7252597348, 15.7252863663, 15.7253129973, 15.7253396279, 15.7253662579, 15.7253928874, 15.7254195165, 15.725446145, 15.7254727731, 15.7254994007, 15.7255260277, 15.7255526543, 15.7255792804, 15.725605906, 15.7256325311, 15.7256591558, 15.7256857799, 15.7257124035, 15.7257390267, 15.7257656493, 15.7257922715, 15.7258188932, 15.7258455143, 15.725872135, 15.7258987552, 15.7259253749, 15.7259519942, 15.7259786129, 15.7260052311, 15.7260318489, 15.7260584661, 15.7260850829, 15.7261116992, 15.7261383149, 15.7261649302, 15.726191545, 15.7262181593, 15.7262447731, 15.7262713865, 15.7262979993, 15.7263246117, 15.7263512235, 15.7263778349, 15.7264044457, 15.7264310561, 15.726457666, 15.7264842754, 15.7265108843, 15.7265374927, 15.7265641007, 15.7265907081, 15.726617315, 15.7266439215, 15.7266705274, 15.7266971329, 15.7267237379, 15.7267503424, 15.7267769464, 15.7268035499, 15.7268301529, 15.7268567555, 15.7268833575, 15.726909959, 15.7269365601, 15.7269631607, 15.7269897607, 15.7270163603, 15.7270429594, 15.727069558, 15.7270961561, 15.7271227538, 15.7271493509, 15.7271759475, 15.7272025437, 15.7272291394, 15.7272557345, 15.7272823292, 15.7273089234, 15.7273355171, 15.7273621103, 15.727388703, 15.7274152953, 15.727441887, 15.7274684783, 15.727495069, 15.7275216593, 15.7275482491, 15.7275748384, 15.7276014272, 15.7276280155, 15.7276546033, 15.7276811906, 15.7277077775, 15.7277343638, 15.7277609497, 15.7277875351, 15.7278141199, 15.7278407043, 15.7278672882, 15.7278938716, 15.7279204546, 15.727947037, 15.7279736189, 15.7280002004, 15.7280267814, 15.7280533618, 15.7280799418, 15.7281065213, 15.7281331003, 15.7281596788, 15.7281862568, 15.7282128344, 15.7282394114, 15.728265988, 15.728292564, 15.7283191396, 15.7283457147, 15.7283722893, 15.7283988634, 15.728425437, 15.7284520102, 15.7284785828, 15.728505155, 15.7285317266, 15.7285582978, 15.7285848685, 15.7286114387, 15.7286380084, 15.7286645776, 15.7286911463, 15.7287177145, 15.7287442823, 15.7287708495, 15.7287974163, 15.7288239826, 15.7288505484, 15.7288771137, 15.7289036785, 15.7289302428, 15.7289568066, 15.72898337, 15.7290099328, 15.7290364952, 15.7290630571, 15.7290896185, 15.7291161794, 15.7291427398, 15.7291692997, 15.7291958591, 15.7292224181, 15.7292489765, 15.7292755345, 15.729302092, 15.729328649, 15.7293552055, 15.7293817615, 15.729408317, 15.729434872, 15.7294614266, 15.7294879806, 15.7295145342, 15.7295410873, 15.7295676398, 15.7295941919, 15.7296207436, 15.7296472947, 15.7296738453, 15.7297003955, 15.7297269451, 15.7297534943, 15.729780043, 15.7298065911, 15.7298331388, 15.7298596861, 15.7298862328, 15.729912779, 15.7299393248, 15.72996587, 15.7299924148, 15.7300189591, 15.7300455029, 15.7300720462, 15.730098589, 15.7301251313, 15.7301516732, 15.7301782145, 15.7302047554, 15.7302312958, 15.7302578357, 15.7302843751, 15.730310914, 15.7303374524, 15.7303639903, 15.7303905278, 15.7304170647, 15.7304436012, 15.7304701372, 15.7304966727, 15.7305232077, 15.7305497422, 15.7305762762, 15.7306028098, 15.7306293428, 15.7306558754, 15.7306824075, 15.7307089391, 15.7307354702, 15.7307620008, 15.7307885309, 15.7308150606, 15.7308415897, 15.7308681184, 15.7308946465, 15.7309211742, 15.7309477014, 15.7309742281, 15.7310007544, 15.7310272801, 15.7310538054, 15.7310803301, 15.7311068544, 15.7311333782, 15.7311599015, 15.7311864243, 15.7312129466, 15.7312394684, 15.7312659898, 15.7312925107, 15.731319031, 15.7313455509, 15.7313720703, 15.7313985892, 15.7314251076, 15.7314516256, 15.731478143, 15.73150466, 15.7315311765, 15.7315576924, 15.7315842079, 15.731610723, 15.7316372375, 15.7316637515, 15.7316902651, 15.7317167781, 15.7317432907, 15.7317698028, 15.7317963144, 15.7318228255, 15.7318493361, 15.7318758463, 15.7319023559, 15.7319288651, 15.7319553738, 15.731981882, 15.7320083897, 15.7320348969, 15.7320614036, 15.7320879099, 15.7321144156, 15.7321409209, 15.7321674257, 15.73219393, 15.7322204338, 15.7322469371, 15.7322734399, 15.7322999423, 15.7323264441, 15.7323529455, 15.7323794464, 15.7324059468, 15.7324324467, 15.7324589461, 15.7324854451, 15.7325119435, 15.7325384415, 15.732564939, 15.732591436, 15.7326179325, 15.7326444285, 15.732670924, 15.7326974191, 15.7327239136, 15.7327504077, 15.7327769013, 15.7328033944, 15.732829887, 15.7328563791, 15.7328828708, 15.7329093619, 15.7329358526, 15.7329623428, 15.7329888325, 15.7330153217, 15.7330418104, 15.7330682986, 15.7330947864, 15.7331212737, 15.7331477604, 15.7331742467, 15.7332007325, 15.7332272179, 15.7332537027, 15.733280187, 15.7333066709, 15.7333331543, 15.7333596372, 15.7333861196, 15.7334126015, 15.7334390829, 15.7334655638, 15.7334920443, 15.7335185243, 15.7335450038, 15.7335714828, 15.7335979613, 15.7336244393, 15.7336509168, 15.7336773939, 15.7337038705, 15.7337303465, 15.7337568221, 15.7337832973, 15.7338097719, 15.733836246, 15.7338627197, 15.7338891928, 15.7339156655, 15.7339421377, 15.7339686094, 15.7339950807, 15.7340215514, 15.7340480217, 15.7340744914, 15.7341009607, 15.7341274295, 15.7341538978, 15.7341803656, 15.734206833, 15.7342332998, 15.7342597662, 15.7342862321, 15.7343126975, 15.7343391624, 15.7343656268, 15.7343920908, 15.7344185542, 15.7344450172, 15.7344714797, 15.7344979417, 15.7345244032, 15.7345508642, 15.7345773248, 15.7346037848, 15.7346302444, 15.7346567035, 15.7346831621, 15.7347096202, 15.7347360779, 15.734762535, 15.7347889917, 15.7348154478, 15.7348419035, 15.7348683587, 15.7348948135, 15.7349212677, 15.7349477215, 15.7349741747, 15.7350006275, 15.7350270798, 15.7350535316, 15.7350799829, 15.7351064338, 15.7351328841, 15.735159334, 15.7351857834, 15.7352122323, 15.7352386807, 15.7352651287, 15.7352915761, 15.7353180231, 15.7353444695, 15.7353709155, 15.735397361, 15.7354238061, 15.7354502506, 15.7354766947, 15.7355031382, 15.7355295813, 15.7355560239, 15.735582466, 15.7356089077, 15.7356353488, 15.7356617895, 15.7356882296, 15.7357146693, 15.7357411085, 15.7357675473, 15.7357939855, 15.7358204233, 15.7358468605, 15.7358732973, 15.7358997336, 15.7359261694, 15.7359526048, 15.7359790396, 15.736005474, 15.7360319079, 15.7360583413, 15.7360847742, 15.7361112066, 15.7361376385, 15.73616407, 15.736190501, 15.7362169315, 15.7362433615, 15.736269791, 15.73629622, 15.7363226486, 15.7363490766, 15.7363755042, 15.7364019313, 15.7364283579, 15.7364547841, 15.7364812097, 15.7365076349, 15.7365340596, 15.7365604838, 15.7365869075, 15.7366133307, 15.7366397534, 15.7366661757, 15.7366925975, 15.7367190188, 15.7367454396, 15.7367718599, 15.7367982797, 15.7368246991, 15.736851118, 15.7368775364, 15.7369039543, 15.7369303717, 15.7369567886, 15.7369832051, 15.7370096211, 15.7370360365, 15.7370624515, 15.7370888661, 15.7371152801, 15.7371416937, 15.7371681067, 15.7371945193, 15.7372209314, 15.737247343, 15.7372737542, 15.7373001648, 15.737326575, 15.7373529847, 15.7373793939, 15.7374058026, 15.7374322108, 15.7374586186, 15.7374850258, 15.7375114326, 15.7375378389, 15.7375642447, 15.7375906501, 15.7376170549, 15.7376434593, 15.7376698632, 15.7376962666, 15.7377226695, 15.7377490719, 15.7377754739, 15.7378018754, 15.7378282763, 15.7378546768, 15.7378810769, 15.7379074764, 15.7379338754, 15.737960274, 15.7379866721, 15.7380130697, 15.7380394668, 15.7380658635, 15.7380922596, 15.7381186553, 15.7381450505, 15.7381714452, 15.7381978394, 15.7382242332, 15.7382506264, 15.7382770192, 15.7383034115, 15.7383298033, 15.7383561946, 15.7383825855, 15.7384089758, 15.7384353657, 15.7384617551, 15.738488144, 15.7385145324, 15.7385409204, 15.7385673078, 15.7385936948, 15.7386200813, 15.7386464673, 15.7386728529, 15.7386992379, 15.7387256225, 15.7387520066, 15.7387783902, 15.7388047733, 15.7388311559, 15.7388575381, 15.7388839198, 15.738910301, 15.7389366817, 15.7389630619, 15.7389894416, 15.7390158209, 15.7390421997, 15.739068578, 15.7390949558, 15.7391213331, 15.73914771, 15.7391740864, 15.7392004622, 15.7392268376, 15.7392532126, 15.739279587, 15.739305961, 15.7393323344, 15.7393587074, 15.7393850799, 15.739411452, 15.7394378235, 15.7394641946, 15.7394905652, 15.7395169353, 15.7395433049, 15.739569674, 15.7395960427, 15.7396224109, 15.7396487785, 15.7396751458, 15.7397015125, 15.7397278787, 15.7397542445, 15.7397806098, 15.7398069746, 15.7398333389, 15.7398597027, 15.7398860661, 15.739912429, 15.7399387913, 15.7399651533, 15.7399915147, 15.7400178756, 15.7400442361, 15.7400705961, 15.7400969556, 15.7401233146, 15.7401496731, 15.7401760312, 15.7402023888, 15.7402287459, 15.7402551025, 15.7402814586, 15.7403078143, 15.7403341694, 15.7403605241, 15.7403868783, 15.740413232, 15.7404395853, 15.740465938, 15.7404922903, 15.7405186421, 15.7405449934, 15.7405713443, 15.7405976946, 15.7406240445, 15.7406503939, 15.7406767428, 15.7407030912, 15.7407294392, 15.7407557866, 15.7407821336, 15.7408084801, 15.7408348261, 15.7408611717, 15.7408875167, 15.7409138613, 15.7409402054, 15.740966549, 15.7409928922, 15.7410192348, 15.741045577, 15.7410719187, 15.7410982599, 15.7411246006, 15.7411509409, 15.7411772807, 15.74120362, 15.7412299588, 15.7412562971, 15.7412826349, 15.7413089723, 15.7413353092, 15.7413616456, 15.7413879815, 15.741414317, 15.7414406519, 15.7414669864, 15.7414933204, 15.7415196539, 15.741545987, 15.7415723195, 15.7415986516, 15.7416249832, 15.7416513143, 15.7416776449, 15.7417039751, 15.7417303048, 15.741756634, 15.7417829627, 15.7418092909, 15.7418356187, 15.7418619459, 15.7418882727, 15.741914599, 15.7419409249, 15.7419672502, 15.7419935751, 15.7420198995, 15.7420462234, 15.7420725468, 15.7420988698, 15.7421251922, 15.7421515142, 15.7421778357, 15.7422041568, 15.7422304773, 15.7422567974, 15.742283117, 15.7423094361, 15.7423357547, 15.7423620729, 15.7423883905, 15.7424147077, 15.7424410244, 15.7424673406, 15.7424936564, 15.7425199717, 15.7425462864, 15.7425726008, 15.7425989146, 15.7426252279, 15.7426515408, 15.7426778532, 15.7427041651, 15.7427304765, 15.7427567875, 15.7427830979, 15.7428094079, 15.7428357174, 15.7428620265, 15.742888335, 15.7429146431, 15.7429409507, 15.7429672578, 15.7429935644, 15.7430198706, 15.7430461762, 15.7430724814, 15.7430987861, 15.7431250904, 15.7431513941, 15.7431776974, 15.7432040002, 15.7432303025, 15.7432566043, 15.7432829057, 15.7433092066, 15.7433355069, 15.7433618069, 15.7433881063, 15.7434144053, 15.7434407037, 15.7434670017, 15.7434932993, 15.7435195963, 15.7435458929, 15.7435721889, 15.7435984845, 15.7436247797, 15.7436510743, 15.7436773685, 15.7437036622, 15.7437299554, 15.7437562481, 15.7437825403, 15.7438088321, 15.7438351234, 15.7438614142, 15.7438877045, 15.7439139944, 15.7439402838, 15.7439665726, 15.7439928611, 15.744019149, 15.7440454365, 15.7440717234, 15.7440980099, 15.7441242959, 15.7441505815, 15.7441768665, 15.7442031511, 15.7442294352, 15.7442557189, 15.744282002, 15.7443082847, 15.7443345669, 15.7443608486, 15.7443871298, 15.7444134106, 15.7444396908, 15.7444659706, 15.7444922499, 15.7445185288, 15.7445448071, 15.744571085, 15.7445973624, 15.7446236393, 15.7446499158, 15.7446761918, 15.7447024672, 15.7447287422, 15.7447550168, 15.7447812908, 15.7448075644, 15.7448338375, 15.7448601101, 15.7448863823, 15.7449126539, 15.7449389251, 15.7449651958, 15.744991466, 15.7450177358, 15.745044005, 15.7450702738, 15.7450965421, 15.74512281, 15.7451490773, 15.7451753442, 15.7452016106, 15.7452278765, 15.745254142, 15.7452804069, 15.7453066714, 15.7453329354, 15.7453591989, 15.745385462, 15.7454117246, 15.7454379867, 15.7454642483, 15.7454905094, 15.7455167701, 15.7455430303, 15.74556929, 15.7455955492, 15.7456218079, 15.7456480662, 15.745674324, 15.7457005813, 15.7457268382, 15.7457530945, 15.7457793504, 15.7458056058, 15.7458318607, 15.7458581152, 15.7458843691, 15.7459106226, 15.7459368756, 15.7459631282, 15.7459893802, 15.7460156318, 15.7460418829, 15.7460681336, 15.7460943837, 15.7461206334, 15.7461468826, 15.7461731313, 15.7461993795, 15.7462256273, 15.7462518746, 15.7462781214, 15.7463043677, 15.7463306136, 15.7463568589, 15.7463831038, 15.7464093482, 15.7464355922, 15.7464618356, 15.7464880786, 15.7465143211, 15.7465405632, 15.7465668047, 15.7465930458, 15.7466192864, 15.7466455265, 15.7466717662, 15.7466980053, 15.746724244, 15.7467504822, 15.74677672, 15.7468029572, 15.746829194, 15.7468554303, 15.7468816661, 15.7469079015, 15.7469341364, 15.7469603708, 15.7469866047, 15.7470128381, 15.7470390711, 15.7470653036, 15.7470915356, 15.7471177671, 15.7471439982, 15.7471702288, 15.7471964589, 15.7472226885, 15.7472489176, 15.7472751463, 15.7473013745, 15.7473276022, 15.7473538295, 15.7473800562, 15.7474062825, 15.7474325083, 15.7474587337, 15.7474849585, 15.7475111829, 15.7475374068, 15.7475636303, 15.7475898532, 15.7476160757, 15.7476422977, 15.7476685192, 15.7476947402, 15.7477209608, 15.7477471809, 15.7477734005, 15.7477996197, 15.7478258383, 15.7478520565, 15.7478782742, 15.7479044915, 15.7479307082, 15.7479569245, 15.7479831403, 15.7480093556, 15.7480355705, 15.7480617849, 15.7480879988, 15.7481142122, 15.7481404251, 15.7481666376, 15.7481928496, 15.7482190611, 15.7482452721, 15.7482714827, 15.7482976928, 15.7483239024, 15.7483501116, 15.7483763202, 15.7484025284, 15.7484287361, 15.7484549433, 15.7484811501, 15.7485073564, 15.7485335622, 15.7485597675, 15.7485859724, 15.7486121767, 15.7486383806, 15.7486645841, 15.748690787, 15.7487169895, 15.7487431915, 15.748769393, 15.748795594, 15.7488217946, 15.7488479947, 15.7488741943, 15.7489003935, 15.7489265921, 15.7489527903, 15.748978988, 15.7490051853, 15.749031382, 15.7490575783, 15.7490837741, 15.7491099695, 15.7491361643, 15.7491623587, 15.7491885526, 15.7492147461, 15.749240939, 15.7492671315, 15.7492933235, 15.749319515, 15.7493457061, 15.7493718967, 15.7493980868, 15.7494242764, 15.7494504656, 15.7494766542, 15.7495028425, 15.7495290302, 15.7495552174, 15.7495814042, 15.7496075905, 15.7496337763, 15.7496599617, 15.7496861466, 15.749712331, 15.7497385149, 15.7497646983, 15.7497908813, 15.7498170638, 15.7498432458, 15.7498694274, 15.7498956085, 15.7499217891, 15.7499479692, 15.7499741488, 15.750000328, 15.7500265067, 15.7500526849, 15.7500788627, 15.75010504, 15.7501312168, 15.7501573931, 15.7501835689, 15.7502097443, 15.7502359192, 15.7502620936, 15.7502882676, 15.7503144411, 15.7503406141, 15.7503667866, 15.7503929586, 15.7504191302, 15.7504453013, 15.7504714719, 15.7504976421, 15.7505238118, 15.750549981, 15.7505761497, 15.750602318, 15.7506284857, 15.750654653, 15.7506808199, 15.7507069862, 15.7507331521, 15.7507593175, 15.7507854824, 15.7508116469, 15.7508378109, 15.7508639744, 15.7508901374, 15.7509163, 15.7509424621, 15.7509686237, 15.7509947848, 15.7510209455, 15.7510471057, 15.7510732654, 15.7510994246, 15.7511255834, 15.7511517417, 15.7511778995, 15.7512040568, 15.7512302137, 15.7512563701, 15.751282526, 15.7513086814, 15.7513348364, 15.7513609909, 15.7513871449, 15.7514132985, 15.7514394515, 15.7514656041, 15.7514917563, 15.7515179079, 15.7515440591, 15.7515702098, 15.75159636, 15.7516225098, 15.7516486591, 15.7516748079, 15.7517009562, 15.7517271041, 15.7517532514, 15.7517793984, 15.7518055448, 15.7518316908, 15.7518578362, 15.7518839813, 15.7519101258, 15.7519362699, 15.7519624135, 15.7519885566, 15.7520146992, 15.7520408414, 15.7520669831, 15.7520931243, 15.7521192651, 15.7521454054, 15.7521715452, 15.7521976845, 15.7522238234, 15.7522499617, 15.7522760996, 15.7523022371, 15.752328374, 15.7523545105, 15.7523806466, 15.7524067821, 15.7524329172, 15.7524590518, 15.7524851859, 15.7525113195, 15.7525374527, 15.7525635854, 15.7525897176, 15.7526158494, 15.7526419807, 15.7526681115, 15.7526942418, 15.7527203717, 15.7527465011, 15.75277263, 15.7527987584, 15.7528248864, 15.7528510139, 15.7528771409, 15.7529032675, 15.7529293936, 15.7529555192, 15.7529816443, 15.7530077689, 15.7530338931, 15.7530600168, 15.7530861401, 15.7531122628, 15.7531383851, 15.753164507, 15.7531906283, 15.7532167492, 15.7532428696, 15.7532689895, 15.753295109, 15.7533212279, 15.7533473465, 15.7533734645, 15.7533995821, 15.7534256991, 15.7534518158, 15.7534779319, 15.7535040476, 15.7535301628, 15.7535562775, 15.7535823918, 15.7536085055, 15.7536346189, 15.7536607317, 15.7536868441, 15.7537129559, 15.7537390674, 15.7537651783, 15.7537912888, 15.7538173988, 15.7538435083, 15.7538696174, 15.753895726, 15.7539218341, 15.7539479417, 15.7539740489, 15.7540001556, 15.7540262618, 15.7540523675, 15.7540784728, 15.7541045776, 15.7541306819, 15.7541567858, 15.7541828892, 15.7542089921, 15.7542350945, 15.7542611965, 15.754287298, 15.754313399, 15.7543394996, 15.7543655997, 15.7543916993, 15.7544177984, 15.7544438971, 15.7544699953, 15.754496093, 15.7545221902, 15.754548287, 15.7545743833, 15.7546004792, 15.7546265745, 15.7546526694, 15.7546787638, 15.7547048578, 15.7547309512, 15.7547570442, 15.7547831368, 15.7548092288, 15.7548353204, 15.7548614115, 15.7548875022, 15.7549135923, 15.754939682, 15.7549657713, 15.75499186, 15.7550179483, 15.7550440361, 15.7550701234, 15.7550962103, 15.7551222967, 15.7551483826, 15.7551744681, 15.7552005531, 15.7552266376, 15.7552527216, 15.7552788052, 15.7553048883, 15.7553309709, 15.755357053, 15.7553831347, 15.7554092159, 15.7554352967, 15.7554613769, 15.7554874567, 15.755513536, 15.7555396149, 15.7555656933, 15.7555917712, 15.7556178486, 15.7556439256, 15.7556700021, 15.7556960781, 15.7557221536, 15.7557482287, 15.7557743033, 15.7558003775, 15.7558264511, 15.7558525243, 15.7558785971, 15.7559046693, 15.7559307411, 15.7559568124, 15.7559828832, 15.7560089536, 15.7560350235, 15.7560610929, 15.7560871619, 15.7561132304, 15.7561392984, 15.7561653659, 15.756191433, 15.7562174996, 15.7562435657, 15.7562696314, 15.7562956966, 15.7563217613, 15.7563478255, 15.7563738893, 15.7563999526, 15.7564260154, 15.7564520778, 15.7564781397, 15.7565042011, 15.756530262, 15.7565563225, 15.7565823825, 15.7566084421, 15.7566345011, 15.7566605597, 15.7566866179, 15.7567126755, 15.7567387327, 15.7567647894, 15.7567908456, 15.7568169014, 15.7568429567, 15.7568690115, 15.7568950659, 15.7569211198, 15.7569471732, 15.7569732262, 15.7569992786, 15.7570253307, 15.7570513822, 15.7570774333, 15.7571034839, 15.757129534, 15.7571555836, 15.7571816328, 15.7572076815, 15.7572337298, 15.7572597775, 15.7572858249, 15.7573118717, 15.7573379181, 15.7573639639, 15.7573900094, 15.7574160543, 15.7574420988, 15.7574681428, 15.7574941864, 15.7575202294, 15.757546272, 15.7575723142, 15.7575983558, 15.757624397, 15.7576504377, 15.757676478, 15.7577025178, 15.7577285571, 15.7577545959, 15.7577806343, 15.7578066722, 15.7578327096, 15.7578587466, 15.7578847831, 15.7579108191, 15.7579368547, 15.7579628897, 15.7579889244, 15.7580149585, 15.7580409922, 15.7580670254, 15.7580930581, 15.7581190904, 15.7581451222, 15.7581711535, 15.7581971843, 15.7582232147, 15.7582492446, 15.7582752741, 15.7583013031, 15.7583273316, 15.7583533596, 15.7583793872, 15.7584054143, 15.7584314409, 15.7584574671, 15.7584834927, 15.758509518, 15.7585355427, 15.758561567, 15.7585875908, 15.7586136142, 15.758639637, 15.7586656594, 15.7586916814, 15.7587177028, 15.7587437238, 15.7587697443, 15.7587957644, 15.758821784, 15.7588478031, 15.7588738218, 15.7588998399, 15.7589258576, 15.7589518749, 15.7589778917, 15.759003908, 15.7590299238, 15.7590559392, 15.7590819541, 15.7591079685, 15.7591339824, 15.7591599959, 15.7591860089, 15.7592120215, 15.7592380336, 15.7592640452, 15.7592900563, 15.759316067, 15.7593420772, 15.7593680869, 15.7593940962, 15.759420105, 15.7594461133, 15.7594721212, 15.7594981286, 15.7595241355, 15.759550142, 15.759576148, 15.7596021535, 15.7596281585, 15.7596541631, 15.7596801672, 15.7597061709, 15.759732174, 15.7597581767, 15.759784179, 15.7598101807, 15.759836182, 15.7598621829, 15.7598881832, 15.7599141831, 15.7599401825, 15.7599661815, 15.75999218, 15.760018178, 15.7600441755, 15.7600701726, 15.7600961692, 15.7601221654, 15.7601481611, 15.7601741563, 15.760200151, 15.7602261453, 15.7602521391, 15.7602781324, 15.7603041253, 15.7603301177, 15.7603561096, 15.7603821011, 15.7604080921, 15.7604340826, 15.7604600726, 15.7604860622, 15.7605120514, 15.76053804, 15.7605640282, 15.7605900159, 15.7606160032, 15.7606419899, 15.7606679762, 15.7606939621, 15.7607199475, 15.7607459324, 15.7607719168, 15.7607979008, 15.7608238843, 15.7608498673, 15.7608758499, 15.760901832, 15.7609278136, 15.7609537948, 15.7609797755, 15.7610057557, 15.7610317355, 15.7610577148, 15.7610836936, 15.7611096719, 15.7611356498, 15.7611616272, 15.7611876042, 15.7612135807, 15.7612395567, 15.7612655323, 15.7612915073, 15.761317482, 15.7613434561, 15.7613694298, 15.761395403, 15.7614213757, 15.761447348, 15.7614733198, 15.7614992912, 15.761525262, 15.7615512324, 15.7615772024, 15.7616031719, 15.7616291409, 15.7616551094, 15.7616810775, 15.7617070451, 15.7617330122, 15.7617589789, 15.7617849451, 15.7618109108, 15.7618368761, 15.7618628409, 15.7618888052, 15.7619147691, 15.7619407325, 15.7619666954, 15.7619926578, 15.7620186198, 15.7620445814, 15.7620705424, 15.762096503, 15.7621224631, 15.7621484228, 15.762174382, 15.7622003407, 15.762226299, 15.7622522568, 15.7622782141, 15.7623041709, 15.7623301273, 15.7623560833, 15.7623820387, 15.7624079937, 15.7624339482, 15.7624599023, 15.7624858559, 15.762511809, 15.7625377616, 15.7625637138, 15.7625896655, 15.7626156168, 15.7626415676, 15.7626675179, 15.7626934678, 15.7627194171, 15.7627453661, 15.7627713145, 15.7627972625, 15.76282321, 15.7628491571, 15.7628751037, 15.7629010498, 15.7629269954, 15.7629529406, 15.7629788853, 15.7630048296, 15.7630307734, 15.7630567167, 15.7630826595, 15.7631086019, 15.7631345439, 15.7631604853, 15.7631864263, 15.7632123668, 15.7632383069, 15.7632642465, 15.7632901856, 15.7633161242, 15.7633420624, 15.7633680001, 15.7633939374, 15.7634198742, 15.7634458105, 15.7634717464, 15.7634976818, 15.7635236167, 15.7635495511, 15.7635754851, 15.7636014187, 15.7636273517, 15.7636532843, 15.7636792164, 15.7637051481, 15.7637310793, 15.76375701, 15.7637829403, 15.7638088701, 15.7638347994, 15.7638607283, 15.7638866567, 15.7639125846, 15.7639385121, 15.7639644391, 15.7639903656, 15.7640162917, 15.7640422173, 15.7640681424, 15.7640940671, 15.7641199913, 15.7641459151, 15.7641718383, 15.7641977611, 15.7642236835, 15.7642496054, 15.7642755268, 15.7643014477, 15.7643273682, 15.7643532882, 15.7643792078, 15.7644051269, 15.7644310455, 15.7644569636, 15.7644828813, 15.7645087985, 15.7645347153, 15.7645606316, 15.7645865474, 15.7646124628, 15.7646383776, 15.7646642921, 15.764690206, 15.7647161195, 15.7647420326, 15.7647679451, 15.7647938572, 15.7648197689, 15.76484568, 15.7648715907, 15.764897501, 15.7649234107, 15.7649493201, 15.7649752289, 15.7650011373, 15.7650270452, 15.7650529526, 15.7650788596, 15.7651047661, 15.7651306722, 15.7651565778, 15.7651824829, 15.7652083875, 15.7652342917, 15.7652601955, 15.7652860987, 15.7653120015, 15.7653379038, 15.7653638057, 15.7653897071, 15.765415608, 15.7654415085, 15.7654674085, 15.7654933081, 15.7655192071, 15.7655451058, 15.7655710039, 15.7655969016, 15.7656227988, 15.7656486955, 15.7656745918, 15.7657004877, 15.765726383, 15.7657522779, 15.7657781723, 15.7658040663, 15.7658299598, 15.7658558528, 15.7658817454, 15.7659076375, 15.7659335291, 15.7659594203, 15.765985311, 15.7660112013, 15.766037091, 15.7660629803, 15.7660888692, 15.7661147576, 15.7661406455, 15.766166533, 15.76619242, 15.7662183065, 15.7662441925, 15.7662700781, 15.7662959633, 15.766321848, 15.7663477322, 15.7663736159, 15.7663994992, 15.766425382, 15.7664512643, 15.7664771462, 15.7665030276, 15.7665289086, 15.7665547891, 15.7665806691, 15.7666065487, 15.7666324278, 15.7666583064, 15.7666841846, 15.7667100623, 15.7667359395, 15.7667618163, 15.7667876926, 15.7668135685, 15.7668394439, 15.7668653188, 15.7668911932, 15.7669170672, 15.7669429408, 15.7669688138, 15.7669946864, 15.7670205586, 15.7670464302, 15.7670723014, 15.7670981722, 15.7671240425, 15.7671499123, 15.7671757816, 15.7672016505, 15.767227519, 15.7672533869, 15.7672792544, 15.7673051214, 15.767330988, 15.7673568541, 15.7673827198, 15.7674085849, 15.7674344497, 15.7674603139, 15.7674861777, 15.767512041, 15.7675379039, 15.7675637663, 15.7675896282, 15.7676154897, 15.7676413507, 15.7676672112, 15.7676930713, 15.7677189309, 15.7677447901, 15.7677706488, 15.767796507, 15.7678223648, 15.7678482221, 15.7678740789, 15.7678999353, 15.7679257912, 15.7679516466, 15.7679775016, 15.7680033561, 15.7680292102, 15.7680550638, 15.7680809169, 15.7681067696, 15.7681326218, 15.7681584735, 15.7681843248, 15.7682101756, 15.7682360259, 15.7682618758, 15.7682877252, 15.7683135742, 15.7683394227, 15.7683652707, 15.7683911183, 15.7684169654, 15.7684428121, 15.7684686582, 15.768494504, 15.7685203492, 15.768546194, 15.7685720383, 15.7685978822, 15.7686237256, 15.7686495685, 15.768675411, 15.768701253, 15.7687270946, 15.7687529357, 15.7687787763, 15.7688046165, 15.7688304562, 15.7688562954, 15.7688821342, 15.7689079725, 15.7689338103, 15.7689596477, 15.7689854846, 15.7690113211, 15.7690371571, 15.7690629926, 15.7690888277, 15.7691146623, 15.7691404965, 15.7691663301, 15.7691921634, 15.7692179961, 15.7692438284, 15.7692696603, 15.7692954916, 15.7693213225, 15.769347153, 15.769372983, 15.7693988125, 15.7694246416, 15.7694504701, 15.7694762983, 15.769502126, 15.7695279532, 15.7695537799, 15.7695796062, 15.769605432, 15.7696312574, 15.7696570823, 15.7696829067, 15.7697087307, 15.7697345542, 15.7697603773, 15.7697861998, 15.769812022, 15.7698378436, 15.7698636648, 15.7698894856, 15.7699153058, 15.7699411257, 15.769966945, 15.7699927639, 15.7700185823, 15.7700444003, 15.7700702178, 15.7700960348, 15.7701218514, 15.7701476675, 15.7701734832, 15.7701992984, 15.7702251131, 15.7702509274, 15.7702767412, 15.7703025546, 15.7703283674, 15.7703541799, 15.7703799918, 15.7704058033, 15.7704316144, 15.7704574249, 15.770483235, 15.7705090447, 15.7705348539, 15.7705606626, 15.7705864709, 15.7706122787, 15.770638086, 15.7706638929, 15.7706896993, 15.7707155053, 15.7707413108, 15.7707671158, 15.7707929204, 15.7708187245, 15.7708445282, 15.7708703314, 15.7708961341, 15.7709219364, 15.7709477382, 15.7709735395, 15.7709993404, 15.7710251408, 15.7710509408, 15.7710767403, 15.7711025393, 15.7711283379, 15.771154136, 15.7711799336, 15.7712057308, 15.7712315276, 15.7712573238, 15.7712831196, 15.771308915, 15.7713347099, 15.7713605043, 15.7713862983, 15.7714120918, 15.7714378848, 15.7714636774, 15.7714894695, 15.7715152612, 15.7715410524, 15.7715668431, 15.7715926334, 15.7716184232, 15.7716442125, 15.7716700014, 15.7716957899, 15.7717215778, 15.7717473653, 15.7717731524, 15.771798939, 15.7718247251, 15.7718505108, 15.771876296, 15.7719020807, 15.771927865, 15.7719536488, 15.7719794322, 15.7720052151, 15.7720309975, 15.7720567795, 15.772082561, 15.7721083421, 15.7721341226, 15.7721599028, 15.7721856825, 15.7722114617, 15.7722372404, 15.7722630187, 15.7722887966, 15.7723145739, 15.7723403508, 15.7723661273, 15.7723919033, 15.7724176788, 15.7724434539, 15.7724692285, 15.7724950026, 15.7725207763, 15.7725465495, 15.7725723223, 15.7725980946, 15.7726238665, 15.7726496378, 15.7726754088, 15.7727011792, 15.7727269492, 15.7727527188, 15.7727784879, 15.7728042565, 15.7728300247, 15.7728557924, 15.7728815596, 15.7729073264, 15.7729330927, 15.7729588586, 15.772984624, 15.7730103889, 15.7730361534, 15.7730619174, 15.773087681, 15.7731134441, 15.7731392067, 15.7731649689, 15.7731907306, 15.7732164919, 15.7732422527, 15.773268013, 15.7732937729, 15.7733195323, 15.7733452913, 15.7733710498, 15.7733968078, 15.7734225654, 15.7734483225, 15.7734740792, 15.7734998354, 15.7735255911, 15.7735513464, 15.7735771013, 15.7736028556, 15.7736286095, 15.773654363, 15.7736801159, 15.7737058685, 15.7737316205, 15.7737573721, 15.7737831233, 15.773808874, 15.7738346242, 15.773860374, 15.7738861233, 15.7739118721, 15.7739376205, 15.7739633684, 15.7739891159, 15.7740148629, 15.7740406095, 15.7740663556, 15.7740921012, 15.7741178464, 15.7741435911, 15.7741693353, 15.7741950791, 15.7742208224, 15.7742465653, 15.7742723077, 15.7742980497, 15.7743237912, 15.7743495322, 15.7743752728, 15.7744010129, 15.7744267526, 15.7744524918, 15.7744782305, 15.7745039688, 15.7745297066, 15.774555444, 15.7745811809, 15.7746069173, 15.7746326533, 15.7746583889, 15.7746841239, 15.7747098585, 15.7747355927, 15.7747613264, 15.7747870596, 15.7748127924, 15.7748385247, 15.7748642565, 15.7748899879, 15.7749157189, 15.7749414494, 15.7749671794, 15.7749929089, 15.775018638, 15.7750443667, 15.7750700949, 15.7750958226, 15.7751215499, 15.7751472767, 15.775173003, 15.7751987289, 15.7752244543, 15.7752501793, 15.7752759038, 15.7753016279, 15.7753273515, 15.7753530746, 15.7753787973, 15.7754045195, 15.7754302413, 15.7754559626, 15.7754816834, 15.7755074038, 15.7755331237, 15.7755588432, 15.7755845622, 15.7756102808, 15.7756359989, 15.7756617165, 15.7756874337, 15.7757131504, 15.7757388666, 15.7757645824, 15.7757902978, 15.7758160127, 15.7758417271, 15.7758674411, 15.7758931546, 15.7759188676, 15.7759445802, 15.7759702924, 15.775996004, 15.7760217153, 15.776047426, 15.7760731363, 15.7760988462, 15.7761245555, 15.7761502645, 15.7761759729, 15.776201681, 15.7762273885, 15.7762530956, 15.7762788022, 15.7763045084, 15.7763302141, 15.7763559194, 15.7763816242, 15.7764073286, 15.7764330324, 15.7764587359, 15.7764844388, 15.7765101414, 15.7765358434, 15.776561545, 15.7765872462, 15.7766129468, 15.7766386471, 15.7766643468, 15.7766900462, 15.776715745, 15.7767414434, 15.7767671413, 15.7767928388, 15.7768185358, 15.7768442324, 15.7768699285, 15.7768956242, 15.7769213193, 15.7769470141, 15.7769727084, 15.7769984022, 15.7770240955, 15.7770497884, 15.7770754809, 15.7771011729, 15.7771268644, 15.7771525555, 15.7771782461, 15.7772039362, 15.7772296259, 15.7772553152, 15.777281004, 15.7773066923, 15.7773323802, 15.7773580676, 15.7773837545, 15.777409441, 15.7774351271, 15.7774608127, 15.7774864978, 15.7775121825, 15.7775378667, 15.7775635504, 15.7775892337, 15.7776149166, 15.777640599, 15.7776662809, 15.7776919623, 15.7777176434, 15.7777433239, 15.777769004, 15.7777946837, 15.7778203628, 15.7778460416, 15.7778717198, 15.7778973976, 15.777923075, 15.7779487519, 15.7779744283, 15.7780001043, 15.7780257799, 15.7780514549, 15.7780771295, 15.7781028037, 15.7781284774, 15.7781541506, 15.7781798234, 15.7782054957, 15.7782311676, 15.778256839, 15.77828251, 15.7783081805, 15.7783338505, 15.7783595201, 15.7783851893, 15.7784108579, 15.7784365262, 15.7784621939, 15.7784878612, 15.7785135281, 15.7785391945, 15.7785648604, 15.7785905259, 15.7786161909, 15.7786418555, 15.7786675196, 15.7786931832, 15.7787188464, 15.7787445092, 15.7787701714, 15.7787958333, 15.7788214946, 15.7788471556, 15.778872816, 15.778898476, 15.7789241356, 15.7789497946, 15.7789754533, 15.7790011114, 15.7790267692, 15.7790524264, 15.7790780832, 15.7791037396, 15.7791293955, 15.7791550509, 15.7791807059, 15.7792063604, 15.7792320145, 15.7792576681, 15.7792833213, 15.779308974, 15.7793346262, 15.779360278, 15.7793859293, 15.7794115802, 15.7794372306, 15.7794628806, 15.7794885301, 15.7795141791, 15.7795398277, 15.7795654759, 15.7795911236, 15.7796167708, 15.7796424176, 15.7796680639, 15.7796937097, 15.7797193551, 15.7797450001, 15.7797706446, 15.7797962886, 15.7798219322, 15.7798475753, 15.779873218, 15.7798988602, 15.779924502, 15.7799501433, 15.7799757841, 15.7800014245, 15.7800270644, 15.7800527039, 15.7800783429, 15.7801039815, 15.7801296196, 15.7801552573, 15.7801808945, 15.7802065312, 15.7802321675, 15.7802578034, 15.7802834387, 15.7803090737, 15.7803347081, 15.7803603421, 15.7803859757, 15.7804116088, 15.7804372414, 15.7804628736, 15.7804885054, 15.7805141366, 15.7805397675, 15.7805653978, 15.7805910278, 15.7806166572, 15.7806422862, 15.7806679148, 15.7806935429, 15.7807191705, 15.7807447977, 15.7807704244, 15.7807960507, 15.7808216765, 15.7808473019, 15.7808729268, 15.7808985512, 15.7809241752, 15.7809497987, 15.7809754218, 15.7810010445, 15.7810266666, 15.7810522884, 15.7810779096, 15.7811035304, 15.7811291508, 15.7811547707, 15.7811803901, 15.7812060091, 15.7812316277, 15.7812572457, 15.7812828634, 15.7813084805, 15.7813340973, 15.7813597135, 15.7813853293, 15.7814109447, 15.7814365596, 15.781462174, 15.781487788, 15.7815134015, 15.7815390146, 15.7815646272, 15.7815902394, 15.7816158511, 15.7816414624, 15.7816670732, 15.7816926835, 15.7817182934, 15.7817439029, 15.7817695119, 15.7817951204, 15.7818207285, 15.7818463361, 15.7818719433, 15.78189755, 15.7819231562, 15.781948762, 15.7819743674, 15.7819999723, 15.7820255767, 15.7820511807, 15.7820767842, 15.7821023873, 15.7821279899, 15.7821535921, 15.7821791938, 15.7822047951, 15.7822303959, 15.7822559963, 15.7822815961, 15.7823071956, 15.7823327946, 15.7823583931, 15.7823839912, 15.7824095888, 15.782435186, 15.7824607827, 15.782486379, 15.7825119748, 15.7825375701, 15.782563165, 15.7825887595, 15.7826143535, 15.782639947, 15.7826655401, 15.7826911327, 15.7827167249, 15.7827423166, 15.7827679079, 15.7827934987, 15.7828190891, 15.782844679, 15.7828702685, 15.7828958575, 15.782921446, 15.7829470341, 15.7829726217, 15.7829982089, 15.7830237957, 15.7830493819, 15.7830749678, 15.7831005531, 15.783126138, 15.7831517225, 15.7831773065, 15.7832028901, 15.7832284732, 15.7832540558, 15.783279638, 15.7833052197, 15.783330801, 15.7833563819, 15.7833819622, 15.7834075422, 15.7834331216, 15.7834587007, 15.7834842792, 15.7835098573, 15.783535435, 15.7835610122, 15.783586589, 15.7836121653, 15.7836377411, 15.7836633165, 15.7836888914, 15.7837144659, 15.7837400399, 15.7837656135, 15.7837911866, 15.7838167593, 15.7838423315, 15.7838679033, 15.7838934746, 15.7839190455, 15.7839446159, 15.7839701858, 15.7839957553, 15.7840213244, 15.784046893, 15.7840724611, 15.7840980288, 15.784123596, 15.7841491628, 15.7841747291, 15.784200295, 15.7842258604, 15.7842514254, 15.7842769899, 15.784302554, 15.7843281176, 15.7843536807, 15.7843792434, 15.7844048057, 15.7844303675, 15.7844559288, 15.7844814897, 15.7845070502, 15.7845326101, 15.7845581697, 15.7845837288, 15.7846092874, 15.7846348456, 15.7846604033, 15.7846859605, 15.7847115174, 15.7847370737, 15.7847626296, 15.7847881851, 15.7848137401, 15.7848392947, 15.7848648488, 15.7848904024, 15.7849159556, 15.7849415083, 15.7849670606, 15.7849926125, 15.7850181638, 15.7850437148, 15.7850692653, 15.7850948153, 15.7851203649, 15.785145914, 15.7851714627, 15.7851970109, 15.7852225586, 15.7852481059, 15.7852736528, 15.7852991992, 15.7853247452, 15.7853502907, 15.7853758357, 15.7854013803, 15.7854269245, 15.7854524682, 15.7854780114, 15.7855035542, 15.7855290965, 15.7855546384, 15.7855801798, 15.7856057208, 15.7856312614, 15.7856568014, 15.7856823411, 15.7857078802, 15.7857334189, 15.7857589572, 15.785784495, 15.7858100324, 15.7858355693, 15.7858611058, 15.7858866418, 15.7859121773, 15.7859377124, 15.7859632471, 15.7859887813, 15.786014315, 15.7860398483, 15.7860653812, 15.7860909136, 15.7861164455, 15.786141977, 15.786167508, 15.7861930386, 15.7862185687, 15.7862440984, 15.7862696276, 15.7862951564, 15.7863206848, 15.7863462126, 15.78637174, 15.786397267, 15.7864227935, 15.7864483196, 15.7864738452, 15.7864993704, 15.7865248951, 15.7865504194, 15.7865759432, 15.7866014665, 15.7866269894, 15.7866525119, 15.7866780339, 15.7867035554, 15.7867290765, 15.7867545972, 15.7867801174, 15.7868056371, 15.7868311564, 15.7868566753, 15.7868821937, 15.7869077116, 15.7869332291, 15.7869587461, 15.7869842627, 15.7870097789, 15.7870352945, 15.7870608098, 15.7870863246, 15.7871118389, 15.7871373528, 15.7871628662, 15.7871883792, 15.7872138917, 15.7872394038, 15.7872649154, 15.7872904266, 15.7873159373, 15.7873414476, 15.7873669574, 15.7873924667, 15.7874179757, 15.7874434841, 15.7874689921, 15.7874944997, 15.7875200068, 15.7875455135, 15.7875710197, 15.7875965254, 15.7876220308, 15.7876475356, 15.78767304, 15.787698544, 15.7877240475, 15.7877495505, 15.7877750531, 15.7878005553, 15.787826057, 15.7878515582, 15.787877059, 15.7879025594, 15.7879280593, 15.7879535587, 15.7879790577, 15.7880045563, 15.7880300544, 15.788055552, 15.7880810492, 15.788106546, 15.7881320423, 15.7881575381, 15.7881830335, 15.7882085284, 15.7882340229, 15.788259517, 15.7882850106, 15.7883105037, 15.7883359964, 15.7883614886, 15.7883869804, 15.7884124718, 15.7884379626, 15.7884634531, 15.7884889431, 15.7885144326, 15.7885399217, 15.7885654103, 15.7885908985, 15.7886163863, 15.7886418735, 15.7886673604, 15.7886928468, 15.7887183327, 15.7887438182, 15.7887693032, 15.7887947878, 15.7888202719, 15.7888457556, 15.7888712388, 15.7888967216, 15.788922204, 15.7889476858, 15.7889731673, 15.7889986483, 15.7890241288, 15.7890496089, 15.7890750885, 15.7891005677, 15.7891260464, 15.7891515247, 15.7891770025, 15.7892024799, 15.7892279569, 15.7892534333, 15.7892789094, 15.789304385, 15.7893298601, 15.7893553348, 15.789380809, 15.7894062828, 15.7894317561, 15.789457229, 15.7894827014, 15.7895081734, 15.789533645, 15.7895591161, 15.7895845867, 15.7896100569, 15.7896355266, 15.7896609959, 15.7896864647, 15.7897119331, 15.7897374011, 15.7897628686, 15.7897883356, 15.7898138022, 15.7898392683, 15.789864734, 15.7898901993, 15.789915664, 15.7899411284, 15.7899665923, 15.7899920557, 15.7900175187, 15.7900429813, 15.7900684434, 15.790093905, 15.7901193662, 15.7901448269, 15.7901702872, 15.7901957471, 15.7902212065, 15.7902466654, 15.7902721239, 15.790297582, 15.7903230396, 15.7903484968, 15.7903739535, 15.7903994097, 15.7904248655, 15.7904503209, 15.7904757758, 15.7905012302, 15.7905266842, 15.7905521378, 15.7905775909, 15.7906030436, 15.7906284958, 15.7906539476, 15.7906793989, 15.7907048497, 15.7907303002, 15.7907557501, 15.7907811996, 15.7908066487, 15.7908320973, 15.7908575455, 15.7908829932, 15.7909084405, 15.7909338873, 15.7909593337, 15.7909847796, 15.7910102251, 15.7910356701, 15.7910611147, 15.7910865588, 15.7911120025, 15.7911374458, 15.7911628886, 15.7911883309, 15.7912137728, 15.7912392142, 15.7912646552, 15.7912900958, 15.7913155359, 15.7913409755, 15.7913664147, 15.7913918534, 15.7914172917, 15.7914427296, 15.791468167, 15.791493604, 15.7915190405, 15.7915444765, 15.7915699121, 15.7915953473, 15.791620782, 15.7916462163, 15.7916716501, 15.7916970834, 15.7917225164, 15.7917479488, 15.7917733809, 15.7917988124, 15.7918242436, 15.7918496742, 15.7918751045, 15.7919005342, 15.7919259636, 15.7919513925, 15.7919768209, 15.7920022489, 15.7920276764, 15.7920531035, 15.7920785302, 15.7921039564, 15.7921293821, 15.7921548074, 15.7921802323, 15.7922056567, 15.7922310806, 15.7922565041, 15.7922819272, 15.7923073498, 15.792332772, 15.7923581937, 15.7923836149, 15.7924090358, 15.7924344561, 15.792459876, 15.7924852955, 15.7925107146, 15.7925361331, 15.7925615513, 15.7925869689, 15.7926123862, 15.792637803, 15.7926632193, 15.7926886352, 15.7927140507, 15.7927394656, 15.7927648802, 15.7927902943, 15.792815708, 15.7928411212, 15.7928665339, 15.7928919462, 15.7929173581, 15.7929427695, 15.7929681805, 15.792993591, 15.7930190011, 15.7930444107, 15.7930698199, 15.7930952286, 15.7931206369, 15.7931460447, 15.7931714521, 15.7931968591, 15.7932222656, 15.7932476716, 15.7932730772, 15.7932984824, 15.7933238871, 15.7933492913, 15.7933746951, 15.7934000985, 15.7934255014, 15.7934509039, 15.7934763059, 15.7935017075, 15.7935271086, 15.7935525093, 15.7935779095, 15.7936033093, 15.7936287086, 15.7936541075, 15.7936795059, 15.7937049039, 15.7937303015, 15.7937556986, 15.7937810952, 15.7938064915, 15.7938318872, 15.7938572825, 15.7938826774, 15.7939080718, 15.7939334658, 15.7939588593, 15.7939842524, 15.794009645, 15.7940350372, 15.7940604289, 15.7940858202, 15.7941112111, 15.7941366015, 15.7941619914, 15.7941873809, 15.79421277, 15.7942381586, 15.7942635468, 15.7942889345, 15.7943143217, 15.7943397086, 15.7943650949, 15.7943904809, 15.7944158664, 15.7944412514, 15.794466636, 15.7944920201, 15.7945174038, 15.7945427871, 15.7945681699, 15.7945935522, 15.7946189341, 15.7946443156, 15.7946696966, 15.7946950772, 15.7947204573, 15.794745837, 15.7947712162, 15.794796595, 15.7948219733, 15.7948473512, 15.7948727287, 15.7948981057, 15.7949234822, 15.7949488583, 15.794974234, 15.7949996092, 15.795024984, 15.7950503583, 15.7950757322, 15.7951011056, 15.7951264786, 15.7951518511, 15.7951772232, 15.7952025948, 15.795227966, 15.7952533368, 15.7952787071, 15.7953040769, 15.7953294464, 15.7953548153, 15.7953801838, 15.7954055519, 15.7954309195, 15.7954562867, 15.7954816535, 15.7955070197, 15.7955323856, 15.795557751, 15.7955831159, 15.7956084804, 15.7956338445, 15.7956592081, 15.7956845713, 15.795709934, 15.7957352963, 15.7957606581, 15.7957860195, 15.7958113804, 15.7958367409, 15.795862101, 15.7958874606, 15.7959128197, 15.7959381784, 15.7959635367, 15.7959888945, 15.7960142519, 15.7960396088, 15.7960649653, 15.7960903213, 15.7961156769, 15.7961410321, 15.7961663868, 15.796191741, 15.7962170948, 15.7962424482, 15.7962678011, 15.7962931536, 15.7963185056, 15.7963438572, 15.7963692083, 15.796394559, 15.7964199093, 15.7964452591, 15.7964706084, 15.7964959573, 15.7965213058, 15.7965466538, 15.7965720014, 15.7965973485, 15.7966226952, 15.7966480414, 15.7966733872, 15.7966987325, 15.7967240774, 15.7967494219, 15.7967747659, 15.7968001095, 15.7968254526, 15.7968507953, 15.7968761375, 15.7969014793, 15.7969268206, 15.7969521615, 15.796977502, 15.797002842, 15.7970281815, 15.7970535206, 15.7970788593, 15.7971041975, 15.7971295353, 15.7971548726, 15.7971802095, 15.797205546, 15.797230882, 15.7972562175, 15.7972815526, 15.7973068873, 15.7973322215, 15.7973575553, 15.7973828886, 15.7974082215, 15.7974335539, 15.7974588859, 15.7974842175, 15.7975095486, 15.7975348792, 15.7975602094, 15.7975855392, 15.7976108685, 15.7976361974, 15.7976615259, 15.7976868538, 15.7977121814, 15.7977375085, 15.7977628352, 15.7977881614, 15.7978134871, 15.7978388125, 15.7978641373, 15.7978894618, 15.7979147858, 15.7979401093, 15.7979654324, 15.7979907551, 15.7980160773, 15.798041399, 15.7980667204, 15.7980920412, 15.7981173617, 15.7981426817, 15.7981680012, 15.7981933203, 15.798218639, 15.7982439572, 15.7982692749, 15.7982945923, 15.7983199092, 15.7983452256, 15.7983705416, 15.7983958571, 15.7984211722, 15.7984464869, 15.7984718011, 15.7984971149, 15.7985224282, 15.7985477411, 15.7985730535, 15.7985983655, 15.7986236771, 15.7986489882, 15.7986742988, 15.798699609, 15.7987249188, 15.7987502281, 15.798775537, 15.7988008455, 15.7988261535, 15.798851461, 15.7988767681, 15.7989020748, 15.798927381, 15.7989526868, 15.7989779921, 15.799003297, 15.7990286015, 15.7990539055, 15.799079209, 15.7991045121, 15.7991298148, 15.799155117, 15.7991804188, 15.7992057202, 15.7992310211, 15.7992563215, 15.7992816215, 15.7993069211, 15.7993322202, 15.7993575189, 15.7993828171, 15.7994081149, 15.7994334123, 15.7994587092, 15.7994840056, 15.7995093016, 15.7995345972, 15.7995598923, 15.799585187, 15.7996104813, 15.7996357751, 15.7996610684, 15.7996863613, 15.7997116538, 15.7997369458, 15.7997622374, 15.7997875285, 15.7998128192, 15.7998381095, 15.7998633993, 15.7998886887, 15.7999139776, 15.7999392661, 15.7999645541, 15.7999898417, 15.8000151288, 15.8000404155, 15.8000657018, 15.8000909876, 15.800116273, 15.8001415579, 15.8001668424, 15.8001921265, 15.8002174101, 15.8002426932, 15.8002679759, 15.8002932582, 15.8003185401, 15.8003438214, 15.8003691024, 15.8003943829, 15.8004196629, 15.8004449426, 15.8004702217, 15.8004955005, 15.8005207788, 15.8005460566, 15.800571334, 15.800596611, 15.8006218875, 15.8006471635, 15.8006724392, 15.8006977144, 15.8007229891, 15.8007482634, 15.8007735373, 15.8007988107, 15.8008240837, 15.8008493562, 15.8008746283, 15.8008998999, 15.8009251711, 15.8009504419, 15.8009757122, 15.8010009821, 15.8010262515, 15.8010515205, 15.801076789, 15.8011020571, 15.8011273248, 15.801152592, 15.8011778588, 15.8012031251, 15.801228391, 15.8012536565, 15.8012789215, 15.801304186, 15.8013294502, 15.8013547139, 15.8013799771, 15.8014052399, 15.8014305022, 15.8014557641, 15.8014810256, 15.8015062866, 15.8015315472, 15.8015568074, 15.8015820671, 15.8016073263, 15.8016325851, 15.8016578435, 15.8016831014, 15.8017083589, 15.801733616, 15.8017588726, 15.8017841287, 15.8018093844, 15.8018346397, 15.8018598946, 15.8018851489, 15.8019104029, 15.8019356564, 15.8019609095, 15.8019861621, 15.8020114143, 15.802036666, 15.8020619173, 15.8020871682, 15.8021124186, 15.8021376686, 15.8021629181, 15.8021881672, 15.8022134158, 15.802238664, 15.8022639118, 15.8022891591, 15.802314406, 15.8023396524, 15.8023648984, 15.802390144, 15.8024153891, 15.8024406338, 15.802465878, 15.8024911218, 15.8025163651, 15.802541608, 15.8025668505, 15.8025920925, 15.8026173341, 15.8026425752, 15.8026678159, 15.8026930562, 15.802718296, 15.8027435354, 15.8027687743, 15.8027940128, 15.8028192508, 15.8028444884, 15.8028697256, 15.8028949623, 15.8029201986, 15.8029454344, 15.8029706698, 15.8029959048, 15.8030211393, 15.8030463734, 15.803071607, 15.8030968402, 15.8031220729, 15.8031473052, 15.8031725371, 15.8031977685, 15.8032229995, 15.8032482301, 15.8032734602, 15.8032986898, 15.803323919, 15.8033491478, 15.8033743762, 15.8033996041, 15.8034248315, 15.8034500585, 15.8034752851, 15.8035005112, 15.8035257369, 15.8035509622, 15.803576187, 15.8036014113, 15.8036266353, 15.8036518587, 15.8036770818, 15.8037023044, 15.8037275266, 15.8037527483, 15.8037779696, 15.8038031904, 15.8038284108, 15.8038536307, 15.8038788503, 15.8039040693, 15.803929288, 15.8039545062, 15.8039797239, 15.8040049412, 15.8040301581, 15.8040553745, 15.8040805905, 15.8041058061, 15.8041310212, 15.8041562359, 15.8041814501, 15.8042066639, 15.8042318772, 15.8042570901, 15.8042823026, 15.8043075146, 15.8043327262, 15.8043579373, 15.804383148, 15.8044083583, 15.8044335681, 15.8044587775, 15.8044839864, 15.8045091949, 15.804534403, 15.8045596106, 15.8045848178, 15.8046100245, 15.8046352308, 15.8046604367, 15.8046856421, 15.8047108471, 15.8047360516, 15.8047612557, 15.8047864594, 15.8048116626, 15.8048368654, 15.8048620677, 15.8048872696, 15.804912471, 15.8049376721, 15.8049628726, 15.8049880728, 15.8050132725, 15.8050384717, 15.8050636705, 15.8050888689, 15.8051140668, 15.8051392643, 15.8051644614, 15.805189658, 15.8052148542, 15.8052400499, 15.8052652452, 15.80529044, 15.8053156344, 15.8053408284, 15.8053660219, 15.805391215, 15.8054164077, 15.8054415999, 15.8054667917, 15.805491983, 15.8055171739, 15.8055423644, 15.8055675544, 15.8055927439, 15.8056179331, 15.8056431218, 15.80566831, 15.8056934978, 15.8057186852, 15.8057438722, 15.8057690586, 15.8057942447, 15.8058194303, 15.8058446155, 15.8058698002, 15.8058949845, 15.8059201684, 15.8059453518, 15.8059705348, 15.8059957173, 15.8060208994, 15.8060460811, 15.8060712623, 15.8060964431, 15.8061216234, 15.8061468033, 15.8061719828, 15.8061971618, 15.8062223404, 15.8062475185, 15.8062726962, 15.8062978735, 15.8063230503, 15.8063482267, 15.8063734027, 15.8063985782, 15.8064237532, 15.8064489279, 15.8064741021, 15.8064992758, 15.8065244491, 15.806549622, 15.8065747944, 15.8065999664, 15.806625138, 15.8066503091, 15.8066754798, 15.80670065, 15.8067258198, 15.8067509891, 15.8067761581, 15.8068013265, 15.8068264946, 15.8068516622, 15.8068768294, 15.8069019961, 15.8069271624, 15.8069523282, 15.8069774936, 15.8070026586, 15.8070278231, 15.8070529872, 15.8070781509, 15.8071033141, 15.8071284768, 15.8071536392, 15.8071788011, 15.8072039625, 15.8072291235, 15.8072542841, 15.8072794443, 15.807304604, 15.8073297632, 15.8073549221, 15.8073800804, 15.8074052384, 15.8074303959, 15.807455553, 15.8074807096, 15.8075058658, 15.8075310215, 15.8075561769, 15.8075813317, 15.8076064862, 15.8076316402, 15.8076567937, 15.8076819469, 15.8077070995, 15.8077322518, 15.8077574036, 15.807782555, 15.8078077059, 15.8078328564, 15.8078580064, 15.807883156, 15.8079083052, 15.807933454, 15.8079586023, 15.8079837501, 15.8080088975, 15.8080340445, 15.8080591911, 15.8080843372, 15.8081094828, 15.8081346281, 15.8081597729, 15.8081849172, 15.8082100611, 15.8082352046, 15.8082603477, 15.8082854903, 15.8083106324, 15.8083357741, 15.8083609154, 15.8083860563, 15.8084111967, 15.8084363367, 15.8084614762, 15.8084866153, 15.808511754, 15.8085368922, 15.80856203, 15.8085871673, 15.8086123042, 15.8086374407, 15.8086625767, 15.8086877123, 15.8087128475, 15.8087379822, 15.8087631165, 15.8087882503, 15.8088133837, 15.8088385167, 15.8088636492, 15.8088887813, 15.8089139129, 15.8089390441, 15.8089641749, 15.8089893053, 15.8090144352, 15.8090395646, 15.8090646936, 15.8090898222, 15.8091149504, 15.8091400781, 15.8091652054, 15.8091903322, 15.8092154586, 15.8092405846, 15.8092657101, 15.8092908352, 15.8093159598, 15.809341084, 15.8093662078, 15.8093913312, 15.8094164541, 15.8094415765, 15.8094666985, 15.8094918201, 15.8095169413, 15.809542062, 15.8095671823, 15.8095923021, 15.8096174215, 15.8096425405, 15.809667659, 15.8096927771, 15.8097178947, 15.8097430119, 15.8097681287, 15.809793245, 15.809818361, 15.8098434764, 15.8098685914, 15.809893706, 15.8099188202, 15.8099439339, 15.8099690472, 15.80999416, 15.8100192724, 15.8100443844, 15.8100694959, 15.810094607, 15.8101197177, 15.8101448279, 15.8101699377, 15.810195047, 15.8102201559, 15.8102452644, 15.8102703724, 15.81029548, 15.8103205872, 15.8103456939, 15.8103708002, 15.810395906, 15.8104210114, 15.8104461164, 15.810471221, 15.8104963251, 15.8105214287, 15.810546532, 15.8105716347, 15.8105967371, 15.810621839, 15.8106469405, 15.8106720415, 15.8106971421, 15.8107222423, 15.810747342, 15.8107724413, 15.8107975402, 15.8108226386, 15.8108477366, 15.8108728342, 15.8108979313, 15.810923028, 15.8109481242, 15.81097322, 15.8109983154, 15.8110234103, 15.8110485048, 15.8110735989, 15.8110986925, 15.8111237857, 15.8111488784, 15.8111739707, 15.8111990626, 15.811224154, 15.811249245, 15.8112743356, 15.8112994257, 15.8113245154, 15.8113496047, 15.8113746935, 15.8113997819, 15.8114248698, 15.8114499574, 15.8114750444, 15.8115001311, 15.8115252173, 15.811550303, 15.8115753884, 15.8116004733, 15.8116255577, 15.8116506418, 15.8116757253, 15.8117008085, 15.8117258912, 15.8117509735, 15.8117760553, 15.8118011367, 15.8118262177, 15.8118512982, 15.8118763783, 15.811901458, 15.8119265372, 15.811951616, 15.8119766944, 15.8120017723, 15.8120268498, 15.8120519268, 15.8120770034, 15.8121020796, 15.8121271553, 15.8121522306, 15.8121773055, 15.8122023799, 15.8122274539, 15.8122525275, 15.8122776006, 15.8123026733, 15.8123277456, 15.8123528174, 15.8123778888, 15.8124029597, 15.8124280302, 15.8124531003, 15.8124781699, 15.8125032391, 15.8125283079, 15.8125533762, 15.8125784441, 15.8126035116, 15.8126285786, 15.8126536452, 15.8126787114, 15.8127037771, 15.8127288424, 15.8127539072, 15.8127789716, 15.8128040356, 15.8128290991, 15.8128541623, 15.8128792249, 15.8129042872, 15.812929349, 15.8129544103, 15.8129794713, 15.8130045317, 15.8130295918, 15.8130546514, 15.8130797106, 15.8131047694, 15.8131298277, 15.8131548856, 15.813179943, 15.813205, 15.8132300566, 15.8132551127, 15.8132801685, 15.8133052237, 15.8133302786, 15.813355333, 15.8133803869, 15.8134054405, 15.8134304936, 15.8134555462, 15.8134805984, 15.8135056502, 15.8135307016, 15.8135557525, 15.813580803, 15.813605853, 15.8136309027, 15.8136559518, 15.8136810006, 15.8137060489, 15.8137310968, 15.8137561442, 15.8137811912, 15.8138062378, 15.8138312839, 15.8138563296, 15.8138813749, 15.8139064197, 15.8139314641, 15.8139565081, 15.8139815516, 15.8140065947, 15.8140316374, 15.8140566796, 15.8140817214, 15.8141067627, 15.8141318037, 15.8141568441, 15.8141818842, 15.8142069238, 15.814231963, 15.8142570017, 15.81428204, 15.8143070779, 15.8143321154, 15.8143571524, 15.814382189, 15.8144072251, 15.8144322608, 15.8144572961, 15.8144823309, 15.8145073653, 15.8145323993, 15.8145574328, 15.8145824659, 15.8146074986, 15.8146325308, 15.8146575626, 15.814682594, 15.8147076249, 15.8147326554, 15.8147576854, 15.8147827151, 15.8148077443, 15.814832773, 15.8148578013, 15.8148828292, 15.8149078567, 15.8149328837, 15.8149579103, 15.8149829364, 15.8150079621, 15.8150329874, 15.8150580123, 15.8150830367, 15.8151080607, 15.8151330842, 15.8151581073, 15.81518313, 15.8152081523, 15.8152331741, 15.8152581954, 15.8152832164, 15.8153082369, 15.815333257, 15.8153582766, 15.8153832958, 15.8154083146, 15.8154333329, 15.8154583508, 15.8154833683, 15.8155083853, 15.8155334019, 15.8155584181, 15.8155834339, 15.8156084492, 15.815633464, 15.8156584785, 15.8156834925, 15.815708506, 15.8157335192, 15.8157585319, 15.8157835441, 15.815808556, 15.8158335674, 15.8158585783, 15.8158835889, 15.815908599, 15.8159336086, 15.8159586179, 15.8159836267, 15.816008635, 15.8160336429, 15.8160586504, 15.8160836575, 15.8161086641, 15.8161336703, 15.8161586761, 15.8161836814, 15.8162086863, 15.8162336908, 15.8162586948, 15.8162836984, 15.8163087016, 15.8163337043, 15.8163587066, 15.8163837085, 15.8164087099, 15.8164337109, 15.8164587115, 15.8164837116, 15.8165087113, 15.8165337106, 15.8165587094, 15.8165837078, 15.8166087058, 15.8166337033, 15.8166587004, 15.816683697, 15.8167086933, 15.8167336891, 15.8167586844, 15.8167836794, 15.8168086739, 15.8168336679, 15.8168586616, 15.8168836548, 15.8169086475, 15.8169336399, 15.8169586318, 15.8169836233, 15.8170086143, 15.8170336049, 15.8170585951, 15.8170835848, 15.8171085741, 15.817133563, 15.8171585514, 15.8171835394, 15.817208527, 15.8172335141, 15.8172585008, 15.8172834871, 15.817308473, 15.8173334584, 15.8173584434, 15.8173834279, 15.817408412, 15.8174333957, 15.8174583789, 15.8174833617, 15.8175083441, 15.8175333261, 15.8175583076, 15.8175832887, 15.8176082693, 15.8176332495, 15.8176582293, 15.8176832087, 15.8177081876, 15.8177331661, 15.8177581442, 15.8177831218, 15.817808099, 15.8178330757, 15.8178580521, 15.8178830279, 15.8179080034, 15.8179329784, 15.817957953, 15.8179829272, 15.8180079009, 15.8180328742, 15.8180578471, 15.8180828195, 15.8181077915, 15.8181327631, 15.8181577342, 15.8181827049, 15.8182076752, 15.8182326451, 15.8182576145, 15.8182825835, 15.818307552, 15.8183325201, 15.8183574878, 15.818382455, 15.8184074219, 15.8184323882, 15.8184573542, 15.8184823197, 15.8185072848, 15.8185322495, 15.8185572137, 15.8185821775, 15.8186071408, 15.8186321038, 15.8186570663, 15.8186820283, 15.81870699, 15.8187319512, 15.8187569119, 15.8187818723, 15.8188068322, 15.8188317917, 15.8188567507, 15.8188817093, 15.8189066675, 15.8189316252, 15.8189565825, 15.8189815394, 15.8190064959, 15.8190314519, 15.8190564075, 15.8190813626, 15.8191063174, 15.8191312717, 15.8191562255, 15.819181179, 15.819206132, 15.8192310845, 15.8192560367, 15.8192809884, 15.8193059396, 15.8193308905, 15.8193558409, 15.8193807909, 15.8194057404, 15.8194306895, 15.8194556382, 15.8194805865, 15.8195055343, 15.8195304817, 15.8195554286, 15.8195803752, 15.8196053213, 15.8196302669, 15.8196552121, 15.8196801569, 15.8197051013, 15.8197300453, 15.8197549888, 15.8197799318, 15.8198048745, 15.8198298167, 15.8198547585, 15.8198796998, 15.8199046407, 15.8199295812, 15.8199545213, 15.8199794609, 15.8200044001, 15.8200293389, 15.8200542772, 15.8200792151, 15.8201041526, 15.8201290896, 15.8201540262, 15.8201789624, 15.8202038982, 15.8202288335, 15.8202537684, 15.8202787028, 15.8203036368, 15.8203285704, 15.8203535036, 15.8203784363, 15.8204033686, 15.8204283005, 15.8204532319, 15.8204781629, 15.8205030935, 15.8205280237, 15.8205529534, 15.8205778827, 15.8206028115, 15.8206277399, 15.8206526679, 15.8206775955, 15.8207025226, 15.8207274493, 15.8207523756, 15.8207773014, 15.8208022268, 15.8208271518, 15.8208520763, 15.8208770005, 15.8209019241, 15.8209268474, 15.8209517702, 15.8209766926, 15.8210016146, 15.8210265361, 15.8210514572, 15.8210763779, 15.8211012981, 15.8211262179, 15.8211511373, 15.8211760563, 15.8212009748, 15.8212258929, 15.8212508105, 15.8212757278, 15.8213006446, 15.8213255609, 15.8213504769, 15.8213753924, 15.8214003074, 15.8214252221, 15.8214501363, 15.8214750501, 15.8214999635, 15.8215248764, 15.8215497889, 15.8215747009, 15.8215996126, 15.8216245238, 15.8216494346, 15.8216743449, 15.8216992548, 15.8217241643, 15.8217490733, 15.821773982, 15.8217988902, 15.8218237979, 15.8218487053, 15.8218736122, 15.8218985186, 15.8219234247, 15.8219483303, 15.8219732355, 15.8219981402, 15.8220230446, 15.8220479485, 15.8220728519, 15.822097755, 15.8221226576, 15.8221475597, 15.8221724615, 15.8221973628, 15.8222222637, 15.8222471641, 15.8222720642, 15.8222969638, 15.8223218629, 15.8223467617, 15.82237166, 15.8223965578, 15.8224214553, 15.8224463523, 15.8224712489, 15.8224961451, 15.8225210408, 15.8225459361, 15.822570831, 15.8225957254, 15.8226206194, 15.822645513, 15.8226704061, 15.8226952989, 15.8227201911, 15.822745083, 15.8227699744, 15.8227948654, 15.822819756, 15.8228446462, 15.8228695359, 15.8228944252, 15.822919314, 15.8229442025, 15.8229690905, 15.822993978, 15.8230188652, 15.8230437519, 15.8230686382, 15.823093524, 15.8231184094, 15.8231432944, 15.823168179, 15.8231930631, 15.8232179468, 15.8232428301, 15.8232677129, 15.8232925954, 15.8233174774, 15.8233423589, 15.82336724, 15.8233921207, 15.823417001, 15.8234418809, 15.8234667603, 15.8234916393, 15.8235165178, 15.8235413959, 15.8235662736, 15.8235911509, 15.8236160278, 15.8236409042, 15.8236657801, 15.8236906557, 15.8237155308, 15.8237404055, 15.8237652798, 15.8237901536, 15.823815027, 15.8238399, 15.8238647726, 15.8238896447, 15.8239145164, 15.8239393877, 15.8239642585, 15.8239891289, 15.8240139989, 15.8240388684, 15.8240637375, 15.8240886062, 15.8241134745, 15.8241383423, 15.8241632097, 15.8241880767, 15.8242129433, 15.8242378094, 15.8242626751, 15.8242875403, 15.8243124052, 15.8243372696, 15.8243621336, 15.8243869971, 15.8244118602, 15.8244367229, 15.8244615852, 15.824486447, 15.8245113084, 15.8245361694, 15.82456103, 15.8245858901, 15.8246107498, 15.8246356091, 15.8246604679, 15.8246853263, 15.8247101843, 15.8247350418, 15.824759899, 15.8247847556, 15.8248096119, 15.8248344678, 15.8248593232, 15.8248841781, 15.8249090327, 15.8249338868, 15.8249587405, 15.8249835938, 15.8250084466, 15.8250332991, 15.825058151, 15.8250830026, 15.8251078537, 15.8251327044, 15.8251575547, 15.8251824045, 15.825207254, 15.825232103, 15.8252569515, 15.8252817996, 15.8253066474, 15.8253314946, 15.8253563415, 15.8253811879, 15.8254060339, 15.8254308795, 15.8254557246, 15.8254805693, 15.8255054136, 15.8255302574, 15.8255551009, 15.8255799439, 15.8256047864, 15.8256296286, 15.8256544703, 15.8256793116, 15.8257041524, 15.8257289929, 15.8257538329, 15.8257786725, 15.8258035116, 15.8258283503, 15.8258531886, 15.8258780265, 15.8259028639, 15.8259277009, 15.8259525375, 15.8259773737, 15.8260022094, 15.8260270447, 15.8260518796, 15.826076714, 15.826101548, 15.8261263816, 15.8261512148, 15.8261760475, 15.8262008798, 15.8262257117, 15.8262505432, 15.8262753742, 15.8263002048, 15.826325035, 15.8263498647, 15.826374694, 15.8263995229, 15.8264243514, 15.8264491794, 15.826474007, 15.8264988342, 15.826523661, 15.8265484873, 15.8265733132, 15.8265981387, 15.8266229637, 15.8266477883, 15.8266726125, 15.8266974363, 15.8267222596, 15.8267470825, 15.826771905, 15.8267967271, 15.8268215487, 15.8268463699, 15.8268711907, 15.826896011, 15.8269208309, 15.8269456504, 15.8269704695, 15.8269952881, 15.8270201063, 15.8270449241, 15.8270697415, 15.8270945584, 15.8271193749, 15.827144191, 15.8271690066, 15.8271938219, 15.8272186367, 15.827243451, 15.827268265, 15.8272930785, 15.8273178916, 15.8273427042, 15.8273675165, 15.8273923283, 15.8274171397, 15.8274419506, 15.8274667611, 15.8274915712, 15.8275163809, 15.8275411902, 15.827565999, 15.8275908074, 15.8276156154, 15.8276404229, 15.82766523, 15.8276900367, 15.827714843, 15.8277396488, 15.8277644542, 15.8277892592, 15.8278140638, 15.8278388679, 15.8278636716, 15.8278884749, 15.8279132777, 15.8279380801, 15.8279628821, 15.8279876837, 15.8280124849, 15.8280372856, 15.8280620859, 15.8280868857, 15.8281116852, 15.8281364842, 15.8281612828, 15.8281860809, 15.8282108787, 15.828235676, 15.8282604729, 15.8282852693, 15.8283100654, 15.828334861, 15.8283596561, 15.8283844509, 15.8284092452, 15.8284340391, 15.8284588326, 15.8284836256, 15.8285084183, 15.8285332105, 15.8285580022, 15.8285827936, 15.8286075845, 15.828632375, 15.828657165, 15.8286819547, 15.8287067439, 15.8287315327, 15.828756321, 15.828781109, 15.8288058965, 15.8288306836, 15.8288554702, 15.8288802565, 15.8289050423, 15.8289298277, 15.8289546126, 15.8289793971, 15.8290041812, 15.8290289649, 15.8290537482, 15.829078531, 15.8291033134, 15.8291280954, 15.8291528769, 15.829177658, 15.8292024387, 15.829227219, 15.8292519989, 15.8292767783, 15.8293015573, 15.8293263358, 15.829351114, 15.8293758917, 15.829400669, 15.8294254459, 15.8294502223, 15.8294749983, 15.8294997739, 15.8295245491, 15.8295493238, 15.8295740981, 15.829598872, 15.8296236455, 15.8296484185, 15.8296731911, 15.8296979633, 15.8297227351, 15.8297475064, 15.8297722773, 15.8297970478, 15.8298218179, 15.8298465875, 15.8298713567, 15.8298961255, 15.8299208939, 15.8299456618, 15.8299704293, 15.8299951964, 15.8300199631, 15.8300447293, 15.8300694951, 15.8300942605, 15.8301190254, 15.83014379, 15.8301685541, 15.8301933178, 15.830218081, 15.8302428439, 15.8302676063, 15.8302923683, 15.8303171298, 15.8303418909, 15.8303666517, 15.8303914119, 15.8304161718, 15.8304409312, 15.8304656902, 15.8304904488, 15.830515207, 15.8305399647, 15.830564722, 15.8305894789, 15.8306142354, 15.8306389914, 15.830663747, 15.8306885022, 15.830713257, 15.8307380113, 15.8307627652, 15.8307875187, 15.8308122717, 15.8308370244, 15.8308617766, 15.8308865284, 15.8309112797, 15.8309360307, 15.8309607812, 15.8309855313, 15.8310102809, 15.8310350302, 15.831059779, 15.8310845274, 15.8311092754, 15.8311340229, 15.83115877, 15.8311835167, 15.831208263, 15.8312330088, 15.8312577542, 15.8312824992, 15.8313072438, 15.8313319879, 15.8313567317, 15.831381475, 15.8314062178, 15.8314309603, 15.8314557023, 15.8314804439, 15.8315051851, 15.8315299258, 15.8315546662, 15.8315794061, 15.8316041455, 15.8316288846, 15.8316536232, 15.8316783614, 15.8317030992, 15.8317278366, 15.8317525735, 15.83177731, 15.8318020461, 15.8318267818, 15.831851517, 15.8318762518, 15.8319009862, 15.8319257202, 15.8319504537, 15.8319751868, 15.8319999195, 15.8320246518, 15.8320493836, 15.832074115, 15.832098846, 15.8321235766, 15.8321483068, 15.8321730365, 15.8321977658, 15.8322224947, 15.8322472231, 15.8322719511, 15.8322966787, 15.8323214059, 15.8323461327, 15.832370859, 15.8323955849, 15.8324203104, 15.8324450355, 15.8324697601, 15.8324944843, 15.8325192081, 15.8325439315, 15.8325686544, 15.832593377, 15.8326180991, 15.8326428207, 15.832667542, 15.8326922628, 15.8327169832, 15.8327417032, 15.8327664227, 15.8327911419, 15.8328158606, 15.8328405789, 15.8328652967, 15.8328900142, 15.8329147312, 15.8329394478, 15.8329641639, 15.8329888797, 15.833013595, 15.8330383099, 15.8330630244, 15.8330877384, 15.833112452, 15.8331371653, 15.833161878, 15.8331865904, 15.8332113023, 15.8332360138, 15.8332607249, 15.8332854356, 15.8333101458, 15.8333348556, 15.833359565, 15.833384274, 15.8334089826, 15.8334336907, 15.8334583984, 15.8334831057, 15.8335078125, 15.8335325189, 15.833557225, 15.8335819305, 15.8336066357, 15.8336313404, 15.8336560448, 15.8336807487, 15.8337054521, 15.8337301552, 15.8337548578, 15.83377956, 15.8338042618, 15.8338289631, 15.8338536641, 15.8338783646, 15.8339030647, 15.8339277643, 15.8339524636, 15.8339771624, 15.8340018608, 15.8340265588, 15.8340512563, 15.8340759534, 15.8341006501, 15.8341253464, 15.8341500423, 15.8341747377, 15.8341994327, 15.8342241273, 15.8342488215, 15.8342735152, 15.8342982086, 15.8343229015, 15.8343475939, 15.834372286, 15.8343969776, 15.8344216688, 15.8344463596, 15.83447105, 15.8344957399, 15.8345204294, 15.8345451185, 15.8345698072, 15.8345944955, 15.8346191833, 15.8346438707, 15.8346685577, 15.8346932443, 15.8347179304, 15.8347426161, 15.8347673014, 15.8347919863, 15.8348166707, 15.8348413548, 15.8348660384, 15.8348907215, 15.8349154043, 15.8349400866, 15.8349647686, 15.8349894501, 15.8350141311, 15.8350388118, 15.835063492, 15.8350881718, 15.8351128512, 15.8351375302, 15.8351622087, 15.8351868868, 15.8352115645, 15.8352362418, 15.8352609186, 15.8352855951, 15.8353102711, 15.8353349466, 15.8353596218, 15.8353842965, 15.8354089709, 15.8354336448, 15.8354583182, 15.8354829913, 15.8355076639, 15.8355323361, 15.8355570079, 15.8355816793, 15.8356063502, 15.8356310207, 15.8356556908, 15.8356803605, 15.8357050298, 15.8357296986, 15.835754367, 15.835779035, 15.8358037026, 15.8358283697, 15.8358530364, 15.8358777027, 15.8359023686, 15.8359270341, 15.8359516991, 15.8359763637, 15.8360010279, 15.8360256917, 15.8360503551, 15.836075018, 15.8360996805, 15.8361243426, 15.8361490042, 15.8361736655, 15.8361983263, 15.8362229867, 15.8362476467, 15.8362723062, 15.8362969654, 15.8363216241, 15.8363462824, 15.8363709403, 15.8363955977, 15.8364202547, 15.8364449113, 15.8364695675, 15.8364942233, 15.8365188786, 15.8365435336, 15.8365681881, 15.8365928421, 15.8366174958, 15.836642149, 15.8366668018, 15.8366914542, 15.8367161062, 15.8367407578, 15.8367654089, 15.8367900596, 15.8368147099, 15.8368393597, 15.8368640092, 15.8368886582, 15.8369133068, 15.836937955, 15.8369626028, 15.8369872501, 15.837011897, 15.8370365435, 15.8370611896, 15.8370858352, 15.8371104805, 15.8371351253, 15.8371597697, 15.8371844137, 15.8372090572, 15.8372337003, 15.837258343, 15.8372829853, 15.8373076272, 15.8373322686, 15.8373569097, 15.8373815503, 15.8374061905, 15.8374308302, 15.8374554696, 15.8374801085, 15.837504747, 15.8375293851, 15.8375540227, 15.83757866, 15.8376032968, 15.8376279332, 15.8376525691, 15.8376772047, 15.8377018398, 15.8377264745, 15.8377511088, 15.8377757427, 15.8378003762, 15.8378250092, 15.8378496418, 15.837874274, 15.8378989058, 15.8379235371, 15.837948168, 15.8379727986, 15.8379974286, 15.8380220583, 15.8380466876, 15.8380713164, 15.8380959448, 15.8381205728, 15.8381452003, 15.8381698275, 15.8381944542, 15.8382190805, 15.8382437064, 15.8382683318, 15.8382929569, 15.8383175815, 15.8383422057, 15.8383668295, 15.8383914529, 15.8384160758, 15.8384406983, 15.8384653204, 15.8384899421, 15.8385145634, 15.8385391842, 15.8385638046, 15.8385884246, 15.8386130442, 15.8386376634, 15.8386622821, 15.8386869004, 15.8387115183, 15.8387361358, 15.8387607529, 15.8387853695, 15.8388099857, 15.8388346015, 15.8388592169, 15.8388838318, 15.8389084464, 15.8389330605, 15.8389576742, 15.8389822875, 15.8390069003, 15.8390315128, 15.8390561248, 15.8390807364, 15.8391053476, 15.8391299583, 15.8391545687, 15.8391791786, 15.8392037881, 15.8392283972, 15.8392530058, 15.8392776141, 15.8393022219, 15.8393268293, 15.8393514363, 15.8393760428, 15.839400649, 15.8394252547, 15.83944986, 15.8394744649, 15.8394990694, 15.8395236734, 15.839548277, 15.8395728802, 15.839597483, 15.8396220854, 15.8396466873, 15.8396712889, 15.83969589, 15.8397204907, 15.8397450909, 15.8397696908, 15.8397942902, 15.8398188892, 15.8398434878, 15.839868086, 15.8398926837, 15.8399172811, 15.839941878, 15.8399664745, 15.8399910705, 15.8400156662, 15.8400402614, 15.8400648562, 15.8400894506, 15.8401140446, 15.8401386382, 15.8401632313, 15.840187824, 15.8402124163, 15.8402370082, 15.8402615997, 15.8402861907, 15.8403107814, 15.8403353716, 15.8403599613, 15.8403845507, 15.8404091397, 15.8404337282, 15.8404583163, 15.840482904, 15.8405074913, 15.8405320781, 15.8405566645, 15.8405812506, 15.8406058362, 15.8406304213, 15.8406550061, 15.8406795904, 15.8407041743, 15.8407287578, 15.8407533409, 15.8407779236, 15.8408025058, 15.8408270877, 15.8408516691, 15.8408762501, 15.8409008306, 15.8409254108, 15.8409499905, 15.8409745698, 15.8409991487, 15.8410237272, 15.8410483052, 15.8410728829, 15.8410974601, 15.8411220369, 15.8411466133, 15.8411711892, 15.8411957648, 15.8412203399, 15.8412449146, 15.8412694889, 15.8412940628, 15.8413186362, 15.8413432093, 15.8413677819, 15.8413923541, 15.8414169259, 15.8414414972, 15.8414660682, 15.8414906387, 15.8415152088, 15.8415397785, 15.8415643477, 15.8415889166, 15.841613485, 15.841638053, 15.8416626206, 15.8416871878, 15.8417117545, 15.8417363209, 15.8417608868, 15.8417854523, 15.8418100174, 15.841834582, 15.8418591463, 15.8418837101, 15.8419082735, 15.8419328365, 15.8419573991, 15.8419819613, 15.842006523, 15.8420310843, 15.8420556452, 15.8420802057, 15.8421047658, 15.8421293254, 15.8421538846, 15.8421784434, 15.8422030018, 15.8422275598, 15.8422521174, 15.8422766745, 15.8423012312, 15.8423257875, 15.8423503434, 15.8423748989, 15.8423994539, 15.8424240086, 15.8424485628, 15.8424731166, 15.8424976699, 15.8425222229, 15.8425467754, 15.8425713276, 15.8425958793, 15.8426204306, 15.8426449814, 15.8426695319, 15.8426940819, 15.8427186315, 15.8427431807, 15.8427677295, 15.8427922779, 15.8428168258, 15.8428413733, 15.8428659205, 15.8428904672, 15.8429150134, 15.8429395593, 15.8429641047, 15.8429886497, 15.8430131944, 15.8430377385, 15.8430622823, 15.8430868257, 15.8431113686, 15.8431359111, 15.8431604532, 15.8431849949, 15.8432095362, 15.843234077, 15.8432586174, 15.8432831574, 15.843307697, 15.8433322362, 15.843356775, 15.8433813133, 15.8434058512, 15.8434303888, 15.8434549258, 15.8434794625, 15.8435039988, 15.8435285346, 15.84355307, 15.843577605, 15.8436021396, 15.8436266738, 15.8436512075, 15.8436757409, 15.8437002738, 15.8437248063, 15.8437493384, 15.84377387, 15.8437984013, 15.8438229321, 15.8438474625, 15.8438719925, 15.8438965221, 15.8439210513, 15.84394558, 15.8439701084, 15.8439946363, 15.8440191638, 15.8440436909, 15.8440682175, 15.8440927438, 15.8441172696, 15.844141795, 15.84416632, 15.8441908446, 15.8442153687, 15.8442398925, 15.8442644158, 15.8442889387, 15.8443134612, 15.8443379833, 15.8443625049, 15.8443870262, 15.844411547, 15.8444360674, 15.8444605874, 15.844485107, 15.8445096261, 15.8445341449, 15.8445586632, 15.8445831811, 15.8446076986, 15.8446322157, 15.8446567323, 15.8446812486, 15.8447057644, 15.8447302798, 15.8447547948, 15.8447793094, 15.8448038235, 15.8448283373, 15.8448528506, 15.8448773635, 15.844901876, 15.8449263881, 15.8449508998, 15.844975411, 15.8449999218, 15.8450244322, 15.8450489422, 15.8450734518, 15.845097961, 15.8451224697, 15.845146978, 15.845171486, 15.8451959935, 15.8452205005, 15.8452450072, 15.8452695134, 15.8452940193, 15.8453185247, 15.8453430297, 15.8453675343, 15.8453920384, 15.8454165422, 15.8454410455, 15.8454655484, 15.8454900509, 15.845514553, 15.8455390547, 15.845563556, 15.8455880568, 15.8456125572, 15.8456370572, 15.8456615568, 15.845686056, 15.8457105547, 15.8457350531, 15.845759551, 15.8457840485, 15.8458085456, 15.8458330423, 15.8458575385, 15.8458820344, 15.8459065298, 15.8459310248, 15.8459555194, 15.8459800136, 15.8460045074, 15.8460290007, 15.8460534937, 15.8460779862, 15.8461024783, 15.84612697, 15.8461514612, 15.8461759521, 15.8462004425, 15.8462249325, 15.8462494222, 15.8462739113, 15.8462984001, 15.8463228885, 15.8463473764, 15.846371864, 15.8463963511, 15.8464208378, 15.8464453241, 15.8464698099, 15.8464942954, 15.8465187804, 15.846543265, 15.8465677492, 15.846592233, 15.8466167164, 15.8466411994, 15.8466656819, 15.846690164, 15.8467146457, 15.846739127, 15.8467636079, 15.8467880884, 15.8468125684, 15.8468370481, 15.8468615273, 15.8468860061, 15.8469104845, 15.8469349625, 15.84695944, 15.8469839172, 15.8470083939, 15.8470328702, 15.8470573461, 15.8470818216, 15.8471062966, 15.8471307713, 15.8471552455, 15.8471797193, 15.8472041928, 15.8472286657, 15.8472531383, 15.8472776105, 15.8473020822, 15.8473265536, 15.8473510245, 15.847375495, 15.8473999651, 15.8474244347, 15.847448904, 15.8474733728, 15.8474978412, 15.8475223093, 15.8475467769, 15.847571244, 15.8475957108, 15.8476201771, 15.8476446431, 15.8476691086, 15.8476935737, 15.8477180384, 15.8477425027, 15.8477669665, 15.84779143, 15.847815893, 15.8478403556, 15.8478648178, 15.8478892796, 15.847913741, 15.8479382019, 15.8479626625, 15.8479871226, 15.8480115823, 15.8480360416, 15.8480605005, 15.848084959, 15.848109417, 15.8481338747, 15.8481583319, 15.8481827887, 15.8482072451, 15.8482317011, 15.8482561567, 15.8482806118, 15.8483050666, 15.8483295209, 15.8483539748, 15.8483784283, 15.8484028814, 15.848427334, 15.8484517863, 15.8484762381, 15.8485006895, 15.8485251405, 15.8485495911, 15.8485740413, 15.8485984911, 15.8486229404, 15.8486473894, 15.8486718379, 15.848696286, 15.8487207337, 15.848745181, 15.8487696278, 15.8487940743, 15.8488185203, 15.8488429659, 15.8488674111, 15.8488918559, 15.8489163003, 15.8489407443, 15.8489651878, 15.848989631, 15.8490140737, 15.849038516, 15.8490629579, 15.8490873994, 15.8491118404, 15.8491362811, 15.8491607213, 15.8491851612, 15.8492096006, 15.8492340396, 15.8492584781, 15.8492829163, 15.8493073541, 15.8493317914, 15.8493562283, 15.8493806648, 15.8494051009, 15.8494295366, 15.8494539719, 15.8494784068, 15.8495028412, 15.8495272752, 15.8495517088, 15.849576142, 15.8496005748, 15.8496250072, 15.8496494392, 15.8496738707, 15.8496983019, 15.8497227326, 15.8497471629, 15.8497715928, 15.8497960222, 15.8498204513, 15.84984488, 15.8498693082, 15.849893736, 15.8499181634, 15.8499425904, 15.849967017, 15.8499914432, 15.8500158689, 15.8500402943, 15.8500647192, 15.8500891437, 15.8501135678, 15.8501379915, 15.8501624148, 15.8501868376, 15.8502112601, 15.8502356821, 15.8502601037, 15.850284525, 15.8503089458, 15.8503333661, 15.8503577861, 15.8503822057, 15.8504066248, 15.8504310435, 15.8504554618, 15.8504798797, 15.8505042972, 15.8505287143, 15.850553131, 15.8505775472, 15.850601963, 15.8506263785, 15.8506507935, 15.8506752081, 15.8506996222, 15.850724036, 15.8507484494, 15.8507728623, 15.8507972748, 15.850821687, 15.8508460987, 15.85087051, 15.8508949208, 15.8509193313, 15.8509437413, 15.850968151, 15.8509925602, 15.851016969, 15.8510413774, 15.8510657854, 15.851090193, 15.8511146001, 15.8511390069, 15.8511634132, 15.8511878191, 15.8512122247, 15.8512366297, 15.8512610344, 15.8512854387, 15.8513098426, 15.851334246, 15.851358649, 15.8513830517, 15.8514074539, 15.8514318557, 15.851456257, 15.851480658, 15.8515050586, 15.8515294587, 15.8515538584, 15.8515782577, 15.8516026567, 15.8516270551, 15.8516514532, 15.8516758509, 15.8517002481, 15.851724645, 15.8517490414, 15.8517734374, 15.851797833, 15.8518222282, 15.851846623, 15.8518710174, 15.8518954113, 15.8519198049, 15.851944198, 15.8519685907, 15.851992983, 15.8520173749, 15.8520417664, 15.8520661575, 15.8520905481, 15.8521149384, 15.8521393282, 15.8521637176, 15.8521881066, 15.8522124952, 15.8522368834, 15.8522612712, 15.8522856585, 15.8523100455, 15.852334432, 15.8523588181, 15.8523832038, 15.8524075891, 15.852431974, 15.8524563585, 15.8524807425, 15.8525051262, 15.8525295094, 15.8525538922, 15.8525782746, 15.8526026566, 15.8526270382, 15.8526514194, 15.8526758002, 15.8527001805, 15.8527245604, 15.85274894, 15.8527733191, 15.8527976978, 15.8528220761, 15.852846454, 15.8528708314, 15.8528952085, 15.8529195851, 15.8529439614, 15.8529683372, 15.8529927126, 15.8530170876, 15.8530414622, 15.8530658363, 15.8530902101, 15.8531145834, 15.8531389564, 15.8531633289, 15.853187701, 15.8532120727, 15.853236444, 15.8532608149, 15.8532851853, 15.8533095554, 15.853333925, 15.8533582943, 15.8533826631, 15.8534070315, 15.8534313995, 15.8534557671, 15.8534801343, 15.853504501, 15.8535288674, 15.8535532333, 15.8535775988, 15.853601964, 15.8536263287, 15.8536506929, 15.8536750568, 15.8536994203, 15.8537237834, 15.853748146, 15.8537725082, 15.8537968701, 15.8538212315, 15.8538455925, 15.8538699531, 15.8538943132, 15.853918673, 15.8539430324, 15.8539673913, 15.8539917498, 15.854016108, 15.8540404657, 15.854064823, 15.8540891799, 15.8541135363, 15.8541378924, 15.8541622481, 15.8541866033, 15.8542109581, 15.8542353126, 15.8542596666, 15.8542840202, 15.8543083734, 15.8543327261, 15.8543570785, 15.8543814305, 15.854405782, 15.8544301331, 15.8544544839, 15.8544788342, 15.8545031841, 15.8545275336, 15.8545518826, 15.8545762313, 15.8546005796, 15.8546249274, 15.8546492748, 15.8546736219, 15.8546979685, 15.8547223147, 15.8547466605, 15.8547710058, 15.8547953508, 15.8548196954, 15.8548440395, 15.8548683833, 15.8548927266, 15.8549170695, 15.854941412, 15.8549657541, 15.8549900958, 15.8550144371, 15.8550387779, 15.8550631184, 15.8550874584, 15.855111798, 15.8551361373, 15.8551604761, 15.8551848145, 15.8552091525, 15.85523349, 15.8552578272, 15.8552821639, 15.8553065003, 15.8553308362, 15.8553551718, 15.8553795069, 15.8554038416, 15.8554281759, 15.8554525097, 15.8554768432, 15.8555011763, 15.8555255089, 15.8555498412, 15.855574173, 15.8555985044, 15.8556228354, 15.855647166, 15.8556714962, 15.855695826, 15.8557201554, 15.8557444843, 15.8557688129, 15.855793141, 15.8558174687, 15.855841796, 15.855866123, 15.8558904495, 15.8559147755, 15.8559391012, 15.8559634265, 15.8559877513, 15.8560120758, 15.8560363998, 15.8560607234, 15.8560850467, 15.8561093695, 15.8561336919, 15.8561580138, 15.8561823354, 15.8562066566, 15.8562309773, 15.8562552977, 15.8562796176, 15.8563039371, 15.8563282563, 15.856352575, 15.8563768933, 15.8564012111, 15.8564255286, 15.8564498457, 15.8564741623, 15.8564984786, 15.8565227944, 15.8565471099, 15.8565714249, 15.8565957395, 15.8566200537, 15.8566443675, 15.8566686808, 15.8566929938, 15.8567173064, 15.8567416185, 15.8567659303, 15.8567902416, 15.8568145525, 15.856838863, 15.8568631731, 15.8568874828, 15.8569117921, 15.856936101, 15.8569604094, 15.8569847175, 15.8570090251, 15.8570333323, 15.8570576392, 15.8570819456, 15.8571062516, 15.8571305572, 15.8571548624, 15.8571791671, 15.8572034715, 15.8572277755, 15.857252079, 15.8572763822, 15.8573006849, 15.8573249872, 15.8573492891, 15.8573735906, 15.8573978917, 15.8574221924, 15.8574464927, 15.8574707925, 15.857495092, 15.857519391, 15.8575436897, 15.8575679879, 15.8575922857, 15.8576165831, 15.8576408801, 15.8576651767, 15.8576894729, 15.8577137686, 15.857738064, 15.857762359, 15.8577866535, 15.8578109476, 15.8578352414, 15.8578595347, 15.8578838276, 15.8579081201, 15.8579324122, 15.8579567039, 15.8579809951, 15.858005286, 15.8580295764, 15.8580538665, 15.8580781561, 15.8581024453, 15.8581267342, 15.8581510226, 15.8581753106, 15.8581995982, 15.8582238853, 15.8582481721, 15.8582724585, 15.8582967444, 15.85832103, 15.8583453151, 15.8583695999, 15.8583938842, 15.8584181681, 15.8584424516, 15.8584667347, 15.8584910174, 15.8585152996, 15.8585395815, 15.858563863, 15.858588144, 15.8586124247, 15.8586367049, 15.8586609847, 15.8586852641, 15.8587095431, 15.8587338217, 15.8587580999, 15.8587823777, 15.8588066551, 15.8588309321, 15.8588552086, 15.8588794848, 15.8589037605, 15.8589280358, 15.8589523108, 15.8589765853, 15.8590008594, 15.8590251331, 15.8590494064, 15.8590736792, 15.8590979517, 15.8591222238, 15.8591464954, 15.8591707667, 15.8591950375, 15.8592193079, 15.859243578, 15.8592678476, 15.8592921168, 15.8593163856, 15.859340654, 15.8593649219, 15.8593891895, 15.8594134567, 15.8594377234, 15.8594619898, 15.8594862557, 15.8595105213, 15.8595347864, 15.8595590511, 15.8595833154, 15.8596075793, 15.8596318428, 15.8596561059, 15.8596803686, 15.8597046308, 15.8597288927, 15.8597531541, 15.8597774152, 15.8598016758, 15.859825936, 15.8598501959, 15.8598744553, 15.8598987143, 15.8599229729, 15.859947231, 15.8599714888, 15.8599957462, 15.8600200032, 15.8600442597, 15.8600685159, 15.8600927716, 15.8601170269, 15.8601412819, 15.8601655364, 15.8601897905, 15.8602140442, 15.8602382975, 15.8602625504, 15.8602868028, 15.8603110549, 15.8603353066, 15.8603595578, 15.8603838087, 15.8604080591, 15.8604323092, 15.8604565588, 15.860480808, 15.8605050568, 15.8605293052, 15.8605535532, 15.8605778008, 15.860602048, 15.8606262947, 15.8606505411, 15.8606747871, 15.8606990326, 15.8607232778, 15.8607475225, 15.8607717668, 15.8607960107, 15.8608202542, 15.8608444974, 15.86086874, 15.8608929823, 15.8609172242, 15.8609414657, 15.8609657068, 15.8609899474, 15.8610141877, 15.8610384275, 15.861062667, 15.861086906, 15.8611111446, 15.8611353828, 15.8611596206, 15.861183858, 15.861208095, 15.8612323316, 15.8612565678, 15.8612808036, 15.861305039, 15.8613292739, 15.8613535085, 15.8613777426, 15.8614019764, 15.8614262097, 15.8614504426, 15.8614746751, 15.8614989072, 15.8615231389, 15.8615473702, 15.8615716011, 15.8615958316, 15.8616200617, 15.8616442914, 15.8616685206, 15.8616927495, 15.8617169779, 15.861741206, 15.8617654336, 15.8617896608, 15.8618138876, 15.8618381141, 15.8618623401, 15.8618865657, 15.8619107909, 15.8619350156, 15.86195924, 15.861983464, 15.8620076876, 15.8620319107, 15.8620561335, 15.8620803558, 15.8621045778, 15.8621287993, 15.8621530204, 15.8621772411, 15.8622014614, 15.8622256814, 15.8622499009, 15.8622741199, 15.8622983386, 15.8623225569, 15.8623467748, 15.8623709923, 15.8623952093, 15.862419426, 15.8624436422, 15.8624678581, 15.8624920735, 15.8625162885, 15.8625405031, 15.8625647174, 15.8625889312, 15.8626131446, 15.8626373576, 15.8626615701, 15.8626857823, 15.8627099941, 15.8627342055, 15.8627584164, 15.862782627, 15.8628068372, 15.8628310469, 15.8628552562, 15.8628794652, 15.8629036737, 15.8629278818, 15.8629520895, 15.8629762968, 15.8630005037, 15.8630247102, 15.8630489163, 15.863073122, 15.8630973273, 15.8631215322, 15.8631457366, 15.8631699407, 15.8631941443, 15.8632183476, 15.8632425504, 15.8632667529, 15.8632909549, 15.8633151565, 15.8633393577, 15.8633635585, 15.8633877589, 15.8634119589, 15.8634361585, 15.8634603577, 15.8634845565, 15.8635087549, 15.8635329528, 15.8635571504, 15.8635813476, 15.8636055443, 15.8636297407, 15.8636539366, 15.8636781321, 15.8637023273, 15.863726522, 15.8637507163, 15.8637749102, 15.8637991037, 15.8638232968, 15.8638474895, 15.8638716818, 15.8638958737, 15.8639200652, 15.8639442562, 15.8639684469, 15.8639926372, 15.864016827, 15.8640410165, 15.8640652055, 15.8640893942, 15.8641135824, 15.8641377702, 15.8641619576, 15.8641861447, 15.8642103313, 15.8642345175, 15.8642587033, 15.8642828887, 15.8643070737, 15.8643312582, 15.8643554424, 15.8643796262, 15.8644038096, 15.8644279925, 15.8644521751, 15.8644763572, 15.864500539, 15.8645247203, 15.8645489012, 15.8645730818, 15.8645972619, 15.8646214416, 15.8646456209, 15.8646697998, 15.8646939783, 15.8647181564, 15.8647423341, 15.8647665114, 15.8647906883, 15.8648148648, 15.8648390409, 15.8648632165, 15.8648873918, 15.8649115666, 15.8649357411, 15.8649599151, 15.8649840888, 15.865008262, 15.8650324349, 15.8650566073, 15.8650807793, 15.8651049509, 15.8651291221, 15.8651532929, 15.8651774633, 15.8652016333, 15.8652258029, 15.8652499721, 15.8652741409, 15.8652983093, 15.8653224772, 15.8653466448, 15.865370812, 15.8653949787, 15.8654191451, 15.865443311, 15.8654674766, 15.8654916417, 15.8655158065, 15.8655399708, 15.8655641347, 15.8655882982, 15.8656124613, 15.8656366241, 15.8656607864, 15.8656849483, 15.8657091098, 15.8657332709, 15.8657574315, 15.8657815918, 15.8658057517, 15.8658299112, 15.8658540702, 15.8658782289, 15.8659023872, 15.865926545, 15.8659507025, 15.8659748595, 15.8659990162, 15.8660231724, 15.8660473282, 15.8660714837, 15.8660956387, 15.8661197933, 15.8661439475, 15.8661681013, 15.8661922547, 15.8662164077, 15.8662405603, 15.8662647125, 15.8662888643, 15.8663130157, 15.8663371667, 15.8663613173, 15.8663854674, 15.8664096172, 15.8664337666, 15.8664579155, 15.8664820641, 15.8665062122, 15.86653036, 15.8665545073, 15.8665786543, 15.8666028008, 15.8666269469, 15.8666510926, 15.866675238, 15.8666993829, 15.8667235274, 15.8667476715, 15.8667718152, 15.8667959585, 15.8668201014, 15.8668442439, 15.866868386, 15.8668925277, 15.866916669, 15.8669408098, 15.8669649503, 15.8669890904, 15.86701323, 15.8670373693, 15.8670615082, 15.8670856466, 15.8671097847, 15.8671339223, 15.8671580596, 15.8671821964, 15.8672063328, 15.8672304689, 15.8672546045, 15.8672787397, 15.8673028745, 15.8673270089, 15.867351143, 15.8673752766, 15.8673994098, 15.8674235426, 15.867447675, 15.867471807, 15.8674959386, 15.8675200697, 15.8675442005, 15.8675683309, 15.8675924609, 15.8676165904, 15.8676407196, 15.8676648484, 15.8676889767, 15.8677131047, 15.8677372323, 15.8677613594, 15.8677854862, 15.8678096125, 15.8678337384, 15.867857864, 15.8678819891, 15.8679061138, 15.8679302382, 15.8679543621, 15.8679784856, 15.8680026087, 15.8680267314, 15.8680508537, 15.8680749757, 15.8680990972, 15.8681232183, 15.868147339, 15.8681714592, 15.8681955791, 15.8682196986, 15.8682438177, 15.8682679364, 15.8682920547, 15.8683161725, 15.86834029, 15.8683644071, 15.8683885237, 15.86841264, 15.8684367559, 15.8684608713, 15.8684849864, 15.868509101, 15.8685332153, 15.8685573291, 15.8685814425, 15.8686055556, 15.8686296682, 15.8686537804, 15.8686778923, 15.8687020037, 15.8687261147, 15.8687502253, 15.8687743356, 15.8687984454, 15.8688225548, 15.8688466638, 15.8688707724, 15.8688948806, 15.8689189884, 15.8689430958, 15.8689672028, 15.8689913094, 15.8690154156, 15.8690395213, 15.8690636267, 15.8690877317, 15.8691118363, 15.8691359404, 15.8691600442, 15.8691841476, 15.8692082506, 15.8692323531, 15.8692564553, 15.869280557, 15.8693046584, 15.8693287593, 15.8693528599, 15.86937696, 15.8694010598, 15.8694251591, 15.8694492581, 15.8694733566, 15.8694974547, 15.8695215525, 15.8695456498, 15.8695697467, 15.8695938432, 15.8696179394, 15.8696420351, 15.8696661304, 15.8696902253, 15.8697143198, 15.8697384139, 15.8697625076, 15.8697866009, 15.8698106938, 15.8698347863, 15.8698588784, 15.8698829701, 15.8699070614, 15.8699311523, 15.8699552428, 15.8699793329, 15.8700034226, 15.8700275119, 15.8700516007, 15.8700756892, 15.8700997773, 15.870123865, 15.8701479522, 15.8701720391, 15.8701961256, 15.8702202116, 15.8702442973, 15.8702683826, 15.8702924674, 15.8703165519, 15.8703406359, 15.8703647196, 15.8703888028, 15.8704128857, 15.8704369681, 15.8704610502, 15.8704851318, 15.8705092131, 15.8705332939, 15.8705573743, 15.8705814544, 15.870605534, 15.8706296132, 15.8706536921, 15.8706777705, 15.8707018485, 15.8707259261, 15.8707500033, 15.8707740802, 15.8707981566, 15.8708222326, 15.8708463082, 15.8708703834, 15.8708944582, 15.8709185326, 15.8709426066, 15.8709666803, 15.8709907535, 15.8710148263, 15.8710388987, 15.8710629707, 15.8710870423, 15.8711111134, 15.8711351842, 15.8711592546, 15.8711833246, 15.8712073942, 15.8712314634, 15.8712555322, 15.8712796006, 15.8713036686, 15.8713277361, 15.8713518033, 15.8713758701, 15.8713999365, 15.8714240024, 15.871448068, 15.8714721332, 15.871496198, 15.8715202623, 15.8715443263, 15.8715683899, 15.871592453, 15.8716165158, 15.8716405782, 15.8716646401, 15.8716887017, 15.8717127628, 15.8717368236, 15.8717608839, 15.8717849439, 15.8718090035, 15.8718330626, 15.8718571214, 15.8718811797, 15.8719052377, 15.8719292952, 15.8719533524, 15.8719774091, 15.8720014654, 15.8720255214, 15.8720495769, 15.8720736321, 15.8720976868, 15.8721217411, 15.8721457951, 15.8721698486, 15.8721939018, 15.8722179545, 15.8722420068, 15.8722660588, 15.8722901103, 15.8723141614, 15.8723382121, 15.8723622625, 15.8723863124, 15.8724103619, 15.8724344111, 15.8724584598, 15.8724825081, 15.872506556, 15.8725306036, 15.8725546507, 15.8725786974, 15.8726027437, 15.8726267896, 15.8726508352, 15.8726748803, 15.872698925, 15.8727229693, 15.8727470132, 15.8727710567, 15.8727950998, 15.8728191426, 15.8728431849, 15.8728672268, 15.8728912683, 15.8729153094, 15.8729393501, 15.8729633904, 15.8729874303, 15.8730114698, 15.873035509, 15.8730595477, 15.873083586, 15.8731076239, 15.8731316614, 15.8731556985, 15.8731797352, 15.8732037715, 15.8732278074, 15.8732518429, 15.873275878, 15.8732999127, 15.873323947, 15.8733479809, 15.8733720144, 15.8733960475, 15.8734200802, 15.8734441125, 15.8734681444, 15.8734921759, 15.873516207, 15.8735402377, 15.873564268, 15.8735882979, 15.8736123274, 15.8736363565, 15.8736603852, 15.8736844135, 15.8737084414, 15.8737324689, 15.873756496, 15.8737805227, 15.873804549, 15.8738285749, 15.8738526004, 15.8738766255, 15.8739006502, 15.8739246745, 15.8739486984, 15.8739727219, 15.873996745, 15.8740207677, 15.87404479, 15.8740688119, 15.8740928333, 15.8741168544, 15.8741408751, 15.8741648954, 15.8741889153, 15.8742129348, 15.8742369539, 15.8742609726, 15.8742849909, 15.8743090088, 15.8743330263, 15.8743570434, 15.8743810601, 15.8744050764, 15.8744290923, 15.8744531078, 15.8744771229, 15.8745011376, 15.8745251519, 15.8745491658, 15.8745731793, 15.8745971924, 15.8746212051, 15.8746452174, 15.8746692293, 15.8746932408, 15.8747172519, 15.8747412626, 15.8747652729, 15.8747892828, 15.8748132923, 15.8748373014, 15.8748613101, 15.8748853184, 15.8749093263, 15.8749333338, 15.8749573409, 15.8749813477, 15.875005354, 15.8750293599, 15.8750533654, 15.8750773705, 15.8751013752, 15.8751253795, 15.8751493834, 15.8751733869, 15.87519739, 15.8752213928, 15.8752453951, 15.875269397, 15.8752933985, 15.8753173996, 15.8753414003, 15.8753654006, 15.8753894006, 15.8754134001, 15.8754373992, 15.8754613979, 15.8754853962, 15.8755093942, 15.8755333917, 15.8755573888, 15.8755813855, 15.8756053819, 15.8756293778, 15.8756533733, 15.8756773684, 15.8757013632, 15.8757253575, 15.8757493514, 15.875773345, 15.8757973381, 15.8758213308, 15.8758453232, 15.8758693151, 15.8758933066, 15.8759172978, 15.8759412885, 15.8759652788, 15.8759892688, 15.8760132583, 15.8760372475, 15.8760612362, 15.8760852245, 15.8761092125, 15.8761332, 15.8761571872, 15.8761811739, 15.8762051603, 15.8762291462, 15.8762531318, 15.876277117, 15.8763011017, 15.8763250861, 15.87634907, 15.8763730536, 15.8763970367, 15.8764210195, 15.8764450019, 15.8764689838, 15.8764929654, 15.8765169466, 15.8765409273, 15.8765649077, 15.8765888877, 15.8766128672, 15.8766368464, 15.8766608252, 15.8766848036, 15.8767087816, 15.8767327591, 15.8767567363, 15.8767807131, 15.8768046895, 15.8768286655, 15.8768526411, 15.8768766162, 15.876900591, 15.8769245654, 15.8769485394, 15.876972513, 15.8769964862, 15.877020459, 15.8770444314, 15.8770684034, 15.877092375, 15.8771163462, 15.877140317, 15.8771642875, 15.8771882575, 15.8772122271, 15.8772361963, 15.8772601651, 15.8772841335, 15.8773081015, 15.8773320692, 15.8773560364, 15.8773800032, 15.8774039696, 15.8774279357, 15.8774519013, 15.8774758665, 15.8774998314, 15.8775237958, 15.8775477598, 15.8775717235, 15.8775956867, 15.8776196496, 15.877643612, 15.8776675741, 15.8776915357, 15.877715497, 15.8777394578, 15.8777634183, 15.8777873783, 15.877811338, 15.8778352973, 15.8778592561, 15.8778832146, 15.8779071727, 15.8779311303, 15.8779550876, 15.8779790445, 15.878003001, 15.878026957, 15.8780509127, 15.878074868, 15.8780988229, 15.8781227774, 15.8781467315, 15.8781706852, 15.8781946385, 15.8782185914, 15.8782425439, 15.878266496, 15.8782904477, 15.878314399, 15.8783383499, 15.8783623004, 15.8783862505, 15.8784102002, 15.8784341496, 15.8784580985, 15.878482047, 15.8785059951, 15.8785299429, 15.8785538902, 15.8785778371, 15.8786017837, 15.8786257298, 15.8786496755, 15.8786736209, 15.8786975658, 15.8787215104, 15.8787454545, 15.8787693983, 15.8787933417, 15.8788172846, 15.8788412272, 15.8788651693, 15.8788891111, 15.8789130525, 15.8789369935, 15.878960934, 15.8789848742, 15.879008814, 15.8790327534, 15.8790566924, 15.879080631, 15.8791045691, 15.8791285069, 15.8791524443, 15.8791763813, 15.8792003179, 15.8792242542, 15.87924819, 15.8792721254, 15.8792960604, 15.879319995, 15.8793439292, 15.8793678631, 15.8793917965, 15.8794157295, 15.8794396621, 15.8794635944, 15.8794875262, 15.8795114577, 15.8795353887, 15.8795593194, 15.8795832496, 15.8796071795, 15.8796311089, 15.879655038, 15.8796789666, 15.8797028949, 15.8797268228, 15.8797507503, 15.8797746773, 15.879798604, 15.8798225303, 15.8798464562, 15.8798703817, 15.8798943068, 15.8799182315, 15.8799421558, 15.8799660797, 15.8799900032, 15.8800139263, 15.880037849, 15.8800617713, 15.8800856932, 15.8801096147, 15.8801335359, 15.8801574566, 15.8801813769, 15.8802052969, 15.8802292164, 15.8802531356, 15.8802770543, 15.8803009726, 15.8803248906, 15.8803488082, 15.8803727253, 15.8803966421, 15.8804205584, 15.8804444744, 15.88046839, 15.8804923052, 15.8805162199, 15.8805401343, 15.8805640483, 15.8805879619, 15.8806118751, 15.8806357879, 15.8806597003, 15.8806836123, 15.8807075239, 15.8807314351, 15.880755346, 15.8807792564, 15.8808031664, 15.880827076, 15.8808509853, 15.8808748941, 15.8808988025, 15.8809227106, 15.8809466182, 15.8809705255, 15.8809944323, 15.8810183388, 15.8810422449, 15.8810661505, 15.8810900558, 15.8811139607, 15.8811378652, 15.8811617692, 15.8811856729, 15.8812095762, 15.8812334791, 15.8812573816, 15.8812812837, 15.8813051854, 15.8813290867, 15.8813529876, 15.8813768882, 15.8814007883, 15.881424688, 15.8814485873, 15.8814724863, 15.8814963848, 15.881520283, 15.8815441807, 15.8815680781, 15.881591975, 15.8816158716, 15.8816397677, 15.8816636635, 15.8816875589, 15.8817114538, 15.8817353484, 15.8817592426, 15.8817831364, 15.8818070298, 15.8818309228, 15.8818548154, 15.8818787076, 15.8819025994, 15.8819264908, 15.8819503818, 15.8819742725, 15.8819981627, 15.8820220525, 15.882045942, 15.882069831, 15.8820937197, 15.8821176079, 15.8821414958, 15.8821653832, 15.8821892703, 15.8822131569, 15.8822370432, 15.8822609291, 15.8822848146, 15.8823086997, 15.8823325844, 15.8823564687, 15.8823803526, 15.8824042361, 15.8824281192, 15.8824520019, 15.8824758842, 15.8824997661, 15.8825236477, 15.8825475288, 15.8825714095, 15.8825952899, 15.8826191698, 15.8826430494, 15.8826669285, 15.8826908073, 15.8827146856, 15.8827385636, 15.8827624412, 15.8827863184, 15.8828101952, 15.8828340715, 15.8828579475, 15.8828818231, 15.8829056983, 15.8829295732, 15.8829534476, 15.8829773216, 15.8830011952, 15.8830250684, 15.8830489413, 15.8830728137, 15.8830966858, 15.8831205574, 15.8831444287, 15.8831682995, 15.88319217, 15.8832160401, 15.8832399097, 15.883263779, 15.8832876479, 15.8833115164, 15.8833353845, 15.8833592522, 15.8833831195, 15.8834069864, 15.8834308529, 15.883454719, 15.8834785847, 15.8835024501, 15.883526315, 15.8835501796, 15.8835740437, 15.8835979075, 15.8836217708, 15.8836456338, 15.8836694963, 15.8836933585, 15.8837172203, 15.8837410817, 15.8837649427, 15.8837888033, 15.8838126635, 15.8838365233, 15.8838603827, 15.8838842417, 15.8839081003, 15.8839319585, 15.8839558164, 15.8839796738, 15.8840035309, 15.8840273875, 15.8840512438, 15.8840750996, 15.8840989551, 15.8841228102, 15.8841466648, 15.8841705191, 15.884194373, 15.8842182265, 15.8842420796, 15.8842659323, 15.8842897846, 15.8843136365, 15.884337488, 15.8843613392, 15.8843851899, 15.8844090402, 15.8844328902, 15.8844567397, 15.8844805889, 15.8845044376, 15.884528286, 15.884552134, 15.8845759816, 15.8845998288, 15.8846236755, 15.8846475219, 15.8846713679, 15.8846952135, 15.8847190588, 15.8847429036, 15.884766748, 15.884790592, 15.8848144357, 15.8848382789, 15.8848621218, 15.8848859642, 15.8849098063, 15.8849336479, 15.8849574892, 15.8849813301, 15.8850051706, 15.8850290107, 15.8850528504, 15.8850766897, 15.8851005286, 15.8851243671, 15.8851482052, 15.885172043, 15.8851958803, 15.8852197172, 15.8852435538, 15.8852673899, 15.8852912257, 15.885315061, 15.885338896, 15.8853627306, 15.8853865648, 15.8854103986, 15.885434232, 15.885458065, 15.8854818976, 15.8855057298, 15.8855295616, 15.885553393, 15.8855772241, 15.8856010547, 15.885624885, 15.8856487148, 15.8856725443, 15.8856963733, 15.885720202, 15.8857440303, 15.8857678582, 15.8857916857, 15.8858155128, 15.8858393395, 15.8858631658, 15.8858869917, 15.8859108172, 15.8859346424, 15.8859584671, 15.8859822914, 15.8860061154, 15.8860299389, 15.8860537621, 15.8860775849, 15.8861014072, 15.8861252292, 15.8861490508, 15.886172872, 15.8861966928, 15.8862205132, 15.8862443332, 15.8862681529, 15.8862919721, 15.8863157909, 15.8863396094, 15.8863634274, 15.8863872451, 15.8864110624, 15.8864348792, 15.8864586957, 15.8864825118, 15.8865063275, 15.8865301428, 15.8865539577, 15.8865777722, 15.8866015863, 15.8866254, 15.8866492134, 15.8866730263, 15.8866968389, 15.886720651, 15.8867444628, 15.8867682741, 15.8867920851, 15.8868158957, 15.8868397059, 15.8868635157, 15.8868873251, 15.8869111341, 15.8869349427, 15.8869587509, 15.8869825588, 15.8870063662, 15.8870301732, 15.8870539799, 15.8870777862, 15.887101592, 15.8871253975, 15.8871492026, 15.8871730073, 15.8871968116, 15.8872206155, 15.887244419, 15.8872682221, 15.8872920248, 15.8873158272, 15.8873396291, 15.8873634306, 15.8873872318, 15.8874110326, 15.8874348329, 15.8874586329, 15.8874824325, 15.8875062317, 15.8875300305, 15.8875538289, 15.8875776269, 15.8876014245, 15.8876252217, 15.8876490186, 15.887672815, 15.8876966111, 15.8877204067, 15.887744202, 15.8877679969, 15.8877917913, 15.8878155854, 15.8878393791, 15.8878631724, 15.8878869653, 15.8879107579, 15.88793455, 15.8879583417, 15.8879821331, 15.888005924, 15.8880297146, 15.8880535047, 15.8880772945, 15.8881010839, 15.8881248729, 15.8881486615, 15.8881724497, 15.8881962375, 15.8882200249, 15.8882438119, 15.8882675986, 15.8882913848, 15.8883151706, 15.8883389561, 15.8883627412, 15.8883865258, 15.8884103101, 15.888434094, 15.8884578775, 15.8884816606, 15.8885054433, 15.8885292257, 15.8885530076, 15.8885767891, 15.8886005703, 15.888624351, 15.8886481314, 15.8886719113, 15.8886956909, 15.8887194701, 15.8887432489, 15.8887670273, 15.8887908053, 15.8888145829, 15.8888383602, 15.888862137, 15.8888859134, 15.8889096895, 15.8889334651, 15.8889572404, 15.8889810153, 15.8890047898, 15.8890285638, 15.8890523375, 15.8890761109, 15.8890998838, 15.8891236563, 15.8891474284, 15.8891712002, 15.8891949715, 15.8892187425, 15.889242513, 15.8892662832, 15.889290053, 15.8893138224, 15.8893375914, 15.88936136, 15.8893851282, 15.889408896, 15.8894326635, 15.8894564305, 15.8894801972, 15.8895039634, 15.8895277293, 15.8895514948, 15.8895752598, 15.8895990245, 15.8896227888, 15.8896465527, 15.8896703163, 15.8896940794, 15.8897178421, 15.8897416045, 15.8897653664, 15.889789128, 15.8898128891, 15.8898366499, 15.8898604103, 15.8898841703, 15.8899079299, 15.8899316891, 15.8899554479, 15.8899792064, 15.8900029644, 15.8900267221, 15.8900504793, 15.8900742362, 15.8900979927, 15.8901217487, 15.8901455044, 15.8901692597, 15.8901930146, 15.8902167692, 15.8902405233, 15.890264277, 15.8902880304, 15.8903117833, 15.8903355359, 15.8903592881, 15.8903830398, 15.8904067912, 15.8904305422, 15.8904542928, 15.890478043, 15.8905017929, 15.8905255423, 15.8905492914, 15.89057304, 15.8905967883, 15.8906205361, 15.8906442836, 15.8906680307, 15.8906917774, 15.8907155237, 15.8907392696, 15.8907630152, 15.8907867603, 15.890810505, 15.8908342494, 15.8908579934, 15.8908817369, 15.8909054801, 15.8909292229, 15.8909529653, 15.8909767073, 15.8910004489, 15.8910241901, 15.891047931, 15.8910716714, 15.8910954115, 15.8911191512, 15.8911428904, 15.8911666293, 15.8911903678, 15.8912141059, 15.8912378436, 15.8912615809, 15.8912853179, 15.8913090544, 15.8913327906, 15.8913565263, 15.8913802617, 15.8914039967, 15.8914277313, 15.8914514654, 15.8914751993, 15.8914989327, 15.8915226657, 15.8915463983, 15.8915701306, 15.8915938624, 15.8916175939, 15.891641325, 15.8916650557, 15.8916887859, 15.8917125159, 15.8917362454, 15.8917599745, 15.8917837032, 15.8918074316, 15.8918311595, 15.8918548871, 15.8918786142, 15.891902341, 15.8919260674, 15.8919497934, 15.891973519, 15.8919972442, 15.8920209691, 15.8920446935, 15.8920684176, 15.8920921412, 15.8921158645, 15.8921395874, 15.8921633099, 15.892187032, 15.8922107537, 15.892234475, 15.8922581959, 15.8922819165, 15.8923056366, 15.8923293564, 15.8923530757, 15.8923767947, 15.8924005133, 15.8924242315, 15.8924479493, 15.8924716667, 15.8924953838, 15.8925191004, 15.8925428166, 15.8925665325, 15.892590248, 15.8926139631, 15.8926376777, 15.892661392, 15.892685106, 15.8927088195, 15.8927325326, 15.8927562454, 15.8927799577, 15.8928036697, 15.8928273812, 15.8928510924, 15.8928748032, 15.8928985136, 15.8929222236, 15.8929459333, 15.8929696425, 15.8929933513, 15.8930170598, 15.8930407679, 15.8930644755, 15.8930881828, 15.8931118897, 15.8931355962, 15.8931593023, 15.8931830081, 15.8932067134, 15.8932304184, 15.8932541229, 15.8932778271, 15.8933015309, 15.8933252343, 15.8933489373, 15.8933726399, 15.8933963421, 15.8934200439, 15.8934437454, 15.8934674464, 15.8934911471, 15.8935148474, 15.8935385472, 15.8935622467, 15.8935859459, 15.8936096446, 15.8936333429, 15.8936570408, 15.8936807384, 15.8937044356, 15.8937281323, 15.8937518287, 15.8937755247, 15.8937992203, 15.8938229155, 15.8938466103, 15.8938703048, 15.8938939988, 15.8939176925, 15.8939413858, 15.8939650786, 15.8939887711, 15.8940124632, 15.8940361549, 15.8940598463, 15.8940835372, 15.8941072278, 15.8941309179, 15.8941546077, 15.8941782971, 15.8942019861, 15.8942256747, 15.8942493629, 15.8942730507, 15.8942967381, 15.8943204252, 15.8943441118, 15.8943677981, 15.894391484, 15.8944151695, 15.8944388546, 15.8944625393, 15.8944862236, 15.8945099075, 15.8945335911, 15.8945572742, 15.894580957, 15.8946046394, 15.8946283214, 15.894652003, 15.8946756842, 15.894699365, 15.8947230455, 15.8947467255, 15.8947704052, 15.8947940844, 15.8948177633, 15.8948414418, 15.8948651199, 15.8948887976, 15.8949124749, 15.8949361519, 15.8949598284, 15.8949835046, 15.8950071804, 15.8950308558, 15.8950545307, 15.8950782054, 15.8951018796, 15.8951255534, 15.8951492268, 15.8951728999, 15.8951965726, 15.8952202448, 15.8952439167, 15.8952675882, 15.8952912593, 15.8953149301, 15.8953386004, 15.8953622703, 15.8953859399, 15.8954096091, 15.8954332778, 15.8954569462, 15.8954806142, 15.8955042819, 15.8955279491, 15.8955516159, 15.8955752824, 15.8955989484, 15.8956226141, 15.8956462794, 15.8956699443, 15.8956936088, 15.8957172729, 15.8957409367, 15.8957646, 15.895788263, 15.8958119255, 15.8958355877, 15.8958592495, 15.8958829109, 15.8959065719, 15.8959302326, 15.8959538928, 15.8959775527, 15.8960012121, 15.8960248712, 15.8960485299, 15.8960721882, 15.8960958461, 15.8961195036, 15.8961431608, 15.8961668175, 15.8961904739, 15.8962141299, 15.8962377854, 15.8962614406, 15.8962850955, 15.8963087499, 15.8963324039, 15.8963560576, 15.8963797108, 15.8964033637, 15.8964270162, 15.8964506683, 15.89647432, 15.8964979713, 15.8965216222, 15.8965452728, 15.8965689229, 15.8965925727, 15.8966162221, 15.8966398711, 15.8966635197, 15.8966871679, 15.8967108157, 15.8967344632, 15.8967581102, 15.8967817569, 15.8968054032, 15.8968290491, 15.8968526946, 15.8968763397, 15.8968999844, 15.8969236288, 15.8969472727, 15.8969709163, 15.8969945595, 15.8970182023, 15.8970418447, 15.8970654867, 15.8970891283, 15.8971127696, 15.8971364104, 15.8971600509, 15.897183691, 15.8972073307, 15.89723097, 15.8972546089, 15.8972782474, 15.8973018856, 15.8973255233, 15.8973491607, 15.8973727977, 15.8973964343, 15.8974200705, 15.8974437063, 15.8974673417, 15.8974909768, 15.8975146114, 15.8975382457, 15.8975618796, 15.8975855131, 15.8976091462, 15.8976327789, 15.8976564113, 15.8976800432, 15.8977036748, 15.8977273059, 15.8977509367, 15.8977745671, 15.8977981971, 15.8978218268, 15.897845456, 15.8978690849, 15.8978927133, 15.8979163414, 15.8979399691, 15.8979635964, 15.8979872233, 15.8980108498, 15.898034476, 15.8980581017, 15.8980817271, 15.8981053521, 15.8981289767, 15.8981526009, 15.8981762247, 15.8981998482, 15.8982234712, 15.8982470939, 15.8982707162, 15.898294338, 15.8983179595, 15.8983415807, 15.8983652014, 15.8983888217, 15.8984124417, 15.8984360613, 15.8984596804, 15.8984832992, 15.8985069176, 15.8985305357, 15.8985541533, 15.8985777705, 15.8986013874, 15.8986250039, 15.89864862, 15.8986722357, 15.898695851, 15.8987194659, 15.8987430805, 15.8987666946, 15.8987903084, 15.8988139218, 15.8988375348, 15.8988611474, 15.8988847596, 15.8989083714, 15.8989319829, 15.8989555939, 15.8989792046, 15.8990028149, 15.8990264248, 15.8990500343, 15.8990736435, 15.8990972522, 15.8991208606, 15.8991444685, 15.8991680761, 15.8991916833, 15.8992152901, 15.8992388966, 15.8992625026, 15.8992861083, 15.8993097135, 15.8993333184, 15.8993569229, 15.899380527, 15.8994041308, 15.8994277341, 15.899451337, 15.8994749396, 15.8994985418, 15.8995221436, 15.899545745, 15.899569346, 15.8995929467, 15.8996165469, 15.8996401468, 15.8996637462, 15.8996873453, 15.899710944, 15.8997345424, 15.8997581403, 15.8997817378, 15.899805335, 15.8998289318, 15.8998525282, 15.8998761242, 15.8998997198, 15.899923315, 15.8999469099, 15.8999705043, 15.8999940984, 15.9000176921, 15.9000412854, 15.9000648783, 15.9000884708, 15.900112063, 15.9001356547, 15.9001592461, 15.9001828371, 15.9002064277, 15.9002300179, 15.9002536077, 15.9002771972, 15.9003007862, 15.9003243749, 15.9003479632, 15.9003715511, 15.9003951386, 15.9004187258, 15.9004423125, 15.9004658989, 15.9004894848, 15.9005130704, 15.9005366556, 15.9005602404, 15.9005838249, 15.9006074089, 15.9006309926, 15.9006545759, 15.9006781587, 15.9007017412, 15.9007253234, 15.9007489051, 15.9007724864, 15.9007960674, 15.900819648, 15.9008432282, 15.900866808, 15.9008903874, 15.9009139664, 15.9009375451, 15.9009611233, 15.9009847012, 15.9010082787, 15.9010318558, 15.9010554326, 15.9010790089, 15.9011025848, 15.9011261604, 15.9011497356, 15.9011733104, 15.9011968848, 15.9012204588, 15.9012440325, 15.9012676057, 15.9012911786, 15.9013147511, 15.9013383232, 15.9013618949, 15.9013854662, 15.9014090372, 15.9014326077, 15.9014561779, 15.9014797477, 15.9015033171, 15.9015268861, 15.9015504548, 15.901574023, 15.9015975909, 15.9016211583, 15.9016447254, 15.9016682922, 15.9016918585, 15.9017154244, 15.90173899, 15.9017625551, 15.9017861199, 15.9018096843, 15.9018332483, 15.901856812, 15.9018803752, 15.9019039381, 15.9019275006, 15.9019510626, 15.9019746243, 15.9019981857, 15.9020217466, 15.9020453072, 15.9020688673, 15.9020924271, 15.9021159865, 15.9021395455, 15.9021631041, 15.9021866624, 15.9022102202, 15.9022337777, 15.9022573348, 15.9022808915, 15.9023044478, 15.9023280038, 15.9023515593, 15.9023751145, 15.9023986693, 15.9024222237, 15.9024457777, 15.9024693313, 15.9024928845, 15.9025164374, 15.9025399899, 15.902563542, 15.9025870937, 15.902610645, 15.9026341959, 15.9026577465, 15.9026812967, 15.9027048464, 15.9027283958, 15.9027519449, 15.9027754935, 15.9027990417, 15.9028225896, 15.9028461371, 15.9028696842, 15.9028932309, 15.9029167772, 15.9029403231, 15.9029638687, 15.9029874139, 15.9030109586, 15.903034503, 15.9030580471, 15.9030815907, 15.9031051339, 15.9031286768, 15.9031522193, 15.9031757614, 15.9031993031, 15.9032228444, 15.9032463854, 15.9032699259, 15.9032934661, 15.9033170059, 15.9033405453, 15.9033640843, 15.903387623, 15.9034111612, 15.9034346991, 15.9034582366, 15.9034817737, 15.9035053104, 15.9035288468, 15.9035523827, 15.9035759183, 15.9035994535, 15.9036229883, 15.9036465227, 15.9036700567, 15.9036935904, 15.9037171236, 15.9037406565, 15.903764189, 15.9037877211, 15.9038112529, 15.9038347842, 15.9038583152, 15.9038818457, 15.9039053759, 15.9039289057, 15.9039524352, 15.9039759642, 15.9039994929, 15.9040230211, 15.904046549, 15.9040700765, 15.9040936037, 15.9041171304, 15.9041406568, 15.9041641827, 15.9041877083, 15.9042112335, 15.9042347584, 15.9042582828, 15.9042818069, 15.9043053305, 15.9043288538, 15.9043523767, 15.9043758992, 15.9043994214, 15.9044229431, 15.9044464645, 15.9044699855, 15.9044935061, 15.9045170263, 15.9045405462, 15.9045640656, 15.9045875847, 15.9046111034, 15.9046346217, 15.9046581396, 15.9046816571, 15.9047051743, 15.904728691, 15.9047522074, 15.9047757234, 15.9047992391, 15.9048227543, 15.9048462691, 15.9048697836, 15.9048932977, 15.9049168114, 15.9049403247, 15.9049638377, 15.9049873502, 15.9050108624, 15.9050343742, 15.9050578856, 15.9050813966, 15.9051049072, 15.9051284175, 15.9051519274, 15.9051754369, 15.905198946, 15.9052224547, 15.905245963, 15.905269471, 15.9052929786, 15.9053164857, 15.9053399926, 15.905363499, 15.905387005, 15.9054105107, 15.905434016, 15.9054575208, 15.9054810254, 15.9055045295, 15.9055280332, 15.9055515366, 15.9055750396, 15.9055985422, 15.9056220444, 15.9056455462, 15.9056690476, 15.9056925487, 15.9057160494, 15.9057395497, 15.9057630496, 15.9057865491, 15.9058100483, 15.9058335471, 15.9058570454, 15.9058805434, 15.9059040411, 15.9059275383, 15.9059510351, 15.9059745316, 15.9059980277, 15.9060215234, 15.9060450187, 15.9060685137, 15.9060920082, 15.9061155024, 15.9061389962, 15.9061624896, 15.9061859826, 15.9062094753, 15.9062329675, 15.9062564594, 15.9062799509, 15.906303442, 15.9063269328, 15.9063504231, 15.9063739131, 15.9063974027, 15.9064208919, 15.9064443807, 15.9064678691, 15.9064913572, 15.9065148448, 15.9065383321, 15.906561819, 15.9065853056, 15.9066087917, 15.9066322775, 15.9066557629, 15.9066792478, 15.9067027325, 15.9067262167, 15.9067497005, 15.906773184, 15.9067966671, 15.9068201498, 15.9068436321, 15.9068671141, 15.9068905956, 15.9069140768, 15.9069375576, 15.906961038, 15.906984518, 15.9070079977, 15.9070314769, 15.9070549558, 15.9070784343, 15.9071019124, 15.9071253901, 15.9071488675, 15.9071723445, 15.9071958211, 15.9072192973, 15.9072427731, 15.9072662485, 15.9072897236, 15.9073131983, 15.9073366726, 15.9073601465, 15.90738362, 15.9074070932, 15.9074305659, 15.9074540383, 15.9074775103, 15.9075009819, 15.9075244532, 15.907547924, 15.9075713945, 15.9075948646, 15.9076183343, 15.9076418037, 15.9076652726, 15.9076887412, 15.9077122094, 15.9077356772, 15.9077591446, 15.9077826116, 15.9078060783, 15.9078295446, 15.9078530105, 15.907876476, 15.9078999411, 15.9079234059, 15.9079468702, 15.9079703342, 15.9079937978, 15.9080172611, 15.9080407239, 15.9080641864, 15.9080876484, 15.9081111101, 15.9081345715, 15.9081580324, 15.908181493, 15.9082049531, 15.9082284129, 15.9082518723, 15.9082753314, 15.90829879, 15.9083222483, 15.9083457062, 15.9083691637, 15.9083926208, 15.9084160775, 15.9084395339, 15.9084629898, 15.9084864454, 15.9085099007, 15.9085333555, 15.9085568099, 15.908580264, 15.9086037177, 15.908627171, 15.9086506239, 15.9086740765, 15.9086975286, 15.9087209804, 15.9087444318, 15.9087678828, 15.9087913335, 15.9088147837, 15.9088382336, 15.9088616831, 15.9088851322, 15.908908581, 15.9089320293, 15.9089554773, 15.9089789249, 15.9090023721, 15.9090258189, 15.9090492654, 15.9090727114, 15.9090961571, 15.9091196024, 15.9091430473, 15.9091664919, 15.909189936, 15.9092133798, 15.9092368232, 15.9092602662, 15.9092837089, 15.9093071511, 15.909330593, 15.9093540345, 15.9093774756, 15.9094009163, 15.9094243567, 15.9094477967, 15.9094712363, 15.9094946755, 15.9095181143, 15.9095415527, 15.9095649908, 15.9095884285, 15.9096118658, 15.9096353027, 15.9096587393, 15.9096821754, 15.9097056112, 15.9097290466, 15.9097524816, 15.9097759163, 15.9097993505, 15.9098227844, 15.9098462179, 15.909869651, 15.9098930838, 15.9099165161, 15.9099399481, 15.9099633797, 15.9099868109, 15.9100102417, 15.9100336722, 15.9100571023, 15.910080532, 15.9101039613, 15.9101273902, 15.9101508188, 15.9101742469, 15.9101976747, 15.9102211021, 15.9102445292, 15.9102679558, 15.9102913821, 15.910314808, 15.9103382335, 15.9103616586, 15.9103850834, 15.9104085077, 15.9104319317, 15.9104553553, 15.9104787785, 15.9105022014, 15.9105256238, 15.9105490459, 15.9105724676, 15.910595889, 15.9106193099, 15.9106427305, 15.9106661507, 15.9106895705, 15.9107129899, 15.9107364089, 15.9107598276, 15.9107832459, 15.9108066638, 15.9108300813, 15.9108534984, 15.9108769152, 15.9109003316, 15.9109237476, 15.9109471632, 15.9109705785, 15.9109939933, 15.9110174078, 15.9110408219, 15.9110642356, 15.911087649, 15.9111110619, 15.9111344745, 15.9111578867, 15.9111812985, 15.91120471, 15.911228121, 15.9112515317, 15.911274942, 15.9112983519, 15.9113217615, 15.9113451707, 15.9113685794, 15.9113919878, 15.9114153959, 15.9114388035, 15.9114622108, 15.9114856177, 15.9115090242, 15.9115324303, 15.911555836, 15.9115792414, 15.9116026464, 15.911626051, 15.9116494552, 15.9116728591, 15.9116962625, 15.9117196656, 15.9117430683, 15.9117664707, 15.9117898726, 15.9118132742, 15.9118366754, 15.9118600762, 15.9118834766, 15.9119068767, 15.9119302763, 15.9119536756, 15.9119770745, 15.9120004731, 15.9120238712, 15.912047269, 15.9120706664, 15.9120940634, 15.91211746, 15.9121408563, 15.9121642522, 15.9121876477, 15.9122110428, 15.9122344375, 15.9122578319, 15.9122812259, 15.9123046195, 15.9123280127, 15.9123514055, 15.912374798, 15.9123981901, 15.9124215818, 15.9124449731, 15.912468364, 15.9124917546, 15.9125151448, 15.9125385346, 15.912561924, 15.9125853131, 15.9126087018, 15.91263209, 15.912655478, 15.9126788655, 15.9127022526, 15.9127256394, 15.9127490258, 15.9127724118, 15.9127957975, 15.9128191827, 15.9128425676, 15.9128659521, 15.9128893362, 15.91291272, 15.9129361033, 15.9129594863, 15.9129828689, 15.9130062512, 15.913029633, 15.9130530145, 15.9130763956, 15.9130997763, 15.9131231566, 15.9131465365, 15.9131699161, 15.9131932953, 15.9132166741, 15.9132400526, 15.9132634306, 15.9132868083, 15.9133101856, 15.9133335625, 15.9133569391, 15.9133803152, 15.913403691, 15.9134270664, 15.9134504415, 15.9134738161, 15.9134971904, 15.9135205643, 15.9135439378, 15.9135673109, 15.9135906837, 15.9136140561, 15.913637428, 15.9136607997, 15.9136841709, 15.9137075418, 15.9137309123, 15.9137542824, 15.9137776521, 15.9138010214, 15.9138243904, 15.913847759, 15.9138711272, 15.913894495, 15.9139178625, 15.9139412296, 15.9139645963, 15.9139879626, 15.9140113285, 15.9140346941, 15.9140580593, 15.9140814241, 15.9141047885, 15.9141281526, 15.9141515162, 15.9141748795, 15.9141982425, 15.914221605, 15.9142449671, 15.9142683289, 15.9142916903, 15.9143150514, 15.914338412, 15.9143617723, 15.9143851322, 15.9144084917, 15.9144318508, 15.9144552096, 15.9144785679, 15.9145019259, 15.9145252835, 15.9145486408, 15.9145719976, 15.9145953541, 15.9146187102, 15.914642066, 15.9146654213, 15.9146887763, 15.9147121309, 15.9147354851, 15.9147588389, 15.9147821924, 15.9148055455, 15.9148288982, 15.9148522505, 15.9148756025, 15.914898954, 15.9149223052, 15.914945656, 15.9149690065, 15.9149923565, 15.9150157062, 15.9150390555, 15.9150624044, 15.915085753, 15.9151091012, 15.915132449, 15.9151557964, 15.9151791434, 15.9152024901, 15.9152258363, 15.9152491822, 15.9152725278, 15.9152958729, 15.9153192177, 15.9153425621, 15.9153659061, 15.9153892497, 15.915412593, 15.9154359359, 15.9154592784, 15.9154826205, 15.9155059622, 15.9155293036, 15.9155526446, 15.9155759852, 15.9155993254, 15.9156226653, 15.9156460048, 15.9156693439, 15.9156926826, 15.915716021, 15.9157393589, 15.9157626965, 15.9157860337, 15.9158093706, 15.915832707, 15.9158560431, 15.9158793788, 15.9159027142, 15.9159260491, 15.9159493837, 15.9159727179, 15.9159960517, 15.9160193851, 15.9160427182, 15.9160660509, 15.9160893832, 15.9161127151, 15.9161360467, 15.9161593779, 15.9161827087, 15.9162060391, 15.9162293691, 15.9162526988, 15.9162760281, 15.916299357, 15.9163226856, 15.9163460137, 15.9163693415, 15.9163926689, 15.9164159959, 15.9164393226, 15.9164626489, 15.9164859748, 15.9165093003, 15.9165326254, 15.9165559502, 15.9165792746, 15.9166025986, 15.9166259222, 15.9166492455, 15.9166725683, 15.9166958909, 15.916719213, 15.9167425347, 15.9167658561, 15.9167891771, 15.9168124977, 15.916835818, 15.9168591378, 15.9168824573, 15.9169057764, 15.9169290951, 15.9169524135, 15.9169757315, 15.9169990491, 15.9170223663, 15.9170456832, 15.9170689996, 15.9170923157, 15.9171156314, 15.9171389468, 15.9171622617, 15.9171855763, 15.9172088905, 15.9172322044, 15.9172555178, 15.9172788309, 15.9173021436, 15.917325456, 15.9173487679, 15.9173720795, 15.9173953907, 15.9174187015, 15.9174420119, 15.917465322, 15.9174886317, 15.917511941, 15.9175352499, 15.9175585585, 15.9175818667, 15.9176051745, 15.9176284819, 15.917651789, 15.9176750957, 15.917698402, 15.9177217079, 15.9177450134, 15.9177683186, 15.9177916234, 15.9178149278, 15.9178382319, 15.9178615355, 15.9178848388, 15.9179081417, 15.9179314443, 15.9179547464, 15.9179780482, 15.9180013496, 15.9180246507, 15.9180479513, 15.9180712516, 15.9180945515, 15.918117851, 15.9181411502, 15.918164449, 15.9181877474, 15.9182110454, 15.918234343, 15.9182576403, 15.9182809372, 15.9183042337, 15.9183275298, 15.9183508256, 15.918374121, 15.918397416, 15.9184207106, 15.9184440049, 15.9184672988, 15.9184905923, 15.9185138854, 15.9185371782, 15.9185604706, 15.9185837626, 15.9186070542, 15.9186303454, 15.9186536363, 15.9186769268, 15.9187002169, 15.9187235067, 15.9187467961, 15.9187700851, 15.9187933737, 15.9188166619, 15.9188399498, 15.9188632373, 15.9188865244, 15.9189098111, 15.9189330975, 15.9189563835, 15.9189796691, 15.9190029543, 15.9190262392, 15.9190495237, 15.9190728078, 15.9190960915, 15.9191193749, 15.9191426579, 15.9191659405, 15.9191892227, 15.9192125045, 15.919235786, 15.9192590671, 15.9192823479, 15.9193056282, 15.9193289082, 15.9193521878, 15.919375467, 15.9193987459, 15.9194220243, 15.9194453024, 15.9194685802, 15.9194918575, 15.9195151345, 15.9195384111, 15.9195616873, 15.9195849631, 15.9196082386, 15.9196315137, 15.9196547884, 15.9196780628, 15.9197013367, 15.9197246103, 15.9197478835, 15.9197711564, 15.9197944288, 15.9198177009, 15.9198409726, 15.919864244, 15.9198875149, 15.9199107855, 15.9199340557, 15.9199573256, 15.919980595, 15.9200038641, 15.9200271328, 15.9200504012, 15.9200736691, 15.9200969367, 15.9201202039, 15.9201434708, 15.9201667372, 15.9201900033, 15.920213269, 15.9202365344, 15.9202597993, 15.9202830639, 15.9203063281, 15.920329592, 15.9203528554, 15.9203761185, 15.9203993812, 15.9204226435, 15.9204459055, 15.9204691671, 15.9204924283, 15.9205156891, 15.9205389496, 15.9205622097, 15.9205854694, 15.9206087287, 15.9206319877, 15.9206552463, 15.9206785045, 15.9207017623, 15.9207250198, 15.9207482768, 15.9207715335, 15.9207947899, 15.9208180458, 15.9208413014, 15.9208645566, 15.9208878115, 15.9209110659, 15.92093432, 15.9209575737, 15.9209808271, 15.92100408, 15.9210273326, 15.9210505848, 15.9210738366, 15.9210970881, 15.9211203392, 15.9211435899, 15.9211668402, 15.9211900902, 15.9212133398, 15.921236589, 15.9212598378, 15.9212830863, 15.9213063344, 15.9213295821, 15.9213528295, 15.9213760764, 15.921399323, 15.9214225692, 15.9214458151, 15.9214690605, 15.9214923056, 15.9215155503, 15.9215387947, 15.9215620387, 15.9215852822, 15.9216085255, 15.9216317683, 15.9216550108, 15.9216782529, 15.9217014946, 15.921724736, 15.9217479769, 15.9217712175, 15.9217944577, 15.9218176976, 15.9218409371, 15.9218641762, 15.9218874149, 15.9219106533, 15.9219338912, 15.9219571288, 15.9219803661, 15.9220036029, 15.9220268394, 15.9220500755, 15.9220733112, 15.9220965466, 15.9221197816, 15.9221430162, 15.9221662504, 15.9221894843, 15.9222127178, 15.9222359509, 15.9222591836, 15.922282416, 15.922305648, 15.9223288796, 15.9223521109, 15.9223753417, 15.9223985722, 15.9224218023, 15.9224450321, 15.9224682615, 15.9224914905, 15.9225147191, 15.9225379473, 15.9225611752, 15.9225844027, 15.9226076298, 15.9226308566, 15.922654083, 15.922677309, 15.9227005346, 15.9227237599, 15.9227469848, 15.9227702093, 15.9227934334, 15.9228166572, 15.9228398806, 15.9228631036, 15.9228863262, 15.9229095485, 15.9229327704, 15.9229559919, 15.9229792131, 15.9230024338, 15.9230256542, 15.9230488743, 15.9230720939, 15.9230953132, 15.9231185321, 15.9231417506, 15.9231649688, 15.9231881866, 15.923211404, 15.923234621, 15.9232578377, 15.923281054, 15.9233042699, 15.9233274854, 15.9233507006, 15.9233739154, 15.9233971298, 15.9234203439, 15.9234435575, 15.9234667708, 15.9234899838, 15.9235131963, 15.9235364085, 15.9235596203, 15.9235828317, 15.9236060428, 15.9236292535, 15.9236524638, 15.9236756737, 15.9236988833, 15.9237220925, 15.9237453013, 15.9237685098, 15.9237917178, 15.9238149255, 15.9238381329, 15.9238613398, 15.9238845464, 15.9239077526, 15.9239309584, 15.9239541639, 15.923977369, 15.9240005737, 15.924023778, 15.924046982, 15.9240701856, 15.9240933888, 15.9241165917, 15.9241397941, 15.9241629962, 15.924186198, 15.9242093993, 15.9242326003, 15.9242558009, 15.9242790011, 15.924302201, 15.9243254005, 15.9243485996, 15.9243717983, 15.9243949967, 15.9244181947, 15.9244413923, 15.9244645896, 15.9244877865, 15.924510983, 15.9245341791, 15.9245573749, 15.9245805703, 15.9246037653, 15.9246269599, 15.9246501542, 15.9246733481, 15.9246965416, 15.9247197347, 15.9247429275, 15.9247661199, 15.9247893119, 15.9248125036, 15.9248356949, 15.9248588858, 15.9248820763, 15.9249052665, 15.9249284563, 15.9249516457, 15.9249748348, 15.9249980234, 15.9250212117, 15.9250443997, 15.9250675872, 15.9250907744, 15.9251139612, 15.9251371477, 15.9251603337, 15.9251835194, 15.9252067048, 15.9252298897, 15.9252530743, 15.9252762585, 15.9252994423, 15.9253226258, 15.9253458089, 15.9253689916, 15.9253921739, 15.9254153559, 15.9254385375, 15.9254617187, 15.9254848996, 15.92550808, 15.9255312601, 15.9255544399, 15.9255776192, 15.9256007982, 15.9256239768, 15.9256471551, 15.925670333, 15.9256935105, 15.9257166876, 15.9257398643, 15.9257630407, 15.9257862167, 15.9258093924, 15.9258325676, 15.9258557425, 15.925878917, 15.9259020912, 15.925925265, 15.9259484384, 15.9259716114, 15.9259947841, 15.9260179564, 15.9260411283, 15.9260642998, 15.926087471, 15.9261106418, 15.9261338122, 15.9261569823, 15.9261801519, 15.9262033213, 15.9262264902, 15.9262496588, 15.926272827, 15.9262959948, 15.9263191622, 15.9263423293, 15.926365496, 15.9263886623, 15.9264118283, 15.9264349939, 15.9264581591, 15.926481324, 15.9265044884, 15.9265276525, 15.9265508163, 15.9265739796, 15.9265971426, 15.9266203052, 15.9266434675, 15.9266666293, 15.9266897908, 15.926712952, 15.9267361127, 15.9267592731, 15.9267824331, 15.9268055928, 15.926828752, 15.9268519109, 15.9268750695, 15.9268982276, 15.9269213854, 15.9269445428, 15.9269676998, 15.9269908565, 15.9270140128, 15.9270371687, 15.9270603243, 15.9270834795, 15.9271066343, 15.9271297887, 15.9271529428, 15.9271760965, 15.9271992498, 15.9272224027, 15.9272455553, 15.9272687075, 15.9272918593, 15.9273150108, 15.9273381619, 15.9273613126, 15.927384463, 15.9274076129, 15.9274307626, 15.9274539118, 15.9274770607, 15.9275002091, 15.9275233573, 15.927546505, 15.9275696524, 15.9275927994, 15.927615946, 15.9276390923, 15.9276622382, 15.9276853837, 15.9277085289, 15.9277316736, 15.927754818, 15.9277779621, 15.9278011057, 15.927824249, 15.927847392, 15.9278705345, 15.9278936767, 15.9279168185, 15.9279399599, 15.927963101, 15.9279862417, 15.928009382, 15.928032522, 15.9280556616, 15.9280788008, 15.9281019396, 15.9281250781, 15.9281482162, 15.9281713539, 15.9281944912, 15.9282176282, 15.9282407648, 15.9282639011, 15.928287037, 15.9283101725, 15.9283333076, 15.9283564423, 15.9283795767, 15.9284027107, 15.9284258444, 15.9284489777, 15.9284721106, 15.9284952431, 15.9285183753, 15.928541507, 15.9285646385, 15.9285877695, 15.9286109002, 15.9286340305, 15.9286571604, 15.92868029, 15.9287034192, 15.928726548, 15.9287496765, 15.9287728046, 15.9287959323, 15.9288190596, 15.9288421866, 15.9288653132, 15.9288884394, 15.9289115653, 15.9289346907, 15.9289578159, 15.9289809406, 15.929004065, 15.929027189, 15.9290503126, 15.9290734359, 15.9290965588, 15.9291196813, 15.9291428034, 15.9291659252, 15.9291890466, 15.9292121677, 15.9292352883, 15.9292584086, 15.9292815286, 15.9293046481, 15.9293277673, 15.9293508861, 15.9293740046, 15.9293971226, 15.9294202403, 15.9294433577, 15.9294664746, 15.9294895912, 15.9295127075, 15.9295358233, 15.9295589388, 15.9295820539, 15.9296051687, 15.929628283, 15.929651397, 15.9296745107, 15.9296976239, 15.9297207368, 15.9297438493, 15.9297669615, 15.9297900733, 15.9298131847, 15.9298362957, 15.9298594064, 15.9298825167, 15.9299056266, 15.9299287362, 15.9299518453, 15.9299749542, 15.9299980626, 15.9300211707, 15.9300442784, 15.9300673857, 15.9300904927, 15.9301135993, 15.9301367055, 15.9301598114, 15.9301829169, 15.930206022, 15.9302291267, 15.9302522311, 15.9302753351, 15.9302984387, 15.930321542, 15.9303446449, 15.9303677474, 15.9303908496, 15.9304139514, 15.9304370528, 15.9304601538, 15.9304832545, 15.9305063548, 15.9305294548, 15.9305525543, 15.9305756535, 15.9305987524, 15.9306218508, 15.9306449489, 15.9306680466, 15.930691144, 15.930714241, 15.9307373376, 15.9307604338, 15.9307835297, 15.9308066252, 15.9308297203, 15.9308528151, 15.9308759095, 15.9308990035, 15.9309220971, 15.9309451904, 15.9309682833, 15.9309913759, 15.931014468, 15.9310375598, 15.9310606513, 15.9310837423, 15.931106833, 15.9311299234, 15.9311530133, 15.9311761029, 15.9311991921, 15.931222281, 15.9312453694, 15.9312684575, 15.9312915453, 15.9313146326, 15.9313377196, 15.9313608063, 15.9313838925, 15.9314069784, 15.931430064, 15.9314531491, 15.9314762339, 15.9314993183, 15.9315224023, 15.931545486, 15.9315685693, 15.9315916523, 15.9316147348, 15.931637817, 15.9316608989, 15.9316839803, 15.9317070614, 15.9317301421, 15.9317532225, 15.9317763025, 15.9317993821, 15.9318224613, 15.9318455402, 15.9318686187, 15.9318916968, 15.9319147746, 15.931937852, 15.931960929, 15.9319840057, 15.932007082, 15.9320301579, 15.9320532334, 15.9320763086, 15.9320993834, 15.9321224579, 15.932145532, 15.9321686057, 15.932191679, 15.932214752, 15.9322378246, 15.9322608968, 15.9322839687, 15.9323070402, 15.9323301113, 15.932353182, 15.9323762524, 15.9323993224, 15.9324223921, 15.9324454614, 15.9324685303, 15.9324915988, 15.932514667, 15.9325377348, 15.9325608022, 15.9325838693, 15.932606936, 15.9326300023, 15.9326530683, 15.9326761339, 15.9326991991, 15.9327222639, 15.9327453284, 15.9327683925, 15.9327914563, 15.9328145197, 15.9328375827, 15.9328606453, 15.9328837076, 15.9329067695, 15.932929831, 15.9329528922, 15.932975953, 15.9329990134, 15.9330220735, 15.9330451332, 15.9330681925, 15.9330912515, 15.93311431, 15.9331373683, 15.9331604261, 15.9331834836, 15.9332065407, 15.9332295974, 15.9332526538, 15.9332757098, 15.9332987655, 15.9333218207, 15.9333448756, 15.9333679302, 15.9333909843, 15.9334140381, 15.9334370916, 15.9334601446, 15.9334831973, 15.9335062496, 15.9335293016, 15.9335523532, 15.9335754044, 15.9335984552, 15.9336215057, 15.9336445558, 15.9336676056, 15.933690655, 15.933713704, 15.9337367526, 15.9337598009, 15.9337828488, 15.9338058963, 15.9338289435, 15.9338519903, 15.9338750367, 15.9338980828, 15.9339211285, 15.9339441738, 15.9339672187, 15.9339902633, 15.9340133076, 15.9340363514, 15.9340593949, 15.934082438, 15.9341054808, 15.9341285232, 15.9341515652, 15.9341746068, 15.9341976481, 15.934220689, 15.9342437295, 15.9342667697, 15.9342898095, 15.934312849, 15.934335888, 15.9343589267, 15.9343819651, 15.934405003, 15.9344280406, 15.9344510779, 15.9344741147, 15.9344971512, 15.9345201873, 15.9345432231, 15.9345662585, 15.9345892935, 15.9346123282, 15.9346353625, 15.9346583964, 15.9346814299, 15.9347044631, 15.9347274959, 15.9347505284, 15.9347735605, 15.9347965922, 15.9348196235, 15.9348426545, 15.9348656851, 15.9348887154, 15.9349117452, 15.9349347747, 15.9349578039, 15.9349808327, 15.9350038611, 15.9350268891, 15.9350499168, 15.9350729441, 15.935095971, 15.9351189976, 15.9351420238, 15.9351650496, 15.9351880751, 15.9352111002, 15.9352341249, 15.9352571493, 15.9352801733, 15.9353031969, 15.9353262201, 15.935349243, 15.9353722656, 15.9353952877, 15.9354183095, 15.9354413309, 15.935464352, 15.9354873727, 15.935510393, 15.935533413, 15.9355564325, 15.9355794518, 15.9356024706, 15.9356254891, 15.9356485072, 15.935671525, 15.9356945423, 15.9357175594, 15.935740576, 15.9357635923, 15.9357866082, 15.9358096238, 15.9358326389, 15.9358556537, 15.9358786682, 15.9359016823, 15.935924696, 15.9359477093, 15.9359707223, 15.9359937349, 15.9360167472, 15.936039759, 15.9360627705, 15.9360857817, 15.9361087925, 15.9361318029, 15.9361548129, 15.9361778226, 15.9362008319, 15.9362238408, 15.9362468494, 15.9362698576, 15.9362928654, 15.9363158729, 15.93633888, 15.9363618868, 15.9363848931, 15.9364078991, 15.9364309048, 15.93645391, 15.9364769149, 15.9364999195, 15.9365229237, 15.9365459275, 15.9365689309, 15.936591934, 15.9366149367, 15.936637939, 15.936660941, 15.9366839426, 15.9367069438, 15.9367299447, 15.9367529452, 15.9367759453, 15.9367989451, 15.9368219445, 15.9368449435, 15.9368679422, 15.9368909405, 15.9369139384, 15.936936936, 15.9369599332, 15.93698293, 15.9370059265, 15.9370289226, 15.9370519184, 15.9370749137, 15.9370979087, 15.9371209034, 15.9371438976, 15.9371668915, 15.9371898851, 15.9372128783, 15.9372358711, 15.9372588635, 15.9372818556, 15.9373048473, 15.9373278386, 15.9373508296, 15.9373738202, 15.9373968104, 15.9374198003, 15.9374427898, 15.937465779, 15.9374887677, 15.9375117561, 15.9375347442, 15.9375577319, 15.9375807192, 15.9376037061, 15.9376266927, 15.9376496789, 15.9376726647, 15.9376956502, 15.9377186353, 15.9377416201, 15.9377646045, 15.9377875885, 15.9378105721, 15.9378335554, 15.9378565383, 15.9378795209, 15.937902503, 15.9379254849, 15.9379484663, 15.9379714474, 15.9379944281, 15.9380174085, 15.9380403885, 15.9380633681, 15.9380863473, 15.9381093262, 15.9381323047, 15.9381552829, 15.9381782607, 15.9382012381, 15.9382242152, 15.9382471919, 15.9382701682, 15.9382931442, 15.9383161197, 15.938339095, 15.9383620698, 15.9383850443, 15.9384080185, 15.9384309922, 15.9384539656, 15.9384769387, 15.9384999113, 15.9385228836, 15.9385458556, 15.9385688271, 15.9385917983, 15.9386147692, 15.9386377397, 15.9386607098, 15.9386836795, 15.9387066489, 15.9387296179, 15.9387525865, 15.9387755548, 15.9387985227, 15.9388214903, 15.9388444575, 15.9388674243, 15.9388903907, 15.9389133568, 15.9389363225, 15.9389592879, 15.9389822529, 15.9390052175, 15.9390281818, 15.9390511457, 15.9390741092, 15.9390970723, 15.9391200351, 15.9391429976, 15.9391659596, 15.9391889213, 15.9392118827, 15.9392348436, 15.9392578042, 15.9392807645, 15.9393037243, 15.9393266839, 15.939349643, 15.9393726018, 15.9393955602, 15.9394185182, 15.9394414759, 15.9394644332, 15.9394873902, 15.9395103468, 15.939533303, 15.9395562588, 15.9395792143, 15.9396021694, 15.9396251242, 15.9396480786, 15.9396710326, 15.9396939863, 15.9397169396, 15.9397398925, 15.9397628451, 15.9397857973, 15.9398087491, 15.9398317006, 15.9398546517, 15.9398776024, 15.9399005528, 15.9399235028, 15.9399464525, 15.9399694017, 15.9399923507, 15.9400152992, 15.9400382474, 15.9400611952, 15.9400841427, 15.9401070898, 15.9401300365, 15.9401529828, 15.9401759288, 15.9401988745, 15.9402218197, 15.9402447646, 15.9402677092, 15.9402906533, 15.9403135971, 15.9403365406, 15.9403594837, 15.9403824264, 15.9404053687, 15.9404283107, 15.9404512523, 15.9404741936, 15.9404971345, 15.940520075, 15.9405430151, 15.9405659549, 15.9405888944, 15.9406118334, 15.9406347721, 15.9406577105, 15.9406806484, 15.940703586, 15.9407265233, 15.9407494601, 15.9407723967, 15.9407953328, 15.9408182686, 15.940841204, 15.940864139, 15.9408870737, 15.9409100081, 15.940932942, 15.9409558756, 15.9409788088, 15.9410017417, 15.9410246742, 15.9410476063, 15.9410705381, 15.9410934695, 15.9411164006, 15.9411393312, 15.9411622616, 15.9411851915, 15.9412081211, 15.9412310503, 15.9412539792, 15.9412769076, 15.9412998358, 15.9413227635, 15.9413456909, 15.941368618, 15.9413915446, 15.9414144709, 15.9414373969, 15.9414603225, 15.9414832477, 15.9415061725, 15.941529097, 15.9415520211, 15.9415749449, 15.9415978683, 15.9416207913, 15.941643714, 15.9416666363, 15.9416895582, 15.9417124798, 15.941735401, 15.9417583218, 15.9417812423, 15.9418041624, 15.9418270821, 15.9418500015, 15.9418729205, 15.9418958392, 15.9419187575, 15.9419416754, 15.941964593, 15.9419875102, 15.942010427, 15.9420333435, 15.9420562596, 15.9420791753, 15.9421020907, 15.9421250057, 15.9421479204, 15.9421708347, 15.9421937486, 15.9422166622, 15.9422395754, 15.9422624882, 15.9422854007, 15.9423083128, 15.9423312245, 15.9423541359, 15.9423770469, 15.9423999575, 15.9424228678, 15.9424457778, 15.9424686873, 15.9424915965, 15.9425145053, 15.9425374138, 15.9425603219, 15.9425832296, 15.942606137, 15.942629044, 15.9426519507, 15.942674857, 15.9426977629, 15.9427206684, 15.9427435736, 15.9427664785, 15.9427893829, 15.942812287, 15.9428351908, 15.9428580941, 15.9428809972, 15.9429038998, 15.9429268021, 15.942949704, 15.9429726056, 15.9429955068, 15.9430184076, 15.9430413081, 15.9430642082, 15.9430871079, 15.9431100073, 15.9431329063, 15.9431558049, 15.9431787032, 15.9432016011, 15.9432244987, 15.9432473959, 15.9432702927, 15.9432931892, 15.9433160853, 15.943338981, 15.9433618764, 15.9433847714, 15.9434076661, 15.9434305604, 15.9434534543, 15.9434763479, 15.9434992411, 15.9435221339, 15.9435450264, 15.9435679185, 15.9435908102, 15.9436137016, 15.9436365926, 15.9436594833, 15.9436823736, 15.9437052635, 15.9437281531, 15.9437510423, 15.9437739311, 15.9437968196, 15.9438197077, 15.9438425955, 15.9438654829, 15.9438883699, 15.9439112565, 15.9439341428, 15.9439570288, 15.9439799143, 15.9440027996, 15.9440256844, 15.9440485689, 15.944071453, 15.9440943368, 15.9441172202, 15.9441401032, 15.9441629859, 15.9441858682, 15.9442087501, 15.9442316317, 15.9442545129, 15.9442773938, 15.9443002742, 15.9443231544, 15.9443460341, 15.9443689135, 15.9443917926, 15.9444146713, 15.9444375496, 15.9444604275, 15.9444833051, 15.9445061823, 15.9445290592, 15.9445519357, 15.9445748118, 15.9445976876, 15.944620563, 15.9446434381, 15.9446663128, 15.9446891871, 15.944712061, 15.9447349346, 15.9447578079, 15.9447806808, 15.9448035533, 15.9448264254, 15.9448492972, 15.9448721686, 15.9448950397, 15.9449179104, 15.9449407807, 15.9449636507, 15.9449865203, 15.9450093895, 15.9450322584, 15.9450551269, 15.9450779951, 15.9451008629, 15.9451237303, 15.9451465974, 15.9451694641, 15.9451923305, 15.9452151965, 15.9452380621, 15.9452609273, 15.9452837922, 15.9453066568, 15.9453295209, 15.9453523848, 15.9453752482, 15.9453981113, 15.945420974, 15.9454438364, 15.9454666984, 15.94548956, 15.9455124213, 15.9455352822, 15.9455581428, 15.9455810029, 15.9456038628, 15.9456267222, 15.9456495813, 15.9456724401, 15.9456952984, 15.9457181565, 15.9457410141, 15.9457638714, 15.9457867283, 15.9458095849, 15.9458324411, 15.9458552969, 15.9458781524, 15.9459010075, 15.9459238623, 15.9459467167, 15.9459695707, 15.9459924244, 15.9460152777, 15.9460381307, 15.9460609832, 15.9460838355, 15.9461066873, 15.9461295388, 15.9461523899, 15.9461752407, 15.9461980911, 15.9462209412, 15.9462437909, 15.9462666402, 15.9462894892, 15.9463123378, 15.946335186, 15.9463580339, 15.9463808814, 15.9464037286, 15.9464265754, 15.9464494218, 15.9464722679, 15.9464951136, 15.9465179589, 15.9465408039, 15.9465636485, 15.9465864928, 15.9466093367, 15.9466321802, 15.9466550234, 15.9466778662, 15.9467007087, 15.9467235507, 15.9467463925, 15.9467692338, 15.9467920749, 15.9468149155, 15.9468377558, 15.9468605957, 15.9468834353, 15.9469062745, 15.9469291133, 15.9469519518, 15.9469747899, 15.9469976276, 15.947020465, 15.9470433021, 15.9470661387, 15.947088975, 15.947111811, 15.9471346466, 15.9471574818, 15.9471803166, 15.9472031511, 15.9472259853, 15.947248819, 15.9472716525, 15.9472944855, 15.9473173182, 15.9473401505, 15.9473629825, 15.9473858141, 15.9474086454, 15.9474314762, 15.9474543068, 15.9474771369, 15.9474999667, 15.9475227962, 15.9475456252, 15.947568454, 15.9475912823, 15.9476141103, 15.947636938, 15.9476597652, 15.9476825921, 15.9477054187, 15.9477282449, 15.9477510707, 15.9477738962, 15.9477967213, 15.947819546, 15.9478423704, 15.9478651944, 15.9478880181, 15.9479108414, 15.9479336643, 15.9479564869, 15.9479793091, 15.948002131, 15.9480249525, 15.9480477736, 15.9480705944, 15.9480934148, 15.9481162348, 15.9481390545, 15.9481618739, 15.9481846928, 15.9482075114, 15.9482303297, 15.9482531476, 15.9482759651, 15.9482987823, 15.9483215991, 15.9483444155, 15.9483672316, 15.9483900473, 15.9484128627, 15.9484356777, 15.9484584923, 15.9484813066, 15.9485041205, 15.9485269341, 15.9485497472, 15.9485725601, 15.9485953726, 15.9486181847, 15.9486409964, 15.9486638078, 15.9486866188, 15.9487094295, 15.9487322398, 15.9487550498, 15.9487778594, 15.9488006686, 15.9488234775, 15.948846286, 15.9488690941, 15.9488919019, 15.9489147093, 15.9489375164, 15.9489603231, 15.9489831294, 15.9490059354, 15.949028741, 15.9490515463, 15.9490743512, 15.9490971557, 15.9491199599, 15.9491427637, 15.9491655672, 15.9491883703, 15.949211173, 15.9492339754, 15.9492567774, 15.9492795791, 15.9493023804, 15.9493251813, 15.9493479819, 15.9493707821, 15.949393582, 15.9494163815, 15.9494391806, 15.9494619794, 15.9494847778, 15.9495075758, 15.9495303735, 15.9495531709, 15.9495759678, 15.9495987644, 15.9496215607, 15.9496443566, 15.9496671521, 15.9496899473, 15.9497127421, 15.9497355366, 15.9497583306, 15.9497811244, 15.9498039177, 15.9498267108, 15.9498495034, 15.9498722957, 15.9498950876, 15.9499178792, 15.9499406704, 15.9499634613, 15.9499862518, 15.9500090419, 15.9500318317, 15.9500546211, 15.9500774101, 15.9501001988, 15.9501229871, 15.9501457751, 15.9501685627, 15.95019135, 15.9502141369, 15.9502369234, 15.9502597096, 15.9502824954, 15.9503052808, 15.9503280659, 15.9503508507, 15.950373635, 15.950396419, 15.9504192027, 15.950441986, 15.9504647689, 15.9504875515, 15.9505103337, 15.9505331156, 15.950555897, 15.9505786782, 15.950601459, 15.9506242394, 15.9506470194, 15.9506697991, 15.9506925785, 15.9507153574, 15.950738136, 15.9507609143, 15.9507836922, 15.9508064697, 15.9508292469, 15.9508520237, 15.9508748002, 15.9508975763, 15.950920352, 15.9509431274, 15.9509659024, 15.9509886771, 15.9510114514, 15.9510342253, 15.9510569989, 15.9510797721, 15.951102545, 15.9511253175, 15.9511480896, 15.9511708614, 15.9511936329, 15.9512164039, 15.9512391746, 15.951261945, 15.951284715, 15.9513074846, 15.9513302539, 15.9513530228, 15.9513757913, 15.9513985595, 15.9514213273, 15.9514440948, 15.9514668619, 15.9514896287, 15.9515123951, 15.9515351611, 15.9515579268, 15.9515806921, 15.9516034571, 15.9516262217, 15.9516489859, 15.9516717498, 15.9516945133, 15.9517172765, 15.9517400393, 15.9517628017, 15.9517855638, 15.9518083255, 15.9518310869, 15.9518538479, 15.9518766085, 15.9518993688, 15.9519221288, 15.9519448883, 15.9519676475, 15.9519904064, 15.9520131649, 15.952035923, 15.9520586808, 15.9520814382, 15.9521041953, 15.952126952, 15.9521497083, 15.9521724643, 15.9521952199, 15.9522179752, 15.9522407301, 15.9522634846, 15.9522862388, 15.9523089926, 15.9523317461, 15.9523544992, 15.952377252, 15.9524000044, 15.9524227564, 15.9524455081, 15.9524682594, 15.9524910103, 15.9525137609, 15.9525365112, 15.9525592611, 15.9525820106, 15.9526047597, 15.9526275085, 15.952650257, 15.9526730051, 15.9526957528, 15.9527185002, 15.9527412472, 15.9527639938, 15.9527867401, 15.9528094861, 15.9528322316, 15.9528549769, 15.9528777217, 15.9529004662, 15.9529232104, 15.9529459541, 15.9529686976, 15.9529914406, 15.9530141833, 15.9530369257, 15.9530596677, 15.9530824093, 15.9531051506, 15.9531278915, 15.9531506321, 15.9531733723, 15.9531961121, 15.9532188516, 15.9532415907, 15.9532643295, 15.9532870679, 15.9533098059, 15.9533325436, 15.9533552809, 15.9533780179, 15.9534007545, 15.9534234908, 15.9534462267, 15.9534689622, 15.9534916974, 15.9535144322, 15.9535371667, 15.9535599008, 15.9535826346, 15.9536053679, 15.953628101, 15.9536508336, 15.953673566, 15.9536962979, 15.9537190295, 15.9537417608, 15.9537644916, 15.9537872222, 15.9538099523, 15.9538326821, 15.9538554116, 15.9538781407, 15.9539008694, 15.9539235978, 15.9539463258, 15.9539690535, 15.9539917808, 15.9540145077, 15.9540372343, 15.9540599605, 15.9540826864, 15.9541054119, 15.9541281371, 15.9541508619, 15.9541735863, 15.9541963104, 15.9542190341, 15.9542417575, 15.9542644805, 15.9542872031, 15.9543099254, 15.9543326474, 15.9543553689, 15.9543780901, 15.954400811, 15.9544235315, 15.9544462516, 15.9544689714, 15.9544916909, 15.9545144099, 15.9545371286, 15.954559847, 15.954582565, 15.9546052826, 15.9546279999, 15.9546507168, 15.9546734334, 15.9546961496, 15.9547188655, 15.954741581, 15.9547642961, 15.9547870109, 15.9548097253, 15.9548324394, 15.9548551531, 15.9548778664, 15.9549005794, 15.954923292, 15.9549460043, 15.9549687162, 15.9549914278, 15.955014139, 15.9550368498, 15.9550595603, 15.9550822704, 15.9551049802, 15.9551276896, 15.9551503987, 15.9551731074, 15.9551958157, 15.9552185237, 15.9552412313, 15.9552639386, 15.9552866455, 15.9553093521, 15.9553320583, 15.9553547641, 15.9553774696, 15.9554001747, 15.9554228795, 15.9554455839, 15.955468288, 15.9554909917, 15.955513695, 15.955536398, 15.9555591006, 15.9555818029, 15.9556045048, 15.9556272063, 15.9556499075, 15.9556726084, 15.9556953088, 15.955718009, 15.9557407087, 15.9557634081, 15.9557861072, 15.9558088059, 15.9558315042, 15.9558542022, 15.9558768998, 15.9558995971, 15.955922294, 15.9559449906, 15.9559676868, 15.9559903826, 15.9560130781, 15.9560357732, 15.956058468, 15.9560811624, 15.9561038564, 15.9561265501, 15.9561492435, 15.9561719365, 15.9561946291, 15.9562173214, 15.9562400133, 15.9562627048, 15.956285396, 15.9563080869, 15.9563307774, 15.9563534675, 15.9563761572, 15.9563988467, 15.9564215357, 15.9564442244, 15.9564669128, 15.9564896008, 15.9565122884, 15.9565349757, 15.9565576626, 15.9565803491, 15.9566030353, 15.9566257212, 15.9566484067, 15.9566710918, 15.9566937766, 15.956716461, 15.9567391451, 15.9567618288, 15.9567845121, 15.9568071951, 15.9568298777, 15.95685256, 15.9568752419, 15.9568979235, 15.9569206047, 15.9569432856, 15.9569659661, 15.9569886462, 15.957011326, 15.9570340054, 15.9570566845, 15.9570793632, 15.9571020416, 15.9571247196, 15.9571473972, 15.9571700745, 15.9571927514, 15.957215428, 15.9572381042, 15.9572607801, 15.9572834556, 15.9573061307, 15.9573288055, 15.95735148, 15.957374154, 15.9573968278, 15.9574195011, 15.9574421742, 15.9574648468, 15.9574875191, 15.957510191, 15.9575328626, 15.9575555339, 15.9575782047, 15.9576008753, 15.9576235454, 15.9576462152, 15.9576688847, 15.9576915538, 15.9577142225, 15.9577368909, 15.9577595589, 15.9577822266, 15.9578048939, 15.9578275608, 15.9578502274, 15.9578728937, 15.9578955596, 15.9579182251, 15.9579408903, 15.9579635551, 15.9579862196, 15.9580088837, 15.9580315474, 15.9580542108, 15.9580768738, 15.9580995365, 15.9581221988, 15.9581448608, 15.9581675224, 15.9581901837, 15.9582128446, 15.9582355051, 15.9582581653, 15.9582808252, 15.9583034846, 15.9583261438, 15.9583488025, 15.9583714609, 15.958394119, 15.9584167767, 15.958439434, 15.958462091, 15.9584847477, 15.9585074039, 15.9585300599, 15.9585527154, 15.9585753706, 15.9585980255, 15.95862068, 15.9586433341, 15.9586659879, 15.9586886413, 15.9587112944, 15.9587339471, 15.9587565995, 15.9587792515, 15.9588019032, 15.9588245545, 15.9588472054, 15.958869856, 15.9588925062, 15.9589151561, 15.9589378056, 15.9589604548, 15.9589831036, 15.959005752, 15.9590284001, 15.9590510479, 15.9590736953, 15.9590963423, 15.959118989, 15.9591416353, 15.9591642812, 15.9591869268, 15.9592095721, 15.959232217, 15.9592548615, 15.9592775057, 15.9593001496, 15.959322793, 15.9593454361, 15.9593680789, 15.9593907213, 15.9594133634, 15.9594360051, 15.9594586464, 15.9594812874, 15.959503928, 15.9595265683, 15.9595492082, 15.9595718478, 15.959594487, 15.9596171259, 15.9596397644, 15.9596624025, 15.9596850403, 15.9597076777, 15.9597303148, 15.9597529515, 15.9597755879, 15.9597982239, 15.9598208596, 15.9598434949, 15.9598661298, 15.9598887644, 15.9599113987, 15.9599340325, 15.9599566661, 15.9599792992, 15.9600019321, 15.9600245645, 15.9600471966, 15.9600698284, 15.9600924598, 15.9601150908, 15.9601377215, 15.9601603519, 15.9601829818, 15.9602056115, 15.9602282407, 15.9602508696, 15.9602734982, 15.9602961264, 15.9603187542, 15.9603413817, 15.9603640089, 15.9603866357, 15.9604092621, 15.9604318882, 15.9604545139, 15.9604771392, 15.9604997643, 15.9605223889, 15.9605450132, 15.9605676372, 15.9605902607, 15.960612884, 15.9606355069, 15.9606581294, 15.9606807516, 15.9607033734, 15.9607259948, 15.9607486159, 15.9607712367, 15.9607938571, 15.9608164771, 15.9608390968, 15.9608617162, 15.9608843351, 15.9609069538, 15.960929572, 15.96095219, 15.9609748075, 15.9609974247, 15.9610200416, 15.9610426581, 15.9610652742, 15.96108789, 15.9611105054, 15.9611331205, 15.9611557352, 15.9611783496, 15.9612009636, 15.9612235773, 15.9612461906, 15.9612688035, 15.9612914161, 15.9613140284, 15.9613366403, 15.9613592518, 15.961381863, 15.9614044738, 15.9614270843, 15.9614496944, 15.9614723042, 15.9614949136, 15.9615175226, 15.9615401313, 15.9615627397, 15.9615853477, 15.9616079553, 15.9616305626, 15.9616531695, 15.9616757761, 15.9616983823, 15.9617209882, 15.9617435937, 15.9617661988, 15.9617888036, 15.9618114081, 15.9618340122, 15.9618566159, 15.9618792193, 15.9619018223, 15.961924425, 15.9619470273, 15.9619696293, 15.9619922309, 15.9620148322, 15.9620374331, 15.9620600337, 15.9620826339, 15.9621052337, 15.9621278332, 15.9621504323, 15.9621730311, 15.9621956295, 15.9622182276, 15.9622408253, 15.9622634227, 15.9622860197, 15.9623086164, 15.9623312127, 15.9623538086, 15.9623764042, 15.9623989995, 15.9624215944, 15.9624441889, 15.9624667831, 15.9624893769, 15.9625119704, 15.9625345635, 15.9625571563, 15.9625797487, 15.9626023408, 15.9626249325, 15.9626475238, 15.9626701148, 15.9626927055, 15.9627152957, 15.9627378857, 15.9627604753, 15.9627830645, 15.9628056534, 15.9628282419, 15.9628508301, 15.9628734179, 15.9628960053, 15.9629185924, 15.9629411792, 15.9629637656, 15.9629863516, 15.9630089373, 15.9630315227, 15.9630541077, 15.9630766923, 15.9630992766, 15.9631218605, 15.9631444441, 15.9631670273, 15.9631896102, 15.9632121927, 15.9632347748, 15.9632573566, 15.9632799381, 15.9633025192, 15.9633250999, 15.9633476803, 15.9633702604, 15.96339284, 15.9634154194, 15.9634379983, 15.963460577, 15.9634831552, 15.9635057332, 15.9635283107, 15.9635508879, 15.9635734648, 15.9635960413, 15.9636186174, 15.9636411932, 15.9636637687, 15.9636863438, 15.9637089185, 15.9637314929, 15.9637540669, 15.9637766406, 15.9637992139, 15.9638217869, 15.9638443595, 15.9638669318, 15.9638895037, 15.9639120753, 15.9639346465, 15.9639572173, 15.9639797878, 15.964002358, 15.9640249278, 15.9640474972, 15.9640700663, 15.964092635, 15.9641152034, 15.9641377714, 15.9641603391, 15.9641829064, 15.9642054734, 15.96422804, 15.9642506063, 15.9642731722, 15.9642957377, 15.9643183029, 15.9643408678, 15.9643634323, 15.9643859964, 15.9644085602, 15.9644311237, 15.9644536868, 15.9644762495, 15.9644988119, 15.9645213739, 15.9645439356, 15.9645664969, 15.9645890579, 15.9646116185, 15.9646341787, 15.9646567387, 15.9646792982, 15.9647018574, 15.9647244163, 15.9647469748, 15.9647695329, 15.9647920907, 15.9648146482, 15.9648372052, 15.964859762, 15.9648823184, 15.9649048744, 15.9649274301, 15.9649499854, 15.9649725404, 15.964995095, 15.9650176493, 15.9650402032, 15.9650627567, 15.96508531, 15.9651078628, 15.9651304153, 15.9651529675, 15.9651755193, 15.9651980707, 15.9652206218, 15.9652431726, 15.9652657229, 15.965288273, 15.9653108227, 15.965333372, 15.965355921, 15.9653784696, 15.9654010179, 15.9654235658, 15.9654461134, 15.9654686606, 15.9654912075, 15.965513754, 15.9655363001, 15.9655588459, 15.9655813914, 15.9656039365, 15.9656264813, 15.9656490257, 15.9656715697, 15.9656941134, 15.9657166567, 15.9657391997, 15.9657617424, 15.9657842847, 15.9658068266, 15.9658293682, 15.9658519094, 15.9658744503, 15.9658969908, 15.965919531, 15.9659420708, 15.9659646103, 15.9659871494, 15.9660096882, 15.9660322266, 15.9660547646, 15.9660773023, 15.9660998397, 15.9661223767, 15.9661449133, 15.9661674496, 15.9661899856, 15.9662125212, 15.9662350564, 15.9662575913, 15.9662801259, 15.9663026601, 15.9663251939, 15.9663477274, 15.9663702605, 15.9663927933, 15.9664153257, 15.9664378578, 15.9664603895, 15.9664829209, 15.9665054519, 15.9665279826, 15.9665505129, 15.9665730429, 15.9665955725, 15.9666181017, 15.9666406306, 15.9666631592, 15.9666856874, 15.9667082153, 15.9667307428, 15.9667532699, 15.9667757967, 15.9667983232, 15.9668208493, 15.966843375, 15.9668659004, 15.9668884254, 15.9669109501, 15.9669334745, 15.9669559984, 15.9669785221, 15.9670010454, 15.9670235683, 15.9670460909, 15.9670686131, 15.967091135, 15.9671136565, 15.9671361777, 15.9671586985, 15.967181219, 15.9672037391, 15.9672262588, 15.9672487783, 15.9672712973, 15.967293816, 15.9673163344, 15.9673388524, 15.9673613701, 15.9673838874, 15.9674064043, 15.9674289209, 15.9674514372, 15.9674739531, 15.9674964686, 15.9675189838, 15.9675414987, 15.9675640132, 15.9675865273, 15.9676090411, 15.9676315545, 15.9676540676, 15.9676765804, 15.9676990927, 15.9677216048, 15.9677441165, 15.9677666278, 15.9677891388, 15.9678116494, 15.9678341597, 15.9678566696, 15.9678791792, 15.9679016884, 15.9679241973, 15.9679467058, 15.967969214, 15.9679917218, 15.9680142293, 15.9680367364, 15.9680592432, 15.9680817496, 15.9681042556, 15.9681267614, 15.9681492667, 15.9681717717, 15.9681942764, 15.9682167807, 15.9682392847, 15.9682617883, 15.9682842915, 15.9683067944, 15.968329297, 15.9683517992, 15.968374301, 15.9683968025, 15.9684193037, 15.9684418045, 15.9684643049, 15.968486805, 15.9685093048, 15.9685318042, 15.9685543032, 15.9685768019, 15.9685993003, 15.9686217983, 15.9686442959, 15.9686667932, 15.9686892901, 15.9687117867, 15.968734283, 15.9687567789, 15.9687792744, 15.9688017696, 15.9688242644, 15.9688467589, 15.968869253, 15.9688917468, 15.9689142402, 15.9689367333, 15.9689592261, 15.9689817184, 15.9690042105, 15.9690267022, 15.9690491935, 15.9690716845, 15.9690941751, 15.9691166654, 15.9691391553, 15.9691616449, 15.9691841341, 15.969206623, 15.9692291115, 15.9692515997, 15.9692740875, 15.969296575, 15.9693190621, 15.9693415489, 15.9693640353, 15.9693865213, 15.9694090071, 15.9694314924, 15.9694539775, 15.9694764621, 15.9694989464, 15.9695214304, 15.969543914, 15.9695663973, 15.9695888802, 15.9696113628, 15.969633845, 15.9696563269, 15.9696788084, 15.9697012895, 15.9697237704, 15.9697462508, 15.9697687309, 15.9697912107, 15.9698136901, 15.9698361692, 15.9698586479, 15.9698811262, 15.9699036043, 15.9699260819, 15.9699485592, 15.9699710362, 15.9699935128, 15.9700159891, 15.970038465, 15.9700609405, 15.9700834158, 15.9701058906, 15.9701283651, 15.9701508393, 15.9701733131, 15.9701957866, 15.9702182597, 15.9702407324, 15.9702632048, 15.9702856769, 15.9703081486, 15.97033062, 15.970353091, 15.9703755616, 15.9703980319, 15.9704205019, 15.9704429715, 15.9704654408, 15.9704879097, 15.9705103783, 15.9705328465, 15.9705553143, 15.9705777818, 15.970600249, 15.9706227158, 15.9706451823, 15.9706676484, 15.9706901141, 15.9707125796, 15.9707350446, 15.9707575093, 15.9707799737, 15.9708024377, 15.9708249014, 15.9708473647, 15.9708698276, 15.9708922903, 15.9709147525, 15.9709372144, 15.970959676, 15.9709821372, 15.9710045981, 15.9710270586, 15.9710495188, 15.9710719786, 15.971094438, 15.9711168972, 15.9711393559, 15.9711618143, 15.9711842724, 15.9712067301, 15.9712291875, 15.9712516445, 15.9712741012, 15.9712965575, 15.9713190135, 15.9713414691, 15.9713639244, 15.9713863793, 15.9714088339, 15.9714312881, 15.971453742, 15.9714761955, 15.9714986487, 15.9715211015, 15.971543554, 15.9715660061, 15.9715884579, 15.9716109093, 15.9716333604, 15.9716558111, 15.9716782615, 15.9717007115, 15.9717231612, 15.9717456105, 15.9717680595, 15.9717905081, 15.9718129564, 15.9718354043, 15.9718578519, 15.9718802992, 15.971902746, 15.9719251926, 15.9719476388, 15.9719700846, 15.9719925301, 15.9720149752, 15.97203742, 15.9720598645, 15.9720823086, 15.9721047523, 15.9721271957, 15.9721496387, 15.9721720814, 15.9721945238, 15.9722169658, 15.9722394074, 15.9722618487, 15.9722842897, 15.9723067303, 15.9723291705, 15.9723516104, 15.97237405, 15.9723964892, 15.9724189281, 15.9724413666, 15.9724638047, 15.9724862425, 15.97250868, 15.9725311171, 15.9725535539, 15.9725759903, 15.9725984263, 15.9726208621, 15.9726432974, 15.9726657324, 15.9726881671, 15.9727106014, 15.9727330354, 15.972755469, 15.9727779023, 15.9728003352, 15.9728227678, 15.9728452, 15.9728676319, 15.9728900634, 15.9729124946, 15.9729349254, 15.9729573559, 15.9729797861, 15.9730022159, 15.9730246453, 15.9730470744, 15.9730695031, 15.9730919315, 15.9731143596, 15.9731367872, 15.9731592146, 15.9731816416, 15.9732040682, 15.9732264945, 15.9732489205, 15.9732713461, 15.9732937713, 15.9733161962, 15.9733386208, 15.973361045, 15.9733834689, 15.9734058924, 15.9734283155, 15.9734507384, 15.9734731608, 15.9734955829, 15.9735180047, 15.9735404261, 15.9735628472, 15.9735852679, 15.9736076883, 15.9736301083, 15.973652528, 15.9736749473, 15.9736973663, 15.9737197849, 15.9737422032, 15.9737646212, 15.9737870387, 15.973809456, 15.9738318729, 15.9738542894, 15.9738767056, 15.9738991215, 15.973921537, 15.9739439521, 15.9739663669, 15.9739887814, 15.9740111955, 15.9740336092, 15.9740560226, 15.9740784357, 15.9741008484, 15.9741232608, 15.9741456728, 15.9741680844, 15.9741904958, 15.9742129067, 15.9742353174, 15.9742577276, 15.9742801376, 15.9743025471, 15.9743249564, 15.9743473652, 15.9743697738, 15.974392182, 15.9744145898, 15.9744369973, 15.9744594044, 15.9744818112, 15.9745042177, 15.9745266238, 15.9745490295, 15.9745714349, 15.97459384, 15.9746162447, 15.974638649, 15.9746610531, 15.9746834567, 15.97470586, 15.974728263, 15.9747506656, 15.9747730679, 15.9747954698, 15.9748178714, 15.9748402726, 15.9748626735, 15.974885074, 15.9749074742, 15.974929874, 15.9749522735, 15.9749746727, 15.9749970715, 15.9750194699, 15.975041868, 15.9750642658, 15.9750866632, 15.9751090602, 15.9751314569, 15.9751538533, 15.9751762493, 15.975198645, 15.9752210403, 15.9752434352, 15.9752658299, 15.9752882241, 15.9753106181, 15.9753330116, 15.9753554049, 15.9753777977, 15.9754001903, 15.9754225825, 15.9754449743, 15.9754673658, 15.9754897569, 15.9755121477, 15.9755345382, 15.9755569283, 15.975579318, 15.9756017075, 15.9756240965, 15.9756464852, 15.9756688736, 15.9756912616, 15.9757136493, 15.9757360366, 15.9757584236, 15.9757808102, 15.9758031965, 15.9758255824, 15.975847968, 15.9758703532, 15.9758927381, 15.9759151227, 15.9759375069, 15.9759598907, 15.9759822742, 15.9760046574, 15.9760270402, 15.9760494226, 15.9760718048, 15.9760941865, 15.9761165679, 15.976138949, 15.9761613297, 15.9761837101, 15.9762060901, 15.9762284698, 15.9762508492, 15.9762732282, 15.9762956068, 15.9763179851, 15.976340363, 15.9763627406, 15.9763851179, 15.9764074948, 15.9764298714, 15.9764522476, 15.9764746234, 15.9764969989, 15.9765193741, 15.9765417489, 15.9765641234, 15.9765864975, 15.9766088713, 15.9766312448, 15.9766536179, 15.9766759906, 15.976698363, 15.976720735, 15.9767431067, 15.9767654781, 15.9767878491, 15.9768102198, 15.9768325901, 15.97685496, 15.9768773297, 15.9768996989, 15.9769220679, 15.9769444364, 15.9769668047, 15.9769891725, 15.9770115401, 15.9770339073, 15.9770562741, 15.9770786406, 15.9771010068, 15.9771233726, 15.977145738, 15.9771681031, 15.9771904679, 15.9772128323, 15.9772351964, 15.9772575601, 15.9772799235, 15.9773022865, 15.9773246492, 15.9773470116, 15.9773693735, 15.9773917352, 15.9774140965, 15.9774364574, 15.977458818, 15.9774811783, 15.9775035382, 15.9775258978, 15.977548257, 15.9775706159, 15.9775929744, 15.9776153326, 15.9776376904, 15.9776600479, 15.977682405, 15.9777047618, 15.9777271183, 15.9777494744, 15.9777718301, 15.9777941855, 15.9778165406, 15.9778388953, 15.9778612497, 15.9778836037, 15.9779059574, 15.9779283107, 15.9779506637, 15.9779730163, 15.9779953686, 15.9780177206, 15.9780400722, 15.9780624234, 15.9780847743, 15.9781071249, 15.9781294751, 15.9781518249, 15.9781741745, 15.9781965236, 15.9782188725, 15.978241221, 15.9782635691, 15.9782859169, 15.9783082643, 15.9783306114, 15.9783529582, 15.9783753046, 15.9783976506, 15.9784199963, 15.9784423417, 15.9784646867, 15.9784870314, 15.9785093757, 15.9785317197, 15.9785540633, 15.9785764066, 15.9785987496, 15.9786210922, 15.9786434344, 15.9786657763, 15.9786881179, 15.9787104591, 15.9787328, 15.9787551405, 15.9787774807, 15.9787998205, 15.97882216, 15.9788444991, 15.9788668379, 15.9788891764, 15.9789115145, 15.9789338522, 15.9789561896, 15.9789785267, 15.9790008634, 15.9790231998, 15.9790455358, 15.9790678715, 15.9790902068, 15.9791125418, 15.9791348764, 15.9791572107, 15.9791795447, 15.9792018783, 15.9792242116, 15.9792465445, 15.979268877, 15.9792912093, 15.9793135411, 15.9793358727, 15.9793582039, 15.9793805347, 15.9794028652, 15.9794251953, 15.9794475251, 15.9794698546, 15.9794921837, 15.9795145125, 15.9795368409, 15.979559169, 15.9795814967, 15.9796038241, 15.9796261511, 15.9796484778, 15.9796708042, 15.9796931302, 15.9797154558, 15.9797377811, 15.9797601061, 15.9797824307, 15.979804755, 15.9798270789, 15.9798494025, 15.9798717257, 15.9798940486, 15.9799163712, 15.9799386934, 15.9799610152, 15.9799833367, 15.9800056579, 15.9800279787, 15.9800502992, 15.9800726193, 15.9800949391, 15.9801172585, 15.9801395776, 15.9801618964, 15.9801842148, 15.9802065328, 15.9802288506, 15.9802511679, 15.9802734849, 15.9802958016, 15.980318118, 15.9803404339, 15.9803627496, 15.9803850649, 15.9804073798, 15.9804296944, 15.9804520087, 15.9804743226, 15.9804966362, 15.9805189494, 15.9805412623, 15.9805635748, 15.980585887, 15.9806081989, 15.9806305104, 15.9806528215, 15.9806751323, 15.9806974428, 15.9807197529, 15.9807420627, 15.9807643721, 15.9807866812, 15.9808089899, 15.9808312983, 15.9808536064, 15.9808759141, 15.9808982214, 15.9809205285, 15.9809428351, 15.9809651415, 15.9809874474, 15.9810097531, 15.9810320584, 15.9810543633, 15.9810766679, 15.9810989722, 15.9811212761, 15.9811435796, 15.9811658829, 15.9811881857, 15.9812104883, 15.9812327905, 15.9812550923, 15.9812773938, 15.981299695, 15.9813219958, 15.9813442962, 15.9813665963, 15.9813888961, 15.9814111955, 15.9814334946, 15.9814557934, 15.9814780918, 15.9815003898, 15.9815226875, 15.9815449849, 15.9815672819, 15.9815895786, 15.9816118749, 15.9816341709, 15.9816564665, 15.9816787618, 15.9817010568, 15.9817233514, 15.9817456456, 15.9817679396, 15.9817902331, 15.9818125263, 15.9818348192, 15.9818571118, 15.981879404, 15.9819016958, 15.9819239873, 15.9819462785, 15.9819685693, 15.9819908598, 15.9820131499, 15.9820354397, 15.9820577291, 15.9820800182, 15.982102307, 15.9821245954, 15.9821468834, 15.9821691711, 15.9821914585, 15.9822137455, 15.9822360322, 15.9822583186, 15.9822806046, 15.9823028902, 15.9823251755, 15.9823474605, 15.9823697451, 15.9823920294, 15.9824143133, 15.9824365969, 15.9824588801, 15.982481163, 15.9825034456, 15.9825257278, 15.9825480097, 15.9825702912, 15.9825925723, 15.9826148532, 15.9826371337, 15.9826594138, 15.9826816936, 15.9827039731, 15.9827262522, 15.982748531, 15.9827708094, 15.9827930875, 15.9828153652, 15.9828376426, 15.9828599196, 15.9828821963, 15.9829044727, 15.9829267487, 15.9829490244, 15.9829712997, 15.9829935747, 15.9830158493, 15.9830381236, 15.9830603976, 15.9830826712, 15.9831049445, 15.9831272174, 15.98314949, 15.9831717622, 15.9831940341, 15.9832163056, 15.9832385768, 15.9832608477, 15.9832831182, 15.9833053884, 15.9833276582, 15.9833499277, 15.9833721968, 15.9833944656, 15.9834167341, 15.9834390022, 15.9834612699, 15.9834835374, 15.9835058044, 15.9835280712, 15.9835503376, 15.9835726036, 15.9835948693, 15.9836171347, 15.9836393997, 15.9836616643, 15.9836839287, 15.9837061927, 15.9837284563, 15.9837507196, 15.9837729826, 15.9837952452, 15.9838175074, 15.9838397693, 15.9838620309, 15.9838842922, 15.9839065531, 15.9839288136, 15.9839510738, 15.9839733337, 15.9839955932, 15.9840178524, 15.9840401112, 15.9840623697, 15.9840846278, 15.9841068856, 15.9841291431, 15.9841514002, 15.984173657, 15.9841959134, 15.9842181695, 15.9842404252, 15.9842626806, 15.9842849357, 15.9843071904, 15.9843294448, 15.9843516988, 15.9843739525, 15.9843962058, 15.9844184588, 15.9844407115, 15.9844629638, 15.9844852157, 15.9845074673, 15.9845297186, 15.9845519696, 15.9845742202, 15.9845964704, 15.9846187203, 15.9846409699, 15.9846632191, 15.984685468, 15.9847077165, 15.9847299647, 15.9847522125, 15.98477446, 15.9847967072, 15.984818954, 15.9848412005, 15.9848634466, 15.9848856924, 15.9849079379, 15.984930183, 15.9849524277, 15.9849746721, 15.9849969162, 15.98501916, 15.9850414033, 15.9850636464, 15.9850858891, 15.9851081315, 15.9851303735, 15.9851526151, 15.9851748565, 15.9851970975, 15.9852193381, 15.9852415784, 15.9852638184, 15.985286058, 15.9853082973, 15.9853305362, 15.9853527748, 15.985375013, 15.9853972509, 15.9854194885, 15.9854417257, 15.9854639626, 15.9854861991, 15.9855084353, 15.9855306711, 15.9855529066, 15.9855751418, 15.9855973766, 15.9856196111, 15.9856418452, 15.985664079, 15.9856863125, 15.9857085456, 15.9857307783, 15.9857530108, 15.9857752428, 15.9857974746, 15.985819706, 15.985841937, 15.9858641677, 15.9858863981, 15.9859086281, 15.9859308578, 15.9859530871, 15.9859753161, 15.9859975448, 15.9860197731, 15.986042001, 15.9860642287, 15.9860864559, 15.9861086829, 15.9861309095, 15.9861531357, 15.9861753616, 15.9861975872, 15.9862198124, 15.9862420373, 15.9862642619, 15.9862864861, 15.9863087099, 15.9863309334, 15.9863531566, 15.9863753794, 15.9863976019, 15.9864198241, 15.9864420459, 15.9864642673, 15.9864864885, 15.9865087092, 15.9865309297, 15.9865531498, 15.9865753695, 15.9865975889, 15.986619808, 15.9866420267, 15.9866642451, 15.9866864631, 15.9867086808, 15.9867308982, 15.9867531152, 15.9867753319, 15.9867975482, 15.9868197642, 15.9868419798, 15.9868641951, 15.9868864101, 15.9869086247, 15.986930839, 15.9869530529, 15.9869752665, 15.9869974797, 15.9870196927, 15.9870419052, 15.9870641174, 15.9870863293, 15.9871085409, 15.9871307521, 15.9871529629, 15.9871751734, 15.9871973836, 15.9872195934, 15.9872418029, 15.9872640121, 15.9872862209, 15.9873084293, 15.9873306375, 15.9873528452, 15.9873750527, 15.9873972598, 15.9874194665, 15.9874416729, 15.987463879, 15.9874860847, 15.9875082901, 15.9875304952, 15.9875526999, 15.9875749042, 15.9875971082, 15.9876193119, 15.9876415153, 15.9876637183, 15.9876859209, 15.9877081232, 15.9877303252, 15.9877525268, 15.9877747281, 15.987796929, 15.9878191296, 15.9878413299, 15.9878635298, 15.9878857294, 15.9879079286, 15.9879301275, 15.9879523261, 15.9879745243, 15.9879967222, 15.9880189197, 15.9880411169, 15.9880633137, 15.9880855102, 15.9881077064, 15.9881299022, 15.9881520977, 15.9881742928, 15.9881964876, 15.9882186821, 15.9882408762, 15.98826307, 15.9882852634, 15.9883074565, 15.9883296492, 15.9883518416, 15.9883740337, 15.9883962254, 15.9884184168, 15.9884406078, 15.9884627985, 15.9884849889, 15.9885071789, 15.9885293686, 15.9885515579, 15.9885737469, 15.9885959356, 15.9886181239, 15.9886403119, 15.9886624995, 15.9886846868, 15.9887068737, 15.9887290603, 15.9887512466, 15.9887734325, 15.9887956181, 15.9888178033, 15.9888399882, 15.9888621728, 15.988884357, 15.9889065409, 15.9889287244, 15.9889509076, 15.9889730905, 15.988995273, 15.9890174551, 15.989039637, 15.9890618184, 15.9890839996, 15.9891061804, 15.9891283609, 15.989150541, 15.9891727208, 15.9891949002, 15.9892170793, 15.9892392581, 15.9892614365, 15.9892836146, 15.9893057923, 15.9893279697, 15.9893501468, 15.9893723235, 15.9893944998, 15.9894166759, 15.9894388516, 15.9894610269, 15.9894832019, 15.9895053766, 15.9895275509, 15.9895497249, 15.9895718986, 15.9895940719, 15.9896162448, 15.9896384175, 15.9896605897, 15.9896827617, 15.9897049333, 15.9897271045, 15.9897492755, 15.989771446, 15.9897936163, 15.9898157862, 15.9898379557, 15.989860125, 15.9898822938, 15.9899044624, 15.9899266306, 15.9899487984, 15.9899709659, 15.9899931331, 15.9900152999, 15.9900374664, 15.9900596326, 15.9900817984, 15.9901039639, 15.990126129, 15.9901482938, 15.9901704582, 15.9901926223, 15.9902147861, 15.9902369495, 15.9902591126, 15.9902812754, 15.9903034378, 15.9903255998, 15.9903477616, 15.9903699229, 15.990392084, 15.9904142447, 15.9904364051, 15.9904585651, 15.9904807248, 15.9905028841, 15.9905250431, 15.9905472018, 15.9905693601, 15.9905915181, 15.9906136757, 15.990635833, 15.99065799, 15.9906801466, 15.9907023029, 15.9907244588, 15.9907466144, 15.9907687697, 15.9907909246, 15.9908130792, 15.9908352334, 15.9908573873, 15.9908795408, 15.9909016941, 15.9909238469, 15.9909459995, 15.9909681517, 15.9909903035, 15.991012455, 15.9910346062, 15.9910567571, 15.9910789076, 15.9911010577, 15.9911232075, 15.991145357, 15.9911675061, 15.9911896549, 15.9912118034, 15.9912339515, 15.9912560993, 15.9912782467, 15.9913003938, 15.9913225406, 15.991344687, 15.9913668331, 15.9913889788, 15.9914111242, 15.9914332693, 15.991455414, 15.9914775583, 15.9914997024, 15.9915218461, 15.9915439894, 15.9915661324, 15.9915882751, 15.9916104175, 15.9916325595, 15.9916547011, 15.9916768424, 15.9916989834, 15.9917211241, 15.9917432643, 15.9917654043, 15.9917875439, 15.9918096832, 15.9918318221, 15.9918539607, 15.991876099, 15.9918982369, 15.9919203745, 15.9919425117, 15.9919646486, 15.9919867852, 15.9920089214, 15.9920310573, 15.9920531929, 15.9920753281, 15.9920974629, 15.9921195974, 15.9921417316, 15.9921638655, 15.992185999, 15.9922081321, 15.992230265, 15.9922523975, 15.9922745296, 15.9922966614, 15.9923187929, 15.992340924, 15.9923630548, 15.9923851852, 15.9924073153, 15.9924294451, 15.9924515745, 15.9924737036, 15.9924958324, 15.9925179608, 15.9925400889, 15.9925622166, 15.992584344, 15.9926064711, 15.9926285978, 15.9926507242, 15.9926728502, 15.9926949759, 15.9927171012, 15.9927392263, 15.9927613509, 15.9927834753, 15.9928055993, 15.9928277229, 15.9928498463, 15.9928719693, 15.9928940919, 15.9929162142, 15.9929383362, 15.9929604578, 15.9929825791, 15.9930047, 15.9930268206, 15.9930489409, 15.9930710608, 15.9930931804, 15.9931152997, 15.9931374186, 15.9931595372, 15.9931816554, 15.9932037733, 15.9932258909, 15.9932480081, 15.9932701249, 15.9932922415, 15.9933143577, 15.9933364736, 15.9933585891, 15.9933807043, 15.9934028191, 15.9934249336, 15.9934470478, 15.9934691616, 15.9934912751, 15.9935133882, 15.993535501, 15.9935576135, 15.9935797257, 15.9936018374, 15.9936239489, 15.99364606, 15.9936681708, 15.9936902812, 15.9937123913, 15.9937345011, 15.9937566105, 15.9937787196, 15.9938008283, 15.9938229367, 15.9938450448, 15.9938671525, 15.9938892599, 15.993911367, 15.9939334737, 15.9939555801, 15.9939776861, 15.9939997918, 15.9940218971, 15.9940440022, 15.9940661068, 15.9940882112, 15.9941103152, 15.9941324189, 15.9941545222, 15.9941766252, 15.9941987278, 15.9942208301, 15.9942429321, 15.9942650337, 15.994287135, 15.994309236, 15.9943313366, 15.9943534369, 15.9943755368, 15.9943976364, 15.9944197357, 15.9944418346, 15.9944639332, 15.9944860314, 15.9945081293, 15.9945302269, 15.9945523241, 15.994574421, 15.9945965176, 15.9946186138, 15.9946407097, 15.9946628052, 15.9946849004, 15.9947069953, 15.9947290898, 15.994751184, 15.9947732778, 15.9947953713, 15.9948174645, 15.9948395573, 15.9948616498, 15.994883742, 15.9949058338, 15.9949279253, 15.9949500164, 15.9949721072, 15.9949941977, 15.9950162878, 15.9950383776, 15.995060467, 15.9950825561, 15.9951046449, 15.9951267334, 15.9951488214, 15.9951709092, 15.9951929966, 15.9952150837, 15.9952371704, 15.9952592569, 15.9952813429, 15.9953034287, 15.995325514, 15.9953475991, 15.9953696838, 15.9953917682, 15.9954138522, 15.9954359359, 15.9954580193, 15.9954801023, 15.995502185, 15.9955242673, 15.9955463494, 15.995568431, 15.9955905124, 15.9956125934, 15.995634674, 15.9956567543, 15.9956788343, 15.995700914, 15.9957229933, 15.9957450722, 15.9957671509, 15.9957892292, 15.9958113071, 15.9958333847, 15.995855462, 15.995877539, 15.9958996156, 15.9959216918, 15.9959437678, 15.9959658434, 15.9959879186, 15.9960099935, 15.9960320681, 15.9960541423, 15.9960762162, 15.9960982898, 15.996120363, 15.9961424359, 15.9961645085, 15.9961865807, 15.9962086526, 15.9962307241, 15.9962527953, 15.9962748662, 15.9962969367, 15.9963190069, 15.9963410767, 15.9963631462, 15.9963852154, 15.9964072842, 15.9964293527, 15.9964514209, 15.9964734887, 15.9964955562, 15.9965176234, 15.9965396902, 15.9965617567, 15.9965838228, 15.9966058886, 15.9966279541, 15.9966500192, 15.996672084, 15.9966941484, 15.9967162125, 15.9967382763, 15.9967603397, 15.9967824028, 15.9968044656, 15.996826528, 15.9968485901, 15.9968706519, 15.9968927133, 15.9969147743, 15.9969368351, 15.9969588955, 15.9969809555, 15.9970030153, 15.9970250747, 15.9970471337, 15.9970691924, 15.9970912508, 15.9971133088, 15.9971353665, 15.9971574239, 15.9971794809, 15.9972015376, 15.997223594, 15.99724565, 15.9972677057, 15.997289761, 15.997311816, 15.9973338707, 15.997355925, 15.997377979, 15.9974000327, 15.997422086, 15.997444139, 15.9974661916, 15.9974882439, 15.9975102959, 15.9975323475, 15.9975543988, 15.9975764498, 15.9975985004, 15.9976205507, 15.9976426006, 15.9976646502, 15.9976866995, 15.9977087485, 15.9977307971, 15.9977528453, 15.9977748933, 15.9977969408, 15.9978189881, 15.997841035, 15.9978630816, 15.9978851278, 15.9979071737, 15.9979292193, 15.9979512645, 15.9979733094, 15.997995354, 15.9980173982, 15.9980394421, 15.9980614856, 15.9980835288, 15.9981055717, 15.9981276143, 15.9981496565, 15.9981716983, 15.9981937398, 15.998215781, 15.9982378219, 15.9982598624, 15.9982819026, 15.9983039424, 15.9983259819, 15.9983480211, 15.9983700599, 15.9983920984, 15.9984141366, 15.9984361744, 15.9984582119, 15.998480249, 15.9985022859, 15.9985243223, 15.9985463585, 15.9985683943, 15.9985904297, 15.9986124649, 15.9986344997, 15.9986565341, 15.9986785682, 15.998700602, 15.9987226355, 15.9987446686, 15.9987667014, 15.9987887338, 15.9988107659, 15.9988327977, 15.9988548291, 15.9988768602, 15.9988988909, 15.9989209214, 15.9989429514, 15.9989649812, 15.9989870106, 15.9990090397, 15.9990310684, 15.9990530968, 15.9990751249, 15.9990971526, 15.99911918, 15.9991412071, 15.9991632338, 15.9991852602, 15.9992072862, 15.9992293119, 15.9992513373, 15.9992733623, 15.999295387, 15.9993174114, 15.9993394354, 15.9993614591, 15.9993834825, 15.9994055055, 15.9994275282, 15.9994495505, 15.9994715725, 15.9994935942, 15.9995156155, 15.9995376366, 15.9995596572, 15.9995816776, 15.9996036975, 15.9996257172, 15.9996477365, 15.9996697555, 15.9996917742, 15.9997137925, 15.9997358105, 15.9997578281, 15.9997798454, 15.9998018624, 15.999823879, 15.9998458953, 15.9998679113, 15.9998899269, 15.9999119422, 15.9999339572, 15.9999559718, 15.9999779861, ]; brotli-8.0.2/src/enc/log_table_8.rs000064400000000000000000000141471046102023000152160ustar 00000000000000use crate::enc::floatX; #[allow(clippy::excessive_precision)] pub static logs_8: [floatX; 256] = [ 0.0000000000000000, 0.0000000000000000, 1.0000000000000000, 1.5849625007211563, 2.0000000000000000, 2.3219280948873622, 2.5849625007211561, 2.8073549220576042, 3.0000000000000000, 3.1699250014423126, 3.3219280948873626, 3.4594316186372978, 3.5849625007211565, 3.7004397181410922, 3.8073549220576037, 3.9068905956085187, 4.0000000000000000, 4.0874628412503400, 4.1699250014423122, 4.2479275134435852, 4.3219280948873626, 4.3923174227787607, 4.4594316186372973, 4.5235619560570131, 4.5849625007211570, 4.6438561897747244, 4.7004397181410926, 4.7548875021634691, 4.8073549220576037, 4.8579809951275728, 4.9068905956085187, 4.9541963103868758, 5.0000000000000000, 5.0443941193584534, 5.0874628412503400, 5.1292830169449664, 5.1699250014423122, 5.2094533656289501, 5.2479275134435852, 5.2854022188622487, 5.3219280948873626, 5.3575520046180838, 5.3923174227787607, 5.4262647547020979, 5.4594316186372973, 5.4918530963296748, 5.5235619560570131, 5.5545888516776376, 5.5849625007211570, 5.6147098441152083, 5.6438561897747244, 5.6724253419714961, 5.7004397181410926, 5.7279204545631996, 5.7548875021634691, 5.7813597135246599, 5.8073549220576046, 5.8328900141647422, 5.8579809951275719, 5.8826430493618416, 5.9068905956085187, 5.9307373375628867, 5.9541963103868758, 5.9772799234999168, 6.0000000000000000, 6.0223678130284544, 6.0443941193584534, 6.0660891904577721, 6.0874628412503400, 6.1085244567781700, 6.1292830169449672, 6.1497471195046822, 6.1699250014423122, 6.1898245588800176, 6.2094533656289510, 6.2288186904958804, 6.2479275134435861, 6.2667865406949019, 6.2854022188622487, 6.3037807481771031, 6.3219280948873617, 6.3398500028846252, 6.3575520046180847, 6.3750394313469254, 6.3923174227787598, 6.4093909361377026, 6.4262647547020979, 6.4429434958487288, 6.4594316186372982, 6.4757334309663976, 6.4918530963296748, 6.5077946401986964, 6.5235619560570131, 6.5391588111080319, 6.5545888516776376, 6.5698556083309478, 6.5849625007211561, 6.5999128421871278, 6.6147098441152092, 6.6293566200796095, 6.6438561897747253, 6.6582114827517955, 6.6724253419714952, 6.6865005271832185, 6.7004397181410917, 6.7142455176661224, 6.7279204545631988, 6.7414669864011465, 6.7548875021634691, 6.7681843247769260, 6.7813597135246599, 6.7944158663501062, 6.8073549220576037, 6.8201789624151887, 6.8328900141647422, 6.8454900509443757, 6.8579809951275719, 6.8703647195834048, 6.8826430493618416, 6.8948177633079437, 6.9068905956085187, 6.9188632372745955, 6.9307373375628867, 6.9425145053392399, 6.9541963103868758, 6.9657842846620879, 6.9772799234999168, 6.9886846867721664, 7.0000000000000000, 7.0112272554232540, 7.0223678130284544, 7.0334230015374501, 7.0443941193584534, 7.0552824355011898, 7.0660891904577721, 7.0768155970508317, 7.0874628412503400, 7.0980320829605272, 7.1085244567781700, 7.1189410727235076, 7.1292830169449664, 7.1395513523987937, 7.1497471195046822, 7.1598713367783891, 7.1699250014423130, 7.1799090900149345, 7.1898245588800176, 7.1996723448363644, 7.2094533656289492, 7.2191685204621621, 7.2288186904958804, 7.2384047393250794, 7.2479275134435861, 7.2573878426926521, 7.2667865406949019, 7.2761244052742384, 7.2854022188622487, 7.2946207488916270, 7.3037807481771031, 7.3128829552843557, 7.3219280948873617, 7.3309168781146177, 7.3398500028846243, 7.3487281542310781, 7.3575520046180847, 7.3663222142458151, 7.3750394313469254, 7.3837042924740528, 7.3923174227787607, 7.4008794362821844, 7.4093909361377026, 7.4178525148858991, 7.4262647547020979, 7.4346282276367255, 7.4429434958487288, 7.4512111118323299, 7.4594316186372973, 7.4676055500829976, 7.4757334309663976, 7.4838157772642564, 7.4918530963296748, 7.4998458870832057, 7.5077946401986964, 7.5156998382840436, 7.5235619560570131, 7.5313814605163119, 7.5391588111080319, 7.5468944598876373, 7.5545888516776376, 7.5622424242210728, 7.5698556083309478, 7.5774288280357487, 7.5849625007211561, 7.5924570372680806, 7.5999128421871278, 7.6073303137496113, 7.6147098441152075, 7.6220518194563764, 7.6293566200796095, 7.6366246205436488, 7.6438561897747244, 7.6510516911789290, 7.6582114827517955, 7.6653359171851765, 7.6724253419714952, 7.6794800995054464, 7.6865005271832185, 7.6934869574993252, 7.7004397181410926, 7.7073591320808825, 7.7142455176661224, 7.7210991887071856, 7.7279204545631996, 7.7347096202258392, 7.7414669864011465, 7.7481928495894596, 7.7548875021634691, 7.7615512324444795, 7.7681843247769260, 7.7747870596011737, 7.7813597135246608, 7.7879025593914317, 7.7944158663501062, 7.8008998999203047, 7.8073549220576037, 7.8137811912170374, 7.8201789624151887, 7.8265484872909159, 7.8328900141647422, 7.8392037880969445, 7.8454900509443757, 7.8517490414160571, 7.8579809951275719, 7.8641861446542798, 7.8703647195834048, 7.8765169465650002, 7.8826430493618425, 7.8887432488982601, 7.8948177633079446, 7.9008668079807496, 7.9068905956085187, 7.9128893362299619, 7.9188632372745955, 7.9248125036057813, 7.9307373375628867, 7.9366379390025719, 7.9425145053392399, 7.9483672315846778, 7.9541963103868758, 7.9600019320680806, 7.9657842846620870, 7.9715435539507720, 7.9772799234999168, 7.9829935746943104, 7.9886846867721664, 7.9943534368588578, ]; brotli-8.0.2/src/enc/metablock.rs000064400000000000000000001222161046102023000147750ustar 00000000000000use core; use core::cmp::{max, min}; use super::super::alloc; use super::super::alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use super::backward_references::BrotliEncoderParams; use super::bit_cost::{BitsEntropy, BrotliPopulationCost}; use super::block_split::BlockSplit; use super::block_splitter::BrotliSplitBlock; use super::brotli_bit_stream::MetaBlockSplit; use super::cluster::BrotliClusterHistograms; use super::combined_alloc::BrotliAlloc; use super::command::{BrotliDistanceParams, Command, PrefixEncodeCopyDistance}; use super::constants::BROTLI_MAX_NPOSTFIX; use super::encode::{ BROTLI_DISTANCE_ALPHABET_SIZE, BROTLI_LARGE_MAX_DISTANCE_BITS, BROTLI_MAX_ALLOWED_DISTANCE, BROTLI_MAX_DISTANCE_BITS, }; use super::entropy_encode::BrotliOptimizeHuffmanCountsForRle; use super::histogram::{ BrotliBuildHistogramsWithContext, ClearHistograms, Context, ContextType, CostAccessors, HistogramAddHistogram, HistogramAddItem, HistogramClear, HistogramCommand, HistogramDistance, HistogramLiteral, }; use crate::enc::combined_alloc::{alloc_default, allocate}; use crate::enc::floatX; pub fn BrotliInitDistanceParams(params: &mut BrotliEncoderParams, npostfix: u32, ndirect: u32) { let dist_params = &mut params.dist; let mut alphabet_size; let mut max_distance; dist_params.distance_postfix_bits = npostfix; dist_params.num_direct_distance_codes = ndirect; alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS); max_distance = ndirect + (1u32 << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) - (1u32 << (npostfix + 2)); if (params.large_window) { let bound: [u32; BROTLI_MAX_NPOSTFIX + 1] = [0, 4, 12, 28]; let postfix = 1u32 << npostfix; alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS); /* The maximum distance is set so that no distance symbol used can encode a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all its extra bits set. */ if (ndirect < bound[npostfix as usize]) { max_distance = BROTLI_MAX_ALLOWED_DISTANCE as u32 - (bound[npostfix as usize] - ndirect); } else if (ndirect >= bound[npostfix as usize] + postfix) { max_distance = (3u32 << 29) - 4 + (ndirect - bound[npostfix as usize]); } else { max_distance = BROTLI_MAX_ALLOWED_DISTANCE as u32; } } dist_params.alphabet_size = alphabet_size; dist_params.max_distance = max_distance as usize; } fn RecomputeDistancePrefixes( cmds: &mut [Command], num_commands: usize, orig_params: &BrotliDistanceParams, new_params: &BrotliDistanceParams, ) { if orig_params.distance_postfix_bits == new_params.distance_postfix_bits && orig_params.num_direct_distance_codes == new_params.num_direct_distance_codes { return; } for cmd in cmds.split_at_mut(num_commands).0.iter_mut() { if (cmd.copy_len() != 0 && cmd.cmd_prefix_ >= 128) { let ret = cmd.restore_distance_code(orig_params); PrefixEncodeCopyDistance( ret as usize, new_params.num_direct_distance_codes as usize, new_params.distance_postfix_bits as u64, &mut cmd.dist_prefix_, &mut cmd.dist_extra_, ); } } } fn ComputeDistanceCost( cmds: &[Command], num_commands: usize, orig_params: &BrotliDistanceParams, new_params: &BrotliDistanceParams, scratch: &mut ::i32vec, cost: &mut f64, ) -> bool { let mut equal_params = false; let mut dist_prefix: u16 = 0; let mut dist_extra: u32 = 0; let mut extra_bits: f64 = 0.0; let mut histo = HistogramDistance::default(); if (orig_params.distance_postfix_bits == new_params.distance_postfix_bits && orig_params.num_direct_distance_codes == new_params.num_direct_distance_codes) { equal_params = true; } for cmd in cmds.split_at(num_commands).0 { if cmd.copy_len() != 0 && cmd.cmd_prefix_ >= 128 { if equal_params { dist_prefix = cmd.dist_prefix_; } else { let distance = cmd.restore_distance_code(orig_params); if distance > new_params.max_distance as u32 { return false; } PrefixEncodeCopyDistance( distance as usize, new_params.num_direct_distance_codes as usize, new_params.distance_postfix_bits as u64, &mut dist_prefix, &mut dist_extra, ); } HistogramAddItem(&mut histo, (dist_prefix & 0x03ff) as usize); extra_bits += (dist_prefix >> 10) as f64; } } *cost = BrotliPopulationCost(&histo, scratch) as f64 + extra_bits; true } pub fn BrotliBuildMetaBlock( alloc: &mut Alloc, ringbuffer: &[u8], pos: usize, mask: usize, params: &mut BrotliEncoderParams, prev_byte: u8, prev_byte2: u8, cmds: &mut [Command], num_commands: usize, literal_context_mode: ContextType, lit_scratch_space: &mut ::i32vec, cmd_scratch_space: &mut ::i32vec, dst_scratch_space: &mut ::i32vec, mb: &mut MetaBlockSplit, ) { static kMaxNumberOfHistograms: usize = 256usize; let mut distance_histograms: >::AllocatedMemory; let mut literal_histograms: >::AllocatedMemory; let mut literal_context_modes = alloc_default::(); let mut i: usize; let mut literal_context_multiplier: usize = 1; let mut ndirect_msb: u32 = 0; let mut check_orig = true; if !params.avoid_distance_prefix_search { let mut best_dist_cost: f64 = 1e99; let orig_params = params.clone(); let mut new_params = params.clone(); for npostfix in 0..(BROTLI_MAX_NPOSTFIX + 1) { while ndirect_msb < 16 { let ndirect = ndirect_msb << npostfix; let mut dist_cost: f64 = 0.0; BrotliInitDistanceParams(&mut new_params, npostfix as u32, ndirect); if npostfix as u32 == orig_params.dist.distance_postfix_bits && ndirect == orig_params.dist.num_direct_distance_codes { check_orig = false; } let skip: bool = !ComputeDistanceCost( cmds, num_commands, &orig_params.dist, &new_params.dist, dst_scratch_space, &mut dist_cost, ); if skip || (dist_cost > best_dist_cost) { break; } best_dist_cost = dist_cost; params.dist = new_params.dist; ndirect_msb += 1; } ndirect_msb = ndirect_msb.saturating_sub(1); ndirect_msb /= 2; } if check_orig { let mut dist_cost: f64 = 0.0; ComputeDistanceCost( cmds, num_commands, &orig_params.dist, &orig_params.dist, dst_scratch_space, &mut dist_cost, ); if dist_cost < best_dist_cost { // best_dist_cost = dist_cost; unused params.dist = orig_params.dist; } } RecomputeDistancePrefixes(cmds, num_commands, &orig_params.dist, ¶ms.dist); } BrotliSplitBlock( alloc, cmds, num_commands, ringbuffer, pos, mask, params, lit_scratch_space, cmd_scratch_space, dst_scratch_space, &mut mb.literal_split, &mut mb.command_split, &mut mb.distance_split, ); if params.disable_literal_context_modeling == 0 { literal_context_multiplier = (1i32 << 6) as usize; literal_context_modes = allocate::(alloc, mb.literal_split.num_types); for item in literal_context_modes.slice_mut().iter_mut() { *item = literal_context_mode; } } let literal_histograms_size: usize = mb .literal_split .num_types .wrapping_mul(literal_context_multiplier); literal_histograms = allocate::(alloc, literal_histograms_size); let distance_histograms_size: usize = mb.distance_split.num_types << 2; distance_histograms = allocate::(alloc, distance_histograms_size); mb.command_histograms_size = mb.command_split.num_types; mb.command_histograms = allocate::(alloc, mb.command_histograms_size); BrotliBuildHistogramsWithContext( cmds, num_commands, &mut mb.literal_split, &mut mb.command_split, &mut mb.distance_split, ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes.slice(), literal_histograms.slice_mut(), mb.command_histograms.slice_mut(), distance_histograms.slice_mut(), ); >::free_cell(alloc, literal_context_modes); mb.literal_context_map_size = mb.literal_split.num_types << 6; mb.literal_context_map = allocate::(alloc, mb.literal_context_map_size); mb.literal_histograms_size = mb.literal_context_map_size; mb.literal_histograms = allocate::(alloc, mb.literal_histograms_size); BrotliClusterHistograms( alloc, literal_histograms.slice(), literal_histograms_size, kMaxNumberOfHistograms, lit_scratch_space, mb.literal_histograms.slice_mut(), &mut mb.literal_histograms_size, mb.literal_context_map.slice_mut(), ); >::free_cell(alloc, literal_histograms); if params.disable_literal_context_modeling != 0 { i = mb.literal_split.num_types; while i != 0usize { let mut j: usize = 0usize; i = i.wrapping_sub(1); while j < (1i32 << 6) as usize { { let val = mb.literal_context_map.slice()[i]; mb.literal_context_map.slice_mut()[(i << 6).wrapping_add(j)] = val; } j = j.wrapping_add(1); } } } mb.distance_context_map_size = mb.distance_split.num_types << 2; mb.distance_context_map = allocate::(alloc, mb.distance_context_map_size); mb.distance_histograms_size = mb.distance_context_map_size; mb.distance_histograms = allocate::(alloc, mb.distance_histograms_size); BrotliClusterHistograms( alloc, distance_histograms.slice(), mb.distance_context_map_size, kMaxNumberOfHistograms, dst_scratch_space, mb.distance_histograms.slice_mut(), &mut mb.distance_histograms_size, mb.distance_context_map.slice_mut(), ); >::free_cell(alloc, distance_histograms); } /* pub struct BlockSplitter<'a, HistogramType:SliceWrapper+SliceWrapperMut +CostAccessors, AllocU8:alloc::Allocator+'a, AllocU32:alloc::Allocator+'a, AllocHT:alloc::Allocator+'a > { */ pub struct BlockSplitter { pub alphabet_size_: usize, pub min_block_size_: usize, pub split_threshold_: floatX, pub num_blocks_: usize, // pub split_: &'a mut BlockSplit, // pub histograms_: AllocHT::AllocatedMemory, // FIXME: pull this one out at the end // pub histograms_size_: &'a mut usize, // FIXME: pull this one out at the end pub target_block_size_: usize, pub block_size_: usize, pub curr_histogram_ix_: usize, pub last_histogram_ix_: [usize; 2], pub last_entropy_: [floatX; 2], pub merge_last_count_: usize, } pub struct ContextBlockSplitter { pub alphabet_size_: usize, pub num_contexts_: usize, pub max_block_types_: usize, pub min_block_size_: usize, pub split_threshold_: floatX, pub num_blocks_: usize, // pub split_: &'a mut BlockSplit, // pub histograms_: AllocHL::AllocatedMemory, // pub histograms_size_: &'a mut usize, // FIXME: pull this one out at the end pub target_block_size_: usize, pub block_size_: usize, pub curr_histogram_ix_: usize, pub last_histogram_ix_: [usize; 2], pub last_entropy_: [floatX; 2 * BROTLI_MAX_STATIC_CONTEXTS], pub merge_last_count_: usize, } enum LitBlocks { plain(BlockSplitter), //<'a, HistogramLiteral, AllocU8, AllocU32, AllocHL>, ctx(ContextBlockSplitter), //<'a, AllocU8, AllocU32, AllocHL>, } /* pub struct BlockSplitterCommand { pub alphabet_size_: usize, pub min_block_size_: usize, pub split_threshold_: floatX, pub num_blocks_: usize, pub split_: *mut BlockSplit, pub histograms_: *mut HistogramCommand, pub histograms_size_: *mut usize, pub target_block_size_: usize, pub block_size_: usize, pub curr_histogram_ix_: usize, pub last_histogram_ix_: [usize; 2], pub last_entropy_: [floatX; 2], pub merge_last_count_: usize, } pub struct BlockSplitterDistance { pub alphabet_size_: usize, pub min_block_size_: usize, pub split_threshold_: floatX, pub num_blocks_: usize, pub split_: *mut BlockSplit, pub histograms_: *mut HistogramDistance, pub histograms_size_: *mut usize, pub target_block_size_: usize, pub block_size_: usize, pub curr_histogram_ix_: usize, pub last_histogram_ix_: [usize; 2], pub last_entropy_: [floatX; 2], pub merge_last_count_: usize, } */ fn InitBlockSplitter< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator, >( alloc: &mut Alloc, alphabet_size: usize, min_block_size: usize, split_threshold: floatX, num_symbols: usize, split: &mut BlockSplit, histograms: &mut >::AllocatedMemory, histograms_size: &mut usize, ) -> BlockSplitter { let max_num_blocks: usize = num_symbols.wrapping_div(min_block_size).wrapping_add(1); let max_num_types: usize = min(max_num_blocks, (256i32 + 1i32) as usize); let mut xself = BlockSplitter { last_entropy_: [0.0; 2], alphabet_size_: alphabet_size, min_block_size_: min_block_size, split_threshold_: split_threshold, num_blocks_: 0usize, //xself.split_ : split, //xself.histograms_size_ : histograms_size, target_block_size_: min_block_size, block_size_: 0usize, curr_histogram_ix_: 0usize, merge_last_count_: 0usize, last_histogram_ix_: [0; 2], }; { if split.types.slice().len() < max_num_blocks { let mut _new_size: usize = if split.types.slice().is_empty() { max_num_blocks } else { split.types.slice().len() }; let mut new_array: >::AllocatedMemory; while _new_size < max_num_blocks { _new_size = _new_size.wrapping_mul(2); } new_array = allocate::(alloc, _new_size); if (!split.types.slice().is_empty()) { new_array.slice_mut()[..split.types.slice().len()] .clone_from_slice(split.types.slice()); } >::free_cell( alloc, core::mem::replace(&mut split.types, new_array), ); } } { if split.lengths.slice().len() < max_num_blocks { let mut _new_size: usize = if split.lengths.slice().is_empty() { max_num_blocks } else { split.lengths.slice().len() }; while _new_size < max_num_blocks { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); new_array.slice_mut()[..split.lengths.slice().len()] .clone_from_slice(split.lengths.slice()); >::free_cell( alloc, core::mem::replace(&mut split.lengths, new_array), ); } } split.num_blocks = max_num_blocks; *histograms_size = max_num_types; let hlocal = allocate::(alloc, *histograms_size); >::free_cell( alloc, core::mem::replace(&mut *histograms, hlocal), ); HistogramClear(&mut histograms.slice_mut()[0]); xself.last_histogram_ix_[0] = 0; xself.last_histogram_ix_[1] = 0; xself } fn InitContextBlockSplitter< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator, >( alloc: &mut Alloc, alphabet_size: usize, num_contexts: usize, min_block_size: usize, split_threshold: floatX, num_symbols: usize, split: &mut BlockSplit, histograms: &mut >::AllocatedMemory, histograms_size: &mut usize, ) -> ContextBlockSplitter { let max_num_blocks: usize = num_symbols.wrapping_div(min_block_size).wrapping_add(1); assert!(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS); let mut xself = ContextBlockSplitter { alphabet_size_: alphabet_size, num_contexts_: num_contexts, max_block_types_: (256usize).wrapping_div(num_contexts), min_block_size_: min_block_size, split_threshold_: split_threshold, num_blocks_: 0usize, // histograms_size_: histograms_size, target_block_size_: min_block_size, block_size_: 0usize, curr_histogram_ix_: 0usize, merge_last_count_: 0usize, last_histogram_ix_: [0; 2], last_entropy_: [0.0; 2 * BROTLI_MAX_STATIC_CONTEXTS], }; let max_num_types: usize = min(max_num_blocks, xself.max_block_types_.wrapping_add(1)); { if split.types.slice().len() < max_num_blocks { let mut _new_size: usize = if split.types.slice().is_empty() { max_num_blocks } else { split.types.slice().len() }; while _new_size < max_num_blocks { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); if (!split.types.slice().is_empty()) { new_array.slice_mut()[..split.types.slice().len()] .clone_from_slice(split.types.slice()); } >::free_cell( alloc, core::mem::replace(&mut split.types, new_array), ); } } { if split.lengths.slice().len() < max_num_blocks { let mut _new_size: usize = if split.lengths.slice().is_empty() { max_num_blocks } else { split.lengths.slice().len() }; while _new_size < max_num_blocks { _new_size = _new_size.wrapping_mul(2); } let mut new_array = allocate::(alloc, _new_size); if (!split.lengths.slice().is_empty()) { new_array.slice_mut()[..split.lengths.slice().len()] .clone_from_slice(split.lengths.slice()); } >::free_cell( alloc, core::mem::replace(&mut split.lengths, new_array), ); } } split.num_blocks = max_num_blocks; *histograms_size = max_num_types.wrapping_mul(num_contexts); *histograms = allocate::(alloc, *histograms_size); //xself.histograms_ = *histograms; ClearHistograms(&mut histograms.slice_mut()[0..], num_contexts); xself.last_histogram_ix_[0] = 0; xself.last_histogram_ix_[1] = 0; xself } fn BlockSplitterFinishBlock< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors + Clone, Alloc: alloc::Allocator + alloc::Allocator, >( xself: &mut BlockSplitter, split: &mut BlockSplit, histograms: &mut [HistogramType], histograms_size: &mut usize, is_final: bool, ) { xself.block_size_ = max(xself.block_size_, xself.min_block_size_); if xself.num_blocks_ == 0usize { split.lengths.slice_mut()[0] = xself.block_size_ as u32; split.types.slice_mut()[0] = 0u8; xself.last_entropy_[0] = BitsEntropy((histograms[0]).slice(), xself.alphabet_size_); xself.last_entropy_[1] = xself.last_entropy_[0]; xself.num_blocks_ = xself.num_blocks_.wrapping_add(1); split.num_types = split.num_types.wrapping_add(1); xself.curr_histogram_ix_ = xself.curr_histogram_ix_.wrapping_add(1); if xself.curr_histogram_ix_ < *histograms_size { HistogramClear(&mut histograms[xself.curr_histogram_ix_]); } xself.block_size_ = 0usize; } else if xself.block_size_ > 0usize { let entropy = BitsEntropy( (histograms[xself.curr_histogram_ix_]).slice(), xself.alphabet_size_, ); let mut combined_histo: [HistogramType; 2] = [ histograms[xself.curr_histogram_ix_].clone(), histograms[xself.curr_histogram_ix_].clone(), ]; let mut combined_entropy: [floatX; 2] = [0.0, 0.0]; let mut diff: [floatX; 2] = [0.0, 0.0]; for j in 0..2 { let last_histogram_ix: usize = xself.last_histogram_ix_[j]; HistogramAddHistogram(&mut combined_histo[j], &histograms[last_histogram_ix]); combined_entropy[j] = BitsEntropy( &mut combined_histo[j].slice_mut()[0..], xself.alphabet_size_, ); diff[j] = combined_entropy[j] - entropy - xself.last_entropy_[j]; } if split.num_types < 256usize && (diff[0] > xself.split_threshold_) && (diff[1] > xself.split_threshold_) { split.lengths.slice_mut()[xself.num_blocks_] = xself.block_size_ as u32; split.types.slice_mut()[xself.num_blocks_] = split.num_types as u8; xself.last_histogram_ix_[1] = xself.last_histogram_ix_[0]; xself.last_histogram_ix_[0] = split.num_types as u8 as usize; xself.last_entropy_[1] = xself.last_entropy_[0]; xself.last_entropy_[0] = entropy; xself.num_blocks_ = xself.num_blocks_.wrapping_add(1); split.num_types = split.num_types.wrapping_add(1); xself.curr_histogram_ix_ = xself.curr_histogram_ix_.wrapping_add(1); if xself.curr_histogram_ix_ < *histograms_size { HistogramClear(&mut histograms[xself.curr_histogram_ix_]); } xself.block_size_ = 0usize; xself.merge_last_count_ = 0usize; xself.target_block_size_ = xself.min_block_size_; } else if diff[1] < diff[0] - 20.0 { split.lengths.slice_mut()[xself.num_blocks_] = xself.block_size_ as u32; split.types.slice_mut()[xself.num_blocks_] = split.types.slice()[xself.num_blocks_.wrapping_sub(2)]; //FIXME: investigate copy? { xself.last_histogram_ix_.swap(0, 1); } histograms[xself.last_histogram_ix_[0]] = combined_histo[1].clone(); xself.last_entropy_[1] = xself.last_entropy_[0]; xself.last_entropy_[0] = combined_entropy[1]; xself.num_blocks_ = xself.num_blocks_.wrapping_add(1); xself.block_size_ = 0usize; HistogramClear(&mut histograms[xself.curr_histogram_ix_]); xself.merge_last_count_ = 0usize; xself.target_block_size_ = xself.min_block_size_; } else { { let _rhs = xself.block_size_ as u32; let _lhs = &mut split.lengths.slice_mut()[xself.num_blocks_.wrapping_sub(1)]; *_lhs = (*_lhs).wrapping_add(_rhs); } histograms[xself.last_histogram_ix_[0]] = combined_histo[0].clone(); xself.last_entropy_[0] = combined_entropy[0]; if split.num_types == 1 { xself.last_entropy_[1] = xself.last_entropy_[0]; } xself.block_size_ = 0usize; HistogramClear(&mut histograms[xself.curr_histogram_ix_]); if { xself.merge_last_count_ = xself.merge_last_count_.wrapping_add(1); xself.merge_last_count_ } > 1 { xself.target_block_size_ = xself.target_block_size_.wrapping_add(xself.min_block_size_); } } } if is_final { *histograms_size = split.num_types; split.num_blocks = xself.num_blocks_; } } const BROTLI_MAX_STATIC_CONTEXTS: usize = 13; fn ContextBlockSplitterFinishBlock< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator, AllocHL: alloc::Allocator, >( xself: &mut ContextBlockSplitter, m: &mut AllocHL, split: &mut BlockSplit, histograms: &mut [HistogramLiteral], histograms_size: &mut usize, is_final: bool, ) { let num_contexts: usize = xself.num_contexts_; if xself.block_size_ < xself.min_block_size_ { xself.block_size_ = xself.min_block_size_; } if xself.num_blocks_ == 0usize { split.lengths.slice_mut()[0] = xself.block_size_ as u32; split.types.slice_mut()[0] = 0u8; for i in 0usize..num_contexts { xself.last_entropy_[i] = BitsEntropy((histograms[i]).slice(), xself.alphabet_size_); xself.last_entropy_[num_contexts.wrapping_add(i)] = xself.last_entropy_[i]; } xself.num_blocks_ = xself.num_blocks_.wrapping_add(1); split.num_types = split.num_types.wrapping_add(1); xself.curr_histogram_ix_ = xself.curr_histogram_ix_.wrapping_add(num_contexts); if xself.curr_histogram_ix_ < *histograms_size { ClearHistograms( &mut histograms[xself.curr_histogram_ix_..], xself.num_contexts_, ); } xself.block_size_ = 0usize; } else if xself.block_size_ > 0usize { let mut entropy = [0.0; BROTLI_MAX_STATIC_CONTEXTS]; let mut combined_histo = m.alloc_cell(2 * num_contexts); let mut combined_entropy = [0.0; 2 * BROTLI_MAX_STATIC_CONTEXTS]; let mut diff = [0.0; 2]; for i in 0usize..num_contexts { let curr_histo_ix: usize = xself.curr_histogram_ix_.wrapping_add(i); let mut j: usize; entropy[i] = BitsEntropy((histograms[curr_histo_ix]).slice(), xself.alphabet_size_); j = 0usize; while j < 2usize { { let jx: usize = j.wrapping_mul(num_contexts).wrapping_add(i); let last_histogram_ix: usize = xself.last_histogram_ix_[j].wrapping_add(i); combined_histo.slice_mut()[jx] = histograms[curr_histo_ix].clone(); HistogramAddHistogram( &mut combined_histo.slice_mut()[jx], &mut histograms[last_histogram_ix], ); combined_entropy[jx] = BitsEntropy(combined_histo.slice()[jx].slice(), xself.alphabet_size_); diff[j] += combined_entropy[jx] - entropy[i] - xself.last_entropy_[jx]; } j = j.wrapping_add(1); } } if split.num_types < xself.max_block_types_ && (diff[0] > xself.split_threshold_) && (diff[1] > xself.split_threshold_) { split.lengths.slice_mut()[xself.num_blocks_] = xself.block_size_ as u32; split.types.slice_mut()[xself.num_blocks_] = split.num_types as u8; xself.last_histogram_ix_[1] = xself.last_histogram_ix_[0]; xself.last_histogram_ix_[0] = split.num_types.wrapping_mul(num_contexts); for i in 0usize..num_contexts { xself.last_entropy_[num_contexts.wrapping_add(i)] = xself.last_entropy_[i]; xself.last_entropy_[i] = entropy[i]; } xself.num_blocks_ = xself.num_blocks_.wrapping_add(1); split.num_types = split.num_types.wrapping_add(1); xself.curr_histogram_ix_ = xself.curr_histogram_ix_.wrapping_add(num_contexts); if xself.curr_histogram_ix_ < *histograms_size { ClearHistograms( &mut histograms[xself.curr_histogram_ix_..], xself.num_contexts_, ); } xself.block_size_ = 0usize; xself.merge_last_count_ = 0usize; xself.target_block_size_ = xself.min_block_size_; } else if diff[1] < diff[0] - 20.0 { split.lengths.slice_mut()[xself.num_blocks_] = xself.block_size_ as u32; let nbm2 = split.types.slice()[xself.num_blocks_.wrapping_sub(2)]; split.types.slice_mut()[xself.num_blocks_] = nbm2; { xself.last_histogram_ix_.swap(0, 1); } for i in 0usize..num_contexts { histograms[xself.last_histogram_ix_[0].wrapping_add(i)] = combined_histo.slice()[num_contexts.wrapping_add(i)].clone(); xself.last_entropy_[num_contexts.wrapping_add(i)] = xself.last_entropy_[i]; xself.last_entropy_[i] = combined_entropy[num_contexts.wrapping_add(i)]; HistogramClear(&mut histograms[xself.curr_histogram_ix_.wrapping_add(i)]); } xself.num_blocks_ = xself.num_blocks_.wrapping_add(1); xself.block_size_ = 0usize; xself.merge_last_count_ = 0usize; xself.target_block_size_ = xself.min_block_size_; } else { { let _rhs = xself.block_size_ as u32; let _lhs = &mut split.lengths.slice_mut()[xself.num_blocks_.wrapping_sub(1)]; let old_split_length = *_lhs; *_lhs = old_split_length.wrapping_add(_rhs); } for i in 0usize..num_contexts { histograms[xself.last_histogram_ix_[0].wrapping_add(i)] = combined_histo.slice()[i].clone(); xself.last_entropy_[i] = combined_entropy[i]; if split.num_types == 1 { xself.last_entropy_[num_contexts.wrapping_add(i)] = xself.last_entropy_[i]; } HistogramClear(&mut histograms[xself.curr_histogram_ix_.wrapping_add(i)]); } xself.block_size_ = 0usize; if { xself.merge_last_count_ = xself.merge_last_count_.wrapping_add(1); xself.merge_last_count_ } > 1 { xself.target_block_size_ = xself.target_block_size_.wrapping_add(xself.min_block_size_); } } m.free_cell(combined_histo); } if is_final { *histograms_size = split.num_types.wrapping_mul(num_contexts); split.num_blocks = xself.num_blocks_; } } fn BlockSplitterAddSymbol< HistogramType: SliceWrapper + SliceWrapperMut + CostAccessors + Clone, Alloc: alloc::Allocator + alloc::Allocator, >( xself: &mut BlockSplitter, split: &mut BlockSplit, histograms: &mut [HistogramType], histograms_size: &mut usize, symbol: usize, ) { HistogramAddItem(&mut histograms[xself.curr_histogram_ix_], symbol); xself.block_size_ = xself.block_size_.wrapping_add(1); if xself.block_size_ == xself.target_block_size_ { BlockSplitterFinishBlock(xself, split, histograms, histograms_size, false); } } fn ContextBlockSplitterAddSymbol< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator, >( xself: &mut ContextBlockSplitter, m: &mut Alloc, split: &mut BlockSplit, histograms: &mut [HistogramLiteral], histograms_size: &mut usize, symbol: usize, context: usize, ) { HistogramAddItem( &mut histograms[xself.curr_histogram_ix_.wrapping_add(context)], symbol, ); xself.block_size_ = xself.block_size_.wrapping_add(1); if xself.block_size_ == xself.target_block_size_ { ContextBlockSplitterFinishBlock(xself, m, split, histograms, histograms_size, false); } } fn MapStaticContexts< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, >( m32: &mut Alloc, num_contexts: usize, static_context_map: &[u32], mb: &mut MetaBlockSplit, ) { mb.literal_context_map_size = mb.literal_split.num_types << 6; let new_literal_context_map = allocate::(m32, mb.literal_context_map_size); >::free_cell( m32, core::mem::replace(&mut mb.literal_context_map, new_literal_context_map), ); for i in 0usize..mb.literal_split.num_types { let offset: u32 = i.wrapping_mul(num_contexts) as u32; for j in 0usize..(1u32 << 6) as usize { mb.literal_context_map.slice_mut()[(i << 6).wrapping_add(j)] = offset.wrapping_add(static_context_map[j]); } } } pub fn BrotliBuildMetaBlockGreedyInternal< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, >( alloc: &mut Alloc, ringbuffer: &[u8], mut pos: usize, mask: usize, mut prev_byte: u8, mut prev_byte2: u8, literal_context_mode: ContextType, num_contexts: usize, static_context_map: &[u32], commands: &[Command], n_commands: usize, mb: &mut MetaBlockSplit, ) { let mut lit_blocks: LitBlocks; let mut cmd_blocks: BlockSplitter; let mut dist_blocks: BlockSplitter; let mut num_literals: usize = 0usize; for i in 0usize..n_commands { num_literals = num_literals.wrapping_add((commands[i]).insert_len_ as usize); } lit_blocks = if num_contexts == 1 { LitBlocks::plain(InitBlockSplitter::( alloc, 256usize, 512usize, 400.0, num_literals, &mut mb.literal_split, &mut mb.literal_histograms, &mut mb.literal_histograms_size, )) } else { LitBlocks::ctx(InitContextBlockSplitter::( alloc, 256usize, num_contexts, 512usize, 400.0, num_literals, &mut mb.literal_split, &mut mb.literal_histograms, &mut mb.literal_histograms_size, )) }; cmd_blocks = InitBlockSplitter::( alloc, 704usize, 1024usize, 500.0, n_commands, &mut mb.command_split, &mut mb.command_histograms, &mut mb.command_histograms_size, ); dist_blocks = InitBlockSplitter::( alloc, 64usize, 512usize, 100.0, n_commands, &mut mb.distance_split, &mut mb.distance_histograms, &mut mb.distance_histograms_size, ); for i in 0usize..n_commands { let cmd: Command = commands[i]; let mut j: usize; BlockSplitterAddSymbol( &mut cmd_blocks, &mut mb.command_split, mb.command_histograms.slice_mut(), &mut mb.command_histograms_size, cmd.cmd_prefix_ as usize, ); j = cmd.insert_len_ as usize; while j != 0usize { { let literal: u8 = ringbuffer[(pos & mask)]; match (&mut lit_blocks) { &mut LitBlocks::plain(ref mut lit_blocks_plain) => BlockSplitterAddSymbol( lit_blocks_plain, &mut mb.literal_split, mb.literal_histograms.slice_mut(), &mut mb.literal_histograms_size, literal as usize, ), &mut LitBlocks::ctx(ref mut lit_blocks_ctx) => { let context: usize = Context(prev_byte, prev_byte2, literal_context_mode) as usize; ContextBlockSplitterAddSymbol( lit_blocks_ctx, alloc, &mut mb.literal_split, mb.literal_histograms.slice_mut(), &mut mb.literal_histograms_size, literal as usize, static_context_map[(context as usize)] as usize, ); } } prev_byte2 = prev_byte; prev_byte = literal; pos = pos.wrapping_add(1); } j = j.wrapping_sub(1); } pos = pos.wrapping_add(cmd.copy_len() as usize); if cmd.copy_len() != 0 { prev_byte2 = ringbuffer[(pos.wrapping_sub(2) & mask)]; prev_byte = ringbuffer[(pos.wrapping_sub(1) & mask)]; if cmd.cmd_prefix_ as i32 >= 128i32 { BlockSplitterAddSymbol( &mut dist_blocks, &mut mb.distance_split, mb.distance_histograms.slice_mut(), &mut mb.distance_histograms_size, cmd.dist_prefix_ as usize & 0x3ff, ); } } } match (&mut lit_blocks) { &mut LitBlocks::plain(ref mut lit_blocks_plain) => BlockSplitterFinishBlock( lit_blocks_plain, &mut mb.literal_split, mb.literal_histograms.slice_mut(), &mut mb.literal_histograms_size, true, ), &mut LitBlocks::ctx(ref mut lit_blocks_ctx) => ContextBlockSplitterFinishBlock( lit_blocks_ctx, alloc, &mut mb.literal_split, mb.literal_histograms.slice_mut(), &mut mb.literal_histograms_size, true, ), } BlockSplitterFinishBlock( &mut cmd_blocks, &mut mb.command_split, mb.command_histograms.slice_mut(), &mut mb.command_histograms_size, true, ); BlockSplitterFinishBlock( &mut dist_blocks, &mut mb.distance_split, mb.distance_histograms.slice_mut(), &mut mb.distance_histograms_size, true, ); if num_contexts > 1 { MapStaticContexts(alloc, num_contexts, static_context_map, mb); } } pub fn BrotliBuildMetaBlockGreedy< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, >( alloc: &mut Alloc, ringbuffer: &[u8], pos: usize, mask: usize, prev_byte: u8, prev_byte2: u8, literal_context_mode: ContextType, _literal_context_lut: &[u8], num_contexts: usize, static_context_map: &[u32], commands: &[Command], n_commands: usize, mb: &mut MetaBlockSplit, ) { if num_contexts == 1 { BrotliBuildMetaBlockGreedyInternal( alloc, ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_mode, 1, &[], commands, n_commands, mb, ); } else { BrotliBuildMetaBlockGreedyInternal( alloc, ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_mode, num_contexts, static_context_map, commands, n_commands, mb, ); } } pub fn BrotliOptimizeHistograms< Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, >( num_distance_codes: usize, mb: &mut MetaBlockSplit, ) { let mut good_for_rle: [u8; 704] = [0; 704]; for i in 0usize..mb.literal_histograms_size { BrotliOptimizeHuffmanCountsForRle( 256usize, mb.literal_histograms.slice_mut()[i].slice_mut(), &mut good_for_rle[..], ); } for i in 0usize..mb.command_histograms_size { BrotliOptimizeHuffmanCountsForRle( 704usize, mb.command_histograms.slice_mut()[i].slice_mut(), &mut good_for_rle[..], ); } for i in 0usize..mb.distance_histograms_size { BrotliOptimizeHuffmanCountsForRle( num_distance_codes, mb.distance_histograms.slice_mut()[i].slice_mut(), &mut good_for_rle[..], ); } } brotli-8.0.2/src/enc/mod.rs000064400000000000000000000243121046102023000136110ustar 00000000000000#[macro_use] pub mod vectorization; pub mod backward_references; pub mod bit_cost; pub mod block_split; pub mod block_splitter; pub mod brotli_bit_stream; pub mod cluster; pub mod combined_alloc; pub mod command; mod compat; pub mod compress_fragment; pub mod compress_fragment_two_pass; pub mod constants; pub mod context_map_entropy; pub mod dictionary_hash; pub mod encode; pub mod entropy_encode; pub mod find_stride; pub mod fixed_queue; pub mod histogram; pub mod input_pair; pub mod interface; pub mod ir_interpret; pub mod literal_cost; mod log_table_16; mod log_table_8; pub mod metablock; pub mod multithreading; mod parameters; pub mod pdf; pub mod prior_eval; pub mod reader; pub mod singlethreading; pub mod static_dict; pub mod static_dict_lut; pub mod stride_eval; mod test; pub mod threading; pub mod utf8_util; pub mod util; mod weights; pub mod worker_pool; pub mod writer; pub use alloc::{AllocatedStackMemory, Allocator, SliceWrapper, SliceWrapperMut, StackAllocator}; #[cfg(feature = "std")] use std::io; #[cfg(feature = "std")] use std::io::{Error, ErrorKind, Read, Write}; #[cfg(feature = "std")] pub use alloc_stdlib::StandardAlloc; use brotli_decompressor::{CustomRead, CustomWrite}; #[cfg(feature = "std")] pub use brotli_decompressor::{IntoIoReader, IoReaderWrapper, IoWriterWrapper}; pub use interface::{InputPair, InputReference, InputReferenceMut}; pub use self::backward_references::{ hash_to_binary_tree, hq as backward_references_hq, BrotliEncoderParams, UnionHasher, }; pub use self::combined_alloc::{BrotliAlloc, CombiningAllocator}; use self::encode::{BrotliEncoderDestroyInstance, BrotliEncoderOperation}; pub use self::encode::{ BrotliEncoderInitParams, BrotliEncoderMaxCompressedSize, BrotliEncoderMaxCompressedSizeMulti, }; pub use self::hash_to_binary_tree::ZopfliNode; pub use self::interface::StaticCommand; pub use self::pdf::PDF; #[cfg(not(feature = "std"))] pub use self::singlethreading::{compress_worker_pool, new_work_pool, WorkerPool}; pub use self::threading::{ BatchSpawnableLite, BrotliEncoderThreadError, CompressionThreadResult, Owned, SendAlloc, }; pub use self::util::floatX; pub use self::vectorization::{v256, v256i, Mem256f}; #[cfg(feature = "std")] pub use self::worker_pool::{compress_worker_pool, new_work_pool, WorkerPool}; use crate::enc::encode::BrotliEncoderStateStruct; #[cfg(feature = "simd")] pub type s16 = core::simd::i16x16; #[cfg(feature = "simd")] pub type v8 = core::simd::f32x8; #[cfg(feature = "simd")] pub type s8 = core::simd::i32x8; #[cfg(not(feature = "simd"))] pub type s16 = compat::Compat16x16; #[cfg(not(feature = "simd"))] pub type v8 = compat::CompatF8; #[cfg(not(feature = "simd"))] pub type s8 = compat::Compat32x8; #[cfg(feature = "std")] pub fn compress_multi< Alloc: BrotliAlloc + Send + 'static, SliceW: SliceWrapper + Send + 'static + Sync, >( params: &BrotliEncoderParams, owned_input: &mut Owned, output: &mut [u8], alloc_per_thread: &mut [SendAlloc< CompressionThreadResult, backward_references::UnionHasher, Alloc, , backward_references::UnionHasher, Alloc, (SliceW, BrotliEncoderParams), > as BatchSpawnableLite< CompressionThreadResult, backward_references::UnionHasher, Alloc, (SliceW, BrotliEncoderParams), >>::JoinHandle, >], ) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send + Sync, >::AllocatedMemory: Send + Sync, { let mut work_pool = self::worker_pool::new_work_pool(alloc_per_thread.len() - 1); compress_worker_pool( params, owned_input, output, alloc_per_thread, &mut work_pool, ) } #[cfg(feature = "std")] pub use self::multithreading::compress_multi as compress_multi_no_threadpool; #[cfg(not(feature = "std"))] pub use self::singlethreading::compress_multi; #[cfg(not(feature = "std"))] pub use self::singlethreading::compress_multi as compress_multi_no_threadpool; #[cfg(feature = "std")] pub fn BrotliCompress( r: &mut InputType, w: &mut OutputType, params: &BrotliEncoderParams, ) -> Result where InputType: Read, OutputType: Write, { let mut input_buffer: [u8; 4096] = [0; 4096]; let mut output_buffer: [u8; 4096] = [0; 4096]; BrotliCompressCustomAlloc( r, w, &mut input_buffer[..], &mut output_buffer[..], params, StandardAlloc::default(), ) } #[cfg(feature = "std")] pub fn BrotliCompressCustomAlloc( r: &mut InputType, w: &mut OutputType, input_buffer: &mut [u8], output_buffer: &mut [u8], params: &BrotliEncoderParams, alloc: Alloc, ) -> Result where InputType: Read, OutputType: Write, { let mut nop_callback = |_data: &mut interface::PredictionModeContextMap, _cmds: &mut [interface::StaticCommand], _mb: interface::InputPair, _m: &mut Alloc| (); BrotliCompressCustomIo( &mut IoReaderWrapper::(r), &mut IoWriterWrapper::(w), input_buffer, output_buffer, params, alloc, &mut nop_callback, Error::new(ErrorKind::UnexpectedEof, "Unexpected EOF"), ) } pub fn BrotliCompressCustomIo< ErrType, InputType, OutputType, Alloc: BrotliAlloc, MetablockCallback: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], interface::InputPair, &mut Alloc, ), >( r: &mut InputType, w: &mut OutputType, input_buffer: &mut [u8], output_buffer: &mut [u8], params: &BrotliEncoderParams, alloc: Alloc, metablock_callback: &mut MetablockCallback, unexpected_eof_error_constant: ErrType, ) -> Result where InputType: CustomRead, OutputType: CustomWrite, { BrotliCompressCustomIoCustomDict( r, w, input_buffer, output_buffer, params, alloc, metablock_callback, &[], unexpected_eof_error_constant, ) } pub fn BrotliCompressCustomIoCustomDict< ErrType, InputType, OutputType, Alloc: BrotliAlloc, MetablockCallback: FnMut( &mut interface::PredictionModeContextMap, &mut [interface::StaticCommand], interface::InputPair, &mut Alloc, ), >( r: &mut InputType, w: &mut OutputType, input_buffer: &mut [u8], output_buffer: &mut [u8], params: &BrotliEncoderParams, alloc: Alloc, metablock_callback: &mut MetablockCallback, dict: &[u8], unexpected_eof_error_constant: ErrType, ) -> Result where InputType: CustomRead, OutputType: CustomWrite, { assert!(!input_buffer.is_empty()); assert!(!output_buffer.is_empty()); let mut s_orig = BrotliEncoderStateStruct::new(alloc); s_orig.params = params.clone(); if !dict.is_empty() { s_orig.set_custom_dictionary(dict.len(), dict); } let mut next_in_offset: usize = 0; let mut next_out_offset: usize = 0; let mut total_out = Some(0); let mut read_err: Result<(), ErrType> = Ok(()); { let s = &mut s_orig; //BrotliEncoderSetParameter(s, BrotliEncoderParameter::BROTLI_PARAM_MODE, 0 as u32); // gen, text, font //BrotliEncoderSetParameter(s, // BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, // input.len() as u32); let mut available_in: usize = 0; let mut available_out: usize = output_buffer.len(); let mut eof = false; loop { if available_in == 0 && !eof { next_in_offset = 0; match r.read(input_buffer) { Err(e) => { read_err = Err(e); available_in = 0; eof = true; } Ok(size) => { if size == 0 { eof = true; } available_in = size; } } } let op: BrotliEncoderOperation; if available_in == 0 { op = BrotliEncoderOperation::BROTLI_OPERATION_FINISH; } else { op = BrotliEncoderOperation::BROTLI_OPERATION_PROCESS; } let result = s.compress_stream( op, &mut available_in, input_buffer, &mut next_in_offset, &mut available_out, output_buffer, &mut next_out_offset, &mut total_out, metablock_callback, ); let fin = s.is_finished(); if available_out == 0 || fin { let lim = output_buffer.len() - available_out; assert_eq!(next_out_offset, lim); next_out_offset = 0; while next_out_offset < lim { match w.write(&mut output_buffer[next_out_offset..lim]) { Err(e) => { BrotliEncoderDestroyInstance(s); read_err?; return Err(e); } Ok(size) => { next_out_offset += size; } } } available_out = output_buffer.len(); next_out_offset = 0; } if !result { if read_err.is_ok() { read_err = Err(unexpected_eof_error_constant); } break; } if fin { break; } } BrotliEncoderDestroyInstance(s); } read_err?; Ok(total_out.unwrap()) } brotli-8.0.2/src/enc/multithreading.rs000064400000000000000000000134551046102023000160600ustar 00000000000000#![cfg(feature = "std")] use alloc::{Allocator, SliceWrapper}; use core::marker::PhantomData; use core::mem; use std; // in-place thread create use std::sync::RwLock; use std::thread::JoinHandle; use crate::enc::backward_references::UnionHasher; use crate::enc::threading::{ AnyBoxConstructor, BatchSpawnable, BatchSpawnableLite, BrotliEncoderThreadError, CompressMulti, CompressionThreadResult, InternalOwned, InternalSendAlloc, Joinable, Owned, OwnedRetriever, PoisonedThreadError, SendAlloc, }; use crate::enc::{BrotliAlloc, BrotliEncoderParams}; pub struct MultiThreadedJoinable( JoinHandle, PhantomData, ); impl Joinable for MultiThreadedJoinable { fn join(self) -> Result { match self.0.join() { Ok(t) => Ok(t), Err(e) => Err(::new(e)), } } } pub struct MultiThreadedOwnedRetriever(RwLock); impl OwnedRetriever for MultiThreadedOwnedRetriever { fn view T>(&self, f: F) -> Result { match self.0.read() { Ok(u) => Ok(f(&*u)), Err(_) => Err(PoisonedThreadError::default()), } } fn unwrap(self) -> Result { match self.0.into_inner() { Ok(u) => Ok(u), Err(_) => Err(PoisonedThreadError::default()), } } } #[derive(Default)] pub struct MultiThreadedSpawner {} fn spawn_work< ReturnValue: Send + 'static, ExtraInput: Send + 'static, F: Fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue + Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, >( extra_input: ExtraInput, index: usize, num_threads: usize, locked_input: std::sync::Arc>, alloc: Alloc, f: F, ) -> std::thread::JoinHandle where >::AllocatedMemory: Send + 'static, { std::thread::spawn(move || { let t: ReturnValue = locked_input .view(move |guard: &U| -> ReturnValue { f(extra_input, index, num_threads, guard, alloc) }) .unwrap(); t }) } impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > BatchSpawnable for MultiThreadedSpawner where >::AllocatedMemory: Send + 'static, { type JoinHandle = MultiThreadedJoinable; type FinalJoinHandle = std::sync::Arc>; fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle { std::sync::Arc::>::new(RwLock::new( mem::replace(input, Owned(InternalOwned::Borrowed)).unwrap(), )) } fn spawn ReturnValue + Send + 'static + Copy>( &mut self, input: &mut Self::FinalJoinHandle, work: &mut SendAlloc, index: usize, num_threads: usize, f: F, ) { let (alloc, extra_input) = work.replace_with_default(); let ret = spawn_work(extra_input, index, num_threads, input.clone(), alloc, f); *work = SendAlloc(InternalSendAlloc::Join(MultiThreadedJoinable( ret, PhantomData, ))); } } impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > BatchSpawnableLite for MultiThreadedSpawner where >::AllocatedMemory: Send + 'static, >::AllocatedMemory: Send + Sync, >::AllocatedMemory: Send + Sync, { type JoinHandle = >::JoinHandle; type FinalJoinHandle = >::FinalJoinHandle; fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle { >::make_spawner(self, input) } fn spawn( &mut self, handle: &mut Self::FinalJoinHandle, alloc_per_thread: &mut SendAlloc, index: usize, num_threads: usize, f: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, ) { >::spawn( self, handle, alloc_per_thread, index, num_threads, f, ) } } pub fn compress_multi< Alloc: BrotliAlloc + Send + 'static, SliceW: SliceWrapper + Send + 'static + Sync, >( params: &BrotliEncoderParams, owned_input: &mut Owned, output: &mut [u8], alloc_per_thread: &mut [SendAlloc< CompressionThreadResult, UnionHasher, Alloc, , UnionHasher, Alloc, SliceW, >>::JoinHandle, >], ) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send + Sync, >::AllocatedMemory: Send + Sync, { CompressMulti( params, owned_input, output, alloc_per_thread, &mut MultiThreadedSpawner::default(), ) } brotli-8.0.2/src/enc/parameters.rs000064400000000000000000000131461046102023000152000ustar 00000000000000#[derive(PartialEq, Eq, Copy, Clone, Debug)] #[repr(C)] pub enum BrotliEncoderParameter { BROTLI_PARAM_MODE = 0, BROTLI_PARAM_QUALITY = 1, BROTLI_PARAM_LGWIN = 2, BROTLI_PARAM_LGBLOCK = 3, BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4, BROTLI_PARAM_SIZE_HINT = 5, BROTLI_PARAM_LARGE_WINDOW = 6, BROTLI_PARAM_Q9_5 = 150, BROTLI_METABLOCK_CALLBACK = 151, BROTLI_PARAM_STRIDE_DETECTION_QUALITY = 152, BROTLI_PARAM_HIGH_ENTROPY_DETECTION_QUALITY = 153, BROTLI_PARAM_LITERAL_BYTE_SCORE = 154, BROTLI_PARAM_CDF_ADAPTATION_DETECTION = 155, BROTLI_PARAM_PRIOR_BITMASK_DETECTION = 156, BROTLI_PARAM_SPEED = 157, BROTLI_PARAM_SPEED_MAX = 158, BROTLI_PARAM_CM_SPEED = 159, BROTLI_PARAM_CM_SPEED_MAX = 160, BROTLI_PARAM_SPEED_LOW = 161, BROTLI_PARAM_SPEED_LOW_MAX = 162, BROTLI_PARAM_CM_SPEED_LOW = 164, BROTLI_PARAM_CM_SPEED_LOW_MAX = 165, BROTLI_PARAM_AVOID_DISTANCE_PREFIX_SEARCH = 166, BROTLI_PARAM_CATABLE = 167, BROTLI_PARAM_APPENDABLE = 168, BROTLI_PARAM_MAGIC_NUMBER = 169, BROTLI_PARAM_NO_DICTIONARY = 170, BROTLI_PARAM_FAVOR_EFFICIENCY = 171, UNUSED7 = 7, UNUSED8 = 8, UNUSED9 = 9, UNUSED10 = 10, UNUSED11 = 11, UNUSED12 = 12, UNUSED13 = 13, UNUSED14 = 14, UNUSED15 = 15, UNUSED16 = 16, UNUSED17 = 17, UNUSED18 = 18, UNUSED19 = 19, UNUSED20 = 20, UNUSED21 = 21, UNUSED22 = 22, UNUSED23 = 23, UNUSED24 = 24, UNUSED25 = 25, UNUSED26 = 26, UNUSED27 = 27, UNUSED28 = 28, UNUSED29 = 29, UNUSED30 = 30, UNUSED31 = 31, UNUSED32 = 32, UNUSED33 = 33, UNUSED34 = 34, UNUSED35 = 35, UNUSED36 = 36, UNUSED37 = 37, UNUSED38 = 38, UNUSED39 = 39, UNUSED40 = 40, UNUSED41 = 41, UNUSED42 = 42, UNUSED43 = 43, UNUSED44 = 44, UNUSED45 = 45, UNUSED46 = 46, UNUSED47 = 47, UNUSED48 = 48, UNUSED49 = 49, UNUSED50 = 50, UNUSED51 = 51, UNUSED52 = 52, UNUSED53 = 53, UNUSED54 = 54, UNUSED55 = 55, UNUSED56 = 56, UNUSED57 = 57, UNUSED58 = 58, UNUSED59 = 59, UNUSED60 = 60, UNUSED61 = 61, UNUSED62 = 62, UNUSED63 = 63, UNUSED64 = 64, UNUSED65 = 65, UNUSED66 = 66, UNUSED67 = 67, UNUSED68 = 68, UNUSED69 = 69, UNUSED70 = 70, UNUSED71 = 71, UNUSED72 = 72, UNUSED73 = 73, UNUSED74 = 74, UNUSED75 = 75, UNUSED76 = 76, UNUSED77 = 77, UNUSED78 = 78, UNUSED79 = 79, UNUSED80 = 80, UNUSED81 = 81, UNUSED82 = 82, UNUSED83 = 83, UNUSED84 = 84, UNUSED85 = 85, UNUSED86 = 86, UNUSED87 = 87, UNUSED88 = 88, UNUSED89 = 89, UNUSED90 = 90, UNUSED91 = 91, UNUSED92 = 92, UNUSED93 = 93, UNUSED94 = 94, UNUSED95 = 95, UNUSED96 = 96, UNUSED97 = 97, UNUSED98 = 98, UNUSED99 = 99, UNUSED100 = 100, UNUSED101 = 101, UNUSED102 = 102, UNUSED103 = 103, UNUSED104 = 104, UNUSED105 = 105, UNUSED106 = 106, UNUSED107 = 107, UNUSED108 = 108, UNUSED109 = 109, UNUSED110 = 110, UNUSED111 = 111, UNUSED112 = 112, UNUSED113 = 113, UNUSED114 = 114, UNUSED115 = 115, UNUSED116 = 116, UNUSED117 = 117, UNUSED118 = 118, UNUSED119 = 119, UNUSED120 = 120, UNUSED121 = 121, UNUSED122 = 122, UNUSED123 = 123, UNUSED124 = 124, UNUSED125 = 125, UNUSED126 = 126, UNUSED127 = 127, UNUSED128 = 128, UNUSED129 = 129, UNUSED130 = 130, UNUSED131 = 131, UNUSED132 = 132, UNUSED133 = 133, UNUSED134 = 134, UNUSED135 = 135, UNUSED136 = 136, UNUSED137 = 137, UNUSED138 = 138, UNUSED139 = 139, UNUSED140 = 140, UNUSED141 = 141, UNUSED142 = 142, UNUSED143 = 143, UNUSED144 = 144, UNUSED145 = 145, UNUSED146 = 146, UNUSED147 = 147, UNUSED148 = 148, UNUSED149 = 149, UNUSED172 = 172, UNUSED173 = 173, UNUSED174 = 174, UNUSED175 = 175, UNUSED176 = 176, UNUSED177 = 177, UNUSED178 = 178, UNUSED179 = 179, UNUSED180 = 180, UNUSED181 = 181, UNUSED182 = 182, UNUSED183 = 183, UNUSED184 = 184, UNUSED185 = 185, UNUSED186 = 186, UNUSED187 = 187, UNUSED188 = 188, UNUSED189 = 189, UNUSED190 = 190, UNUSED191 = 191, UNUSED192 = 192, UNUSED193 = 193, UNUSED194 = 194, UNUSED195 = 195, UNUSED196 = 196, UNUSED197 = 197, UNUSED198 = 198, UNUSED199 = 199, UNUSED200 = 200, UNUSED201 = 201, UNUSED202 = 202, UNUSED203 = 203, UNUSED204 = 204, UNUSED205 = 205, UNUSED206 = 206, UNUSED207 = 207, UNUSED208 = 208, UNUSED209 = 209, UNUSED210 = 210, UNUSED211 = 211, UNUSED212 = 212, UNUSED213 = 213, UNUSED214 = 214, UNUSED215 = 215, UNUSED216 = 216, UNUSED217 = 217, UNUSED218 = 218, UNUSED219 = 219, UNUSED220 = 220, UNUSED221 = 221, UNUSED222 = 222, UNUSED223 = 223, UNUSED224 = 224, UNUSED225 = 225, UNUSED226 = 226, UNUSED227 = 227, UNUSED228 = 228, UNUSED229 = 229, UNUSED230 = 230, UNUSED231 = 231, UNUSED232 = 232, UNUSED233 = 233, UNUSED234 = 234, UNUSED235 = 235, UNUSED236 = 236, UNUSED237 = 237, UNUSED238 = 238, UNUSED239 = 239, UNUSED240 = 240, UNUSED241 = 241, UNUSED242 = 242, UNUSED243 = 243, UNUSED244 = 244, UNUSED245 = 245, UNUSED246 = 246, UNUSED247 = 247, UNUSED248 = 248, UNUSED249 = 249, UNUSED250 = 250, UNUSED251 = 251, UNUSED252 = 252, UNUSED253 = 253, UNUSED254 = 254, UNUSED255 = 255, } brotli-8.0.2/src/enc/pdf.rs000064400000000000000000000002121046102023000135740ustar 00000000000000//TODO: replace with builtin SIMD type // FIXME!!! #[allow(dead_code)] #[derive(Copy, Clone, Default, Debug)] pub struct PDF([i16; 16]); brotli-8.0.2/src/enc/prior_eval.rs000064400000000000000000000711001046102023000151710ustar 00000000000000use core; use core::cmp::min; #[cfg(feature = "simd")] use core::simd::prelude::SimdPartialOrd; use super::super::alloc; use super::super::alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use super::backward_references::BrotliEncoderParams; use super::input_pair::{InputPair, InputReference, InputReferenceMut}; use super::ir_interpret::{push_base, IRInterpreter}; use super::util::{floatX, FastLog2u16}; use super::{find_stride, interface, s16, v8}; use crate::enc::combined_alloc::{alloc_default, alloc_if}; // the high nibble, followed by the low nibbles pub const CONTEXT_MAP_PRIOR_SIZE: usize = 256 * 17; pub const STRIDE_PRIOR_SIZE: usize = 256 * 256 * 2; pub const ADV_PRIOR_SIZE: usize = 65536 + (20 << 16); pub const DEFAULT_SPEED: (u16, u16) = (8, 8192); pub enum WhichPrior { CM = 0, ADV = 1, SLOW_CM = 2, FAST_CM = 3, STRIDE1 = 4, STRIDE2 = 5, STRIDE3 = 6, STRIDE4 = 7, // STRIDE8 = 8, NUM_PRIORS = 8, // future ideas } pub trait Prior { fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize; #[inline(always)] fn lookup_mut( data: &mut [s16], stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> CDF { let index = Self::lookup_lin(stride_byte, selected_context, actual_context, high_nibble); CDF::from(&mut data[index]) } #[inline(always)] fn lookup( data: &[s16], stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> &s16 { let index = Self::lookup_lin(stride_byte, selected_context, actual_context, high_nibble); &data[index] } #[allow(unused_variables)] #[inline(always)] fn score_index( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { let which = Self::which(); assert!(which < WhichPrior::NUM_PRIORS as usize); assert!(actual_context < 256); if let Some(nibble) = high_nibble { WhichPrior::NUM_PRIORS as usize * (actual_context + 4096 + 256 * nibble as usize) + which } else { WhichPrior::NUM_PRIORS as usize * (actual_context + 256 * (stride_byte >> 4) as usize) + which } } fn which() -> usize; } #[inline(always)] fn upper_score_index(stride_byte: u8, _selected_context: u8, actual_context: usize) -> usize { actual_context + 256 * (stride_byte >> 4) as usize } #[inline(always)] fn lower_score_index( _stride_byte: u8, _selected_context: u8, actual_context: usize, high_nibble: u8, ) -> usize { debug_assert!(actual_context < 256); debug_assert!(high_nibble < 16); actual_context + 4096 + 256 * high_nibble as usize } #[allow(unused_variables)] #[inline(always)] fn stride_lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { if let Some(nibble) = high_nibble { 1 + 2 * (actual_context | ((stride_byte as usize & 0x0f) << 8) | ((nibble as usize) << 12)) } else { 2 * (actual_context | ((stride_byte as usize) << 8)) } } pub struct Stride1Prior {} impl Stride1Prior { #[inline(always)] pub fn offset() -> usize { 0 } } impl Prior for Stride1Prior { #[inline(always)] fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) } #[inline(always)] fn which() -> usize { WhichPrior::STRIDE1 as usize } } /*impl StridePrior for Stride1Prior { const STRIDE_OFFSET:usize = 0; }*/ pub struct Stride2Prior {} impl Stride2Prior { #[inline(always)] pub fn offset() -> usize { 1 } } impl Prior for Stride2Prior { #[inline(always)] fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) } #[inline] fn which() -> usize { WhichPrior::STRIDE2 as usize } } /*impl StridePrior for Stride2Prior { const STRIDE_OFFSET:usize = 1; }*/ pub struct Stride3Prior {} impl Stride3Prior { #[inline(always)] pub fn offset() -> usize { 2 } } impl Prior for Stride3Prior { #[inline(always)] fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) } #[inline(always)] fn which() -> usize { WhichPrior::STRIDE3 as usize } } /*impl StridePrior for Stride3Prior { const STRIDE_OFFSET:usize = 2; }*/ pub struct Stride4Prior {} impl Stride4Prior { #[inline(always)] pub fn offset() -> usize { 3 } } impl Prior for Stride4Prior { #[inline(always)] fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) } #[inline] fn which() -> usize { WhichPrior::STRIDE4 as usize } } /*impl StridePrior for Stride4Prior { const STRIDE_OFFSET:usize = 3; }*/ /*pub struct Stride8Prior{ } impl StridePrior for Stride8Prior { const STRIDE_OFFSET:usize = 7; } impl Stride8Prior { #[inline(always)] pub fn offset() -> usize{ 7 } } impl Prior for Stride8Prior { fn lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) } #[inline] fn which() -> usize { WhichPrior::STRIDE8 as usize } } */ pub struct CMPrior {} impl Prior for CMPrior { #[allow(unused_variables)] #[inline(always)] fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { if let Some(nibble) = high_nibble { (nibble as usize + 1) + 17 * actual_context } else { 17 * actual_context } } #[inline(always)] fn which() -> usize { WhichPrior::CM as usize } } pub struct FastCMPrior {} impl Prior for FastCMPrior { #[allow(unused_variables)] #[inline(always)] fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { if let Some(nibble) = high_nibble { 2 * actual_context } else { 2 * actual_context + 1 } } #[inline(always)] fn which() -> usize { WhichPrior::FAST_CM as usize } } pub struct SlowCMPrior {} impl Prior for SlowCMPrior { #[allow(unused_variables)] #[inline(always)] fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { if let Some(nibble) = high_nibble { (nibble as usize + 1) + 17 * actual_context } else { 17 * actual_context } } #[inline] fn which() -> usize { WhichPrior::SLOW_CM as usize } } pub struct AdvPrior {} impl Prior for AdvPrior { #[allow(unused_variables)] #[inline(always)] fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { if let Some(nibble) = high_nibble { 65536 + (actual_context | ((stride_byte as usize) << 8) | ((nibble as usize & 0xf) << 16)) } else { actual_context | ((stride_byte as usize & 0xf0) << 8) } } #[inline(always)] fn which() -> usize { WhichPrior::ADV as usize } } pub struct CDF<'a> { cdf: &'a mut s16, } impl<'a> CDF<'a> { #[inline(always)] pub fn cost(&self, nibble_u8: u8) -> floatX { let nibble = nibble_u8 as usize & 0xf; let mut pdf = self.cdf[nibble]; if nibble_u8 != 0 { pdf -= self.cdf[(nibble - 1)]; } FastLog2u16(self.cdf[15] as u16) - FastLog2u16(pdf as u16) } #[inline(always)] pub fn update(&mut self, nibble_u8: u8, speed: (u16, u16)) { let mut cdf = *self.cdf; let increment_v = s16::splat(speed.0 as i16); let one_to_16 = s16::from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]); let mask_v: s16 = one_to_16.simd_gt(s16::splat(i16::from(nibble_u8))).to_int(); cdf = cdf + (increment_v & mask_v); if cdf[15] >= speed.1 as i16 { let cdf_bias = one_to_16; cdf = cdf + cdf_bias - ((cdf + cdf_bias) >> 2); } *self.cdf = cdf; } } impl<'a> From<&'a mut s16> for CDF<'a> { #[inline(always)] fn from(cdf: &'a mut s16) -> CDF<'a> { CDF { cdf } } } pub fn init_cdfs(cdfs: &mut [s16]) { for item in cdfs.iter_mut() { *item = s16::from([4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64]); } } pub struct PriorEval< 'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator, > { input: InputPair<'a>, context_map: interface::PredictionModeContextMap>, block_type: u8, local_byte_offset: usize, _nop: >::AllocatedMemory, cm_priors: >::AllocatedMemory, slow_cm_priors: >::AllocatedMemory, fast_cm_priors: >::AllocatedMemory, stride_priors: [>::AllocatedMemory; 4], adv_priors: >::AllocatedMemory, _stride_pyramid_leaves: [u8; find_stride::NUM_LEAF_NODES], score: >::AllocatedMemory, cm_speed: [(u16, u16); 2], stride_speed: [(u16, u16); 2], cur_stride: u8, } impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> PriorEval<'a, Alloc> { pub fn new( alloc: &mut Alloc, input: InputPair<'a>, stride: [u8; find_stride::NUM_LEAF_NODES], prediction_mode: interface::PredictionModeContextMap>, params: &BrotliEncoderParams, ) -> Self { let do_alloc = params.prior_bitmask_detection != 0; let mut cm_speed = prediction_mode.context_map_speed(); let mut stride_speed = prediction_mode.stride_context_speed(); if cm_speed[0] == (0, 0) { cm_speed[0] = params.literal_adaptation[2] } if cm_speed[0] == (0, 0) { cm_speed[0] = DEFAULT_SPEED; } if cm_speed[1] == (0, 0) { cm_speed[1] = params.literal_adaptation[3] } if cm_speed[1] == (0, 0) { cm_speed[1] = cm_speed[0]; } if stride_speed[0] == (0, 0) { stride_speed[0] = params.literal_adaptation[0] } if stride_speed[0] == (0, 0) { stride_speed[0] = DEFAULT_SPEED; } if stride_speed[1] == (0, 0) { stride_speed[1] = params.literal_adaptation[1] } if stride_speed[1] == (0, 0) { stride_speed[1] = stride_speed[0]; } let mut ret = PriorEval:: { input, context_map: prediction_mode, block_type: 0, cur_stride: 1, local_byte_offset: 0, _nop: alloc_default::(), cm_priors: alloc_if::(do_alloc, alloc, CONTEXT_MAP_PRIOR_SIZE), slow_cm_priors: alloc_if::(do_alloc, alloc, CONTEXT_MAP_PRIOR_SIZE), fast_cm_priors: alloc_if::(do_alloc, alloc, CONTEXT_MAP_PRIOR_SIZE), stride_priors: [ alloc_if::(do_alloc, alloc, STRIDE_PRIOR_SIZE), alloc_if::(do_alloc, alloc, STRIDE_PRIOR_SIZE), alloc_if::(do_alloc, alloc, STRIDE_PRIOR_SIZE), alloc_if::(do_alloc, alloc, STRIDE_PRIOR_SIZE), /*if do_alloc {m16x16.alloc_cell(STRIDE_PRIOR_SIZE)} else { Alloc16x16::AllocatedMemory::default()},*/ ], adv_priors: alloc_if::(do_alloc, alloc, ADV_PRIOR_SIZE), _stride_pyramid_leaves: stride, score: alloc_if::(do_alloc, alloc, 8192), cm_speed, stride_speed, }; init_cdfs(ret.cm_priors.slice_mut()); init_cdfs(ret.slow_cm_priors.slice_mut()); init_cdfs(ret.fast_cm_priors.slice_mut()); init_cdfs(ret.stride_priors[0].slice_mut()); init_cdfs(ret.stride_priors[1].slice_mut()); init_cdfs(ret.stride_priors[2].slice_mut()); init_cdfs(ret.stride_priors[3].slice_mut()); //init_cdfs(ret.stride_priors[4].slice_mut()); init_cdfs(ret.adv_priors.slice_mut()); ret } pub fn choose_bitmask(&mut self) { let epsilon = 6.0; let mut max_popularity = 0u32; let mut max_popularity_index = 0u8; assert_eq!(WhichPrior::NUM_PRIORS as usize, 8); let mut popularity = [0u32; 8]; let mut bitmask = [0u8; super::interface::NUM_MIXING_VALUES]; for (i, score) in self.score.slice().iter().enumerate() { let cm_score = score[WhichPrior::CM as usize]; let slow_cm_score = score[WhichPrior::SLOW_CM as usize]; let fast_cm_score = score[WhichPrior::FAST_CM as usize] + 16.0; let stride1_score = score[WhichPrior::STRIDE1 as usize]; let stride2_score = score[WhichPrior::STRIDE2 as usize]; let stride3_score = score[WhichPrior::STRIDE3 as usize] + 16.0; let stride4_score = score[WhichPrior::STRIDE4 as usize]; //let stride8_score = score[WhichPrior::STRIDE8] * 1.125 + 16.0; let stride8_score = stride4_score + 1.0; // FIXME: never lowest -- ignore stride 8 let stride_score = min( stride1_score as u64, min( stride2_score as u64, min( stride3_score as u64, min(stride4_score as u64, stride8_score as u64), ), ), ); let adv_score = score[WhichPrior::ADV as usize]; if adv_score + epsilon < (stride_score as floatX) && adv_score + epsilon < cm_score && adv_score + epsilon < slow_cm_score && adv_score + epsilon < fast_cm_score { bitmask[i] = 1; } else if slow_cm_score + epsilon < (stride_score as floatX) && slow_cm_score + epsilon < cm_score && slow_cm_score + epsilon < fast_cm_score { bitmask[i] = 2; } else if fast_cm_score + epsilon < (stride_score as floatX) && fast_cm_score + epsilon < cm_score { bitmask[i] = 3; } else if epsilon + (stride_score as floatX) < cm_score { bitmask[i] = WhichPrior::STRIDE1 as u8; if stride_score == stride8_score as u64 { //bitmask[i] = WhichPrior::STRIDE8 as u8; } if stride_score == stride4_score as u64 { bitmask[i] = WhichPrior::STRIDE4 as u8; } if stride_score == stride3_score as u64 { bitmask[i] = WhichPrior::STRIDE3 as u8; } if stride_score == stride2_score as u64 { bitmask[i] = WhichPrior::STRIDE2 as u8; } if stride_score == stride1_score as u64 { bitmask[i] = WhichPrior::STRIDE1 as u8; } } else { bitmask[i] = 0; } if stride_score == 0 { bitmask[i] = max_popularity_index; //eprintln!("Miss {}[{}] ~ {}", bitmask[i], i, max_popularity_index); } else { popularity[bitmask[i] as usize] += 1; if popularity[bitmask[i] as usize] > max_popularity { max_popularity = popularity[bitmask[i] as usize]; max_popularity_index = bitmask[i]; } //eprintln!("Score {} {} {} {} {}: {}[{}] max={},{}", cm_score, adv_score, slow_cm_score, fast_cm_score, stride_score, bitmask[i], i, max_popularity, max_popularity_index); } } self.context_map.set_mixing_values(&bitmask); } pub fn free(&mut self, alloc: &mut Alloc) { >::free_cell(alloc, core::mem::take(&mut self.score)); >::free_cell(alloc, core::mem::take(&mut self.cm_priors)); >::free_cell(alloc, core::mem::take(&mut self.slow_cm_priors)); >::free_cell(alloc, core::mem::take(&mut self.fast_cm_priors)); >::free_cell(alloc, core::mem::take(&mut self.stride_priors[0])); >::free_cell(alloc, core::mem::take(&mut self.stride_priors[1])); >::free_cell(alloc, core::mem::take(&mut self.stride_priors[2])); >::free_cell(alloc, core::mem::take(&mut self.stride_priors[3])); //>::free_cell(alloc, core::mem::replace(&mut self.stride_priors[4], alloc_default::())); >::free_cell(alloc, core::mem::take(&mut self.adv_priors)); } pub fn take_prediction_mode( &mut self, ) -> interface::PredictionModeContextMap> { core::mem::replace( &mut self.context_map, interface::PredictionModeContextMap::> { literal_context_map: InputReferenceMut::default(), predmode_speed_and_distance_context_map: InputReferenceMut::default(), }, ) } fn update_cost_base( &mut self, stride_prior: [u8; 8], stride_prior_offset: usize, selected_bits: u8, cm_prior: usize, literal: u8, ) { let mut l_score = v8::splat(0.0); let mut h_score = v8::splat(0.0); let base_stride_prior = stride_prior[stride_prior_offset.wrapping_sub(self.cur_stride as usize) & 7]; let hscore_index = upper_score_index(base_stride_prior, selected_bits, cm_prior); let lscore_index = lower_score_index(base_stride_prior, selected_bits, cm_prior, literal >> 4); { type CurPrior = CMPrior; let mut cdf = CurPrior::lookup_mut( self.cm_priors.slice_mut(), base_stride_prior, selected_bits, cm_prior, None, ); h_score[CurPrior::which()] = cdf.cost(literal >> 4); cdf.update(literal >> 4, self.cm_speed[1]); } { type CurPrior = CMPrior; let mut cdf = CurPrior::lookup_mut( self.cm_priors.slice_mut(), base_stride_prior, selected_bits, cm_prior, Some(literal >> 4), ); l_score[CurPrior::which()] = cdf.cost(literal & 0xf); cdf.update(literal & 0xf, self.cm_speed[0]); } { type CurPrior = SlowCMPrior; let mut cdf = CurPrior::lookup_mut( self.slow_cm_priors.slice_mut(), base_stride_prior, selected_bits, cm_prior, None, ); h_score[CurPrior::which()] = cdf.cost(literal >> 4); cdf.update(literal >> 4, (0, 1024)); } { type CurPrior = SlowCMPrior; let mut cdf = CurPrior::lookup_mut( self.slow_cm_priors.slice_mut(), base_stride_prior, selected_bits, cm_prior, Some(literal >> 4), ); l_score[CurPrior::which()] = cdf.cost(literal & 0xf); cdf.update(literal & 0xf, (0, 1024)); } { type CurPrior = FastCMPrior; let mut cdf = CurPrior::lookup_mut( self.fast_cm_priors.slice_mut(), base_stride_prior, selected_bits, cm_prior, None, ); h_score[CurPrior::which()] = cdf.cost(literal >> 4); cdf.update(literal >> 4, self.cm_speed[0]); } { type CurPrior = FastCMPrior; let mut cdf = CurPrior::lookup_mut( self.fast_cm_priors.slice_mut(), base_stride_prior, selected_bits, cm_prior, Some(literal >> 4), ); l_score[CurPrior::which()] = cdf.cost(literal & 0xf); cdf.update(literal & 0xf, self.cm_speed[0]); } { type CurPrior = Stride1Prior; let mut cdf = CurPrior::lookup_mut( self.stride_priors[0].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, None, ); h_score[CurPrior::which()] = cdf.cost(literal >> 4); cdf.update(literal >> 4, self.stride_speed[1]); } { type CurPrior = Stride1Prior; let mut cdf = CurPrior::lookup_mut( self.stride_priors[0].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, Some(literal >> 4), ); l_score[CurPrior::which()] = cdf.cost(literal & 0xf); cdf.update(literal & 0xf, self.stride_speed[0]); } { type CurPrior = Stride2Prior; let mut cdf = CurPrior::lookup_mut( self.stride_priors[1].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, None, ); h_score[CurPrior::which()] = cdf.cost(literal >> 4); cdf.update(literal >> 4, self.stride_speed[1]); } { type CurPrior = Stride2Prior; let mut cdf = CurPrior::lookup_mut( self.stride_priors[1].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, Some(literal >> 4), ); l_score[CurPrior::which()] = cdf.cost(literal & 0xf); cdf.update(literal & 0xf, self.stride_speed[0]); } { type CurPrior = Stride3Prior; let mut cdf = CurPrior::lookup_mut( self.stride_priors[2].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, None, ); h_score[CurPrior::which()] = cdf.cost(literal >> 4); cdf.update(literal >> 4, self.stride_speed[1]); } { type CurPrior = Stride3Prior; let mut cdf = CurPrior::lookup_mut( self.stride_priors[2].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, Some(literal >> 4), ); l_score[CurPrior::which()] = cdf.cost(literal & 0xf); cdf.update(literal & 0xf, self.stride_speed[0]); } { type CurPrior = Stride4Prior; let mut cdf = CurPrior::lookup_mut( self.stride_priors[3].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, None, ); h_score[CurPrior::which()] = cdf.cost(literal >> 4); cdf.update(literal >> 4, self.stride_speed[1]); } { type CurPrior = Stride4Prior; let mut cdf = CurPrior::lookup_mut( self.stride_priors[3].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, Some(literal >> 4), ); l_score[CurPrior::which()] = cdf.cost(literal & 0xf); cdf.update(literal & 0xf, self.stride_speed[0]); } /* { type CurPrior = Stride8Prior; let mut cdf = CurPrior::lookup_mut(self.stride_priors[4].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], selected_bits, cm_prior, None); h_score[CurPrior::which()] = cdf.cost(literal>>4); cdf.update(literal >> 4, self.stride_speed[1]); } { type CurPrior = Stride8Prior; let mut cdf = CurPrior::lookup_mut(self.stride_priors[4].slice_mut(), stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], selected_bits, cm_prior, Some(literal >> 4)); l_score[CurPrior::which()] = cdf.cost(literal&0xf); cdf.update(literal&0xf, self.stride_speed[0]); } */ type CurPrior = AdvPrior; { let mut cdf = CurPrior::lookup_mut( self.adv_priors.slice_mut(), base_stride_prior, selected_bits, cm_prior, None, ); h_score[CurPrior::which()] = cdf.cost(literal >> 4); cdf.update(literal >> 4, self.stride_speed[1]); } { let mut cdf = CurPrior::lookup_mut( self.adv_priors.slice_mut(), base_stride_prior, selected_bits, cm_prior, Some(literal >> 4), ); l_score[CurPrior::which()] = cdf.cost(literal & 0xf); cdf.update(literal & 0xf, self.stride_speed[0]); } self.score.slice_mut()[lscore_index] += l_score; self.score.slice_mut()[hscore_index] += h_score; } } impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> IRInterpreter for PriorEval<'a, Alloc> { #[inline] fn inc_local_byte_offset(&mut self, inc: usize) { self.local_byte_offset += inc; } #[inline] fn local_byte_offset(&self) -> usize { self.local_byte_offset } #[inline] fn update_block_type(&mut self, new_type: u8, stride: u8) { self.block_type = new_type; self.cur_stride = stride; } #[inline] fn block_type(&self) -> u8 { self.block_type } #[inline] fn literal_data_at_offset(&self, index: usize) -> u8 { self.input[index] } #[inline] fn literal_context_map(&self) -> &[u8] { self.context_map.literal_context_map.slice() } #[inline] fn prediction_mode(&self) -> crate::interface::LiteralPredictionModeNibble { self.context_map.literal_prediction_mode() } #[inline] fn update_cost( &mut self, stride_prior: [u8; 8], stride_prior_offset: usize, selected_bits: u8, cm_prior: usize, literal: u8, ) { //let stride = self.cur_stride as usize; self.update_cost_base( stride_prior, stride_prior_offset, selected_bits, cm_prior, literal, ) } } impl<'a, 'b, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> interface::CommandProcessor<'b> for PriorEval<'a, Alloc> { #[inline] fn push(&mut self, val: interface::Command>) { push_base(self, val) } } brotli-8.0.2/src/enc/reader.rs000064400000000000000000000174401046102023000143000ustar 00000000000000use alloc::{Allocator, SliceWrapperMut}; #[cfg(feature = "std")] use std::io; #[cfg(feature = "std")] use std::io::{Error, ErrorKind, Read}; #[cfg(feature = "std")] pub use alloc_stdlib::StandardAlloc; use brotli_decompressor::CustomRead; #[cfg(feature = "std")] pub use brotli_decompressor::{IntoIoReader, IoReaderWrapper, IoWriterWrapper}; use super::backward_references::BrotliEncoderParams; use super::combined_alloc::BrotliAlloc; use super::encode::{ BrotliEncoderDestroyInstance, BrotliEncoderOperation, BrotliEncoderParameter, BrotliEncoderStateStruct, }; use super::interface; use crate::enc::combined_alloc::allocate; #[cfg(feature = "std")] pub struct CompressorReaderCustomAlloc, Alloc: BrotliAlloc>( CompressorReaderCustomIo, BufferType, Alloc>, ); #[cfg(feature = "std")] impl, Alloc: BrotliAlloc> CompressorReaderCustomAlloc { pub fn new(r: R, buffer: BufferType, alloc: Alloc, q: u32, lgwin: u32) -> Self { CompressorReaderCustomAlloc::(CompressorReaderCustomIo::< Error, IntoIoReader, BufferType, Alloc, >::new( IntoIoReader::(r), buffer, alloc, Error::new(ErrorKind::InvalidData, "Invalid Data"), q, lgwin, )) } pub fn get_ref(&self) -> &R { &self.0.get_ref().0 } pub fn into_inner(self) -> R { self.0.into_inner().0 } } #[cfg(feature = "std")] impl, Alloc: BrotliAlloc> Read for CompressorReaderCustomAlloc { fn read(&mut self, buf: &mut [u8]) -> Result { self.0.read(buf) } } #[cfg(feature = "std")] pub struct CompressorReader( CompressorReaderCustomAlloc< R, >::AllocatedMemory, StandardAlloc, >, ); #[cfg(feature = "std")] impl CompressorReader { pub fn new(r: R, buffer_size: usize, q: u32, lgwin: u32) -> Self { let mut alloc = StandardAlloc::default(); let buffer = allocate::( &mut alloc, if buffer_size == 0 { 4096 } else { buffer_size }, ); CompressorReader::(CompressorReaderCustomAlloc::new(r, buffer, alloc, q, lgwin)) } pub fn with_params(r: R, buffer_size: usize, params: &BrotliEncoderParams) -> Self { let mut reader = Self::new(r, buffer_size, params.quality as u32, params.lgwin as u32); (reader.0).0.state.0.params = params.clone(); reader } pub fn get_ref(&self) -> &R { self.0.get_ref() } pub fn into_inner(self) -> R { self.0.into_inner() } } #[cfg(feature = "std")] impl Read for CompressorReader { fn read(&mut self, buf: &mut [u8]) -> Result { self.0.read(buf) } } pub struct CompressorReaderCustomIo< ErrType, R: CustomRead, BufferType: SliceWrapperMut, Alloc: BrotliAlloc, > { input_buffer: BufferType, total_out: Option, input_offset: usize, input_len: usize, input: R, input_eof: bool, error_if_invalid_data: Option, state: StateWrapper, } struct StateWrapper(BrotliEncoderStateStruct); impl Drop for StateWrapper { fn drop(&mut self) { BrotliEncoderDestroyInstance(&mut self.0); } } impl, BufferType: SliceWrapperMut, Alloc: BrotliAlloc> CompressorReaderCustomIo { pub fn new( r: R, buffer: BufferType, alloc: Alloc, invalid_data_error_type: ErrType, q: u32, lgwin: u32, ) -> Self { let mut ret = CompressorReaderCustomIo { input_buffer: buffer, total_out: Some(0), input_offset: 0, input_len: 0, input_eof: false, input: r, state: StateWrapper(BrotliEncoderStateStruct::new(alloc)), error_if_invalid_data: Some(invalid_data_error_type), }; ret.state .0 .set_parameter(BrotliEncoderParameter::BROTLI_PARAM_QUALITY, q); ret.state .0 .set_parameter(BrotliEncoderParameter::BROTLI_PARAM_LGWIN, lgwin); ret } pub fn copy_to_front(&mut self) { let avail_in = self.input_len - self.input_offset; if self.input_offset == self.input_buffer.slice_mut().len() { self.input_offset = 0; self.input_len = 0; } else if self.input_offset + 256 > self.input_buffer.slice_mut().len() && avail_in < self.input_offset { let (first, second) = self .input_buffer .slice_mut() .split_at_mut(self.input_offset); first[0..avail_in].clone_from_slice(&second[0..avail_in]); self.input_len -= self.input_offset; self.input_offset = 0; } } pub fn into_inner(self) -> R { match self { CompressorReaderCustomIo { input_buffer: _ib, total_out: _to, input_offset: _io, input_len: _len, input, input_eof: _ieof, error_if_invalid_data: _eiid, state: _state, } => input, } } pub fn get_ref(&self) -> &R { &self.input } } impl, BufferType: SliceWrapperMut, Alloc: BrotliAlloc> CustomRead for CompressorReaderCustomIo { fn read(&mut self, buf: &mut [u8]) -> Result { let mut nop_callback = |_data: &mut interface::PredictionModeContextMap, _cmds: &mut [interface::StaticCommand], _mb: interface::InputPair, _mfv: &mut Alloc| (); let mut output_offset: usize = 0; let mut avail_out = buf.len(); let mut avail_in = self.input_len - self.input_offset; while output_offset == 0 { if self.input_len < self.input_buffer.slice_mut().len() && !self.input_eof { match self .input .read(&mut self.input_buffer.slice_mut()[self.input_len..]) { Err(e) => return Err(e), Ok(size) => { if size == 0 { self.input_eof = true; } else { self.input_len += size; avail_in = self.input_len - self.input_offset; } } } } let op: BrotliEncoderOperation; if avail_in == 0 { op = BrotliEncoderOperation::BROTLI_OPERATION_FINISH; } else { op = BrotliEncoderOperation::BROTLI_OPERATION_PROCESS; } let ret = self.state.0.compress_stream( op, &mut avail_in, self.input_buffer.slice_mut(), &mut self.input_offset, &mut avail_out, buf, &mut output_offset, &mut self.total_out, &mut nop_callback, ); if avail_in == 0 { self.copy_to_front(); } if !ret { return Err(self.error_if_invalid_data.take().unwrap()); } if self.state.0.is_finished() { break; } } Ok(output_offset) } } brotli-8.0.2/src/enc/singlethreading.rs000064400000000000000000000151651046102023000162070ustar 00000000000000use alloc::{Allocator, SliceWrapper}; use core::marker::PhantomData; use core::mem; #[cfg(feature = "std")] use std; use super::backward_references::UnionHasher; use crate::enc::threading::{ BatchSpawnable, BatchSpawnableLite, BrotliEncoderThreadError, CompressMulti, CompressionThreadResult, InternalOwned, InternalSendAlloc, Joinable, Owned, OwnedRetriever, PoisonedThreadError, SendAlloc, }; use crate::enc::{BrotliAlloc, BrotliEncoderParams}; pub struct SingleThreadedJoinable { result: Result, } impl Joinable for SingleThreadedJoinable { fn join(self) -> Result { self.result } } #[cfg(feature = "std")] pub struct SingleThreadedOwnedRetriever(std::sync::RwLock); #[cfg(feature = "std")] impl OwnedRetriever for SingleThreadedOwnedRetriever { fn view T>(&self, f: F) -> Result { Ok(f(&*self.0.read().unwrap())) } fn unwrap(self) -> Result { Ok(self.0.into_inner().unwrap()) } } #[cfg(feature = "std")] impl SingleThreadedOwnedRetriever { fn new(u: U) -> Self { SingleThreadedOwnedRetriever(std::sync::RwLock::new(u)) } } #[cfg(not(feature = "std"))] pub struct SingleThreadedOwnedRetriever(U); #[cfg(not(feature = "std"))] impl SingleThreadedOwnedRetriever { fn new(u: U) -> Self { SingleThreadedOwnedRetriever(u) } } #[cfg(not(feature = "std"))] impl OwnedRetriever for SingleThreadedOwnedRetriever { fn view T>(&self, f: F) -> Result { Ok(f(&self.0)) } fn unwrap(self) -> Result { Ok(self.0) } } #[derive(Default)] pub struct SingleThreadedSpawner {} impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > BatchSpawnable for SingleThreadedSpawner where >::AllocatedMemory: Send + 'static, { type JoinHandle = SingleThreadedJoinable; type FinalJoinHandle = SingleThreadedOwnedRetriever; fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle { SingleThreadedOwnedRetriever::::new( mem::replace(input, Owned(InternalOwned::Borrowed)).unwrap(), ) } fn spawn ReturnValue + Send + 'static + Copy>( &mut self, handle: &mut Self::FinalJoinHandle, work: &mut SendAlloc, index: usize, num_threads: usize, f: F, ) { let (alloc, extra_input) = work.replace_with_default(); let ret = handle.view(|sub_view| f(extra_input, index, num_threads, sub_view, alloc)); *work = SendAlloc(InternalSendAlloc::Join(SingleThreadedJoinable { result: Ok(ret.unwrap()), })); } } impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > BatchSpawnableLite for SingleThreadedSpawner where >::AllocatedMemory: Send + 'static, { type JoinHandle = >::JoinHandle; type FinalJoinHandle = >::FinalJoinHandle; fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle { >::make_spawner(self, input) } fn spawn( &mut self, handle: &mut Self::FinalJoinHandle, alloc_per_thread: &mut SendAlloc, index: usize, num_threads: usize, f: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, ) { >::spawn( self, handle, alloc_per_thread, index, num_threads, f, ) } } pub fn compress_multi< Alloc: BrotliAlloc + Send + 'static, SliceW: SliceWrapper + Send + 'static + Sync, >( params: &BrotliEncoderParams, owned_input: &mut Owned, output: &mut [u8], alloc_per_thread: &mut [SendAlloc< CompressionThreadResult, UnionHasher, Alloc, , UnionHasher, Alloc, SliceW, >>::JoinHandle, >], ) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send, >::AllocatedMemory: Send, { CompressMulti( params, owned_input, output, alloc_per_thread, &mut SingleThreadedSpawner::default(), ) } pub struct WorkerPool { a: PhantomData, b: PhantomData, c: PhantomData, d: PhantomData, } pub fn new_work_pool(_num_threads: usize) -> WorkerPool { WorkerPool:: { a: PhantomData, b: PhantomData, c: PhantomData, d: PhantomData, } } pub fn compress_worker_pool< Alloc: BrotliAlloc + Send + 'static, SliceW: SliceWrapper + Send + 'static + Sync, >( params: &BrotliEncoderParams, owned_input: &mut Owned, output: &mut [u8], alloc_per_thread: &mut [SendAlloc< CompressionThreadResult, UnionHasher, Alloc, , UnionHasher, Alloc, SliceW, >>::JoinHandle, >], _worker_pool: &mut WorkerPool< CompressionThreadResult, UnionHasher, Alloc, (SliceW, BrotliEncoderParams), >, ) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send, >::AllocatedMemory: Send, { compress_multi(params, owned_input, output, alloc_per_thread) } brotli-8.0.2/src/enc/static_dict.rs000064400000000000000000001711621046102023000153320ustar 00000000000000use core::cmp::{max, min}; pub const kNumDistanceCacheEntries: usize = 4; use super::super::dictionary::{ kBrotliDictionary, kBrotliDictionaryOffsetsByLength, kBrotliDictionarySizeBitsByLength, }; use super::static_dict_lut::{ kDictHashMul32, kDictNumBits, kStaticDictionaryBuckets, kStaticDictionaryWords, DictWord, }; #[allow(unused)] static kUppercaseFirst: u8 = 10u8; #[allow(unused)] static kOmitLastNTransforms: [u8; 10] = [0, 12, 27, 23, 42, 63, 56, 48, 59, 64]; pub struct BrotliDictionary { pub size_bits_by_length: &'static [u8; 25], pub offsets_by_length: &'static [u32; 25], pub data: &'static [u8; 122784], } pub static kBrotliEncDictionary: BrotliDictionary = BrotliDictionary { size_bits_by_length: &kBrotliDictionarySizeBitsByLength, offsets_by_length: &kBrotliDictionaryOffsetsByLength, data: &kBrotliDictionary, }; #[inline(always)] pub fn BrotliGetDictionary() -> &'static BrotliDictionary { &kBrotliEncDictionary } #[inline(always)] pub fn BROTLI_UNALIGNED_LOAD32(sl: &[u8]) -> u32 { let mut p = [0u8; 4]; p[..].clone_from_slice(sl.split_at(4).0); (p[0] as u32) | ((p[1] as u32) << 8) | ((p[2] as u32) << 16) | ((p[3] as u32) << 24) } #[inline(always)] pub fn Hash(data: &[u8]) -> u32 { let h: u32 = BROTLI_UNALIGNED_LOAD32(data).wrapping_mul(kDictHashMul32); h >> (32i32 - kDictNumBits) } #[inline(always)] pub fn BROTLI_UNALIGNED_LOAD64(sl: &[u8]) -> u64 { let mut p = [0u8; 8]; p[..].clone_from_slice(sl.split_at(8).0); (p[0] as u64) | ((p[1] as u64) << 8) | ((p[2] as u64) << 16) | ((p[3] as u64) << 24) | ((p[4] as u64) << 32) | ((p[5] as u64) << 40) | ((p[6] as u64) << 48) | ((p[7] as u64) << 56) } #[inline(always)] pub fn BROTLI_UNALIGNED_STORE64(outp: &mut [u8], v: u64) { let p = [ (v & 0xff) as u8, ((v >> 8) & 0xff) as u8, ((v >> 16) & 0xff) as u8, ((v >> 24) & 0xff) as u8, ((v >> 32) & 0xff) as u8, ((v >> 40) & 0xff) as u8, ((v >> 48) & 0xff) as u8, ((v >> 56) & 0xff) as u8, ]; outp.split_at_mut(8).0.clone_from_slice(&p[..]); } macro_rules! sub_match { ($s1 : expr, $s2 : expr, $limit : expr, $matched : expr, $split_pair1 : expr, $split_pair2 : expr, $s1_lo : expr, $s2_lo : expr, $s1_as_64 : expr, $s2_as_64 : expr, $vec_len: expr) => { $split_pair1 = $s1.split_at($vec_len); $s1_lo[..$vec_len].clone_from_slice($split_pair1.0); $s1 = $split_pair1.1; $split_pair2 = $s2.split_at($vec_len); $s2_lo[..$vec_len].clone_from_slice($split_pair2.0); $s2 = $split_pair2.1; $limit -= $vec_len; for index in 0..($vec_len >> 3) { $s1_as_64 = BROTLI_UNALIGNED_LOAD64(&$s1_lo[(index << 3)..((index + 1) << 3)]); $s2_as_64 = BROTLI_UNALIGNED_LOAD64(&$s2_lo[(index << 3)..((index + 1) << 3)]); if $s2_as_64 == $s1_as_64 { $matched = $matched.wrapping_add(8) as u32 as usize; } else { $matched = $matched .wrapping_add((($s2_as_64 ^ $s1_as_64).trailing_zeros() >> 3) as usize) as u32 as usize; return $matched; } } }; } macro_rules! sub_match8 { ($s1 : expr, $s2 : expr, $limit : expr, $matched : expr, $s1_as_64 : expr, $s2_as_64 : expr) => { $limit -= 8; $s1_as_64 = BROTLI_UNALIGNED_LOAD64($s1); $s1 = $s1.split_at(8).1; $s2_as_64 = BROTLI_UNALIGNED_LOAD64($s2); $s2 = $s2.split_at(8).1; if $s2_as_64 == $s1_as_64 { $matched = $matched.wrapping_add(8) as u32 as usize; } else { $matched = $matched .wrapping_add((($s2_as_64 ^ $s1_as_64).trailing_zeros() >> 3) as usize) as u32 as usize; return $matched; } }; } // factor of 10 slower (example takes 158s, not 30, and for the 30 second run it took 15 of them) #[allow(unused)] pub fn SlowerFindMatchLengthWithLimit(s1: &[u8], s2: &[u8], limit: usize) -> usize { for index in 0..limit { if s1[index] != s2[index] { return index; } } limit } // factor of 5 slower (example takes 90 seconds) #[allow(unused)] pub fn FindMatchLengthWithLimit(s1: &[u8], s2: &[u8], limit: usize) -> usize { for (index, pair) in s1[..limit].iter().zip(s2[..limit].iter()).enumerate() { if *pair.0 != *pair.1 { return index; } } limit } #[allow(unused)] pub fn FindMatchLengthWithLimitMin4(s1: &[u8], s2: &[u8], limit: usize) -> usize { let (s1_start, s1_rest) = s1.split_at(5); let (s2_start, s2_rest) = s2.split_at(5); let v0 = BROTLI_UNALIGNED_LOAD32(s1_start); let v1 = BROTLI_UNALIGNED_LOAD32(s2_start); let beyond_ok = s1_start[4] != s2_start[4]; if v0 != v1 { return 0; } if limit <= 4 || beyond_ok { return min(limit, 4); } ComplexFindMatchLengthWithLimit(s1_rest, s2_rest, limit - 5) + 5 } #[inline] pub fn ComplexFindMatchLengthWithLimit(mut s1: &[u8], mut s2: &[u8], mut limit: usize) -> usize { let mut matched: usize = 0usize; let mut s1_as_64: u64; let mut s2_as_64: u64; if limit >= 8 { sub_match8!(s1, s2, limit, matched, s1_as_64, s2_as_64); if limit >= 16 { let mut split_pair1: (&[u8], &[u8]); let mut split_pair2: (&[u8], &[u8]); { let mut s1_lo = [0u8; 16]; let mut s1_hi = [0u8; 16]; sub_match!( s1, s2, limit, matched, split_pair1, split_pair2, s1_lo, s1_hi, s1_as_64, s2_as_64, 16 ); } if limit >= 32 { let mut s1_lo_a = [0u8; 128]; let mut s1_hi_a = [0u8; 128]; sub_match!( s1, s2, limit, matched, split_pair1, split_pair2, s1_lo_a, s1_hi_a, s1_as_64, s2_as_64, 32 ); if limit >= 64 { sub_match!( s1, s2, limit, matched, split_pair1, split_pair2, s1_lo_a, s1_hi_a, s1_as_64, s2_as_64, 64 ); while limit >= 128 { sub_match!( s1, s2, limit, matched, split_pair1, split_pair2, s1_lo_a, s1_hi_a, s1_as_64, s2_as_64, 128 ); } } } } while limit >= 8 { sub_match8!(s1, s2, limit, matched, s1_as_64, s2_as_64); } } assert!(s1.len() >= (limit & 7usize)); assert!(s2.len() >= (limit & 7usize)); for index in 0..(limit & 7usize) { if s1[index] != s2[index] { return matched + index; } } matched + (limit & 7usize) // made it through the loop } #[allow(unused)] pub fn slowFindMatchLengthWithLimit(s1: &[u8], s2: &[u8], limit: usize) -> usize { for (index, it) in s1[..limit].iter().zip(s2[..limit].iter()).enumerate() { if it.0 != it.1 { return index; } } limit } pub fn IsMatch(dictionary: &BrotliDictionary, w: DictWord, data: &[u8], max_length: usize) -> i32 { if w.l as usize > max_length { 0 } else { let offset: usize = (dictionary.offsets_by_length[w.l as usize] as usize) .wrapping_add((w.len() as usize).wrapping_mul(w.idx() as usize)); let dict = &dictionary.data.split_at(offset).1; if w.transform() as i32 == 0i32 { if FindMatchLengthWithLimit(dict, data, w.l as usize) == w.l as usize { 1 } else { 0 } } else if w.transform() as i32 == 10i32 { if dict[0] as i32 >= b'a' as i32 && (dict[0] as i32 <= b'z' as i32) && (dict[0] as i32 ^ 32i32 == data[0] as i32) && (FindMatchLengthWithLimit( dict.split_at(1).1, data.split_at(1).1, (w.len() as u32).wrapping_sub(1) as usize, ) == (w.len() as u32).wrapping_sub(1) as usize) { 1 } else { 0 } } else { for i in 0usize..w.len() as usize { if dict[i] as i32 >= b'a' as i32 && (dict[i] as i32 <= b'z' as i32) { if dict[i] as i32 ^ 32i32 != data[i] as i32 { return 0; } } else if dict[i] as i32 != data[i] as i32 { return 0; } } 1 } } } #[allow(unused)] fn AddMatch(distance: usize, len: usize, len_code: usize, mut matches: &mut [u32]) { let match_: u32 = (distance << 5).wrapping_add(len_code) as u32; matches[len] = min(matches[len], match_); } #[allow(unused)] fn DictMatchLength( dictionary: &BrotliDictionary, data: &[u8], id: usize, len: usize, maxlen: usize, ) -> usize { let offset: usize = (dictionary.offsets_by_length[len] as usize).wrapping_add(len.wrapping_mul(id)); FindMatchLengthWithLimit(dictionary.data.split_at(offset).1, data, min(len, maxlen)) } #[allow(unused)] pub fn BrotliFindAllStaticDictionaryMatches( dictionary: &BrotliDictionary, data: &[u8], min_length: usize, max_length: usize, mut matches: &mut [u32], ) -> i32 { let mut has_found_match: i32 = 0i32; { let mut offset: usize = kStaticDictionaryBuckets[Hash(data) as usize] as usize; let mut end: i32 = (offset == 0) as i32; while end == 0 { let mut w: DictWord = kStaticDictionaryWords[offset]; offset = offset.wrapping_add(1); let l: usize = (w.len() as i32 & 0x1fi32) as usize; let n: usize = 1usize << dictionary.size_bits_by_length[l] as i32; let id: usize = w.idx() as usize; end = !(w.len() as i32 & 0x80i32 == 0) as i32; w.l = l as u8; if w.transform() as i32 == 0i32 { let matchlen: usize = DictMatchLength(dictionary, data, id, l, max_length); let mut minlen: usize; let mut len: usize; if matchlen == l { //eprint!("Adding match {} {} {}\n", w.len(), w.transform(), w.idx()); AddMatch(id, l, l, matches); has_found_match = 1i32; } if matchlen >= l.wrapping_sub(1) { //eprint!("Bdding match {} {} {}\n", w.len(), w.transform(), w.idx()); AddMatch( id.wrapping_add((12usize).wrapping_mul(n)), l.wrapping_sub(1), l, matches, ); if l.wrapping_add(2) < max_length && (data[(l.wrapping_sub(1) as usize)] as i32 == b'i' as i32) && (data[(l as usize)] as i32 == b'n' as i32) && (data[(l.wrapping_add(1) as usize)] as i32 == b'g' as i32) && (data[(l.wrapping_add(2) as usize)] as i32 == b' ' as i32) { //eprint!("Cdding match {} {} {}\n", w.len(), w.transform(), w.idx()); AddMatch( id.wrapping_add((49usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } has_found_match = 1i32; } minlen = min_length; if l > 9usize { minlen = max(minlen, l.wrapping_sub(9)); } let maxlen: usize = min(matchlen, l.wrapping_sub(2)); for len in minlen..=maxlen { //eprint!("Ddding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add( (kOmitLastNTransforms[l.wrapping_sub(len)] as usize).wrapping_mul(n), ), len, l, matches, ); has_found_match = 1i32; } if matchlen < l || l.wrapping_add(6) >= max_length { continue; } let s: &[u8] = data.split_at(l as usize).1; if s[0] as i32 == b' ' as i32 { //eprint!("Edding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch(id.wrapping_add(n), l.wrapping_add(1), l, matches); if s[1] as i32 == b'a' as i32 { if s[2] as i32 == b' ' as i32 { //eprint!("Fdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((28usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } else if s[2] as i32 == b's' as i32 { if s[3] as i32 == b' ' as i32 { //eprint!("Gdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((46usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[2] as i32 == b't' as i32 { if s[3] as i32 == b' ' as i32 { //eprint!("Hdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((60usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[2] as i32 == b'n' as i32 && s[3] as i32 == b'd' as i32 && (s[4] as i32 == b' ' as i32) { //eprint!("Idding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((10usize).wrapping_mul(n)), l.wrapping_add(5), l, matches, ); } } else if s[1] as i32 == b'b' as i32 { if s[2] as i32 == b'y' as i32 && (s[3] as i32 == b' ' as i32) { //eprint!("Jdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((38usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[1] as i32 == b'i' as i32 { if s[2] as i32 == b'n' as i32 { if s[3] as i32 == b' ' as i32 { //eprint!("Kdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((16usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[2] as i32 == b's' as i32 && s[3] as i32 == b' ' as i32 { //eprint!("Ldding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((47usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[1] as i32 == b'f' as i32 { if s[2] as i32 == b'o' as i32 { if s[3] as i32 == b'r' as i32 && (s[4] as i32 == b' ' as i32) { //eprint!("Mdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((25usize).wrapping_mul(n)), l.wrapping_add(5), l, matches, ); } } else if s[2] as i32 == b'r' as i32 && s[3] as i32 == b'o' as i32 && (s[4] as i32 == b'm' as i32) && (s[5] as i32 == b' ' as i32) { //eprint!("Ndding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((37usize).wrapping_mul(n)), l.wrapping_add(6), l, matches, ); } } else if s[1] as i32 == b'o' as i32 { if s[2] as i32 == b'f' as i32 { if s[3] as i32 == b' ' as i32 { //eprint!("Odding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((8usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[2] as i32 == b'n' as i32 && s[3] as i32 == b' ' as i32 { //eprint!("Pdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((45usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[1] as i32 == b'n' as i32 { if s[2] as i32 == b'o' as i32 && (s[3] as i32 == b't' as i32) && (s[4] as i32 == b' ' as i32) { //eprint!("Qdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((80usize).wrapping_mul(n)), l.wrapping_add(5), l, matches, ); } } else if s[1] as i32 == b't' as i32 { if s[2] as i32 == b'h' as i32 { if s[3] as i32 == b'e' as i32 { if s[4] as i32 == b' ' as i32 { //eprint!("Rdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((5usize).wrapping_mul(n)), l.wrapping_add(5), l, matches, ); } } else if s[3] as i32 == b'a' as i32 && s[4] as i32 == b't' as i32 && (s[5] as i32 == b' ' as i32) { //eprint!("Sdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((29usize).wrapping_mul(n)), l.wrapping_add(6), l, matches, ); } } else if s[2] as i32 == b'o' as i32 && s[3] as i32 == b' ' as i32 { //eprint!("Tdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((17usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[1] as i32 == b'w' as i32 && s[2] as i32 == b'i' as i32 && (s[3] as i32 == b't' as i32) && (s[4] as i32 == b'h' as i32) && (s[5] as i32 == b' ' as i32) { //eprint!("Udding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((35usize).wrapping_mul(n)), l.wrapping_add(6), l, matches, ); } } else if s[0] as i32 == b'\"' as i32 { //eprint!("Vdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((19usize).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); if s[1] as i32 == b'>' as i32 { //eprint!("Wdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((21usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); } } else if s[0] as i32 == b'.' as i32 { //eprint!("Xdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((20usize).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); if s[1] as i32 == b' ' as i32 { //eprint!("Ydding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((31usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); if s[2] as i32 == b'T' as i32 && (s[3] as i32 == b'h' as i32) { if s[4] as i32 == b'e' as i32 { if s[5] as i32 == b' ' as i32 { //eprint!("Zdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((43usize).wrapping_mul(n)), l.wrapping_add(6), l, matches, ); } } else if s[4] as i32 == b'i' as i32 && s[5] as i32 == b's' as i32 && (s[6] as i32 == b' ' as i32) { //eprint!("AAdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((75usize).wrapping_mul(n)), l.wrapping_add(7), l, matches, ); } } } } else if s[0] as i32 == b',' as i32 { //eprint!("ABdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((76usize).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); if s[1] as i32 == b' ' as i32 { //eprint!("ACdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((14usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); } } else if s[0] as i32 == b'\n' as i32 { //eprint!("ADdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((22usize).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); if s[1] as i32 == b'\t' as i32 { //eprint!("AEdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((50usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); } } else if s[0] as i32 == b']' as i32 { //eprint!("AFdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((24usize).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); } else if s[0] as i32 == b'\'' as i32 { //eprint!("AGdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((36usize).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); } else if s[0] as i32 == b':' as i32 { //eprint!("AHdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((51usize).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); } else if s[0] as i32 == b'(' as i32 { //eprint!("AIdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((57usize).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); } else if s[0] as i32 == b'=' as i32 { if s[1] as i32 == b'\"' as i32 { //eprint!("AJdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((70usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); } else if s[1] as i32 == b'\'' as i32 { //eprint!("AKdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((86usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); } } else if s[0] as i32 == b'a' as i32 { if s[1] as i32 == b'l' as i32 && (s[2] as i32 == b' ' as i32) { //eprint!("ALdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((84usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } } else if s[0] as i32 == b'e' as i32 { if s[1] as i32 == b'd' as i32 { if s[2] as i32 == b' ' as i32 { //eprint!("AMdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((53usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } } else if s[1] as i32 == b'r' as i32 { if s[2] as i32 == b' ' as i32 { //eprint!("ANdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((82usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } } else if s[1] as i32 == b's' as i32 && s[2] as i32 == b't' as i32 && (s[3] as i32 == b' ' as i32) { //eprint!("AOdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((95usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[0] as i32 == b'f' as i32 { if s[1] as i32 == b'u' as i32 && (s[2] as i32 == b'l' as i32) && (s[3] as i32 == b' ' as i32) { //eprint!("APdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((90usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[0] as i32 == b'i' as i32 { if s[1] as i32 == b'v' as i32 { if s[2] as i32 == b'e' as i32 && (s[3] as i32 == b' ' as i32) { //eprint!("AQdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((92usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[1] as i32 == b'z' as i32 && s[2] as i32 == b'e' as i32 && (s[3] as i32 == b' ' as i32) { //eprint!("ARdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((100usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else if s[0] as i32 == b'l' as i32 { if s[1] as i32 == b'e' as i32 { if s[2] as i32 == b's' as i32 && (s[3] as i32 == b's' as i32) && (s[4] as i32 == b' ' as i32) { //eprint!("ASdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((93usize).wrapping_mul(n)), l.wrapping_add(5), l, matches, ); } } else if s[1] as i32 == b'y' as i32 && s[2] as i32 == b' ' as i32 { //eprint!("ATdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((61usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } } else if s[0] as i32 == b'o' as i32 && s[1] as i32 == b'u' as i32 && (s[2] as i32 == b's' as i32) && (s[3] as i32 == b' ' as i32) { //eprint!("AUdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); AddMatch( id.wrapping_add((106usize).wrapping_mul(n)), l.wrapping_add(4), l, matches, ); } } else { let is_all_caps = w.transform() != kUppercaseFirst; if IsMatch(dictionary, w, data, max_length) == 0 { continue; } //eprint!("AVdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((if is_all_caps { 44usize } else { 9usize }).wrapping_mul(n)), l, l, matches, ); has_found_match = 1i32; if l.wrapping_add(1) >= max_length { continue; } let s: &[u8] = data.split_at(l as usize).1; if s[0] as i32 == b' ' as i32 { //eprint!("AWdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 68usize } else { 4usize }).wrapping_mul(n), ), l.wrapping_add(1), l, matches, ); } else if s[0] as i32 == b'\"' as i32 { //eprint!("AXdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 87usize } else { 66usize }).wrapping_mul(n), ), l.wrapping_add(1), l, matches, ); if s[1] as i32 == b'>' as i32 { //eprint!("AYdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 97usize } else { 69usize }).wrapping_mul(n), ), l.wrapping_add(2), l, matches, ); } } else if s[0] as i32 == b'.' as i32 { //eprint!("AZdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 101usize } else { 79usize }).wrapping_mul(n), ), l.wrapping_add(1), l, matches, ); if s[1] as i32 == b' ' as i32 { //eprint!("BAdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 114usize } else { 88usize }).wrapping_mul(n), ), l.wrapping_add(2), l, matches, ); } } else if s[0] as i32 == b',' as i32 { //eprint!("BBdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 112usize } else { 99usize }).wrapping_mul(n), ), l.wrapping_add(1), l, matches, ); if s[1] as i32 == b' ' as i32 { //eprint!("BCdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 107usize } else { 58usize }).wrapping_mul(n), ), l.wrapping_add(2), l, matches, ); } } else if s[0] as i32 == b'\'' as i32 { //eprint!("BDdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 94usize } else { 74usize }).wrapping_mul(n), ), l.wrapping_add(1), l, matches, ); } else if s[0] as i32 == b'(' as i32 { //eprint!("BEdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 113usize } else { 78usize }).wrapping_mul(n), ), l.wrapping_add(1), l, matches, ); } else if s[0] as i32 == b'=' as i32 { if s[1] as i32 == b'\"' as i32 { //eprint!("BFdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 105usize } else { 104usize }).wrapping_mul(n), ), l.wrapping_add(2), l, matches, ); } else if s[1] as i32 == b'\'' as i32 { //eprint!("BGdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 116usize } else { 108usize }).wrapping_mul(n), ), l.wrapping_add(2), l, matches, ); } } } } } if max_length >= 5usize && (data[0] as i32 == b' ' as i32 || data[0] as i32 == b'.' as i32) { let is_space = data[0] == b' '; let mut offset: usize = kStaticDictionaryBuckets[Hash(data.split_at(1).1) as usize] as usize; let mut end: i32 = (offset == 0) as i32; while end == 0 { let mut w: DictWord = kStaticDictionaryWords[offset]; offset = offset.wrapping_add(1); let l: usize = (w.len() as i32 & 0x1fi32) as usize; let n: usize = 1usize << dictionary.size_bits_by_length[l] as i32; let id: usize = w.idx() as usize; end = !(w.len() as i32 & 0x80i32 == 0) as i32; w.l = l as u8; if w.transform() as i32 == 0i32 { if IsMatch( dictionary, w, data.split_at(1).1, max_length.wrapping_sub(1), ) == 0 { continue; } //eprint!("BHdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((if is_space { 6usize } else { 32usize }).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); has_found_match = 1i32; if l.wrapping_add(2) >= max_length { continue; } let s: &[u8] = data.split_at(l.wrapping_add(1) as usize).1; if s[0] as i32 == b' ' as i32 { //eprint!("BIdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((if is_space { 2usize } else { 77usize }).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); } else if s[0] as i32 == b'(' as i32 { //eprint!("BJdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((if is_space { 89usize } else { 67usize }).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); } else if is_space { if s[0] as i32 == b',' as i32 { //eprint!("BKdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((103usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); if s[1] as i32 == b' ' as i32 { //eprint!("BLdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((33usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } } else if s[0] as i32 == b'.' as i32 { //eprint!("BMdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((71usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); if s[1] as i32 == b' ' as i32 { //eprint!("BNdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((52usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } } else if s[0] as i32 == b'=' as i32 { if s[1] as i32 == b'\"' as i32 { //eprint!("BOdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((81usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } else if s[1] as i32 == b'\'' as i32 { //eprint!("BPdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((98usize).wrapping_mul(n)), l.wrapping_add(3), l, matches, ); } } } } else if is_space { let is_all_caps = w.transform() != kUppercaseFirst; if IsMatch( dictionary, w, data.split_at(1).1, max_length.wrapping_sub(1), ) == 0 { continue; } //eprint!("CAdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((if is_all_caps { 85usize } else { 30usize }).wrapping_mul(n)), l.wrapping_add(1), l, matches, ); has_found_match = 1i32; if l.wrapping_add(2) >= max_length { continue; } let s: &[u8] = data.split_at(l.wrapping_add(1)).1; if s[0] as i32 == b' ' as i32 { //eprint!("CBdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 83usize } else { 15usize }).wrapping_mul(n), ), l.wrapping_add(2), l, matches, ); } else if s[0] as i32 == b',' as i32 { if !is_all_caps { //eprint!("CCdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((109usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); } if s[1] as i32 == b' ' as i32 { //eprint!("CDdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 111usize } else { 65usize }).wrapping_mul(n), ), l.wrapping_add(3), l, matches, ); } } else if s[0] as i32 == b'.' as i32 { //eprint!("CEdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 115usize } else { 96usize }).wrapping_mul(n), ), l.wrapping_add(2), l, matches, ); if s[1] as i32 == b' ' as i32 { //eprint!("CFdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 117usize } else { 91usize }).wrapping_mul(n), ), l.wrapping_add(3), l, matches, ); } } else if s[0] as i32 == b'=' as i32 { if s[1] as i32 == b'\"' as i32 { //eprint!("CGdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 110usize } else { 118usize }).wrapping_mul(n), ), l.wrapping_add(3), l, matches, ); } else if s[1] as i32 == b'\'' as i32 { //eprint!("CHdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if is_all_caps { 119usize } else { 120usize }).wrapping_mul(n), ), l.wrapping_add(3), l, matches, ); } } } } } if max_length >= 6usize && (data[1] as i32 == b' ' as i32 && (data[0] as i32 == b'e' as i32 || data[0] as i32 == b's' as i32 || data[0] as i32 == b',' as i32) || data[0] as i32 == 0xc2i32 && (data[1] as i32 == 0xa0i32)) { let mut offset: usize = kStaticDictionaryBuckets[Hash(data.split_at(2).1) as usize] as usize; let mut end: i32 = (offset == 0) as i32; while end == 0 { let mut w: DictWord = kStaticDictionaryWords[offset]; offset = offset.wrapping_add(1); let l: usize = (w.len() as i32 & 0x1fi32) as usize; let n: usize = 1usize << dictionary.size_bits_by_length[l] as i32; let id: usize = w.idx() as usize; end = !(w.len() as i32 & 0x80i32 == 0) as i32; w.l = l as u8; if w.transform() as i32 == 0i32 && (IsMatch( dictionary, w, data.split_at(2).1, max_length.wrapping_sub(2), ) != 0) { if data[0] as i32 == 0xc2i32 { //eprint!("CIdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((102usize).wrapping_mul(n)), l.wrapping_add(2), l, matches, ); has_found_match = 1i32; } else if l.wrapping_add(2) < max_length && (data[(l.wrapping_add(2) as usize)] as i32 == b' ' as i32) { let t: usize = (if data[0] as i32 == b'e' as i32 { 18i32 } else if data[0] as i32 == b's' as i32 { 7i32 } else { 13i32 }) as usize; //eprint!("CJdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add(t.wrapping_mul(n)), l.wrapping_add(3), l, matches, ); has_found_match = 1i32; } } } } if max_length >= 9usize && (data[0] as i32 == b' ' as i32 && (data[1] as i32 == b't' as i32) && (data[2] as i32 == b'h' as i32) && (data[3] as i32 == b'e' as i32) && (data[4] as i32 == b' ' as i32) || data[0] as i32 == b'.' as i32 && (data[1] as i32 == b'c' as i32) && (data[2] as i32 == b'o' as i32) && (data[3] as i32 == b'm' as i32) && (data[4] as i32 == b'/' as i32)) { let mut offset: usize = kStaticDictionaryBuckets[Hash(data.split_at(5).1) as usize] as usize; let mut end: i32 = (offset == 0) as i32; while end == 0 { let mut w: DictWord = kStaticDictionaryWords[offset]; offset = offset.wrapping_add(1); let l: usize = (w.len() as i32 & 0x1fi32) as usize; let n: usize = 1usize << dictionary.size_bits_by_length[l] as i32; let id: usize = w.idx() as usize; end = !(w.len() as i32 & 0x80i32 == 0) as i32; w.l = l as u8; if w.transform() as i32 == 0i32 && (IsMatch( dictionary, w, data.split_at(5).1, max_length.wrapping_sub(5), ) != 0) { //eprint!("CKdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add( (if data[0] as i32 == b' ' as i32 { 41i32 } else { 72i32 } as usize) .wrapping_mul(n), ), l.wrapping_add(5), l, matches, ); has_found_match = 1i32; if l.wrapping_add(5) < max_length { let s: &[u8] = data.split_at(l.wrapping_add(5) as usize).1; if data[0] as i32 == b' ' as i32 && l.wrapping_add(8) < max_length && (s[0] as i32 == b' ' as i32) && (s[1] as i32 == b'o' as i32) && (s[2] as i32 == b'f' as i32) && (s[3] as i32 == b' ' as i32) { //eprint!("CLdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((62usize).wrapping_mul(n)), l.wrapping_add(9), l, matches, ); if l.wrapping_add(12) < max_length && (s[4] as i32 == b't' as i32) && (s[5] as i32 == b'h' as i32) && (s[6] as i32 == b'e' as i32) && (s[7] as i32 == b' ' as i32) { //eprint!("BQdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); AddMatch( id.wrapping_add((73usize).wrapping_mul(n)), l.wrapping_add(13), l, matches, ); } } } } } } has_found_match } #[cfg(test)] mod test { #[allow(unused)] fn construct_situation(seed: &[u8], mut output: &mut [u8], limit: usize, matchfor: usize) { output[..].clone_from_slice(seed); if matchfor >= limit { return; } output[matchfor] = output[matchfor].wrapping_add((matchfor as u8 % 253u8).wrapping_add(1)); } #[test] fn test_find_match_length() { let mut a = [91u8; 600000]; let mut b = [0u8; 600000]; for i in 1..a.len() { a[i] = (a[i - 1] % 19u8).wrapping_add(17); } construct_situation(&a[..], &mut b[..], a.len(), 0); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 0); construct_situation(&a[..], &mut b[..], a.len(), 1); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 1); construct_situation(&a[..], &mut b[..], a.len(), 10); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 10); construct_situation(&a[..], &mut b[..], a.len(), 9); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 9); construct_situation(&a[..], &mut b[..], a.len(), 7); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 7); construct_situation(&a[..], &mut b[..], a.len(), 8); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 8); construct_situation(&a[..], &mut b[..], a.len(), 48); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 48); construct_situation(&a[..], &mut b[..], a.len(), 49); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 49); construct_situation(&a[..], &mut b[..], a.len(), 63); assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 63); construct_situation(&a[..], &mut b[..], a.len(), 222); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 222 ); construct_situation(&a[..], &mut b[..], a.len(), 1590); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 1590 ); construct_situation(&a[..], &mut b[..], a.len(), 12590); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 12590 ); construct_situation(&a[..], &mut b[..], a.len(), 52592); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 52592 ); construct_situation(&a[..], &mut b[..], a.len(), 152592); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 152592 ); construct_situation(&a[..], &mut b[..], a.len(), 252591); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 252591 ); construct_situation(&a[..], &mut b[..], a.len(), 131072); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 131072 ); construct_situation(&a[..], &mut b[..], a.len(), 131073); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 131073 ); construct_situation(&a[..], &mut b[..], a.len(), 131072 + 64 + 32 + 16 + 8); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 131072 + 64 + 32 + 16 + 8 ); construct_situation(&a[..], &mut b[..], a.len(), 272144 + 64 + 32 + 16 + 8 + 1); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 272144 + 64 + 32 + 16 + 8 + 1 ); construct_situation(&a[..], &mut b[..], a.len(), 2 * 272144 + 64 + 32 + 16 + 8); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 2 * 272144 + 64 + 32 + 16 + 8 ); construct_situation(&a[..], &mut b[..], a.len(), a.len()); assert_eq!( super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), a.len() ); } } brotli-8.0.2/src/enc/static_dict_lut.rs000064400000000000000000071100431046102023000162140ustar 00000000000000pub static kInvalidMatch: u32 = 0x0fff_ffff; pub static kDictNumBits: i32 = 15; pub static kDictHashMul32: u32 = 0x1e35_a7bd; pub static kStaticDictionaryBuckets: [u16; 32768] = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 25, 0, 29, 0, 53, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 61, 76, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 99, 101, 106, 108, 0, 0, 0, 0, 0, 110, 0, 111, 112, 0, 113, 118, 124, 0, 0, 0, 0, 0, 125, 128, 0, 0, 0, 0, 129, 0, 0, 131, 0, 0, 0, 0, 0, 0, 132, 0, 0, 135, 0, 0, 0, 137, 0, 0, 0, 0, 0, 138, 139, 0, 0, 0, 0, 0, 0, 0, 142, 143, 144, 0, 0, 0, 0, 0, 145, 0, 0, 0, 146, 149, 151, 152, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 160, 182, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 188, 189, 0, 0, 192, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 197, 202, 209, 0, 0, 210, 0, 224, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 232, 0, 240, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 246, 0, 0, 249, 251, 253, 0, 0, 0, 0, 0, 258, 0, 0, 261, 263, 0, 0, 0, 267, 0, 0, 268, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, 277, 0, 278, 286, 0, 0, 0, 0, 287, 0, 289, 290, 291, 0, 0, 0, 295, 0, 0, 296, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 299, 0, 0, 305, 0, 324, 0, 0, 0, 0, 0, 327, 0, 328, 329, 0, 0, 0, 0, 336, 0, 0, 340, 0, 341, 342, 343, 0, 0, 346, 0, 348, 0, 0, 0, 0, 0, 0, 349, 351, 0, 0, 355, 0, 363, 0, 364, 0, 368, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 375, 0, 0, 0, 0, 376, 377, 0, 0, 394, 395, 396, 0, 0, 398, 0, 0, 0, 0, 400, 0, 0, 408, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 421, 0, 0, 422, 423, 0, 0, 429, 435, 436, 442, 0, 0, 443, 0, 444, 445, 453, 456, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 460, 0, 462, 463, 465, 0, 0, 0, 0, 0, 0, 466, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 474, 0, 476, 0, 0, 0, 0, 483, 0, 485, 0, 0, 0, 486, 0, 0, 488, 491, 492, 0, 0, 497, 499, 500, 0, 501, 0, 0, 0, 505, 0, 0, 506, 0, 0, 0, 507, 0, 0, 0, 509, 0, 0, 0, 0, 511, 512, 519, 0, 0, 0, 0, 0, 0, 529, 530, 0, 0, 0, 534, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 557, 560, 0, 0, 0, 0, 0, 0, 561, 0, 564, 0, 0, 0, 0, 0, 0, 565, 566, 0, 575, 0, 619, 0, 620, 0, 0, 623, 624, 0, 0, 0, 625, 0, 0, 626, 627, 0, 0, 628, 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 643, 656, 668, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 687, 0, 690, 0, 693, 699, 700, 0, 0, 0, 0, 0, 0, 704, 705, 0, 0, 0, 0, 707, 710, 0, 711, 0, 0, 0, 0, 726, 0, 0, 729, 0, 0, 0, 730, 731, 0, 0, 0, 0, 0, 752, 0, 0, 0, 762, 0, 763, 0, 0, 767, 0, 0, 0, 770, 774, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 777, 783, 0, 0, 0, 785, 788, 0, 0, 0, 0, 790, 0, 0, 0, 793, 0, 0, 0, 0, 794, 0, 0, 804, 819, 821, 0, 827, 0, 0, 0, 834, 0, 0, 835, 0, 0, 0, 841, 0, 844, 0, 850, 851, 859, 0, 860, 0, 0, 0, 0, 0, 0, 0, 874, 0, 876, 0, 877, 890, 0, 0, 0, 0, 0, 0, 0, 0, 893, 894, 898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 899, 0, 0, 0, 900, 904, 906, 0, 0, 0, 907, 0, 908, 909, 0, 910, 0, 0, 0, 0, 911, 0, 0, 0, 0, 0, 916, 0, 0, 0, 922, 925, 0, 930, 0, 934, 0, 0, 0, 0, 0, 943, 0, 0, 944, 0, 953, 954, 0, 0, 0, 0, 0, 0, 955, 0, 962, 963, 0, 0, 976, 0, 0, 977, 978, 979, 980, 0, 981, 0, 0, 0, 0, 984, 0, 0, 985, 0, 0, 987, 989, 991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 992, 0, 0, 0, 993, 0, 0, 0, 0, 0, 0, 996, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 1002, 0, 0, 0, 0, 1005, 1007, 0, 0, 0, 1009, 0, 0, 0, 1010, 0, 0, 0, 0, 0, 0, 1011, 0, 1012, 0, 0, 0, 0, 1014, 1016, 0, 0, 0, 1020, 0, 1021, 0, 0, 0, 0, 1022, 0, 0, 0, 1024, 0, 0, 0, 0, 0, 0, 1025, 0, 0, 1026, 1027, 0, 0, 0, 0, 0, 1031, 0, 1033, 0, 0, 0, 0, 1034, 0, 0, 0, 1037, 1040, 0, 0, 0, 1042, 1043, 0, 0, 1053, 0, 1054, 0, 0, 1057, 0, 0, 0, 1058, 0, 0, 1060, 0, 0, 0, 0, 0, 0, 0, 1061, 0, 0, 1062, 0, 0, 0, 0, 1063, 0, 0, 0, 0, 1064, 0, 0, 0, 0, 0, 1065, 0, 0, 0, 0, 1066, 1067, 0, 0, 0, 1069, 1070, 1072, 0, 0, 0, 0, 0, 0, 1073, 0, 1075, 0, 0, 0, 0, 0, 0, 1080, 1084, 0, 0, 0, 0, 1088, 0, 0, 0, 0, 0, 0, 1094, 0, 1095, 0, 1107, 0, 0, 0, 1112, 1114, 0, 1119, 0, 1122, 0, 0, 1126, 0, 1129, 0, 1130, 0, 0, 0, 0, 0, 1132, 0, 0, 0, 0, 0, 0, 1144, 0, 0, 1145, 1146, 0, 1148, 1149, 0, 0, 1150, 1151, 0, 0, 0, 0, 1152, 0, 1153, 0, 0, 0, 0, 0, 1154, 0, 1163, 0, 0, 0, 1164, 0, 0, 0, 0, 0, 1165, 0, 1167, 0, 1170, 0, 0, 0, 0, 0, 1171, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 1175, 1177, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1195, 0, 0, 1221, 0, 0, 1224, 0, 0, 1227, 0, 0, 0, 0, 0, 1228, 1229, 0, 0, 1230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1231, 0, 0, 0, 1233, 0, 0, 1243, 1244, 1246, 1248, 0, 0, 0, 0, 1254, 1255, 1258, 1259, 0, 0, 0, 1260, 0, 0, 1261, 0, 0, 0, 1262, 1264, 0, 0, 1265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1266, 0, 1267, 0, 0, 0, 0, 1273, 1274, 1276, 1289, 0, 0, 1291, 1292, 1293, 0, 0, 1294, 1295, 1296, 0, 0, 0, 0, 1302, 0, 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1311, 1312, 0, 1314, 0, 1316, 1320, 1321, 0, 0, 0, 0, 0, 0, 0, 1322, 1323, 1324, 0, 1335, 0, 1336, 0, 0, 0, 0, 1341, 1342, 0, 1346, 0, 1357, 0, 0, 0, 1358, 1360, 0, 0, 0, 0, 0, 0, 1361, 0, 0, 0, 1362, 1365, 0, 1366, 0, 0, 0, 0, 0, 0, 0, 1379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1386, 0, 1388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1395, 0, 0, 0, 0, 1403, 0, 1405, 0, 0, 1407, 0, 0, 0, 0, 0, 1408, 1409, 0, 1410, 0, 0, 0, 1412, 1413, 1416, 0, 0, 1429, 1451, 0, 0, 1454, 0, 0, 0, 0, 0, 0, 0, 1455, 0, 0, 0, 0, 0, 0, 0, 1456, 0, 0, 0, 0, 1459, 1460, 1461, 1475, 0, 0, 0, 0, 0, 0, 1477, 0, 1480, 0, 1481, 0, 0, 1486, 0, 0, 1495, 0, 0, 0, 1496, 0, 0, 1498, 1499, 1501, 1520, 1521, 0, 0, 0, 1526, 0, 0, 0, 0, 1528, 1529, 0, 1533, 1536, 0, 0, 0, 1537, 1538, 1549, 0, 1550, 1558, 1559, 1572, 0, 1573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1575, 0, 0, 0, 0, 0, 1579, 0, 1599, 0, 1603, 0, 1604, 0, 1605, 0, 0, 0, 0, 0, 1608, 1610, 0, 0, 0, 0, 1611, 0, 1615, 0, 1616, 1618, 0, 1619, 0, 0, 1622, 0, 0, 0, 0, 1634, 0, 0, 0, 1635, 0, 0, 0, 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1643, 0, 0, 0, 1650, 0, 0, 1652, 0, 0, 0, 0, 0, 1653, 0, 0, 0, 1654, 0, 0, 0, 0, 1655, 0, 1662, 0, 0, 1663, 1664, 0, 0, 1668, 0, 0, 1669, 1670, 0, 1672, 1673, 0, 0, 0, 0, 0, 1674, 0, 0, 0, 1675, 1676, 1680, 0, 1682, 0, 0, 1687, 0, 0, 0, 0, 0, 1704, 0, 0, 1705, 0, 0, 1721, 0, 0, 0, 0, 1734, 1735, 0, 0, 0, 0, 1737, 0, 0, 0, 0, 1739, 0, 0, 1740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1741, 1743, 0, 0, 0, 0, 1745, 0, 0, 0, 1749, 0, 0, 0, 1751, 0, 0, 0, 0, 0, 0, 1760, 0, 0, 0, 0, 1765, 0, 0, 0, 0, 0, 1784, 0, 1785, 1787, 0, 0, 0, 0, 1788, 1789, 0, 0, 0, 0, 1790, 1791, 1793, 0, 1798, 1799, 0, 0, 0, 0, 1801, 0, 1803, 1805, 0, 0, 0, 1806, 1811, 0, 1812, 1814, 0, 1821, 0, 0, 0, 0, 0, 1822, 1833, 0, 0, 0, 0, 0, 0, 1848, 0, 0, 0, 0, 0, 0, 1857, 0, 0, 0, 1859, 0, 0, 0, 0, 1861, 0, 0, 0, 0, 0, 0, 0, 1866, 0, 1921, 1925, 0, 0, 0, 1929, 1930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1931, 0, 0, 0, 0, 1932, 0, 0, 0, 1934, 0, 0, 0, 0, 0, 0, 0, 0, 1946, 0, 0, 1948, 0, 0, 0, 0, 1950, 0, 1957, 0, 1958, 0, 0, 0, 0, 0, 1965, 1967, 0, 0, 0, 0, 1968, 0, 1969, 0, 1971, 1972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1973, 0, 0, 0, 0, 1975, 0, 0, 0, 0, 1976, 1979, 0, 1982, 0, 0, 0, 0, 1984, 1988, 0, 0, 0, 0, 1990, 2004, 2008, 0, 0, 0, 2012, 2013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2015, 0, 2016, 2017, 0, 0, 0, 0, 2021, 0, 0, 2025, 0, 0, 0, 0, 0, 2029, 2036, 2040, 0, 2042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2043, 0, 0, 0, 0, 0, 2045, 0, 0, 0, 0, 0, 0, 0, 2046, 2047, 0, 2048, 2049, 0, 2059, 0, 0, 2063, 0, 2064, 2065, 0, 0, 2066, 0, 0, 0, 0, 0, 0, 2069, 0, 0, 0, 0, 2070, 0, 2071, 0, 2072, 0, 0, 0, 0, 2080, 2082, 2083, 0, 0, 0, 0, 0, 2085, 0, 2086, 2088, 2089, 2105, 0, 0, 0, 0, 2107, 0, 0, 2116, 2117, 0, 2120, 0, 0, 2122, 0, 0, 0, 0, 0, 2123, 0, 0, 2125, 2127, 2128, 0, 0, 0, 2130, 0, 0, 0, 2137, 2139, 2140, 2141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2144, 2145, 0, 0, 2146, 2149, 0, 0, 0, 0, 2150, 0, 0, 2151, 2158, 0, 2159, 0, 2160, 0, 0, 0, 0, 0, 0, 2161, 2162, 0, 0, 2194, 2202, 0, 0, 0, 0, 0, 0, 2205, 2217, 0, 2220, 0, 2221, 0, 2222, 2224, 0, 0, 0, 0, 2237, 0, 0, 0, 0, 0, 2238, 0, 2239, 2241, 0, 0, 2242, 0, 0, 0, 0, 0, 2243, 0, 0, 0, 0, 0, 0, 2252, 0, 0, 2253, 0, 0, 0, 2257, 2258, 0, 0, 0, 2260, 0, 0, 0, 0, 0, 0, 0, 2262, 0, 2264, 0, 0, 0, 0, 0, 2269, 2270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2271, 0, 2273, 0, 0, 0, 0, 2277, 0, 0, 0, 0, 2278, 0, 0, 0, 0, 2279, 0, 2280, 0, 2283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2287, 0, 0, 0, 0, 0, 0, 0, 2289, 2290, 0, 0, 0, 0, 2291, 0, 2292, 0, 0, 0, 2293, 2295, 2296, 0, 0, 0, 0, 0, 0, 0, 2298, 0, 0, 0, 0, 0, 2303, 0, 2305, 0, 0, 2306, 0, 2307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2313, 2314, 2315, 2316, 0, 0, 2318, 0, 2319, 0, 2322, 0, 0, 2323, 0, 2324, 0, 2326, 0, 0, 0, 0, 0, 0, 0, 2335, 0, 2336, 2338, 2339, 0, 2340, 0, 0, 0, 2355, 0, 2375, 0, 2382, 2386, 0, 2387, 0, 0, 2394, 0, 0, 0, 0, 2395, 0, 2397, 0, 0, 0, 0, 0, 2398, 0, 0, 0, 0, 0, 0, 0, 2399, 2402, 2404, 2408, 2411, 0, 0, 0, 2413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2415, 0, 0, 2416, 2417, 2419, 0, 2420, 0, 0, 0, 0, 0, 2425, 0, 0, 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2427, 2428, 0, 2429, 0, 0, 2430, 2434, 0, 2436, 0, 0, 0, 0, 0, 0, 2441, 2442, 0, 2445, 0, 0, 2446, 2457, 0, 2459, 0, 0, 2462, 0, 2464, 0, 2477, 0, 2478, 2486, 0, 0, 0, 2491, 0, 0, 2493, 0, 0, 2494, 0, 2495, 0, 2513, 2523, 0, 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, 2528, 2529, 2530, 0, 0, 2531, 0, 2533, 0, 0, 2534, 2535, 0, 2536, 2537, 0, 2538, 0, 2539, 2540, 0, 0, 0, 2545, 2546, 0, 0, 0, 0, 0, 0, 0, 2548, 0, 0, 2549, 0, 2550, 2555, 0, 0, 0, 0, 0, 2557, 0, 2560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2561, 0, 2576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2577, 2578, 0, 0, 0, 2579, 0, 0, 0, 0, 0, 0, 0, 2580, 0, 0, 0, 0, 2581, 0, 0, 0, 0, 2583, 0, 2584, 0, 2588, 2590, 0, 0, 0, 2591, 0, 0, 0, 0, 2593, 2594, 0, 2595, 0, 2601, 2602, 0, 0, 2603, 0, 2605, 0, 0, 0, 2606, 2607, 2611, 0, 2615, 0, 0, 0, 2617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2619, 0, 0, 2620, 0, 0, 0, 2621, 0, 2623, 0, 2625, 0, 0, 2628, 2629, 0, 0, 2635, 2636, 2637, 0, 0, 2639, 0, 0, 0, 2642, 0, 0, 0, 0, 2643, 0, 2644, 0, 2649, 0, 0, 0, 0, 0, 0, 2655, 2656, 0, 0, 2657, 0, 0, 0, 0, 0, 2658, 0, 0, 0, 0, 0, 2659, 0, 0, 0, 0, 2664, 2685, 0, 2687, 0, 2688, 0, 0, 2689, 0, 0, 2694, 0, 2695, 0, 0, 2698, 0, 2701, 2706, 0, 0, 0, 2707, 0, 2709, 2710, 2711, 0, 0, 0, 2720, 2730, 2735, 0, 0, 0, 0, 2738, 2740, 0, 0, 0, 0, 2747, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 2749, 0, 0, 0, 0, 0, 2750, 0, 0, 2752, 2754, 0, 0, 0, 0, 0, 2758, 0, 0, 0, 0, 2762, 0, 0, 0, 0, 2763, 0, 0, 0, 0, 0, 0, 0, 2764, 2767, 0, 0, 0, 0, 2768, 0, 0, 2770, 0, 0, 0, 0, 0, 0, 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2772, 0, 0, 0, 0, 0, 2773, 2776, 0, 0, 2783, 0, 0, 2784, 0, 2789, 0, 2790, 0, 0, 0, 2792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2793, 2795, 0, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 0, 0, 0, 2797, 2799, 0, 0, 0, 0, 2803, 0, 0, 0, 0, 2806, 0, 2807, 2808, 2817, 2819, 0, 0, 0, 0, 0, 2821, 0, 0, 0, 0, 2822, 2823, 0, 0, 0, 0, 0, 0, 0, 2824, 0, 0, 2828, 0, 2834, 0, 0, 0, 0, 0, 0, 2836, 0, 2838, 0, 0, 2839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2841, 0, 0, 0, 2842, 0, 0, 0, 0, 0, 2843, 2844, 0, 0, 0, 0, 2846, 0, 0, 2847, 0, 2849, 0, 2853, 0, 0, 0, 0, 0, 2857, 0, 0, 0, 0, 2858, 0, 2859, 0, 0, 2860, 0, 2862, 2868, 0, 0, 0, 0, 2875, 0, 2876, 0, 0, 2877, 2878, 2884, 2889, 2890, 0, 0, 2891, 0, 0, 2892, 0, 0, 0, 2906, 2912, 0, 2913, 0, 0, 0, 0, 0, 0, 0, 0, 2916, 0, 2934, 0, 0, 0, 0, 0, 2935, 0, 0, 0, 0, 2939, 0, 2940, 0, 0, 0, 0, 0, 0, 0, 2941, 0, 0, 0, 2946, 0, 2949, 0, 0, 2950, 2954, 2955, 0, 0, 0, 2959, 2961, 0, 0, 2962, 0, 2963, 0, 0, 0, 0, 0, 0, 2964, 2965, 2966, 2967, 0, 0, 0, 0, 0, 0, 0, 2969, 0, 0, 0, 0, 0, 2970, 2975, 0, 2982, 2983, 2984, 0, 0, 0, 0, 0, 2989, 0, 0, 2990, 0, 0, 0, 0, 0, 0, 0, 2991, 0, 0, 0, 0, 0, 0, 0, 0, 2998, 0, 3000, 3001, 0, 0, 3002, 0, 0, 0, 3003, 0, 0, 3012, 0, 0, 3022, 0, 0, 3024, 0, 0, 3025, 3027, 0, 0, 0, 3030, 0, 0, 0, 0, 3034, 3035, 0, 0, 3036, 0, 3039, 0, 3049, 0, 0, 3050, 0, 0, 0, 0, 0, 0, 3051, 0, 3053, 0, 0, 0, 0, 3057, 0, 3058, 0, 0, 0, 0, 0, 0, 0, 0, 3063, 0, 0, 3073, 3074, 3078, 3079, 0, 3080, 3086, 0, 0, 0, 0, 0, 0, 0, 0, 3087, 0, 3092, 0, 3095, 0, 3099, 0, 0, 0, 3100, 0, 3101, 3102, 0, 3122, 0, 0, 0, 3124, 0, 3125, 0, 0, 0, 0, 0, 0, 3132, 3134, 0, 0, 3136, 0, 0, 0, 0, 0, 0, 0, 3147, 0, 0, 3149, 0, 0, 0, 0, 0, 3150, 3151, 3152, 0, 0, 0, 0, 3158, 0, 0, 3160, 0, 0, 3161, 0, 0, 3162, 0, 3163, 3166, 3168, 0, 0, 3169, 3170, 0, 0, 3171, 0, 0, 0, 0, 0, 0, 0, 3182, 0, 3184, 0, 0, 3188, 0, 0, 3194, 0, 0, 0, 0, 0, 0, 3204, 0, 0, 0, 0, 3209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3216, 3217, 0, 0, 0, 0, 0, 0, 0, 3219, 0, 0, 3220, 3222, 0, 3223, 0, 0, 0, 0, 3224, 0, 3225, 3226, 0, 3228, 3233, 0, 3239, 3241, 3242, 0, 0, 3251, 3252, 3253, 3255, 0, 0, 0, 0, 0, 0, 0, 0, 3260, 0, 0, 3261, 0, 0, 0, 3267, 0, 0, 0, 0, 0, 0, 0, 0, 3271, 0, 0, 0, 3278, 0, 3282, 0, 0, 0, 3284, 0, 0, 0, 3285, 3286, 0, 0, 0, 0, 0, 0, 0, 3287, 3292, 0, 0, 0, 0, 3294, 3296, 0, 0, 3299, 3300, 3301, 0, 3302, 0, 0, 0, 0, 0, 3304, 3306, 0, 0, 0, 0, 0, 0, 3308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3311, 0, 0, 0, 0, 0, 0, 0, 0, 3312, 3314, 3315, 0, 3318, 0, 0, 0, 0, 0, 0, 0, 0, 3319, 0, 0, 0, 0, 0, 3321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3322, 0, 0, 3324, 3325, 0, 0, 3326, 0, 0, 3328, 3329, 3331, 0, 0, 3335, 0, 0, 3337, 0, 3338, 0, 0, 0, 0, 3343, 3347, 0, 0, 0, 3348, 0, 0, 3351, 0, 0, 0, 0, 0, 0, 3354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3355, 0, 0, 3365, 3366, 3367, 0, 0, 0, 0, 0, 0, 3368, 3369, 0, 3370, 0, 0, 3373, 0, 0, 3376, 0, 0, 3377, 0, 3379, 3387, 0, 0, 0, 0, 0, 3390, 0, 0, 0, 0, 0, 0, 0, 3402, 0, 3403, 3436, 3437, 3439, 0, 0, 3441, 0, 0, 0, 3442, 0, 0, 3449, 0, 0, 0, 3450, 0, 0, 0, 0, 0, 0, 0, 3451, 0, 0, 3452, 0, 3453, 3456, 0, 3457, 0, 0, 3458, 0, 3459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3460, 0, 0, 3469, 3470, 0, 0, 3475, 0, 0, 0, 3480, 3487, 3489, 0, 3490, 0, 0, 3491, 3499, 0, 3500, 0, 0, 3501, 0, 0, 0, 3502, 0, 3514, 0, 0, 0, 3516, 3517, 0, 0, 0, 3518, 0, 0, 0, 0, 3520, 3521, 3522, 0, 0, 3526, 3530, 0, 0, 0, 0, 3531, 0, 0, 0, 0, 3536, 0, 0, 0, 0, 0, 0, 0, 3539, 3541, 0, 0, 3542, 3544, 0, 3547, 3548, 0, 0, 3550, 0, 3553, 0, 0, 0, 0, 0, 0, 0, 3554, 0, 3555, 0, 3558, 0, 3559, 0, 0, 0, 0, 0, 0, 0, 0, 3563, 0, 3581, 0, 0, 0, 3599, 0, 0, 0, 3600, 0, 3601, 0, 3602, 3603, 0, 0, 3606, 3608, 0, 3610, 3611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3612, 3616, 3619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3624, 3628, 0, 3629, 3634, 3635, 0, 0, 0, 0, 0, 0, 3636, 0, 3637, 0, 0, 3638, 3651, 0, 0, 0, 0, 0, 0, 3652, 3653, 0, 0, 0, 0, 3656, 3657, 0, 0, 0, 0, 0, 3658, 0, 0, 0, 0, 3659, 0, 3661, 3663, 3664, 0, 3665, 0, 3692, 0, 0, 0, 3694, 3696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3700, 0, 0, 3701, 0, 0, 0, 3708, 3709, 0, 0, 0, 3711, 3712, 0, 0, 0, 0, 0, 3723, 0, 3724, 3725, 0, 0, 3726, 0, 0, 0, 0, 0, 0, 3728, 3729, 0, 3734, 3735, 3737, 0, 0, 0, 3743, 0, 3745, 0, 0, 3746, 0, 0, 3747, 3748, 0, 3757, 0, 3759, 3766, 3767, 0, 3768, 0, 0, 0, 0, 3769, 0, 0, 3771, 0, 3774, 0, 0, 0, 0, 0, 0, 3775, 0, 0, 0, 0, 0, 0, 3776, 0, 3777, 3786, 0, 3788, 3789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3791, 0, 3811, 0, 0, 0, 0, 0, 3814, 3815, 3816, 3820, 0, 0, 0, 0, 0, 0, 0, 3821, 0, 0, 3825, 0, 0, 0, 0, 3835, 0, 0, 3848, 3849, 0, 0, 0, 0, 3850, 3851, 3853, 0, 0, 0, 0, 3859, 0, 3860, 3862, 0, 0, 0, 0, 0, 3863, 0, 0, 0, 0, 0, 0, 0, 0, 3873, 0, 3874, 0, 3875, 3886, 0, 3887, 0, 0, 0, 0, 3892, 3913, 0, 3914, 0, 0, 0, 3925, 3931, 0, 0, 0, 0, 3934, 3941, 3942, 0, 0, 0, 0, 3943, 0, 0, 0, 3944, 0, 0, 0, 0, 0, 3945, 0, 3947, 0, 0, 0, 3956, 3957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3958, 0, 3959, 3965, 0, 0, 0, 0, 3966, 0, 0, 0, 3967, 0, 0, 0, 3968, 3974, 0, 0, 0, 0, 0, 3975, 3977, 3978, 0, 0, 0, 0, 3980, 0, 3985, 0, 0, 0, 0, 0, 0, 0, 0, 3986, 4011, 0, 0, 4017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4018, 0, 0, 0, 0, 4019, 0, 4023, 0, 0, 0, 4027, 4028, 0, 0, 0, 0, 0, 0, 0, 0, 4031, 4034, 0, 0, 4035, 4037, 4039, 4040, 0, 0, 0, 0, 0, 4059, 0, 4060, 4061, 0, 4062, 4063, 4066, 0, 0, 4072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4088, 0, 0, 0, 0, 0, 4091, 0, 0, 0, 0, 4094, 4095, 0, 0, 4096, 0, 0, 0, 0, 0, 4098, 4099, 0, 0, 0, 4101, 0, 4104, 0, 0, 0, 4105, 4108, 0, 4113, 0, 0, 4115, 4116, 0, 4126, 0, 0, 4127, 0, 0, 0, 0, 0, 0, 0, 4128, 4132, 4133, 0, 4134, 0, 0, 0, 4137, 0, 0, 4141, 0, 0, 0, 0, 4144, 4146, 4147, 0, 0, 0, 0, 4148, 0, 0, 4311, 0, 0, 0, 4314, 4329, 0, 4331, 4332, 0, 4333, 0, 4334, 0, 0, 0, 4335, 0, 4336, 0, 0, 0, 4337, 0, 0, 0, 4342, 4345, 4346, 4350, 0, 4351, 4352, 0, 4354, 4355, 0, 0, 4364, 0, 0, 0, 0, 4369, 0, 0, 0, 4373, 0, 4374, 0, 0, 0, 0, 4377, 0, 0, 0, 0, 4378, 0, 0, 0, 4380, 0, 0, 0, 4381, 4382, 0, 0, 0, 0, 0, 0, 0, 4384, 0, 0, 0, 0, 4385, 0, 0, 0, 4386, 0, 0, 0, 4391, 4398, 0, 0, 0, 0, 4407, 4409, 0, 0, 0, 0, 4410, 0, 0, 4411, 0, 4414, 4415, 4418, 0, 4427, 4428, 4430, 0, 4431, 0, 4448, 0, 0, 0, 0, 0, 4449, 0, 0, 0, 4451, 4452, 0, 4453, 4454, 0, 4456, 0, 0, 0, 0, 0, 0, 0, 4459, 0, 4463, 0, 0, 0, 0, 0, 4466, 0, 4467, 0, 4469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4470, 4471, 0, 4473, 0, 0, 4475, 0, 0, 0, 0, 4477, 4478, 0, 0, 0, 4479, 4481, 0, 4482, 0, 4484, 0, 0, 0, 0, 0, 0, 0, 4486, 0, 0, 4488, 0, 0, 4497, 0, 4508, 0, 0, 4510, 4511, 0, 4520, 4523, 0, 4524, 0, 4525, 0, 4527, 0, 0, 4528, 0, 0, 0, 0, 4530, 0, 4531, 0, 0, 4532, 0, 0, 0, 4533, 0, 0, 0, 0, 0, 4535, 0, 0, 0, 4536, 0, 0, 0, 0, 0, 4541, 4543, 4544, 4545, 4547, 0, 4548, 0, 0, 0, 0, 4550, 4551, 0, 4553, 0, 0, 0, 0, 4562, 0, 0, 4571, 0, 0, 0, 4574, 0, 0, 0, 4575, 0, 4576, 0, 4577, 0, 0, 0, 4581, 0, 0, 0, 0, 0, 4582, 0, 0, 4586, 0, 0, 0, 4588, 0, 0, 4597, 0, 4598, 0, 0, 0, 0, 4616, 4617, 0, 4618, 0, 0, 0, 0, 4619, 0, 4620, 0, 0, 4621, 0, 4624, 0, 0, 0, 0, 0, 4625, 0, 0, 0, 0, 4657, 0, 4659, 0, 4667, 0, 0, 0, 4668, 4670, 0, 4672, 0, 0, 0, 0, 0, 4673, 4676, 0, 0, 0, 0, 4687, 0, 0, 0, 0, 4697, 0, 0, 0, 0, 4699, 0, 4701, 0, 0, 0, 0, 4702, 0, 0, 4706, 0, 0, 4713, 0, 0, 0, 4714, 4715, 4716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4717, 0, 0, 4720, 0, 4721, 4729, 4735, 0, 0, 0, 4737, 0, 0, 0, 4739, 0, 0, 0, 4740, 0, 0, 0, 4741, 0, 0, 0, 0, 0, 4742, 0, 4745, 4746, 4747, 0, 0, 0, 0, 0, 0, 0, 0, 4748, 0, 0, 0, 4749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4751, 4786, 0, 4787, 0, 4788, 4796, 0, 0, 4797, 4798, 0, 4799, 4806, 4807, 0, 0, 0, 0, 4809, 4810, 0, 0, 0, 0, 0, 0, 4811, 0, 0, 0, 0, 0, 4812, 0, 4813, 0, 0, 4815, 0, 4821, 4822, 0, 0, 0, 0, 4823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4824, 0, 0, 0, 0, 4826, 0, 0, 0, 4828, 0, 4829, 0, 0, 0, 4843, 0, 0, 4847, 0, 4853, 4855, 4858, 0, 0, 0, 0, 0, 4859, 0, 4864, 0, 0, 4879, 0, 0, 0, 0, 4880, 0, 0, 0, 0, 4881, 0, 4882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4883, 0, 0, 0, 0, 4884, 0, 0, 0, 0, 0, 4886, 4887, 4888, 4894, 4896, 0, 4902, 0, 0, 4905, 0, 0, 4915, 0, 0, 0, 0, 0, 0, 0, 4916, 4917, 4919, 4921, 0, 0, 0, 0, 0, 4926, 0, 0, 0, 0, 4927, 0, 0, 0, 0, 0, 0, 0, 0, 4929, 0, 4930, 4931, 0, 4938, 0, 4952, 0, 4953, 4957, 4960, 4964, 0, 0, 0, 0, 0, 0, 0, 5019, 5020, 5022, 0, 0, 0, 0, 0, 5023, 0, 0, 0, 5024, 0, 0, 0, 5025, 0, 0, 0, 0, 5028, 0, 0, 0, 0, 5029, 5030, 5031, 0, 5033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5034, 5035, 0, 5036, 0, 0, 5037, 0, 0, 0, 0, 5038, 0, 0, 5039, 0, 0, 0, 5041, 5042, 0, 0, 0, 0, 5044, 5049, 5054, 0, 5055, 0, 5057, 0, 0, 0, 5060, 0, 0, 0, 0, 0, 5063, 0, 5064, 5065, 0, 5067, 0, 0, 0, 5068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5076, 0, 0, 0, 0, 0, 0, 0, 5077, 0, 0, 5078, 5080, 0, 0, 5083, 0, 0, 0, 0, 0, 0, 0, 0, 5085, 0, 0, 0, 0, 0, 0, 5098, 5099, 5101, 5105, 5107, 0, 5108, 0, 5109, 0, 0, 0, 0, 0, 0, 0, 5110, 0, 0, 0, 0, 0, 5117, 5118, 0, 5121, 0, 5122, 0, 0, 5130, 0, 0, 0, 5137, 0, 0, 0, 5148, 0, 0, 0, 0, 0, 0, 0, 5151, 5154, 0, 0, 0, 5155, 0, 0, 5156, 5159, 5161, 0, 0, 0, 0, 5162, 0, 0, 0, 0, 5163, 5164, 0, 5166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5167, 0, 0, 0, 5172, 0, 0, 0, 0, 0, 0, 5178, 5179, 0, 0, 5190, 0, 0, 5191, 5192, 5194, 0, 0, 5198, 5201, 0, 0, 0, 0, 0, 5203, 0, 5206, 5209, 0, 0, 0, 0, 0, 0, 5213, 0, 5214, 5216, 0, 0, 0, 0, 0, 5217, 0, 0, 0, 0, 0, 0, 0, 0, 5218, 5219, 0, 5231, 0, 0, 5244, 5249, 0, 5254, 0, 5255, 0, 0, 5257, 0, 0, 0, 0, 0, 5258, 0, 5260, 5270, 0, 5277, 0, 0, 0, 0, 0, 0, 5280, 5281, 5282, 5283, 0, 0, 0, 0, 0, 5284, 0, 5285, 0, 0, 0, 0, 0, 5287, 5288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5289, 5291, 0, 0, 5294, 0, 0, 5295, 0, 0, 0, 0, 0, 0, 0, 5304, 0, 0, 5306, 5307, 5308, 0, 5309, 0, 0, 5310, 0, 0, 0, 0, 5311, 5312, 0, 5313, 0, 0, 0, 0, 0, 5316, 0, 0, 0, 5317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5325, 0, 0, 0, 0, 0, 0, 5326, 0, 5327, 5329, 0, 5332, 0, 0, 0, 0, 5338, 0, 0, 0, 0, 0, 0, 0, 0, 5340, 0, 0, 5341, 0, 0, 0, 5342, 0, 5343, 5344, 0, 0, 5345, 0, 0, 0, 0, 0, 0, 5347, 5348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5349, 0, 5350, 0, 5354, 0, 0, 0, 0, 5358, 0, 0, 5359, 0, 0, 5361, 0, 0, 5365, 0, 5367, 0, 5373, 0, 0, 0, 5379, 0, 0, 0, 5380, 0, 0, 0, 5382, 0, 5384, 0, 0, 0, 0, 0, 0, 5385, 0, 0, 0, 0, 5387, 0, 0, 0, 0, 0, 0, 5388, 5390, 5393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5396, 0, 0, 0, 0, 5397, 5402, 0, 0, 0, 0, 0, 5403, 0, 0, 0, 5404, 5405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5406, 0, 0, 0, 0, 5410, 0, 0, 5411, 0, 5415, 0, 0, 0, 0, 5416, 5434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5438, 0, 5440, 0, 0, 0, 0, 0, 0, 5441, 5442, 0, 0, 0, 5443, 5444, 5447, 0, 0, 5448, 5449, 5451, 0, 0, 0, 5456, 5457, 0, 0, 0, 5459, 0, 0, 0, 5461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5464, 0, 5466, 0, 0, 5467, 0, 5470, 0, 0, 5473, 0, 0, 5474, 0, 0, 5476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5477, 0, 0, 0, 0, 0, 0, 0, 5484, 0, 0, 5485, 5486, 0, 0, 0, 0, 0, 5488, 0, 0, 0, 0, 0, 0, 0, 5489, 0, 0, 0, 0, 0, 5507, 0, 0, 0, 5510, 0, 5511, 0, 0, 5512, 0, 0, 0, 5513, 0, 5515, 0, 0, 5516, 5517, 0, 5518, 0, 0, 5522, 0, 0, 0, 0, 0, 5534, 5535, 0, 0, 5536, 0, 5538, 0, 0, 5543, 0, 5544, 0, 0, 5545, 0, 5547, 0, 5557, 0, 0, 5558, 0, 5560, 5567, 0, 0, 0, 0, 5568, 0, 0, 0, 5571, 5573, 0, 5574, 0, 5575, 0, 0, 0, 0, 5577, 0, 0, 5598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5600, 5609, 0, 0, 0, 0, 5610, 0, 0, 5612, 0, 5624, 0, 5625, 0, 0, 0, 5629, 0, 5641, 0, 5642, 5643, 0, 0, 0, 0, 0, 0, 5651, 0, 0, 0, 5652, 5653, 0, 5661, 5662, 5678, 0, 5679, 0, 0, 0, 0, 5685, 5686, 0, 0, 0, 0, 0, 5690, 5692, 0, 5703, 0, 0, 0, 0, 0, 5706, 0, 0, 0, 0, 5707, 0, 0, 0, 0, 0, 0, 5708, 0, 0, 5709, 0, 5710, 0, 0, 0, 5712, 0, 5733, 0, 5734, 5735, 0, 0, 5744, 5751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5752, 0, 5754, 0, 0, 0, 0, 0, 0, 5757, 5758, 0, 5760, 5761, 0, 0, 0, 0, 5763, 5764, 5765, 0, 5766, 0, 5767, 5768, 0, 5770, 0, 0, 0, 0, 5776, 5780, 0, 0, 0, 0, 5782, 0, 0, 0, 0, 5784, 0, 0, 5788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5799, 0, 0, 5801, 0, 0, 0, 5811, 0, 0, 0, 0, 0, 0, 5816, 0, 0, 5827, 0, 0, 0, 0, 0, 0, 0, 0, 5830, 5831, 0, 0, 5832, 0, 0, 5833, 0, 5835, 5844, 5845, 0, 5846, 0, 0, 0, 0, 0, 5850, 0, 0, 0, 0, 0, 5852, 0, 5855, 5857, 0, 0, 5859, 0, 5861, 0, 0, 5863, 0, 5865, 0, 0, 0, 5873, 5875, 0, 0, 0, 5877, 0, 5879, 0, 0, 0, 5888, 0, 0, 5889, 5891, 0, 5894, 0, 0, 0, 0, 0, 0, 5895, 0, 5897, 0, 0, 0, 0, 0, 0, 5907, 0, 5911, 0, 0, 5912, 0, 5913, 5922, 5924, 0, 5927, 5928, 0, 0, 0, 0, 5929, 5930, 0, 5933, 0, 0, 0, 0, 5949, 0, 0, 5951, 0, 0, 0, 0, 0, 0, 0, 0, 5953, 0, 0, 5954, 0, 5959, 5960, 5961, 0, 5964, 0, 0, 0, 5976, 5978, 5987, 5990, 0, 0, 0, 0, 0, 5991, 0, 5992, 0, 0, 0, 5994, 5995, 0, 0, 5996, 0, 0, 6001, 6003, 0, 0, 0, 0, 6007, 0, 0, 0, 0, 0, 6008, 0, 0, 6009, 0, 6010, 0, 0, 0, 6011, 6015, 0, 6017, 0, 6019, 0, 6023, 0, 0, 0, 0, 0, 0, 0, 6025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6026, 0, 6030, 0, 0, 6032, 0, 0, 0, 6033, 6038, 6040, 0, 0, 0, 6041, 6045, 0, 0, 6046, 0, 0, 6053, 0, 0, 6054, 0, 6055, 0, 0, 0, 0, 0, 0, 6057, 0, 6063, 0, 0, 0, 6064, 0, 6066, 6071, 6072, 0, 0, 0, 0, 0, 0, 6075, 6076, 0, 0, 6077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6078, 6079, 0, 0, 0, 0, 0, 0, 0, 0, 6080, 0, 6083, 0, 0, 0, 0, 0, 6084, 0, 0, 6088, 0, 6089, 0, 0, 6093, 6105, 0, 0, 6107, 0, 6110, 0, 0, 0, 6111, 6125, 6126, 0, 0, 0, 6129, 0, 0, 0, 0, 6130, 0, 0, 0, 6131, 6134, 0, 0, 0, 0, 0, 0, 6142, 0, 0, 0, 0, 0, 6144, 0, 0, 6146, 6151, 6153, 0, 6156, 0, 6163, 0, 6180, 6181, 0, 0, 0, 0, 0, 6182, 0, 0, 0, 0, 6184, 6195, 0, 0, 6206, 0, 6208, 0, 0, 6212, 6213, 6214, 0, 6215, 0, 0, 0, 6228, 0, 0, 0, 6234, 0, 0, 0, 0, 0, 0, 6235, 6240, 0, 6242, 6243, 6244, 0, 6250, 6255, 0, 0, 0, 0, 0, 6257, 0, 0, 0, 6258, 6278, 0, 6284, 0, 0, 0, 6285, 0, 0, 0, 0, 0, 0, 0, 0, 6286, 0, 0, 0, 6320, 0, 0, 6322, 6332, 0, 0, 0, 0, 0, 0, 0, 0, 6334, 0, 0, 0, 0, 0, 0, 0, 6335, 0, 0, 6337, 0, 6338, 0, 6339, 6340, 0, 0, 6356, 6357, 6369, 0, 0, 0, 6370, 6371, 6372, 0, 6373, 0, 0, 0, 0, 0, 6376, 0, 0, 0, 0, 0, 6382, 6383, 6384, 0, 0, 0, 0, 6386, 0, 6389, 6397, 6400, 6411, 0, 6414, 0, 0, 0, 0, 0, 0, 0, 6415, 6416, 0, 0, 0, 0, 0, 0, 6417, 0, 0, 0, 0, 6418, 0, 0, 0, 0, 0, 0, 0, 6420, 0, 6421, 6423, 6425, 0, 6429, 6430, 0, 6433, 6438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6439, 6440, 0, 0, 6441, 0, 0, 6444, 0, 0, 0, 0, 6446, 0, 0, 0, 0, 6447, 6448, 0, 0, 6450, 0, 0, 0, 6454, 0, 0, 6455, 0, 6461, 0, 0, 0, 0, 0, 0, 6462, 0, 0, 6463, 0, 6464, 0, 6465, 6467, 0, 0, 0, 6468, 0, 6479, 6480, 0, 0, 0, 0, 0, 0, 0, 6481, 0, 0, 6485, 6487, 0, 0, 0, 0, 0, 0, 6493, 0, 0, 0, 0, 0, 0, 0, 0, 6494, 6495, 6496, 0, 0, 0, 0, 0, 6498, 0, 0, 0, 6507, 6508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6511, 6512, 0, 0, 0, 0, 6513, 0, 0, 0, 6514, 0, 0, 0, 0, 0, 6516, 0, 0, 6517, 6518, 0, 0, 0, 6519, 6520, 6521, 0, 6523, 0, 0, 0, 0, 6524, 6528, 0, 6530, 0, 0, 6532, 0, 6578, 0, 0, 0, 6583, 0, 6584, 0, 0, 0, 6587, 0, 0, 0, 6590, 0, 6591, 0, 0, 0, 0, 0, 6592, 0, 0, 0, 0, 6593, 6594, 0, 0, 0, 0, 0, 6599, 6600, 0, 0, 6601, 6602, 6604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6608, 0, 0, 0, 0, 0, 0, 0, 0, 6610, 6611, 0, 6615, 0, 6616, 6618, 6620, 0, 6637, 0, 0, 0, 0, 6639, 0, 0, 0, 0, 6641, 0, 6642, 0, 0, 0, 6647, 0, 6660, 6663, 0, 6664, 0, 6666, 6669, 0, 6675, 6676, 6677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6678, 0, 0, 0, 6679, 0, 6680, 0, 0, 0, 0, 0, 0, 0, 6693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6704, 6705, 6706, 0, 0, 6711, 6713, 0, 0, 0, 0, 0, 6716, 0, 0, 0, 6717, 0, 6719, 6724, 0, 0, 0, 0, 0, 0, 0, 0, 6725, 6726, 0, 0, 0, 0, 0, 6728, 6729, 6735, 0, 6737, 6742, 0, 0, 6743, 6750, 0, 6751, 0, 0, 6752, 6753, 0, 0, 0, 0, 0, 0, 6754, 0, 0, 0, 0, 0, 6756, 0, 0, 0, 0, 0, 0, 6763, 0, 0, 6764, 6765, 0, 0, 0, 6770, 0, 0, 0, 6776, 6780, 0, 6781, 0, 0, 0, 6783, 0, 6784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6785, 0, 0, 0, 6792, 0, 0, 0, 6793, 0, 0, 6802, 0, 0, 0, 0, 0, 6803, 0, 0, 0, 6804, 0, 0, 0, 6812, 0, 0, 6823, 0, 6824, 6839, 0, 0, 0, 0, 6852, 0, 0, 6854, 0, 6856, 6857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6867, 0, 6868, 6870, 6872, 0, 0, 0, 6873, 6874, 0, 0, 0, 0, 0, 6875, 0, 0, 6877, 0, 0, 0, 0, 0, 0, 0, 6878, 0, 0, 0, 6879, 0, 6880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6887, 0, 6888, 6891, 6893, 0, 6895, 0, 0, 0, 0, 0, 0, 0, 0, 6899, 0, 0, 0, 0, 6901, 0, 0, 0, 0, 6910, 0, 6911, 0, 0, 6912, 0, 0, 6913, 6914, 0, 0, 0, 6915, 0, 0, 0, 6916, 6919, 0, 0, 0, 0, 0, 0, 6924, 0, 6925, 0, 0, 0, 6926, 6927, 6928, 0, 6929, 0, 6930, 0, 0, 6931, 6935, 0, 6936, 0, 0, 0, 0, 6939, 6940, 6941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6942, 6948, 6949, 0, 0, 0, 0, 0, 0, 0, 6952, 6954, 6963, 6965, 6966, 0, 0, 6967, 6968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6969, 0, 0, 6970, 6979, 0, 0, 6980, 0, 0, 6983, 0, 0, 0, 0, 0, 6984, 0, 0, 0, 0, 0, 0, 0, 6988, 6990, 6992, 0, 0, 0, 0, 0, 0, 0, 6995, 0, 0, 0, 7012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7019, 0, 0, 0, 0, 0, 0, 0, 0, 7021, 0, 0, 7022, 7023, 7028, 0, 7030, 7033, 0, 0, 0, 0, 0, 0, 7038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7039, 0, 0, 0, 0, 0, 7046, 0, 7047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7048, 7052, 0, 0, 0, 0, 0, 7054, 0, 7060, 0, 0, 0, 0, 7061, 0, 7065, 0, 0, 0, 0, 7067, 7069, 0, 7070, 7071, 7072, 0, 0, 7078, 0, 7080, 7081, 0, 7083, 0, 0, 0, 7084, 7087, 7088, 0, 0, 7090, 0, 7093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7107, 0, 0, 7108, 0, 0, 0, 0, 0, 0, 0, 0, 7110, 0, 7114, 0, 0, 0, 0, 0, 0, 0, 7115, 0, 7116, 0, 0, 0, 0, 0, 7117, 0, 0, 7118, 0, 0, 7124, 0, 7125, 0, 0, 7126, 0, 0, 0, 0, 7128, 0, 0, 0, 0, 0, 7129, 0, 7130, 0, 7132, 7133, 0, 0, 7134, 0, 0, 7139, 0, 7148, 7150, 0, 0, 0, 0, 7152, 0, 0, 0, 7153, 7156, 7157, 0, 0, 0, 0, 0, 7158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7163, 7165, 7169, 0, 7171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7172, 0, 7173, 7181, 0, 0, 0, 0, 0, 7182, 7185, 0, 0, 0, 0, 7187, 0, 7201, 7204, 0, 0, 0, 0, 0, 7206, 7207, 0, 0, 0, 0, 7211, 7216, 0, 7218, 0, 0, 0, 0, 7226, 7228, 7230, 7232, 7233, 7235, 7237, 0, 0, 0, 0, 7238, 7241, 0, 7242, 0, 0, 7247, 0, 0, 0, 7266, 0, 0, 0, 0, 0, 0, 0, 7289, 0, 0, 7290, 7291, 0, 0, 7292, 0, 7297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7300, 0, 7301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7302, 0, 0, 0, 0, 7305, 0, 0, 0, 0, 7307, 0, 7308, 0, 7310, 0, 7335, 0, 0, 0, 0, 0, 0, 0, 7337, 0, 7343, 7347, 0, 0, 0, 0, 0, 7348, 0, 7349, 7350, 7352, 7354, 0, 0, 0, 0, 7357, 0, 7358, 7366, 0, 7367, 7368, 0, 0, 7373, 0, 0, 0, 7374, 0, 0, 0, 0, 0, 0, 0, 7376, 0, 0, 0, 7377, 0, 0, 0, 0, 0, 7378, 0, 7379, 7380, 0, 0, 0, 0, 0, 7383, 0, 0, 7386, 0, 0, 0, 0, 7398, 0, 0, 0, 7399, 7400, 0, 7401, 0, 0, 0, 0, 0, 0, 0, 7402, 0, 0, 0, 0, 0, 7405, 0, 0, 0, 0, 0, 7406, 0, 0, 0, 0, 0, 0, 0, 0, 7421, 7427, 7429, 0, 0, 0, 7435, 0, 0, 7436, 0, 0, 0, 7437, 0, 0, 0, 0, 0, 0, 7438, 7443, 0, 7446, 0, 7448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7456, 0, 0, 0, 0, 0, 7457, 0, 0, 7461, 0, 0, 0, 0, 0, 7462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7463, 7466, 7472, 0, 7476, 0, 0, 7490, 0, 7491, 0, 0, 7493, 0, 0, 0, 7498, 7499, 0, 0, 7508, 0, 0, 0, 0, 0, 7512, 0, 0, 0, 7513, 7514, 7516, 0, 0, 0, 0, 7518, 0, 0, 7519, 7521, 7522, 0, 0, 0, 7526, 0, 0, 7529, 0, 0, 7531, 0, 7536, 0, 7538, 0, 7539, 0, 0, 7541, 7542, 7546, 0, 0, 0, 0, 0, 7547, 0, 7548, 0, 0, 0, 0, 0, 7550, 0, 0, 7552, 7553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7554, 7563, 0, 7573, 0, 0, 0, 0, 0, 0, 7574, 7576, 0, 7578, 7581, 7583, 0, 0, 0, 7584, 0, 7587, 0, 0, 0, 0, 0, 7589, 0, 0, 0, 7594, 0, 0, 7595, 0, 0, 7600, 7602, 7610, 0, 0, 0, 0, 0, 7612, 0, 7613, 7614, 0, 0, 7615, 0, 0, 7616, 0, 7620, 0, 7621, 7622, 0, 7623, 0, 0, 0, 0, 7626, 0, 0, 0, 0, 7627, 7629, 7631, 0, 0, 7633, 0, 0, 0, 0, 0, 7639, 0, 7640, 7642, 0, 0, 7643, 0, 0, 0, 0, 7644, 0, 0, 0, 0, 0, 0, 0, 7645, 0, 0, 0, 0, 0, 7661, 7662, 7663, 7665, 0, 7666, 0, 7667, 0, 7684, 7688, 7690, 0, 7691, 0, 0, 0, 0, 0, 0, 7692, 0, 0, 7700, 0, 7707, 0, 7708, 0, 7709, 0, 7721, 0, 0, 0, 7722, 0, 7724, 0, 0, 0, 0, 0, 0, 7729, 7731, 0, 7732, 0, 7733, 7735, 0, 0, 0, 0, 0, 0, 0, 7739, 0, 0, 7741, 7745, 0, 7748, 0, 0, 0, 7751, 0, 0, 0, 7752, 0, 0, 0, 0, 0, 0, 0, 7753, 0, 0, 7756, 0, 7757, 0, 7759, 0, 7760, 0, 0, 0, 0, 7761, 7768, 0, 0, 7769, 0, 0, 7770, 0, 0, 7771, 0, 0, 7772, 0, 0, 7773, 0, 0, 0, 0, 0, 7778, 7783, 0, 0, 0, 0, 0, 7784, 7785, 0, 7790, 0, 0, 0, 0, 7792, 0, 7798, 0, 0, 0, 0, 0, 7799, 0, 7810, 0, 0, 7813, 0, 7814, 0, 7816, 0, 7818, 7824, 7825, 7826, 0, 7828, 7830, 0, 0, 0, 7840, 0, 7842, 0, 7843, 0, 0, 0, 0, 7844, 0, 0, 0, 0, 0, 0, 0, 7846, 0, 0, 0, 0, 0, 7856, 7857, 7858, 7862, 0, 7865, 0, 0, 7866, 0, 0, 7913, 0, 0, 0, 0, 7914, 0, 0, 7915, 7917, 7918, 7919, 0, 7920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7921, 7922, 0, 7924, 0, 0, 7925, 0, 0, 7927, 0, 7930, 7935, 0, 0, 7937, 0, 0, 0, 0, 0, 0, 7939, 0, 7940, 0, 0, 0, 0, 0, 7941, 0, 0, 0, 0, 7945, 0, 0, 0, 0, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 7950, 0, 7953, 0, 0, 0, 0, 0, 0, 0, 7968, 0, 0, 0, 0, 7969, 7972, 7992, 0, 7993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7994, 0, 0, 0, 0, 8007, 8008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8010, 0, 0, 0, 8012, 0, 0, 0, 0, 0, 0, 0, 0, 8018, 0, 8028, 8029, 0, 0, 8030, 0, 0, 8032, 8033, 0, 0, 8034, 8036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8037, 0, 0, 0, 8043, 8052, 8059, 8060, 0, 0, 8061, 0, 0, 0, 8062, 0, 8063, 0, 8064, 0, 8066, 8068, 0, 0, 0, 8080, 8081, 0, 8089, 0, 0, 0, 0, 0, 8092, 0, 0, 0, 0, 0, 0, 8093, 8110, 0, 0, 0, 0, 0, 0, 0, 8111, 0, 0, 0, 0, 0, 8112, 8115, 0, 8117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8120, 8121, 8122, 8128, 8129, 8130, 8131, 0, 0, 8139, 0, 0, 8144, 0, 0, 0, 0, 8145, 8146, 8153, 0, 0, 0, 0, 0, 0, 0, 0, 8154, 0, 8157, 8160, 8162, 0, 8164, 8165, 0, 0, 0, 0, 8166, 8167, 0, 0, 8179, 0, 0, 0, 8185, 0, 0, 0, 8186, 0, 0, 8187, 0, 0, 0, 8188, 0, 0, 0, 0, 0, 8204, 0, 0, 0, 0, 8210, 0, 0, 0, 0, 0, 8213, 0, 8214, 0, 0, 8215, 0, 0, 0, 0, 0, 0, 8218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8219, 0, 8221, 0, 0, 8222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8225, 0, 0, 0, 8233, 0, 0, 8242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8247, 0, 8248, 8252, 0, 8256, 8257, 0, 0, 8261, 0, 8264, 8265, 0, 0, 0, 0, 8267, 0, 0, 0, 8269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8270, 0, 0, 0, 8278, 0, 8279, 8283, 0, 0, 8285, 8286, 8289, 8292, 0, 0, 0, 0, 8293, 8295, 8299, 8300, 8301, 0, 0, 0, 0, 0, 0, 8304, 8307, 0, 0, 0, 0, 0, 0, 0, 8321, 0, 0, 0, 8322, 8323, 8325, 8326, 8327, 0, 0, 8332, 8338, 0, 0, 8340, 0, 0, 0, 0, 0, 8350, 0, 0, 8351, 0, 8354, 8355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8360, 8372, 0, 0, 0, 0, 0, 0, 0, 0, 8377, 0, 0, 0, 0, 8380, 0, 0, 0, 8383, 0, 8384, 0, 0, 0, 0, 8386, 8392, 0, 0, 8394, 0, 0, 0, 0, 0, 0, 0, 8396, 8397, 0, 8398, 0, 8399, 0, 0, 0, 0, 0, 8400, 0, 8401, 8410, 8411, 0, 8412, 8413, 8422, 0, 0, 0, 0, 8423, 0, 0, 0, 0, 8424, 0, 0, 8425, 0, 0, 0, 0, 0, 0, 0, 8441, 8442, 0, 0, 0, 0, 0, 0, 8443, 0, 0, 8444, 0, 8447, 0, 0, 0, 0, 8451, 0, 8458, 0, 8462, 0, 0, 8468, 0, 8469, 0, 0, 0, 8470, 0, 8473, 8479, 8480, 0, 0, 0, 0, 8481, 8483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8484, 0, 0, 8490, 0, 0, 0, 0, 0, 0, 8491, 8493, 8494, 0, 8528, 0, 0, 0, 0, 0, 0, 0, 8530, 0, 0, 0, 0, 0, 0, 0, 0, 8534, 8538, 8540, 0, 0, 8541, 0, 0, 8545, 0, 8557, 0, 0, 8569, 8570, 0, 0, 8571, 8574, 8575, 8579, 0, 8583, 0, 0, 0, 0, 8591, 0, 0, 0, 0, 0, 0, 0, 0, 8606, 0, 8607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8608, 0, 0, 8609, 0, 0, 0, 8610, 0, 0, 0, 8611, 0, 0, 8613, 8617, 8621, 0, 0, 8622, 0, 8623, 0, 8624, 8625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8637, 8638, 8639, 8650, 0, 0, 0, 0, 8652, 8654, 8655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8656, 0, 0, 0, 0, 0, 8657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8658, 0, 0, 8659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8660, 0, 0, 0, 0, 0, 0, 8661, 8663, 8664, 0, 0, 0, 0, 8665, 0, 8669, 0, 0, 0, 0, 0, 0, 0, 8671, 8674, 0, 8684, 0, 8686, 0, 0, 0, 8689, 0, 0, 0, 8690, 0, 8706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8710, 0, 8711, 8713, 8714, 8724, 8727, 8728, 8733, 8736, 0, 8737, 8739, 0, 0, 0, 0, 8742, 8743, 8745, 8754, 0, 0, 0, 0, 8756, 0, 0, 0, 0, 0, 0, 8757, 8760, 0, 0, 0, 0, 0, 8762, 8763, 8764, 0, 8766, 8769, 8770, 8773, 0, 8774, 0, 8779, 0, 0, 0, 0, 8780, 0, 0, 8781, 0, 0, 8783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8784, 0, 0, 0, 0, 0, 0, 0, 0, 8785, 0, 0, 0, 0, 8786, 0, 0, 0, 0, 8788, 8790, 0, 0, 0, 8803, 0, 8813, 8814, 0, 0, 0, 0, 0, 8815, 8816, 0, 0, 0, 0, 8818, 0, 0, 0, 0, 8822, 8828, 8829, 0, 8831, 0, 0, 0, 0, 8833, 0, 0, 0, 8834, 0, 0, 0, 8835, 0, 8836, 0, 0, 0, 8837, 0, 0, 0, 0, 0, 0, 8838, 8839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8840, 0, 0, 0, 8841, 0, 8842, 0, 0, 0, 8846, 0, 0, 0, 0, 0, 0, 0, 8847, 0, 8848, 0, 0, 8864, 0, 0, 8866, 0, 0, 8870, 8872, 0, 0, 8873, 8874, 0, 0, 0, 0, 0, 0, 8875, 0, 8876, 0, 0, 0, 0, 8896, 8900, 0, 0, 0, 0, 8901, 0, 0, 0, 0, 0, 8904, 0, 8907, 0, 0, 0, 0, 8911, 8912, 8913, 0, 0, 0, 8914, 0, 8915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8916, 0, 0, 0, 8929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8930, 0, 8932, 0, 8943, 0, 0, 0, 8945, 8947, 0, 0, 0, 0, 8949, 0, 8950, 0, 8954, 8957, 0, 0, 8970, 0, 0, 0, 0, 8971, 0, 8996, 0, 0, 0, 0, 8997, 9000, 0, 0, 0, 0, 9001, 9002, 0, 9004, 9009, 9024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9027, 9082, 0, 0, 9083, 9089, 0, 0, 0, 0, 0, 0, 9090, 0, 0, 0, 9092, 0, 0, 9093, 0, 9095, 0, 0, 9096, 9097, 9101, 9102, 0, 0, 0, 0, 0, 0, 0, 0, 9112, 0, 0, 0, 0, 0, 0, 9114, 0, 0, 9120, 0, 9121, 9122, 0, 0, 0, 9123, 9124, 0, 0, 9125, 0, 0, 9126, 0, 9127, 0, 0, 9129, 9131, 0, 0, 0, 9132, 0, 0, 9136, 0, 9144, 0, 0, 9148, 0, 0, 0, 0, 0, 0, 9149, 0, 9152, 9163, 0, 0, 9165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9166, 0, 9169, 0, 0, 0, 0, 0, 0, 0, 9170, 0, 0, 0, 0, 9172, 0, 9174, 9175, 9176, 0, 9177, 0, 0, 0, 0, 0, 0, 0, 0, 9186, 0, 9187, 0, 0, 0, 9188, 9189, 0, 0, 9190, 0, 0, 0, 0, 9191, 0, 0, 0, 9193, 0, 0, 0, 0, 9197, 9198, 0, 0, 0, 9208, 9211, 0, 0, 0, 0, 9216, 9217, 0, 9220, 0, 0, 0, 0, 9221, 9222, 9223, 0, 9224, 9225, 0, 0, 9227, 0, 9228, 9229, 0, 0, 9230, 0, 9232, 0, 9233, 0, 0, 0, 0, 0, 9234, 9235, 0, 0, 9237, 0, 0, 0, 0, 0, 0, 0, 0, 9238, 9240, 0, 0, 9241, 0, 0, 0, 0, 9244, 0, 0, 0, 0, 9247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9248, 0, 0, 0, 9249, 0, 0, 0, 0, 0, 9250, 0, 0, 0, 0, 9251, 0, 0, 9252, 9255, 0, 0, 0, 9256, 0, 0, 0, 0, 0, 0, 0, 9257, 0, 0, 9258, 0, 0, 0, 0, 0, 0, 9259, 0, 0, 0, 0, 0, 9262, 9263, 0, 0, 9265, 9266, 0, 0, 0, 0, 0, 0, 0, 0, 9268, 9271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9273, 0, 0, 0, 9276, 9277, 9279, 0, 0, 0, 0, 0, 0, 0, 9280, 0, 0, 9293, 0, 0, 0, 0, 0, 9297, 9301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9308, 9309, 9313, 9321, 9322, 0, 9326, 9327, 0, 0, 9477, 0, 9479, 0, 0, 0, 0, 9482, 0, 0, 0, 9483, 0, 9484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9485, 0, 0, 9486, 0, 0, 0, 9489, 0, 0, 0, 0, 9490, 9491, 0, 0, 0, 0, 9493, 0, 9495, 9496, 0, 0, 0, 0, 0, 0, 0, 0, 9500, 0, 9502, 0, 0, 0, 0, 0, 9504, 9507, 0, 9509, 0, 9511, 0, 0, 9513, 0, 0, 0, 0, 0, 0, 0, 0, 9515, 0, 0, 0, 0, 0, 0, 9516, 9517, 0, 0, 0, 0, 9532, 0, 0, 9533, 0, 0, 9538, 0, 9539, 9540, 0, 0, 0, 0, 9541, 0, 0, 0, 9542, 0, 0, 0, 0, 0, 0, 0, 0, 9544, 9545, 0, 9546, 0, 0, 0, 0, 0, 0, 9547, 9548, 0, 0, 0, 9550, 0, 9557, 0, 9558, 0, 9561, 0, 9563, 9570, 0, 9572, 9574, 9575, 0, 0, 0, 9577, 9592, 0, 0, 9596, 0, 0, 0, 9598, 0, 9600, 0, 9601, 0, 0, 0, 0, 0, 0, 9608, 0, 9638, 9639, 0, 0, 0, 0, 0, 0, 0, 9641, 0, 0, 9643, 9644, 9645, 9646, 0, 0, 0, 9648, 0, 0, 0, 0, 0, 0, 0, 9650, 9654, 0, 0, 0, 0, 0, 0, 0, 0, 9655, 0, 0, 0, 0, 0, 9656, 0, 9657, 0, 0, 0, 0, 9658, 0, 0, 9659, 0, 0, 9664, 0, 0, 9665, 0, 9667, 9669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9671, 0, 9673, 9681, 0, 0, 0, 0, 9682, 9683, 9684, 0, 0, 0, 0, 9686, 9698, 0, 0, 9700, 9701, 9702, 0, 9703, 9717, 0, 0, 0, 0, 9718, 0, 9726, 0, 0, 0, 0, 9727, 0, 0, 0, 9728, 0, 9742, 0, 9744, 0, 0, 0, 9750, 0, 9754, 9755, 0, 0, 0, 0, 0, 9756, 0, 9757, 9768, 0, 9769, 0, 0, 0, 9770, 9771, 0, 9773, 0, 9774, 0, 9775, 0, 0, 0, 9776, 9777, 9784, 0, 0, 0, 9786, 0, 9789, 0, 0, 0, 0, 9793, 9794, 0, 0, 0, 9808, 0, 0, 0, 0, 0, 9811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9812, 0, 9820, 0, 9823, 0, 9828, 0, 0, 0, 0, 9830, 0, 0, 9833, 9836, 0, 0, 0, 9840, 0, 0, 0, 9841, 0, 0, 9842, 0, 9845, 0, 0, 0, 9847, 9848, 0, 0, 9855, 0, 0, 0, 0, 0, 0, 9856, 9863, 9865, 0, 0, 0, 0, 0, 0, 0, 0, 9866, 9867, 9868, 9873, 9875, 0, 0, 0, 0, 0, 0, 9880, 0, 9886, 0, 0, 0, 9887, 0, 0, 9891, 0, 0, 0, 0, 0, 0, 0, 9906, 9907, 9908, 0, 0, 0, 9909, 0, 0, 0, 0, 0, 0, 9910, 0, 0, 0, 0, 9913, 0, 0, 0, 0, 9914, 0, 0, 0, 0, 0, 9922, 0, 0, 0, 0, 9923, 9925, 0, 0, 0, 0, 0, 0, 9930, 0, 0, 0, 9931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9932, 0, 9939, 0, 0, 9940, 9962, 9966, 0, 9969, 9970, 0, 0, 9974, 0, 9979, 9981, 9982, 0, 0, 0, 9985, 0, 0, 0, 0, 0, 0, 9987, 0, 0, 0, 0, 0, 0, 0, 9988, 9993, 0, 0, 9994, 0, 0, 0, 9997, 0, 10004, 0, 0, 0, 0, 0, 10007, 10019, 10020, 10022, 0, 0, 0, 10031, 0, 0, 0, 0, 0, 10032, 0, 0, 10034, 0, 10036, 0, 0, 0, 0, 10038, 0, 10039, 10040, 10041, 10042, 0, 0, 0, 0, 0, 10043, 0, 0, 0, 0, 0, 10045, 10054, 0, 0, 0, 0, 10055, 0, 0, 10057, 10058, 0, 0, 0, 0, 0, 0, 10059, 0, 0, 0, 0, 0, 0, 0, 10060, 0, 0, 0, 0, 0, 0, 0, 10063, 0, 10066, 0, 0, 0, 10070, 0, 10072, 0, 0, 10076, 10077, 0, 0, 10084, 0, 10087, 10090, 10091, 0, 0, 0, 10094, 10097, 0, 0, 0, 0, 0, 0, 10098, 0, 0, 0, 0, 0, 0, 10103, 0, 10104, 0, 10108, 0, 0, 0, 0, 0, 0, 0, 0, 10120, 0, 0, 0, 10122, 0, 0, 10125, 0, 0, 0, 0, 10127, 10128, 0, 0, 10134, 0, 10135, 10136, 0, 10137, 0, 0, 10147, 0, 10149, 10150, 0, 0, 10156, 0, 10158, 10159, 10160, 10168, 0, 0, 10171, 0, 10173, 0, 0, 0, 10176, 0, 0, 0, 0, 10177, 0, 0, 0, 0, 10178, 0, 0, 0, 0, 10194, 0, 10202, 0, 0, 10203, 10204, 0, 10205, 10206, 0, 10207, 0, 0, 0, 0, 10209, 0, 0, 0, 0, 0, 0, 0, 10213, 0, 0, 0, 0, 0, 0, 10217, 0, 10229, 0, 10230, 10231, 0, 0, 10232, 0, 0, 10237, 10238, 10244, 0, 0, 0, 0, 0, 10250, 0, 10252, 0, 0, 0, 0, 0, 0, 10255, 0, 0, 10257, 0, 0, 0, 0, 0, 0, 10258, 0, 10259, 0, 0, 0, 0, 0, 0, 0, 0, 10260, 0, 0, 0, 0, 0, 0, 0, 10284, 10288, 10289, 0, 0, 0, 10290, 0, 10296, 0, 0, 0, 0, 0, 10297, 0, 0, 0, 0, 0, 0, 10298, 0, 0, 0, 0, 10299, 10303, 0, 0, 0, 0, 0, 10306, 0, 0, 0, 10307, 0, 10308, 0, 0, 0, 0, 10311, 0, 0, 0, 0, 0, 0, 0, 10315, 10317, 0, 0, 0, 10318, 10319, 0, 10321, 0, 10326, 0, 10328, 0, 0, 0, 0, 10329, 0, 0, 10331, 0, 10332, 0, 0, 0, 0, 0, 0, 10334, 0, 0, 10335, 10338, 0, 0, 0, 0, 0, 10339, 10349, 0, 0, 0, 0, 0, 0, 10351, 0, 10353, 0, 0, 0, 0, 0, 0, 10362, 0, 10368, 0, 10369, 0, 0, 0, 10372, 10373, 0, 0, 0, 0, 0, 10374, 0, 0, 0, 10375, 0, 10376, 0, 0, 10386, 10388, 10390, 0, 0, 0, 0, 0, 0, 0, 10391, 0, 0, 10392, 10394, 0, 0, 10396, 0, 10397, 0, 10403, 0, 0, 0, 0, 0, 0, 0, 0, 10404, 0, 10405, 10410, 0, 0, 10411, 0, 10412, 0, 0, 0, 0, 0, 0, 0, 10421, 10422, 10423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10425, 0, 0, 10427, 0, 0, 10430, 0, 0, 0, 0, 0, 10432, 0, 10433, 10434, 0, 0, 0, 0, 10436, 10437, 0, 10438, 0, 10439, 0, 10444, 10446, 0, 0, 0, 0, 0, 10448, 0, 0, 0, 0, 0, 10449, 0, 0, 0, 0, 0, 0, 0, 10451, 0, 10453, 0, 0, 0, 10454, 10457, 0, 0, 10459, 0, 10469, 0, 0, 0, 0, 0, 10472, 10481, 0, 0, 0, 0, 0, 10482, 10483, 0, 10492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10499, 0, 0, 0, 10502, 0, 0, 10510, 0, 10521, 10524, 0, 0, 10525, 10526, 10528, 0, 0, 0, 0, 0, 0, 0, 0, 10530, 0, 0, 0, 0, 10533, 0, 10534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10535, 10536, 0, 0, 10544, 0, 10553, 10556, 0, 10557, 10559, 0, 0, 0, 0, 0, 10562, 10563, 10564, 0, 10565, 0, 0, 0, 10566, 0, 10567, 0, 0, 0, 0, 10575, 0, 0, 10576, 0, 10578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10585, 10586, 10587, 10589, 0, 10590, 0, 0, 10594, 0, 0, 0, 0, 0, 10598, 0, 0, 10601, 0, 0, 0, 10602, 0, 10603, 0, 10604, 0, 10605, 0, 0, 10607, 0, 10626, 0, 10627, 0, 0, 0, 0, 0, 10629, 10630, 10631, 0, 0, 0, 10646, 0, 0, 0, 10647, 0, 10650, 0, 10651, 0, 0, 0, 10652, 10653, 10655, 0, 10658, 0, 0, 10659, 0, 10667, 0, 0, 0, 0, 10669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10670, 0, 0, 0, 10671, 0, 0, 0, 0, 10672, 10673, 0, 10674, 0, 0, 0, 10676, 0, 0, 0, 0, 0, 0, 10678, 0, 10682, 0, 0, 10692, 0, 10697, 0, 0, 0, 0, 10698, 0, 0, 0, 10700, 0, 0, 0, 0, 0, 10703, 0, 10704, 0, 0, 0, 0, 0, 0, 0, 10705, 0, 10715, 10718, 10720, 0, 0, 10722, 0, 0, 0, 0, 0, 0, 0, 0, 10723, 0, 0, 0, 0, 10726, 0, 0, 0, 0, 0, 10727, 10730, 10743, 0, 0, 0, 0, 0, 0, 10744, 0, 0, 10745, 0, 0, 0, 0, 0, 0, 10748, 0, 0, 0, 0, 10750, 0, 0, 10752, 10753, 0, 0, 0, 10756, 0, 0, 0, 0, 0, 0, 10758, 0, 0, 0, 10759, 0, 10769, 0, 0, 10772, 0, 0, 0, 0, 0, 0, 10773, 0, 0, 0, 10777, 0, 0, 10779, 0, 0, 0, 0, 0, 0, 0, 0, 10780, 10784, 0, 0, 0, 10789, 0, 0, 0, 10791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10795, 0, 0, 10796, 0, 10808, 0, 10809, 0, 0, 0, 10810, 0, 0, 0, 10812, 0, 0, 10814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10815, 0, 0, 0, 0, 10816, 10817, 0, 0, 0, 0, 10819, 0, 10820, 0, 0, 0, 0, 10821, 10822, 10823, 0, 10826, 10849, 0, 0, 0, 0, 10850, 0, 0, 10852, 0, 10853, 0, 0, 10856, 0, 0, 10857, 10858, 10859, 10860, 0, 0, 0, 0, 0, 0, 10863, 0, 10866, 10867, 10872, 10890, 0, 0, 10891, 10892, 0, 0, 0, 0, 0, 10893, 0, 0, 0, 10896, 10899, 0, 0, 10900, 10902, 0, 0, 0, 0, 0, 10903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10905, 0, 10906, 0, 0, 0, 0, 10908, 10911, 0, 10912, 0, 0, 10916, 0, 0, 0, 0, 0, 10917, 0, 10918, 0, 0, 0, 10923, 0, 0, 0, 0, 0, 10924, 0, 0, 10928, 10929, 0, 0, 10930, 0, 0, 0, 10932, 0, 0, 0, 0, 10939, 0, 0, 10945, 0, 0, 0, 10947, 0, 0, 10948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10958, 0, 10960, 10962, 0, 0, 10964, 0, 0, 0, 10966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10967, 0, 0, 0, 10968, 0, 0, 0, 10973, 0, 0, 0, 0, 0, 10975, 0, 0, 0, 10976, 10978, 0, 0, 10982, 10984, 10987, 0, 0, 10988, 0, 10989, 0, 0, 10991, 0, 0, 0, 0, 10992, 0, 0, 0, 10993, 0, 10995, 0, 0, 0, 10996, 10997, 0, 0, 0, 10998, 0, 10999, 0, 11001, 0, 0, 0, 0, 0, 0, 11010, 11012, 0, 11013, 11016, 11017, 0, 0, 11019, 11020, 11021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11022, 0, 0, 11023, 11029, 0, 0, 0, 0, 11031, 0, 0, 0, 11034, 0, 0, 0, 0, 11055, 0, 0, 0, 0, 0, 11056, 11060, 0, 0, 0, 0, 0, 0, 11061, 0, 0, 11064, 11065, 0, 11066, 0, 11069, 0, 11085, 0, 0, 0, 0, 0, 11086, 0, 0, 0, 11088, 0, 0, 0, 11094, 0, 0, 0, 11095, 11096, 0, 0, 0, 0, 0, 0, 11097, 11098, 0, 0, 0, 0, 0, 0, 11099, 0, 0, 11102, 11108, 0, 0, 0, 11109, 0, 11114, 11119, 0, 11131, 0, 0, 0, 11142, 0, 0, 11143, 0, 11146, 0, 11147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11148, 0, 11149, 11152, 11153, 11154, 0, 11156, 0, 11157, 0, 0, 0, 11158, 0, 0, 11159, 11160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11163, 0, 0, 11164, 11166, 0, 0, 0, 11172, 11174, 0, 0, 0, 11176, 0, 0, 0, 0, 0, 11182, 11183, 0, 0, 0, 11184, 11187, 0, 0, 11188, 11189, 0, 0, 0, 0, 0, 0, 11194, 0, 0, 0, 0, 0, 0, 0, 11200, 11202, 0, 0, 0, 0, 0, 0, 11203, 0, 11204, 0, 0, 0, 0, 0, 11205, 0, 0, 0, 11206, 0, 11207, 0, 0, 11209, 0, 11211, 0, 11214, 0, 0, 11231, 0, 0, 0, 11293, 11295, 0, 0, 11296, 11297, 11302, 0, 0, 0, 11307, 0, 0, 0, 0, 11309, 11310, 0, 11311, 0, 0, 0, 11313, 0, 11314, 0, 0, 0, 0, 11334, 0, 11338, 0, 0, 0, 11339, 0, 0, 0, 0, 0, 11340, 0, 11341, 11342, 0, 11344, 0, 11345, 0, 0, 0, 11348, 11349, 0, 0, 11350, 0, 0, 0, 11355, 0, 0, 0, 0, 0, 0, 11356, 0, 11357, 11370, 0, 0, 11371, 0, 11374, 11376, 0, 0, 0, 11377, 0, 0, 11378, 11383, 0, 11386, 11399, 0, 11400, 11406, 0, 0, 0, 11408, 0, 0, 11409, 11412, 0, 0, 0, 0, 11417, 0, 0, 0, 11418, 0, 11421, 0, 11426, 11429, 0, 0, 0, 0, 0, 11430, 0, 11437, 0, 11438, 0, 0, 0, 0, 0, 11440, 11453, 0, 0, 0, 0, 0, 0, 11454, 0, 0, 0, 0, 11455, 0, 0, 11456, 11460, 11461, 11463, 0, 11469, 0, 11473, 0, 0, 0, 0, 11474, 0, 0, 0, 11475, 0, 11476, 11477, 11480, 0, 0, 0, 0, 11481, 0, 0, 11484, 0, 0, 11487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11497, 0, 0, 11502, 0, 11509, 0, 0, 11510, 11511, 11513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11515, 0, 0, 0, 0, 11516, 0, 11520, 11521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11529, 11530, 11531, 11534, 0, 0, 11543, 0, 0, 0, 0, 0, 11547, 0, 11548, 0, 0, 0, 0, 0, 11552, 11556, 0, 11557, 0, 0, 11559, 0, 11560, 0, 0, 0, 0, 0, 0, 11561, 0, 0, 11563, 11564, 0, 11565, 0, 0, 0, 0, 11567, 0, 0, 0, 11569, 0, 11574, 0, 11575, 0, 0, 0, 11577, 0, 11578, 0, 0, 0, 11580, 11581, 0, 0, 0, 11582, 11584, 0, 0, 0, 0, 0, 0, 0, 11587, 0, 11588, 11591, 0, 11595, 0, 0, 0, 0, 0, 0, 0, 0, 11596, 0, 11597, 0, 0, 0, 0, 11598, 11601, 0, 0, 0, 11602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11603, 11604, 0, 11606, 0, 0, 11608, 0, 0, 0, 0, 11610, 0, 0, 11611, 0, 0, 0, 0, 11613, 0, 11622, 0, 0, 0, 11623, 0, 0, 0, 0, 11625, 0, 0, 11626, 11627, 11628, 11630, 0, 0, 0, 0, 0, 0, 11639, 0, 0, 11646, 0, 11648, 11649, 0, 11650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11651, 0, 0, 11652, 11653, 11656, 0, 0, 11677, 11679, 0, 0, 0, 0, 11680, 0, 0, 11681, 0, 11685, 0, 0, 0, 0, 0, 0, 0, 0, 11688, 0, 0, 0, 11716, 0, 11719, 0, 0, 0, 0, 0, 11721, 0, 0, 11724, 11743, 0, 0, 0, 0, 0, 0, 0, 0, 11745, 11748, 11750, 0, 0, 0, 0, 0, 11751, 0, 0, 0, 11752, 11754, 0, 11755, 0, 0, 0, 0, 0, 0, 0, 11759, 0, 0, 0, 0, 0, 0, 11760, 0, 0, 0, 11761, 0, 0, 0, 0, 0, 0, 11766, 11767, 0, 11772, 11773, 0, 11774, 0, 0, 11775, 0, 11777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11778, 11780, 0, 0, 0, 0, 0, 0, 0, 11783, 0, 11784, 0, 0, 0, 11785, 0, 0, 0, 11786, 0, 0, 0, 0, 11788, 0, 0, 11789, 11791, 11792, 0, 0, 0, 0, 11795, 11834, 11835, 11836, 0, 0, 11837, 0, 0, 0, 11838, 0, 0, 11846, 11851, 0, 11852, 0, 11869, 0, 0, 0, 11871, 0, 0, 0, 11872, 11874, 0, 0, 0, 0, 0, 0, 11875, 0, 11876, 11877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11883, 0, 0, 0, 0, 0, 0, 0, 11884, 0, 11885, 0, 11886, 0, 0, 11887, 0, 11894, 11895, 11897, 11909, 11910, 0, 11912, 11918, 0, 0, 11920, 0, 11922, 11924, 11927, 11928, 0, 0, 0, 0, 11929, 0, 11934, 0, 0, 0, 0, 0, 11941, 11943, 11944, 0, 11945, 0, 0, 0, 0, 11948, 11949, 0, 0, 0, 0, 11953, 0, 11954, 0, 11955, 0, 11956, 0, 0, 0, 0, 0, 11957, 0, 0, 11959, 0, 0, 0, 0, 0, 0, 0, 0, 11961, 0, 0, 0, 0, 0, 11978, 0, 0, 0, 11979, 11980, 11986, 11987, 0, 11992, 0, 0, 0, 0, 0, 11993, 0, 0, 0, 11994, 0, 11999, 12004, 12005, 12006, 0, 0, 0, 0, 0, 12011, 0, 0, 12012, 12014, 0, 0, 12015, 0, 0, 12019, 12028, 0, 0, 12029, 0, 0, 12032, 12033, 0, 0, 0, 0, 12034, 0, 12041, 12043, 0, 0, 12044, 0, 0, 0, 0, 0, 0, 0, 12046, 0, 0, 0, 0, 0, 0, 0, 12054, 12055, 0, 12056, 0, 0, 0, 12060, 12064, 0, 0, 0, 0, 0, 12065, 12067, 12068, 0, 0, 0, 0, 0, 0, 0, 0, 12074, 0, 0, 0, 12075, 12076, 0, 0, 0, 12079, 0, 12081, 12086, 12087, 0, 0, 12088, 0, 0, 0, 0, 12089, 0, 12092, 0, 0, 0, 0, 12097, 0, 0, 0, 0, 0, 0, 0, 0, 12098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12102, 12103, 12104, 12111, 0, 0, 12114, 12116, 0, 0, 0, 12118, 0, 0, 0, 12119, 12120, 12128, 0, 0, 0, 0, 12130, 0, 0, 0, 0, 0, 0, 12131, 0, 0, 0, 12132, 12134, 0, 0, 0, 0, 12137, 0, 12139, 0, 12141, 0, 0, 12142, 0, 0, 0, 12144, 0, 0, 0, 0, 0, 12145, 0, 12148, 0, 12153, 0, 0, 0, 0, 12154, 12171, 12173, 0, 0, 0, 12175, 0, 0, 0, 0, 12178, 0, 0, 0, 0, 0, 0, 0, 12183, 0, 0, 0, 0, 0, 0, 0, 0, 12184, 0, 0, 0, 12186, 0, 0, 0, 0, 0, 12187, 12188, 0, 0, 12189, 0, 12196, 0, 12197, 0, 0, 12198, 0, 12201, 0, 0, 0, 0, 12203, 0, 12209, 0, 0, 0, 0, 12210, 12211, 12212, 12213, 0, 12217, 12218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12222, 0, 0, 0, 0, 0, 0, 0, 12223, 0, 0, 12229, 0, 0, 0, 0, 12233, 0, 0, 0, 0, 12234, 0, 0, 12236, 12242, 0, 0, 0, 12243, 0, 0, 0, 12244, 12253, 0, 12254, 12256, 0, 12257, 0, 0, 12275, 0, 0, 0, 0, 0, 12277, 0, 0, 0, 0, 0, 12278, 0, 12289, 0, 0, 12290, 0, 12292, 12293, 0, 0, 12294, 0, 12295, 0, 0, 12296, 0, 12297, 0, 12298, 0, 0, 0, 0, 12301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12309, 0, 12338, 12340, 0, 0, 0, 0, 12341, 0, 0, 0, 0, 0, 0, 0, 0, 12342, 12343, 0, 12344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12345, 0, 0, 0, 0, 0, 0, 0, 0, 12346, 0, 0, 0, 0, 12348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12351, 0, 12355, 12356, 12357, 0, 0, 12367, 12370, 12371, 0, 0, 0, 0, 0, 12372, 12376, 0, 0, 0, 0, 0, 0, 0, 0, 12379, 0, 12382, 0, 12383, 0, 0, 12384, 0, 0, 0, 0, 12393, 0, 0, 12394, 0, 0, 0, 0, 12398, 12403, 0, 0, 12404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12410, 0, 0, 0, 12411, 0, 0, 0, 12412, 0, 0, 0, 0, 12420, 0, 12421, 0, 0, 0, 0, 0, 12423, 0, 12425, 12429, 0, 0, 0, 12431, 12432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12434, 0, 0, 0, 0, 0, 12435, 12436, 0, 0, 0, 0, 0, 0, 0, 0, 12437, 0, 0, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 0, 0, 0, 12445, 0, 0, 0, 12450, 12451, 0, 0, 0, 0, 0, 0, 0, 0, 12452, 12475, 0, 0, 12493, 12494, 0, 0, 0, 12495, 0, 0, 0, 0, 12496, 12502, 12509, 0, 0, 0, 0, 12510, 0, 12512, 12513, 0, 0, 0, 0, 12514, 0, 0, 0, 12515, 0, 12520, 0, 0, 0, 12524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12527, 0, 0, 0, 12528, 0, 0, 0, 12529, 0, 0, 0, 0, 0, 12530, 0, 12535, 0, 0, 12536, 0, 12538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12540, 0, 12548, 0, 0, 0, 0, 0, 12550, 0, 0, 0, 12551, 12552, 0, 0, 0, 12554, 0, 0, 0, 0, 0, 0, 0, 0, 12555, 0, 0, 12562, 0, 12565, 0, 12566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12569, 0, 0, 0, 12571, 12574, 0, 0, 0, 0, 0, 0, 0, 12577, 0, 0, 0, 0, 0, 0, 0, 12578, 12579, 12603, 0, 12608, 0, 0, 12611, 0, 12612, 0, 12615, 0, 12625, 0, 0, 0, 0, 12627, 12646, 0, 12648, 0, 0, 12657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12670, 0, 0, 12671, 0, 12673, 12677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12679, 0, 12681, 0, 12682, 12693, 0, 12694, 0, 12697, 0, 12701, 0, 0, 0, 12703, 12704, 0, 0, 0, 0, 12707, 12737, 0, 0, 12739, 0, 0, 12740, 0, 0, 12742, 12743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12745, 0, 12746, 12747, 0, 12748, 0, 0, 12759, 12767, 0, 0, 0, 0, 12773, 0, 12774, 12778, 0, 0, 0, 0, 0, 0, 0, 12779, 0, 0, 0, 0, 0, 12780, 12793, 0, 12824, 0, 12825, 0, 12836, 0, 0, 0, 0, 12839, 0, 12842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12843, 12845, 0, 12846, 0, 0, 0, 0, 12847, 0, 0, 12850, 12852, 12853, 0, 0, 0, 12854, 0, 0, 0, 12855, 0, 12856, 0, 12858, 0, 0, 12859, 0, 12862, 0, 12863, 0, 0, 12866, 0, 12869, 12872, 12873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12875, 0, 12877, 0, 0, 12878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12884, 12885, 12888, 0, 12889, 0, 0, 0, 0, 12893, 0, 0, 0, 12895, 12896, 12898, 0, 0, 0, 0, 0, 0, 0, 12902, 0, 12909, 12910, 0, 12926, 0, 12928, 0, 0, 0, 12929, 0, 12930, 0, 0, 0, 0, 12931, 0, 12932, 12933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12934, 0, 12942, 0, 0, 0, 0, 12944, 0, 0, 0, 0, 0, 0, 0, 0, 12946, 0, 0, 12948, 0, 0, 12949, 0, 0, 0, 0, 12950, 0, 0, 0, 0, 12951, 0, 12952, 0, 12953, 0, 0, 0, 12954, 12958, 12959, 0, 0, 0, 0, 0, 12960, 12964, 0, 0, 0, 0, 0, 12966, 0, 0, 0, 0, 0, 0, 0, 0, 12970, 0, 12971, 0, 0, 0, 0, 0, 0, 12972, 0, 0, 12982, 0, 0, 0, 12984, 12985, 0, 12986, 12996, 12997, 13001, 13002, 0, 0, 0, 0, 13004, 0, 0, 13005, 0, 0, 13007, 13009, 0, 13017, 0, 0, 0, 13020, 0, 13021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13022, 0, 0, 0, 0, 0, 0, 0, 0, 13024, 13027, 0, 0, 0, 0, 0, 13028, 0, 0, 13029, 0, 0, 0, 0, 0, 0, 0, 13032, 0, 13037, 0, 0, 0, 0, 0, 0, 13040, 0, 0, 13041, 0, 0, 0, 13043, 13044, 13046, 0, 0, 0, 0, 13047, 0, 0, 0, 0, 0, 0, 0, 13049, 13054, 0, 13056, 0, 0, 13060, 13061, 0, 0, 0, 0, 0, 13067, 0, 0, 13068, 0, 13071, 0, 0, 0, 0, 0, 13077, 13078, 0, 0, 0, 0, 0, 13079, 13080, 13081, 0, 13082, 0, 0, 0, 13085, 0, 0, 0, 0, 0, 0, 0, 13086, 0, 13087, 13088, 0, 0, 0, 0, 0, 13094, 0, 13099, 0, 13100, 0, 0, 0, 13101, 0, 13125, 13126, 13128, 13129, 0, 0, 13130, 0, 13131, 0, 0, 0, 0, 0, 0, 13134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13150, 0, 13168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13169, 0, 0, 13170, 0, 0, 0, 0, 13174, 0, 0, 0, 13176, 0, 0, 0, 0, 0, 13177, 0, 13178, 13183, 13187, 0, 0, 0, 13189, 0, 0, 13190, 0, 0, 13191, 0, 0, 13206, 0, 0, 0, 13207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13212, 0, 0, 13219, 13232, 0, 0, 0, 13241, 0, 13249, 13253, 0, 0, 0, 0, 0, 13255, 13259, 0, 13260, 13261, 0, 13262, 0, 13272, 0, 0, 0, 0, 13276, 0, 0, 0, 0, 13277, 13299, 0, 0, 13301, 13302, 0, 0, 13303, 0, 0, 13305, 0, 13310, 0, 0, 0, 13311, 0, 0, 0, 0, 13325, 0, 13328, 0, 0, 0, 13329, 0, 0, 0, 0, 0, 0, 13330, 0, 0, 13331, 0, 13335, 0, 0, 13342, 0, 0, 0, 0, 0, 13343, 0, 13354, 0, 13362, 0, 13366, 13367, 13369, 0, 0, 13371, 13372, 0, 13373, 13374, 0, 13376, 0, 13380, 13381, 13386, 0, 13387, 13388, 0, 13389, 13391, 13395, 0, 0, 0, 0, 0, 13401, 13409, 0, 13410, 0, 0, 0, 0, 13420, 0, 0, 0, 0, 0, 13422, 0, 0, 0, 0, 13423, 0, 0, 0, 0, 13425, 0, 0, 0, 0, 0, 13427, 0, 0, 0, 13428, 0, 0, 13430, 13438, 0, 13439, 0, 13445, 0, 13448, 13449, 0, 0, 0, 0, 0, 0, 13451, 0, 13457, 0, 0, 0, 0, 13458, 13459, 0, 13460, 0, 0, 0, 0, 13464, 13465, 13466, 13470, 0, 13471, 13472, 13474, 13475, 0, 13476, 0, 0, 13478, 13479, 0, 13481, 0, 0, 0, 0, 13487, 0, 13490, 0, 13493, 0, 0, 13494, 0, 0, 13495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13496, 13497, 0, 13500, 0, 0, 13516, 13522, 0, 0, 13525, 13528, 0, 0, 0, 13530, 13535, 0, 13537, 13539, 0, 13540, 0, 13543, 0, 13544, 0, 0, 0, 0, 0, 0, 13545, 0, 0, 0, 0, 0, 0, 13547, 0, 0, 0, 13549, 13555, 0, 0, 0, 13556, 13557, 0, 0, 0, 0, 0, 0, 0, 13558, 0, 13563, 0, 0, 0, 0, 13564, 0, 0, 0, 0, 0, 0, 0, 0, 13566, 0, 0, 0, 0, 0, 0, 13569, 0, 0, 13571, 0, 0, 0, 0, 13573, 0, 0, 0, 0, 0, 0, 13578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13581, 0, 13586, 0, 13595, 0, 13600, 0, 0, 0, 0, 0, 0, 0, 0, 13601, 13603, 0, 13604, 13605, 13606, 13607, 0, 0, 13617, 13618, 0, 0, 0, 0, 0, 0, 0, 13623, 0, 13625, 13627, 0, 0, 0, 0, 0, 0, 0, 0, 13629, 0, 0, 0, 13634, 0, 0, 0, 13638, 0, 0, 0, 0, 0, 0, 0, 0, 13654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13656, 0, 13659, 0, 0, 13660, 0, 0, 13662, 0, 0, 0, 13663, 0, 13664, 0, 0, 0, 0, 0, 13668, 0, 13669, 13671, 0, 0, 13672, 0, 0, 0, 0, 0, 0, 13675, 13685, 0, 13686, 0, 0, 0, 13687, 0, 0, 0, 13692, 13694, 13697, 0, 0, 0, 13702, 0, 0, 0, 0, 0, 13705, 0, 0, 0, 0, 13707, 0, 0, 0, 13714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13715, 0, 13716, 13717, 0, 0, 13719, 13724, 13730, 13731, 0, 0, 0, 0, 0, 0, 0, 0, 13732, 0, 0, 0, 0, 0, 0, 0, 13734, 0, 13736, 0, 0, 13737, 13738, 13747, 0, 13751, 0, 0, 13752, 0, 0, 0, 13753, 0, 13757, 0, 0, 13762, 13763, 0, 13764, 13765, 0, 13766, 0, 0, 13767, 0, 0, 0, 13768, 0, 0, 0, 0, 0, 0, 0, 13769, 0, 0, 13772, 0, 13775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13776, 13778, 13787, 0, 0, 0, 13797, 0, 13798, 0, 13801, 0, 13804, 13806, 0, 0, 0, 0, 13816, 13817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13834, 0, 13836, 0, 0, 13838, 0, 0, 13839, 0, 13840, 0, 0, 0, 0, 13842, 0, 0, 0, 0, 0, 0, 13843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13845, 0, 0, 0, 0, 0, 13858, 0, 0, 13860, 0, 0, 13861, 0, 0, 13862, 13863, 0, 13868, 0, 13869, 13870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13872, 0, 0, 0, 0, 13873, 13878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13886, 0, 13888, 13889, 13890, 0, 0, 13891, 13894, 0, 13897, 13899, 13900, 13904, 0, 0, 13906, 0, 0, 0, 13909, 0, 0, 0, 13910, 0, 0, 0, 13911, 0, 0, 0, 0, 0, 13912, 13917, 0, 0, 0, 0, 13918, 0, 13919, 0, 0, 13920, 0, 0, 0, 13921, 0, 0, 13922, 0, 0, 0, 0, 0, 0, 0, 13924, 0, 13927, 0, 0, 0, 0, 0, 13932, 0, 13933, 0, 13934, 0, 0, 13935, 0, 13944, 0, 0, 0, 13954, 0, 0, 13955, 0, 0, 0, 0, 13956, 0, 13957, 0, 13967, 13969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13970, 13990, 0, 13991, 13994, 0, 13995, 0, 0, 0, 0, 13996, 0, 0, 13999, 0, 0, 0, 14018, 0, 14019, 0, 14021, 0, 0, 0, 0, 0, 0, 14041, 0, 0, 0, 0, 0, 0, 0, 0, 14043, 0, 0, 0, 0, 14046, 0, 0, 0, 14048, 14049, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14051, 0, 0, 14052, 14056, 0, 14063, 0, 14064, 14066, 0, 0, 14067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14068, 0, 0, 0, 14072, 0, 14074, 14075, 0, 14076, 14079, 14085, 14086, 14087, 14093, 0, 0, 0, 0, 14095, 0, 0, 0, 0, 0, 0, 14096, 14097, 0, 0, 0, 0, 0, 0, 0, 14098, 0, 14102, 0, 0, 0, 0, 0, 14103, 0, 0, 0, 14104, 0, 0, 14105, 0, 0, 0, 14107, 14108, 0, 0, 14109, 0, 0, 0, 0, 0, 0, 0, 0, 14117, 0, 0, 0, 0, 14118, 0, 0, 0, 0, 14119, 0, 0, 14120, 0, 0, 14121, 0, 14122, 14127, 0, 14128, 14136, 0, 0, 14138, 0, 14140, 0, 0, 0, 14141, 14142, 0, 0, 0, 0, 14146, 0, 0, 14149, 0, 14151, 0, 0, 0, 14152, 0, 0, 14153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14154, 0, 14156, 14157, 0, 0, 14159, 0, 14161, 0, 0, 0, 0, 14162, 0, 0, 0, 0, 0, 0, 14163, 0, 0, 14173, 0, 0, 0, 0, 0, 0, 14174, 0, 0, 14176, 0, 0, 14178, 0, 0, 14179, 14181, 0, 0, 14182, 14185, 14187, 0, 14190, 0, 0, 14197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14198, 0, 0, 0, 0, 0, 0, 14199, 14200, 0, 0, 0, 14204, 0, 0, 14208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14234, 0, 0, 14235, 0, 0, 0, 14240, 14241, 0, 0, 0, 14246, 0, 0, 0, 14247, 0, 14250, 0, 0, 14251, 0, 0, 14254, 0, 0, 14256, 0, 0, 0, 14260, 0, 14261, 0, 0, 0, 0, 14262, 14267, 14269, 0, 0, 14277, 0, 0, 14278, 0, 14279, 14282, 0, 0, 0, 14283, 0, 0, 0, 14284, 14285, 0, 0, 0, 0, 14286, 0, 0, 0, 14288, 0, 0, 0, 14289, 0, 14290, 0, 14293, 14301, 14302, 14304, 14305, 0, 14307, 0, 14308, 14309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14311, 14312, 0, 0, 14317, 0, 0, 0, 0, 0, 0, 0, 14318, 0, 0, 0, 0, 14320, 0, 0, 0, 0, 14321, 14322, 0, 0, 0, 0, 0, 14326, 14329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14330, 14331, 0, 0, 0, 0, 14332, 0, 0, 0, 14333, 0, 0, 14337, 14340, 0, 14341, 0, 0, 14342, 0, 14345, 14346, 0, 0, 14347, 0, 14362, 0, 0, 0, 0, 0, 14364, 14365, 14371, 0, 14373, 0, 0, 14374, 0, 14379, 0, 14400, 0, 0, 0, 0, 0, 14401, 0, 0, 14405, 0, 14406, 0, 14408, 14409, 0, 0, 0, 14417, 0, 0, 14424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14430, 0, 0, 0, 14431, 0, 0, 14435, 0, 14440, 0, 0, 0, 0, 0, 0, 14442, 0, 0, 14443, 0, 0, 0, 0, 0, 14446, 0, 0, 0, 0, 0, 0, 0, 14454, 0, 14457, 0, 14460, 0, 0, 14466, 0, 0, 0, 0, 0, 14467, 0, 0, 0, 0, 0, 0, 14469, 0, 14477, 0, 0, 0, 0, 0, 0, 14478, 14482, 0, 0, 0, 14483, 0, 0, 0, 14485, 14486, 0, 0, 0, 14487, 14488, 14489, 14492, 14493, 14494, 14495, 14496, 14497, 0, 14499, 0, 14501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14502, 0, 14507, 14512, 14513, 14514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14515, 14526, 14530, 0, 14537, 0, 14544, 0, 14547, 0, 0, 14548, 14550, 14551, 0, 0, 14552, 0, 0, 0, 14553, 0, 14554, 0, 0, 0, 0, 14556, 14564, 0, 0, 14565, 14566, 0, 0, 0, 0, 0, 0, 14568, 0, 0, 14569, 0, 0, 0, 14571, 14576, 0, 0, 14577, 14578, 14579, 0, 0, 14580, 0, 0, 0, 0, 14582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14583, 0, 0, 0, 0, 0, 14587, 0, 14588, 0, 0, 14600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14601, 0, 0, 14604, 14605, 14611, 0, 14613, 0, 0, 0, 0, 14615, 0, 0, 0, 0, 0, 0, 14627, 0, 14628, 0, 0, 0, 0, 14631, 0, 14633, 14634, 0, 0, 0, 0, 14635, 0, 0, 0, 0, 0, 0, 0, 0, 14636, 0, 0, 14639, 14642, 0, 0, 0, 0, 14644, 0, 0, 0, 0, 14645, 14646, 0, 14653, 0, 0, 14654, 0, 14658, 0, 14661, 0, 0, 0, 14665, 0, 0, 0, 14668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14669, 0, 0, 14670, 0, 0, 0, 14680, 0, 0, 14681, 0, 0, 0, 0, 0, 14682, 14683, 0, 0, 0, 0, 14686, 0, 0, 0, 0, 14687, 14697, 0, 0, 0, 0, 14699, 14705, 14711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14712, 0, 0, 0, 14713, 0, 0, 0, 0, 14719, 0, 14720, 14721, 14726, 0, 0, 0, 14728, 14729, 0, 0, 0, 0, 14731, 0, 0, 0, 0, 0, 0, 0, 14733, 14736, 14737, 0, 0, 14740, 14742, 0, 0, 0, 14744, 14753, 0, 0, 0, 0, 14755, 14758, 14760, 0, 0, 0, 0, 0, 14761, 14762, 14765, 14771, 0, 14772, 0, 14773, 14774, 0, 0, 14775, 0, 0, 14776, 0, 0, 0, 0, 14777, 0, 14779, 0, 0, 14782, 0, 0, 14785, 14786, 14788, 0, 0, 0, 0, 0, 14795, 0, 0, 0, 0, 0, 0, 14798, 0, 14803, 14804, 14806, 0, 0, 0, 14809, 0, 0, 0, 0, 0, 0, 14810, 0, 0, 0, 0, 14811, 0, 14812, 0, 0, 0, 0, 0, 14815, 0, 0, 0, 0, 0, 0, 0, 0, 14816, 0, 14818, 0, 0, 0, 0, 0, 0, 14819, 0, 14820, 0, 14823, 0, 0, 0, 14824, 0, 0, 14826, 14827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14830, 0, 0, 0, 0, 0, 14833, 0, 14845, 0, 0, 0, 0, 0, 14846, 0, 0, 14847, 14871, 0, 14873, 0, 14876, 0, 14877, 14878, 14880, 0, 0, 0, 0, 0, 14881, 0, 14882, 14894, 0, 0, 0, 0, 14895, 0, 14907, 0, 14908, 0, 0, 0, 0, 0, 0, 0, 14911, 0, 0, 0, 0, 14920, 0, 0, 14931, 0, 14932, 14934, 14935, 0, 0, 14936, 0, 14945, 0, 0, 0, 0, 0, 0, 0, 14947, 0, 0, 14948, 14949, 14951, 0, 0, 14952, 0, 0, 0, 14964, 14973, 0, 0, 14990, 0, 0, 0, 0, 14995, 0, 0, 14998, 15001, 0, 0, 15002, 15020, 0, 0, 0, 0, 0, 0, 15021, 0, 15022, 0, 0, 0, 0, 15023, 0, 0, 15025, 15029, 15033, 0, 0, 0, 15034, 0, 0, 0, 15035, 0, 0, 0, 0, 0, 15043, 15044, 0, 0, 0, 15045, 15046, 15048, 15050, 0, 15065, 0, 0, 0, 0, 15066, 0, 0, 15075, 15082, 15084, 0, 0, 15085, 15086, 0, 0, 0, 0, 0, 0, 0, 0, 15088, 0, 0, 0, 15089, 0, 0, 0, 0, 15094, 0, 15096, 0, 15097, 0, 15100, 0, 0, 15102, 0, 0, 0, 0, 0, 0, 0, 0, 15105, 0, 0, 15106, 0, 15109, 15113, 0, 0, 0, 15115, 0, 15118, 0, 0, 0, 0, 0, 0, 15119, 0, 0, 15120, 0, 0, 0, 0, 0, 15123, 15129, 0, 0, 0, 15130, 0, 15131, 0, 0, 15134, 0, 15135, 0, 0, 0, 15137, 15138, 0, 0, 0, 0, 0, 0, 15139, 0, 0, 0, 0, 0, 15140, 0, 0, 15154, 15162, 0, 15169, 15170, 0, 15175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15177, 0, 15178, 15179, 0, 0, 0, 0, 0, 15183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15185, 15187, 0, 15194, 15195, 15196, 0, 0, 0, 0, 0, 0, 0, 15204, 0, 0, 0, 0, 15206, 0, 0, 0, 0, 0, 15207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15213, 0, 15214, 0, 0, 0, 0, 0, 0, 0, 15232, 0, 0, 0, 0, 15234, 0, 15238, 15240, 0, 15248, 0, 0, 0, 0, 15250, 15251, 0, 0, 0, 0, 0, 0, 0, 15252, 0, 0, 0, 15255, 15262, 15266, 0, 0, 0, 15267, 0, 0, 0, 15277, 15279, 0, 0, 0, 15280, 15281, 15282, 0, 0, 0, 0, 0, 15285, 0, 0, 0, 0, 15289, 0, 0, 15291, 0, 0, 0, 0, 0, 0, 0, 15296, 15297, 0, 0, 15304, 0, 0, 0, 0, 15306, 0, 0, 0, 0, 0, 0, 15307, 15308, 0, 15309, 0, 0, 15311, 0, 0, 15312, 15313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15314, 15317, 0, 0, 0, 15318, 15319, 0, 0, 0, 0, 15320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15321, 0, 0, 0, 0, 0, 15324, 0, 15325, 15326, 0, 15330, 0, 0, 0, 0, 15334, 0, 15335, 0, 15341, 0, 0, 15342, 0, 0, 15343, 15344, 0, 0, 0, 0, 15345, 0, 0, 0, 0, 15347, 0, 0, 15348, 15349, 15350, 0, 15356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15357, 0, 15358, 0, 0, 0, 0, 0, 0, 0, 15359, 15360, 15364, 0, 15380, 0, 0, 0, 0, 0, 15392, 0, 0, 15393, 0, 15395, 0, 0, 0, 0, 0, 0, 0, 0, 15396, 0, 0, 15397, 15398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15399, 0, 15400, 0, 0, 0, 15402, 0, 15405, 15410, 0, 0, 0, 0, 15411, 0, 0, 0, 15412, 0, 15416, 0, 0, 0, 0, 0, 0, 0, 15428, 0, 15435, 0, 0, 15438, 0, 0, 0, 0, 15439, 0, 0, 0, 15440, 0, 0, 0, 15441, 15449, 15451, 0, 0, 0, 0, 0, 0, 0, 15452, 0, 0, 15455, 0, 0, 0, 15456, 0, 0, 15458, 0, 15460, 15461, 0, 0, 0, 0, 0, 15462, 15464, 0, 15465, 0, 0, 15466, 0, 0, 15467, 0, 0, 0, 0, 0, 15468, 0, 0, 0, 0, 15481, 0, 0, 15484, 0, 15485, 15486, 0, 0, 0, 15487, 0, 0, 0, 0, 0, 15488, 0, 15492, 15498, 0, 0, 0, 15499, 0, 0, 0, 15500, 0, 15501, 0, 0, 15512, 0, 15522, 0, 0, 0, 15524, 0, 15525, 15526, 0, 0, 15527, 0, 0, 15545, 15546, 0, 15548, 15552, 0, 15553, 0, 0, 0, 15554, 0, 15555, 0, 15557, 15565, 15573, 15577, 15578, 0, 15582, 0, 15583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15588, 0, 0, 0, 0, 0, 15589, 0, 0, 0, 0, 0, 0, 0, 15593, 15594, 0, 0, 0, 0, 15595, 0, 0, 0, 0, 0, 0, 15596, 0, 0, 0, 15597, 0, 0, 0, 0, 15600, 0, 0, 15601, 0, 0, 0, 0, 15602, 15603, 0, 0, 0, 0, 0, 0, 15604, 0, 15609, 0, 0, 15612, 0, 0, 15613, 0, 0, 15615, 15617, 15618, 0, 0, 15620, 0, 15636, 15637, 0, 0, 15649, 0, 0, 0, 0, 0, 0, 0, 15650, 0, 0, 15651, 0, 0, 0, 15656, 0, 15658, 0, 0, 0, 15664, 0, 0, 15665, 0, 0, 15668, 0, 0, 0, 0, 0, 15669, 0, 0, 15674, 0, 0, 15675, 0, 0, 0, 0, 15676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15677, 0, 0, 0, 0, 15678, 0, 0, 0, 0, 0, 15679, 0, 0, 15681, 0, 15686, 0, 0, 0, 0, 15687, 0, 15688, 0, 0, 15690, 0, 0, 0, 15697, 0, 15699, 15700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15701, 0, 15702, 15703, 0, 15704, 0, 15705, 0, 15707, 0, 15709, 0, 15712, 15716, 0, 15717, 0, 15718, 15720, 0, 0, 0, 0, 0, 15724, 0, 0, 0, 15725, 0, 15726, 0, 0, 0, 15740, 0, 15745, 15746, 0, 0, 15747, 0, 15748, 0, 0, 0, 0, 0, 15749, 0, 0, 0, 15752, 0, 15753, 0, 0, 0, 0, 0, 0, 15759, 0, 0, 0, 15765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15767, 0, 0, 0, 15771, 0, 0, 15784, 0, 0, 0, 0, 15785, 15790, 15791, 0, 0, 15792, 0, 0, 0, 15807, 0, 15811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15818, 0, 0, 0, 15819, 0, 0, 0, 0, 15821, 0, 0, 0, 0, 0, 15822, 15824, 0, 0, 15827, 0, 0, 15829, 15831, 0, 15832, 0, 0, 15833, 0, 15835, 15838, 15839, 15843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15844, 0, 0, 0, 0, 15845, 15851, 15856, 0, 0, 0, 0, 0, 0, 0, 15858, 15860, 0, 15861, 0, 0, 0, 15864, 0, 0, 0, 0, 15865, 0, 0, 0, 0, 0, 0, 15866, 0, 15872, 0, 0, 15876, 0, 0, 0, 0, 15877, 15878, 15883, 15885, 0, 0, 15888, 0, 0, 0, 0, 0, 15889, 15890, 0, 0, 0, 0, 0, 0, 0, 0, 15892, 0, 0, 0, 0, 0, 0, 0, 15893, 0, 0, 15894, 0, 0, 0, 15895, 0, 15896, 15897, 0, 15898, 15901, 15902, 0, 15911, 15915, 0, 15916, 0, 15924, 15935, 0, 15937, 0, 0, 0, 0, 0, 15950, 0, 0, 0, 0, 0, 0, 0, 15958, 0, 0, 0, 15961, 0, 0, 15966, 0, 15967, 0, 0, 15977, 0, 0, 15978, 0, 0, 15981, 15982, 15983, 0, 0, 0, 0, 0, 0, 0, 15986, 0, 0, 0, 15990, 0, 15991, 15995, 15998, 0, 15999, 0, 16000, 0, 0, 0, 0, 16008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16009, 16011, 0, 16013, 0, 0, 0, 0, 0, 0, 0, 0, 16014, 0, 0, 16015, 16023, 16024, 16025, 0, 0, 16026, 0, 16030, 0, 16032, 0, 16033, 0, 0, 0, 0, 0, 0, 16035, 16036, 16037, 0, 0, 0, 0, 0, 16039, 0, 0, 0, 0, 16041, 0, 0, 0, 0, 0, 16043, 16044, 0, 0, 16047, 0, 0, 0, 16048, 0, 0, 16049, 16050, 16052, 0, 0, 0, 0, 0, 16055, 0, 0, 0, 0, 0, 0, 0, 0, 16056, 0, 0, 0, 0, 0, 0, 0, 16058, 16060, 16061, 0, 0, 16063, 0, 0, 16064, 0, 0, 0, 16067, 16068, 0, 0, 16069, 16078, 0, 0, 0, 16079, 0, 0, 0, 16080, 0, 16081, 0, 0, 0, 16088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16089, 16093, 0, 16097, 0, 16103, 0, 16104, 16105, 0, 0, 16256, 0, 0, 16259, 0, 0, 0, 0, 0, 0, 0, 16260, 16261, 0, 0, 16262, 0, 0, 16263, 0, 16268, 0, 0, 0, 0, 0, 0, 0, 16269, 0, 0, 16270, 16273, 0, 16274, 0, 0, 0, 0, 16275, 16276, 16277, 16280, 0, 0, 0, 16281, 16284, 0, 0, 0, 16286, 0, 16289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16290, 0, 0, 0, 0, 16291, 0, 0, 0, 0, 0, 0, 0, 16292, 0, 0, 0, 0, 0, 0, 0, 0, 16293, 16295, 16297, 0, 16302, 0, 16304, 0, 16305, 0, 16306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16307, 16308, 16312, 0, 0, 0, 0, 0, 0, 16313, 16315, 0, 16318, 0, 0, 0, 16321, 0, 0, 0, 0, 0, 0, 0, 16326, 16333, 16336, 0, 0, 0, 0, 16337, 16340, 0, 0, 0, 0, 0, 16345, 0, 0, 16346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16347, 0, 0, 16348, 0, 0, 0, 0, 16349, 0, 0, 0, 16350, 0, 16357, 0, 0, 0, 0, 16359, 16360, 0, 0, 0, 0, 16362, 16363, 16364, 16365, 0, 0, 16366, 0, 0, 0, 0, 16367, 16368, 0, 16369, 16374, 0, 0, 0, 0, 0, 0, 0, 16376, 0, 0, 0, 0, 16378, 16379, 0, 16380, 0, 0, 0, 16381, 16383, 0, 0, 0, 0, 0, 16390, 0, 0, 0, 16399, 0, 16402, 16404, 16406, 16407, 0, 0, 0, 16409, 16411, 0, 0, 0, 0, 16412, 0, 16413, 16415, 16423, 0, 0, 0, 0, 0, 16424, 0, 0, 0, 16428, 16434, 16435, 16449, 0, 16450, 16451, 0, 0, 0, 16453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16454, 0, 0, 16456, 16458, 0, 0, 16459, 0, 0, 16460, 0, 0, 0, 0, 16462, 0, 16463, 0, 0, 16466, 0, 0, 0, 0, 0, 16479, 0, 0, 16480, 0, 16481, 16484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16485, 0, 0, 0, 0, 0, 0, 16489, 0, 0, 0, 0, 0, 16491, 0, 0, 16498, 0, 0, 16503, 0, 16505, 0, 0, 0, 0, 0, 0, 0, 0, 16506, 0, 0, 0, 16508, 16509, 0, 0, 0, 0, 0, 0, 0, 0, 16511, 16513, 0, 0, 0, 16516, 0, 16517, 0, 16519, 0, 16529, 0, 0, 16531, 0, 0, 0, 0, 0, 0, 16534, 0, 0, 16541, 16542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16543, 16547, 16548, 0, 0, 0, 16551, 0, 16552, 0, 0, 0, 16553, 0, 0, 16558, 0, 0, 16562, 16565, 0, 0, 0, 16570, 0, 0, 0, 16573, 16585, 0, 0, 0, 16586, 16587, 16595, 0, 16596, 0, 16598, 0, 0, 0, 16600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16601, 0, 0, 0, 0, 16603, 0, 0, 0, 0, 0, 0, 0, 16604, 16612, 0, 0, 0, 0, 16613, 0, 16618, 0, 0, 0, 16640, 0, 0, 16641, 0, 0, 0, 0, 0, 0, 16645, 0, 0, 0, 0, 16646, 0, 0, 0, 0, 0, 0, 16651, 0, 0, 0, 0, 16653, 16654, 0, 0, 0, 16655, 0, 0, 16656, 16667, 0, 0, 0, 0, 16671, 0, 16672, 0, 0, 0, 16673, 0, 0, 0, 0, 0, 16676, 0, 16686, 0, 0, 0, 0, 16689, 0, 16690, 0, 16692, 0, 16693, 0, 16694, 0, 16696, 0, 0, 0, 16705, 0, 0, 0, 0, 0, 0, 16707, 0, 0, 0, 16709, 0, 0, 0, 0, 16711, 0, 16712, 16713, 0, 0, 0, 16715, 0, 0, 0, 0, 16716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16718, 16724, 0, 0, 16726, 16727, 0, 0, 0, 0, 0, 0, 0, 16728, 0, 16729, 0, 0, 16730, 0, 0, 0, 0, 0, 16731, 0, 0, 0, 16732, 0, 0, 0, 0, 16734, 16738, 0, 0, 0, 0, 0, 0, 0, 0, 16743, 0, 0, 16745, 0, 0, 0, 0, 0, 16749, 0, 16752, 0, 0, 0, 0, 16756, 0, 0, 16758, 0, 16759, 0, 0, 0, 0, 0, 16760, 0, 0, 0, 0, 0, 0, 0, 16762, 0, 16769, 0, 16770, 0, 16772, 0, 0, 0, 16777, 16780, 0, 0, 0, 0, 0, 0, 16781, 0, 0, 16782, 0, 16784, 0, 0, 16785, 16787, 16792, 0, 0, 16794, 0, 0, 0, 16798, 0, 0, 16809, 0, 0, 16814, 16816, 16817, 0, 16819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16820, 0, 0, 16836, 16839, 0, 0, 16841, 16851, 16857, 0, 0, 16858, 16859, 0, 0, 16860, 0, 0, 0, 0, 0, 0, 0, 0, 16862, 0, 16863, 0, 0, 0, 0, 0, 0, 0, 16864, 0, 0, 0, 0, 0, 0, 0, 16876, 0, 16881, 16882, 0, 16885, 16886, 0, 16887, 0, 0, 0, 16889, 16891, 0, 0, 0, 0, 0, 16894, 16895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16897, 0, 16898, 0, 0, 0, 0, 0, 16913, 0, 0, 16924, 16925, 16926, 0, 0, 16927, 0, 0, 0, 16937, 16938, 0, 0, 0, 16940, 16941, 0, 0, 0, 16942, 16945, 0, 16946, 16949, 16950, 0, 0, 0, 16952, 16955, 0, 0, 0, 16965, 0, 16969, 0, 0, 16975, 0, 0, 16976, 0, 0, 0, 0, 16978, 0, 0, 16981, 0, 16983, 16989, 0, 0, 0, 0, 16990, 0, 0, 16991, 0, 0, 0, 16993, 0, 16994, 16996, 17000, 0, 0, 0, 0, 0, 17002, 17004, 0, 17006, 0, 0, 17007, 0, 0, 0, 0, 17008, 17013, 17014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17021, 0, 17031, 0, 0, 0, 0, 0, 17033, 17036, 0, 17038, 0, 0, 17039, 0, 17045, 0, 0, 17046, 17047, 0, 0, 0, 0, 17048, 0, 17049, 17050, 0, 17051, 17053, 0, 17054, 0, 17055, 0, 0, 0, 0, 0, 17063, 0, 0, 17064, 0, 0, 0, 0, 0, 0, 0, 17065, 0, 0, 17068, 0, 0, 0, 0, 0, 17072, 0, 0, 0, 0, 0, 0, 17073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17074, 0, 17080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17081, 17083, 17084, 0, 0, 0, 17085, 0, 0, 0, 0, 17092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17093, 0, 17095, 17102, 0, 0, 0, 0, 0, 0, 17103, 0, 0, 17105, 0, 17107, 0, 0, 0, 0, 17114, 0, 0, 0, 0, 0, 17115, 17125, 17127, 0, 0, 17128, 0, 0, 0, 17129, 17130, 0, 17131, 0, 0, 0, 0, 0, 17132, 17135, 17145, 0, 0, 0, 0, 0, 0, 0, 0, 17146, 0, 17147, 0, 17148, 0, 0, 0, 0, 0, 0, 17149, 17150, 0, 17151, 17153, 0, 17155, 0, 0, 0, 0, 17163, 17171, 0, 17174, 0, 0, 0, 0, 17179, 0, 0, 17182, 17185, 0, 0, 0, 0, 0, 17186, 0, 0, 17188, 0, 0, 0, 0, 0, 0, 0, 17189, 17191, 0, 17194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17195, 17196, 17203, 17204, 0, 0, 17205, 17217, 0, 0, 0, 0, 0, 17218, 0, 0, 0, 0, 17219, 0, 17220, 0, 17221, 0, 0, 17230, 0, 0, 0, 0, 0, 17236, 0, 17238, 17239, 0, 0, 0, 17241, 17244, 0, 0, 17245, 0, 17248, 0, 0, 17251, 0, 17252, 0, 0, 17264, 0, 17266, 0, 0, 0, 17268, 0, 0, 0, 0, 17271, 17272, 0, 17273, 0, 17295, 0, 17302, 0, 17305, 0, 0, 0, 17306, 0, 0, 0, 0, 0, 0, 0, 17308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17309, 0, 17310, 17313, 0, 0, 0, 0, 17314, 17315, 0, 17317, 0, 0, 0, 0, 17318, 0, 0, 0, 0, 0, 0, 0, 17320, 0, 0, 0, 0, 0, 0, 17334, 0, 17344, 17348, 0, 0, 0, 17350, 17351, 0, 0, 17353, 0, 0, 17354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17355, 0, 0, 0, 0, 0, 0, 17356, 17357, 0, 0, 17359, 0, 0, 0, 17371, 0, 17372, 0, 0, 0, 17393, 0, 0, 0, 0, 17394, 0, 0, 0, 0, 0, 17395, 0, 0, 17399, 0, 0, 0, 17401, 17417, 0, 17418, 0, 17419, 0, 0, 0, 0, 0, 17422, 17423, 0, 0, 0, 0, 0, 17424, 0, 0, 0, 0, 0, 17428, 17429, 17433, 0, 0, 0, 17437, 0, 0, 17441, 0, 0, 17442, 0, 0, 17453, 0, 0, 0, 0, 0, 0, 0, 0, 17454, 17456, 17462, 0, 0, 17466, 0, 0, 17468, 0, 0, 17469, 0, 0, 0, 0, 17470, 0, 17475, 0, 0, 0, 0, 0, 17479, 0, 0, 0, 17483, 17484, 0, 17485, 0, 17486, 0, 17491, 17492, 0, 0, 17493, 0, 17494, 17495, 0, 0, 0, 17496, 0, 0, 0, 17497, 0, 0, 0, 17502, 0, 0, 0, 0, 0, 17503, 0, 17505, 0, 17507, 0, 0, 0, 17512, 17513, 17514, 0, 0, 17515, 0, 0, 0, 17519, 0, 0, 0, 17522, 0, 0, 17523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17527, 0, 0, 0, 17528, 0, 0, 0, 17534, 0, 0, 0, 0, 17536, 0, 0, 0, 17539, 0, 17540, 17543, 17549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17556, 0, 0, 17558, 0, 17559, 0, 0, 17560, 0, 0, 0, 17563, 0, 0, 0, 0, 0, 0, 17564, 0, 0, 17565, 17566, 0, 17567, 0, 0, 0, 0, 0, 0, 17569, 17570, 0, 17575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17581, 0, 0, 0, 17582, 17583, 0, 17586, 0, 0, 17587, 0, 0, 0, 0, 0, 0, 0, 17588, 0, 0, 0, 0, 17596, 17597, 0, 0, 17598, 17600, 0, 0, 0, 0, 0, 0, 17601, 0, 0, 0, 17604, 0, 0, 17605, 0, 0, 17607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17612, 0, 0, 17618, 0, 17621, 17622, 0, 0, 0, 0, 17623, 0, 0, 17624, 0, 0, 17630, 0, 0, 17631, 17633, 17634, 0, 0, 0, 0, 0, 0, 0, 17635, 0, 0, 17636, 0, 0, 17637, 0, 17638, 0, 17640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17643, 0, 0, 0, 0, 17645, 0, 0, 0, 0, 0, 0, 0, 0, 17646, 17662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17663, 17664, 0, 17665, 17666, 0, 0, 0, 17669, 17671, 17673, 0, 17679, 0, 0, 0, 0, 0, 0, 0, 17684, 0, 0, 0, 17686, 0, 17714, 0, 0, 17720, 17722, 17726, 0, 0, 17728, 0, 0, 17729, 0, 0, 0, 17732, 0, 17733, 0, 17734, 0, 0, 0, 17735, 0, 0, 0, 0, 17737, 0, 0, 0, 0, 17739, 0, 0, 0, 17741, 17742, 0, 0, 0, 0, 17743, 17744, 17745, 0, 0, 0, 17749, 0, 17750, 17751, 17752, 17754, 17761, 17762, 0, 17763, 0, 17766, 0, 17772, 0, 0, 0, 0, 0, 17775, 0, 0, 0, 0, 0, 0, 0, 17776, 0, 0, 17777, 0, 0, 17778, 17779, 0, 17782, 17783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17784, 0, 0, 0, 0, 0, 0, 0, 17821, 0, 0, 0, 17822, 0, 0, 0, 17823, 17825, 0, 0, 0, 0, 0, 17826, 17831, 17832, 17833, 0, 0, 17845, 0, 0, 0, 17846, 0, 0, 0, 17848, 17850, 17854, 0, 17855, 0, 0, 17859, 0, 0, 0, 0, 0, 0, 17860, 17861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17870, 17871, 0, 0, 0, 0, 0, 0, 17872, 0, 0, 0, 17879, 0, 0, 0, 17881, 17883, 0, 17884, 0, 17885, 0, 0, 17886, 0, 0, 17887, 17891, 17953, 0, 0, 0, 0, 17954, 0, 0, 17955, 0, 17968, 0, 0, 17972, 0, 0, 0, 0, 0, 17974, 0, 0, 0, 0, 17976, 17978, 0, 0, 17983, 0, 0, 0, 0, 18003, 0, 0, 0, 0, 0, 18007, 0, 0, 0, 0, 0, 18009, 0, 0, 0, 0, 0, 0, 0, 18010, 0, 0, 0, 0, 0, 0, 18012, 0, 0, 18014, 0, 0, 0, 18015, 0, 0, 0, 18016, 0, 18017, 0, 0, 0, 18030, 0, 0, 0, 0, 0, 0, 0, 18031, 0, 0, 18036, 18037, 18038, 0, 0, 18049, 18056, 0, 18057, 18058, 0, 18059, 0, 0, 0, 0, 0, 0, 0, 0, 18062, 0, 0, 0, 0, 18064, 0, 0, 0, 0, 0, 0, 0, 0, 18067, 0, 0, 0, 18068, 0, 0, 18075, 0, 0, 18078, 18093, 18094, 0, 0, 0, 0, 0, 0, 0, 0, 18097, 0, 0, 0, 0, 0, 18098, 18100, 0, 0, 0, 18108, 0, 18111, 0, 0, 18112, 0, 18113, 0, 0, 18115, 18116, 0, 18118, 0, 0, 0, 0, 18121, 0, 0, 0, 0, 18123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18124, 0, 0, 0, 0, 18125, 18126, 0, 18127, 0, 0, 18128, 18135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18150, 0, 0, 0, 0, 0, 18151, 18152, 0, 0, 18156, 18164, 0, 18166, 18171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18172, 18183, 0, 18184, 0, 0, 0, 0, 18185, 0, 18187, 0, 0, 0, 0, 0, 18188, 0, 0, 0, 0, 0, 0, 0, 0, 18189, 0, 0, 18190, 0, 0, 18191, 18192, 0, 0, 18194, 18195, 18196, 0, 0, 0, 18197, 0, 18203, 0, 18204, 0, 0, 0, 0, 18205, 0, 0, 0, 18207, 18208, 0, 0, 18214, 0, 0, 0, 18215, 18216, 0, 0, 0, 18220, 0, 0, 18222, 0, 0, 0, 0, 0, 18223, 0, 18225, 18231, 0, 18234, 0, 18235, 0, 0, 0, 0, 18240, 0, 0, 18241, 18242, 0, 0, 0, 0, 0, 18243, 18251, 0, 18253, 0, 18254, 0, 0, 0, 18266, 0, 0, 0, 0, 0, 0, 18269, 18270, 18271, 18273, 18281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18282, 0, 18283, 0, 18284, 0, 0, 0, 0, 0, 0, 18285, 0, 18287, 18289, 0, 0, 18290, 0, 0, 0, 0, 18308, 0, 0, 0, 18310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18311, 0, 18312, 18313, 0, 18315, 0, 0, 18316, 18320, 0, 18331, 0, 18332, 0, 18336, 0, 0, 0, 0, 18337, 0, 18340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18341, 0, 18344, 18345, 0, 18346, 0, 0, 0, 0, 0, 18348, 0, 18351, 0, 0, 18356, 0, 0, 0, 0, 0, 0, 18357, 0, 0, 0, 0, 0, 18367, 0, 0, 0, 18368, 0, 18369, 0, 18370, 18371, 0, 0, 0, 18437, 18444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18445, 18450, 0, 0, 0, 0, 18451, 0, 18452, 0, 0, 0, 18453, 0, 0, 0, 0, 0, 18455, 0, 0, 0, 18456, 0, 18457, 0, 18460, 0, 0, 18461, 0, 0, 0, 0, 0, 0, 0, 0, 18466, 0, 0, 18467, 0, 0, 0, 0, 18473, 0, 0, 0, 18476, 0, 18477, 0, 0, 0, 18478, 18479, 18480, 0, 0, 0, 18485, 0, 0, 0, 18486, 0, 0, 0, 0, 0, 0, 18488, 18490, 0, 0, 0, 0, 0, 0, 18491, 0, 0, 0, 0, 0, 18495, 0, 0, 18496, 0, 0, 0, 0, 0, 0, 18505, 0, 18521, 0, 18522, 18523, 0, 0, 0, 18525, 18526, 0, 0, 0, 0, 0, 18527, 0, 0, 0, 0, 18532, 18533, 0, 18534, 0, 0, 0, 0, 0, 0, 18535, 18537, 0, 18538, 0, 0, 0, 0, 0, 0, 18540, 18541, 18542, 18543, 0, 18546, 0, 0, 0, 0, 18553, 18556, 0, 0, 18558, 0, 0, 18569, 18571, 0, 0, 0, 18572, 0, 18574, 0, 0, 0, 0, 18586, 0, 0, 0, 0, 0, 18588, 0, 0, 18589, 0, 0, 0, 0, 0, 0, 18590, 0, 18592, 0, 0, 0, 0, 18594, 0, 0, 0, 18596, 0, 0, 18597, 18598, 0, 0, 18601, 0, 0, 0, 0, 18602, 0, 0, 0, 18603, 18604, 0, 18605, 0, 0, 0, 0, 18608, 0, 0, 18611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18612, 0, 18616, 0, 0, 18617, 18619, 0, 0, 0, 18628, 0, 0, 0, 18629, 0, 0, 18630, 0, 0, 0, 0, 0, 0, 0, 18631, 0, 18632, 0, 0, 18635, 18637, 0, 0, 0, 0, 0, 0, 18641, 18643, 18648, 0, 18652, 0, 0, 18653, 0, 18655, 18656, 0, 0, 0, 18657, 0, 0, 18666, 18674, 0, 0, 0, 0, 18677, 18684, 18685, 0, 0, 18686, 0, 0, 18690, 0, 0, 0, 0, 0, 0, 0, 18695, 18696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18697, 0, 0, 18700, 0, 0, 0, 0, 0, 0, 18702, 0, 18708, 0, 0, 18709, 0, 18710, 0, 0, 18711, 0, 18714, 0, 0, 18718, 0, 0, 0, 0, 0, 0, 18719, 0, 0, 18722, 0, 18726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18731, 0, 0, 0, 0, 0, 18739, 18741, 0, 0, 18742, 0, 18743, 18744, 18746, 18748, 0, 18752, 18753, 0, 0, 18754, 18763, 0, 18765, 0, 0, 0, 18766, 0, 0, 0, 18769, 0, 0, 0, 0, 0, 18773, 18778, 18779, 18781, 0, 0, 18784, 18787, 0, 18788, 0, 18793, 0, 0, 0, 0, 0, 0, 18795, 0, 0, 18800, 0, 0, 0, 0, 0, 18801, 18804, 0, 0, 0, 0, 0, 0, 0, 18806, 0, 0, 0, 18811, 18815, 18816, 0, 0, 0, 0, 18825, 0, 0, 18827, 18829, 0, 0, 18830, 0, 0, 0, 0, 18831, 0, 0, 18832, 0, 0, 0, 0, 18833, 0, 18840, 0, 18841, 0, 18842, 0, 0, 0, 0, 18843, 0, 18844, 0, 0, 0, 0, 0, 0, 18845, 18846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18848, 0, 0, 0, 18853, 18860, 0, 0, 18862, 18866, 0, 0, 18867, 18869, 0, 0, 18874, 18881, 18891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18892, 0, 0, 0, 0, 0, 0, 0, 0, 18895, 0, 18896, 0, 0, 0, 18900, 0, 0, 0, 18901, 0, 18902, 18915, 18916, 0, 0, 0, 0, 0, 0, 0, 0, 18919, 0, 0, 0, 0, 0, 18920, 0, 0, 0, 18921, 18929, 0, 0, 0, 0, 18930, 0, 0, 0, 0, 0, 0, 18932, 0, 0, 0, 0, 18934, 18942, 0, 0, 0, 18951, 18957, 0, 0, 0, 0, 18958, 0, 0, 0, 0, 18959, 18960, 0, 0, 18961, 0, 0, 18962, 0, 0, 0, 0, 18963, 18964, 0, 0, 0, 18965, 0, 18967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18968, 0, 18969, 0, 18970, 18973, 18976, 0, 0, 0, 0, 0, 0, 18977, 0, 0, 0, 18981, 0, 0, 0, 18990, 0, 18998, 0, 0, 0, 0, 0, 18999, 19003, 0, 0, 19005, 0, 0, 0, 19006, 0, 0, 0, 0, 0, 0, 19008, 19011, 0, 0, 19018, 0, 0, 19019, 0, 19024, 0, 19031, 19032, 0, 19039, 0, 19041, 19050, 0, 0, 0, 19051, 19055, 19056, 0, 19059, 19063, 19064, 0, 0, 19088, 0, 0, 0, 19093, 19094, 0, 0, 0, 0, 19095, 0, 19096, 0, 0, 0, 19097, 0, 0, 19098, 0, 19099, 19100, 0, 0, 19103, 0, 0, 0, 0, 0, 0, 0, 19111, 0, 0, 0, 0, 0, 0, 19112, 0, 0, 0, 19116, 19117, 0, 19121, 19122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19123, 19124, 0, 0, 0, 0, 0, 0, 0, 19125, 19126, 0, 19128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19129, 19130, 19131, 19132, 0, 0, 19146, 0, 0, 19147, 19156, 19158, 0, 0, 0, 0, 0, 0, 0, 0, 19182, 19185, 0, 0, 19187, 0, 0, 0, 19193, 0, 0, 0, 0, 0, 19194, 0, 19197, 0, 0, 0, 0, 19198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19203, 0, 19205, 19210, 0, 0, 0, 19213, 0, 19218, 0, 0, 0, 19223, 19229, 0, 0, 19230, 0, 0, 19231, 19232, 19233, 19239, 0, 0, 0, 0, 0, 19240, 0, 19248, 19249, 0, 0, 0, 0, 19254, 0, 19256, 19258, 19259, 0, 0, 19261, 0, 19266, 0, 0, 0, 19272, 0, 19278, 19281, 19282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19283, 0, 0, 19284, 0, 0, 19285, 19287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19288, 19291, 0, 19292, 0, 0, 0, 0, 19297, 0, 19298, 0, 0, 0, 0, 19302, 19303, 0, 0, 0, 0, 19304, 19305, 0, 0, 0, 0, 19314, 0, 0, 19315, 0, 0, 19321, 0, 0, 0, 0, 0, 0, 0, 19322, 0, 19333, 0, 19334, 19335, 0, 19336, 19337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19346, 0, 0, 19353, 0, 19354, 19362, 0, 19366, 19367, 0, 0, 19369, 0, 19375, 0, 19377, 19380, 19388, 0, 0, 0, 0, 0, 19389, 19390, 0, 0, 0, 0, 19392, 0, 0, 0, 0, 0, 19402, 0, 0, 0, 0, 0, 0, 0, 0, 19412, 0, 0, 19413, 19422, 0, 19424, 0, 0, 0, 19425, 0, 0, 0, 19428, 0, 0, 0, 0, 19431, 0, 0, 0, 0, 0, 19432, 0, 0, 0, 0, 0, 19448, 19459, 0, 0, 19461, 0, 19462, 19463, 0, 19467, 19474, 19482, 0, 0, 0, 0, 19494, 0, 0, 0, 0, 19501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19502, 19504, 0, 0, 0, 0, 0, 0, 0, 19505, 0, 0, 0, 0, 19506, 19507, 0, 0, 0, 19508, 0, 0, 19511, 0, 0, 19514, 0, 19515, 0, 19516, 0, 19518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19530, 0, 19537, 19538, 0, 19543, 19546, 0, 19547, 19551, 0, 0, 0, 0, 0, 0, 19552, 19553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19555, 0, 0, 19556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19560, 19561, 0, 0, 19562, 0, 0, 0, 0, 0, 0, 19565, 19567, 0, 19568, 0, 0, 0, 19569, 19570, 0, 19578, 0, 0, 0, 0, 19580, 0, 0, 0, 0, 19581, 19584, 0, 0, 0, 0, 0, 0, 0, 19585, 19586, 0, 0, 0, 19587, 19588, 0, 19589, 0, 0, 0, 0, 0, 0, 19592, 19593, 19599, 0, 19600, 0, 0, 19604, 0, 0, 19605, 0, 19606, 19608, 19610, 0, 19613, 19614, 0, 0, 0, 0, 0, 0, 19616, 19617, 0, 0, 19618, 0, 0, 19619, 0, 0, 0, 19620, 19621, 19631, 0, 0, 19632, 19634, 19636, 0, 19643, 0, 0, 19644, 19658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19675, 19677, 0, 0, 0, 0, 19679, 0, 19683, 0, 19684, 0, 0, 0, 0, 0, 0, 19687, 0, 0, 0, 0, 0, 0, 0, 0, 19688, 19689, 19692, 0, 0, 0, 0, 0, 0, 0, 19695, 19697, 0, 0, 0, 0, 0, 19698, 19699, 0, 0, 19700, 0, 19702, 0, 0, 19703, 0, 0, 0, 0, 0, 0, 19704, 19708, 0, 19710, 0, 19713, 0, 0, 0, 19715, 0, 0, 0, 0, 19718, 0, 0, 0, 0, 0, 0, 0, 19720, 0, 19722, 0, 0, 19725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19730, 0, 0, 0, 0, 0, 19731, 0, 19734, 19735, 19739, 0, 0, 19740, 0, 19741, 0, 0, 0, 19746, 0, 0, 19747, 0, 19771, 0, 0, 0, 0, 0, 0, 0, 0, 19772, 19775, 0, 0, 0, 0, 0, 0, 19778, 0, 0, 0, 0, 0, 19779, 0, 0, 19780, 19790, 0, 19791, 0, 0, 19792, 0, 0, 0, 19793, 0, 0, 19796, 19797, 0, 0, 0, 19799, 0, 0, 0, 19801, 0, 0, 0, 0, 19803, 0, 19804, 0, 19805, 0, 0, 19807, 0, 0, 0, 19808, 0, 0, 0, 0, 0, 0, 19809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19816, 0, 19821, 0, 19822, 19830, 19831, 0, 0, 0, 19833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19838, 0, 0, 0, 0, 19839, 0, 0, 19843, 0, 0, 0, 0, 19845, 0, 0, 0, 0, 19847, 0, 0, 19848, 0, 19849, 0, 0, 0, 0, 0, 0, 0, 19851, 0, 0, 0, 19854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19864, 0, 19865, 0, 19866, 0, 0, 0, 0, 0, 0, 0, 19868, 0, 0, 19870, 0, 0, 19871, 0, 0, 19872, 19873, 19875, 0, 19880, 19882, 19884, 0, 0, 19885, 19886, 19888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19890, 19892, 19893, 0, 0, 19894, 0, 0, 0, 19895, 0, 19896, 19902, 0, 0, 19903, 0, 0, 19905, 0, 0, 0, 19906, 0, 19908, 0, 19909, 19911, 0, 0, 0, 19913, 19920, 0, 19938, 19939, 19940, 0, 0, 0, 0, 0, 0, 0, 19942, 0, 19943, 0, 19945, 0, 0, 0, 19951, 19952, 19954, 19960, 0, 19965, 0, 19971, 0, 0, 0, 0, 0, 19975, 0, 19976, 0, 19990, 0, 0, 19991, 0, 19993, 0, 19995, 0, 0, 0, 19998, 19999, 20001, 0, 20003, 20005, 0, 20011, 20012, 0, 0, 0, 0, 0, 0, 20014, 0, 20020, 0, 0, 0, 0, 20021, 0, 0, 0, 0, 0, 20023, 20024, 0, 0, 0, 0, 0, 20025, 0, 0, 20027, 0, 0, 20029, 0, 0, 20032, 0, 0, 0, 0, 20044, 20045, 0, 20048, 20049, 0, 0, 20050, 0, 20052, 0, 0, 20054, 20057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20059, 0, 0, 20061, 0, 20062, 0, 20064, 0, 0, 20066, 0, 0, 20067, 0, 0, 0, 0, 20069, 0, 0, 0, 0, 0, 0, 20070, 20071, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20072, 0, 0, 20073, 20074, 0, 0, 0, 0, 0, 20075, 0, 20078, 0, 0, 0, 0, 20080, 0, 20081, 0, 0, 0, 0, 0, 0, 20095, 0, 20098, 0, 0, 0, 0, 0, 0, 0, 20107, 0, 0, 0, 0, 0, 0, 0, 0, 20112, 0, 0, 0, 20113, 20114, 0, 0, 0, 20115, 20123, 20124, 0, 0, 0, 20131, 20133, 20134, 0, 0, 0, 0, 20136, 0, 0, 20137, 20138, 20150, 0, 20152, 0, 0, 0, 20153, 0, 0, 20154, 0, 0, 0, 20158, 0, 20163, 0, 0, 20164, 0, 0, 0, 0, 0, 0, 0, 20166, 0, 20168, 0, 20170, 0, 20175, 0, 0, 20178, 0, 0, 0, 0, 20223, 0, 0, 0, 0, 20224, 0, 20226, 0, 0, 20230, 0, 20231, 0, 0, 0, 0, 20232, 0, 0, 20233, 20234, 0, 20244, 0, 20247, 0, 0, 0, 0, 0, 0, 20249, 0, 0, 0, 20250, 0, 0, 0, 0, 20251, 0, 20253, 0, 20254, 0, 0, 0, 0, 20256, 0, 0, 20264, 0, 0, 0, 0, 20266, 0, 0, 0, 20278, 0, 0, 20279, 20282, 0, 0, 0, 0, 0, 20283, 0, 20284, 0, 20285, 0, 20287, 20290, 0, 0, 0, 0, 20292, 0, 0, 0, 0, 20293, 20297, 0, 0, 0, 0, 0, 0, 20299, 0, 20300, 20303, 0, 0, 0, 0, 0, 0, 20307, 0, 0, 20308, 0, 20309, 0, 20310, 0, 0, 0, 0, 0, 0, 20312, 0, 0, 0, 20314, 0, 0, 0, 0, 20315, 20316, 0, 20322, 0, 0, 0, 0, 0, 0, 20339, 0, 0, 0, 20342, 0, 0, 0, 0, 20352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20362, 0, 0, 20365, 0, 20375, 20377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20378, 20379, 0, 20380, 0, 0, 20381, 0, 20382, 0, 20383, 0, 20388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20390, 20392, 20393, 0, 0, 20395, 0, 0, 0, 0, 0, 20396, 0, 0, 0, 0, 0, 0, 0, 0, 20398, 20415, 0, 0, 0, 20417, 0, 0, 20420, 0, 0, 20426, 20428, 0, 20431, 0, 0, 20432, 0, 20433, 20434, 20435, 0, 0, 0, 0, 20440, 0, 0, 0, 0, 0, 20442, 0, 20443, 0, 20446, 0, 0, 0, 0, 20448, 0, 20451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20452, 20453, 0, 0, 20454, 0, 0, 0, 0, 0, 0, 20457, 0, 20458, 0, 0, 0, 20465, 0, 0, 0, 0, 0, 20469, 0, 0, 0, 20473, 0, 20476, 0, 0, 0, 0, 0, 0, 0, 0, 20477, 0, 0, 20485, 0, 0, 20486, 0, 0, 20487, 0, 20496, 0, 20497, 0, 0, 20498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20499, 20500, 0, 20501, 0, 0, 0, 0, 0, 20520, 20527, 0, 20529, 0, 0, 0, 0, 20539, 0, 0, 20540, 0, 0, 0, 20543, 0, 0, 0, 20546, 0, 0, 0, 0, 0, 20548, 0, 0, 20563, 0, 0, 20564, 0, 20566, 0, 0, 0, 0, 0, 20589, 0, 0, 0, 0, 20590, 0, 0, 20593, 20594, 0, 0, 0, 0, 20595, 0, 20597, 20598, 0, 0, 0, 20618, 20620, 0, 0, 0, 0, 20621, 0, 0, 0, 0, 20627, 0, 0, 0, 0, 0, 20628, 0, 0, 0, 20629, 0, 20630, 0, 0, 20639, 0, 0, 0, 0, 0, 20707, 0, 0, 20709, 0, 0, 0, 20713, 20714, 0, 0, 0, 0, 0, 20724, 20725, 0, 0, 0, 0, 20726, 20728, 20729, 0, 20733, 0, 20734, 0, 20735, 20736, 0, 20737, 0, 0, 20744, 0, 20745, 0, 20748, 0, 0, 20749, 0, 0, 0, 0, 0, 0, 0, 0, 20750, 0, 0, 0, 0, 20754, 0, 0, 0, 20761, 0, 0, 20763, 0, 0, 0, 0, 0, 0, 0, 20766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20767, 0, 0, 0, 0, 20768, 0, 20769, 20777, 0, 0, 0, 0, 0, 0, 20785, 0, 0, 0, 20786, 20795, 20801, 0, 20802, 0, 20807, 0, 0, 20808, 0, 0, 20810, 0, 0, 20811, 0, 20812, 0, 0, 0, 0, 0, 20813, 0, 0, 20818, 20820, 20821, 0, 0, 0, 20822, 0, 20823, 0, 0, 0, 20826, 0, 0, 0, 0, 0, 0, 0, 20829, 20830, 20831, 0, 20832, 20836, 0, 0, 20839, 0, 0, 20840, 20842, 0, 20843, 0, 20844, 0, 20854, 0, 0, 0, 20855, 0, 0, 0, 0, 20856, 0, 0, 0, 20869, 0, 0, 20871, 0, 0, 0, 0, 0, 0, 0, 20873, 0, 0, 0, 0, 0, 20876, 0, 0, 0, 0, 0, 20880, 0, 0, 20882, 0, 0, 0, 0, 20883, 20884, 0, 0, 20890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20891, 0, 0, 0, 0, 0, 20905, 0, 20906, 20910, 0, 0, 20912, 20915, 0, 0, 0, 0, 0, 20916, 0, 20917, 0, 20919, 20920, 20922, 0, 20927, 0, 20928, 20929, 20930, 0, 0, 20935, 0, 0, 20939, 0, 0, 20941, 0, 0, 0, 20943, 0, 0, 0, 20946, 20947, 0, 0, 0, 0, 0, 20950, 0, 20954, 0, 0, 20955, 20964, 0, 0, 20967, 0, 0, 0, 0, 0, 20973, 20975, 0, 0, 0, 20984, 0, 20987, 20988, 0, 0, 0, 0, 0, 20989, 0, 0, 0, 20995, 0, 20998, 0, 20999, 0, 0, 0, 0, 21000, 21001, 0, 0, 0, 0, 21008, 0, 21010, 0, 21016, 0, 0, 0, 21017, 21018, 0, 0, 0, 0, 0, 21021, 21026, 21027, 21028, 0, 0, 21029, 0, 0, 0, 0, 0, 21030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21031, 21032, 0, 0, 0, 0, 0, 21037, 0, 0, 21038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21039, 0, 21041, 0, 21046, 21047, 0, 0, 0, 21049, 21053, 0, 0, 21057, 21064, 21065, 0, 0, 21066, 21067, 0, 0, 0, 21069, 0, 0, 0, 21071, 21072, 0, 0, 21073, 0, 21074, 0, 0, 21078, 0, 0, 0, 0, 21079, 0, 0, 21080, 21081, 0, 0, 21086, 21087, 0, 21089, 0, 0, 0, 0, 0, 0, 0, 21091, 0, 21093, 0, 21094, 0, 0, 0, 0, 0, 0, 0, 0, 21095, 0, 0, 0, 0, 0, 21096, 0, 21098, 0, 0, 0, 0, 0, 0, 0, 21099, 0, 0, 21100, 21101, 21102, 0, 0, 0, 0, 0, 21103, 0, 21104, 0, 0, 0, 0, 0, 21105, 21108, 21109, 0, 0, 21112, 21113, 0, 0, 0, 0, 0, 0, 21115, 21122, 21123, 0, 0, 0, 0, 0, 21125, 0, 0, 0, 0, 0, 0, 0, 0, 21129, 21131, 0, 0, 21134, 0, 0, 0, 21137, 21142, 0, 21143, 0, 0, 21144, 0, 21145, 21146, 0, 21152, 21154, 21155, 21156, 0, 0, 0, 21160, 0, 0, 0, 0, 0, 0, 21161, 0, 21164, 0, 21166, 0, 0, 0, 0, 21170, 0, 0, 0, 0, 21171, 0, 0, 21172, 0, 21174, 0, 21175, 0, 0, 0, 0, 0, 21176, 21179, 21188, 0, 0, 0, 21189, 0, 0, 21190, 0, 0, 0, 21192, 0, 0, 21193, 0, 0, 0, 21198, 0, 21212, 0, 0, 21213, 0, 0, 0, 0, 0, 0, 21215, 21216, 0, 0, 21223, 21225, 0, 21226, 0, 0, 0, 0, 21227, 21228, 0, 0, 21229, 0, 0, 0, 0, 21230, 21236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21237, 0, 0, 21238, 21239, 0, 0, 0, 0, 21256, 0, 0, 0, 0, 0, 21257, 0, 0, 0, 0, 0, 0, 0, 21259, 0, 0, 0, 21263, 0, 21272, 0, 21274, 0, 21282, 0, 0, 0, 0, 0, 0, 0, 0, 21283, 0, 0, 0, 0, 0, 0, 0, 0, 21294, 0, 0, 21297, 0, 0, 0, 0, 21298, 0, 0, 0, 21299, 0, 21300, 21302, 0, 21316, 0, 21318, 21322, 21323, 0, 21324, 0, 21326, 0, 0, 0, 21327, 21328, 0, 0, 0, 21352, 0, 0, 21354, 21361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21362, 0, 0, 0, 21363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21366, 0, 0, 21367, 21372, 21374, 0, 0, 0, 21375, 21377, 0, 21378, 0, 0, 0, 21380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21381, 0, 0, 0, 0, 0, 0, 21382, 0, 21383, 0, 0, 21384, 0, 0, 21385, 0, 0, 0, 0, 21389, 21390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21397, 21398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21399, 0, 21400, 0, 0, 0, 0, 21402, 0, 0, 0, 21403, 21404, 0, 21405, 21406, 0, 0, 0, 21407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21408, 0, 0, 0, 0, 21409, 0, 21421, 0, 21422, 0, 0, 0, 21425, 21428, 0, 0, 0, 0, 21429, 0, 0, 0, 0, 0, 21433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21434, 0, 21443, 0, 21444, 21449, 0, 21452, 0, 21453, 21454, 0, 0, 0, 21457, 0, 0, 21458, 0, 0, 0, 21460, 21461, 0, 0, 21464, 0, 0, 0, 21473, 21478, 0, 0, 21479, 0, 0, 21481, 21483, 0, 0, 0, 0, 0, 0, 0, 0, 21484, 0, 0, 21485, 21486, 0, 0, 21488, 0, 0, 0, 0, 0, 0, 21523, 0, 0, 21525, 0, 0, 0, 0, 0, 0, 0, 21526, 0, 0, 0, 0, 0, 0, 21529, 21530, 0, 0, 21531, 0, 0, 21533, 0, 0, 21539, 21564, 0, 21567, 0, 0, 0, 0, 0, 0, 0, 0, 21575, 0, 0, 0, 0, 21577, 0, 0, 0, 0, 0, 21591, 0, 0, 21604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21605, 0, 21606, 0, 0, 21617, 21618, 21619, 21620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21623, 0, 0, 0, 0, 21631, 0, 21635, 0, 0, 0, 0, 21639, 21646, 21653, 21662, 0, 0, 21663, 21664, 0, 21666, 0, 0, 21667, 0, 21670, 21672, 21673, 0, 21674, 21683, 0, 0, 0, 0, 0, 21684, 0, 21694, 0, 0, 0, 0, 21695, 21700, 0, 21703, 0, 21704, 0, 0, 21709, 0, 0, 0, 21710, 0, 0, 0, 0, 0, 0, 0, 0, 21711, 0, 0, 0, 21712, 0, 21717, 0, 21730, 0, 0, 0, 21731, 21733, 0, 0, 0, 0, 21737, 21741, 21742, 0, 21747, 0, 0, 0, 21749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21750, 0, 0, 0, 0, 0, 21752, 0, 0, 0, 0, 21753, 0, 0, 0, 0, 0, 0, 21755, 21756, 0, 21757, 0, 0, 0, 0, 0, 0, 21760, 0, 0, 21763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21764, 0, 0, 21766, 0, 0, 21767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21773, 0, 21774, 0, 0, 21775, 0, 0, 0, 0, 21776, 0, 0, 21777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21780, 21787, 21788, 21791, 0, 0, 0, 21797, 0, 0, 0, 0, 0, 21805, 0, 0, 0, 0, 21806, 0, 21807, 21809, 0, 21810, 21811, 0, 21817, 21819, 21820, 0, 21823, 0, 21824, 0, 0, 21825, 0, 0, 21826, 21832, 0, 0, 0, 0, 0, 21833, 21848, 21849, 0, 0, 21867, 21870, 21871, 21873, 0, 0, 0, 21874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21875, 0, 21878, 0, 0, 0, 21879, 0, 21881, 21886, 0, 0, 0, 0, 21887, 0, 0, 21888, 21894, 21895, 21897, 0, 21901, 0, 21904, 0, 0, 21906, 0, 0, 0, 21909, 21910, 21911, 0, 0, 21912, 0, 0, 21913, 21914, 21915, 0, 21919, 0, 0, 0, 0, 0, 0, 0, 21921, 0, 0, 21922, 21933, 21939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21944, 0, 0, 0, 0, 0, 21945, 0, 21947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21949, 0, 0, 0, 21950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21951, 0, 21952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21954, 21957, 0, 0, 0, 0, 21958, 0, 21959, 0, 0, 0, 0, 0, 0, 21962, 21963, 0, 0, 0, 0, 0, 0, 0, 0, 21964, 21965, 0, 0, 21969, 21970, 0, 0, 0, 21974, 0, 0, 21980, 21981, 0, 21982, 0, 0, 0, 0, 0, 21985, 0, 21988, 0, 21992, 0, 21999, 0, 0, 0, 0, 0, 0, 22001, 0, 22002, 0, 0, 0, 0, 0, 0, 22003, 0, 0, 0, 0, 0, 22004, 0, 0, 0, 22008, 0, 22009, 22015, 0, 0, 22016, 0, 0, 0, 22017, 22019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22021, 22037, 0, 22039, 0, 0, 0, 22040, 0, 0, 0, 22048, 22049, 0, 0, 22053, 22055, 22056, 22059, 0, 0, 22060, 22061, 0, 0, 22064, 0, 0, 0, 0, 22066, 0, 0, 0, 0, 0, 0, 0, 22073, 0, 0, 0, 22074, 22075, 0, 0, 0, 0, 0, 0, 0, 22076, 0, 0, 0, 0, 22077, 22084, 22099, 0, 0, 0, 0, 0, 0, 0, 22104, 0, 0, 22107, 0, 22108, 0, 22109, 0, 22110, 0, 0, 0, 0, 0, 0, 0, 22111, 22119, 0, 22120, 22122, 0, 0, 0, 0, 22125, 0, 0, 0, 22128, 22129, 0, 0, 0, 0, 0, 0, 22141, 0, 0, 0, 22142, 0, 0, 22144, 22146, 0, 22148, 22149, 22151, 22154, 0, 0, 0, 22162, 0, 0, 0, 0, 22164, 22177, 0, 0, 0, 0, 22179, 0, 22182, 22183, 0, 0, 22184, 22188, 0, 0, 0, 0, 0, 0, 0, 0, 22190, 0, 22194, 22201, 0, 0, 22208, 0, 22209, 0, 22212, 0, 0, 22215, 0, 22223, 22231, 0, 0, 22232, 0, 22234, 0, 0, 22235, 22236, 0, 22237, 0, 22240, 0, 0, 0, 0, 0, 22241, 0, 0, 0, 22242, 22246, 22247, 0, 0, 0, 22259, 22268, 0, 22269, 0, 0, 0, 0, 0, 0, 0, 22270, 0, 0, 0, 0, 22271, 0, 22272, 0, 22277, 0, 0, 0, 0, 0, 22278, 22280, 22283, 22286, 0, 0, 22287, 22289, 0, 0, 22290, 0, 22293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22295, 0, 22301, 22302, 0, 0, 0, 22305, 0, 22308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22315, 0, 0, 0, 22317, 0, 22334, 0, 0, 0, 22335, 0, 0, 0, 0, 0, 22336, 0, 22338, 22344, 0, 22347, 22349, 0, 22350, 0, 0, 0, 0, 0, 0, 0, 22357, 0, 0, 0, 0, 0, 22358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22359, 22360, 0, 0, 0, 0, 0, 0, 0, 0, 22361, 22366, 0, 0, 22369, 0, 22370, 22373, 0, 0, 0, 0, 0, 22375, 0, 22377, 0, 0, 0, 0, 0, 22378, 0, 0, 0, 0, 22381, 0, 0, 0, 0, 22382, 0, 22383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22391, 0, 0, 22392, 22395, 22396, 22402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22405, 0, 0, 22406, 0, 0, 22408, 0, 0, 22409, 22410, 0, 0, 0, 0, 0, 0, 22424, 0, 0, 0, 0, 22426, 0, 0, 0, 22427, 0, 22428, 0, 22432, 0, 22435, 22442, 22443, 0, 0, 0, 0, 22444, 0, 0, 0, 0, 0, 22446, 0, 22454, 0, 22455, 0, 0, 0, 22465, 0, 22470, 0, 22471, 0, 0, 0, 0, 22472, 22473, 0, 22487, 0, 0, 0, 22488, 0, 0, 0, 0, 22489, 0, 0, 22499, 0, 0, 0, 0, 0, 0, 22514, 0, 0, 22515, 0, 0, 0, 0, 0, 0, 0, 22516, 0, 0, 0, 22517, 22520, 0, 0, 0, 22534, 0, 0, 22535, 0, 0, 22536, 0, 22540, 22553, 0, 22555, 0, 0, 0, 0, 22561, 0, 0, 22562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22566, 0, 0, 0, 0, 22567, 22568, 0, 0, 22575, 0, 22579, 0, 22582, 22583, 22585, 0, 0, 0, 0, 0, 22586, 0, 0, 22587, 0, 0, 22590, 0, 0, 0, 0, 0, 22591, 0, 22592, 0, 0, 0, 0, 0, 22593, 0, 22602, 0, 0, 22604, 0, 0, 22609, 0, 0, 22618, 0, 0, 0, 0, 0, 0, 22619, 0, 22624, 22625, 0, 0, 22638, 0, 0, 0, 0, 0, 22639, 0, 0, 22640, 0, 0, 0, 0, 0, 0, 0, 22644, 0, 22645, 22647, 0, 0, 0, 0, 22652, 22653, 0, 0, 0, 22654, 0, 22655, 0, 0, 0, 22656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22673, 22675, 22676, 0, 0, 22678, 22679, 0, 22691, 0, 0, 0, 0, 0, 0, 0, 22693, 0, 0, 22696, 0, 22699, 22707, 22708, 0, 0, 0, 0, 0, 0, 0, 0, 22718, 0, 22719, 0, 0, 0, 0, 22723, 0, 0, 0, 22724, 22725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22726, 22728, 0, 0, 0, 0, 0, 0, 0, 0, 22729, 0, 0, 22731, 0, 0, 0, 0, 22732, 22735, 22736, 0, 0, 0, 0, 22739, 0, 22749, 0, 0, 22751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22758, 0, 0, 0, 0, 0, 22760, 0, 0, 0, 0, 0, 22764, 22765, 22766, 0, 22768, 0, 0, 0, 0, 0, 22769, 22770, 0, 0, 0, 0, 0, 0, 22771, 0, 0, 22772, 22775, 0, 22776, 22777, 22780, 0, 0, 22782, 22784, 0, 22787, 0, 22789, 22796, 0, 0, 0, 0, 0, 22798, 0, 0, 0, 0, 0, 0, 22802, 0, 22803, 22804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22805, 0, 0, 22810, 22811, 22814, 22816, 0, 22825, 22826, 0, 22831, 22833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22834, 0, 22836, 22838, 0, 22839, 0, 0, 0, 0, 0, 22840, 0, 22847, 0, 0, 0, 0, 0, 22856, 22857, 0, 22858, 22859, 0, 0, 22862, 0, 0, 22864, 0, 0, 0, 0, 22865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22866, 0, 22867, 22868, 0, 0, 0, 0, 22869, 0, 22871, 0, 22872, 0, 22873, 22881, 22882, 22884, 22885, 0, 0, 0, 0, 0, 0, 0, 22886, 22887, 0, 22894, 0, 22895, 0, 0, 0, 22900, 0, 22901, 0, 0, 0, 0, 22904, 0, 0, 0, 0, 22905, 22907, 0, 0, 0, 22915, 22917, 0, 0, 22918, 0, 0, 0, 22920, 0, 0, 0, 22929, 22930, 0, 0, 0, 22941, 22942, 0, 0, 0, 22943, 0, 0, 0, 22944, 0, 0, 0, 0, 0, 0, 0, 22946, 0, 22947, 0, 0, 22954, 0, 22956, 0, 0, 22962, 0, 0, 0, 0, 0, 0, 0, 22963, 0, 0, 22964, 0, 0, 0, 0, 0, 0, 0, 22965, 0, 22968, 0, 0, 0, 22969, 0, 0, 0, 0, 0, 22970, 0, 22971, 0, 0, 0, 0, 0, 22978, 0, 0, 22979, 0, 22987, 0, 0, 22989, 0, 0, 0, 0, 0, 0, 22990, 0, 23005, 0, 0, 0, 0, 0, 0, 0, 23006, 23007, 23008, 0, 0, 23023, 23024, 23029, 0, 0, 0, 0, 23030, 0, 0, 0, 0, 0, 23032, 0, 0, 0, 0, 0, 23035, 0, 0, 0, 0, 23038, 0, 0, 0, 23048, 0, 23049, 23052, 23053, 23060, 23061, 0, 23063, 0, 0, 0, 0, 23067, 23068, 0, 0, 0, 23069, 23073, 0, 0, 0, 23127, 0, 23128, 0, 0, 0, 0, 0, 23129, 0, 23138, 23141, 0, 23149, 0, 0, 23150, 0, 0, 0, 23152, 0, 0, 0, 0, 0, 0, 0, 0, 23154, 0, 0, 0, 0, 23157, 23159, 23160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23180, 0, 0, 0, 0, 23181, 0, 0, 23188, 0, 23189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23195, 0, 0, 23196, 23199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23202, 0, 23204, 0, 23207, 0, 23209, 23210, 0, 0, 0, 0, 0, 0, 23227, 23229, 0, 0, 23230, 23234, 23238, 0, 0, 0, 23245, 23246, 23248, 0, 0, 0, 0, 23249, 23254, 0, 0, 0, 23265, 0, 0, 0, 0, 0, 0, 0, 23268, 0, 23276, 0, 0, 0, 0, 23277, 0, 23297, 0, 23298, 0, 0, 0, 0, 23299, 0, 23302, 0, 0, 23303, 23312, 0, 0, 23314, 0, 23320, 0, 0, 0, 0, 23324, 0, 23325, 0, 23328, 0, 23334, 0, 0, 0, 23337, 0, 0, 0, 0, 23343, 23344, 23346, 0, 23348, 0, 0, 0, 0, 0, 0, 0, 0, 23353, 0, 0, 0, 0, 23355, 0, 23356, 23358, 0, 0, 0, 23359, 23360, 0, 23361, 0, 23367, 0, 23369, 0, 0, 23373, 0, 23378, 23379, 0, 23382, 23383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23387, 0, 0, 0, 0, 0, 0, 23388, 23390, 0, 0, 23393, 23398, 0, 0, 0, 23399, 0, 0, 0, 23400, 0, 0, 0, 0, 23401, 0, 0, 0, 23415, 0, 0, 0, 0, 0, 0, 0, 0, 23416, 0, 23422, 0, 23443, 23444, 0, 0, 0, 0, 23448, 0, 23454, 0, 0, 0, 0, 0, 0, 23456, 0, 0, 23458, 23464, 0, 0, 0, 0, 0, 0, 23465, 0, 0, 0, 23470, 23471, 0, 0, 23472, 0, 0, 0, 23473, 23496, 0, 0, 0, 0, 0, 0, 0, 0, 23497, 0, 23499, 0, 0, 23502, 0, 0, 23503, 0, 0, 23513, 0, 0, 23515, 0, 0, 0, 23517, 0, 0, 0, 0, 23518, 23519, 23521, 23524, 0, 23525, 23528, 23539, 0, 0, 0, 0, 0, 23541, 0, 0, 23544, 0, 0, 23556, 0, 0, 23557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23559, 0, 23560, 0, 0, 23561, 0, 0, 23566, 0, 0, 0, 0, 0, 23568, 23569, 23570, 0, 0, 0, 0, 23571, 0, 23574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23575, 0, 23579, 0, 0, 23581, 0, 0, 0, 0, 0, 0, 23587, 0, 0, 0, 0, 0, 0, 0, 23596, 23598, 0, 0, 0, 0, 23602, 23606, 0, 0, 23607, 0, 23608, 0, 0, 0, 23614, 23616, 0, 0, 0, 0, 0, 23618, 0, 0, 23619, 0, 0, 0, 0, 23621, 23626, 0, 23627, 0, 0, 0, 0, 0, 0, 0, 23629, 0, 23630, 0, 0, 0, 0, 23634, 0, 23636, 0, 0, 0, 0, 0, 0, 23638, 0, 0, 0, 0, 23640, 23667, 0, 23669, 0, 0, 0, 23681, 0, 0, 0, 0, 0, 0, 0, 23682, 0, 23683, 0, 0, 0, 0, 0, 23684, 0, 0, 0, 23685, 23689, 0, 23693, 23694, 23700, 0, 23702, 0, 23709, 0, 0, 0, 0, 0, 0, 0, 23712, 0, 0, 0, 0, 0, 23714, 0, 0, 23715, 0, 0, 0, 0, 23718, 0, 0, 23720, 0, 0, 0, 0, 23722, 0, 0, 0, 23726, 23729, 0, 23741, 23746, 0, 23748, 0, 0, 0, 0, 23749, 0, 0, 0, 0, 0, 23750, 0, 0, 0, 0, 23751, 0, 23753, 0, 0, 0, 0, 23757, 23765, 0, 0, 0, 23770, 0, 0, 0, 0, 0, 0, 0, 23771, 0, 23772, 23781, 0, 0, 23796, 0, 0, 0, 0, 23798, 0, 23799, 0, 0, 0, 23802, 0, 0, 23806, 0, 23807, 0, 0, 23808, 0, 23809, 0, 23819, 0, 0, 0, 23821, 0, 23827, 0, 0, 0, 23829, 0, 0, 0, 0, 0, 0, 0, 23830, 0, 0, 0, 0, 0, 0, 23832, 23833, 23834, 23835, 0, 0, 0, 0, 23837, 23838, 0, 0, 0, 0, 0, 23846, 0, 0, 0, 0, 0, 0, 23847, 0, 0, 0, 0, 0, 23879, 23881, 0, 0, 23882, 23883, 23895, 0, 23899, 0, 0, 0, 0, 23901, 0, 0, 0, 0, 0, 0, 23902, 0, 0, 0, 0, 0, 23903, 23905, 0, 23906, 0, 23907, 23918, 23919, 23920, 0, 23922, 0, 23924, 0, 23927, 0, 23934, 0, 23937, 23941, 0, 23942, 23946, 0, 0, 0, 0, 0, 23955, 23956, 23958, 0, 0, 0, 0, 0, 0, 23959, 0, 23962, 23965, 0, 23966, 0, 0, 0, 0, 23967, 23968, 0, 0, 23973, 0, 0, 23974, 0, 0, 0, 0, 23975, 0, 23976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23977, 0, 0, 0, 0, 0, 0, 0, 0, 23980, 0, 0, 23984, 0, 23985, 0, 0, 23987, 0, 0, 23988, 23990, 23991, 0, 0, 0, 0, 0, 0, 23992, 0, 0, 0, 0, 0, 0, 0, 0, 23994, 0, 0, 0, 23998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23999, 0, 0, 24003, 0, 24004, 0, 24006, 0, 0, 0, 24007, 0, 0, 24008, 0, 0, 0, 0, 0, 0, 0, 24009, 0, 0, 24010, 0, 0, 24011, 0, 0, 24013, 24014, 0, 0, 24015, 24016, 24027, 0, 24028, 24029, 0, 24030, 0, 0, 0, 0, 0, 24033, 24034, 0, 24035, 0, 0, 24036, 0, 0, 24044, 0, 24048, 24049, 24063, 24067, 0, 24068, 24070, 0, 0, 24071, 24078, 24087, 0, 24090, 0, 0, 0, 24095, 0, 24098, 24101, 24104, 24106, 0, 24107, 0, 0, 0, 24108, 0, 0, 0, 0, 24110, 24111, 0, 24113, 0, 0, 24115, 24120, 0, 0, 0, 0, 0, 0, 24124, 0, 24125, 0, 24126, 0, 24127, 0, 0, 0, 0, 0, 24135, 0, 0, 24136, 0, 24137, 24142, 0, 0, 0, 24146, 0, 0, 24147, 24149, 24154, 0, 24163, 0, 0, 0, 24165, 24166, 24167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24169, 24170, 24175, 0, 0, 0, 24178, 0, 0, 24179, 0, 0, 24181, 0, 24184, 24197, 0, 24201, 24204, 0, 0, 0, 0, 0, 0, 24206, 24212, 24220, 0, 0, 0, 24224, 0, 0, 0, 0, 0, 0, 0, 0, 24226, 0, 24234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24235, 0, 24236, 0, 0, 0, 0, 0, 24239, 24240, 24241, 0, 0, 24248, 0, 0, 24249, 0, 24251, 0, 0, 0, 0, 0, 0, 24253, 0, 24268, 0, 0, 0, 24269, 0, 24271, 24272, 0, 0, 0, 0, 24273, 0, 0, 24274, 0, 0, 24279, 0, 0, 0, 0, 0, 0, 0, 24280, 0, 24293, 24294, 0, 0, 0, 0, 0, 0, 24296, 0, 0, 24323, 0, 0, 0, 24329, 24330, 24331, 24339, 0, 24351, 0, 0, 24369, 24370, 0, 0, 0, 24371, 0, 0, 0, 0, 24372, 24373, 24374, 0, 0, 0, 0, 0, 24378, 0, 0, 0, 0, 24379, 0, 24381, 0, 24383, 24389, 0, 24390, 0, 0, 24394, 24395, 24400, 0, 0, 0, 24401, 24402, 0, 24406, 0, 0, 0, 24411, 0, 0, 0, 24415, 0, 24416, 0, 0, 0, 0, 0, 24417, 0, 24419, 0, 24422, 0, 24423, 24428, 0, 24435, 0, 0, 0, 24439, 0, 0, 0, 24440, 24442, 24446, 0, 0, 0, 24447, 24448, 24449, 24452, 0, 0, 0, 0, 24453, 24457, 0, 0, 24458, 24459, 24460, 0, 24465, 0, 0, 0, 0, 0, 0, 0, 24470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24471, 0, 24473, 24474, 24475, 24476, 0, 24478, 0, 0, 0, 0, 24480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24482, 24485, 0, 0, 0, 0, 24486, 0, 0, 0, 24488, 0, 0, 0, 24494, 0, 0, 0, 0, 24497, 0, 0, 24498, 0, 0, 0, 24499, 24506, 0, 0, 0, 24507, 0, 0, 24511, 0, 0, 24513, 24514, 0, 0, 0, 0, 0, 24517, 0, 24518, 0, 24520, 0, 24521, 24524, 24525, 0, 0, 0, 0, 0, 24527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24537, 24539, 0, 24540, 0, 0, 0, 24548, 0, 0, 0, 0, 0, 24549, 24550, 0, 0, 0, 24553, 24554, 0, 24555, 0, 24556, 0, 24558, 0, 0, 0, 0, 0, 24560, 0, 0, 0, 24561, 0, 0, 0, 0, 0, 24562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24567, 0, 0, 0, 0, 0, 24569, 0, 0, 0, 24574, 0, 24575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24577, 24581, 0, 24584, 0, 0, 0, 0, 0, 24585, 0, 0, 0, 0, 0, 24586, 0, 0, 24587, 0, 24588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24590, 24591, 0, 0, 0, 0, 24592, 0, 0, 0, 0, 0, 0, 0, 24594, 0, 0, 0, 0, 0, 0, 0, 24596, 24597, 0, 0, 0, 0, 24602, 24603, 0, 0, 0, 0, 24604, 0, 0, 24605, 0, 24610, 0, 0, 24611, 0, 0, 0, 0, 24612, 24615, 24616, 24624, 0, 0, 0, 24627, 0, 24638, 24639, 0, 0, 0, 0, 24640, 0, 0, 0, 24655, 24656, 24657, 0, 0, 0, 0, 0, 0, 0, 0, 24662, 0, 24663, 24664, 0, 0, 0, 0, 0, 24665, 0, 0, 0, 0, 24667, 0, 0, 0, 0, 0, 0, 24668, 24669, 0, 24670, 24674, 0, 0, 0, 24675, 0, 24678, 0, 0, 24679, 0, 0, 0, 24681, 0, 24683, 0, 0, 0, 0, 24684, 0, 24685, 0, 0, 24686, 0, 0, 24688, 24689, 0, 0, 0, 0, 24690, 24691, 0, 0, 0, 0, 0, 0, 0, 24697, 0, 24698, 0, 0, 0, 0, 0, 0, 0, 0, 24709, 0, 0, 0, 0, 0, 24710, 0, 24712, 0, 0, 0, 0, 0, 0, 24713, 24714, 0, 24715, 0, 24716, 24718, 0, 24719, 0, 0, 0, 0, 24720, 0, 0, 24725, 0, 0, 24738, 0, 24749, 24750, 0, 0, 0, 24752, 0, 0, 0, 24753, 0, 0, 0, 24758, 0, 0, 0, 0, 0, 24762, 0, 24763, 0, 0, 0, 0, 0, 0, 0, 24764, 0, 0, 0, 0, 0, 24765, 24767, 24768, 0, 24772, 0, 0, 0, 0, 24773, 0, 0, 0, 0, 24777, 0, 0, 0, 0, 0, 24785, 0, 24786, 24788, 0, 0, 0, 24789, 0, 0, 0, 0, 24794, 24798, 0, 24799, 24800, 0, 0, 0, 24803, 0, 24804, 24806, 0, 24807, 0, 0, 0, 24810, 0, 0, 0, 0, 0, 0, 24827, 24828, 0, 24835, 0, 0, 0, 0, 0, 0, 24836, 0, 0, 0, 0, 0, 24839, 0, 24843, 24844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24847, 0, 0, 24848, 0, 0, 0, 0, 0, 0, 24849, 0, 24850, 24851, 0, 0, 0, 24852, 0, 24853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24854, 0, 24855, 0, 0, 24868, 0, 0, 0, 24883, 0, 0, 0, 24884, 0, 24895, 24897, 0, 0, 0, 0, 0, 24899, 0, 0, 0, 0, 0, 24900, 0, 24913, 0, 0, 0, 0, 0, 0, 24914, 0, 0, 24917, 24930, 24931, 0, 0, 0, 24932, 0, 0, 24939, 0, 0, 24942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24945, 24950, 0, 24951, 0, 0, 24953, 0, 0, 0, 24954, 0, 24959, 0, 0, 0, 24961, 0, 0, 24962, 0, 24964, 24968, 24970, 24972, 0, 0, 0, 0, 0, 24976, 0, 0, 0, 24977, 0, 24982, 0, 0, 24983, 0, 0, 24984, 0, 0, 0, 24993, 0, 0, 0, 24994, 0, 0, 25001, 0, 0, 0, 25003, 0, 0, 25018, 0, 0, 25023, 0, 0, 0, 25034, 0, 0, 25035, 25036, 0, 25037, 0, 0, 0, 0, 0, 0, 0, 25039, 0, 0, 0, 0, 0, 25040, 0, 0, 0, 0, 0, 0, 0, 25042, 0, 0, 25043, 25045, 0, 0, 0, 0, 0, 0, 25049, 0, 0, 25051, 0, 25052, 25053, 0, 0, 25054, 0, 0, 0, 25055, 0, 0, 0, 0, 25057, 25059, 0, 0, 25060, 25064, 0, 25065, 25069, 25070, 0, 0, 0, 0, 25072, 0, 25073, 0, 25090, 0, 0, 25092, 25093, 25101, 0, 0, 0, 0, 0, 0, 25105, 25108, 0, 0, 25113, 0, 0, 25115, 25116, 0, 0, 0, 0, 0, 0, 25117, 0, 0, 0, 25120, 25121, 0, 0, 0, 0, 0, 0, 0, 25125, 0, 0, 0, 25126, 0, 25130, 25134, 0, 25139, 0, 25143, 0, 0, 0, 25151, 0, 25161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25163, 0, 0, 0, 0, 0, 0, 0, 25174, 0, 25175, 0, 25207, 0, 0, 0, 25209, 0, 0, 0, 0, 25213, 0, 25219, 0, 25223, 0, 25225, 0, 0, 0, 25227, 0, 0, 0, 25228, 0, 0, 0, 25229, 0, 0, 0, 0, 0, 0, 0, 25231, 25233, 0, 0, 0, 0, 25237, 25239, 0, 0, 0, 25243, 0, 0, 0, 25252, 0, 25257, 25258, 0, 0, 0, 0, 25260, 25265, 0, 25268, 0, 0, 25273, 25324, 0, 25325, 0, 25326, 0, 0, 0, 0, 0, 0, 0, 0, 25327, 0, 0, 0, 0, 0, 25328, 0, 0, 0, 0, 0, 0, 25332, 0, 0, 0, 25333, 0, 0, 0, 25336, 25337, 25338, 0, 0, 25343, 0, 25350, 0, 0, 0, 0, 0, 0, 0, 25352, 0, 25354, 0, 25375, 0, 25379, 0, 0, 0, 0, 25384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25386, 0, 25388, 0, 25390, 0, 0, 25399, 0, 0, 25401, 0, 0, 0, 25402, 0, 0, 0, 25407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25413, 25415, 0, 0, 25417, 0, 0, 0, 0, 0, 0, 0, 25419, 0, 0, 0, 25421, 0, 0, 0, 25424, 0, 0, 0, 0, 25433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25435, 0, 0, 0, 0, 0, 0, 25436, 0, 0, 0, 25437, 0, 0, 25440, 0, 0, 0, 0, 0, 0, 25442, 0, 0, 25443, 0, 25446, 0, 0, 25449, 0, 0, 0, 25450, 0, 0, 0, 0, 25452, 0, 25453, 25454, 25455, 0, 0, 0, 25456, 0, 25457, 0, 0, 0, 25459, 0, 25461, 0, 25468, 0, 0, 0, 0, 0, 0, 0, 0, 25469, 0, 0, 0, 0, 0, 25471, 0, 0, 0, 0, 0, 25474, 0, 0, 0, 0, 0, 0, 0, 0, 25475, 0, 0, 0, 0, 25477, 0, 0, 0, 0, 25483, 0, 0, 0, 0, 0, 25484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25485, 0, 25497, 0, 0, 25498, 0, 25504, 0, 25510, 0, 25512, 0, 0, 25513, 25514, 0, 0, 0, 0, 0, 0, 25517, 25518, 25519, 0, 25520, 0, 0, 0, 0, 0, 0, 0, 25521, 0, 25522, 25527, 25534, 0, 25536, 0, 25537, 0, 0, 25548, 25550, 0, 0, 25551, 0, 25552, 0, 0, 0, 0, 0, 25554, 0, 25555, 0, 25556, 25557, 25568, 0, 0, 0, 25570, 25571, 0, 0, 0, 0, 0, 0, 25574, 0, 0, 0, 0, 25579, 0, 0, 0, 25581, 0, 0, 0, 25582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25588, 0, 0, 0, 0, 25589, 0, 0, 0, 0, 25590, 0, 25591, 25592, 25593, 0, 25594, 0, 0, 0, 25596, 0, 25597, 25615, 0, 0, 0, 0, 0, 25618, 0, 0, 0, 0, 25619, 25623, 0, 0, 25629, 0, 0, 25631, 0, 0, 0, 25635, 25636, 0, 0, 25649, 0, 0, 0, 0, 25654, 0, 0, 0, 25661, 25663, 0, 0, 25671, 0, 0, 25678, 25698, 0, 25699, 25702, 25703, 0, 0, 0, 0, 0, 0, 0, 0, 25704, 0, 0, 0, 0, 0, 25706, 0, 0, 25710, 0, 25711, 0, 25712, 0, 25715, 25716, 25717, 0, 0, 25718, 25728, 25732, 0, 0, 0, 25734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25737, 0, 0, 25739, 0, 0, 0, 25740, 0, 25741, 25745, 0, 25746, 0, 25748, 25772, 25778, 0, 0, 0, 0, 0, 25780, 0, 0, 0, 0, 25781, 0, 25782, 25784, 25785, 0, 0, 0, 25789, 0, 0, 0, 0, 0, 0, 25797, 25801, 0, 0, 0, 25808, 25809, 0, 0, 25811, 25814, 25815, 0, 0, 25817, 0, 0, 0, 0, 0, 0, 0, 0, 25820, 0, 0, 0, 0, 25832, 25833, 0, 0, 0, 25846, 0, 0, 0, 25847, 25848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25849, 25850, 0, 0, 25851, 0, 0, 25852, 0, 25862, 0, 0, 0, 25863, 25865, 0, 0, 0, 0, 0, 0, 0, 25867, 25868, 0, 25869, 25874, 0, 25875, 0, 25876, 25877, 0, 0, 0, 0, 25878, 25902, 0, 0, 0, 0, 0, 0, 0, 25903, 25904, 25905, 0, 0, 0, 25908, 25909, 0, 0, 0, 0, 25910, 0, 0, 0, 0, 0, 0, 0, 25912, 0, 25913, 0, 0, 0, 0, 0, 0, 0, 0, 25914, 0, 0, 25916, 0, 0, 0, 0, 0, 25917, 25927, 0, 0, 0, 0, 25928, 0, 0, 25930, 0, 0, 0, 25933, 0, 0, 25938, 25942, 0, 0, 0, 0, 0, 0, 0, 25945, 0, 25950, 0, 25956, 0, 0, 25961, 25962, 0, 0, 25963, 0, 25964, 25965, 25966, 0, 0, 0, 0, 0, 25967, 0, 0, 0, 0, 25968, 0, 0, 0, 25969, 25971, 0, 0, 0, 0, 0, 25973, 25975, 0, 0, 0, 0, 0, 0, 0, 25978, 0, 25981, 0, 0, 0, 25982, 0, 0, 0, 25984, 0, 0, 0, 0, 0, 0, 0, 25993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26002, 0, 0, 0, 26005, 0, 0, 0, 26006, 26007, 0, 0, 26014, 26015, 26016, 0, 0, 0, 0, 0, 0, 26017, 26018, 26020, 0, 26022, 26023, 0, 0, 0, 26024, 26028, 0, 26029, 26033, 26034, 26044, 0, 0, 0, 0, 0, 26046, 0, 0, 26047, 0, 0, 26049, 0, 26050, 0, 26051, 0, 0, 0, 0, 0, 26053, 0, 0, 0, 0, 26054, 26059, 0, 0, 0, 0, 0, 0, 26060, 0, 26066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26067, 0, 26069, 0, 0, 26071, 0, 0, 0, 26073, 0, 26074, 26077, 0, 0, 0, 0, 26078, 0, 0, 0, 26079, 0, 26090, 0, 0, 26094, 0, 0, 0, 0, 0, 0, 0, 0, 26095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26096, 26101, 0, 26107, 26122, 0, 26124, 0, 0, 26125, 0, 0, 0, 0, 0, 0, 26136, 26141, 26155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26164, 26166, 0, 0, 0, 26167, 0, 26170, 26171, 0, 0, 26172, 0, 0, 26174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26175, 0, 0, 0, 26176, 26177, 0, 26321, 26322, 0, 26323, 0, 0, 26324, 0, 0, 0, 0, 0, 0, 0, 26325, 0, 26331, 0, 0, 0, 0, 0, 0, 26335, 0, 0, 0, 26350, 0, 0, 0, 26379, 0, 0, 26382, 26383, 26385, 0, 0, 26392, 26406, 0, 0, 0, 0, 26411, 0, 0, 0, 0, 0, 26412, 0, 0, 26420, 0, 0, 26423, 0, 26424, 26426, 26432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26435, 0, 26436, 0, 0, 0, 0, 0, 26441, 0, 26444, 0, 0, 0, 26446, 0, 0, 0, 0, 26447, 0, 0, 0, 0, 26449, 0, 26450, 26452, 0, 26453, 26454, 0, 0, 0, 26455, 0, 0, 0, 26456, 0, 0, 26458, 0, 0, 26460, 0, 26463, 0, 0, 0, 0, 0, 0, 0, 0, 26464, 26470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26473, 0, 0, 26474, 0, 0, 0, 0, 0, 0, 0, 26475, 0, 0, 0, 0, 0, 0, 0, 26477, 0, 26485, 0, 0, 26486, 0, 26487, 0, 0, 26488, 26493, 26494, 0, 0, 26495, 0, 26497, 26504, 26506, 0, 0, 0, 0, 0, 26507, 0, 0, 0, 0, 0, 26509, 0, 0, 26510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26512, 0, 26513, 26515, 0, 0, 0, 26518, 0, 0, 0, 26519, 0, 26524, 26526, 0, 0, 0, 26527, 0, 26532, 0, 26533, 26537, 26558, 0, 0, 0, 26559, 0, 0, 0, 26571, 0, 0, 26573, 0, 26588, 0, 26593, 0, 0, 0, 0, 0, 0, 26603, 0, 26604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26606, 0, 0, 0, 0, 0, 0, 0, 26607, 26609, 26611, 26614, 0, 0, 0, 26616, 26620, 0, 26621, 0, 0, 0, 0, 0, 26627, 0, 26629, 0, 0, 26630, 0, 0, 26632, 26643, 0, 0, 0, 26644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26646, 26647, 0, 0, 0, 26650, 0, 0, 26656, 0, 0, 0, 0, 26663, 26670, 26671, 0, 0, 0, 26685, 26686, 26687, 0, 26689, 0, 0, 0, 0, 26744, 0, 26745, 0, 26747, 26748, 0, 26749, 26750, 26751, 0, 0, 0, 0, 26752, 26755, 0, 0, 0, 26756, 26769, 0, 0, 0, 26774, 0, 0, 0, 0, 0, 26775, 0, 26777, 26778, 0, 26786, 0, 0, 0, 26787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26788, 0, 0, 26789, 0, 0, 0, 0, 0, 26791, 0, 26792, 26793, 0, 0, 0, 26794, 0, 26797, 26798, 0, 0, 0, 26800, 0, 0, 26803, 0, 26804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26805, 0, 0, 26808, 0, 0, 26809, 0, 0, 0, 0, 0, 0, 0, 26812, 0, 26825, 0, 0, 0, 0, 0, 0, 0, 26826, 0, 0, 26827, 26829, 26834, 0, 0, 0, 0, 26835, 0, 0, 26849, 0, 26851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26852, 0, 26853, 26857, 0, 26858, 0, 26859, 0, 0, 0, 0, 0, 0, 0, 26876, 0, 26878, 26882, 26883, 0, 0, 0, 0, 26890, 26894, 0, 0, 0, 0, 26895, 26896, 0, 0, 0, 0, 0, 26900, 0, 0, 0, 0, 0, 0, 0, 26911, 26913, 26914, 26915, 26916, 26919, 0, 0, 0, 26921, 26922, 0, 0, 26925, 0, 0, 0, 26928, 0, 0, 26929, 26930, 0, 0, 0, 26931, 0, 26932, 0, 0, 0, 0, 0, 26933, 0, 0, 0, 0, 0, 0, 26937, 0, 0, 26943, 0, 0, 26944, 0, 0, 0, 26946, 0, 0, 0, 0, 0, 0, 0, 26956, 0, 26958, 0, 0, 26963, 0, 0, 0, 0, 0, 0, 0, 26965, 0, 26969, 26970, 26972, 0, 0, 0, 0, 0, 26973, 0, 26974, 0, 26978, 0, 26980, 0, 0, 0, 0, 0, 0, 26982, 0, 26986, 26987, 0, 26990, 0, 0, 0, 0, 27003, 27006, 0, 0, 27007, 27010, 27012, 27013, 0, 0, 0, 0, 0, 0, 0, 0, 27014, 27015, 27018, 0, 27019, 0, 0, 0, 0, 0, 27025, 0, 0, 0, 27026, 0, 0, 0, 0, 27029, 27030, 27031, 27034, 0, 0, 27036, 27037, 0, 0, 0, 27038, 27042, 0, 0, 0, 27044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27045, 0, 0, 0, 0, 0, 0, 0, 27046, 0, 0, 0, 0, 0, 0, 0, 27047, 27049, 0, 27050, 0, 0, 0, 27051, 27052, 0, 27055, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27056, 27058, 27059, 0, 27061, 0, 27064, 0, 0, 0, 0, 0, 27069, 0, 0, 27070, 0, 0, 0, 0, 0, 0, 0, 27072, 0, 0, 0, 0, 0, 0, 0, 0, 27076, 0, 0, 0, 0, 0, 27078, 0, 27079, 0, 0, 0, 27081, 0, 0, 0, 0, 0, 0, 27082, 0, 27083, 27086, 0, 0, 0, 0, 27087, 0, 0, 0, 0, 0, 27088, 27090, 0, 27094, 0, 0, 27095, 0, 27099, 27102, 0, 0, 0, 27103, 0, 0, 0, 0, 27105, 0, 0, 0, 27106, 0, 0, 0, 0, 0, 0, 27107, 0, 0, 0, 0, 27108, 27117, 0, 0, 0, 0, 27118, 0, 0, 27124, 0, 27126, 0, 0, 27130, 27131, 0, 0, 0, 0, 0, 0, 27147, 0, 0, 0, 0, 27148, 27149, 0, 0, 0, 0, 27150, 27151, 0, 27152, 0, 27159, 0, 0, 0, 27164, 0, 0, 0, 0, 0, 0, 0, 27175, 0, 27189, 0, 0, 27191, 0, 27193, 0, 27195, 0, 27198, 0, 0, 0, 0, 0, 27200, 0, 0, 0, 0, 27202, 0, 0, 0, 0, 27203, 0, 0, 27204, 0, 0, 27206, 0, 27207, 0, 0, 0, 0, 27209, 0, 0, 0, 27213, 0, 0, 27216, 27219, 27220, 27222, 27223, 0, 27224, 0, 27225, 27226, 0, 0, 27233, 0, 0, 0, 0, 27235, 0, 27237, 0, 27238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27239, 0, 27242, 27243, 0, 27250, 0, 0, 0, 27251, 0, 27253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27254, 27255, 27258, 0, 0, 0, 27259, 0, 0, 0, 0, 0, 0, 27267, 0, 27276, 27278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27296, 27297, 27301, 0, 0, 0, 0, 0, 0, 27302, 0, 0, 0, 0, 0, 0, 27312, 27313, 0, 0, 0, 0, 0, 27318, 0, 27320, 0, 27329, 0, 27330, 27331, 0, 27332, 0, 0, 0, 0, 27340, 0, 0, 0, 27348, 0, 0, 0, 0, 0, 0, 27350, 0, 27351, 0, 0, 0, 0, 27355, 0, 0, 27358, 27359, 27361, 0, 0, 0, 27365, 0, 27367, 0, 27376, 27378, 0, 0, 27379, 0, 0, 0, 0, 0, 0, 27396, 0, 27397, 27404, 0, 0, 0, 0, 0, 27408, 0, 0, 0, 0, 27453, 0, 0, 0, 27456, 0, 0, 0, 27458, 0, 0, 0, 0, 0, 0, 0, 27459, 0, 0, 0, 27460, 0, 0, 27461, 0, 27465, 27467, 0, 0, 27469, 0, 27470, 0, 27471, 0, 27477, 27482, 0, 0, 0, 0, 0, 0, 27484, 0, 0, 0, 0, 0, 0, 27485, 0, 0, 0, 0, 0, 27493, 0, 27494, 27502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27511, 27532, 0, 0, 0, 27533, 27545, 0, 0, 0, 27546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27547, 0, 0, 27549, 27550, 0, 27551, 0, 0, 0, 0, 0, 0, 0, 27555, 0, 0, 27571, 0, 27573, 27574, 27575, 27577, 0, 27578, 0, 0, 27579, 27585, 0, 0, 0, 0, 0, 27586, 0, 0, 27588, 27589, 0, 0, 0, 0, 27596, 0, 0, 27600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27610, 0, 0, 0, 27618, 0, 0, 27620, 0, 0, 0, 27631, 0, 0, 27632, 27634, 0, 27636, 27638, 0, 0, 0, 27643, 0, 27644, 27649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27651, 27660, 0, 27661, 0, 0, 0, 0, 0, 0, 0, 27662, 0, 0, 27664, 0, 27665, 0, 0, 0, 27669, 0, 27671, 0, 0, 0, 27673, 27674, 0, 0, 0, 27682, 0, 0, 0, 27711, 0, 27712, 27713, 27719, 27720, 0, 0, 27728, 0, 27729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27731, 0, 0, 27732, 0, 27733, 0, 27738, 0, 0, 0, 27742, 0, 0, 0, 27743, 27744, 0, 0, 0, 0, 0, 0, 27745, 27746, 0, 0, 0, 27747, 27748, 27751, 27752, 0, 0, 0, 27768, 27770, 0, 0, 0, 27774, 27775, 0, 27776, 27777, 0, 0, 27781, 0, 27784, 0, 27786, 0, 0, 27791, 0, 27792, 27793, 27804, 0, 27812, 27813, 0, 0, 0, 0, 0, 0, 0, 0, 27814, 0, 27825, 0, 27827, 0, 0, 0, 0, 27828, 27861, 27862, 0, 0, 0, 27864, 0, 0, 0, 27865, 27884, 0, 27889, 0, 0, 0, 0, 0, 27890, 0, 27891, 0, 0, 0, 27892, 0, 0, 0, 0, 0, 27897, 27898, 0, 0, 27899, 0, 0, 0, 27901, 27905, 0, 0, 27920, 0, 0, 27921, 0, 27922, 0, 0, 0, 27931, 27934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27941, 0, 27942, 0, 27945, 0, 27947, 27954, 0, 0, 0, 0, 27960, 27963, 0, 0, 0, 0, 0, 0, 0, 0, 27964, 27965, 0, 0, 0, 27967, 0, 27969, 27975, 0, 27976, 27977, 0, 27981, 0, 27983, 28051, 28052, 0, 0, 0, 0, 0, 28056, 0, 0, 0, 0, 0, 0, 28058, 28059, 0, 0, 28061, 0, 0, 0, 0, 0, 0, 0, 28063, 0, 0, 0, 0, 0, 0, 28066, 0, 0, 0, 0, 0, 0, 28069, 28070, 28072, 0, 28073, 0, 0, 28074, 0, 0, 0, 0, 28075, 0, 0, 0, 0, 0, 0, 0, 28078, 0, 0, 0, 0, 28085, 0, 0, 0, 0, 28086, 0, 0, 0, 0, 0, 0, 28088, 0, 0, 0, 0, 0, 0, 0, 0, 28090, 0, 28097, 28114, 28115, 0, 0, 0, 0, 0, 0, 0, 28116, 0, 0, 0, 0, 0, 28118, 0, 28129, 0, 28131, 0, 0, 28135, 0, 0, 0, 28140, 28141, 0, 0, 0, 28146, 0, 0, 0, 0, 28152, 0, 0, 0, 0, 28155, 28157, 28161, 0, 0, 0, 0, 28166, 0, 28167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28172, 0, 0, 0, 0, 0, 0, 28173, 0, 0, 28175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28178, 28188, 0, 28190, 0, 0, 0, 0, 0, 28191, 0, 28193, 28206, 0, 0, 28207, 28209, 0, 28211, 0, 28213, 0, 0, 0, 28215, 28216, 28217, 0, 28222, 0, 28223, 28225, 0, 0, 0, 28226, 0, 28227, 28229, 28232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28235, 0, 28241, 0, 0, 28242, 0, 0, 0, 0, 28243, 0, 0, 0, 28245, 0, 0, 0, 28248, 28250, 0, 28251, 28252, 0, 0, 0, 0, 0, 0, 28253, 0, 0, 28254, 28255, 0, 0, 28256, 0, 0, 28258, 0, 0, 0, 0, 0, 28259, 0, 0, 28260, 0, 0, 28261, 0, 0, 0, 0, 28262, 28263, 0, 0, 28264, 0, 0, 0, 28266, 0, 28268, 28269, 0, 28270, 28272, 28274, 0, 28277, 28278, 0, 0, 0, 28279, 0, 28280, 28281, 28283, 0, 28292, 0, 28294, 0, 28297, 0, 0, 0, 0, 28299, 0, 0, 0, 0, 0, 28300, 0, 0, 0, 0, 0, 0, 0, 28301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28302, 28303, 0, 0, 0, 0, 28304, 0, 0, 28305, 0, 28312, 0, 28313, 28314, 0, 0, 0, 0, 0, 0, 28315, 0, 0, 0, 28320, 28321, 0, 0, 28328, 0, 0, 0, 28329, 28338, 0, 28339, 0, 0, 28344, 0, 0, 0, 0, 0, 0, 0, 0, 28347, 0, 0, 0, 0, 0, 0, 0, 0, 28348, 0, 0, 0, 0, 0, 28411, 0, 28412, 28413, 0, 28416, 0, 0, 0, 28420, 0, 0, 0, 0, 0, 28421, 0, 0, 0, 0, 28423, 0, 0, 0, 28424, 0, 0, 28428, 0, 0, 0, 0, 0, 28429, 0, 0, 0, 28431, 28434, 0, 28458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28464, 0, 0, 0, 0, 28465, 0, 28467, 0, 0, 0, 0, 0, 0, 28471, 0, 0, 0, 0, 28474, 0, 28480, 0, 28481, 0, 0, 28485, 0, 0, 0, 0, 28486, 28488, 0, 0, 28489, 0, 0, 0, 0, 28492, 0, 0, 0, 28495, 0, 28497, 0, 28499, 0, 0, 0, 0, 28500, 0, 0, 28502, 28503, 0, 0, 0, 28508, 0, 0, 0, 28510, 0, 0, 28512, 28513, 28514, 28521, 0, 28526, 0, 28527, 28528, 0, 0, 0, 0, 28529, 0, 0, 28532, 0, 0, 28537, 28538, 0, 0, 0, 28539, 0, 28548, 0, 28553, 28554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28560, 28563, 0, 0, 28564, 0, 0, 0, 0, 28565, 0, 0, 0, 0, 0, 0, 0, 28566, 28568, 0, 0, 0, 0, 0, 0, 28569, 0, 0, 0, 28570, 0, 28572, 28573, 0, 0, 0, 0, 28575, 0, 0, 0, 0, 28576, 28581, 28588, 0, 0, 28589, 0, 0, 0, 28590, 28595, 0, 28598, 0, 0, 28601, 0, 0, 28605, 0, 0, 0, 0, 28614, 28615, 28619, 0, 0, 0, 0, 0, 0, 28620, 0, 28626, 0, 0, 28628, 0, 28631, 0, 28632, 0, 0, 0, 0, 0, 0, 28635, 0, 0, 0, 28637, 28638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28639, 0, 28643, 0, 0, 28652, 0, 0, 0, 28662, 0, 28670, 28671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28672, 28673, 28675, 28676, 0, 0, 0, 0, 0, 0, 0, 28691, 0, 0, 0, 28695, 0, 0, 0, 28696, 0, 28697, 28698, 0, 28705, 0, 28707, 28708, 28710, 0, 0, 0, 0, 0, 0, 0, 28711, 28728, 0, 0, 0, 28736, 0, 0, 0, 28737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28738, 0, 28739, 0, 28741, 0, 0, 28742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28745, 0, 0, 0, 0, 0, 0, 28749, 28750, 28752, 28754, 28756, 0, 28757, 0, 0, 0, 0, 28759, 28760, 0, 0, 0, 0, 0, 0, 28762, 0, 0, 0, 28764, 0, 0, 0, 0, 0, 0, 28766, 0, 28767, 28768, 0, 0, 0, 0, 28769, 28770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28772, 0, 28773, 0, 28782, 0, 0, 0, 0, 0, 0, 28784, 0, 28785, 0, 28786, 0, 0, 0, 28787, 0, 0, 0, 28797, 0, 0, 0, 0, 0, 0, 28799, 0, 0, 28801, 0, 0, 0, 0, 28802, 0, 28805, 0, 0, 28806, 0, 0, 28807, 0, 0, 0, 0, 0, 0, 0, 28808, 0, 0, 0, 0, 0, 28810, 28812, 0, 0, 28816, 28819, 0, 0, 28821, 0, 28826, 0, 0, 0, 28842, 28852, 0, 0, 28853, 0, 28854, 28855, 0, 0, 0, 28857, 0, 0, 0, 28858, 0, 28867, 28868, 28869, 0, 0, 0, 28874, 28880, 28882, 28890, 28892, 0, 0, 0, 0, 0, 0, 0, 28895, 0, 0, 0, 28898, 28899, 0, 0, 0, 28900, 0, 0, 28904, 0, 28906, 0, 0, 0, 0, 28907, 0, 0, 0, 0, 0, 0, 28908, 0, 0, 0, 28910, 0, 28914, 0, 0, 0, 0, 0, 0, 0, 28915, 28916, 28919, 0, 0, 28920, 0, 28921, 0, 0, 0, 0, 0, 0, 0, 0, 28924, 0, 0, 0, 0, 28926, 28929, 0, 0, 0, 28930, 0, 28936, 0, 28939, 0, 0, 0, 0, 28942, 0, 0, 0, 0, 0, 0, 28956, 0, 0, 0, 28966, 0, 0, 0, 0, 28967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28968, 0, 28971, 0, 28975, 28976, 0, 28982, 28983, 0, 0, 28984, 28989, 28996, 28997, 28998, 0, 0, 0, 0, 0, 0, 28999, 0, 0, 0, 0, 0, 29000, 0, 29001, 0, 0, 0, 29009, 0, 0, 29011, 0, 0, 29021, 0, 0, 0, 0, 29024, 0, 29025, 0, 0, 0, 0, 0, 29026, 0, 0, 0, 29036, 0, 0, 0, 29037, 0, 0, 0, 0, 29038, 0, 29045, 0, 29047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29051, 0, 0, 0, 29054, 29056, 29062, 0, 29070, 29082, 0, 0, 0, 29083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29084, 0, 0, 0, 0, 29085, 29088, 0, 0, 0, 0, 0, 0, 0, 29090, 29097, 0, 0, 0, 29103, 0, 0, 0, 0, 0, 0, 0, 0, 29105, 0, 0, 0, 0, 0, 29107, 0, 29109, 0, 0, 0, 29115, 0, 0, 29120, 0, 0, 29138, 29140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29152, 0, 29160, 29174, 0, 29176, 0, 0, 29180, 0, 29181, 0, 0, 0, 0, 0, 0, 0, 0, 29228, 0, 0, 29229, 0, 0, 29230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29234, 0, 0, 0, 29241, 0, 29245, 0, 29248, 0, 29250, 29256, 29280, 0, 29282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29285, 0, 0, 29286, 29291, 29292, 0, 0, 0, 0, 29294, 0, 29295, 0, 0, 0, 0, 0, 29296, 29297, 29298, 29300, 0, 29302, 0, 0, 29304, 29307, 0, 29312, 0, 0, 0, 29322, 0, 0, 29323, 0, 0, 29324, 29326, 29328, 0, 29335, 0, 0, 0, 0, 0, 0, 0, 29338, 29339, 0, 0, 0, 0, 0, 29341, 29343, 0, 0, 0, 0, 29344, 0, 0, 0, 0, 0, 29345, 0, 0, 0, 0, 29346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29347, 29348, 29349, 0, 0, 29354, 0, 0, 29355, 0, 0, 0, 0, 0, 0, 0, 0, 29357, 0, 0, 0, 0, 29364, 0, 29365, 0, 0, 0, 0, 0, 0, 0, 29366, 0, 0, 29368, 0, 0, 0, 0, 0, 0, 0, 0, 29378, 0, 29381, 0, 0, 0, 0, 0, 0, 0, 0, 29386, 0, 0, 0, 0, 0, 0, 29389, 0, 0, 0, 29390, 0, 0, 29391, 29397, 0, 29398, 29412, 29414, 29418, 29419, 0, 0, 0, 0, 0, 0, 0, 29420, 0, 0, 0, 0, 0, 0, 0, 29423, 0, 0, 0, 29435, 0, 0, 0, 29437, 0, 0, 29439, 0, 29441, 0, 0, 0, 0, 29443, 0, 29446, 29450, 29452, 0, 0, 0, 0, 0, 29456, 0, 0, 0, 0, 0, 29461, 0, 0, 0, 29464, 0, 0, 0, 0, 0, 0, 0, 0, 29468, 0, 29473, 0, 0, 0, 29486, 0, 0, 0, 29490, 0, 0, 0, 29491, 29492, 0, 0, 29497, 0, 0, 0, 29498, 0, 29499, 0, 29502, 29505, 0, 29509, 0, 0, 0, 29510, 0, 0, 0, 29512, 0, 0, 0, 29516, 0, 0, 0, 0, 0, 0, 0, 0, 29518, 0, 29519, 0, 0, 0, 0, 0, 29520, 29521, 29529, 0, 0, 0, 0, 0, 0, 0, 0, 29530, 0, 0, 29531, 29538, 0, 29540, 0, 0, 0, 29542, 0, 29543, 29544, 29547, 0, 0, 29548, 0, 0, 0, 29549, 0, 0, 0, 29550, 0, 0, 29552, 0, 0, 0, 0, 29558, 29561, 0, 29562, 29564, 0, 0, 29565, 0, 0, 29566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29578, 29584, 29586, 29591, 0, 0, 0, 0, 29593, 29594, 0, 0, 29597, 0, 0, 29613, 0, 29614, 0, 29615, 0, 0, 0, 0, 29616, 29617, 0, 0, 29625, 0, 0, 0, 29632, 0, 0, 0, 0, 0, 0, 0, 29633, 0, 0, 0, 0, 0, 29634, 29635, 29637, 0, 29638, 0, 29641, 29643, 0, 0, 0, 0, 0, 0, 29644, 0, 29645, 0, 29649, 0, 0, 0, 29650, 0, 29653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29656, 29659, 0, 0, 29660, 0, 0, 0, 29661, 0, 0, 0, 0, 0, 29664, 0, 0, 0, 29671, 29673, 0, 0, 0, 0, 0, 0, 0, 29675, 0, 29677, 29679, 0, 0, 29684, 0, 0, 0, 0, 0, 29685, 0, 0, 0, 29687, 0, 0, 0, 29688, 0, 29689, 29690, 29700, 0, 29701, 0, 0, 0, 29702, 0, 29706, 0, 0, 0, 0, 0, 0, 0, 29720, 0, 29721, 0, 29727, 0, 29733, 29734, 0, 29750, 29761, 0, 29763, 0, 0, 0, 0, 0, 29764, 0, 0, 29765, 0, 0, 0, 29771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29772, 0, 0, 0, 29773, 29774, 29775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29822, 0, 0, 0, 29824, 0, 29825, 0, 0, 0, 0, 0, 29827, 0, 0, 0, 0, 0, 0, 0, 0, 29829, 0, 29832, 29834, 0, 0, 29835, 0, 0, 29837, 29838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29843, 0, 0, 0, 0, 29844, 29845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29849, 0, 0, 29869, 29872, 29890, 29905, 0, 0, 0, 0, 0, 29907, 29921, 0, 29922, 0, 0, 29923, 29926, 29944, 29946, 0, 0, 0, 0, 0, 0, 0, 29947, 29948, 0, 0, 0, 29951, 0, 0, 0, 0, 0, 29953, 0, 0, 29956, 0, 29957, 0, 0, 29962, 0, 0, 0, 0, 29971, 0, 0, 0, 29972, 0, 0, 0, 0, 0, 29978, 0, 29979, 29992, 30007, 30008, 30010, 0, 0, 0, 30013, 0, 0, 0, 0, 30014, 30016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30017, 0, 0, 0, 0, 0, 30023, 30031, 0, 0, 30033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30034, 0, 30038, 0, 30039, 0, 30040, 0, 0, 0, 0, 0, 0, 30067, 30068, 0, 0, 0, 30069, 0, 30072, 0, 0, 0, 30073, 0, 0, 0, 0, 30075, 0, 0, 0, 0, 0, 0, 30079, 0, 0, 30080, 0, 0, 0, 0, 0, 30082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30084, 30090, 0, 0, 30091, 0, 0, 0, 0, 30098, 30118, 0, 30119, 0, 30121, 30130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30131, 30132, 30133, 0, 0, 0, 0, 0, 0, 30135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30136, 0, 0, 30137, 30138, 0, 0, 0, 30139, 30146, 0, 0, 0, 0, 0, 30147, 0, 0, 30148, 30151, 0, 0, 0, 30168, 0, 30172, 30173, 0, 0, 0, 0, 0, 0, 0, 0, 30180, 30181, 0, 30192, 0, 0, 0, 0, 0, 0, 0, 30194, 30196, 0, 0, 30199, 0, 0, 30202, 0, 0, 0, 0, 30203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30213, 0, 0, 0, 30216, 0, 0, 30217, 0, 0, 0, 30218, 0, 0, 0, 0, 30219, 0, 30220, 0, 30222, 30227, 0, 0, 0, 0, 0, 30231, 0, 0, 30233, 30235, 0, 0, 0, 0, 30238, 0, 30240, 30243, 30245, 0, 30250, 30252, 0, 0, 0, 30269, 0, 0, 30271, 30272, 0, 0, 0, 30278, 30280, 0, 0, 30282, 0, 30284, 0, 30294, 0, 0, 0, 0, 30295, 30296, 0, 0, 0, 0, 0, 30298, 30299, 30302, 30304, 30306, 0, 0, 0, 0, 0, 0, 30316, 30317, 0, 0, 0, 30318, 0, 0, 0, 30319, 0, 30320, 30322, 30326, 0, 0, 0, 0, 0, 30327, 0, 30332, 30348, 30349, 0, 0, 30356, 0, 0, 0, 0, 0, 0, 0, 0, 30357, 0, 30358, 0, 30359, 30360, 0, 0, 30365, 30366, 30378, 0, 0, 0, 0, 30379, 0, 0, 30381, 0, 30385, 0, 30388, 30397, 0, 0, 0, 30401, 0, 0, 0, 0, 30403, 0, 0, 0, 0, 0, 30404, 0, 0, 30405, 0, 30406, 30408, 0, 30409, 0, 30410, 0, 0, 0, 30417, 0, 0, 30418, 30419, 0, 30420, 0, 30424, 0, 0, 0, 30427, 30430, 30432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30433, 0, 0, 0, 0, 0, 0, 0, 30436, 0, 30437, 30438, 0, 30441, 30442, 0, 0, 0, 30445, 0, 0, 0, 0, 30452, 30456, 30457, 0, 0, 0, 30458, 0, 30464, 0, 0, 0, 0, 0, 0, 30467, 0, 30469, 0, 0, 0, 0, 0, 30477, 0, 0, 30484, 0, 0, 0, 0, 0, 30485, 0, 0, 0, 0, 0, 30486, 30487, 30497, 30498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30505, 0, 30508, 0, 0, 0, 30509, 30510, 0, 30514, 30516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30523, 0, 30524, 0, 30525, 0, 0, 0, 0, 30537, 0, 0, 30538, 0, 0, 0, 0, 0, 30553, 0, 0, 30555, 30556, 30558, 30559, 30560, 0, 0, 30561, 0, 30562, 0, 0, 0, 0, 0, 0, 0, 0, 30563, 30570, 30571, 0, 30586, 30587, 0, 0, 30590, 0, 0, 30594, 0, 0, 0, 0, 30611, 30612, 30623, 30634, 0, 0, 30636, 30640, 30655, 30656, 0, 30657, 0, 0, 30658, 30669, 0, 30670, 0, 30676, 30678, 0, 0, 0, 0, 0, 0, 0, 30679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30695, 0, 0, 30698, 0, 0, 0, 0, 30700, 0, 0, 0, 0, 30701, 0, 30702, 30703, 0, 0, 0, 0, 30707, 0, 0, 0, 30709, 0, 0, 30710, 30719, 30729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30731, 0, 0, 30733, 0, 0, 0, 30734, 0, 0, 0, 0, 0, 30736, 30737, 0, 0, 0, 30740, 0, 0, 0, 30743, 0, 30746, 0, 30747, 30748, 0, 0, 30751, 30752, 30753, 0, 0, 0, 30754, 0, 0, 30760, 0, 0, 0, 0, 0, 0, 0, 30763, 0, 30764, 0, 0, 30766, 0, 30769, 30770, 30771, 30774, 30777, 0, 0, 30779, 30780, 30781, 0, 0, 0, 0, 30790, 0, 0, 0, 30792, 0, 0, 0, 0, 30810, 0, 0, 0, 0, 0, 0, 0, 30812, 30819, 0, 0, 30823, 30824, 0, 30825, 0, 30827, 0, 0, 0, 0, 0, 0, 30828, 0, 0, 30830, 0, 0, 0, 30834, 0, 30835, 0, 30837, 30838, 0, 30845, 0, 0, 0, 0, 0, 30846, 30847, 0, 0, 30849, 0, 30851, 0, 0, 0, 0, 0, 30852, 30858, 0, 0, 30859, 0, 30865, 0, 0, 30866, 0, 0, 30868, 0, 0, 30869, 0, 0, 0, 30881, 30883, 0, 0, 0, 0, 0, 30889, 0, 30891, 0, 0, 0, 0, 30894, 0, 30895, 0, 30897, 0, 30898, 0, 0, 0, 30904, 30906, 0, 30909, 0, 0, 0, 0, 0, 0, 30910, 0, 0, 0, 30915, 30933, 30942, 0, 0, 0, 0, 30943, 0, 0, 30945, 0, 0, 0, 0, 0, 0, 30946, 0, 0, 30947, 0, 0, 30955, 30956, 0, 0, 30960, 0, 0, 30961, 30962, 30966, 0, 0, 30969, 30974, 0, 0, 0, 30976, 0, 0, 30977, 0, 30978, 30982, 0, 0, 0, 0, 0, 0, 0, 30994, 30995, 30998, 0, 31000, 0, 0, 31001, 0, 0, 31003, 31005, 0, 0, 31006, 31011, 0, 0, 31014, 0, 31016, 0, 0, 0, 0, 31018, 0, 0, 31020, 31023, 31024, 31025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31027, 31028, 31029, 0, 0, 0, 0, 0, 0, 31032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31036, 31037, 31038, 0, 0, 0, 31041, 31043, 31045, 0, 31047, 0, 0, 0, 31048, 0, 31049, 0, 0, 0, 31053, 31054, 31055, 0, 0, 31063, 0, 0, 0, 0, 0, 31066, 0, 31068, 31071, 0, 0, 0, 31072, 31073, 0, 0, 0, 0, 31075, 0, 0, 31076, 0, 0, 0, 31077, 31079, 0, 31080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31087, 0, 31142, 0, 31144, 0, 0, 31145, 31146, 31147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31149, 0, 31151, 31152, 0, 0, 0, 0, 0, 0, 0, 31162, 31171, 31174, 31175, 0, 0, 0, 31176, 0, 0, 0, 0, 0, 0, 0, 31179, 0, 0, 0, 31186, 0, 0, 0, 31192, 31195, 0, 0, 31196, 0, 0, 0, 0, 0, 0, 0, 0, 31198, 0, 0, 0, 0, 0, 31199, 0, 0, 0, 31205, 0, 0, 0, 0, 31211, 31215, 0, 0, 0, 0, 31231, 0, 31232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31233, 31236, 31253, 0, 31254, 0, 0, 0, 0, 0, 0, 31255, 0, 0, 31257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31258, 31259, 0, 0, 31260, 0, 31261, 0, 0, 0, 0, 0, 31262, 31263, 0, 0, 31264, 0, 31266, 0, 31267, 0, 0, 0, 0, 0, 31281, 0, 31282, 0, 31284, 0, 0, 31285, 31287, 31288, 0, 0, 31290, 0, 0, 0, 31292, 31295, 0, 31299, 0, 31300, 0, 0, 0, 0, 0, 31302, 0, 0, 0, 0, 31303, 0, 0, 0, 0, 0, 0, 31304, 0, 0, 0, 0, 0, 31305, 31308, 31309, 31315, 0, 31317, 0, 0, 0, 0, 0, 31323, 0, 31324, 0, 0, 0, 0, 0, 31325, 31327, 0, 0, 31331, 0, 0, 0, 0, 0, 31333, 0, 0, 0, 0, 0, 31336, 0, 0, 31337, 0, 0, 0, 0, 0, 0, 31338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31339, 0, 0, 0, 0, 0, 0, 0, 31342, 0, 0, 0, 0, 31345, 0, 0, 0, 0, 0, 0, 0, 0, 31347, 0, 0, 0, 0, 0, 0, 31348, 0, 0, 31350, 31351, 0, 31352, 0, 0, 31354, 0, 0, 0, 0, 31355, 0, 0, 31356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31363, 0, 31372, 0, 0, 31373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31376, 0, 31388, 0, 31389, 0, 31392, 0, 31401, 0, 31405, 31407, 31408, 0, 31409, 0, 0, 0, 0, 0, 0, 31413, 31415, 0, 0, 0, 31416, 31418, 0, 0, 0, 0, 0, 0, 31422, 31423, 0, 0, 31424, 0, 31425, 31432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31433, 0, 0, 0, 0, 0, 0, 0, 0, 31434, 0, 0, 0, 0, 0, 0, 31435, 0, 0, 0, 0, 31438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31442, 0, 31444, 0, 31448, 0, 0, 31451, 0, 0, 0, 0, 31452, 0, 31461, 31465, 0, 0, 31466, 0, 0, 31467, 0, 0, 31468, 0, 0, 0, 31469, 31473, 0, 31476, 0, 0, 0, 0, 31489, 31490, 0, 0, 0, 0, 0, 0, 0, 31492, 31493, 31494, 0, 0, 0, 0, 31501, 31504, 31505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31509, 0, 0, 0, 0, 31510, 0, 0, 31511, 0, 0, 31513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31514, 0, 31522, 31536, 31539, 31540, 0, 31541, 0, 0, 0, 0, 0, 0, 31546, 31553, 31559, 0, 0, 0, 31560, 31561, 31562, 0, 0, 31564, 31567, 0, 31569, 0, 0, 0, 31570, 0, 0, 0, 0, 31571, 0, 0, 0, 0, 0, 0, 31572, 31574, 31580, 31581, 0, 0, 31582, 31584, 31585, 31586, 31595, 0, 31596, 0, 0, 0, 0, 31597, 0, 31599, 0, 31600, 31601, 0, 0, 31603, 31604, 0, 0, 31608, 31610, 0, 0, 0, 31611, 0, 31615, 0, 0, 0, 0, 31616, 0, 0, 0, 0, 0, 0, 31617, 0, 0, 0, 0, 0, 31618, 0, 0, 0, 0, 0, 0, 31621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31622, 31625, 0, 0, 0, 0, 31627, 0, 31641, 0, 0, 31642, 0, 0, 31643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31644, 0, 31646, 0, 0, 0, 0, 31648, 0, 0, 0, 31652, 0, 0, 0, 31657, 0, 0, 31676, 0, 0, 0, 0, 0, 0, 0, 31689, 31691, 31692, 0, 31694, 0, 0, 0, 31696, 0, 31702, 0, 31703, 0, ]; #[derive(Clone, Copy)] #[repr(C)] pub struct DictWord { pub l: u8, pub t: u8, pub i: u16, } impl DictWord { #[inline(always)] pub fn len(self) -> u8 { self.l } #[inline(always)] pub fn transform(self) -> u8 { self.t } #[inline(always)] pub fn idx(self) -> u16 { self.i } } type D = DictWord; pub static kStaticDictionaryWords: [DictWord; 31705] = [ D { l: 0, t: 0, i: 0 }, D { l: 8, t: 0, i: 1002, }, D { l: 136, t: 0, i: 1015, }, D { l: 4, t: 0, i: 683 }, D { l: 4, t: 10, i: 325, }, D { l: 138, t: 10, i: 125, }, D { l: 7, t: 11, i: 572, }, D { l: 9, t: 11, i: 592, }, D { l: 11, t: 11, i: 680, }, D { l: 11, t: 11, i: 842, }, D { l: 11, t: 11, i: 924, }, D { l: 12, t: 11, i: 356, }, D { l: 12, t: 11, i: 550, }, D { l: 13, t: 11, i: 317, }, D { l: 13, t: 11, i: 370, }, D { l: 13, t: 11, i: 469, }, D { l: 13, t: 11, i: 471, }, D { l: 14, t: 11, i: 397, }, D { l: 18, t: 11, i: 69, }, D { l: 146, t: 11, i: 145, }, D { l: 134, t: 0, i: 1265, }, D { l: 136, t: 11, i: 534, }, D { l: 134, t: 0, i: 1431, }, D { l: 11, t: 0, i: 138, }, D { l: 140, t: 0, i: 40, }, D { l: 4, t: 0, i: 155 }, D { l: 7, t: 0, i: 1689, }, D { l: 4, t: 10, i: 718, }, D { l: 135, t: 10, i: 1216, }, D { l: 4, t: 0, i: 245 }, D { l: 5, t: 0, i: 151 }, D { l: 5, t: 0, i: 741 }, D { l: 6, t: 0, i: 1147, }, D { l: 7, t: 0, i: 498 }, D { l: 7, t: 0, i: 870 }, D { l: 7, t: 0, i: 1542, }, D { l: 12, t: 0, i: 213, }, D { l: 14, t: 0, i: 36 }, D { l: 14, t: 0, i: 391, }, D { l: 17, t: 0, i: 111, }, D { l: 18, t: 0, i: 6 }, D { l: 18, t: 0, i: 46 }, D { l: 18, t: 0, i: 151, }, D { l: 19, t: 0, i: 36 }, D { l: 20, t: 0, i: 32 }, D { l: 20, t: 0, i: 56 }, D { l: 20, t: 0, i: 69 }, D { l: 20, t: 0, i: 102, }, D { l: 21, t: 0, i: 4 }, D { l: 22, t: 0, i: 8 }, D { l: 22, t: 0, i: 10 }, D { l: 22, t: 0, i: 14 }, D { l: 150, t: 0, i: 31, }, D { l: 4, t: 0, i: 624 }, D { l: 135, t: 0, i: 1752, }, D { l: 5, t: 10, i: 124, }, D { l: 5, t: 10, i: 144, }, D { l: 6, t: 10, i: 548, }, D { l: 7, t: 10, i: 15 }, D { l: 7, t: 10, i: 153, }, D { l: 137, t: 10, i: 629, }, D { l: 6, t: 0, i: 503 }, D { l: 9, t: 0, i: 586 }, D { l: 13, t: 0, i: 468, }, D { l: 14, t: 0, i: 66 }, D { l: 16, t: 0, i: 58 }, D { l: 7, t: 10, i: 1531, }, D { l: 8, t: 10, i: 416, }, D { l: 9, t: 10, i: 275, }, D { l: 10, t: 10, i: 100, }, D { l: 11, t: 10, i: 658, }, D { l: 11, t: 10, i: 979, }, D { l: 12, t: 10, i: 86, }, D { l: 14, t: 10, i: 207, }, D { l: 15, t: 10, i: 20, }, D { l: 143, t: 10, i: 25, }, D { l: 5, t: 0, i: 603 }, D { l: 7, t: 0, i: 1212, }, D { l: 9, t: 0, i: 565 }, D { l: 14, t: 0, i: 301, }, D { l: 5, t: 10, i: 915, }, D { l: 6, t: 10, i: 1783, }, D { l: 7, t: 10, i: 211, }, D { l: 7, t: 10, i: 1353, }, D { l: 9, t: 10, i: 83 }, D { l: 10, t: 10, i: 376, }, D { l: 10, t: 10, i: 431, }, D { l: 11, t: 10, i: 543, }, D { l: 12, t: 10, i: 664, }, D { l: 13, t: 10, i: 280, }, D { l: 13, t: 10, i: 428, }, D { l: 14, t: 10, i: 128, }, D { l: 17, t: 10, i: 52, }, D { l: 145, t: 10, i: 81, }, D { l: 4, t: 0, i: 492 }, D { l: 133, t: 0, i: 451, }, D { l: 135, t: 0, i: 835, }, D { l: 141, t: 0, i: 70, }, D { l: 132, t: 0, i: 539, }, D { l: 7, t: 11, i: 748, }, D { l: 139, t: 11, i: 700, }, D { l: 7, t: 11, i: 1517, }, D { l: 11, t: 11, i: 597, }, D { l: 14, t: 11, i: 76, }, D { l: 14, t: 11, i: 335, }, D { l: 148, t: 11, i: 33, }, D { l: 6, t: 0, i: 113 }, D { l: 135, t: 0, i: 436, }, D { l: 4, t: 10, i: 338, }, D { l: 133, t: 10, i: 400, }, D { l: 136, t: 0, i: 718, }, D { l: 133, t: 11, i: 127, }, D { l: 133, t: 11, i: 418, }, D { l: 6, t: 0, i: 1505, }, D { l: 7, t: 0, i: 520 }, D { l: 6, t: 11, i: 198, }, D { l: 11, t: 10, i: 892, }, D { l: 140, t: 11, i: 83, }, D { l: 4, t: 10, i: 221, }, D { l: 5, t: 10, i: 659, }, D { l: 5, t: 10, i: 989, }, D { l: 7, t: 10, i: 697, }, D { l: 7, t: 10, i: 1211, }, D { l: 138, t: 10, i: 284, }, D { l: 135, t: 0, i: 1070, }, D { l: 5, t: 11, i: 276, }, D { l: 6, t: 11, i: 55 }, D { l: 135, t: 11, i: 1369, }, D { l: 134, t: 0, i: 1515, }, D { l: 6, t: 11, i: 1752, }, D { l: 136, t: 11, i: 726, }, D { l: 138, t: 10, i: 507, }, D { l: 15, t: 0, i: 78 }, D { l: 4, t: 10, i: 188, }, D { l: 135, t: 10, i: 805, }, D { l: 5, t: 10, i: 884, }, D { l: 139, t: 10, i: 991, }, D { l: 133, t: 11, i: 764, }, D { l: 134, t: 10, i: 1653, }, D { l: 6, t: 11, i: 309, }, D { l: 7, t: 11, i: 331, }, D { l: 138, t: 11, i: 550, }, D { l: 135, t: 11, i: 1861, }, D { l: 132, t: 11, i: 348, }, D { l: 135, t: 11, i: 986, }, D { l: 135, t: 11, i: 1573, }, D { l: 12, t: 0, i: 610, }, D { l: 13, t: 0, i: 431, }, D { l: 144, t: 0, i: 59, }, D { l: 9, t: 11, i: 799, }, D { l: 140, t: 10, i: 166, }, D { l: 134, t: 0, i: 1530, }, D { l: 132, t: 0, i: 750, }, D { l: 132, t: 0, i: 307, }, D { l: 133, t: 0, i: 964, }, D { l: 6, t: 11, i: 194, }, D { l: 7, t: 11, i: 133, }, D { l: 10, t: 11, i: 493, }, D { l: 10, t: 11, i: 570, }, D { l: 139, t: 11, i: 664, }, D { l: 5, t: 11, i: 24 }, D { l: 5, t: 11, i: 569, }, D { l: 6, t: 11, i: 3 }, D { l: 6, t: 11, i: 119, }, D { l: 6, t: 11, i: 143, }, D { l: 6, t: 11, i: 440, }, D { l: 7, t: 11, i: 295, }, D { l: 7, t: 11, i: 599, }, D { l: 7, t: 11, i: 1686, }, D { l: 7, t: 11, i: 1854, }, D { l: 8, t: 11, i: 424, }, D { l: 9, t: 11, i: 43 }, D { l: 9, t: 11, i: 584, }, D { l: 9, t: 11, i: 760, }, D { l: 10, t: 11, i: 148, }, D { l: 10, t: 11, i: 328, }, D { l: 11, t: 11, i: 159, }, D { l: 11, t: 11, i: 253, }, D { l: 11, t: 11, i: 506, }, D { l: 12, t: 11, i: 487, }, D { l: 12, t: 11, i: 531, }, D { l: 144, t: 11, i: 33, }, D { l: 136, t: 10, i: 760, }, D { l: 5, t: 11, i: 14 }, D { l: 5, t: 11, i: 892, }, D { l: 6, t: 11, i: 283, }, D { l: 7, t: 11, i: 234, }, D { l: 136, t: 11, i: 537, }, D { l: 135, t: 11, i: 1251, }, D { l: 4, t: 11, i: 126, }, D { l: 8, t: 11, i: 635, }, D { l: 147, t: 11, i: 34, }, D { l: 4, t: 11, i: 316, }, D { l: 135, t: 11, i: 1561, }, D { l: 6, t: 0, i: 999 }, D { l: 6, t: 0, i: 1310, }, D { l: 137, t: 11, i: 861, }, D { l: 4, t: 11, i: 64 }, D { l: 5, t: 11, i: 352, }, D { l: 5, t: 11, i: 720, }, D { l: 6, t: 11, i: 368, }, D { l: 139, t: 11, i: 359, }, D { l: 4, t: 0, i: 75 }, D { l: 5, t: 0, i: 180 }, D { l: 6, t: 0, i: 500 }, D { l: 7, t: 0, i: 58 }, D { l: 7, t: 0, i: 710 }, D { l: 10, t: 0, i: 645, }, D { l: 136, t: 10, i: 770, }, D { l: 133, t: 0, i: 649, }, D { l: 6, t: 0, i: 276 }, D { l: 7, t: 0, i: 282 }, D { l: 7, t: 0, i: 879 }, D { l: 7, t: 0, i: 924 }, D { l: 8, t: 0, i: 459 }, D { l: 9, t: 0, i: 599 }, D { l: 9, t: 0, i: 754 }, D { l: 11, t: 0, i: 574, }, D { l: 12, t: 0, i: 128, }, D { l: 12, t: 0, i: 494, }, D { l: 13, t: 0, i: 52 }, D { l: 13, t: 0, i: 301, }, D { l: 15, t: 0, i: 30 }, D { l: 143, t: 0, i: 132, }, D { l: 132, t: 0, i: 200, }, D { l: 4, t: 10, i: 89 }, D { l: 5, t: 10, i: 489, }, D { l: 6, t: 10, i: 315, }, D { l: 7, t: 10, i: 553, }, D { l: 7, t: 10, i: 1745, }, D { l: 138, t: 10, i: 243, }, D { l: 135, t: 11, i: 1050, }, D { l: 7, t: 0, i: 1621, }, D { l: 6, t: 10, i: 1658, }, D { l: 9, t: 10, i: 3 }, D { l: 10, t: 10, i: 154, }, D { l: 11, t: 10, i: 641, }, D { l: 13, t: 10, i: 85, }, D { l: 13, t: 10, i: 201, }, D { l: 141, t: 10, i: 346, }, D { l: 6, t: 11, i: 175, }, D { l: 137, t: 11, i: 289, }, D { l: 5, t: 11, i: 432, }, D { l: 133, t: 11, i: 913, }, D { l: 6, t: 0, i: 225 }, D { l: 137, t: 0, i: 211, }, D { l: 7, t: 0, i: 718 }, D { l: 8, t: 0, i: 687 }, D { l: 139, t: 0, i: 374, }, D { l: 4, t: 10, i: 166, }, D { l: 133, t: 10, i: 505, }, D { l: 9, t: 0, i: 110 }, D { l: 134, t: 10, i: 1670, }, D { l: 8, t: 0, i: 58 }, D { l: 9, t: 0, i: 724 }, D { l: 11, t: 0, i: 809, }, D { l: 13, t: 0, i: 113, }, D { l: 145, t: 0, i: 72, }, D { l: 6, t: 0, i: 345 }, D { l: 7, t: 0, i: 1247, }, D { l: 144, t: 11, i: 82, }, D { l: 5, t: 11, i: 931, }, D { l: 134, t: 11, i: 1698, }, D { l: 8, t: 0, i: 767 }, D { l: 8, t: 0, i: 803 }, D { l: 9, t: 0, i: 301 }, D { l: 137, t: 0, i: 903, }, D { l: 139, t: 0, i: 203, }, D { l: 134, t: 0, i: 1154, }, D { l: 7, t: 0, i: 1949, }, D { l: 136, t: 0, i: 674, }, D { l: 134, t: 0, i: 259, }, D { l: 135, t: 0, i: 1275, }, D { l: 5, t: 11, i: 774, }, D { l: 6, t: 11, i: 1637, }, D { l: 6, t: 11, i: 1686, }, D { l: 134, t: 11, i: 1751, }, D { l: 134, t: 0, i: 1231, }, D { l: 7, t: 10, i: 445, }, D { l: 8, t: 10, i: 307, }, D { l: 8, t: 10, i: 704, }, D { l: 10, t: 10, i: 41, }, D { l: 10, t: 10, i: 439, }, D { l: 11, t: 10, i: 237, }, D { l: 11, t: 10, i: 622, }, D { l: 140, t: 10, i: 201, }, D { l: 136, t: 0, i: 254, }, D { l: 6, t: 11, i: 260, }, D { l: 135, t: 11, i: 1484, }, D { l: 139, t: 0, i: 277, }, D { l: 135, t: 10, i: 1977, }, D { l: 4, t: 10, i: 189, }, D { l: 5, t: 10, i: 713, }, D { l: 6, t: 11, i: 573, }, D { l: 136, t: 10, i: 57, }, D { l: 138, t: 10, i: 371, }, D { l: 132, t: 10, i: 552, }, D { l: 134, t: 11, i: 344, }, D { l: 133, t: 0, i: 248, }, D { l: 9, t: 0, i: 800 }, D { l: 10, t: 0, i: 693, }, D { l: 11, t: 0, i: 482, }, D { l: 11, t: 0, i: 734, }, D { l: 11, t: 0, i: 789, }, D { l: 134, t: 11, i: 240, }, D { l: 4, t: 0, i: 116 }, D { l: 5, t: 0, i: 95 }, D { l: 5, t: 0, i: 445 }, D { l: 7, t: 0, i: 1688, }, D { l: 8, t: 0, i: 29 }, D { l: 9, t: 0, i: 272 }, D { l: 11, t: 0, i: 509, }, D { l: 11, t: 0, i: 915, }, D { l: 4, t: 11, i: 292, }, D { l: 4, t: 11, i: 736, }, D { l: 5, t: 11, i: 871, }, D { l: 6, t: 11, i: 171, }, D { l: 6, t: 11, i: 1689, }, D { l: 7, t: 11, i: 1324, }, D { l: 7, t: 11, i: 1944, }, D { l: 9, t: 11, i: 415, }, D { l: 9, t: 11, i: 580, }, D { l: 14, t: 11, i: 230, }, D { l: 146, t: 11, i: 68, }, D { l: 7, t: 0, i: 490 }, D { l: 13, t: 0, i: 100, }, D { l: 143, t: 0, i: 75, }, D { l: 135, t: 0, i: 1641, }, D { l: 133, t: 0, i: 543, }, D { l: 7, t: 11, i: 209, }, D { l: 8, t: 11, i: 661, }, D { l: 10, t: 11, i: 42, }, D { l: 11, t: 11, i: 58, }, D { l: 12, t: 11, i: 58, }, D { l: 12, t: 11, i: 118, }, D { l: 141, t: 11, i: 32, }, D { l: 5, t: 0, i: 181 }, D { l: 8, t: 0, i: 41 }, D { l: 6, t: 11, i: 63 }, D { l: 135, t: 11, i: 920, }, D { l: 133, t: 0, i: 657, }, D { l: 133, t: 11, i: 793, }, D { l: 138, t: 0, i: 709, }, D { l: 7, t: 0, i: 25 }, D { l: 8, t: 0, i: 202 }, D { l: 138, t: 0, i: 536, }, D { l: 5, t: 11, i: 665, }, D { l: 135, t: 10, i: 1788, }, D { l: 145, t: 10, i: 49, }, D { l: 9, t: 0, i: 423 }, D { l: 140, t: 0, i: 89, }, D { l: 5, t: 11, i: 67 }, D { l: 6, t: 11, i: 62 }, D { l: 6, t: 11, i: 374, }, D { l: 135, t: 11, i: 1391, }, D { l: 8, t: 0, i: 113 }, D { l: 9, t: 0, i: 877 }, D { l: 10, t: 0, i: 554, }, D { l: 11, t: 0, i: 83 }, D { l: 12, t: 0, i: 136, }, D { l: 19, t: 0, i: 109, }, D { l: 9, t: 11, i: 790, }, D { l: 140, t: 11, i: 47, }, D { l: 138, t: 10, i: 661, }, D { l: 4, t: 0, i: 963 }, D { l: 10, t: 0, i: 927, }, D { l: 14, t: 0, i: 442, }, D { l: 135, t: 10, i: 1945, }, D { l: 133, t: 0, i: 976, }, D { l: 132, t: 0, i: 206, }, D { l: 4, t: 11, i: 391, }, D { l: 135, t: 11, i: 1169, }, D { l: 134, t: 0, i: 2002, }, D { l: 6, t: 0, i: 696 }, D { l: 134, t: 0, i: 1008, }, D { l: 134, t: 0, i: 1170, }, D { l: 132, t: 11, i: 271, }, D { l: 7, t: 0, i: 13 }, D { l: 8, t: 0, i: 226 }, D { l: 10, t: 0, i: 537, }, D { l: 11, t: 0, i: 570, }, D { l: 11, t: 0, i: 605, }, D { l: 11, t: 0, i: 799, }, D { l: 11, t: 0, i: 804, }, D { l: 12, t: 0, i: 85 }, D { l: 12, t: 0, i: 516, }, D { l: 12, t: 0, i: 623, }, D { l: 13, t: 0, i: 112, }, D { l: 13, t: 0, i: 361, }, D { l: 14, t: 0, i: 77 }, D { l: 14, t: 0, i: 78 }, D { l: 17, t: 0, i: 28 }, D { l: 19, t: 0, i: 110, }, D { l: 140, t: 11, i: 314, }, D { l: 132, t: 0, i: 769, }, D { l: 134, t: 0, i: 1544, }, D { l: 4, t: 0, i: 551 }, D { l: 137, t: 0, i: 678, }, D { l: 5, t: 10, i: 84 }, D { l: 134, t: 10, i: 163, }, D { l: 9, t: 0, i: 57 }, D { l: 9, t: 0, i: 459 }, D { l: 10, t: 0, i: 425, }, D { l: 11, t: 0, i: 119, }, D { l: 12, t: 0, i: 184, }, D { l: 12, t: 0, i: 371, }, D { l: 13, t: 0, i: 358, }, D { l: 145, t: 0, i: 51, }, D { l: 5, t: 0, i: 188 }, D { l: 5, t: 0, i: 814 }, D { l: 8, t: 0, i: 10 }, D { l: 9, t: 0, i: 421 }, D { l: 9, t: 0, i: 729 }, D { l: 10, t: 0, i: 609, }, D { l: 11, t: 0, i: 689, }, D { l: 4, t: 11, i: 253, }, D { l: 5, t: 10, i: 410, }, D { l: 5, t: 11, i: 544, }, D { l: 7, t: 11, i: 300, }, D { l: 137, t: 11, i: 340, }, D { l: 134, t: 0, i: 624, }, D { l: 138, t: 11, i: 321, }, D { l: 135, t: 0, i: 1941, }, D { l: 18, t: 0, i: 130, }, D { l: 5, t: 10, i: 322, }, D { l: 8, t: 10, i: 186, }, D { l: 9, t: 10, i: 262, }, D { l: 10, t: 10, i: 187, }, D { l: 142, t: 10, i: 208, }, D { l: 5, t: 11, i: 53 }, D { l: 5, t: 11, i: 541, }, D { l: 6, t: 11, i: 94 }, D { l: 6, t: 11, i: 499, }, D { l: 7, t: 11, i: 230, }, D { l: 139, t: 11, i: 321, }, D { l: 133, t: 10, i: 227, }, D { l: 4, t: 0, i: 378 }, D { l: 4, t: 11, i: 920, }, D { l: 5, t: 11, i: 25 }, D { l: 5, t: 11, i: 790, }, D { l: 6, t: 11, i: 457, }, D { l: 135, t: 11, i: 853, }, D { l: 137, t: 0, i: 269, }, D { l: 132, t: 0, i: 528, }, D { l: 134, t: 0, i: 1146, }, D { l: 7, t: 10, i: 1395, }, D { l: 8, t: 10, i: 486, }, D { l: 9, t: 10, i: 236, }, D { l: 9, t: 10, i: 878, }, D { l: 10, t: 10, i: 218, }, D { l: 11, t: 10, i: 95, }, D { l: 19, t: 10, i: 17, }, D { l: 147, t: 10, i: 31, }, D { l: 7, t: 10, i: 2043, }, D { l: 8, t: 10, i: 672, }, D { l: 141, t: 10, i: 448, }, D { l: 134, t: 0, i: 1105, }, D { l: 134, t: 0, i: 1616, }, D { l: 134, t: 11, i: 1765, }, D { l: 140, t: 11, i: 163, }, D { l: 5, t: 10, i: 412, }, D { l: 133, t: 11, i: 822, }, D { l: 132, t: 11, i: 634, }, D { l: 6, t: 0, i: 656 }, D { l: 134, t: 11, i: 1730, }, D { l: 134, t: 0, i: 1940, }, D { l: 5, t: 0, i: 104 }, D { l: 6, t: 0, i: 173 }, D { l: 135, t: 0, i: 1631, }, D { l: 136, t: 10, i: 562, }, D { l: 6, t: 11, i: 36 }, D { l: 7, t: 11, i: 658, }, D { l: 8, t: 11, i: 454, }, D { l: 147, t: 11, i: 86, }, D { l: 5, t: 0, i: 457 }, D { l: 134, t: 10, i: 1771, }, D { l: 7, t: 0, i: 810 }, D { l: 8, t: 0, i: 138 }, D { l: 8, t: 0, i: 342 }, D { l: 9, t: 0, i: 84 }, D { l: 10, t: 0, i: 193, }, D { l: 11, t: 0, i: 883, }, D { l: 140, t: 0, i: 359, }, D { l: 9, t: 0, i: 620 }, D { l: 135, t: 10, i: 1190, }, D { l: 137, t: 10, i: 132, }, D { l: 7, t: 11, i: 975, }, D { l: 137, t: 11, i: 789, }, D { l: 6, t: 0, i: 95 }, D { l: 6, t: 0, i: 1934, }, D { l: 136, t: 0, i: 967, }, D { l: 141, t: 11, i: 335, }, D { l: 6, t: 0, i: 406 }, D { l: 10, t: 0, i: 409, }, D { l: 10, t: 0, i: 447, }, D { l: 11, t: 0, i: 44 }, D { l: 140, t: 0, i: 100, }, D { l: 4, t: 10, i: 317, }, D { l: 135, t: 10, i: 1279, }, D { l: 132, t: 0, i: 477, }, D { l: 134, t: 0, i: 1268, }, D { l: 6, t: 0, i: 1941, }, D { l: 8, t: 0, i: 944 }, D { l: 5, t: 10, i: 63 }, D { l: 133, t: 10, i: 509, }, D { l: 132, t: 0, i: 629, }, D { l: 132, t: 11, i: 104, }, D { l: 4, t: 0, i: 246 }, D { l: 133, t: 0, i: 375, }, D { l: 6, t: 0, i: 1636, }, D { l: 132, t: 10, i: 288, }, D { l: 135, t: 11, i: 1614, }, D { l: 9, t: 0, i: 49 }, D { l: 10, t: 0, i: 774, }, D { l: 8, t: 10, i: 89 }, D { l: 8, t: 10, i: 620, }, D { l: 11, t: 10, i: 628, }, D { l: 12, t: 10, i: 322, }, D { l: 143, t: 10, i: 124, }, D { l: 4, t: 0, i: 282 }, D { l: 7, t: 0, i: 1034, }, D { l: 11, t: 0, i: 398, }, D { l: 11, t: 0, i: 634, }, D { l: 12, t: 0, i: 1 }, D { l: 12, t: 0, i: 79 }, D { l: 12, t: 0, i: 544, }, D { l: 14, t: 0, i: 237, }, D { l: 17, t: 0, i: 10 }, D { l: 146, t: 0, i: 20, }, D { l: 132, t: 0, i: 824, }, D { l: 7, t: 11, i: 45 }, D { l: 9, t: 11, i: 542, }, D { l: 9, t: 11, i: 566, }, D { l: 138, t: 11, i: 728, }, D { l: 5, t: 0, i: 118 }, D { l: 5, t: 0, i: 499 }, D { l: 6, t: 0, i: 476 }, D { l: 6, t: 0, i: 665 }, D { l: 6, t: 0, i: 1176, }, D { l: 6, t: 0, i: 1196, }, D { l: 7, t: 0, i: 600 }, D { l: 7, t: 0, i: 888 }, D { l: 135, t: 0, i: 1096, }, D { l: 7, t: 0, i: 296 }, D { l: 7, t: 0, i: 596 }, D { l: 8, t: 0, i: 560 }, D { l: 8, t: 0, i: 586 }, D { l: 9, t: 0, i: 612 }, D { l: 11, t: 0, i: 304, }, D { l: 12, t: 0, i: 46 }, D { l: 13, t: 0, i: 89 }, D { l: 14, t: 0, i: 112, }, D { l: 145, t: 0, i: 122, }, D { l: 5, t: 0, i: 894 }, D { l: 6, t: 0, i: 1772, }, D { l: 9, t: 0, i: 1009, }, D { l: 138, t: 10, i: 120, }, D { l: 5, t: 11, i: 533, }, D { l: 7, t: 11, i: 755, }, D { l: 138, t: 11, i: 780, }, D { l: 151, t: 10, i: 1, }, D { l: 6, t: 0, i: 1474, }, D { l: 7, t: 11, i: 87 }, D { l: 142, t: 11, i: 288, }, D { l: 139, t: 0, i: 366, }, D { l: 137, t: 10, i: 461, }, D { l: 7, t: 11, i: 988, }, D { l: 7, t: 11, i: 1939, }, D { l: 9, t: 11, i: 64 }, D { l: 9, t: 11, i: 502, }, D { l: 12, t: 11, i: 7 }, D { l: 12, t: 11, i: 34, }, D { l: 13, t: 11, i: 12, }, D { l: 13, t: 11, i: 234, }, D { l: 147, t: 11, i: 77, }, D { l: 7, t: 0, i: 1599, }, D { l: 7, t: 0, i: 1723, }, D { l: 8, t: 0, i: 79 }, D { l: 8, t: 0, i: 106 }, D { l: 8, t: 0, i: 190 }, D { l: 8, t: 0, i: 302 }, D { l: 8, t: 0, i: 383 }, D { l: 8, t: 0, i: 713 }, D { l: 9, t: 0, i: 119 }, D { l: 9, t: 0, i: 233 }, D { l: 9, t: 0, i: 419 }, D { l: 9, t: 0, i: 471 }, D { l: 10, t: 0, i: 181, }, D { l: 10, t: 0, i: 406, }, D { l: 11, t: 0, i: 57 }, D { l: 11, t: 0, i: 85 }, D { l: 11, t: 0, i: 120, }, D { l: 11, t: 0, i: 177, }, D { l: 11, t: 0, i: 296, }, D { l: 11, t: 0, i: 382, }, D { l: 11, t: 0, i: 454, }, D { l: 11, t: 0, i: 758, }, D { l: 11, t: 0, i: 999, }, D { l: 12, t: 0, i: 27 }, D { l: 12, t: 0, i: 98 }, D { l: 12, t: 0, i: 131, }, D { l: 12, t: 0, i: 245, }, D { l: 12, t: 0, i: 312, }, D { l: 12, t: 0, i: 446, }, D { l: 12, t: 0, i: 454, }, D { l: 13, t: 0, i: 25 }, D { l: 13, t: 0, i: 98 }, D { l: 13, t: 0, i: 426, }, D { l: 13, t: 0, i: 508, }, D { l: 14, t: 0, i: 70 }, D { l: 14, t: 0, i: 163, }, D { l: 14, t: 0, i: 272, }, D { l: 14, t: 0, i: 277, }, D { l: 14, t: 0, i: 370, }, D { l: 15, t: 0, i: 95 }, D { l: 15, t: 0, i: 138, }, D { l: 15, t: 0, i: 167, }, D { l: 17, t: 0, i: 38 }, D { l: 148, t: 0, i: 96, }, D { l: 135, t: 10, i: 1346, }, D { l: 10, t: 0, i: 200, }, D { l: 19, t: 0, i: 2 }, D { l: 151, t: 0, i: 22, }, D { l: 135, t: 11, i: 141, }, D { l: 134, t: 10, i: 85, }, D { l: 134, t: 0, i: 1759, }, D { l: 138, t: 0, i: 372, }, D { l: 145, t: 0, i: 16, }, D { l: 8, t: 0, i: 943 }, D { l: 132, t: 11, i: 619, }, D { l: 139, t: 11, i: 88, }, D { l: 5, t: 11, i: 246, }, D { l: 8, t: 11, i: 189, }, D { l: 9, t: 11, i: 355, }, D { l: 9, t: 11, i: 512, }, D { l: 10, t: 11, i: 124, }, D { l: 10, t: 11, i: 453, }, D { l: 11, t: 11, i: 143, }, D { l: 11, t: 11, i: 416, }, D { l: 11, t: 11, i: 859, }, D { l: 141, t: 11, i: 341, }, D { l: 5, t: 0, i: 258 }, D { l: 134, t: 0, i: 719, }, D { l: 6, t: 0, i: 1798, }, D { l: 6, t: 0, i: 1839, }, D { l: 8, t: 0, i: 900 }, D { l: 10, t: 0, i: 874, }, D { l: 10, t: 0, i: 886, }, D { l: 12, t: 0, i: 698, }, D { l: 12, t: 0, i: 732, }, D { l: 12, t: 0, i: 770, }, D { l: 16, t: 0, i: 106, }, D { l: 18, t: 0, i: 163, }, D { l: 18, t: 0, i: 170, }, D { l: 18, t: 0, i: 171, }, D { l: 152, t: 0, i: 20, }, D { l: 9, t: 0, i: 707 }, D { l: 11, t: 0, i: 326, }, D { l: 11, t: 0, i: 339, }, D { l: 12, t: 0, i: 423, }, D { l: 12, t: 0, i: 502, }, D { l: 20, t: 0, i: 62 }, D { l: 9, t: 11, i: 707, }, D { l: 11, t: 11, i: 326, }, D { l: 11, t: 11, i: 339, }, D { l: 12, t: 11, i: 423, }, D { l: 12, t: 11, i: 502, }, D { l: 148, t: 11, i: 62, }, D { l: 5, t: 0, i: 30 }, D { l: 7, t: 0, i: 495 }, D { l: 8, t: 0, i: 134 }, D { l: 9, t: 0, i: 788 }, D { l: 140, t: 0, i: 438, }, D { l: 133, t: 11, i: 678, }, D { l: 5, t: 10, i: 279, }, D { l: 6, t: 10, i: 235, }, D { l: 7, t: 10, i: 468, }, D { l: 8, t: 10, i: 446, }, D { l: 9, t: 10, i: 637, }, D { l: 10, t: 10, i: 717, }, D { l: 11, t: 10, i: 738, }, D { l: 140, t: 10, i: 514, }, D { l: 5, t: 11, i: 35 }, D { l: 6, t: 11, i: 287, }, D { l: 7, t: 11, i: 862, }, D { l: 7, t: 11, i: 1886, }, D { l: 138, t: 11, i: 179, }, D { l: 7, t: 0, i: 1948, }, D { l: 7, t: 0, i: 2004, }, D { l: 132, t: 11, i: 517, }, D { l: 5, t: 10, i: 17 }, D { l: 6, t: 10, i: 371, }, D { l: 137, t: 10, i: 528, }, D { l: 4, t: 0, i: 115 }, D { l: 5, t: 0, i: 669 }, D { l: 6, t: 0, i: 407 }, D { l: 8, t: 0, i: 311 }, D { l: 11, t: 0, i: 10 }, D { l: 141, t: 0, i: 5 }, D { l: 137, t: 0, i: 381, }, D { l: 5, t: 0, i: 50 }, D { l: 6, t: 0, i: 439 }, D { l: 7, t: 0, i: 780 }, D { l: 135, t: 0, i: 1040, }, D { l: 136, t: 11, i: 667, }, D { l: 11, t: 11, i: 403, }, D { l: 146, t: 11, i: 83, }, D { l: 5, t: 0, i: 1 }, D { l: 6, t: 0, i: 81 }, D { l: 138, t: 0, i: 520, }, D { l: 134, t: 0, i: 738, }, D { l: 5, t: 0, i: 482 }, D { l: 8, t: 0, i: 98 }, D { l: 9, t: 0, i: 172 }, D { l: 10, t: 0, i: 360, }, D { l: 10, t: 0, i: 700, }, D { l: 10, t: 0, i: 822, }, D { l: 11, t: 0, i: 302, }, D { l: 11, t: 0, i: 778, }, D { l: 12, t: 0, i: 50 }, D { l: 12, t: 0, i: 127, }, D { l: 12, t: 0, i: 396, }, D { l: 13, t: 0, i: 62 }, D { l: 13, t: 0, i: 328, }, D { l: 14, t: 0, i: 122, }, D { l: 147, t: 0, i: 72, }, D { l: 9, t: 11, i: 157, }, D { l: 10, t: 11, i: 131, }, D { l: 140, t: 11, i: 72, }, D { l: 135, t: 11, i: 714, }, D { l: 135, t: 11, i: 539, }, D { l: 5, t: 0, i: 2 }, D { l: 6, t: 0, i: 512 }, D { l: 7, t: 0, i: 797 }, D { l: 7, t: 0, i: 1494, }, D { l: 8, t: 0, i: 253 }, D { l: 8, t: 0, i: 589 }, D { l: 9, t: 0, i: 77 }, D { l: 10, t: 0, i: 1 }, D { l: 10, t: 0, i: 129, }, D { l: 10, t: 0, i: 225, }, D { l: 11, t: 0, i: 118, }, D { l: 11, t: 0, i: 226, }, D { l: 11, t: 0, i: 251, }, D { l: 11, t: 0, i: 430, }, D { l: 11, t: 0, i: 701, }, D { l: 11, t: 0, i: 974, }, D { l: 11, t: 0, i: 982, }, D { l: 12, t: 0, i: 64 }, D { l: 12, t: 0, i: 260, }, D { l: 12, t: 0, i: 488, }, D { l: 140, t: 0, i: 690, }, D { l: 5, t: 11, i: 394, }, D { l: 7, t: 11, i: 367, }, D { l: 7, t: 11, i: 487, }, D { l: 7, t: 11, i: 857, }, D { l: 7, t: 11, i: 1713, }, D { l: 8, t: 11, i: 246, }, D { l: 9, t: 11, i: 537, }, D { l: 10, t: 11, i: 165, }, D { l: 12, t: 11, i: 219, }, D { l: 140, t: 11, i: 561, }, D { l: 136, t: 0, i: 557, }, D { l: 5, t: 10, i: 779, }, D { l: 5, t: 10, i: 807, }, D { l: 6, t: 10, i: 1655, }, D { l: 134, t: 10, i: 1676, }, D { l: 4, t: 10, i: 196, }, D { l: 5, t: 10, i: 558, }, D { l: 133, t: 10, i: 949, }, D { l: 11, t: 11, i: 827, }, D { l: 12, t: 11, i: 56, }, D { l: 14, t: 11, i: 34, }, D { l: 143, t: 11, i: 148, }, D { l: 137, t: 0, i: 347, }, D { l: 133, t: 0, i: 572, }, D { l: 134, t: 0, i: 832, }, D { l: 4, t: 0, i: 12 }, D { l: 7, t: 0, i: 504 }, D { l: 7, t: 0, i: 522 }, D { l: 7, t: 0, i: 809 }, D { l: 8, t: 0, i: 797 }, D { l: 141, t: 0, i: 88, }, D { l: 4, t: 10, i: 752, }, D { l: 133, t: 11, i: 449, }, D { l: 7, t: 11, i: 86 }, D { l: 8, t: 11, i: 103, }, D { l: 145, t: 11, i: 69, }, D { l: 7, t: 11, i: 2028, }, D { l: 138, t: 11, i: 641, }, D { l: 5, t: 0, i: 528 }, D { l: 6, t: 11, i: 1 }, D { l: 142, t: 11, i: 2, }, D { l: 134, t: 0, i: 861, }, D { l: 10, t: 0, i: 294, }, D { l: 4, t: 10, i: 227, }, D { l: 5, t: 10, i: 159, }, D { l: 5, t: 10, i: 409, }, D { l: 7, t: 10, i: 80 }, D { l: 10, t: 10, i: 479, }, D { l: 12, t: 10, i: 418, }, D { l: 14, t: 10, i: 50, }, D { l: 14, t: 10, i: 249, }, D { l: 142, t: 10, i: 295, }, D { l: 7, t: 10, i: 1470, }, D { l: 8, t: 10, i: 66 }, D { l: 8, t: 10, i: 137, }, D { l: 8, t: 10, i: 761, }, D { l: 9, t: 10, i: 638, }, D { l: 11, t: 10, i: 80, }, D { l: 11, t: 10, i: 212, }, D { l: 11, t: 10, i: 368, }, D { l: 11, t: 10, i: 418, }, D { l: 12, t: 10, i: 8 }, D { l: 13, t: 10, i: 15, }, D { l: 16, t: 10, i: 61, }, D { l: 17, t: 10, i: 59, }, D { l: 19, t: 10, i: 28, }, D { l: 148, t: 10, i: 84, }, D { l: 20, t: 0, i: 109, }, D { l: 135, t: 11, i: 1148, }, D { l: 6, t: 11, i: 277, }, D { l: 7, t: 11, i: 1274, }, D { l: 7, t: 11, i: 1386, }, D { l: 7, t: 11, i: 1392, }, D { l: 12, t: 11, i: 129, }, D { l: 146, t: 11, i: 87, }, D { l: 6, t: 11, i: 187, }, D { l: 7, t: 11, i: 39 }, D { l: 7, t: 11, i: 1203, }, D { l: 8, t: 11, i: 380, }, D { l: 8, t: 11, i: 542, }, D { l: 14, t: 11, i: 117, }, D { l: 149, t: 11, i: 28, }, D { l: 134, t: 0, i: 1187, }, D { l: 5, t: 0, i: 266 }, D { l: 9, t: 0, i: 290 }, D { l: 9, t: 0, i: 364 }, D { l: 10, t: 0, i: 293, }, D { l: 11, t: 0, i: 606, }, D { l: 142, t: 0, i: 45, }, D { l: 6, t: 11, i: 297, }, D { l: 7, t: 11, i: 793, }, D { l: 139, t: 11, i: 938, }, D { l: 4, t: 0, i: 50 }, D { l: 6, t: 0, i: 594 }, D { l: 9, t: 0, i: 121 }, D { l: 10, t: 0, i: 49 }, D { l: 10, t: 0, i: 412, }, D { l: 139, t: 0, i: 834, }, D { l: 136, t: 0, i: 748, }, D { l: 7, t: 11, i: 464, }, D { l: 8, t: 11, i: 438, }, D { l: 11, t: 11, i: 105, }, D { l: 11, t: 11, i: 363, }, D { l: 12, t: 11, i: 231, }, D { l: 14, t: 11, i: 386, }, D { l: 15, t: 11, i: 102, }, D { l: 148, t: 11, i: 75, }, D { l: 132, t: 0, i: 466, }, D { l: 13, t: 0, i: 399, }, D { l: 14, t: 0, i: 337, }, D { l: 6, t: 10, i: 38 }, D { l: 7, t: 10, i: 1220, }, D { l: 8, t: 10, i: 185, }, D { l: 8, t: 10, i: 256, }, D { l: 9, t: 10, i: 22 }, D { l: 9, t: 10, i: 331, }, D { l: 10, t: 10, i: 738, }, D { l: 11, t: 10, i: 205, }, D { l: 11, t: 10, i: 540, }, D { l: 11, t: 10, i: 746, }, D { l: 13, t: 10, i: 465, }, D { l: 142, t: 10, i: 194, }, D { l: 9, t: 0, i: 378 }, D { l: 141, t: 0, i: 162, }, D { l: 137, t: 0, i: 519, }, D { l: 4, t: 10, i: 159, }, D { l: 6, t: 10, i: 115, }, D { l: 7, t: 10, i: 252, }, D { l: 7, t: 10, i: 257, }, D { l: 7, t: 10, i: 1928, }, D { l: 8, t: 10, i: 69 }, D { l: 9, t: 10, i: 384, }, D { l: 10, t: 10, i: 91, }, D { l: 10, t: 10, i: 615, }, D { l: 12, t: 10, i: 375, }, D { l: 14, t: 10, i: 235, }, D { l: 18, t: 10, i: 117, }, D { l: 147, t: 10, i: 123, }, D { l: 5, t: 11, i: 604, }, D { l: 5, t: 10, i: 911, }, D { l: 136, t: 10, i: 278, }, D { l: 132, t: 0, i: 667, }, D { l: 8, t: 0, i: 351 }, D { l: 9, t: 0, i: 322 }, D { l: 4, t: 10, i: 151, }, D { l: 135, t: 10, i: 1567, }, D { l: 134, t: 0, i: 902, }, D { l: 133, t: 10, i: 990, }, D { l: 12, t: 0, i: 180, }, D { l: 5, t: 10, i: 194, }, D { l: 7, t: 10, i: 1662, }, D { l: 137, t: 10, i: 90, }, D { l: 4, t: 0, i: 869 }, D { l: 134, t: 0, i: 1996, }, D { l: 134, t: 0, i: 813, }, D { l: 133, t: 10, i: 425, }, D { l: 137, t: 11, i: 761, }, D { l: 132, t: 0, i: 260, }, D { l: 133, t: 10, i: 971, }, D { l: 5, t: 11, i: 20 }, D { l: 6, t: 11, i: 298, }, D { l: 7, t: 11, i: 659, }, D { l: 7, t: 11, i: 1366, }, D { l: 137, t: 11, i: 219, }, D { l: 4, t: 0, i: 39 }, D { l: 5, t: 0, i: 36 }, D { l: 7, t: 0, i: 1843, }, D { l: 8, t: 0, i: 407 }, D { l: 11, t: 0, i: 144, }, D { l: 140, t: 0, i: 523, }, D { l: 4, t: 0, i: 510 }, D { l: 10, t: 0, i: 587, }, D { l: 139, t: 10, i: 752, }, D { l: 7, t: 0, i: 29 }, D { l: 7, t: 0, i: 66 }, D { l: 7, t: 0, i: 1980, }, D { l: 10, t: 0, i: 487, }, D { l: 138, t: 0, i: 809, }, D { l: 13, t: 0, i: 260, }, D { l: 14, t: 0, i: 82 }, D { l: 18, t: 0, i: 63 }, D { l: 137, t: 10, i: 662, }, D { l: 5, t: 10, i: 72 }, D { l: 6, t: 10, i: 264, }, D { l: 7, t: 10, i: 21 }, D { l: 7, t: 10, i: 46 }, D { l: 7, t: 10, i: 2013, }, D { l: 8, t: 10, i: 215, }, D { l: 8, t: 10, i: 513, }, D { l: 10, t: 10, i: 266, }, D { l: 139, t: 10, i: 22, }, D { l: 134, t: 0, i: 570, }, D { l: 6, t: 0, i: 565 }, D { l: 7, t: 0, i: 1667, }, D { l: 4, t: 11, i: 439, }, D { l: 10, t: 10, i: 95, }, D { l: 11, t: 10, i: 603, }, D { l: 12, t: 11, i: 242, }, D { l: 13, t: 10, i: 443, }, D { l: 14, t: 10, i: 160, }, D { l: 143, t: 10, i: 4, }, D { l: 134, t: 0, i: 1464, }, D { l: 134, t: 10, i: 431, }, D { l: 9, t: 0, i: 372 }, D { l: 15, t: 0, i: 2 }, D { l: 19, t: 0, i: 10 }, D { l: 19, t: 0, i: 18 }, D { l: 5, t: 10, i: 874, }, D { l: 6, t: 10, i: 1677, }, D { l: 143, t: 10, i: 0, }, D { l: 132, t: 0, i: 787, }, D { l: 6, t: 0, i: 380 }, D { l: 12, t: 0, i: 399, }, D { l: 21, t: 0, i: 19 }, D { l: 7, t: 10, i: 939, }, D { l: 7, t: 10, i: 1172, }, D { l: 7, t: 10, i: 1671, }, D { l: 9, t: 10, i: 540, }, D { l: 10, t: 10, i: 696, }, D { l: 11, t: 10, i: 265, }, D { l: 11, t: 10, i: 732, }, D { l: 11, t: 10, i: 928, }, D { l: 11, t: 10, i: 937, }, D { l: 141, t: 10, i: 438, }, D { l: 137, t: 0, i: 200, }, D { l: 132, t: 11, i: 233, }, D { l: 132, t: 0, i: 516, }, D { l: 134, t: 11, i: 577, }, D { l: 132, t: 0, i: 844, }, D { l: 11, t: 0, i: 887, }, D { l: 14, t: 0, i: 365, }, D { l: 142, t: 0, i: 375, }, D { l: 132, t: 11, i: 482, }, D { l: 8, t: 0, i: 821 }, D { l: 140, t: 0, i: 44, }, D { l: 7, t: 0, i: 1655, }, D { l: 136, t: 0, i: 305, }, D { l: 5, t: 10, i: 682, }, D { l: 135, t: 10, i: 1887, }, D { l: 135, t: 11, i: 346, }, D { l: 132, t: 10, i: 696, }, D { l: 4, t: 0, i: 10 }, D { l: 7, t: 0, i: 917 }, D { l: 139, t: 0, i: 786, }, D { l: 5, t: 11, i: 795, }, D { l: 6, t: 11, i: 1741, }, D { l: 8, t: 11, i: 417, }, D { l: 137, t: 11, i: 782, }, D { l: 4, t: 0, i: 1016, }, D { l: 134, t: 0, i: 2031, }, D { l: 5, t: 0, i: 684 }, D { l: 4, t: 10, i: 726, }, D { l: 133, t: 10, i: 630, }, D { l: 6, t: 0, i: 1021, }, D { l: 134, t: 0, i: 1480, }, D { l: 8, t: 10, i: 802, }, D { l: 136, t: 10, i: 838, }, D { l: 134, t: 0, i: 27, }, D { l: 134, t: 0, i: 395, }, D { l: 135, t: 11, i: 622, }, D { l: 7, t: 11, i: 625, }, D { l: 135, t: 11, i: 1750, }, D { l: 4, t: 11, i: 203, }, D { l: 135, t: 11, i: 1936, }, D { l: 6, t: 10, i: 118, }, D { l: 7, t: 10, i: 215, }, D { l: 7, t: 10, i: 1521, }, D { l: 140, t: 10, i: 11, }, D { l: 132, t: 0, i: 813, }, D { l: 136, t: 0, i: 511, }, D { l: 7, t: 10, i: 615, }, D { l: 138, t: 10, i: 251, }, D { l: 135, t: 10, i: 1044, }, D { l: 145, t: 0, i: 56, }, D { l: 133, t: 10, i: 225, }, D { l: 6, t: 0, i: 342 }, D { l: 6, t: 0, i: 496 }, D { l: 8, t: 0, i: 275 }, D { l: 137, t: 0, i: 206, }, D { l: 4, t: 0, i: 909 }, D { l: 133, t: 0, i: 940, }, D { l: 132, t: 0, i: 891, }, D { l: 7, t: 11, i: 311, }, D { l: 9, t: 11, i: 308, }, D { l: 140, t: 11, i: 255, }, D { l: 4, t: 10, i: 370, }, D { l: 5, t: 10, i: 756, }, D { l: 135, t: 10, i: 1326, }, D { l: 4, t: 0, i: 687 }, D { l: 134, t: 0, i: 1596, }, D { l: 134, t: 0, i: 1342, }, D { l: 6, t: 10, i: 1662, }, D { l: 7, t: 10, i: 48 }, D { l: 8, t: 10, i: 771, }, D { l: 10, t: 10, i: 116, }, D { l: 13, t: 10, i: 104, }, D { l: 14, t: 10, i: 105, }, D { l: 14, t: 10, i: 184, }, D { l: 15, t: 10, i: 168, }, D { l: 19, t: 10, i: 92, }, D { l: 148, t: 10, i: 68, }, D { l: 138, t: 10, i: 209, }, D { l: 4, t: 11, i: 400, }, D { l: 5, t: 11, i: 267, }, D { l: 135, t: 11, i: 232, }, D { l: 151, t: 11, i: 12, }, D { l: 6, t: 0, i: 41 }, D { l: 141, t: 0, i: 160, }, D { l: 141, t: 11, i: 314, }, D { l: 134, t: 0, i: 1718, }, D { l: 136, t: 0, i: 778, }, D { l: 142, t: 11, i: 261, }, D { l: 134, t: 0, i: 1610, }, D { l: 133, t: 0, i: 115, }, D { l: 132, t: 0, i: 294, }, D { l: 14, t: 0, i: 314, }, D { l: 132, t: 10, i: 120, }, D { l: 132, t: 0, i: 983, }, D { l: 5, t: 0, i: 193 }, D { l: 140, t: 0, i: 178, }, D { l: 138, t: 10, i: 429, }, D { l: 5, t: 10, i: 820, }, D { l: 135, t: 10, i: 931, }, D { l: 6, t: 0, i: 994 }, D { l: 6, t: 0, i: 1051, }, D { l: 6, t: 0, i: 1439, }, D { l: 7, t: 0, i: 174 }, D { l: 133, t: 11, i: 732, }, D { l: 4, t: 11, i: 100, }, D { l: 7, t: 11, i: 679, }, D { l: 8, t: 11, i: 313, }, D { l: 138, t: 10, i: 199, }, D { l: 6, t: 10, i: 151, }, D { l: 6, t: 10, i: 1675, }, D { l: 7, t: 10, i: 383, }, D { l: 151, t: 10, i: 10, }, D { l: 6, t: 0, i: 1796, }, D { l: 8, t: 0, i: 848 }, D { l: 8, t: 0, i: 867 }, D { l: 8, t: 0, i: 907 }, D { l: 10, t: 0, i: 855, }, D { l: 140, t: 0, i: 703, }, D { l: 140, t: 0, i: 221, }, D { l: 4, t: 0, i: 122 }, D { l: 5, t: 0, i: 796 }, D { l: 5, t: 0, i: 952 }, D { l: 6, t: 0, i: 1660, }, D { l: 6, t: 0, i: 1671, }, D { l: 8, t: 0, i: 567 }, D { l: 9, t: 0, i: 687 }, D { l: 9, t: 0, i: 742 }, D { l: 10, t: 0, i: 686, }, D { l: 11, t: 0, i: 682, }, D { l: 11, t: 0, i: 909, }, D { l: 140, t: 0, i: 281, }, D { l: 5, t: 11, i: 362, }, D { l: 5, t: 11, i: 443, }, D { l: 6, t: 11, i: 318, }, D { l: 7, t: 11, i: 1019, }, D { l: 139, t: 11, i: 623, }, D { l: 5, t: 11, i: 463, }, D { l: 136, t: 11, i: 296, }, D { l: 11, t: 0, i: 583, }, D { l: 13, t: 0, i: 262, }, D { l: 6, t: 10, i: 1624, }, D { l: 12, t: 10, i: 422, }, D { l: 142, t: 10, i: 360, }, D { l: 5, t: 0, i: 179 }, D { l: 7, t: 0, i: 1095, }, D { l: 135, t: 0, i: 1213, }, D { l: 4, t: 10, i: 43 }, D { l: 4, t: 11, i: 454, }, D { l: 5, t: 10, i: 344, }, D { l: 133, t: 10, i: 357, }, D { l: 4, t: 0, i: 66 }, D { l: 7, t: 0, i: 722 }, D { l: 135, t: 0, i: 904, }, D { l: 134, t: 0, i: 773, }, D { l: 7, t: 0, i: 352 }, D { l: 133, t: 10, i: 888, }, D { l: 5, t: 11, i: 48 }, D { l: 5, t: 11, i: 404, }, D { l: 6, t: 11, i: 557, }, D { l: 7, t: 11, i: 458, }, D { l: 8, t: 11, i: 597, }, D { l: 10, t: 11, i: 455, }, D { l: 10, t: 11, i: 606, }, D { l: 11, t: 11, i: 49, }, D { l: 11, t: 11, i: 548, }, D { l: 12, t: 11, i: 476, }, D { l: 13, t: 11, i: 18, }, D { l: 141, t: 11, i: 450, }, D { l: 134, t: 11, i: 418, }, D { l: 132, t: 10, i: 711, }, D { l: 5, t: 11, i: 442, }, D { l: 135, t: 11, i: 1984, }, D { l: 141, t: 0, i: 35, }, D { l: 137, t: 0, i: 152, }, D { l: 134, t: 0, i: 1197, }, D { l: 135, t: 11, i: 1093, }, D { l: 137, t: 11, i: 203, }, D { l: 137, t: 10, i: 440, }, D { l: 10, t: 0, i: 592, }, D { l: 10, t: 0, i: 753, }, D { l: 12, t: 0, i: 317, }, D { l: 12, t: 0, i: 355, }, D { l: 12, t: 0, i: 465, }, D { l: 12, t: 0, i: 469, }, D { l: 12, t: 0, i: 560, }, D { l: 12, t: 0, i: 578, }, D { l: 141, t: 0, i: 243, }, D { l: 133, t: 0, i: 564, }, D { l: 134, t: 0, i: 797, }, D { l: 5, t: 10, i: 958, }, D { l: 133, t: 10, i: 987, }, D { l: 5, t: 11, i: 55 }, D { l: 7, t: 11, i: 376, }, D { l: 140, t: 11, i: 161, }, D { l: 133, t: 11, i: 450, }, D { l: 134, t: 0, i: 556, }, D { l: 134, t: 0, i: 819, }, D { l: 11, t: 10, i: 276, }, D { l: 142, t: 10, i: 293, }, D { l: 7, t: 0, i: 544 }, D { l: 138, t: 0, i: 61, }, D { l: 8, t: 0, i: 719 }, D { l: 4, t: 10, i: 65 }, D { l: 5, t: 10, i: 479, }, D { l: 5, t: 10, i: 1004, }, D { l: 7, t: 10, i: 1913, }, D { l: 8, t: 10, i: 317, }, D { l: 9, t: 10, i: 302, }, D { l: 10, t: 10, i: 612, }, D { l: 141, t: 10, i: 22, }, D { l: 4, t: 0, i: 5 }, D { l: 5, t: 0, i: 498 }, D { l: 8, t: 0, i: 637 }, D { l: 9, t: 0, i: 521 }, D { l: 4, t: 11, i: 213, }, D { l: 4, t: 10, i: 261, }, D { l: 7, t: 11, i: 223, }, D { l: 7, t: 10, i: 510, }, D { l: 136, t: 11, i: 80, }, D { l: 5, t: 0, i: 927 }, D { l: 7, t: 0, i: 101 }, D { l: 4, t: 10, i: 291, }, D { l: 7, t: 11, i: 381, }, D { l: 7, t: 11, i: 806, }, D { l: 7, t: 11, i: 820, }, D { l: 8, t: 11, i: 354, }, D { l: 8, t: 11, i: 437, }, D { l: 8, t: 11, i: 787, }, D { l: 9, t: 10, i: 515, }, D { l: 9, t: 11, i: 657, }, D { l: 10, t: 11, i: 58, }, D { l: 10, t: 11, i: 339, }, D { l: 10, t: 11, i: 749, }, D { l: 11, t: 11, i: 914, }, D { l: 12, t: 10, i: 152, }, D { l: 12, t: 11, i: 162, }, D { l: 12, t: 10, i: 443, }, D { l: 13, t: 11, i: 75, }, D { l: 13, t: 10, i: 392, }, D { l: 14, t: 11, i: 106, }, D { l: 14, t: 11, i: 198, }, D { l: 14, t: 11, i: 320, }, D { l: 14, t: 10, i: 357, }, D { l: 14, t: 11, i: 413, }, D { l: 146, t: 11, i: 43, }, D { l: 6, t: 0, i: 1153, }, D { l: 7, t: 0, i: 1441, }, D { l: 136, t: 11, i: 747, }, D { l: 4, t: 0, i: 893 }, D { l: 5, t: 0, i: 780 }, D { l: 133, t: 0, i: 893, }, D { l: 138, t: 11, i: 654, }, D { l: 133, t: 11, i: 692, }, D { l: 133, t: 0, i: 238, }, D { l: 134, t: 11, i: 191, }, D { l: 4, t: 10, i: 130, }, D { l: 135, t: 10, i: 843, }, D { l: 6, t: 0, i: 1296, }, D { l: 5, t: 10, i: 42 }, D { l: 5, t: 10, i: 879, }, D { l: 7, t: 10, i: 245, }, D { l: 7, t: 10, i: 324, }, D { l: 7, t: 10, i: 1532, }, D { l: 11, t: 10, i: 463, }, D { l: 11, t: 10, i: 472, }, D { l: 13, t: 10, i: 363, }, D { l: 144, t: 10, i: 52, }, D { l: 134, t: 0, i: 1729, }, D { l: 6, t: 0, i: 1999, }, D { l: 136, t: 0, i: 969, }, D { l: 4, t: 10, i: 134, }, D { l: 133, t: 10, i: 372, }, D { l: 4, t: 0, i: 60 }, D { l: 7, t: 0, i: 941 }, D { l: 7, t: 0, i: 1800, }, D { l: 8, t: 0, i: 314 }, D { l: 9, t: 0, i: 700 }, D { l: 139, t: 0, i: 487, }, D { l: 134, t: 0, i: 1144, }, D { l: 6, t: 11, i: 162, }, D { l: 7, t: 11, i: 1960, }, D { l: 136, t: 11, i: 831, }, D { l: 132, t: 11, i: 706, }, D { l: 135, t: 0, i: 1147, }, D { l: 138, t: 11, i: 426, }, D { l: 138, t: 11, i: 89, }, D { l: 7, t: 0, i: 1853, }, D { l: 138, t: 0, i: 437, }, D { l: 136, t: 0, i: 419, }, D { l: 135, t: 10, i: 1634, }, D { l: 133, t: 0, i: 828, }, D { l: 5, t: 0, i: 806 }, D { l: 7, t: 0, i: 176 }, D { l: 7, t: 0, i: 178 }, D { l: 7, t: 0, i: 1240, }, D { l: 7, t: 0, i: 1976, }, D { l: 132, t: 10, i: 644, }, D { l: 135, t: 11, i: 1877, }, D { l: 5, t: 11, i: 420, }, D { l: 135, t: 11, i: 1449, }, D { l: 4, t: 0, i: 51 }, D { l: 5, t: 0, i: 39 }, D { l: 6, t: 0, i: 4 }, D { l: 7, t: 0, i: 591 }, D { l: 7, t: 0, i: 849 }, D { l: 7, t: 0, i: 951 }, D { l: 7, t: 0, i: 1613, }, D { l: 7, t: 0, i: 1760, }, D { l: 7, t: 0, i: 1988, }, D { l: 9, t: 0, i: 434 }, D { l: 10, t: 0, i: 754, }, D { l: 11, t: 0, i: 25 }, D { l: 139, t: 0, i: 37, }, D { l: 10, t: 11, i: 57, }, D { l: 138, t: 11, i: 277, }, D { l: 135, t: 10, i: 540, }, D { l: 132, t: 11, i: 204, }, D { l: 135, t: 0, i: 159, }, D { l: 139, t: 11, i: 231, }, D { l: 133, t: 0, i: 902, }, D { l: 7, t: 0, i: 928 }, D { l: 7, t: 11, i: 366, }, D { l: 9, t: 11, i: 287, }, D { l: 12, t: 11, i: 199, }, D { l: 12, t: 11, i: 556, }, D { l: 140, t: 11, i: 577, }, D { l: 6, t: 10, i: 623, }, D { l: 136, t: 10, i: 789, }, D { l: 4, t: 10, i: 908, }, D { l: 5, t: 10, i: 359, }, D { l: 5, t: 10, i: 508, }, D { l: 6, t: 10, i: 1723, }, D { l: 7, t: 10, i: 343, }, D { l: 7, t: 10, i: 1996, }, D { l: 135, t: 10, i: 2026, }, D { l: 134, t: 0, i: 270, }, D { l: 4, t: 10, i: 341, }, D { l: 135, t: 10, i: 480, }, D { l: 5, t: 11, i: 356, }, D { l: 135, t: 11, i: 224, }, D { l: 11, t: 11, i: 588, }, D { l: 11, t: 11, i: 864, }, D { l: 11, t: 11, i: 968, }, D { l: 143, t: 11, i: 160, }, D { l: 132, t: 0, i: 556, }, D { l: 137, t: 0, i: 801, }, D { l: 132, t: 0, i: 416, }, D { l: 142, t: 0, i: 372, }, D { l: 5, t: 0, i: 152 }, D { l: 5, t: 0, i: 197 }, D { l: 7, t: 0, i: 340 }, D { l: 7, t: 0, i: 867 }, D { l: 10, t: 0, i: 548, }, D { l: 10, t: 0, i: 581, }, D { l: 11, t: 0, i: 6 }, D { l: 12, t: 0, i: 3 }, D { l: 12, t: 0, i: 19 }, D { l: 14, t: 0, i: 110, }, D { l: 142, t: 0, i: 289, }, D { l: 139, t: 0, i: 369, }, D { l: 7, t: 11, i: 630, }, D { l: 9, t: 11, i: 567, }, D { l: 11, t: 11, i: 150, }, D { l: 11, t: 11, i: 444, }, D { l: 141, t: 11, i: 119, }, D { l: 134, t: 11, i: 539, }, D { l: 7, t: 10, i: 1995, }, D { l: 8, t: 10, i: 299, }, D { l: 11, t: 10, i: 890, }, D { l: 140, t: 10, i: 674, }, D { l: 7, t: 0, i: 34 }, D { l: 7, t: 0, i: 190 }, D { l: 8, t: 0, i: 28 }, D { l: 8, t: 0, i: 141 }, D { l: 8, t: 0, i: 444 }, D { l: 8, t: 0, i: 811 }, D { l: 9, t: 0, i: 468 }, D { l: 11, t: 0, i: 334, }, D { l: 12, t: 0, i: 24 }, D { l: 12, t: 0, i: 386, }, D { l: 140, t: 0, i: 576, }, D { l: 133, t: 0, i: 757, }, D { l: 7, t: 0, i: 1553, }, D { l: 136, t: 0, i: 898, }, D { l: 133, t: 0, i: 721, }, D { l: 136, t: 0, i: 1012, }, D { l: 4, t: 0, i: 789 }, D { l: 5, t: 0, i: 647 }, D { l: 135, t: 0, i: 1102, }, D { l: 132, t: 0, i: 898, }, D { l: 10, t: 0, i: 183, }, D { l: 4, t: 10, i: 238, }, D { l: 5, t: 10, i: 503, }, D { l: 6, t: 10, i: 179, }, D { l: 7, t: 10, i: 2003, }, D { l: 8, t: 10, i: 381, }, D { l: 8, t: 10, i: 473, }, D { l: 9, t: 10, i: 149, }, D { l: 10, t: 10, i: 788, }, D { l: 15, t: 10, i: 45, }, D { l: 15, t: 10, i: 86, }, D { l: 20, t: 10, i: 110, }, D { l: 150, t: 10, i: 57, }, D { l: 9, t: 0, i: 136 }, D { l: 19, t: 0, i: 107, }, D { l: 4, t: 10, i: 121, }, D { l: 5, t: 10, i: 156, }, D { l: 5, t: 10, i: 349, }, D { l: 10, t: 10, i: 605, }, D { l: 142, t: 10, i: 342, }, D { l: 4, t: 11, i: 235, }, D { l: 135, t: 11, i: 255, }, D { l: 4, t: 11, i: 194, }, D { l: 5, t: 11, i: 584, }, D { l: 6, t: 11, i: 384, }, D { l: 7, t: 11, i: 583, }, D { l: 10, t: 11, i: 761, }, D { l: 11, t: 11, i: 760, }, D { l: 139, t: 11, i: 851, }, D { l: 6, t: 10, i: 80 }, D { l: 6, t: 10, i: 1694, }, D { l: 7, t: 10, i: 173, }, D { l: 7, t: 10, i: 1974, }, D { l: 9, t: 10, i: 547, }, D { l: 10, t: 10, i: 730, }, D { l: 14, t: 10, i: 18, }, D { l: 150, t: 10, i: 39, }, D { l: 4, t: 10, i: 923, }, D { l: 134, t: 10, i: 1711, }, D { l: 5, t: 0, i: 277 }, D { l: 141, t: 0, i: 247, }, D { l: 132, t: 0, i: 435, }, D { l: 133, t: 11, i: 562, }, D { l: 134, t: 0, i: 1311, }, D { l: 5, t: 11, i: 191, }, D { l: 137, t: 11, i: 271, }, D { l: 132, t: 10, i: 595, }, D { l: 7, t: 11, i: 1537, }, D { l: 14, t: 11, i: 96, }, D { l: 143, t: 11, i: 73, }, D { l: 5, t: 0, i: 437 }, D { l: 7, t: 0, i: 502 }, D { l: 7, t: 0, i: 519 }, D { l: 7, t: 0, i: 1122, }, D { l: 7, t: 0, i: 1751, }, D { l: 14, t: 0, i: 211, }, D { l: 6, t: 10, i: 459, }, D { l: 7, t: 10, i: 1753, }, D { l: 7, t: 10, i: 1805, }, D { l: 8, t: 10, i: 658, }, D { l: 9, t: 10, i: 1 }, D { l: 11, t: 10, i: 959, }, D { l: 141, t: 10, i: 446, }, D { l: 6, t: 0, i: 814 }, D { l: 4, t: 11, i: 470, }, D { l: 5, t: 11, i: 473, }, D { l: 6, t: 11, i: 153, }, D { l: 7, t: 11, i: 1503, }, D { l: 7, t: 11, i: 1923, }, D { l: 10, t: 11, i: 701, }, D { l: 11, t: 11, i: 132, }, D { l: 11, t: 11, i: 168, }, D { l: 11, t: 11, i: 227, }, D { l: 11, t: 11, i: 320, }, D { l: 11, t: 11, i: 436, }, D { l: 11, t: 11, i: 525, }, D { l: 11, t: 11, i: 855, }, D { l: 12, t: 11, i: 41, }, D { l: 12, t: 11, i: 286, }, D { l: 13, t: 11, i: 103, }, D { l: 13, t: 11, i: 284, }, D { l: 14, t: 11, i: 255, }, D { l: 14, t: 11, i: 262, }, D { l: 15, t: 11, i: 117, }, D { l: 143, t: 11, i: 127, }, D { l: 5, t: 0, i: 265 }, D { l: 6, t: 0, i: 212 }, D { l: 135, t: 0, i: 28, }, D { l: 138, t: 0, i: 750, }, D { l: 133, t: 11, i: 327, }, D { l: 6, t: 11, i: 552, }, D { l: 7, t: 11, i: 1754, }, D { l: 137, t: 11, i: 604, }, D { l: 134, t: 0, i: 2012, }, D { l: 132, t: 0, i: 702, }, D { l: 5, t: 11, i: 80 }, D { l: 6, t: 11, i: 405, }, D { l: 7, t: 11, i: 403, }, D { l: 7, t: 11, i: 1502, }, D { l: 7, t: 11, i: 1626, }, D { l: 8, t: 11, i: 456, }, D { l: 9, t: 11, i: 487, }, D { l: 9, t: 11, i: 853, }, D { l: 9, t: 11, i: 889, }, D { l: 10, t: 11, i: 309, }, D { l: 11, t: 11, i: 721, }, D { l: 11, t: 11, i: 994, }, D { l: 12, t: 11, i: 430, }, D { l: 141, t: 11, i: 165, }, D { l: 5, t: 0, i: 808 }, D { l: 135, t: 0, i: 2045, }, D { l: 5, t: 0, i: 166 }, D { l: 8, t: 0, i: 739 }, D { l: 140, t: 0, i: 511, }, D { l: 134, t: 10, i: 490, }, D { l: 4, t: 11, i: 453, }, D { l: 5, t: 11, i: 887, }, D { l: 6, t: 11, i: 535, }, D { l: 8, t: 11, i: 6 }, D { l: 136, t: 11, i: 543, }, D { l: 4, t: 0, i: 119 }, D { l: 5, t: 0, i: 170 }, D { l: 5, t: 0, i: 447 }, D { l: 7, t: 0, i: 1708, }, D { l: 7, t: 0, i: 1889, }, D { l: 9, t: 0, i: 357 }, D { l: 9, t: 0, i: 719 }, D { l: 12, t: 0, i: 486, }, D { l: 140, t: 0, i: 596, }, D { l: 137, t: 0, i: 500, }, D { l: 7, t: 10, i: 250, }, D { l: 136, t: 10, i: 507, }, D { l: 132, t: 10, i: 158, }, D { l: 6, t: 0, i: 809 }, D { l: 134, t: 0, i: 1500, }, D { l: 9, t: 0, i: 327 }, D { l: 11, t: 0, i: 350, }, D { l: 11, t: 0, i: 831, }, D { l: 13, t: 0, i: 352, }, D { l: 4, t: 10, i: 140, }, D { l: 7, t: 10, i: 362, }, D { l: 8, t: 10, i: 209, }, D { l: 9, t: 10, i: 10 }, D { l: 9, t: 10, i: 503, }, D { l: 9, t: 10, i: 614, }, D { l: 10, t: 10, i: 689, }, D { l: 11, t: 10, i: 327, }, D { l: 11, t: 10, i: 725, }, D { l: 12, t: 10, i: 252, }, D { l: 12, t: 10, i: 583, }, D { l: 13, t: 10, i: 192, }, D { l: 14, t: 10, i: 269, }, D { l: 14, t: 10, i: 356, }, D { l: 148, t: 10, i: 50, }, D { l: 135, t: 11, i: 741, }, D { l: 4, t: 0, i: 450 }, D { l: 7, t: 0, i: 1158, }, D { l: 19, t: 10, i: 1 }, D { l: 19, t: 10, i: 26, }, D { l: 150, t: 10, i: 9, }, D { l: 6, t: 0, i: 597 }, D { l: 135, t: 0, i: 1318, }, D { l: 134, t: 0, i: 1602, }, D { l: 6, t: 10, i: 228, }, D { l: 7, t: 10, i: 1341, }, D { l: 9, t: 10, i: 408, }, D { l: 138, t: 10, i: 343, }, D { l: 7, t: 0, i: 1375, }, D { l: 7, t: 0, i: 1466, }, D { l: 138, t: 0, i: 331, }, D { l: 132, t: 0, i: 754, }, D { l: 132, t: 10, i: 557, }, D { l: 5, t: 11, i: 101, }, D { l: 6, t: 11, i: 88 }, D { l: 6, t: 11, i: 543, }, D { l: 7, t: 11, i: 1677, }, D { l: 9, t: 11, i: 100, }, D { l: 10, t: 11, i: 677, }, D { l: 14, t: 11, i: 169, }, D { l: 14, t: 11, i: 302, }, D { l: 14, t: 11, i: 313, }, D { l: 15, t: 11, i: 48, }, D { l: 143, t: 11, i: 84, }, D { l: 134, t: 0, i: 1368, }, D { l: 4, t: 11, i: 310, }, D { l: 9, t: 11, i: 795, }, D { l: 10, t: 11, i: 733, }, D { l: 11, t: 11, i: 451, }, D { l: 12, t: 11, i: 249, }, D { l: 14, t: 11, i: 115, }, D { l: 14, t: 11, i: 286, }, D { l: 143, t: 11, i: 100, }, D { l: 132, t: 10, i: 548, }, D { l: 10, t: 0, i: 557, }, D { l: 7, t: 10, i: 197, }, D { l: 8, t: 10, i: 142, }, D { l: 8, t: 10, i: 325, }, D { l: 9, t: 10, i: 150, }, D { l: 9, t: 10, i: 596, }, D { l: 10, t: 10, i: 353, }, D { l: 11, t: 10, i: 74, }, D { l: 11, t: 10, i: 315, }, D { l: 12, t: 10, i: 662, }, D { l: 12, t: 10, i: 681, }, D { l: 14, t: 10, i: 423, }, D { l: 143, t: 10, i: 141, }, D { l: 133, t: 11, i: 587, }, D { l: 5, t: 0, i: 850 }, D { l: 136, t: 0, i: 799, }, D { l: 10, t: 0, i: 908, }, D { l: 12, t: 0, i: 701, }, D { l: 12, t: 0, i: 757, }, D { l: 142, t: 0, i: 466, }, D { l: 4, t: 0, i: 62 }, D { l: 5, t: 0, i: 275 }, D { l: 18, t: 0, i: 19 }, D { l: 6, t: 10, i: 399, }, D { l: 6, t: 10, i: 579, }, D { l: 7, t: 10, i: 692, }, D { l: 7, t: 10, i: 846, }, D { l: 7, t: 10, i: 1015, }, D { l: 7, t: 10, i: 1799, }, D { l: 8, t: 10, i: 403, }, D { l: 9, t: 10, i: 394, }, D { l: 10, t: 10, i: 133, }, D { l: 12, t: 10, i: 4 }, D { l: 12, t: 10, i: 297, }, D { l: 12, t: 10, i: 452, }, D { l: 16, t: 10, i: 81, }, D { l: 18, t: 10, i: 25, }, D { l: 21, t: 10, i: 14, }, D { l: 22, t: 10, i: 12, }, D { l: 151, t: 10, i: 18, }, D { l: 12, t: 0, i: 459, }, D { l: 7, t: 10, i: 1546, }, D { l: 11, t: 10, i: 299, }, D { l: 142, t: 10, i: 407, }, D { l: 132, t: 10, i: 177, }, D { l: 132, t: 11, i: 498, }, D { l: 7, t: 11, i: 217, }, D { l: 8, t: 11, i: 140, }, D { l: 138, t: 11, i: 610, }, D { l: 5, t: 10, i: 411, }, D { l: 135, t: 10, i: 653, }, D { l: 134, t: 0, i: 1802, }, D { l: 7, t: 10, i: 439, }, D { l: 10, t: 10, i: 727, }, D { l: 11, t: 10, i: 260, }, D { l: 139, t: 10, i: 684, }, D { l: 133, t: 11, i: 905, }, D { l: 11, t: 11, i: 580, }, D { l: 142, t: 11, i: 201, }, D { l: 134, t: 0, i: 1397, }, D { l: 5, t: 10, i: 208, }, D { l: 7, t: 10, i: 753, }, D { l: 135, t: 10, i: 1528, }, D { l: 7, t: 0, i: 238 }, D { l: 7, t: 0, i: 2033, }, D { l: 8, t: 0, i: 120 }, D { l: 8, t: 0, i: 188 }, D { l: 8, t: 0, i: 659 }, D { l: 9, t: 0, i: 598 }, D { l: 10, t: 0, i: 466, }, D { l: 12, t: 0, i: 342, }, D { l: 12, t: 0, i: 588, }, D { l: 13, t: 0, i: 503, }, D { l: 14, t: 0, i: 246, }, D { l: 143, t: 0, i: 92, }, D { l: 135, t: 11, i: 1041, }, D { l: 4, t: 11, i: 456, }, D { l: 7, t: 11, i: 105, }, D { l: 7, t: 11, i: 358, }, D { l: 7, t: 11, i: 1637, }, D { l: 8, t: 11, i: 643, }, D { l: 139, t: 11, i: 483, }, D { l: 6, t: 0, i: 1318, }, D { l: 134, t: 0, i: 1324, }, D { l: 4, t: 0, i: 201 }, D { l: 7, t: 0, i: 1744, }, D { l: 8, t: 0, i: 602 }, D { l: 11, t: 0, i: 247, }, D { l: 11, t: 0, i: 826, }, D { l: 17, t: 0, i: 65 }, D { l: 133, t: 10, i: 242, }, D { l: 8, t: 0, i: 164 }, D { l: 146, t: 0, i: 62, }, D { l: 133, t: 10, i: 953, }, D { l: 139, t: 10, i: 802, }, D { l: 133, t: 0, i: 615, }, D { l: 7, t: 11, i: 1566, }, D { l: 8, t: 11, i: 269, }, D { l: 9, t: 11, i: 212, }, D { l: 9, t: 11, i: 718, }, D { l: 14, t: 11, i: 15, }, D { l: 14, t: 11, i: 132, }, D { l: 142, t: 11, i: 227, }, D { l: 133, t: 10, i: 290, }, D { l: 132, t: 10, i: 380, }, D { l: 5, t: 10, i: 52 }, D { l: 7, t: 10, i: 277, }, D { l: 9, t: 10, i: 368, }, D { l: 139, t: 10, i: 791, }, D { l: 135, t: 0, i: 1243, }, D { l: 133, t: 11, i: 539, }, D { l: 11, t: 11, i: 919, }, D { l: 141, t: 11, i: 409, }, D { l: 136, t: 0, i: 968, }, D { l: 133, t: 11, i: 470, }, D { l: 134, t: 0, i: 882, }, D { l: 132, t: 0, i: 907, }, D { l: 5, t: 0, i: 100 }, D { l: 10, t: 0, i: 329, }, D { l: 12, t: 0, i: 416, }, D { l: 149, t: 0, i: 29, }, D { l: 10, t: 10, i: 138, }, D { l: 139, t: 10, i: 476, }, D { l: 5, t: 10, i: 725, }, D { l: 5, t: 10, i: 727, }, D { l: 6, t: 11, i: 91 }, D { l: 7, t: 11, i: 435, }, D { l: 135, t: 10, i: 1811, }, D { l: 4, t: 11, i: 16 }, D { l: 5, t: 11, i: 316, }, D { l: 5, t: 11, i: 842, }, D { l: 6, t: 11, i: 370, }, D { l: 6, t: 11, i: 1778, }, D { l: 8, t: 11, i: 166, }, D { l: 11, t: 11, i: 812, }, D { l: 12, t: 11, i: 206, }, D { l: 12, t: 11, i: 351, }, D { l: 14, t: 11, i: 418, }, D { l: 16, t: 11, i: 15, }, D { l: 16, t: 11, i: 34, }, D { l: 18, t: 11, i: 3 }, D { l: 19, t: 11, i: 3 }, D { l: 19, t: 11, i: 7 }, D { l: 20, t: 11, i: 4 }, D { l: 149, t: 11, i: 21, }, D { l: 132, t: 0, i: 176, }, D { l: 5, t: 0, i: 636 }, D { l: 5, t: 0, i: 998 }, D { l: 7, t: 0, i: 9 }, D { l: 7, t: 0, i: 1508, }, D { l: 8, t: 0, i: 26 }, D { l: 9, t: 0, i: 317 }, D { l: 9, t: 0, i: 358 }, D { l: 10, t: 0, i: 210, }, D { l: 10, t: 0, i: 292, }, D { l: 10, t: 0, i: 533, }, D { l: 11, t: 0, i: 555, }, D { l: 12, t: 0, i: 526, }, D { l: 12, t: 0, i: 607, }, D { l: 13, t: 0, i: 263, }, D { l: 13, t: 0, i: 459, }, D { l: 142, t: 0, i: 271, }, D { l: 6, t: 0, i: 256 }, D { l: 8, t: 0, i: 265 }, D { l: 4, t: 10, i: 38 }, D { l: 7, t: 10, i: 307, }, D { l: 7, t: 10, i: 999, }, D { l: 7, t: 10, i: 1481, }, D { l: 7, t: 10, i: 1732, }, D { l: 7, t: 10, i: 1738, }, D { l: 9, t: 10, i: 414, }, D { l: 11, t: 10, i: 316, }, D { l: 12, t: 10, i: 52, }, D { l: 13, t: 10, i: 420, }, D { l: 147, t: 10, i: 100, }, D { l: 135, t: 10, i: 1296, }, D { l: 4, t: 11, i: 611, }, D { l: 133, t: 11, i: 606, }, D { l: 4, t: 0, i: 643 }, D { l: 142, t: 11, i: 21, }, D { l: 133, t: 11, i: 715, }, D { l: 133, t: 10, i: 723, }, D { l: 6, t: 0, i: 610 }, D { l: 135, t: 11, i: 597, }, D { l: 10, t: 0, i: 127, }, D { l: 141, t: 0, i: 27, }, D { l: 6, t: 0, i: 1995, }, D { l: 6, t: 0, i: 2001, }, D { l: 8, t: 0, i: 119 }, D { l: 136, t: 0, i: 973, }, D { l: 4, t: 11, i: 149, }, D { l: 138, t: 11, i: 368, }, D { l: 12, t: 0, i: 522, }, D { l: 4, t: 11, i: 154, }, D { l: 5, t: 10, i: 109, }, D { l: 6, t: 10, i: 1784, }, D { l: 7, t: 11, i: 1134, }, D { l: 7, t: 10, i: 1895, }, D { l: 8, t: 11, i: 105, }, D { l: 12, t: 10, i: 296, }, D { l: 140, t: 10, i: 302, }, D { l: 4, t: 11, i: 31 }, D { l: 6, t: 11, i: 429, }, D { l: 7, t: 11, i: 962, }, D { l: 9, t: 11, i: 458, }, D { l: 139, t: 11, i: 691, }, D { l: 10, t: 0, i: 553, }, D { l: 11, t: 0, i: 876, }, D { l: 13, t: 0, i: 193, }, D { l: 13, t: 0, i: 423, }, D { l: 14, t: 0, i: 166, }, D { l: 19, t: 0, i: 84 }, D { l: 4, t: 11, i: 312, }, D { l: 5, t: 10, i: 216, }, D { l: 7, t: 10, i: 1879, }, D { l: 9, t: 10, i: 141, }, D { l: 9, t: 10, i: 270, }, D { l: 9, t: 10, i: 679, }, D { l: 10, t: 10, i: 159, }, D { l: 11, t: 10, i: 197, }, D { l: 12, t: 10, i: 538, }, D { l: 12, t: 10, i: 559, }, D { l: 14, t: 10, i: 144, }, D { l: 14, t: 10, i: 167, }, D { l: 143, t: 10, i: 67, }, D { l: 134, t: 0, i: 1582, }, D { l: 7, t: 0, i: 1578, }, D { l: 135, t: 11, i: 1578, }, D { l: 137, t: 10, i: 81, }, D { l: 132, t: 11, i: 236, }, D { l: 134, t: 10, i: 391, }, D { l: 134, t: 0, i: 795, }, D { l: 7, t: 10, i: 322, }, D { l: 136, t: 10, i: 249, }, D { l: 5, t: 11, i: 836, }, D { l: 5, t: 11, i: 857, }, D { l: 6, t: 11, i: 1680, }, D { l: 7, t: 11, i: 59 }, D { l: 147, t: 11, i: 53, }, D { l: 135, t: 0, i: 432, }, D { l: 10, t: 11, i: 68, }, D { l: 139, t: 11, i: 494, }, D { l: 4, t: 11, i: 81 }, D { l: 139, t: 11, i: 867, }, D { l: 7, t: 0, i: 126 }, D { l: 136, t: 0, i: 84, }, D { l: 142, t: 11, i: 280, }, D { l: 5, t: 11, i: 282, }, D { l: 8, t: 11, i: 650, }, D { l: 9, t: 11, i: 295, }, D { l: 9, t: 11, i: 907, }, D { l: 138, t: 11, i: 443, }, D { l: 136, t: 0, i: 790, }, D { l: 5, t: 10, i: 632, }, D { l: 138, t: 10, i: 526, }, D { l: 6, t: 0, i: 64 }, D { l: 12, t: 0, i: 377, }, D { l: 13, t: 0, i: 309, }, D { l: 14, t: 0, i: 141, }, D { l: 14, t: 0, i: 429, }, D { l: 14, t: 11, i: 141, }, D { l: 142, t: 11, i: 429, }, D { l: 134, t: 0, i: 1529, }, D { l: 6, t: 0, i: 321 }, D { l: 7, t: 0, i: 1857, }, D { l: 9, t: 0, i: 530 }, D { l: 19, t: 0, i: 99 }, D { l: 7, t: 10, i: 948, }, D { l: 7, t: 10, i: 1042, }, D { l: 8, t: 10, i: 235, }, D { l: 8, t: 10, i: 461, }, D { l: 9, t: 10, i: 453, }, D { l: 10, t: 10, i: 354, }, D { l: 145, t: 10, i: 77, }, D { l: 7, t: 0, i: 1104, }, D { l: 11, t: 0, i: 269, }, D { l: 11, t: 0, i: 539, }, D { l: 11, t: 0, i: 627, }, D { l: 11, t: 0, i: 706, }, D { l: 11, t: 0, i: 975, }, D { l: 12, t: 0, i: 248, }, D { l: 12, t: 0, i: 434, }, D { l: 12, t: 0, i: 600, }, D { l: 12, t: 0, i: 622, }, D { l: 13, t: 0, i: 297, }, D { l: 13, t: 0, i: 485, }, D { l: 14, t: 0, i: 69 }, D { l: 14, t: 0, i: 409, }, D { l: 143, t: 0, i: 108, }, D { l: 4, t: 10, i: 362, }, D { l: 7, t: 10, i: 52 }, D { l: 7, t: 10, i: 303, }, D { l: 10, t: 11, i: 70, }, D { l: 12, t: 11, i: 26, }, D { l: 14, t: 11, i: 17, }, D { l: 14, t: 11, i: 178, }, D { l: 15, t: 11, i: 34, }, D { l: 149, t: 11, i: 12, }, D { l: 11, t: 0, i: 977, }, D { l: 141, t: 0, i: 507, }, D { l: 9, t: 0, i: 34 }, D { l: 139, t: 0, i: 484, }, D { l: 5, t: 10, i: 196, }, D { l: 6, t: 10, i: 486, }, D { l: 7, t: 10, i: 212, }, D { l: 8, t: 10, i: 309, }, D { l: 136, t: 10, i: 346, }, D { l: 6, t: 0, i: 1700, }, D { l: 7, t: 0, i: 26 }, D { l: 7, t: 0, i: 293 }, D { l: 7, t: 0, i: 382 }, D { l: 7, t: 0, i: 1026, }, D { l: 7, t: 0, i: 1087, }, D { l: 7, t: 0, i: 2027, }, D { l: 8, t: 0, i: 24 }, D { l: 8, t: 0, i: 114 }, D { l: 8, t: 0, i: 252 }, D { l: 8, t: 0, i: 727 }, D { l: 8, t: 0, i: 729 }, D { l: 9, t: 0, i: 30 }, D { l: 9, t: 0, i: 199 }, D { l: 9, t: 0, i: 231 }, D { l: 9, t: 0, i: 251 }, D { l: 9, t: 0, i: 334 }, D { l: 9, t: 0, i: 361 }, D { l: 9, t: 0, i: 712 }, D { l: 10, t: 0, i: 55 }, D { l: 10, t: 0, i: 60 }, D { l: 10, t: 0, i: 232, }, D { l: 10, t: 0, i: 332, }, D { l: 10, t: 0, i: 384, }, D { l: 10, t: 0, i: 396, }, D { l: 10, t: 0, i: 504, }, D { l: 10, t: 0, i: 542, }, D { l: 10, t: 0, i: 652, }, D { l: 11, t: 0, i: 20 }, D { l: 11, t: 0, i: 48 }, D { l: 11, t: 0, i: 207, }, D { l: 11, t: 0, i: 291, }, D { l: 11, t: 0, i: 298, }, D { l: 11, t: 0, i: 342, }, D { l: 11, t: 0, i: 365, }, D { l: 11, t: 0, i: 394, }, D { l: 11, t: 0, i: 620, }, D { l: 11, t: 0, i: 705, }, D { l: 11, t: 0, i: 1017, }, D { l: 12, t: 0, i: 123, }, D { l: 12, t: 0, i: 340, }, D { l: 12, t: 0, i: 406, }, D { l: 12, t: 0, i: 643, }, D { l: 13, t: 0, i: 61 }, D { l: 13, t: 0, i: 269, }, D { l: 13, t: 0, i: 311, }, D { l: 13, t: 0, i: 319, }, D { l: 13, t: 0, i: 486, }, D { l: 14, t: 0, i: 234, }, D { l: 15, t: 0, i: 62 }, D { l: 15, t: 0, i: 85 }, D { l: 16, t: 0, i: 71 }, D { l: 18, t: 0, i: 119, }, D { l: 20, t: 0, i: 105, }, D { l: 135, t: 10, i: 1912, }, D { l: 4, t: 11, i: 71 }, D { l: 5, t: 11, i: 376, }, D { l: 7, t: 11, i: 119, }, D { l: 138, t: 11, i: 665, }, D { l: 10, t: 0, i: 918, }, D { l: 10, t: 0, i: 926, }, D { l: 4, t: 10, i: 686, }, D { l: 136, t: 11, i: 55, }, D { l: 138, t: 10, i: 625, }, D { l: 136, t: 10, i: 706, }, D { l: 132, t: 11, i: 479, }, D { l: 4, t: 10, i: 30 }, D { l: 133, t: 10, i: 43, }, D { l: 6, t: 0, i: 379 }, D { l: 7, t: 0, i: 270 }, D { l: 8, t: 0, i: 176 }, D { l: 8, t: 0, i: 183 }, D { l: 9, t: 0, i: 432 }, D { l: 9, t: 0, i: 661 }, D { l: 12, t: 0, i: 247, }, D { l: 12, t: 0, i: 617, }, D { l: 18, t: 0, i: 125, }, D { l: 7, t: 11, i: 607, }, D { l: 8, t: 11, i: 99 }, D { l: 152, t: 11, i: 4, }, D { l: 5, t: 0, i: 792 }, D { l: 133, t: 0, i: 900, }, D { l: 4, t: 11, i: 612, }, D { l: 133, t: 11, i: 561, }, D { l: 4, t: 11, i: 41 }, D { l: 4, t: 10, i: 220, }, D { l: 5, t: 11, i: 74 }, D { l: 7, t: 10, i: 1535, }, D { l: 7, t: 11, i: 1627, }, D { l: 11, t: 11, i: 871, }, D { l: 140, t: 11, i: 619, }, D { l: 135, t: 0, i: 1920, }, D { l: 7, t: 11, i: 94 }, D { l: 11, t: 11, i: 329, }, D { l: 11, t: 11, i: 965, }, D { l: 12, t: 11, i: 241, }, D { l: 14, t: 11, i: 354, }, D { l: 15, t: 11, i: 22, }, D { l: 148, t: 11, i: 63, }, D { l: 9, t: 11, i: 209, }, D { l: 137, t: 11, i: 300, }, D { l: 134, t: 0, i: 771, }, D { l: 135, t: 0, i: 1979, }, D { l: 4, t: 0, i: 901 }, D { l: 133, t: 0, i: 776, }, D { l: 142, t: 0, i: 254, }, D { l: 133, t: 11, i: 98, }, D { l: 9, t: 11, i: 16 }, D { l: 141, t: 11, i: 386, }, D { l: 133, t: 11, i: 984, }, D { l: 4, t: 11, i: 182, }, D { l: 6, t: 11, i: 205, }, D { l: 135, t: 11, i: 220, }, D { l: 7, t: 10, i: 1725, }, D { l: 7, t: 10, i: 1774, }, D { l: 138, t: 10, i: 393, }, D { l: 5, t: 10, i: 263, }, D { l: 134, t: 10, i: 414, }, D { l: 4, t: 11, i: 42 }, D { l: 9, t: 11, i: 205, }, D { l: 9, t: 11, i: 786, }, D { l: 138, t: 11, i: 659, }, D { l: 14, t: 0, i: 140, }, D { l: 148, t: 0, i: 41, }, D { l: 8, t: 0, i: 440 }, D { l: 10, t: 0, i: 359, }, D { l: 6, t: 10, i: 178, }, D { l: 6, t: 11, i: 289, }, D { l: 6, t: 10, i: 1750, }, D { l: 7, t: 11, i: 1670, }, D { l: 9, t: 10, i: 690, }, D { l: 10, t: 10, i: 155, }, D { l: 10, t: 10, i: 373, }, D { l: 11, t: 10, i: 698, }, D { l: 12, t: 11, i: 57, }, D { l: 13, t: 10, i: 155, }, D { l: 20, t: 10, i: 93, }, D { l: 151, t: 11, i: 4, }, D { l: 4, t: 0, i: 37 }, D { l: 5, t: 0, i: 334 }, D { l: 7, t: 0, i: 1253, }, D { l: 151, t: 11, i: 25, }, D { l: 4, t: 0, i: 508 }, D { l: 4, t: 11, i: 635, }, D { l: 5, t: 10, i: 97 }, D { l: 137, t: 10, i: 393, }, D { l: 139, t: 11, i: 533, }, D { l: 4, t: 0, i: 640 }, D { l: 133, t: 0, i: 513, }, D { l: 134, t: 10, i: 1639, }, D { l: 132, t: 11, i: 371, }, D { l: 4, t: 11, i: 272, }, D { l: 7, t: 11, i: 836, }, D { l: 7, t: 11, i: 1651, }, D { l: 145, t: 11, i: 89, }, D { l: 5, t: 11, i: 825, }, D { l: 6, t: 11, i: 444, }, D { l: 6, t: 11, i: 1640, }, D { l: 136, t: 11, i: 308, }, D { l: 4, t: 10, i: 191, }, D { l: 7, t: 10, i: 934, }, D { l: 8, t: 10, i: 647, }, D { l: 145, t: 10, i: 97, }, D { l: 12, t: 0, i: 246, }, D { l: 15, t: 0, i: 162, }, D { l: 19, t: 0, i: 64 }, D { l: 20, t: 0, i: 8 }, D { l: 20, t: 0, i: 95 }, D { l: 22, t: 0, i: 24 }, D { l: 152, t: 0, i: 17, }, D { l: 4, t: 0, i: 533 }, D { l: 5, t: 10, i: 165, }, D { l: 9, t: 10, i: 346, }, D { l: 138, t: 10, i: 655, }, D { l: 5, t: 11, i: 737, }, D { l: 139, t: 10, i: 885, }, D { l: 133, t: 10, i: 877, }, D { l: 8, t: 10, i: 128, }, D { l: 139, t: 10, i: 179, }, D { l: 137, t: 11, i: 307, }, D { l: 140, t: 0, i: 752, }, D { l: 133, t: 0, i: 920, }, D { l: 135, t: 0, i: 1048, }, D { l: 5, t: 0, i: 153 }, D { l: 6, t: 0, i: 580 }, D { l: 6, t: 10, i: 1663, }, D { l: 7, t: 10, i: 132, }, D { l: 7, t: 10, i: 1154, }, D { l: 7, t: 10, i: 1415, }, D { l: 7, t: 10, i: 1507, }, D { l: 12, t: 10, i: 493, }, D { l: 15, t: 10, i: 105, }, D { l: 151, t: 10, i: 15, }, D { l: 5, t: 10, i: 459, }, D { l: 7, t: 10, i: 1073, }, D { l: 8, t: 10, i: 241, }, D { l: 136, t: 10, i: 334, }, D { l: 138, t: 0, i: 391, }, D { l: 135, t: 0, i: 1952, }, D { l: 133, t: 11, i: 525, }, D { l: 8, t: 11, i: 641, }, D { l: 11, t: 11, i: 388, }, D { l: 140, t: 11, i: 580, }, D { l: 142, t: 0, i: 126, }, D { l: 134, t: 0, i: 640, }, D { l: 132, t: 0, i: 483, }, D { l: 7, t: 0, i: 1616, }, D { l: 9, t: 0, i: 69 }, D { l: 6, t: 10, i: 324, }, D { l: 6, t: 10, i: 520, }, D { l: 7, t: 10, i: 338, }, D { l: 7, t: 10, i: 1729, }, D { l: 8, t: 10, i: 228, }, D { l: 139, t: 10, i: 750, }, D { l: 5, t: 11, i: 493, }, D { l: 134, t: 11, i: 528, }, D { l: 135, t: 0, i: 734, }, D { l: 4, t: 11, i: 174, }, D { l: 135, t: 11, i: 911, }, D { l: 138, t: 0, i: 480, }, D { l: 9, t: 0, i: 495 }, D { l: 146, t: 0, i: 104, }, D { l: 135, t: 10, i: 705, }, D { l: 9, t: 0, i: 472 }, D { l: 4, t: 10, i: 73 }, D { l: 6, t: 10, i: 612, }, D { l: 7, t: 10, i: 927, }, D { l: 7, t: 10, i: 1330, }, D { l: 7, t: 10, i: 1822, }, D { l: 8, t: 10, i: 217, }, D { l: 9, t: 10, i: 765, }, D { l: 9, t: 10, i: 766, }, D { l: 10, t: 10, i: 408, }, D { l: 11, t: 10, i: 51, }, D { l: 11, t: 10, i: 793, }, D { l: 12, t: 10, i: 266, }, D { l: 15, t: 10, i: 158, }, D { l: 20, t: 10, i: 89, }, D { l: 150, t: 10, i: 32, }, D { l: 7, t: 11, i: 548, }, D { l: 137, t: 11, i: 58, }, D { l: 4, t: 11, i: 32 }, D { l: 5, t: 11, i: 215, }, D { l: 6, t: 11, i: 269, }, D { l: 7, t: 11, i: 1782, }, D { l: 7, t: 11, i: 1892, }, D { l: 10, t: 11, i: 16, }, D { l: 11, t: 11, i: 822, }, D { l: 11, t: 11, i: 954, }, D { l: 141, t: 11, i: 481, }, D { l: 132, t: 0, i: 874, }, D { l: 9, t: 0, i: 229 }, D { l: 5, t: 10, i: 389, }, D { l: 136, t: 10, i: 636, }, D { l: 7, t: 11, i: 1749, }, D { l: 136, t: 11, i: 477, }, D { l: 134, t: 0, i: 948, }, D { l: 5, t: 11, i: 308, }, D { l: 135, t: 11, i: 1088, }, D { l: 4, t: 0, i: 748 }, D { l: 139, t: 0, i: 1009, }, D { l: 136, t: 10, i: 21, }, D { l: 6, t: 0, i: 555 }, D { l: 135, t: 0, i: 485, }, D { l: 5, t: 11, i: 126, }, D { l: 8, t: 11, i: 297, }, D { l: 9, t: 11, i: 366, }, D { l: 9, t: 11, i: 445, }, D { l: 12, t: 11, i: 53, }, D { l: 12, t: 11, i: 374, }, D { l: 141, t: 11, i: 492, }, D { l: 7, t: 11, i: 1551, }, D { l: 139, t: 11, i: 361, }, D { l: 136, t: 0, i: 193, }, D { l: 136, t: 0, i: 472, }, D { l: 8, t: 0, i: 653 }, D { l: 13, t: 0, i: 93 }, D { l: 147, t: 0, i: 14, }, D { l: 132, t: 0, i: 984, }, D { l: 132, t: 11, i: 175, }, D { l: 5, t: 0, i: 172 }, D { l: 6, t: 0, i: 1971, }, D { l: 132, t: 11, i: 685, }, D { l: 149, t: 11, i: 8, }, D { l: 133, t: 11, i: 797, }, D { l: 13, t: 0, i: 83 }, D { l: 5, t: 10, i: 189, }, D { l: 7, t: 10, i: 442, }, D { l: 7, t: 10, i: 443, }, D { l: 8, t: 10, i: 281, }, D { l: 12, t: 10, i: 174, }, D { l: 141, t: 10, i: 261, }, D { l: 134, t: 0, i: 1568, }, D { l: 133, t: 11, i: 565, }, D { l: 139, t: 0, i: 384, }, D { l: 133, t: 0, i: 260, }, D { l: 7, t: 0, i: 758 }, D { l: 7, t: 0, i: 880 }, D { l: 7, t: 0, i: 1359, }, D { l: 9, t: 0, i: 164 }, D { l: 9, t: 0, i: 167 }, D { l: 10, t: 0, i: 156, }, D { l: 10, t: 0, i: 588, }, D { l: 12, t: 0, i: 101, }, D { l: 14, t: 0, i: 48 }, D { l: 15, t: 0, i: 70 }, D { l: 6, t: 10, i: 2 }, D { l: 7, t: 10, i: 1262, }, D { l: 7, t: 10, i: 1737, }, D { l: 8, t: 10, i: 22 }, D { l: 8, t: 10, i: 270, }, D { l: 8, t: 10, i: 612, }, D { l: 9, t: 10, i: 312, }, D { l: 9, t: 10, i: 436, }, D { l: 10, t: 10, i: 311, }, D { l: 10, t: 10, i: 623, }, D { l: 11, t: 10, i: 72, }, D { l: 11, t: 10, i: 330, }, D { l: 11, t: 10, i: 455, }, D { l: 12, t: 10, i: 321, }, D { l: 12, t: 10, i: 504, }, D { l: 12, t: 10, i: 530, }, D { l: 12, t: 10, i: 543, }, D { l: 13, t: 10, i: 17, }, D { l: 13, t: 10, i: 156, }, D { l: 13, t: 10, i: 334, }, D { l: 17, t: 10, i: 60, }, D { l: 148, t: 10, i: 64, }, D { l: 4, t: 11, i: 252, }, D { l: 7, t: 11, i: 1068, }, D { l: 10, t: 11, i: 434, }, D { l: 11, t: 11, i: 228, }, D { l: 11, t: 11, i: 426, }, D { l: 13, t: 11, i: 231, }, D { l: 18, t: 11, i: 106, }, D { l: 148, t: 11, i: 87, }, D { l: 7, t: 10, i: 354, }, D { l: 10, t: 10, i: 410, }, D { l: 139, t: 10, i: 815, }, D { l: 6, t: 0, i: 367 }, D { l: 7, t: 10, i: 670, }, D { l: 7, t: 10, i: 1327, }, D { l: 8, t: 10, i: 411, }, D { l: 8, t: 10, i: 435, }, D { l: 9, t: 10, i: 653, }, D { l: 9, t: 10, i: 740, }, D { l: 10, t: 10, i: 385, }, D { l: 11, t: 10, i: 222, }, D { l: 11, t: 10, i: 324, }, D { l: 11, t: 10, i: 829, }, D { l: 140, t: 10, i: 611, }, D { l: 7, t: 0, i: 1174, }, D { l: 6, t: 10, i: 166, }, D { l: 135, t: 10, i: 374, }, D { l: 146, t: 0, i: 121, }, D { l: 132, t: 0, i: 828, }, D { l: 5, t: 11, i: 231, }, D { l: 138, t: 11, i: 509, }, D { l: 7, t: 11, i: 601, }, D { l: 9, t: 11, i: 277, }, D { l: 9, t: 11, i: 674, }, D { l: 10, t: 11, i: 178, }, D { l: 10, t: 11, i: 257, }, D { l: 10, t: 11, i: 418, }, D { l: 11, t: 11, i: 531, }, D { l: 11, t: 11, i: 544, }, D { l: 11, t: 11, i: 585, }, D { l: 12, t: 11, i: 113, }, D { l: 12, t: 11, i: 475, }, D { l: 13, t: 11, i: 99, }, D { l: 142, t: 11, i: 428, }, D { l: 134, t: 0, i: 1541, }, D { l: 135, t: 11, i: 1779, }, D { l: 5, t: 0, i: 343 }, D { l: 134, t: 10, i: 398, }, D { l: 135, t: 10, i: 50, }, D { l: 135, t: 11, i: 1683, }, D { l: 4, t: 0, i: 440 }, D { l: 7, t: 0, i: 57 }, D { l: 8, t: 0, i: 167 }, D { l: 8, t: 0, i: 375 }, D { l: 9, t: 0, i: 82 }, D { l: 9, t: 0, i: 561 }, D { l: 9, t: 0, i: 744 }, D { l: 10, t: 0, i: 620, }, D { l: 137, t: 11, i: 744, }, D { l: 134, t: 0, i: 926, }, D { l: 6, t: 10, i: 517, }, D { l: 7, t: 10, i: 1159, }, D { l: 10, t: 10, i: 621, }, D { l: 139, t: 10, i: 192, }, D { l: 137, t: 0, i: 827, }, D { l: 8, t: 0, i: 194 }, D { l: 136, t: 0, i: 756, }, D { l: 10, t: 10, i: 223, }, D { l: 139, t: 10, i: 645, }, D { l: 7, t: 10, i: 64 }, D { l: 136, t: 10, i: 245, }, D { l: 4, t: 11, i: 399, }, D { l: 5, t: 11, i: 119, }, D { l: 5, t: 11, i: 494, }, D { l: 7, t: 11, i: 751, }, D { l: 137, t: 11, i: 556, }, D { l: 132, t: 0, i: 808, }, D { l: 135, t: 0, i: 22, }, D { l: 7, t: 10, i: 1763, }, D { l: 140, t: 10, i: 310, }, D { l: 5, t: 0, i: 639 }, D { l: 7, t: 0, i: 1249, }, D { l: 11, t: 0, i: 896, }, D { l: 134, t: 11, i: 584, }, D { l: 134, t: 0, i: 1614, }, D { l: 135, t: 0, i: 860, }, D { l: 135, t: 11, i: 1121, }, D { l: 5, t: 10, i: 129, }, D { l: 6, t: 10, i: 61 }, D { l: 135, t: 10, i: 947, }, D { l: 4, t: 0, i: 102 }, D { l: 7, t: 0, i: 815 }, D { l: 7, t: 0, i: 1699, }, D { l: 139, t: 0, i: 964, }, D { l: 13, t: 10, i: 505, }, D { l: 141, t: 10, i: 506, }, D { l: 139, t: 10, i: 1000, }, D { l: 132, t: 11, i: 679, }, D { l: 132, t: 0, i: 899, }, D { l: 132, t: 0, i: 569, }, D { l: 5, t: 11, i: 694, }, D { l: 137, t: 11, i: 714, }, D { l: 136, t: 0, i: 795, }, D { l: 6, t: 0, i: 2045, }, D { l: 139, t: 11, i: 7, }, D { l: 6, t: 0, i: 52 }, D { l: 9, t: 0, i: 104 }, D { l: 9, t: 0, i: 559 }, D { l: 12, t: 0, i: 308, }, D { l: 147, t: 0, i: 87, }, D { l: 4, t: 0, i: 301 }, D { l: 132, t: 0, i: 604, }, D { l: 133, t: 10, i: 637, }, D { l: 136, t: 0, i: 779, }, D { l: 5, t: 11, i: 143, }, D { l: 5, t: 11, i: 769, }, D { l: 6, t: 11, i: 1760, }, D { l: 7, t: 11, i: 682, }, D { l: 7, t: 11, i: 1992, }, D { l: 136, t: 11, i: 736, }, D { l: 137, t: 10, i: 590, }, D { l: 147, t: 0, i: 32, }, D { l: 137, t: 11, i: 527, }, D { l: 5, t: 10, i: 280, }, D { l: 135, t: 10, i: 1226, }, D { l: 134, t: 0, i: 494, }, D { l: 6, t: 0, i: 677 }, D { l: 6, t: 0, i: 682 }, D { l: 134, t: 0, i: 1044, }, D { l: 133, t: 10, i: 281, }, D { l: 135, t: 10, i: 1064, }, D { l: 7, t: 0, i: 508 }, D { l: 133, t: 11, i: 860, }, D { l: 6, t: 11, i: 422, }, D { l: 7, t: 11, i: 0 }, D { l: 7, t: 11, i: 1544, }, D { l: 9, t: 11, i: 577, }, D { l: 11, t: 11, i: 990, }, D { l: 12, t: 11, i: 141, }, D { l: 12, t: 11, i: 453, }, D { l: 13, t: 11, i: 47, }, D { l: 141, t: 11, i: 266, }, D { l: 134, t: 0, i: 1014, }, D { l: 5, t: 11, i: 515, }, D { l: 137, t: 11, i: 131, }, D { l: 134, t: 0, i: 957, }, D { l: 132, t: 11, i: 646, }, D { l: 6, t: 0, i: 310 }, D { l: 7, t: 0, i: 1849, }, D { l: 8, t: 0, i: 72 }, D { l: 8, t: 0, i: 272 }, D { l: 8, t: 0, i: 431 }, D { l: 9, t: 0, i: 12 }, D { l: 9, t: 0, i: 376 }, D { l: 10, t: 0, i: 563, }, D { l: 10, t: 0, i: 630, }, D { l: 10, t: 0, i: 796, }, D { l: 10, t: 0, i: 810, }, D { l: 11, t: 0, i: 367, }, D { l: 11, t: 0, i: 599, }, D { l: 11, t: 0, i: 686, }, D { l: 140, t: 0, i: 672, }, D { l: 7, t: 0, i: 570 }, D { l: 4, t: 11, i: 396, }, D { l: 7, t: 10, i: 120, }, D { l: 7, t: 11, i: 728, }, D { l: 8, t: 10, i: 489, }, D { l: 9, t: 11, i: 117, }, D { l: 9, t: 10, i: 319, }, D { l: 10, t: 10, i: 820, }, D { l: 11, t: 10, i: 1004, }, D { l: 12, t: 10, i: 379, }, D { l: 12, t: 10, i: 679, }, D { l: 13, t: 10, i: 117, }, D { l: 13, t: 11, i: 202, }, D { l: 13, t: 10, i: 412, }, D { l: 14, t: 10, i: 25, }, D { l: 15, t: 10, i: 52, }, D { l: 15, t: 10, i: 161, }, D { l: 16, t: 10, i: 47, }, D { l: 20, t: 11, i: 51, }, D { l: 149, t: 10, i: 2, }, D { l: 6, t: 11, i: 121, }, D { l: 6, t: 11, i: 124, }, D { l: 6, t: 11, i: 357, }, D { l: 7, t: 11, i: 1138, }, D { l: 7, t: 11, i: 1295, }, D { l: 8, t: 11, i: 162, }, D { l: 139, t: 11, i: 655, }, D { l: 8, t: 0, i: 449 }, D { l: 4, t: 10, i: 937, }, D { l: 5, t: 10, i: 801, }, D { l: 136, t: 11, i: 449, }, D { l: 139, t: 11, i: 958, }, D { l: 6, t: 0, i: 181 }, D { l: 7, t: 0, i: 537 }, D { l: 8, t: 0, i: 64 }, D { l: 9, t: 0, i: 127 }, D { l: 10, t: 0, i: 496, }, D { l: 12, t: 0, i: 510, }, D { l: 141, t: 0, i: 384, }, D { l: 138, t: 11, i: 253, }, D { l: 4, t: 0, i: 244 }, D { l: 135, t: 0, i: 233, }, D { l: 133, t: 11, i: 237, }, D { l: 132, t: 10, i: 365, }, D { l: 6, t: 0, i: 1650, }, D { l: 10, t: 0, i: 702, }, D { l: 139, t: 0, i: 245, }, D { l: 5, t: 10, i: 7 }, D { l: 139, t: 10, i: 774, }, D { l: 13, t: 0, i: 463, }, D { l: 20, t: 0, i: 49 }, D { l: 13, t: 11, i: 463, }, D { l: 148, t: 11, i: 49, }, D { l: 4, t: 10, i: 734, }, D { l: 5, t: 10, i: 662, }, D { l: 134, t: 10, i: 430, }, D { l: 4, t: 10, i: 746, }, D { l: 135, t: 10, i: 1090, }, D { l: 5, t: 10, i: 360, }, D { l: 136, t: 10, i: 237, }, D { l: 137, t: 0, i: 338, }, D { l: 143, t: 11, i: 10, }, D { l: 7, t: 11, i: 571, }, D { l: 138, t: 11, i: 366, }, D { l: 134, t: 0, i: 1279, }, D { l: 9, t: 11, i: 513, }, D { l: 10, t: 11, i: 22, }, D { l: 10, t: 11, i: 39, }, D { l: 12, t: 11, i: 122, }, D { l: 140, t: 11, i: 187, }, D { l: 133, t: 0, i: 896, }, D { l: 146, t: 0, i: 178, }, D { l: 134, t: 0, i: 695, }, D { l: 137, t: 0, i: 808, }, D { l: 134, t: 11, i: 587, }, D { l: 7, t: 11, i: 107, }, D { l: 7, t: 11, i: 838, }, D { l: 8, t: 11, i: 550, }, D { l: 138, t: 11, i: 401, }, D { l: 7, t: 0, i: 1117, }, D { l: 136, t: 0, i: 539, }, D { l: 4, t: 10, i: 277, }, D { l: 5, t: 10, i: 608, }, D { l: 6, t: 10, i: 493, }, D { l: 7, t: 10, i: 457, }, D { l: 140, t: 10, i: 384, }, D { l: 133, t: 11, i: 768, }, D { l: 12, t: 0, i: 257, }, D { l: 7, t: 10, i: 27 }, D { l: 135, t: 10, i: 316, }, D { l: 140, t: 0, i: 1003, }, D { l: 4, t: 0, i: 207 }, D { l: 5, t: 0, i: 586 }, D { l: 5, t: 0, i: 676 }, D { l: 6, t: 0, i: 448 }, D { l: 8, t: 0, i: 244 }, D { l: 11, t: 0, i: 1 }, D { l: 13, t: 0, i: 3 }, D { l: 16, t: 0, i: 54 }, D { l: 17, t: 0, i: 4 }, D { l: 18, t: 0, i: 13 }, D { l: 133, t: 10, i: 552, }, D { l: 4, t: 10, i: 401, }, D { l: 137, t: 10, i: 264, }, D { l: 5, t: 0, i: 516 }, D { l: 7, t: 0, i: 1883, }, D { l: 135, t: 11, i: 1883, }, D { l: 12, t: 0, i: 960, }, D { l: 132, t: 11, i: 894, }, D { l: 5, t: 0, i: 4 }, D { l: 5, t: 0, i: 810 }, D { l: 6, t: 0, i: 13 }, D { l: 6, t: 0, i: 538 }, D { l: 6, t: 0, i: 1690, }, D { l: 6, t: 0, i: 1726, }, D { l: 7, t: 0, i: 499 }, D { l: 7, t: 0, i: 1819, }, D { l: 8, t: 0, i: 148 }, D { l: 8, t: 0, i: 696 }, D { l: 8, t: 0, i: 791 }, D { l: 12, t: 0, i: 125, }, D { l: 143, t: 0, i: 9 }, D { l: 135, t: 0, i: 1268, }, D { l: 11, t: 0, i: 30 }, D { l: 14, t: 0, i: 315, }, D { l: 9, t: 10, i: 543, }, D { l: 10, t: 10, i: 524, }, D { l: 12, t: 10, i: 524, }, D { l: 16, t: 10, i: 18, }, D { l: 20, t: 10, i: 26, }, D { l: 148, t: 10, i: 65, }, D { l: 6, t: 0, i: 748 }, D { l: 4, t: 10, i: 205, }, D { l: 5, t: 10, i: 623, }, D { l: 7, t: 10, i: 104, }, D { l: 136, t: 10, i: 519, }, D { l: 11, t: 0, i: 542, }, D { l: 139, t: 0, i: 852, }, D { l: 140, t: 0, i: 6 }, D { l: 132, t: 0, i: 848, }, D { l: 7, t: 0, i: 1385, }, D { l: 11, t: 0, i: 582, }, D { l: 11, t: 0, i: 650, }, D { l: 11, t: 0, i: 901, }, D { l: 11, t: 0, i: 949, }, D { l: 12, t: 0, i: 232, }, D { l: 12, t: 0, i: 236, }, D { l: 13, t: 0, i: 413, }, D { l: 13, t: 0, i: 501, }, D { l: 18, t: 0, i: 116, }, D { l: 7, t: 10, i: 579, }, D { l: 9, t: 10, i: 41 }, D { l: 9, t: 10, i: 244, }, D { l: 9, t: 10, i: 669, }, D { l: 10, t: 10, i: 5 }, D { l: 11, t: 10, i: 861, }, D { l: 11, t: 10, i: 951, }, D { l: 139, t: 10, i: 980, }, D { l: 4, t: 0, i: 945 }, D { l: 6, t: 0, i: 1811, }, D { l: 6, t: 0, i: 1845, }, D { l: 6, t: 0, i: 1853, }, D { l: 6, t: 0, i: 1858, }, D { l: 8, t: 0, i: 862 }, D { l: 12, t: 0, i: 782, }, D { l: 12, t: 0, i: 788, }, D { l: 18, t: 0, i: 160, }, D { l: 148, t: 0, i: 117, }, D { l: 132, t: 10, i: 717, }, D { l: 4, t: 0, i: 925 }, D { l: 5, t: 0, i: 803 }, D { l: 8, t: 0, i: 698 }, D { l: 138, t: 0, i: 828, }, D { l: 134, t: 0, i: 1416, }, D { l: 132, t: 0, i: 610, }, D { l: 139, t: 0, i: 992, }, D { l: 6, t: 0, i: 878 }, D { l: 134, t: 0, i: 1477, }, D { l: 135, t: 0, i: 1847, }, D { l: 138, t: 11, i: 531, }, D { l: 137, t: 11, i: 539, }, D { l: 134, t: 11, i: 272, }, D { l: 133, t: 0, i: 383, }, D { l: 134, t: 0, i: 1404, }, D { l: 132, t: 10, i: 489, }, D { l: 4, t: 11, i: 9 }, D { l: 5, t: 11, i: 128, }, D { l: 7, t: 11, i: 368, }, D { l: 11, t: 11, i: 480, }, D { l: 148, t: 11, i: 3, }, D { l: 136, t: 0, i: 986, }, D { l: 9, t: 0, i: 660 }, D { l: 138, t: 0, i: 347, }, D { l: 135, t: 10, i: 892, }, D { l: 136, t: 11, i: 682, }, D { l: 7, t: 0, i: 572 }, D { l: 9, t: 0, i: 592 }, D { l: 11, t: 0, i: 680, }, D { l: 12, t: 0, i: 356, }, D { l: 140, t: 0, i: 550, }, D { l: 7, t: 0, i: 1411, }, D { l: 138, t: 11, i: 527, }, D { l: 4, t: 11, i: 2 }, D { l: 7, t: 11, i: 545, }, D { l: 135, t: 11, i: 894, }, D { l: 137, t: 10, i: 473, }, D { l: 11, t: 0, i: 64 }, D { l: 7, t: 11, i: 481, }, D { l: 7, t: 10, i: 819, }, D { l: 9, t: 10, i: 26 }, D { l: 9, t: 10, i: 392, }, D { l: 9, t: 11, i: 792, }, D { l: 10, t: 10, i: 152, }, D { l: 10, t: 10, i: 226, }, D { l: 12, t: 10, i: 276, }, D { l: 12, t: 10, i: 426, }, D { l: 12, t: 10, i: 589, }, D { l: 13, t: 10, i: 460, }, D { l: 15, t: 10, i: 97, }, D { l: 19, t: 10, i: 48, }, D { l: 148, t: 10, i: 104, }, D { l: 135, t: 10, i: 51, }, D { l: 136, t: 11, i: 445, }, D { l: 136, t: 11, i: 646, }, D { l: 135, t: 0, i: 606, }, D { l: 132, t: 10, i: 674, }, D { l: 6, t: 0, i: 1829, }, D { l: 134, t: 0, i: 1830, }, D { l: 132, t: 10, i: 770, }, D { l: 5, t: 10, i: 79 }, D { l: 7, t: 10, i: 1027, }, D { l: 7, t: 10, i: 1477, }, D { l: 139, t: 10, i: 52, }, D { l: 5, t: 11, i: 530, }, D { l: 142, t: 11, i: 113, }, D { l: 134, t: 10, i: 1666, }, D { l: 7, t: 0, i: 748 }, D { l: 139, t: 0, i: 700, }, D { l: 134, t: 10, i: 195, }, D { l: 133, t: 10, i: 789, }, D { l: 9, t: 0, i: 87 }, D { l: 10, t: 0, i: 365, }, D { l: 4, t: 10, i: 251, }, D { l: 4, t: 10, i: 688, }, D { l: 7, t: 10, i: 513, }, D { l: 135, t: 10, i: 1284, }, D { l: 136, t: 11, i: 111, }, D { l: 133, t: 0, i: 127, }, D { l: 6, t: 0, i: 198 }, D { l: 140, t: 0, i: 83, }, D { l: 133, t: 11, i: 556, }, D { l: 133, t: 10, i: 889, }, D { l: 4, t: 10, i: 160, }, D { l: 5, t: 10, i: 330, }, D { l: 7, t: 10, i: 1434, }, D { l: 136, t: 10, i: 174, }, D { l: 5, t: 0, i: 276 }, D { l: 6, t: 0, i: 55 }, D { l: 7, t: 0, i: 1369, }, D { l: 138, t: 0, i: 864, }, D { l: 8, t: 11, i: 16 }, D { l: 140, t: 11, i: 568, }, D { l: 6, t: 0, i: 1752, }, D { l: 136, t: 0, i: 726, }, D { l: 135, t: 0, i: 1066, }, D { l: 133, t: 0, i: 764, }, D { l: 6, t: 11, i: 186, }, D { l: 137, t: 11, i: 426, }, D { l: 11, t: 0, i: 683, }, D { l: 139, t: 11, i: 683, }, D { l: 6, t: 0, i: 309 }, D { l: 7, t: 0, i: 331 }, D { l: 138, t: 0, i: 550, }, D { l: 133, t: 10, i: 374, }, D { l: 6, t: 0, i: 1212, }, D { l: 6, t: 0, i: 1852, }, D { l: 7, t: 0, i: 1062, }, D { l: 8, t: 0, i: 874 }, D { l: 8, t: 0, i: 882 }, D { l: 138, t: 0, i: 936, }, D { l: 132, t: 11, i: 585, }, D { l: 134, t: 0, i: 1364, }, D { l: 7, t: 0, i: 986 }, D { l: 133, t: 10, i: 731, }, D { l: 6, t: 0, i: 723 }, D { l: 6, t: 0, i: 1408, }, D { l: 138, t: 0, i: 381, }, D { l: 135, t: 0, i: 1573, }, D { l: 134, t: 0, i: 1025, }, D { l: 4, t: 10, i: 626, }, D { l: 5, t: 10, i: 642, }, D { l: 6, t: 10, i: 425, }, D { l: 10, t: 10, i: 202, }, D { l: 139, t: 10, i: 141, }, D { l: 4, t: 11, i: 93 }, D { l: 5, t: 11, i: 252, }, D { l: 6, t: 11, i: 229, }, D { l: 7, t: 11, i: 291, }, D { l: 9, t: 11, i: 550, }, D { l: 139, t: 11, i: 644, }, D { l: 137, t: 11, i: 749, }, D { l: 137, t: 11, i: 162, }, D { l: 132, t: 11, i: 381, }, D { l: 135, t: 0, i: 1559, }, D { l: 6, t: 0, i: 194 }, D { l: 7, t: 0, i: 133 }, D { l: 10, t: 0, i: 493, }, D { l: 10, t: 0, i: 570, }, D { l: 139, t: 0, i: 664, }, D { l: 5, t: 0, i: 24 }, D { l: 5, t: 0, i: 569 }, D { l: 6, t: 0, i: 3 }, D { l: 6, t: 0, i: 119 }, D { l: 6, t: 0, i: 143 }, D { l: 6, t: 0, i: 440 }, D { l: 7, t: 0, i: 295 }, D { l: 7, t: 0, i: 599 }, D { l: 7, t: 0, i: 1686, }, D { l: 7, t: 0, i: 1854, }, D { l: 8, t: 0, i: 424 }, D { l: 9, t: 0, i: 43 }, D { l: 9, t: 0, i: 584 }, D { l: 9, t: 0, i: 760 }, D { l: 10, t: 0, i: 148, }, D { l: 10, t: 0, i: 328, }, D { l: 11, t: 0, i: 159, }, D { l: 11, t: 0, i: 253, }, D { l: 11, t: 0, i: 506, }, D { l: 12, t: 0, i: 487, }, D { l: 140, t: 0, i: 531, }, D { l: 6, t: 0, i: 661 }, D { l: 134, t: 0, i: 1517, }, D { l: 136, t: 10, i: 835, }, D { l: 151, t: 10, i: 17, }, D { l: 5, t: 0, i: 14 }, D { l: 5, t: 0, i: 892 }, D { l: 6, t: 0, i: 283 }, D { l: 7, t: 0, i: 234 }, D { l: 136, t: 0, i: 537, }, D { l: 139, t: 0, i: 541, }, D { l: 4, t: 0, i: 126 }, D { l: 8, t: 0, i: 635 }, D { l: 147, t: 0, i: 34, }, D { l: 4, t: 0, i: 316 }, D { l: 4, t: 0, i: 495 }, D { l: 135, t: 0, i: 1561, }, D { l: 4, t: 11, i: 187, }, D { l: 5, t: 11, i: 184, }, D { l: 5, t: 11, i: 690, }, D { l: 7, t: 11, i: 1869, }, D { l: 138, t: 11, i: 756, }, D { l: 139, t: 11, i: 783, }, D { l: 4, t: 0, i: 998 }, D { l: 137, t: 0, i: 861, }, D { l: 136, t: 0, i: 1009, }, D { l: 139, t: 11, i: 292, }, D { l: 5, t: 11, i: 21 }, D { l: 6, t: 11, i: 77 }, D { l: 6, t: 11, i: 157, }, D { l: 7, t: 11, i: 974, }, D { l: 7, t: 11, i: 1301, }, D { l: 7, t: 11, i: 1339, }, D { l: 7, t: 11, i: 1490, }, D { l: 7, t: 11, i: 1873, }, D { l: 137, t: 11, i: 628, }, D { l: 7, t: 11, i: 1283, }, D { l: 9, t: 11, i: 227, }, D { l: 9, t: 11, i: 499, }, D { l: 10, t: 11, i: 341, }, D { l: 11, t: 11, i: 325, }, D { l: 11, t: 11, i: 408, }, D { l: 14, t: 11, i: 180, }, D { l: 15, t: 11, i: 144, }, D { l: 18, t: 11, i: 47, }, D { l: 147, t: 11, i: 49, }, D { l: 4, t: 0, i: 64 }, D { l: 5, t: 0, i: 352 }, D { l: 5, t: 0, i: 720 }, D { l: 6, t: 0, i: 368 }, D { l: 139, t: 0, i: 359, }, D { l: 5, t: 10, i: 384, }, D { l: 8, t: 10, i: 455, }, D { l: 140, t: 10, i: 48, }, D { l: 5, t: 10, i: 264, }, D { l: 134, t: 10, i: 184, }, D { l: 7, t: 0, i: 1577, }, D { l: 10, t: 0, i: 304, }, D { l: 10, t: 0, i: 549, }, D { l: 12, t: 0, i: 365, }, D { l: 13, t: 0, i: 220, }, D { l: 13, t: 0, i: 240, }, D { l: 142, t: 0, i: 33, }, D { l: 134, t: 0, i: 1107, }, D { l: 134, t: 0, i: 929, }, D { l: 135, t: 0, i: 1142, }, D { l: 6, t: 0, i: 175 }, D { l: 137, t: 0, i: 289, }, D { l: 5, t: 0, i: 432 }, D { l: 133, t: 0, i: 913, }, D { l: 6, t: 0, i: 279 }, D { l: 7, t: 0, i: 219 }, D { l: 5, t: 10, i: 633, }, D { l: 135, t: 10, i: 1323, }, D { l: 7, t: 0, i: 785 }, D { l: 7, t: 10, i: 359, }, D { l: 8, t: 10, i: 243, }, D { l: 140, t: 10, i: 175, }, D { l: 139, t: 0, i: 595, }, D { l: 132, t: 10, i: 105, }, D { l: 8, t: 11, i: 398, }, D { l: 9, t: 11, i: 681, }, D { l: 139, t: 11, i: 632, }, D { l: 140, t: 0, i: 80, }, D { l: 5, t: 0, i: 931 }, D { l: 134, t: 0, i: 1698, }, D { l: 142, t: 11, i: 241, }, D { l: 134, t: 11, i: 20, }, D { l: 134, t: 0, i: 1323, }, D { l: 11, t: 0, i: 526, }, D { l: 11, t: 0, i: 939, }, D { l: 141, t: 0, i: 290, }, D { l: 5, t: 0, i: 774 }, D { l: 6, t: 0, i: 780 }, D { l: 6, t: 0, i: 1637, }, D { l: 6, t: 0, i: 1686, }, D { l: 6, t: 0, i: 1751, }, D { l: 8, t: 0, i: 559 }, D { l: 141, t: 0, i: 109, }, D { l: 141, t: 0, i: 127, }, D { l: 7, t: 0, i: 1167, }, D { l: 11, t: 0, i: 934, }, D { l: 13, t: 0, i: 391, }, D { l: 17, t: 0, i: 76 }, D { l: 135, t: 11, i: 709, }, D { l: 135, t: 0, i: 963, }, D { l: 6, t: 0, i: 260 }, D { l: 135, t: 0, i: 1484, }, D { l: 134, t: 0, i: 573, }, D { l: 4, t: 10, i: 758, }, D { l: 139, t: 11, i: 941, }, D { l: 135, t: 10, i: 1649, }, D { l: 145, t: 11, i: 36, }, D { l: 4, t: 0, i: 292 }, D { l: 137, t: 0, i: 580, }, D { l: 4, t: 0, i: 736 }, D { l: 5, t: 0, i: 871 }, D { l: 6, t: 0, i: 1689, }, D { l: 135, t: 0, i: 1944, }, D { l: 7, t: 11, i: 945, }, D { l: 11, t: 11, i: 713, }, D { l: 139, t: 11, i: 744, }, D { l: 134, t: 0, i: 1164, }, D { l: 135, t: 11, i: 937, }, D { l: 6, t: 0, i: 1922, }, D { l: 9, t: 0, i: 982 }, D { l: 15, t: 0, i: 173, }, D { l: 15, t: 0, i: 178, }, D { l: 15, t: 0, i: 200, }, D { l: 18, t: 0, i: 189, }, D { l: 18, t: 0, i: 207, }, D { l: 21, t: 0, i: 47 }, D { l: 135, t: 11, i: 1652, }, D { l: 7, t: 0, i: 1695, }, D { l: 139, t: 10, i: 128, }, D { l: 6, t: 0, i: 63 }, D { l: 135, t: 0, i: 920, }, D { l: 133, t: 0, i: 793, }, D { l: 143, t: 11, i: 134, }, D { l: 133, t: 10, i: 918, }, D { l: 5, t: 0, i: 67 }, D { l: 6, t: 0, i: 62 }, D { l: 6, t: 0, i: 374 }, D { l: 135, t: 0, i: 1391, }, D { l: 9, t: 0, i: 790 }, D { l: 12, t: 0, i: 47 }, D { l: 4, t: 11, i: 579, }, D { l: 5, t: 11, i: 226, }, D { l: 5, t: 11, i: 323, }, D { l: 135, t: 11, i: 960, }, D { l: 10, t: 11, i: 784, }, D { l: 141, t: 11, i: 191, }, D { l: 4, t: 0, i: 391 }, D { l: 135, t: 0, i: 1169, }, D { l: 137, t: 0, i: 443, }, D { l: 13, t: 11, i: 232, }, D { l: 146, t: 11, i: 35, }, D { l: 132, t: 10, i: 340, }, D { l: 132, t: 0, i: 271, }, D { l: 137, t: 11, i: 313, }, D { l: 5, t: 11, i: 973, }, D { l: 137, t: 11, i: 659, }, D { l: 134, t: 0, i: 1140, }, D { l: 6, t: 11, i: 135, }, D { l: 135, t: 11, i: 1176, }, D { l: 4, t: 0, i: 253 }, D { l: 5, t: 0, i: 544 }, D { l: 7, t: 0, i: 300 }, D { l: 137, t: 0, i: 340, }, D { l: 7, t: 0, i: 897 }, D { l: 5, t: 10, i: 985, }, D { l: 7, t: 10, i: 509, }, D { l: 145, t: 10, i: 96, }, D { l: 138, t: 11, i: 735, }, D { l: 135, t: 10, i: 1919, }, D { l: 138, t: 0, i: 890, }, D { l: 5, t: 0, i: 818 }, D { l: 134, t: 0, i: 1122, }, D { l: 5, t: 0, i: 53 }, D { l: 5, t: 0, i: 541 }, D { l: 6, t: 0, i: 94 }, D { l: 6, t: 0, i: 499 }, D { l: 7, t: 0, i: 230 }, D { l: 139, t: 0, i: 321, }, D { l: 4, t: 0, i: 920 }, D { l: 5, t: 0, i: 25 }, D { l: 5, t: 0, i: 790 }, D { l: 6, t: 0, i: 457 }, D { l: 7, t: 0, i: 853 }, D { l: 8, t: 0, i: 788 }, D { l: 142, t: 11, i: 31, }, D { l: 132, t: 10, i: 247, }, D { l: 135, t: 11, i: 314, }, D { l: 132, t: 0, i: 468, }, D { l: 7, t: 0, i: 243 }, D { l: 6, t: 10, i: 337, }, D { l: 7, t: 10, i: 494, }, D { l: 8, t: 10, i: 27 }, D { l: 8, t: 10, i: 599, }, D { l: 138, t: 10, i: 153, }, D { l: 4, t: 10, i: 184, }, D { l: 5, t: 10, i: 390, }, D { l: 7, t: 10, i: 618, }, D { l: 7, t: 10, i: 1456, }, D { l: 139, t: 10, i: 710, }, D { l: 134, t: 0, i: 870, }, D { l: 134, t: 0, i: 1238, }, D { l: 134, t: 0, i: 1765, }, D { l: 10, t: 0, i: 853, }, D { l: 10, t: 0, i: 943, }, D { l: 14, t: 0, i: 437, }, D { l: 14, t: 0, i: 439, }, D { l: 14, t: 0, i: 443, }, D { l: 14, t: 0, i: 446, }, D { l: 14, t: 0, i: 452, }, D { l: 14, t: 0, i: 469, }, D { l: 14, t: 0, i: 471, }, D { l: 14, t: 0, i: 473, }, D { l: 16, t: 0, i: 93 }, D { l: 16, t: 0, i: 102, }, D { l: 16, t: 0, i: 110, }, D { l: 148, t: 0, i: 121, }, D { l: 4, t: 0, i: 605 }, D { l: 7, t: 0, i: 518 }, D { l: 7, t: 0, i: 1282, }, D { l: 7, t: 0, i: 1918, }, D { l: 10, t: 0, i: 180, }, D { l: 139, t: 0, i: 218, }, D { l: 133, t: 0, i: 822, }, D { l: 4, t: 0, i: 634 }, D { l: 11, t: 0, i: 916, }, D { l: 142, t: 0, i: 419, }, D { l: 6, t: 11, i: 281, }, D { l: 7, t: 11, i: 6 }, D { l: 8, t: 11, i: 282, }, D { l: 8, t: 11, i: 480, }, D { l: 8, t: 11, i: 499, }, D { l: 9, t: 11, i: 198, }, D { l: 10, t: 11, i: 143, }, D { l: 10, t: 11, i: 169, }, D { l: 10, t: 11, i: 211, }, D { l: 10, t: 11, i: 417, }, D { l: 10, t: 11, i: 574, }, D { l: 11, t: 11, i: 147, }, D { l: 11, t: 11, i: 395, }, D { l: 12, t: 11, i: 75, }, D { l: 12, t: 11, i: 407, }, D { l: 12, t: 11, i: 608, }, D { l: 13, t: 11, i: 500, }, D { l: 142, t: 11, i: 251, }, D { l: 134, t: 0, i: 898, }, D { l: 6, t: 0, i: 36 }, D { l: 7, t: 0, i: 658 }, D { l: 8, t: 0, i: 454 }, D { l: 150, t: 11, i: 48, }, D { l: 133, t: 11, i: 674, }, D { l: 135, t: 11, i: 1776, }, D { l: 4, t: 11, i: 419, }, D { l: 10, t: 10, i: 227, }, D { l: 11, t: 10, i: 497, }, D { l: 11, t: 10, i: 709, }, D { l: 140, t: 10, i: 415, }, D { l: 6, t: 10, i: 360, }, D { l: 7, t: 10, i: 1664, }, D { l: 136, t: 10, i: 478, }, D { l: 137, t: 0, i: 806, }, D { l: 12, t: 11, i: 508, }, D { l: 14, t: 11, i: 102, }, D { l: 14, t: 11, i: 226, }, D { l: 144, t: 11, i: 57, }, D { l: 135, t: 11, i: 1123, }, D { l: 4, t: 11, i: 138, }, D { l: 7, t: 11, i: 1012, }, D { l: 7, t: 11, i: 1280, }, D { l: 137, t: 11, i: 76, }, D { l: 5, t: 11, i: 29 }, D { l: 140, t: 11, i: 638, }, D { l: 136, t: 10, i: 699, }, D { l: 134, t: 0, i: 1326, }, D { l: 132, t: 0, i: 104, }, D { l: 135, t: 11, i: 735, }, D { l: 132, t: 10, i: 739, }, D { l: 134, t: 0, i: 1331, }, D { l: 7, t: 0, i: 260 }, D { l: 135, t: 11, i: 260, }, D { l: 135, t: 11, i: 1063, }, D { l: 7, t: 0, i: 45 }, D { l: 9, t: 0, i: 542 }, D { l: 9, t: 0, i: 566 }, D { l: 10, t: 0, i: 728, }, D { l: 137, t: 10, i: 869, }, D { l: 4, t: 10, i: 67 }, D { l: 5, t: 10, i: 422, }, D { l: 7, t: 10, i: 1037, }, D { l: 7, t: 10, i: 1289, }, D { l: 7, t: 10, i: 1555, }, D { l: 9, t: 10, i: 741, }, D { l: 145, t: 10, i: 108, }, D { l: 139, t: 0, i: 263, }, D { l: 134, t: 0, i: 1516, }, D { l: 14, t: 0, i: 146, }, D { l: 15, t: 0, i: 42 }, D { l: 16, t: 0, i: 23 }, D { l: 17, t: 0, i: 86 }, D { l: 146, t: 0, i: 17, }, D { l: 138, t: 0, i: 468, }, D { l: 136, t: 0, i: 1005, }, D { l: 4, t: 11, i: 17 }, D { l: 5, t: 11, i: 23 }, D { l: 7, t: 11, i: 995, }, D { l: 11, t: 11, i: 383, }, D { l: 11, t: 11, i: 437, }, D { l: 12, t: 11, i: 460, }, D { l: 140, t: 11, i: 532, }, D { l: 7, t: 0, i: 87 }, D { l: 142, t: 0, i: 288, }, D { l: 138, t: 10, i: 96, }, D { l: 135, t: 11, i: 626, }, D { l: 144, t: 10, i: 26, }, D { l: 7, t: 0, i: 988 }, D { l: 7, t: 0, i: 1939, }, D { l: 9, t: 0, i: 64 }, D { l: 9, t: 0, i: 502 }, D { l: 12, t: 0, i: 22 }, D { l: 12, t: 0, i: 34 }, D { l: 13, t: 0, i: 12 }, D { l: 13, t: 0, i: 234, }, D { l: 147, t: 0, i: 77, }, D { l: 13, t: 0, i: 133, }, D { l: 8, t: 10, i: 203, }, D { l: 11, t: 10, i: 823, }, D { l: 11, t: 10, i: 846, }, D { l: 12, t: 10, i: 482, }, D { l: 13, t: 10, i: 277, }, D { l: 13, t: 10, i: 302, }, D { l: 13, t: 10, i: 464, }, D { l: 14, t: 10, i: 205, }, D { l: 142, t: 10, i: 221, }, D { l: 4, t: 10, i: 449, }, D { l: 133, t: 10, i: 718, }, D { l: 135, t: 0, i: 141, }, D { l: 6, t: 0, i: 1842, }, D { l: 136, t: 0, i: 872, }, D { l: 8, t: 11, i: 70 }, D { l: 12, t: 11, i: 171, }, D { l: 141, t: 11, i: 272, }, D { l: 4, t: 10, i: 355, }, D { l: 6, t: 10, i: 311, }, D { l: 9, t: 10, i: 256, }, D { l: 138, t: 10, i: 404, }, D { l: 132, t: 0, i: 619, }, D { l: 137, t: 0, i: 261, }, D { l: 10, t: 11, i: 233, }, D { l: 10, t: 10, i: 758, }, D { l: 139, t: 11, i: 76, }, D { l: 5, t: 0, i: 246 }, D { l: 8, t: 0, i: 189 }, D { l: 9, t: 0, i: 355 }, D { l: 9, t: 0, i: 512 }, D { l: 10, t: 0, i: 124, }, D { l: 10, t: 0, i: 453, }, D { l: 11, t: 0, i: 143, }, D { l: 11, t: 0, i: 416, }, D { l: 11, t: 0, i: 859, }, D { l: 141, t: 0, i: 341, }, D { l: 134, t: 11, i: 442, }, D { l: 133, t: 10, i: 827, }, D { l: 5, t: 10, i: 64 }, D { l: 140, t: 10, i: 581, }, D { l: 4, t: 10, i: 442, }, D { l: 7, t: 10, i: 1047, }, D { l: 7, t: 10, i: 1352, }, D { l: 135, t: 10, i: 1643, }, D { l: 134, t: 11, i: 1709, }, D { l: 5, t: 0, i: 678 }, D { l: 6, t: 0, i: 305 }, D { l: 7, t: 0, i: 775 }, D { l: 7, t: 0, i: 1065, }, D { l: 133, t: 10, i: 977, }, D { l: 11, t: 11, i: 69, }, D { l: 12, t: 11, i: 105, }, D { l: 12, t: 11, i: 117, }, D { l: 13, t: 11, i: 213, }, D { l: 14, t: 11, i: 13, }, D { l: 14, t: 11, i: 62, }, D { l: 14, t: 11, i: 177, }, D { l: 14, t: 11, i: 421, }, D { l: 15, t: 11, i: 19, }, D { l: 146, t: 11, i: 141, }, D { l: 137, t: 11, i: 309, }, D { l: 5, t: 0, i: 35 }, D { l: 7, t: 0, i: 862 }, D { l: 7, t: 0, i: 1886, }, D { l: 138, t: 0, i: 179, }, D { l: 136, t: 0, i: 285, }, D { l: 132, t: 0, i: 517, }, D { l: 7, t: 11, i: 976, }, D { l: 9, t: 11, i: 146, }, D { l: 10, t: 11, i: 206, }, D { l: 10, t: 11, i: 596, }, D { l: 13, t: 11, i: 218, }, D { l: 142, t: 11, i: 153, }, D { l: 132, t: 10, i: 254, }, D { l: 6, t: 0, i: 214 }, D { l: 12, t: 0, i: 540, }, D { l: 4, t: 10, i: 275, }, D { l: 7, t: 10, i: 1219, }, D { l: 140, t: 10, i: 376, }, D { l: 8, t: 0, i: 667 }, D { l: 11, t: 0, i: 403, }, D { l: 146, t: 0, i: 83, }, D { l: 12, t: 0, i: 74 }, D { l: 10, t: 11, i: 648, }, D { l: 11, t: 11, i: 671, }, D { l: 143, t: 11, i: 46, }, D { l: 135, t: 0, i: 125, }, D { l: 134, t: 10, i: 1753, }, D { l: 133, t: 0, i: 761, }, D { l: 6, t: 0, i: 912 }, D { l: 4, t: 11, i: 518, }, D { l: 6, t: 10, i: 369, }, D { l: 6, t: 10, i: 502, }, D { l: 7, t: 10, i: 1036, }, D { l: 7, t: 11, i: 1136, }, D { l: 8, t: 10, i: 348, }, D { l: 9, t: 10, i: 452, }, D { l: 10, t: 10, i: 26, }, D { l: 11, t: 10, i: 224, }, D { l: 11, t: 10, i: 387, }, D { l: 11, t: 10, i: 772, }, D { l: 12, t: 10, i: 95, }, D { l: 12, t: 10, i: 629, }, D { l: 13, t: 10, i: 195, }, D { l: 13, t: 10, i: 207, }, D { l: 13, t: 10, i: 241, }, D { l: 14, t: 10, i: 260, }, D { l: 14, t: 10, i: 270, }, D { l: 143, t: 10, i: 140, }, D { l: 10, t: 0, i: 131, }, D { l: 140, t: 0, i: 72, }, D { l: 132, t: 10, i: 269, }, D { l: 5, t: 10, i: 480, }, D { l: 7, t: 10, i: 532, }, D { l: 7, t: 10, i: 1197, }, D { l: 7, t: 10, i: 1358, }, D { l: 8, t: 10, i: 291, }, D { l: 11, t: 10, i: 349, }, D { l: 142, t: 10, i: 396, }, D { l: 8, t: 11, i: 689, }, D { l: 137, t: 11, i: 863, }, D { l: 8, t: 0, i: 333 }, D { l: 138, t: 0, i: 182, }, D { l: 4, t: 11, i: 18 }, D { l: 7, t: 11, i: 145, }, D { l: 7, t: 11, i: 444, }, D { l: 7, t: 11, i: 1278, }, D { l: 8, t: 11, i: 49 }, D { l: 8, t: 11, i: 400, }, D { l: 9, t: 11, i: 71 }, D { l: 9, t: 11, i: 250, }, D { l: 10, t: 11, i: 459, }, D { l: 12, t: 11, i: 160, }, D { l: 144, t: 11, i: 24, }, D { l: 14, t: 11, i: 35, }, D { l: 142, t: 11, i: 191, }, D { l: 135, t: 11, i: 1864, }, D { l: 135, t: 0, i: 1338, }, D { l: 148, t: 10, i: 15, }, D { l: 14, t: 0, i: 94 }, D { l: 15, t: 0, i: 65 }, D { l: 16, t: 0, i: 4 }, D { l: 16, t: 0, i: 77 }, D { l: 16, t: 0, i: 80 }, D { l: 145, t: 0, i: 5 }, D { l: 12, t: 11, i: 82, }, D { l: 143, t: 11, i: 36, }, D { l: 133, t: 11, i: 1010, }, D { l: 133, t: 0, i: 449, }, D { l: 133, t: 0, i: 646, }, D { l: 7, t: 0, i: 86 }, D { l: 8, t: 0, i: 103 }, D { l: 135, t: 10, i: 657, }, D { l: 7, t: 0, i: 2028, }, D { l: 138, t: 0, i: 641, }, D { l: 136, t: 10, i: 533, }, D { l: 134, t: 0, i: 1 }, D { l: 139, t: 11, i: 970, }, D { l: 5, t: 11, i: 87 }, D { l: 7, t: 11, i: 313, }, D { l: 7, t: 11, i: 1103, }, D { l: 10, t: 11, i: 112, }, D { l: 10, t: 11, i: 582, }, D { l: 11, t: 11, i: 389, }, D { l: 11, t: 11, i: 813, }, D { l: 12, t: 11, i: 385, }, D { l: 13, t: 11, i: 286, }, D { l: 14, t: 11, i: 124, }, D { l: 146, t: 11, i: 108, }, D { l: 6, t: 0, i: 869 }, D { l: 132, t: 11, i: 267, }, D { l: 6, t: 0, i: 277 }, D { l: 7, t: 0, i: 1274, }, D { l: 7, t: 0, i: 1386, }, D { l: 146, t: 0, i: 87, }, D { l: 6, t: 0, i: 187 }, D { l: 7, t: 0, i: 39 }, D { l: 7, t: 0, i: 1203, }, D { l: 8, t: 0, i: 380 }, D { l: 14, t: 0, i: 117, }, D { l: 149, t: 0, i: 28, }, D { l: 4, t: 10, i: 211, }, D { l: 4, t: 10, i: 332, }, D { l: 5, t: 10, i: 335, }, D { l: 6, t: 10, i: 238, }, D { l: 7, t: 10, i: 269, }, D { l: 7, t: 10, i: 811, }, D { l: 7, t: 10, i: 1797, }, D { l: 8, t: 10, i: 836, }, D { l: 9, t: 10, i: 507, }, D { l: 141, t: 10, i: 242, }, D { l: 4, t: 0, i: 785 }, D { l: 5, t: 0, i: 368 }, D { l: 6, t: 0, i: 297 }, D { l: 7, t: 0, i: 793 }, D { l: 139, t: 0, i: 938, }, D { l: 7, t: 0, i: 464 }, D { l: 8, t: 0, i: 558 }, D { l: 11, t: 0, i: 105, }, D { l: 12, t: 0, i: 231, }, D { l: 14, t: 0, i: 386, }, D { l: 15, t: 0, i: 102, }, D { l: 148, t: 0, i: 75, }, D { l: 133, t: 10, i: 1009, }, D { l: 8, t: 0, i: 877 }, D { l: 140, t: 0, i: 731, }, D { l: 139, t: 11, i: 289, }, D { l: 10, t: 11, i: 249, }, D { l: 139, t: 11, i: 209, }, D { l: 132, t: 11, i: 561, }, D { l: 134, t: 0, i: 1608, }, D { l: 132, t: 11, i: 760, }, D { l: 134, t: 0, i: 1429, }, D { l: 9, t: 11, i: 154, }, D { l: 140, t: 11, i: 485, }, D { l: 5, t: 10, i: 228, }, D { l: 6, t: 10, i: 203, }, D { l: 7, t: 10, i: 156, }, D { l: 8, t: 10, i: 347, }, D { l: 137, t: 10, i: 265, }, D { l: 7, t: 0, i: 1010, }, D { l: 11, t: 0, i: 733, }, D { l: 11, t: 0, i: 759, }, D { l: 13, t: 0, i: 34 }, D { l: 14, t: 0, i: 427, }, D { l: 146, t: 0, i: 45, }, D { l: 7, t: 10, i: 1131, }, D { l: 135, t: 10, i: 1468, }, D { l: 136, t: 11, i: 255, }, D { l: 7, t: 0, i: 1656, }, D { l: 9, t: 0, i: 369 }, D { l: 10, t: 0, i: 338, }, D { l: 10, t: 0, i: 490, }, D { l: 11, t: 0, i: 154, }, D { l: 11, t: 0, i: 545, }, D { l: 11, t: 0, i: 775, }, D { l: 13, t: 0, i: 77 }, D { l: 141, t: 0, i: 274, }, D { l: 133, t: 11, i: 621, }, D { l: 134, t: 0, i: 1038, }, D { l: 4, t: 11, i: 368, }, D { l: 135, t: 11, i: 641, }, D { l: 6, t: 0, i: 2010, }, D { l: 8, t: 0, i: 979 }, D { l: 8, t: 0, i: 985 }, D { l: 10, t: 0, i: 951, }, D { l: 138, t: 0, i: 1011, }, D { l: 134, t: 0, i: 1005, }, D { l: 19, t: 0, i: 121, }, D { l: 5, t: 10, i: 291, }, D { l: 5, t: 10, i: 318, }, D { l: 7, t: 10, i: 765, }, D { l: 9, t: 10, i: 389, }, D { l: 140, t: 10, i: 548, }, D { l: 5, t: 0, i: 20 }, D { l: 6, t: 0, i: 298 }, D { l: 7, t: 0, i: 659 }, D { l: 137, t: 0, i: 219, }, D { l: 7, t: 0, i: 1440, }, D { l: 11, t: 0, i: 854, }, D { l: 11, t: 0, i: 872, }, D { l: 11, t: 0, i: 921, }, D { l: 12, t: 0, i: 551, }, D { l: 13, t: 0, i: 472, }, D { l: 142, t: 0, i: 367, }, D { l: 5, t: 0, i: 490 }, D { l: 6, t: 0, i: 615 }, D { l: 6, t: 0, i: 620 }, D { l: 135, t: 0, i: 683, }, D { l: 6, t: 0, i: 1070, }, D { l: 134, t: 0, i: 1597, }, D { l: 139, t: 0, i: 522, }, D { l: 132, t: 0, i: 439, }, D { l: 136, t: 0, i: 669, }, D { l: 6, t: 0, i: 766 }, D { l: 6, t: 0, i: 1143, }, D { l: 6, t: 0, i: 1245, }, D { l: 10, t: 10, i: 525, }, D { l: 139, t: 10, i: 82, }, D { l: 9, t: 11, i: 92 }, D { l: 147, t: 11, i: 91, }, D { l: 6, t: 0, i: 668 }, D { l: 134, t: 0, i: 1218, }, D { l: 6, t: 11, i: 525, }, D { l: 9, t: 11, i: 876, }, D { l: 140, t: 11, i: 284, }, D { l: 132, t: 0, i: 233, }, D { l: 136, t: 0, i: 547, }, D { l: 132, t: 10, i: 422, }, D { l: 5, t: 10, i: 355, }, D { l: 145, t: 10, i: 0, }, D { l: 6, t: 11, i: 300, }, D { l: 135, t: 11, i: 1515, }, D { l: 4, t: 0, i: 482 }, D { l: 137, t: 10, i: 905, }, D { l: 4, t: 0, i: 886 }, D { l: 7, t: 0, i: 346 }, D { l: 133, t: 11, i: 594, }, D { l: 133, t: 10, i: 865, }, D { l: 5, t: 10, i: 914, }, D { l: 134, t: 10, i: 1625, }, D { l: 135, t: 0, i: 334, }, D { l: 5, t: 0, i: 795 }, D { l: 6, t: 0, i: 1741, }, D { l: 133, t: 10, i: 234, }, D { l: 135, t: 10, i: 1383, }, D { l: 6, t: 11, i: 1641, }, D { l: 136, t: 11, i: 820, }, D { l: 135, t: 0, i: 371, }, D { l: 7, t: 11, i: 1313, }, D { l: 138, t: 11, i: 660, }, D { l: 135, t: 10, i: 1312, }, D { l: 135, t: 0, i: 622, }, D { l: 7, t: 0, i: 625 }, D { l: 135, t: 0, i: 1750, }, D { l: 135, t: 0, i: 339, }, D { l: 4, t: 0, i: 203 }, D { l: 135, t: 0, i: 1936, }, D { l: 15, t: 0, i: 29 }, D { l: 16, t: 0, i: 38 }, D { l: 15, t: 11, i: 29, }, D { l: 144, t: 11, i: 38, }, D { l: 5, t: 0, i: 338 }, D { l: 135, t: 0, i: 1256, }, D { l: 135, t: 10, i: 1493, }, D { l: 10, t: 0, i: 130, }, D { l: 6, t: 10, i: 421, }, D { l: 7, t: 10, i: 61 }, D { l: 7, t: 10, i: 1540, }, D { l: 138, t: 10, i: 501, }, D { l: 6, t: 11, i: 389, }, D { l: 7, t: 11, i: 149, }, D { l: 9, t: 11, i: 142, }, D { l: 138, t: 11, i: 94, }, D { l: 137, t: 10, i: 341, }, D { l: 11, t: 0, i: 678, }, D { l: 12, t: 0, i: 307, }, D { l: 142, t: 10, i: 98, }, D { l: 6, t: 11, i: 8 }, D { l: 7, t: 11, i: 1881, }, D { l: 136, t: 11, i: 91, }, D { l: 135, t: 0, i: 2044, }, D { l: 6, t: 0, i: 770 }, D { l: 6, t: 0, i: 802 }, D { l: 6, t: 0, i: 812 }, D { l: 7, t: 0, i: 311 }, D { l: 9, t: 0, i: 308 }, D { l: 12, t: 0, i: 255, }, D { l: 6, t: 10, i: 102, }, D { l: 7, t: 10, i: 72 }, D { l: 15, t: 10, i: 142, }, D { l: 147, t: 10, i: 67, }, D { l: 151, t: 10, i: 30, }, D { l: 135, t: 10, i: 823, }, D { l: 135, t: 0, i: 1266, }, D { l: 135, t: 11, i: 1746, }, D { l: 135, t: 10, i: 1870, }, D { l: 4, t: 0, i: 400 }, D { l: 5, t: 0, i: 267 }, D { l: 135, t: 0, i: 232, }, D { l: 7, t: 11, i: 24 }, D { l: 11, t: 11, i: 542, }, D { l: 139, t: 11, i: 852, }, D { l: 135, t: 11, i: 1739, }, D { l: 4, t: 11, i: 503, }, D { l: 135, t: 11, i: 1661, }, D { l: 5, t: 11, i: 130, }, D { l: 7, t: 11, i: 1314, }, D { l: 9, t: 11, i: 610, }, D { l: 10, t: 11, i: 718, }, D { l: 11, t: 11, i: 601, }, D { l: 11, t: 11, i: 819, }, D { l: 11, t: 11, i: 946, }, D { l: 140, t: 11, i: 536, }, D { l: 10, t: 11, i: 149, }, D { l: 11, t: 11, i: 280, }, D { l: 142, t: 11, i: 336, }, D { l: 7, t: 0, i: 739 }, D { l: 11, t: 0, i: 690, }, D { l: 7, t: 11, i: 1946, }, D { l: 8, t: 10, i: 48 }, D { l: 8, t: 10, i: 88 }, D { l: 8, t: 10, i: 582, }, D { l: 8, t: 10, i: 681, }, D { l: 9, t: 10, i: 373, }, D { l: 9, t: 10, i: 864, }, D { l: 11, t: 10, i: 157, }, D { l: 11, t: 10, i: 843, }, D { l: 148, t: 10, i: 27, }, D { l: 134, t: 0, i: 990, }, D { l: 4, t: 10, i: 88 }, D { l: 5, t: 10, i: 137, }, D { l: 5, t: 10, i: 174, }, D { l: 5, t: 10, i: 777, }, D { l: 6, t: 10, i: 1664, }, D { l: 6, t: 10, i: 1725, }, D { l: 7, t: 10, i: 77 }, D { l: 7, t: 10, i: 426, }, D { l: 7, t: 10, i: 1317, }, D { l: 7, t: 10, i: 1355, }, D { l: 8, t: 10, i: 126, }, D { l: 8, t: 10, i: 563, }, D { l: 9, t: 10, i: 523, }, D { l: 9, t: 10, i: 750, }, D { l: 10, t: 10, i: 310, }, D { l: 10, t: 10, i: 836, }, D { l: 11, t: 10, i: 42, }, D { l: 11, t: 10, i: 318, }, D { l: 11, t: 10, i: 731, }, D { l: 12, t: 10, i: 68, }, D { l: 12, t: 10, i: 92, }, D { l: 12, t: 10, i: 507, }, D { l: 12, t: 10, i: 692, }, D { l: 13, t: 10, i: 81, }, D { l: 13, t: 10, i: 238, }, D { l: 13, t: 10, i: 374, }, D { l: 14, t: 10, i: 436, }, D { l: 18, t: 10, i: 138, }, D { l: 19, t: 10, i: 78, }, D { l: 19, t: 10, i: 111, }, D { l: 20, t: 10, i: 55, }, D { l: 20, t: 10, i: 77, }, D { l: 148, t: 10, i: 92, }, D { l: 141, t: 10, i: 418, }, D { l: 7, t: 0, i: 1831, }, D { l: 132, t: 10, i: 938, }, D { l: 6, t: 0, i: 776 }, D { l: 134, t: 0, i: 915, }, D { l: 138, t: 10, i: 351, }, D { l: 5, t: 11, i: 348, }, D { l: 6, t: 11, i: 522, }, D { l: 6, t: 10, i: 1668, }, D { l: 7, t: 10, i: 1499, }, D { l: 8, t: 10, i: 117, }, D { l: 9, t: 10, i: 314, }, D { l: 138, t: 10, i: 174, }, D { l: 135, t: 10, i: 707, }, D { l: 132, t: 0, i: 613, }, D { l: 133, t: 10, i: 403, }, D { l: 132, t: 11, i: 392, }, D { l: 5, t: 11, i: 433, }, D { l: 9, t: 11, i: 633, }, D { l: 139, t: 11, i: 629, }, D { l: 133, t: 0, i: 763, }, D { l: 132, t: 0, i: 878, }, D { l: 132, t: 0, i: 977, }, D { l: 132, t: 0, i: 100, }, D { l: 6, t: 0, i: 463 }, D { l: 4, t: 10, i: 44 }, D { l: 5, t: 10, i: 311, }, D { l: 7, t: 10, i: 639, }, D { l: 7, t: 10, i: 762, }, D { l: 7, t: 10, i: 1827, }, D { l: 9, t: 10, i: 8 }, D { l: 9, t: 10, i: 462, }, D { l: 148, t: 10, i: 83, }, D { l: 134, t: 11, i: 234, }, D { l: 4, t: 10, i: 346, }, D { l: 7, t: 10, i: 115, }, D { l: 9, t: 10, i: 180, }, D { l: 9, t: 10, i: 456, }, D { l: 138, t: 10, i: 363, }, D { l: 5, t: 0, i: 362 }, D { l: 5, t: 0, i: 443 }, D { l: 6, t: 0, i: 318 }, D { l: 7, t: 0, i: 1019, }, D { l: 139, t: 0, i: 623, }, D { l: 5, t: 0, i: 463 }, D { l: 8, t: 0, i: 296 }, D { l: 7, t: 11, i: 140, }, D { l: 7, t: 11, i: 1950, }, D { l: 8, t: 11, i: 680, }, D { l: 11, t: 11, i: 817, }, D { l: 147, t: 11, i: 88, }, D { l: 7, t: 11, i: 1222, }, D { l: 138, t: 11, i: 386, }, D { l: 142, t: 0, i: 137, }, D { l: 132, t: 0, i: 454, }, D { l: 7, t: 0, i: 1914, }, D { l: 6, t: 11, i: 5 }, D { l: 7, t: 10, i: 1051, }, D { l: 9, t: 10, i: 545, }, D { l: 11, t: 11, i: 249, }, D { l: 12, t: 11, i: 313, }, D { l: 16, t: 11, i: 66, }, D { l: 145, t: 11, i: 26, }, D { l: 135, t: 0, i: 1527, }, D { l: 145, t: 0, i: 58, }, D { l: 148, t: 11, i: 59, }, D { l: 5, t: 0, i: 48 }, D { l: 5, t: 0, i: 404 }, D { l: 6, t: 0, i: 557 }, D { l: 7, t: 0, i: 458 }, D { l: 8, t: 0, i: 597 }, D { l: 10, t: 0, i: 455, }, D { l: 10, t: 0, i: 606, }, D { l: 11, t: 0, i: 49 }, D { l: 11, t: 0, i: 548, }, D { l: 12, t: 0, i: 476, }, D { l: 13, t: 0, i: 18 }, D { l: 141, t: 0, i: 450, }, D { l: 5, t: 11, i: 963, }, D { l: 134, t: 11, i: 1773, }, D { l: 133, t: 0, i: 729, }, D { l: 138, t: 11, i: 586, }, D { l: 5, t: 0, i: 442 }, D { l: 135, t: 0, i: 1984, }, D { l: 134, t: 0, i: 449, }, D { l: 144, t: 0, i: 40, }, D { l: 4, t: 0, i: 853 }, D { l: 7, t: 11, i: 180, }, D { l: 8, t: 11, i: 509, }, D { l: 136, t: 11, i: 792, }, D { l: 6, t: 10, i: 185, }, D { l: 7, t: 10, i: 1899, }, D { l: 9, t: 10, i: 875, }, D { l: 139, t: 10, i: 673, }, D { l: 134, t: 11, i: 524, }, D { l: 12, t: 0, i: 227, }, D { l: 4, t: 10, i: 327, }, D { l: 5, t: 10, i: 478, }, D { l: 7, t: 10, i: 1332, }, D { l: 136, t: 10, i: 753, }, D { l: 6, t: 0, i: 1491, }, D { l: 5, t: 10, i: 1020, }, D { l: 133, t: 10, i: 1022, }, D { l: 4, t: 10, i: 103, }, D { l: 133, t: 10, i: 401, }, D { l: 132, t: 11, i: 931, }, D { l: 4, t: 10, i: 499, }, D { l: 135, t: 10, i: 1421, }, D { l: 5, t: 0, i: 55 }, D { l: 7, t: 0, i: 376 }, D { l: 140, t: 0, i: 161, }, D { l: 133, t: 0, i: 450, }, D { l: 6, t: 0, i: 1174, }, D { l: 134, t: 0, i: 1562, }, D { l: 10, t: 0, i: 62 }, D { l: 13, t: 0, i: 400, }, D { l: 135, t: 11, i: 1837, }, D { l: 140, t: 0, i: 207, }, D { l: 135, t: 0, i: 869, }, D { l: 4, t: 11, i: 773, }, D { l: 5, t: 11, i: 618, }, D { l: 137, t: 11, i: 756, }, D { l: 132, t: 10, i: 96, }, D { l: 4, t: 0, i: 213 }, D { l: 7, t: 0, i: 223 }, D { l: 8, t: 0, i: 80 }, D { l: 135, t: 10, i: 968, }, D { l: 4, t: 11, i: 90 }, D { l: 5, t: 11, i: 337, }, D { l: 5, t: 11, i: 545, }, D { l: 7, t: 11, i: 754, }, D { l: 9, t: 11, i: 186, }, D { l: 10, t: 11, i: 72, }, D { l: 10, t: 11, i: 782, }, D { l: 11, t: 11, i: 513, }, D { l: 11, t: 11, i: 577, }, D { l: 11, t: 11, i: 610, }, D { l: 11, t: 11, i: 889, }, D { l: 11, t: 11, i: 961, }, D { l: 12, t: 11, i: 354, }, D { l: 12, t: 11, i: 362, }, D { l: 12, t: 11, i: 461, }, D { l: 12, t: 11, i: 595, }, D { l: 13, t: 11, i: 79, }, D { l: 143, t: 11, i: 121, }, D { l: 7, t: 0, i: 381 }, D { l: 7, t: 0, i: 806 }, D { l: 7, t: 0, i: 820 }, D { l: 8, t: 0, i: 354 }, D { l: 8, t: 0, i: 437 }, D { l: 8, t: 0, i: 787 }, D { l: 9, t: 0, i: 657 }, D { l: 10, t: 0, i: 58 }, D { l: 10, t: 0, i: 339, }, D { l: 10, t: 0, i: 749, }, D { l: 11, t: 0, i: 914, }, D { l: 12, t: 0, i: 162, }, D { l: 13, t: 0, i: 75 }, D { l: 14, t: 0, i: 106, }, D { l: 14, t: 0, i: 198, }, D { l: 14, t: 0, i: 320, }, D { l: 14, t: 0, i: 413, }, D { l: 146, t: 0, i: 43, }, D { l: 136, t: 0, i: 747, }, D { l: 136, t: 0, i: 954, }, D { l: 134, t: 0, i: 1073, }, D { l: 135, t: 0, i: 556, }, D { l: 7, t: 11, i: 151, }, D { l: 9, t: 11, i: 329, }, D { l: 139, t: 11, i: 254, }, D { l: 5, t: 0, i: 692 }, D { l: 134, t: 0, i: 1395, }, D { l: 6, t: 10, i: 563, }, D { l: 137, t: 10, i: 224, }, D { l: 134, t: 0, i: 191, }, D { l: 132, t: 0, i: 804, }, D { l: 9, t: 11, i: 187, }, D { l: 10, t: 11, i: 36, }, D { l: 17, t: 11, i: 44, }, D { l: 146, t: 11, i: 64, }, D { l: 7, t: 11, i: 165, }, D { l: 7, t: 11, i: 919, }, D { l: 136, t: 11, i: 517, }, D { l: 4, t: 11, i: 506, }, D { l: 5, t: 11, i: 295, }, D { l: 7, t: 11, i: 1680, }, D { l: 15, t: 11, i: 14, }, D { l: 144, t: 11, i: 5, }, D { l: 4, t: 0, i: 706 }, D { l: 6, t: 0, i: 162 }, D { l: 7, t: 0, i: 1960, }, D { l: 136, t: 0, i: 831, }, D { l: 135, t: 11, i: 1376, }, D { l: 7, t: 11, i: 987, }, D { l: 9, t: 11, i: 688, }, D { l: 10, t: 11, i: 522, }, D { l: 11, t: 11, i: 788, }, D { l: 140, t: 11, i: 566, }, D { l: 150, t: 0, i: 35, }, D { l: 138, t: 0, i: 426, }, D { l: 135, t: 0, i: 1235, }, D { l: 135, t: 11, i: 1741, }, D { l: 7, t: 11, i: 389, }, D { l: 7, t: 11, i: 700, }, D { l: 7, t: 11, i: 940, }, D { l: 8, t: 11, i: 514, }, D { l: 9, t: 11, i: 116, }, D { l: 9, t: 11, i: 535, }, D { l: 10, t: 11, i: 118, }, D { l: 11, t: 11, i: 107, }, D { l: 11, t: 11, i: 148, }, D { l: 11, t: 11, i: 922, }, D { l: 12, t: 11, i: 254, }, D { l: 12, t: 11, i: 421, }, D { l: 142, t: 11, i: 238, }, D { l: 134, t: 0, i: 1234, }, D { l: 132, t: 11, i: 743, }, D { l: 4, t: 10, i: 910, }, D { l: 5, t: 10, i: 832, }, D { l: 135, t: 11, i: 1335, }, D { l: 141, t: 0, i: 96, }, D { l: 135, t: 11, i: 185, }, D { l: 146, t: 0, i: 149, }, D { l: 4, t: 0, i: 204 }, D { l: 137, t: 0, i: 902, }, D { l: 4, t: 11, i: 784, }, D { l: 133, t: 11, i: 745, }, D { l: 136, t: 0, i: 833, }, D { l: 136, t: 0, i: 949, }, D { l: 7, t: 0, i: 366 }, D { l: 9, t: 0, i: 287 }, D { l: 12, t: 0, i: 199, }, D { l: 12, t: 0, i: 556, }, D { l: 12, t: 0, i: 577, }, D { l: 5, t: 11, i: 81 }, D { l: 7, t: 11, i: 146, }, D { l: 7, t: 11, i: 1342, }, D { l: 7, t: 11, i: 1446, }, D { l: 8, t: 11, i: 53 }, D { l: 8, t: 11, i: 561, }, D { l: 8, t: 11, i: 694, }, D { l: 8, t: 11, i: 754, }, D { l: 9, t: 11, i: 97 }, D { l: 9, t: 11, i: 115, }, D { l: 9, t: 11, i: 894, }, D { l: 10, t: 11, i: 462, }, D { l: 10, t: 11, i: 813, }, D { l: 11, t: 11, i: 230, }, D { l: 11, t: 11, i: 657, }, D { l: 11, t: 11, i: 699, }, D { l: 11, t: 11, i: 748, }, D { l: 12, t: 11, i: 119, }, D { l: 12, t: 11, i: 200, }, D { l: 12, t: 11, i: 283, }, D { l: 14, t: 11, i: 273, }, D { l: 145, t: 11, i: 15, }, D { l: 5, t: 11, i: 408, }, D { l: 137, t: 11, i: 747, }, D { l: 9, t: 11, i: 498, }, D { l: 140, t: 11, i: 181, }, D { l: 6, t: 0, i: 2020, }, D { l: 136, t: 0, i: 992, }, D { l: 5, t: 0, i: 356 }, D { l: 135, t: 0, i: 224, }, D { l: 134, t: 0, i: 784, }, D { l: 7, t: 0, i: 630 }, D { l: 9, t: 0, i: 567 }, D { l: 11, t: 0, i: 150, }, D { l: 11, t: 0, i: 444, }, D { l: 13, t: 0, i: 119, }, D { l: 8, t: 10, i: 528, }, D { l: 137, t: 10, i: 348, }, D { l: 134, t: 0, i: 539, }, D { l: 4, t: 10, i: 20 }, D { l: 133, t: 10, i: 616, }, D { l: 142, t: 0, i: 27, }, D { l: 7, t: 11, i: 30 }, D { l: 8, t: 11, i: 86 }, D { l: 8, t: 11, i: 315, }, D { l: 8, t: 11, i: 700, }, D { l: 9, t: 11, i: 576, }, D { l: 9, t: 11, i: 858, }, D { l: 11, t: 11, i: 310, }, D { l: 11, t: 11, i: 888, }, D { l: 11, t: 11, i: 904, }, D { l: 12, t: 11, i: 361, }, D { l: 141, t: 11, i: 248, }, D { l: 138, t: 11, i: 839, }, D { l: 134, t: 0, i: 755, }, D { l: 134, t: 0, i: 1063, }, D { l: 7, t: 10, i: 1091, }, D { l: 135, t: 10, i: 1765, }, D { l: 134, t: 11, i: 428, }, D { l: 7, t: 11, i: 524, }, D { l: 8, t: 11, i: 169, }, D { l: 8, t: 11, i: 234, }, D { l: 9, t: 11, i: 480, }, D { l: 138, t: 11, i: 646, }, D { l: 139, t: 0, i: 814, }, D { l: 7, t: 11, i: 1462, }, D { l: 139, t: 11, i: 659, }, D { l: 4, t: 10, i: 26 }, D { l: 5, t: 10, i: 429, }, D { l: 6, t: 10, i: 245, }, D { l: 7, t: 10, i: 704, }, D { l: 7, t: 10, i: 1379, }, D { l: 135, t: 10, i: 1474, }, D { l: 7, t: 11, i: 1205, }, D { l: 138, t: 11, i: 637, }, D { l: 139, t: 11, i: 803, }, D { l: 132, t: 10, i: 621, }, D { l: 136, t: 0, i: 987, }, D { l: 4, t: 11, i: 266, }, D { l: 8, t: 11, i: 4 }, D { l: 9, t: 11, i: 39 }, D { l: 10, t: 11, i: 166, }, D { l: 11, t: 11, i: 918, }, D { l: 12, t: 11, i: 635, }, D { l: 20, t: 11, i: 10, }, D { l: 22, t: 11, i: 27, }, D { l: 150, t: 11, i: 43, }, D { l: 4, t: 0, i: 235 }, D { l: 135, t: 0, i: 255, }, D { l: 4, t: 0, i: 194 }, D { l: 5, t: 0, i: 584 }, D { l: 6, t: 0, i: 384 }, D { l: 7, t: 0, i: 583 }, D { l: 10, t: 0, i: 761, }, D { l: 11, t: 0, i: 760, }, D { l: 139, t: 0, i: 851, }, D { l: 133, t: 10, i: 542, }, D { l: 134, t: 0, i: 1086, }, D { l: 133, t: 10, i: 868, }, D { l: 8, t: 0, i: 1016, }, D { l: 136, t: 0, i: 1018, }, D { l: 7, t: 0, i: 1396, }, D { l: 7, t: 11, i: 1396, }, D { l: 136, t: 10, i: 433, }, D { l: 135, t: 10, i: 1495, }, D { l: 138, t: 10, i: 215, }, D { l: 141, t: 10, i: 124, }, D { l: 7, t: 11, i: 157, }, D { l: 8, t: 11, i: 279, }, D { l: 9, t: 11, i: 759, }, D { l: 16, t: 11, i: 31, }, D { l: 16, t: 11, i: 39, }, D { l: 16, t: 11, i: 75, }, D { l: 18, t: 11, i: 24, }, D { l: 20, t: 11, i: 42, }, D { l: 152, t: 11, i: 1, }, D { l: 5, t: 0, i: 562 }, D { l: 134, t: 11, i: 604, }, D { l: 134, t: 0, i: 913, }, D { l: 5, t: 0, i: 191 }, D { l: 137, t: 0, i: 271, }, D { l: 4, t: 0, i: 470 }, D { l: 6, t: 0, i: 153 }, D { l: 7, t: 0, i: 1503, }, D { l: 7, t: 0, i: 1923, }, D { l: 10, t: 0, i: 701, }, D { l: 11, t: 0, i: 132, }, D { l: 11, t: 0, i: 227, }, D { l: 11, t: 0, i: 320, }, D { l: 11, t: 0, i: 436, }, D { l: 11, t: 0, i: 525, }, D { l: 11, t: 0, i: 855, }, D { l: 11, t: 0, i: 873, }, D { l: 12, t: 0, i: 41 }, D { l: 12, t: 0, i: 286, }, D { l: 13, t: 0, i: 103, }, D { l: 13, t: 0, i: 284, }, D { l: 14, t: 0, i: 255, }, D { l: 14, t: 0, i: 262, }, D { l: 15, t: 0, i: 117, }, D { l: 143, t: 0, i: 127, }, D { l: 7, t: 0, i: 475 }, D { l: 12, t: 0, i: 45 }, D { l: 147, t: 10, i: 112, }, D { l: 132, t: 11, i: 567, }, D { l: 137, t: 11, i: 859, }, D { l: 6, t: 0, i: 713 }, D { l: 6, t: 0, i: 969 }, D { l: 6, t: 0, i: 1290, }, D { l: 134, t: 0, i: 1551, }, D { l: 133, t: 0, i: 327, }, D { l: 6, t: 0, i: 552 }, D { l: 6, t: 0, i: 1292, }, D { l: 7, t: 0, i: 1754, }, D { l: 137, t: 0, i: 604, }, D { l: 4, t: 0, i: 223 }, D { l: 6, t: 0, i: 359 }, D { l: 11, t: 0, i: 3 }, D { l: 13, t: 0, i: 108, }, D { l: 14, t: 0, i: 89 }, D { l: 16, t: 0, i: 22 }, D { l: 5, t: 11, i: 762, }, D { l: 7, t: 11, i: 1880, }, D { l: 9, t: 11, i: 680, }, D { l: 139, t: 11, i: 798, }, D { l: 5, t: 0, i: 80 }, D { l: 6, t: 0, i: 405 }, D { l: 7, t: 0, i: 403 }, D { l: 7, t: 0, i: 1502, }, D { l: 8, t: 0, i: 456 }, D { l: 9, t: 0, i: 487 }, D { l: 9, t: 0, i: 853 }, D { l: 9, t: 0, i: 889 }, D { l: 10, t: 0, i: 309, }, D { l: 11, t: 0, i: 721, }, D { l: 11, t: 0, i: 994, }, D { l: 12, t: 0, i: 430, }, D { l: 141, t: 0, i: 165, }, D { l: 133, t: 11, i: 298, }, D { l: 132, t: 10, i: 647, }, D { l: 134, t: 0, i: 2016, }, D { l: 18, t: 10, i: 10, }, D { l: 146, t: 11, i: 10, }, D { l: 4, t: 0, i: 453 }, D { l: 5, t: 0, i: 887 }, D { l: 6, t: 0, i: 535 }, D { l: 8, t: 0, i: 6 }, D { l: 8, t: 0, i: 543 }, D { l: 136, t: 0, i: 826, }, D { l: 136, t: 0, i: 975, }, D { l: 10, t: 0, i: 961, }, D { l: 138, t: 0, i: 962, }, D { l: 138, t: 10, i: 220, }, D { l: 6, t: 0, i: 1891, }, D { l: 6, t: 0, i: 1893, }, D { l: 9, t: 0, i: 916 }, D { l: 9, t: 0, i: 965 }, D { l: 9, t: 0, i: 972 }, D { l: 12, t: 0, i: 801, }, D { l: 12, t: 0, i: 859, }, D { l: 12, t: 0, i: 883, }, D { l: 15, t: 0, i: 226, }, D { l: 149, t: 0, i: 51, }, D { l: 132, t: 10, i: 109, }, D { l: 135, t: 11, i: 267, }, D { l: 7, t: 11, i: 92 }, D { l: 7, t: 11, i: 182, }, D { l: 8, t: 11, i: 453, }, D { l: 9, t: 11, i: 204, }, D { l: 11, t: 11, i: 950, }, D { l: 12, t: 11, i: 94, }, D { l: 12, t: 11, i: 644, }, D { l: 16, t: 11, i: 20, }, D { l: 16, t: 11, i: 70, }, D { l: 16, t: 11, i: 90, }, D { l: 147, t: 11, i: 55, }, D { l: 134, t: 10, i: 1746, }, D { l: 6, t: 11, i: 71 }, D { l: 7, t: 11, i: 845, }, D { l: 7, t: 11, i: 1308, }, D { l: 8, t: 11, i: 160, }, D { l: 137, t: 11, i: 318, }, D { l: 5, t: 0, i: 101 }, D { l: 6, t: 0, i: 88 }, D { l: 7, t: 0, i: 263 }, D { l: 7, t: 0, i: 628 }, D { l: 7, t: 0, i: 1677, }, D { l: 8, t: 0, i: 349 }, D { l: 9, t: 0, i: 100 }, D { l: 10, t: 0, i: 677, }, D { l: 14, t: 0, i: 169, }, D { l: 14, t: 0, i: 302, }, D { l: 14, t: 0, i: 313, }, D { l: 15, t: 0, i: 48 }, D { l: 15, t: 0, i: 84 }, D { l: 7, t: 11, i: 237, }, D { l: 8, t: 11, i: 664, }, D { l: 9, t: 11, i: 42 }, D { l: 9, t: 11, i: 266, }, D { l: 9, t: 11, i: 380, }, D { l: 9, t: 11, i: 645, }, D { l: 10, t: 11, i: 177, }, D { l: 138, t: 11, i: 276, }, D { l: 138, t: 11, i: 69, }, D { l: 4, t: 0, i: 310 }, D { l: 7, t: 0, i: 708 }, D { l: 7, t: 0, i: 996 }, D { l: 9, t: 0, i: 795 }, D { l: 10, t: 0, i: 390, }, D { l: 10, t: 0, i: 733, }, D { l: 11, t: 0, i: 451, }, D { l: 12, t: 0, i: 249, }, D { l: 14, t: 0, i: 115, }, D { l: 14, t: 0, i: 286, }, D { l: 143, t: 0, i: 100, }, D { l: 5, t: 0, i: 587 }, D { l: 4, t: 10, i: 40 }, D { l: 10, t: 10, i: 67, }, D { l: 11, t: 10, i: 117, }, D { l: 11, t: 10, i: 768, }, D { l: 139, t: 10, i: 935, }, D { l: 6, t: 0, i: 1942, }, D { l: 7, t: 0, i: 512 }, D { l: 136, t: 0, i: 983, }, D { l: 7, t: 10, i: 992, }, D { l: 8, t: 10, i: 301, }, D { l: 9, t: 10, i: 722, }, D { l: 12, t: 10, i: 63, }, D { l: 13, t: 10, i: 29, }, D { l: 14, t: 10, i: 161, }, D { l: 143, t: 10, i: 18, }, D { l: 136, t: 11, i: 76, }, D { l: 139, t: 10, i: 923, }, D { l: 134, t: 0, i: 645, }, D { l: 134, t: 0, i: 851, }, D { l: 4, t: 0, i: 498 }, D { l: 132, t: 11, i: 293, }, D { l: 7, t: 0, i: 217 }, D { l: 8, t: 0, i: 140 }, D { l: 10, t: 0, i: 610, }, D { l: 14, t: 11, i: 352, }, D { l: 17, t: 11, i: 53, }, D { l: 18, t: 11, i: 146, }, D { l: 18, t: 11, i: 152, }, D { l: 19, t: 11, i: 11, }, D { l: 150, t: 11, i: 54, }, D { l: 134, t: 0, i: 1448, }, D { l: 138, t: 11, i: 841, }, D { l: 133, t: 0, i: 905, }, D { l: 4, t: 11, i: 605, }, D { l: 7, t: 11, i: 518, }, D { l: 7, t: 11, i: 1282, }, D { l: 7, t: 11, i: 1918, }, D { l: 10, t: 11, i: 180, }, D { l: 139, t: 11, i: 218, }, D { l: 139, t: 11, i: 917, }, D { l: 135, t: 10, i: 825, }, D { l: 140, t: 10, i: 328, }, D { l: 4, t: 0, i: 456 }, D { l: 7, t: 0, i: 105 }, D { l: 7, t: 0, i: 358 }, D { l: 7, t: 0, i: 1637, }, D { l: 8, t: 0, i: 643 }, D { l: 139, t: 0, i: 483, }, D { l: 134, t: 0, i: 792, }, D { l: 6, t: 11, i: 96 }, D { l: 135, t: 11, i: 1426, }, D { l: 137, t: 11, i: 691, }, D { l: 4, t: 11, i: 651, }, D { l: 133, t: 11, i: 289, }, D { l: 7, t: 11, i: 688, }, D { l: 8, t: 11, i: 35 }, D { l: 9, t: 11, i: 511, }, D { l: 10, t: 11, i: 767, }, D { l: 147, t: 11, i: 118, }, D { l: 150, t: 0, i: 56, }, D { l: 5, t: 0, i: 243 }, D { l: 5, t: 0, i: 535 }, D { l: 6, t: 10, i: 204, }, D { l: 10, t: 10, i: 320, }, D { l: 10, t: 10, i: 583, }, D { l: 13, t: 10, i: 502, }, D { l: 14, t: 10, i: 72, }, D { l: 14, t: 10, i: 274, }, D { l: 14, t: 10, i: 312, }, D { l: 14, t: 10, i: 344, }, D { l: 15, t: 10, i: 159, }, D { l: 16, t: 10, i: 62, }, D { l: 16, t: 10, i: 69, }, D { l: 17, t: 10, i: 30, }, D { l: 18, t: 10, i: 42, }, D { l: 18, t: 10, i: 53, }, D { l: 18, t: 10, i: 84, }, D { l: 18, t: 10, i: 140, }, D { l: 19, t: 10, i: 68, }, D { l: 19, t: 10, i: 85, }, D { l: 20, t: 10, i: 5 }, D { l: 20, t: 10, i: 45, }, D { l: 20, t: 10, i: 101, }, D { l: 22, t: 10, i: 7 }, D { l: 150, t: 10, i: 20, }, D { l: 4, t: 10, i: 558, }, D { l: 6, t: 10, i: 390, }, D { l: 7, t: 10, i: 162, }, D { l: 7, t: 10, i: 689, }, D { l: 9, t: 10, i: 360, }, D { l: 138, t: 10, i: 653, }, D { l: 146, t: 11, i: 23, }, D { l: 135, t: 0, i: 1748, }, D { l: 5, t: 10, i: 856, }, D { l: 6, t: 10, i: 1672, }, D { l: 6, t: 10, i: 1757, }, D { l: 134, t: 10, i: 1781, }, D { l: 5, t: 0, i: 539 }, D { l: 5, t: 0, i: 754 }, D { l: 6, t: 0, i: 876 }, D { l: 132, t: 11, i: 704, }, D { l: 135, t: 11, i: 1078, }, D { l: 5, t: 10, i: 92 }, D { l: 10, t: 10, i: 736, }, D { l: 140, t: 10, i: 102, }, D { l: 17, t: 0, i: 91 }, D { l: 5, t: 10, i: 590, }, D { l: 137, t: 10, i: 213, }, D { l: 134, t: 0, i: 1565, }, D { l: 6, t: 0, i: 91 }, D { l: 135, t: 0, i: 435, }, D { l: 4, t: 0, i: 939 }, D { l: 140, t: 0, i: 792, }, D { l: 134, t: 0, i: 1399, }, D { l: 4, t: 0, i: 16 }, D { l: 5, t: 0, i: 316 }, D { l: 5, t: 0, i: 842 }, D { l: 6, t: 0, i: 370 }, D { l: 6, t: 0, i: 1778, }, D { l: 8, t: 0, i: 166 }, D { l: 11, t: 0, i: 812, }, D { l: 12, t: 0, i: 206, }, D { l: 12, t: 0, i: 351, }, D { l: 14, t: 0, i: 418, }, D { l: 16, t: 0, i: 15 }, D { l: 16, t: 0, i: 34 }, D { l: 18, t: 0, i: 3 }, D { l: 19, t: 0, i: 3 }, D { l: 19, t: 0, i: 7 }, D { l: 20, t: 0, i: 4 }, D { l: 21, t: 0, i: 21 }, D { l: 4, t: 11, i: 720, }, D { l: 133, t: 11, i: 306, }, D { l: 144, t: 0, i: 95, }, D { l: 133, t: 11, i: 431, }, D { l: 132, t: 11, i: 234, }, D { l: 135, t: 0, i: 551, }, D { l: 4, t: 0, i: 999 }, D { l: 6, t: 0, i: 1966, }, D { l: 134, t: 0, i: 2042, }, D { l: 7, t: 0, i: 619 }, D { l: 10, t: 0, i: 547, }, D { l: 11, t: 0, i: 122, }, D { l: 12, t: 0, i: 601, }, D { l: 15, t: 0, i: 7 }, D { l: 148, t: 0, i: 20, }, D { l: 5, t: 11, i: 464, }, D { l: 6, t: 11, i: 236, }, D { l: 7, t: 11, i: 276, }, D { l: 7, t: 11, i: 696, }, D { l: 7, t: 11, i: 914, }, D { l: 7, t: 11, i: 1108, }, D { l: 7, t: 11, i: 1448, }, D { l: 9, t: 11, i: 15 }, D { l: 9, t: 11, i: 564, }, D { l: 10, t: 11, i: 14, }, D { l: 12, t: 11, i: 565, }, D { l: 13, t: 11, i: 449, }, D { l: 14, t: 11, i: 53, }, D { l: 15, t: 11, i: 13, }, D { l: 16, t: 11, i: 64, }, D { l: 145, t: 11, i: 41, }, D { l: 6, t: 0, i: 884 }, D { l: 6, t: 0, i: 1019, }, D { l: 134, t: 0, i: 1150, }, D { l: 6, t: 11, i: 1767, }, D { l: 12, t: 11, i: 194, }, D { l: 145, t: 11, i: 107, }, D { l: 136, t: 10, i: 503, }, D { l: 133, t: 11, i: 840, }, D { l: 7, t: 0, i: 671 }, D { l: 134, t: 10, i: 466, }, D { l: 132, t: 0, i: 888, }, D { l: 4, t: 0, i: 149 }, D { l: 138, t: 0, i: 368, }, D { l: 4, t: 0, i: 154 }, D { l: 7, t: 0, i: 1134, }, D { l: 136, t: 0, i: 105, }, D { l: 135, t: 0, i: 983, }, D { l: 9, t: 11, i: 642, }, D { l: 11, t: 11, i: 236, }, D { l: 142, t: 11, i: 193, }, D { l: 4, t: 0, i: 31 }, D { l: 6, t: 0, i: 429 }, D { l: 7, t: 0, i: 962 }, D { l: 9, t: 0, i: 458 }, D { l: 139, t: 0, i: 691, }, D { l: 6, t: 0, i: 643 }, D { l: 134, t: 0, i: 1102, }, D { l: 132, t: 0, i: 312, }, D { l: 4, t: 11, i: 68 }, D { l: 5, t: 11, i: 634, }, D { l: 6, t: 11, i: 386, }, D { l: 7, t: 11, i: 794, }, D { l: 8, t: 11, i: 273, }, D { l: 9, t: 11, i: 563, }, D { l: 10, t: 11, i: 105, }, D { l: 10, t: 11, i: 171, }, D { l: 11, t: 11, i: 94, }, D { l: 139, t: 11, i: 354, }, D { l: 133, t: 0, i: 740, }, D { l: 135, t: 0, i: 1642, }, D { l: 4, t: 11, i: 95 }, D { l: 7, t: 11, i: 416, }, D { l: 8, t: 11, i: 211, }, D { l: 139, t: 11, i: 830, }, D { l: 132, t: 0, i: 236, }, D { l: 138, t: 10, i: 241, }, D { l: 7, t: 11, i: 731, }, D { l: 13, t: 11, i: 20, }, D { l: 143, t: 11, i: 11, }, D { l: 5, t: 0, i: 836 }, D { l: 5, t: 0, i: 857 }, D { l: 6, t: 0, i: 1680, }, D { l: 135, t: 0, i: 59, }, D { l: 10, t: 0, i: 68 }, D { l: 11, t: 0, i: 494, }, D { l: 152, t: 11, i: 6, }, D { l: 4, t: 0, i: 81 }, D { l: 139, t: 0, i: 867, }, D { l: 135, t: 0, i: 795, }, D { l: 133, t: 11, i: 689, }, D { l: 4, t: 0, i: 1001, }, D { l: 5, t: 0, i: 282 }, D { l: 6, t: 0, i: 1932, }, D { l: 6, t: 0, i: 1977, }, D { l: 6, t: 0, i: 1987, }, D { l: 6, t: 0, i: 1992, }, D { l: 8, t: 0, i: 650 }, D { l: 8, t: 0, i: 919 }, D { l: 8, t: 0, i: 920 }, D { l: 8, t: 0, i: 923 }, D { l: 8, t: 0, i: 926 }, D { l: 8, t: 0, i: 927 }, D { l: 8, t: 0, i: 931 }, D { l: 8, t: 0, i: 939 }, D { l: 8, t: 0, i: 947 }, D { l: 8, t: 0, i: 956 }, D { l: 8, t: 0, i: 997 }, D { l: 9, t: 0, i: 907 }, D { l: 10, t: 0, i: 950, }, D { l: 10, t: 0, i: 953, }, D { l: 10, t: 0, i: 954, }, D { l: 10, t: 0, i: 956, }, D { l: 10, t: 0, i: 958, }, D { l: 10, t: 0, i: 959, }, D { l: 10, t: 0, i: 964, }, D { l: 10, t: 0, i: 970, }, D { l: 10, t: 0, i: 972, }, D { l: 10, t: 0, i: 973, }, D { l: 10, t: 0, i: 975, }, D { l: 10, t: 0, i: 976, }, D { l: 10, t: 0, i: 980, }, D { l: 10, t: 0, i: 981, }, D { l: 10, t: 0, i: 984, }, D { l: 10, t: 0, i: 988, }, D { l: 10, t: 0, i: 990, }, D { l: 10, t: 0, i: 995, }, D { l: 10, t: 0, i: 999, }, D { l: 10, t: 0, i: 1002, }, D { l: 10, t: 0, i: 1003, }, D { l: 10, t: 0, i: 1005, }, D { l: 10, t: 0, i: 1006, }, D { l: 10, t: 0, i: 1008, }, D { l: 10, t: 0, i: 1009, }, D { l: 10, t: 0, i: 1012, }, D { l: 10, t: 0, i: 1014, }, D { l: 10, t: 0, i: 1015, }, D { l: 10, t: 0, i: 1019, }, D { l: 10, t: 0, i: 1020, }, D { l: 10, t: 0, i: 1022, }, D { l: 12, t: 0, i: 959, }, D { l: 12, t: 0, i: 961, }, D { l: 12, t: 0, i: 962, }, D { l: 12, t: 0, i: 963, }, D { l: 12, t: 0, i: 964, }, D { l: 12, t: 0, i: 965, }, D { l: 12, t: 0, i: 967, }, D { l: 12, t: 0, i: 968, }, D { l: 12, t: 0, i: 969, }, D { l: 12, t: 0, i: 970, }, D { l: 12, t: 0, i: 971, }, D { l: 12, t: 0, i: 972, }, D { l: 12, t: 0, i: 973, }, D { l: 12, t: 0, i: 974, }, D { l: 12, t: 0, i: 975, }, D { l: 12, t: 0, i: 976, }, D { l: 12, t: 0, i: 977, }, D { l: 12, t: 0, i: 979, }, D { l: 12, t: 0, i: 981, }, D { l: 12, t: 0, i: 982, }, D { l: 12, t: 0, i: 983, }, D { l: 12, t: 0, i: 984, }, D { l: 12, t: 0, i: 985, }, D { l: 12, t: 0, i: 986, }, D { l: 12, t: 0, i: 987, }, D { l: 12, t: 0, i: 989, }, D { l: 12, t: 0, i: 990, }, D { l: 12, t: 0, i: 992, }, D { l: 12, t: 0, i: 993, }, D { l: 12, t: 0, i: 995, }, D { l: 12, t: 0, i: 998, }, D { l: 12, t: 0, i: 999, }, D { l: 12, t: 0, i: 1000, }, D { l: 12, t: 0, i: 1001, }, D { l: 12, t: 0, i: 1002, }, D { l: 12, t: 0, i: 1004, }, D { l: 12, t: 0, i: 1005, }, D { l: 12, t: 0, i: 1006, }, D { l: 12, t: 0, i: 1007, }, D { l: 12, t: 0, i: 1008, }, D { l: 12, t: 0, i: 1009, }, D { l: 12, t: 0, i: 1010, }, D { l: 12, t: 0, i: 1011, }, D { l: 12, t: 0, i: 1012, }, D { l: 12, t: 0, i: 1014, }, D { l: 12, t: 0, i: 1015, }, D { l: 12, t: 0, i: 1016, }, D { l: 12, t: 0, i: 1017, }, D { l: 12, t: 0, i: 1018, }, D { l: 12, t: 0, i: 1019, }, D { l: 12, t: 0, i: 1022, }, D { l: 12, t: 0, i: 1023, }, D { l: 14, t: 0, i: 475, }, D { l: 14, t: 0, i: 477, }, D { l: 14, t: 0, i: 478, }, D { l: 14, t: 0, i: 479, }, D { l: 14, t: 0, i: 480, }, D { l: 14, t: 0, i: 482, }, D { l: 14, t: 0, i: 483, }, D { l: 14, t: 0, i: 484, }, D { l: 14, t: 0, i: 485, }, D { l: 14, t: 0, i: 486, }, D { l: 14, t: 0, i: 487, }, D { l: 14, t: 0, i: 488, }, D { l: 14, t: 0, i: 489, }, D { l: 14, t: 0, i: 490, }, D { l: 14, t: 0, i: 491, }, D { l: 14, t: 0, i: 492, }, D { l: 14, t: 0, i: 493, }, D { l: 14, t: 0, i: 494, }, D { l: 14, t: 0, i: 495, }, D { l: 14, t: 0, i: 496, }, D { l: 14, t: 0, i: 497, }, D { l: 14, t: 0, i: 498, }, D { l: 14, t: 0, i: 499, }, D { l: 14, t: 0, i: 500, }, D { l: 14, t: 0, i: 501, }, D { l: 14, t: 0, i: 502, }, D { l: 14, t: 0, i: 503, }, D { l: 14, t: 0, i: 504, }, D { l: 14, t: 0, i: 506, }, D { l: 14, t: 0, i: 507, }, D { l: 14, t: 0, i: 508, }, D { l: 14, t: 0, i: 509, }, D { l: 14, t: 0, i: 510, }, D { l: 14, t: 0, i: 511, }, D { l: 16, t: 0, i: 113, }, D { l: 16, t: 0, i: 114, }, D { l: 16, t: 0, i: 115, }, D { l: 16, t: 0, i: 117, }, D { l: 16, t: 0, i: 118, }, D { l: 16, t: 0, i: 119, }, D { l: 16, t: 0, i: 121, }, D { l: 16, t: 0, i: 122, }, D { l: 16, t: 0, i: 123, }, D { l: 16, t: 0, i: 124, }, D { l: 16, t: 0, i: 125, }, D { l: 16, t: 0, i: 126, }, D { l: 16, t: 0, i: 127, }, D { l: 18, t: 0, i: 242, }, D { l: 18, t: 0, i: 243, }, D { l: 18, t: 0, i: 244, }, D { l: 18, t: 0, i: 245, }, D { l: 18, t: 0, i: 248, }, D { l: 18, t: 0, i: 249, }, D { l: 18, t: 0, i: 250, }, D { l: 18, t: 0, i: 251, }, D { l: 18, t: 0, i: 252, }, D { l: 18, t: 0, i: 253, }, D { l: 18, t: 0, i: 254, }, D { l: 18, t: 0, i: 255, }, D { l: 20, t: 0, i: 125, }, D { l: 20, t: 0, i: 126, }, D { l: 148, t: 0, i: 127, }, D { l: 7, t: 11, i: 1717, }, D { l: 7, t: 11, i: 1769, }, D { l: 138, t: 11, i: 546, }, D { l: 7, t: 11, i: 1127, }, D { l: 7, t: 11, i: 1572, }, D { l: 10, t: 11, i: 297, }, D { l: 10, t: 11, i: 422, }, D { l: 11, t: 11, i: 764, }, D { l: 11, t: 11, i: 810, }, D { l: 12, t: 11, i: 264, }, D { l: 13, t: 11, i: 102, }, D { l: 13, t: 11, i: 300, }, D { l: 13, t: 11, i: 484, }, D { l: 14, t: 11, i: 147, }, D { l: 14, t: 11, i: 229, }, D { l: 17, t: 11, i: 71, }, D { l: 18, t: 11, i: 118, }, D { l: 147, t: 11, i: 120, }, D { l: 6, t: 0, i: 1148, }, D { l: 134, t: 0, i: 1586, }, D { l: 132, t: 0, i: 775, }, D { l: 135, t: 10, i: 954, }, D { l: 133, t: 11, i: 864, }, D { l: 133, t: 11, i: 928, }, D { l: 138, t: 11, i: 189, }, D { l: 135, t: 10, i: 1958, }, D { l: 6, t: 10, i: 549, }, D { l: 8, t: 10, i: 34 }, D { l: 8, t: 10, i: 283, }, D { l: 9, t: 10, i: 165, }, D { l: 138, t: 10, i: 475, }, D { l: 5, t: 10, i: 652, }, D { l: 5, t: 10, i: 701, }, D { l: 135, t: 10, i: 449, }, D { l: 135, t: 11, i: 695, }, D { l: 4, t: 10, i: 655, }, D { l: 7, t: 10, i: 850, }, D { l: 17, t: 10, i: 75, }, D { l: 146, t: 10, i: 137, }, D { l: 140, t: 11, i: 682, }, D { l: 133, t: 11, i: 523, }, D { l: 8, t: 0, i: 970 }, D { l: 136, t: 10, i: 670, }, D { l: 136, t: 11, i: 555, }, D { l: 7, t: 11, i: 76 }, D { l: 8, t: 11, i: 44 }, D { l: 9, t: 11, i: 884, }, D { l: 10, t: 11, i: 580, }, D { l: 11, t: 11, i: 399, }, D { l: 11, t: 11, i: 894, }, D { l: 15, t: 11, i: 122, }, D { l: 18, t: 11, i: 144, }, D { l: 147, t: 11, i: 61, }, D { l: 6, t: 10, i: 159, }, D { l: 6, t: 10, i: 364, }, D { l: 7, t: 10, i: 516, }, D { l: 7, t: 10, i: 1439, }, D { l: 137, t: 10, i: 518, }, D { l: 4, t: 0, i: 71 }, D { l: 5, t: 0, i: 376 }, D { l: 7, t: 0, i: 119 }, D { l: 138, t: 0, i: 665, }, D { l: 141, t: 10, i: 151, }, D { l: 11, t: 0, i: 827, }, D { l: 14, t: 0, i: 34 }, D { l: 143, t: 0, i: 148, }, D { l: 133, t: 11, i: 518, }, D { l: 4, t: 0, i: 479 }, D { l: 135, t: 11, i: 1787, }, D { l: 135, t: 11, i: 1852, }, D { l: 135, t: 10, i: 993, }, D { l: 7, t: 0, i: 607 }, D { l: 136, t: 0, i: 99, }, D { l: 134, t: 0, i: 1960, }, D { l: 132, t: 0, i: 793, }, D { l: 4, t: 0, i: 41 }, D { l: 5, t: 0, i: 74 }, D { l: 7, t: 0, i: 1627, }, D { l: 11, t: 0, i: 871, }, D { l: 140, t: 0, i: 619, }, D { l: 7, t: 0, i: 94 }, D { l: 11, t: 0, i: 329, }, D { l: 11, t: 0, i: 965, }, D { l: 12, t: 0, i: 241, }, D { l: 14, t: 0, i: 354, }, D { l: 15, t: 0, i: 22 }, D { l: 148, t: 0, i: 63, }, D { l: 7, t: 10, i: 501, }, D { l: 9, t: 10, i: 111, }, D { l: 10, t: 10, i: 141, }, D { l: 11, t: 10, i: 332, }, D { l: 13, t: 10, i: 43, }, D { l: 13, t: 10, i: 429, }, D { l: 14, t: 10, i: 130, }, D { l: 14, t: 10, i: 415, }, D { l: 145, t: 10, i: 102, }, D { l: 9, t: 0, i: 209 }, D { l: 137, t: 0, i: 300, }, D { l: 134, t: 0, i: 1497, }, D { l: 138, t: 11, i: 255, }, D { l: 4, t: 11, i: 934, }, D { l: 5, t: 11, i: 138, }, D { l: 136, t: 11, i: 610, }, D { l: 133, t: 0, i: 98, }, D { l: 6, t: 0, i: 1316, }, D { l: 10, t: 11, i: 804, }, D { l: 138, t: 11, i: 832, }, D { l: 8, t: 11, i: 96 }, D { l: 9, t: 11, i: 36 }, D { l: 10, t: 11, i: 607, }, D { l: 11, t: 11, i: 423, }, D { l: 11, t: 11, i: 442, }, D { l: 12, t: 11, i: 309, }, D { l: 14, t: 11, i: 199, }, D { l: 15, t: 11, i: 90, }, D { l: 145, t: 11, i: 110, }, D { l: 132, t: 0, i: 463, }, D { l: 5, t: 10, i: 149, }, D { l: 136, t: 10, i: 233, }, D { l: 133, t: 10, i: 935, }, D { l: 4, t: 11, i: 652, }, D { l: 8, t: 11, i: 320, }, D { l: 9, t: 11, i: 13 }, D { l: 9, t: 11, i: 398, }, D { l: 9, t: 11, i: 727, }, D { l: 10, t: 11, i: 75, }, D { l: 10, t: 11, i: 184, }, D { l: 10, t: 11, i: 230, }, D { l: 10, t: 11, i: 564, }, D { l: 10, t: 11, i: 569, }, D { l: 11, t: 11, i: 973, }, D { l: 12, t: 11, i: 70, }, D { l: 12, t: 11, i: 189, }, D { l: 13, t: 11, i: 57, }, D { l: 13, t: 11, i: 257, }, D { l: 22, t: 11, i: 6 }, D { l: 150, t: 11, i: 16, }, D { l: 142, t: 0, i: 291, }, D { l: 12, t: 10, i: 582, }, D { l: 146, t: 10, i: 131, }, D { l: 136, t: 10, i: 801, }, D { l: 133, t: 0, i: 984, }, D { l: 145, t: 11, i: 116, }, D { l: 4, t: 11, i: 692, }, D { l: 133, t: 11, i: 321, }, D { l: 4, t: 0, i: 182 }, D { l: 6, t: 0, i: 205 }, D { l: 135, t: 0, i: 220, }, D { l: 4, t: 0, i: 42 }, D { l: 9, t: 0, i: 205 }, D { l: 9, t: 0, i: 786 }, D { l: 138, t: 0, i: 659, }, D { l: 6, t: 0, i: 801 }, D { l: 11, t: 11, i: 130, }, D { l: 140, t: 11, i: 609, }, D { l: 132, t: 0, i: 635, }, D { l: 5, t: 11, i: 345, }, D { l: 135, t: 11, i: 1016, }, D { l: 139, t: 0, i: 533, }, D { l: 132, t: 0, i: 371, }, D { l: 4, t: 0, i: 272 }, D { l: 135, t: 0, i: 836, }, D { l: 6, t: 0, i: 1282, }, D { l: 135, t: 11, i: 1100, }, D { l: 5, t: 0, i: 825 }, D { l: 134, t: 0, i: 1640, }, D { l: 135, t: 11, i: 1325, }, D { l: 133, t: 11, i: 673, }, D { l: 4, t: 11, i: 287, }, D { l: 133, t: 11, i: 1018, }, D { l: 135, t: 0, i: 357, }, D { l: 6, t: 0, i: 467 }, D { l: 137, t: 0, i: 879, }, D { l: 7, t: 0, i: 317 }, D { l: 135, t: 0, i: 569, }, D { l: 6, t: 0, i: 924 }, D { l: 134, t: 0, i: 1588, }, D { l: 5, t: 11, i: 34 }, D { l: 5, t: 10, i: 406, }, D { l: 10, t: 11, i: 724, }, D { l: 12, t: 11, i: 444, }, D { l: 13, t: 11, i: 354, }, D { l: 18, t: 11, i: 32, }, D { l: 23, t: 11, i: 24, }, D { l: 23, t: 11, i: 31, }, D { l: 152, t: 11, i: 5, }, D { l: 6, t: 0, i: 1795, }, D { l: 6, t: 0, i: 1835, }, D { l: 6, t: 0, i: 1836, }, D { l: 6, t: 0, i: 1856, }, D { l: 8, t: 0, i: 844 }, D { l: 8, t: 0, i: 849 }, D { l: 8, t: 0, i: 854 }, D { l: 8, t: 0, i: 870 }, D { l: 8, t: 0, i: 887 }, D { l: 10, t: 0, i: 852, }, D { l: 138, t: 0, i: 942, }, D { l: 6, t: 10, i: 69 }, D { l: 135, t: 10, i: 117, }, D { l: 137, t: 0, i: 307, }, D { l: 4, t: 0, i: 944 }, D { l: 6, t: 0, i: 1799, }, D { l: 6, t: 0, i: 1825, }, D { l: 10, t: 0, i: 848, }, D { l: 10, t: 0, i: 875, }, D { l: 10, t: 0, i: 895, }, D { l: 10, t: 0, i: 899, }, D { l: 10, t: 0, i: 902, }, D { l: 140, t: 0, i: 773, }, D { l: 11, t: 0, i: 43 }, D { l: 13, t: 0, i: 72 }, D { l: 141, t: 0, i: 142, }, D { l: 135, t: 10, i: 1830, }, D { l: 134, t: 11, i: 382, }, D { l: 4, t: 10, i: 432, }, D { l: 135, t: 10, i: 824, }, D { l: 132, t: 11, i: 329, }, D { l: 7, t: 0, i: 1820, }, D { l: 139, t: 11, i: 124, }, D { l: 133, t: 10, i: 826, }, D { l: 133, t: 0, i: 525, }, D { l: 132, t: 11, i: 906, }, D { l: 7, t: 11, i: 1940, }, D { l: 136, t: 11, i: 366, }, D { l: 138, t: 11, i: 10, }, D { l: 4, t: 11, i: 123, }, D { l: 4, t: 11, i: 649, }, D { l: 5, t: 11, i: 605, }, D { l: 7, t: 11, i: 1509, }, D { l: 136, t: 11, i: 36, }, D { l: 6, t: 0, i: 110 }, D { l: 135, t: 0, i: 1681, }, D { l: 133, t: 0, i: 493, }, D { l: 133, t: 11, i: 767, }, D { l: 4, t: 0, i: 174 }, D { l: 135, t: 0, i: 911, }, D { l: 138, t: 11, i: 786, }, D { l: 8, t: 0, i: 417 }, D { l: 137, t: 0, i: 782, }, D { l: 133, t: 10, i: 1000, }, D { l: 7, t: 0, i: 733 }, D { l: 137, t: 0, i: 583, }, D { l: 4, t: 10, i: 297, }, D { l: 6, t: 10, i: 529, }, D { l: 7, t: 10, i: 152, }, D { l: 7, t: 10, i: 713, }, D { l: 7, t: 10, i: 1845, }, D { l: 8, t: 10, i: 710, }, D { l: 8, t: 10, i: 717, }, D { l: 12, t: 10, i: 639, }, D { l: 140, t: 10, i: 685, }, D { l: 4, t: 0, i: 32 }, D { l: 5, t: 0, i: 215 }, D { l: 6, t: 0, i: 269 }, D { l: 7, t: 0, i: 1782, }, D { l: 7, t: 0, i: 1892, }, D { l: 10, t: 0, i: 16 }, D { l: 11, t: 0, i: 822, }, D { l: 11, t: 0, i: 954, }, D { l: 141, t: 0, i: 481, }, D { l: 4, t: 11, i: 273, }, D { l: 5, t: 11, i: 658, }, D { l: 133, t: 11, i: 995, }, D { l: 136, t: 0, i: 477, }, D { l: 134, t: 11, i: 72, }, D { l: 135, t: 11, i: 1345, }, D { l: 5, t: 0, i: 308 }, D { l: 7, t: 0, i: 1088, }, D { l: 4, t: 10, i: 520, }, D { l: 135, t: 10, i: 575, }, D { l: 133, t: 11, i: 589, }, D { l: 5, t: 0, i: 126 }, D { l: 8, t: 0, i: 297 }, D { l: 9, t: 0, i: 366 }, D { l: 140, t: 0, i: 374, }, D { l: 7, t: 0, i: 1551, }, D { l: 139, t: 0, i: 361, }, D { l: 5, t: 11, i: 117, }, D { l: 6, t: 11, i: 514, }, D { l: 6, t: 11, i: 541, }, D { l: 7, t: 11, i: 1164, }, D { l: 7, t: 11, i: 1436, }, D { l: 8, t: 11, i: 220, }, D { l: 8, t: 11, i: 648, }, D { l: 10, t: 11, i: 688, }, D { l: 139, t: 11, i: 560, }, D { l: 133, t: 11, i: 686, }, D { l: 4, t: 0, i: 946 }, D { l: 6, t: 0, i: 1807, }, D { l: 8, t: 0, i: 871 }, D { l: 10, t: 0, i: 854, }, D { l: 10, t: 0, i: 870, }, D { l: 10, t: 0, i: 888, }, D { l: 10, t: 0, i: 897, }, D { l: 10, t: 0, i: 920, }, D { l: 12, t: 0, i: 722, }, D { l: 12, t: 0, i: 761, }, D { l: 12, t: 0, i: 763, }, D { l: 12, t: 0, i: 764, }, D { l: 14, t: 0, i: 454, }, D { l: 14, t: 0, i: 465, }, D { l: 16, t: 0, i: 107, }, D { l: 18, t: 0, i: 167, }, D { l: 18, t: 0, i: 168, }, D { l: 146, t: 0, i: 172, }, D { l: 132, t: 0, i: 175, }, D { l: 135, t: 0, i: 1307, }, D { l: 132, t: 0, i: 685, }, D { l: 135, t: 11, i: 1834, }, D { l: 133, t: 0, i: 797, }, D { l: 6, t: 0, i: 745 }, D { l: 6, t: 0, i: 858 }, D { l: 134, t: 0, i: 963, }, D { l: 133, t: 0, i: 565, }, D { l: 5, t: 10, i: 397, }, D { l: 6, t: 10, i: 154, }, D { l: 7, t: 11, i: 196, }, D { l: 7, t: 10, i: 676, }, D { l: 8, t: 10, i: 443, }, D { l: 8, t: 10, i: 609, }, D { l: 9, t: 10, i: 24 }, D { l: 9, t: 10, i: 325, }, D { l: 10, t: 10, i: 35, }, D { l: 10, t: 11, i: 765, }, D { l: 11, t: 11, i: 347, }, D { l: 11, t: 10, i: 535, }, D { l: 11, t: 11, i: 552, }, D { l: 11, t: 11, i: 576, }, D { l: 11, t: 10, i: 672, }, D { l: 11, t: 11, i: 790, }, D { l: 11, t: 10, i: 1018, }, D { l: 12, t: 11, i: 263, }, D { l: 12, t: 10, i: 637, }, D { l: 13, t: 11, i: 246, }, D { l: 13, t: 11, i: 270, }, D { l: 13, t: 11, i: 395, }, D { l: 14, t: 11, i: 74, }, D { l: 14, t: 11, i: 176, }, D { l: 14, t: 11, i: 190, }, D { l: 14, t: 11, i: 398, }, D { l: 14, t: 11, i: 412, }, D { l: 15, t: 11, i: 32, }, D { l: 15, t: 11, i: 63, }, D { l: 16, t: 10, i: 30, }, D { l: 16, t: 11, i: 88, }, D { l: 147, t: 11, i: 105, }, D { l: 13, t: 11, i: 84, }, D { l: 141, t: 11, i: 122, }, D { l: 4, t: 0, i: 252 }, D { l: 7, t: 0, i: 1068, }, D { l: 10, t: 0, i: 434, }, D { l: 11, t: 0, i: 228, }, D { l: 11, t: 0, i: 426, }, D { l: 13, t: 0, i: 231, }, D { l: 18, t: 0, i: 106, }, D { l: 148, t: 0, i: 87, }, D { l: 137, t: 0, i: 826, }, D { l: 4, t: 11, i: 589, }, D { l: 139, t: 11, i: 282, }, D { l: 5, t: 11, i: 381, }, D { l: 135, t: 11, i: 1792, }, D { l: 132, t: 0, i: 791, }, D { l: 5, t: 0, i: 231 }, D { l: 10, t: 0, i: 509, }, D { l: 133, t: 10, i: 981, }, D { l: 7, t: 0, i: 601 }, D { l: 9, t: 0, i: 277 }, D { l: 9, t: 0, i: 674 }, D { l: 10, t: 0, i: 178, }, D { l: 10, t: 0, i: 418, }, D { l: 10, t: 0, i: 571, }, D { l: 11, t: 0, i: 531, }, D { l: 12, t: 0, i: 113, }, D { l: 12, t: 0, i: 475, }, D { l: 13, t: 0, i: 99 }, D { l: 142, t: 0, i: 428, }, D { l: 4, t: 10, i: 56 }, D { l: 7, t: 11, i: 616, }, D { l: 7, t: 10, i: 1791, }, D { l: 8, t: 10, i: 607, }, D { l: 8, t: 10, i: 651, }, D { l: 10, t: 11, i: 413, }, D { l: 11, t: 10, i: 465, }, D { l: 11, t: 10, i: 835, }, D { l: 12, t: 10, i: 337, }, D { l: 141, t: 10, i: 480, }, D { l: 7, t: 0, i: 1591, }, D { l: 144, t: 0, i: 43, }, D { l: 9, t: 10, i: 158, }, D { l: 138, t: 10, i: 411, }, D { l: 135, t: 0, i: 1683, }, D { l: 8, t: 0, i: 289 }, D { l: 11, t: 0, i: 45 }, D { l: 12, t: 0, i: 278, }, D { l: 140, t: 0, i: 537, }, D { l: 6, t: 11, i: 120, }, D { l: 7, t: 11, i: 1188, }, D { l: 7, t: 11, i: 1710, }, D { l: 8, t: 11, i: 286, }, D { l: 9, t: 11, i: 667, }, D { l: 11, t: 11, i: 592, }, D { l: 139, t: 11, i: 730, }, D { l: 136, t: 10, i: 617, }, D { l: 135, t: 0, i: 1120, }, D { l: 135, t: 11, i: 1146, }, D { l: 139, t: 10, i: 563, }, D { l: 4, t: 11, i: 352, }, D { l: 4, t: 10, i: 369, }, D { l: 135, t: 11, i: 687, }, D { l: 143, t: 11, i: 38, }, D { l: 4, t: 0, i: 399 }, D { l: 5, t: 0, i: 119 }, D { l: 5, t: 0, i: 494 }, D { l: 7, t: 0, i: 751 }, D { l: 9, t: 0, i: 556 }, D { l: 14, t: 11, i: 179, }, D { l: 15, t: 11, i: 151, }, D { l: 150, t: 11, i: 11, }, D { l: 4, t: 11, i: 192, }, D { l: 5, t: 11, i: 49 }, D { l: 6, t: 11, i: 200, }, D { l: 6, t: 11, i: 293, }, D { l: 6, t: 11, i: 1696, }, D { l: 135, t: 11, i: 488, }, D { l: 4, t: 0, i: 398 }, D { l: 133, t: 0, i: 660, }, D { l: 7, t: 0, i: 1030, }, D { l: 134, t: 10, i: 622, }, D { l: 135, t: 11, i: 595, }, D { l: 141, t: 0, i: 168, }, D { l: 132, t: 11, i: 147, }, D { l: 7, t: 0, i: 973 }, D { l: 10, t: 10, i: 624, }, D { l: 142, t: 10, i: 279, }, D { l: 132, t: 10, i: 363, }, D { l: 132, t: 0, i: 642, }, D { l: 133, t: 11, i: 934, }, D { l: 134, t: 0, i: 1615, }, D { l: 7, t: 11, i: 505, }, D { l: 135, t: 11, i: 523, }, D { l: 7, t: 0, i: 594 }, D { l: 7, t: 0, i: 851 }, D { l: 7, t: 0, i: 1858, }, D { l: 9, t: 0, i: 411 }, D { l: 9, t: 0, i: 574 }, D { l: 9, t: 0, i: 666 }, D { l: 9, t: 0, i: 737 }, D { l: 10, t: 0, i: 346, }, D { l: 10, t: 0, i: 712, }, D { l: 11, t: 0, i: 246, }, D { l: 11, t: 0, i: 432, }, D { l: 11, t: 0, i: 517, }, D { l: 11, t: 0, i: 647, }, D { l: 11, t: 0, i: 679, }, D { l: 11, t: 0, i: 727, }, D { l: 12, t: 0, i: 304, }, D { l: 12, t: 0, i: 305, }, D { l: 12, t: 0, i: 323, }, D { l: 12, t: 0, i: 483, }, D { l: 12, t: 0, i: 572, }, D { l: 12, t: 0, i: 593, }, D { l: 12, t: 0, i: 602, }, D { l: 13, t: 0, i: 95 }, D { l: 13, t: 0, i: 101, }, D { l: 13, t: 0, i: 171, }, D { l: 13, t: 0, i: 315, }, D { l: 13, t: 0, i: 378, }, D { l: 13, t: 0, i: 425, }, D { l: 13, t: 0, i: 475, }, D { l: 14, t: 0, i: 63 }, D { l: 14, t: 0, i: 380, }, D { l: 14, t: 0, i: 384, }, D { l: 15, t: 0, i: 133, }, D { l: 18, t: 0, i: 112, }, D { l: 148, t: 0, i: 72, }, D { l: 135, t: 0, i: 1093, }, D { l: 132, t: 0, i: 679, }, D { l: 8, t: 0, i: 913 }, D { l: 10, t: 0, i: 903, }, D { l: 10, t: 0, i: 915, }, D { l: 12, t: 0, i: 648, }, D { l: 12, t: 0, i: 649, }, D { l: 14, t: 0, i: 455, }, D { l: 16, t: 0, i: 112, }, D { l: 138, t: 11, i: 438, }, D { l: 137, t: 0, i: 203, }, D { l: 134, t: 10, i: 292, }, D { l: 134, t: 0, i: 1492, }, D { l: 7, t: 0, i: 1374, }, D { l: 8, t: 0, i: 540 }, D { l: 5, t: 10, i: 177, }, D { l: 6, t: 10, i: 616, }, D { l: 7, t: 10, i: 827, }, D { l: 9, t: 10, i: 525, }, D { l: 138, t: 10, i: 656, }, D { l: 135, t: 0, i: 1486, }, D { l: 9, t: 0, i: 714 }, D { l: 138, t: 10, i: 31, }, D { l: 136, t: 0, i: 825, }, D { l: 134, t: 0, i: 1511, }, D { l: 132, t: 11, i: 637, }, D { l: 134, t: 0, i: 952, }, D { l: 4, t: 10, i: 161, }, D { l: 133, t: 10, i: 631, }, D { l: 5, t: 0, i: 143 }, D { l: 5, t: 0, i: 769 }, D { l: 6, t: 0, i: 1760, }, D { l: 7, t: 0, i: 682 }, D { l: 7, t: 0, i: 1992, }, D { l: 136, t: 0, i: 736, }, D { l: 132, t: 0, i: 700, }, D { l: 134, t: 0, i: 1540, }, D { l: 132, t: 11, i: 777, }, D { l: 9, t: 11, i: 867, }, D { l: 138, t: 11, i: 837, }, D { l: 7, t: 0, i: 1557, }, D { l: 135, t: 10, i: 1684, }, D { l: 133, t: 0, i: 860, }, D { l: 6, t: 0, i: 422 }, D { l: 7, t: 0, i: 0 }, D { l: 7, t: 0, i: 1544, }, D { l: 9, t: 0, i: 605 }, D { l: 11, t: 0, i: 990, }, D { l: 12, t: 0, i: 235, }, D { l: 12, t: 0, i: 453, }, D { l: 13, t: 0, i: 47 }, D { l: 13, t: 0, i: 266, }, D { l: 9, t: 10, i: 469, }, D { l: 9, t: 10, i: 709, }, D { l: 12, t: 10, i: 512, }, D { l: 14, t: 10, i: 65, }, D { l: 145, t: 10, i: 12, }, D { l: 11, t: 0, i: 807, }, D { l: 10, t: 10, i: 229, }, D { l: 11, t: 10, i: 73, }, D { l: 139, t: 10, i: 376, }, D { l: 6, t: 11, i: 170, }, D { l: 7, t: 11, i: 1080, }, D { l: 8, t: 11, i: 395, }, D { l: 8, t: 11, i: 487, }, D { l: 11, t: 11, i: 125, }, D { l: 141, t: 11, i: 147, }, D { l: 5, t: 0, i: 515 }, D { l: 137, t: 0, i: 131, }, D { l: 7, t: 0, i: 1605, }, D { l: 11, t: 0, i: 962, }, D { l: 146, t: 0, i: 139, }, D { l: 132, t: 0, i: 646, }, D { l: 4, t: 0, i: 396 }, D { l: 7, t: 0, i: 728 }, D { l: 9, t: 0, i: 117 }, D { l: 13, t: 0, i: 202, }, D { l: 148, t: 0, i: 51, }, D { l: 6, t: 0, i: 121 }, D { l: 6, t: 0, i: 124 }, D { l: 6, t: 0, i: 357 }, D { l: 7, t: 0, i: 1138, }, D { l: 7, t: 0, i: 1295, }, D { l: 8, t: 0, i: 162 }, D { l: 8, t: 0, i: 508 }, D { l: 11, t: 0, i: 655, }, D { l: 4, t: 11, i: 535, }, D { l: 6, t: 10, i: 558, }, D { l: 7, t: 10, i: 651, }, D { l: 8, t: 11, i: 618, }, D { l: 9, t: 10, i: 0 }, D { l: 10, t: 10, i: 34, }, D { l: 139, t: 10, i: 1008, }, D { l: 135, t: 11, i: 1245, }, D { l: 138, t: 0, i: 357, }, D { l: 150, t: 11, i: 23, }, D { l: 133, t: 0, i: 237, }, D { l: 135, t: 0, i: 1784, }, D { l: 7, t: 10, i: 1832, }, D { l: 138, t: 10, i: 374, }, D { l: 132, t: 0, i: 713, }, D { l: 132, t: 11, i: 46, }, D { l: 6, t: 0, i: 1536, }, D { l: 10, t: 0, i: 348, }, D { l: 5, t: 11, i: 811, }, D { l: 6, t: 11, i: 1679, }, D { l: 6, t: 11, i: 1714, }, D { l: 135, t: 11, i: 2032, }, D { l: 11, t: 11, i: 182, }, D { l: 142, t: 11, i: 195, }, D { l: 6, t: 0, i: 523 }, D { l: 7, t: 0, i: 738 }, D { l: 7, t: 10, i: 771, }, D { l: 7, t: 10, i: 1731, }, D { l: 9, t: 10, i: 405, }, D { l: 138, t: 10, i: 421, }, D { l: 7, t: 11, i: 1458, }, D { l: 9, t: 11, i: 407, }, D { l: 139, t: 11, i: 15, }, D { l: 6, t: 11, i: 34 }, D { l: 7, t: 11, i: 69 }, D { l: 7, t: 11, i: 640, }, D { l: 7, t: 11, i: 1089, }, D { l: 8, t: 11, i: 708, }, D { l: 8, t: 11, i: 721, }, D { l: 9, t: 11, i: 363, }, D { l: 9, t: 11, i: 643, }, D { l: 10, t: 11, i: 628, }, D { l: 148, t: 11, i: 98, }, D { l: 133, t: 0, i: 434, }, D { l: 135, t: 0, i: 1877, }, D { l: 7, t: 0, i: 571 }, D { l: 138, t: 0, i: 366, }, D { l: 5, t: 10, i: 881, }, D { l: 133, t: 10, i: 885, }, D { l: 9, t: 0, i: 513 }, D { l: 10, t: 0, i: 25 }, D { l: 10, t: 0, i: 39 }, D { l: 12, t: 0, i: 122, }, D { l: 140, t: 0, i: 187, }, D { l: 132, t: 0, i: 580, }, D { l: 5, t: 10, i: 142, }, D { l: 134, t: 10, i: 546, }, D { l: 132, t: 11, i: 462, }, D { l: 137, t: 0, i: 873, }, D { l: 5, t: 10, i: 466, }, D { l: 11, t: 10, i: 571, }, D { l: 12, t: 10, i: 198, }, D { l: 13, t: 10, i: 283, }, D { l: 14, t: 10, i: 186, }, D { l: 15, t: 10, i: 21, }, D { l: 143, t: 10, i: 103, }, D { l: 7, t: 0, i: 171 }, D { l: 4, t: 10, i: 185, }, D { l: 5, t: 10, i: 257, }, D { l: 5, t: 10, i: 839, }, D { l: 5, t: 10, i: 936, }, D { l: 9, t: 10, i: 399, }, D { l: 10, t: 10, i: 258, }, D { l: 10, t: 10, i: 395, }, D { l: 10, t: 10, i: 734, }, D { l: 11, t: 10, i: 1014, }, D { l: 12, t: 10, i: 23, }, D { l: 13, t: 10, i: 350, }, D { l: 14, t: 10, i: 150, }, D { l: 147, t: 10, i: 6, }, D { l: 134, t: 0, i: 625, }, D { l: 7, t: 0, i: 107 }, D { l: 7, t: 0, i: 838 }, D { l: 8, t: 0, i: 550 }, D { l: 138, t: 0, i: 401, }, D { l: 5, t: 11, i: 73 }, D { l: 6, t: 11, i: 23 }, D { l: 134, t: 11, i: 338, }, D { l: 4, t: 0, i: 943 }, D { l: 6, t: 0, i: 1850, }, D { l: 12, t: 0, i: 713, }, D { l: 142, t: 0, i: 434, }, D { l: 11, t: 0, i: 588, }, D { l: 11, t: 0, i: 864, }, D { l: 11, t: 0, i: 936, }, D { l: 11, t: 0, i: 968, }, D { l: 12, t: 0, i: 73 }, D { l: 12, t: 0, i: 343, }, D { l: 12, t: 0, i: 394, }, D { l: 13, t: 0, i: 275, }, D { l: 14, t: 0, i: 257, }, D { l: 15, t: 0, i: 160, }, D { l: 7, t: 10, i: 404, }, D { l: 7, t: 10, i: 1377, }, D { l: 7, t: 10, i: 1430, }, D { l: 7, t: 10, i: 2017, }, D { l: 8, t: 10, i: 149, }, D { l: 8, t: 10, i: 239, }, D { l: 8, t: 10, i: 512, }, D { l: 8, t: 10, i: 793, }, D { l: 8, t: 10, i: 818, }, D { l: 9, t: 10, i: 474, }, D { l: 9, t: 10, i: 595, }, D { l: 10, t: 10, i: 122, }, D { l: 10, t: 10, i: 565, }, D { l: 10, t: 10, i: 649, }, D { l: 10, t: 10, i: 783, }, D { l: 11, t: 10, i: 239, }, D { l: 11, t: 10, i: 295, }, D { l: 11, t: 10, i: 447, }, D { l: 11, t: 10, i: 528, }, D { l: 11, t: 10, i: 639, }, D { l: 11, t: 10, i: 800, }, D { l: 12, t: 10, i: 25, }, D { l: 12, t: 10, i: 157, }, D { l: 12, t: 10, i: 316, }, D { l: 12, t: 10, i: 390, }, D { l: 12, t: 10, i: 391, }, D { l: 12, t: 10, i: 395, }, D { l: 12, t: 10, i: 478, }, D { l: 12, t: 10, i: 503, }, D { l: 12, t: 10, i: 592, }, D { l: 12, t: 10, i: 680, }, D { l: 13, t: 10, i: 50, }, D { l: 13, t: 10, i: 53, }, D { l: 13, t: 10, i: 132, }, D { l: 13, t: 10, i: 198, }, D { l: 13, t: 10, i: 322, }, D { l: 13, t: 10, i: 415, }, D { l: 13, t: 10, i: 511, }, D { l: 14, t: 10, i: 71, }, D { l: 14, t: 10, i: 395, }, D { l: 15, t: 10, i: 71, }, D { l: 15, t: 10, i: 136, }, D { l: 17, t: 10, i: 123, }, D { l: 18, t: 10, i: 93, }, D { l: 147, t: 10, i: 58, }, D { l: 133, t: 0, i: 768, }, D { l: 11, t: 0, i: 103, }, D { l: 142, t: 0, i: 0 }, D { l: 136, t: 10, i: 712, }, D { l: 132, t: 0, i: 799, }, D { l: 132, t: 0, i: 894, }, D { l: 7, t: 11, i: 725, }, D { l: 8, t: 11, i: 498, }, D { l: 139, t: 11, i: 268, }, D { l: 135, t: 11, i: 1798, }, D { l: 135, t: 11, i: 773, }, D { l: 141, t: 11, i: 360, }, D { l: 4, t: 10, i: 377, }, D { l: 152, t: 10, i: 13, }, D { l: 135, t: 0, i: 1673, }, D { l: 132, t: 11, i: 583, }, D { l: 134, t: 0, i: 1052, }, D { l: 133, t: 11, i: 220, }, D { l: 140, t: 11, i: 69, }, D { l: 132, t: 11, i: 544, }, D { l: 4, t: 10, i: 180, }, D { l: 135, t: 10, i: 1906, }, D { l: 134, t: 0, i: 272, }, D { l: 4, t: 0, i: 441 }, D { l: 134, t: 0, i: 1421, }, D { l: 4, t: 0, i: 9 }, D { l: 5, t: 0, i: 128 }, D { l: 7, t: 0, i: 368 }, D { l: 11, t: 0, i: 480, }, D { l: 148, t: 0, i: 3 }, D { l: 5, t: 11, i: 176, }, D { l: 6, t: 11, i: 437, }, D { l: 6, t: 11, i: 564, }, D { l: 11, t: 11, i: 181, }, D { l: 141, t: 11, i: 183, }, D { l: 132, t: 10, i: 491, }, D { l: 7, t: 0, i: 1182, }, D { l: 141, t: 11, i: 67, }, D { l: 6, t: 0, i: 1346, }, D { l: 4, t: 10, i: 171, }, D { l: 138, t: 10, i: 234, }, D { l: 4, t: 10, i: 586, }, D { l: 7, t: 10, i: 1186, }, D { l: 138, t: 10, i: 631, }, D { l: 136, t: 0, i: 682, }, D { l: 134, t: 0, i: 1004, }, D { l: 15, t: 0, i: 24 }, D { l: 143, t: 11, i: 24, }, D { l: 134, t: 0, i: 968, }, D { l: 4, t: 0, i: 2 }, D { l: 6, t: 0, i: 742 }, D { l: 6, t: 0, i: 793 }, D { l: 7, t: 0, i: 545 }, D { l: 7, t: 0, i: 894 }, D { l: 9, t: 10, i: 931, }, D { l: 10, t: 10, i: 334, }, D { l: 148, t: 10, i: 71, }, D { l: 136, t: 11, i: 600, }, D { l: 133, t: 10, i: 765, }, D { l: 9, t: 0, i: 769 }, D { l: 140, t: 0, i: 185, }, D { l: 4, t: 11, i: 790, }, D { l: 5, t: 11, i: 273, }, D { l: 134, t: 11, i: 394, }, D { l: 7, t: 0, i: 474 }, D { l: 137, t: 0, i: 578, }, D { l: 4, t: 11, i: 135, }, D { l: 6, t: 11, i: 127, }, D { l: 7, t: 11, i: 1185, }, D { l: 7, t: 11, i: 1511, }, D { l: 8, t: 11, i: 613, }, D { l: 11, t: 11, i: 5 }, D { l: 12, t: 11, i: 133, }, D { l: 12, t: 11, i: 495, }, D { l: 12, t: 11, i: 586, }, D { l: 14, t: 11, i: 385, }, D { l: 15, t: 11, i: 118, }, D { l: 17, t: 11, i: 20, }, D { l: 146, t: 11, i: 98, }, D { l: 133, t: 10, i: 424, }, D { l: 5, t: 0, i: 530 }, D { l: 142, t: 0, i: 113, }, D { l: 6, t: 11, i: 230, }, D { l: 7, t: 11, i: 961, }, D { l: 7, t: 11, i: 1085, }, D { l: 136, t: 11, i: 462, }, D { l: 7, t: 11, i: 1954, }, D { l: 137, t: 11, i: 636, }, D { l: 136, t: 10, i: 714, }, D { l: 149, t: 11, i: 6, }, D { l: 135, t: 10, i: 685, }, D { l: 9, t: 10, i: 420, }, D { l: 10, t: 10, i: 269, }, D { l: 10, t: 10, i: 285, }, D { l: 10, t: 10, i: 576, }, D { l: 11, t: 10, i: 397, }, D { l: 13, t: 10, i: 175, }, D { l: 145, t: 10, i: 90, }, D { l: 132, t: 10, i: 429, }, D { l: 5, t: 0, i: 556 }, D { l: 5, t: 11, i: 162, }, D { l: 136, t: 11, i: 68, }, D { l: 132, t: 11, i: 654, }, D { l: 4, t: 11, i: 156, }, D { l: 7, t: 11, i: 998, }, D { l: 7, t: 11, i: 1045, }, D { l: 7, t: 11, i: 1860, }, D { l: 9, t: 11, i: 48 }, D { l: 9, t: 11, i: 692, }, D { l: 11, t: 11, i: 419, }, D { l: 139, t: 11, i: 602, }, D { l: 6, t: 0, i: 1317, }, D { l: 8, t: 0, i: 16 }, D { l: 9, t: 0, i: 825 }, D { l: 12, t: 0, i: 568, }, D { l: 7, t: 11, i: 1276, }, D { l: 8, t: 11, i: 474, }, D { l: 137, t: 11, i: 652, }, D { l: 18, t: 0, i: 97 }, D { l: 7, t: 10, i: 18 }, D { l: 7, t: 10, i: 699, }, D { l: 7, t: 10, i: 1966, }, D { l: 8, t: 10, i: 752, }, D { l: 9, t: 10, i: 273, }, D { l: 9, t: 10, i: 412, }, D { l: 9, t: 10, i: 703, }, D { l: 10, t: 10, i: 71, }, D { l: 10, t: 10, i: 427, }, D { l: 138, t: 10, i: 508, }, D { l: 10, t: 0, i: 703, }, D { l: 7, t: 11, i: 1454, }, D { l: 138, t: 11, i: 703, }, D { l: 4, t: 10, i: 53 }, D { l: 5, t: 10, i: 186, }, D { l: 135, t: 10, i: 752, }, D { l: 134, t: 0, i: 892, }, D { l: 134, t: 0, i: 1571, }, D { l: 8, t: 10, i: 575, }, D { l: 10, t: 10, i: 289, }, D { l: 139, t: 10, i: 319, }, D { l: 6, t: 0, i: 186 }, D { l: 137, t: 0, i: 426, }, D { l: 134, t: 0, i: 1101, }, D { l: 132, t: 10, i: 675, }, D { l: 132, t: 0, i: 585, }, D { l: 6, t: 0, i: 1870, }, D { l: 137, t: 0, i: 937, }, D { l: 152, t: 11, i: 10, }, D { l: 9, t: 11, i: 197, }, D { l: 10, t: 11, i: 300, }, D { l: 12, t: 11, i: 473, }, D { l: 13, t: 11, i: 90, }, D { l: 141, t: 11, i: 405, }, D { l: 4, t: 0, i: 93 }, D { l: 5, t: 0, i: 252 }, D { l: 6, t: 0, i: 229 }, D { l: 7, t: 0, i: 291 }, D { l: 9, t: 0, i: 550 }, D { l: 139, t: 0, i: 644, }, D { l: 137, t: 0, i: 749, }, D { l: 9, t: 0, i: 162 }, D { l: 6, t: 10, i: 209, }, D { l: 8, t: 10, i: 468, }, D { l: 9, t: 10, i: 210, }, D { l: 11, t: 10, i: 36, }, D { l: 12, t: 10, i: 28, }, D { l: 12, t: 10, i: 630, }, D { l: 13, t: 10, i: 21, }, D { l: 13, t: 10, i: 349, }, D { l: 14, t: 10, i: 7 }, D { l: 145, t: 10, i: 13, }, D { l: 132, t: 0, i: 381, }, D { l: 132, t: 11, i: 606, }, D { l: 4, t: 10, i: 342, }, D { l: 135, t: 10, i: 1179, }, D { l: 7, t: 11, i: 1587, }, D { l: 7, t: 11, i: 1707, }, D { l: 10, t: 11, i: 528, }, D { l: 139, t: 11, i: 504, }, D { l: 12, t: 11, i: 39, }, D { l: 13, t: 11, i: 265, }, D { l: 141, t: 11, i: 439, }, D { l: 4, t: 10, i: 928, }, D { l: 133, t: 10, i: 910, }, D { l: 7, t: 10, i: 1838, }, D { l: 7, t: 11, i: 1978, }, D { l: 136, t: 11, i: 676, }, D { l: 6, t: 0, i: 762 }, D { l: 6, t: 0, i: 796 }, D { l: 134, t: 0, i: 956, }, D { l: 4, t: 10, i: 318, }, D { l: 4, t: 10, i: 496, }, D { l: 7, t: 10, i: 856, }, D { l: 139, t: 10, i: 654, }, D { l: 137, t: 11, i: 242, }, D { l: 4, t: 11, i: 361, }, D { l: 133, t: 11, i: 315, }, D { l: 132, t: 11, i: 461, }, D { l: 132, t: 11, i: 472, }, D { l: 132, t: 0, i: 857, }, D { l: 5, t: 0, i: 21 }, D { l: 6, t: 0, i: 77 }, D { l: 6, t: 0, i: 157 }, D { l: 7, t: 0, i: 974 }, D { l: 7, t: 0, i: 1301, }, D { l: 7, t: 0, i: 1339, }, D { l: 7, t: 0, i: 1490, }, D { l: 7, t: 0, i: 1873, }, D { l: 9, t: 0, i: 628 }, D { l: 7, t: 10, i: 915, }, D { l: 8, t: 10, i: 247, }, D { l: 147, t: 10, i: 0, }, D { l: 4, t: 10, i: 202, }, D { l: 5, t: 10, i: 382, }, D { l: 6, t: 10, i: 454, }, D { l: 7, t: 10, i: 936, }, D { l: 7, t: 10, i: 1803, }, D { l: 8, t: 10, i: 758, }, D { l: 9, t: 10, i: 375, }, D { l: 9, t: 10, i: 895, }, D { l: 10, t: 10, i: 743, }, D { l: 10, t: 10, i: 792, }, D { l: 11, t: 10, i: 978, }, D { l: 11, t: 10, i: 1012, }, D { l: 142, t: 10, i: 109, }, D { l: 7, t: 11, i: 617, }, D { l: 10, t: 11, i: 498, }, D { l: 11, t: 11, i: 501, }, D { l: 12, t: 11, i: 16, }, D { l: 140, t: 11, i: 150, }, D { l: 7, t: 10, i: 1150, }, D { l: 7, t: 10, i: 1425, }, D { l: 7, t: 10, i: 1453, }, D { l: 10, t: 11, i: 747, }, D { l: 140, t: 10, i: 513, }, D { l: 133, t: 11, i: 155, }, D { l: 11, t: 0, i: 919, }, D { l: 141, t: 0, i: 409, }, D { l: 138, t: 10, i: 791, }, D { l: 10, t: 0, i: 633, }, D { l: 139, t: 11, i: 729, }, D { l: 7, t: 11, i: 163, }, D { l: 8, t: 11, i: 319, }, D { l: 9, t: 11, i: 402, }, D { l: 10, t: 11, i: 24, }, D { l: 10, t: 11, i: 681, }, D { l: 11, t: 11, i: 200, }, D { l: 11, t: 11, i: 567, }, D { l: 12, t: 11, i: 253, }, D { l: 12, t: 11, i: 410, }, D { l: 142, t: 11, i: 219, }, D { l: 5, t: 11, i: 475, }, D { l: 7, t: 11, i: 1780, }, D { l: 9, t: 11, i: 230, }, D { l: 11, t: 11, i: 297, }, D { l: 11, t: 11, i: 558, }, D { l: 14, t: 11, i: 322, }, D { l: 147, t: 11, i: 76, }, D { l: 7, t: 0, i: 332 }, D { l: 6, t: 10, i: 445, }, D { l: 137, t: 10, i: 909, }, D { l: 135, t: 11, i: 1956, }, D { l: 136, t: 11, i: 274, }, D { l: 134, t: 10, i: 578, }, D { l: 135, t: 0, i: 1489, }, D { l: 135, t: 11, i: 1848, }, D { l: 5, t: 11, i: 944, }, D { l: 134, t: 11, i: 1769, }, D { l: 132, t: 11, i: 144, }, D { l: 136, t: 10, i: 766, }, D { l: 4, t: 0, i: 832 }, D { l: 135, t: 10, i: 541, }, D { l: 8, t: 0, i: 398 }, D { l: 9, t: 0, i: 681 }, D { l: 139, t: 0, i: 632, }, D { l: 136, t: 0, i: 645, }, D { l: 9, t: 0, i: 791 }, D { l: 10, t: 0, i: 93 }, D { l: 16, t: 0, i: 13 }, D { l: 17, t: 0, i: 23 }, D { l: 18, t: 0, i: 135, }, D { l: 19, t: 0, i: 12 }, D { l: 20, t: 0, i: 1 }, D { l: 20, t: 0, i: 12 }, D { l: 148, t: 0, i: 14, }, D { l: 6, t: 11, i: 247, }, D { l: 137, t: 11, i: 555, }, D { l: 134, t: 0, i: 20, }, D { l: 132, t: 0, i: 800, }, D { l: 135, t: 0, i: 1841, }, D { l: 139, t: 10, i: 983, }, D { l: 137, t: 10, i: 768, }, D { l: 132, t: 10, i: 584, }, D { l: 141, t: 11, i: 51, }, D { l: 6, t: 0, i: 1993, }, D { l: 4, t: 11, i: 620, }, D { l: 138, t: 11, i: 280, }, D { l: 136, t: 0, i: 769, }, D { l: 11, t: 0, i: 290, }, D { l: 11, t: 0, i: 665, }, D { l: 7, t: 11, i: 1810, }, D { l: 11, t: 11, i: 866, }, D { l: 12, t: 11, i: 103, }, D { l: 13, t: 11, i: 495, }, D { l: 17, t: 11, i: 67, }, D { l: 147, t: 11, i: 74, }, D { l: 134, t: 0, i: 1426, }, D { l: 139, t: 0, i: 60, }, D { l: 4, t: 10, i: 326, }, D { l: 135, t: 10, i: 1770, }, D { l: 7, t: 0, i: 1874, }, D { l: 9, t: 0, i: 641 }, D { l: 132, t: 10, i: 226, }, D { l: 6, t: 0, i: 644 }, D { l: 5, t: 10, i: 426, }, D { l: 8, t: 10, i: 30 }, D { l: 9, t: 10, i: 2 }, D { l: 11, t: 10, i: 549, }, D { l: 147, t: 10, i: 122, }, D { l: 5, t: 11, i: 428, }, D { l: 138, t: 11, i: 442, }, D { l: 135, t: 11, i: 1871, }, D { l: 135, t: 0, i: 1757, }, D { l: 147, t: 10, i: 117, }, D { l: 135, t: 0, i: 937, }, D { l: 135, t: 0, i: 1652, }, D { l: 6, t: 0, i: 654 }, D { l: 134, t: 0, i: 1476, }, D { l: 133, t: 11, i: 99, }, D { l: 135, t: 0, i: 527, }, D { l: 132, t: 10, i: 345, }, D { l: 4, t: 10, i: 385, }, D { l: 4, t: 11, i: 397, }, D { l: 7, t: 10, i: 265, }, D { l: 135, t: 10, i: 587, }, D { l: 4, t: 0, i: 579 }, D { l: 5, t: 0, i: 226 }, D { l: 5, t: 0, i: 323 }, D { l: 135, t: 0, i: 960, }, D { l: 134, t: 0, i: 1486, }, D { l: 8, t: 11, i: 502, }, D { l: 144, t: 11, i: 9, }, D { l: 4, t: 10, i: 347, }, D { l: 5, t: 10, i: 423, }, D { l: 5, t: 10, i: 996, }, D { l: 135, t: 10, i: 1329, }, D { l: 7, t: 11, i: 727, }, D { l: 146, t: 11, i: 73, }, D { l: 4, t: 11, i: 485, }, D { l: 7, t: 11, i: 353, }, D { l: 7, t: 10, i: 1259, }, D { l: 7, t: 11, i: 1523, }, D { l: 9, t: 10, i: 125, }, D { l: 139, t: 10, i: 65, }, D { l: 6, t: 0, i: 325 }, D { l: 5, t: 10, i: 136, }, D { l: 6, t: 11, i: 366, }, D { l: 7, t: 11, i: 1384, }, D { l: 7, t: 11, i: 1601, }, D { l: 136, t: 10, i: 644, }, D { l: 138, t: 11, i: 160, }, D { l: 6, t: 0, i: 1345, }, D { l: 137, t: 11, i: 282, }, D { l: 18, t: 0, i: 91 }, D { l: 147, t: 0, i: 70, }, D { l: 136, t: 0, i: 404, }, D { l: 4, t: 11, i: 157, }, D { l: 133, t: 11, i: 471, }, D { l: 133, t: 0, i: 973, }, D { l: 6, t: 0, i: 135 }, D { l: 135, t: 0, i: 1176, }, D { l: 8, t: 11, i: 116, }, D { l: 11, t: 11, i: 551, }, D { l: 142, t: 11, i: 159, }, D { l: 4, t: 0, i: 549 }, D { l: 4, t: 10, i: 433, }, D { l: 133, t: 10, i: 719, }, D { l: 136, t: 0, i: 976, }, D { l: 5, t: 11, i: 160, }, D { l: 7, t: 11, i: 363, }, D { l: 7, t: 11, i: 589, }, D { l: 10, t: 11, i: 170, }, D { l: 141, t: 11, i: 55, }, D { l: 144, t: 0, i: 21, }, D { l: 144, t: 0, i: 51, }, D { l: 135, t: 0, i: 314, }, D { l: 135, t: 10, i: 1363, }, D { l: 4, t: 11, i: 108, }, D { l: 7, t: 11, i: 405, }, D { l: 10, t: 11, i: 491, }, D { l: 139, t: 11, i: 498, }, D { l: 146, t: 0, i: 4 }, D { l: 4, t: 10, i: 555, }, D { l: 8, t: 10, i: 536, }, D { l: 10, t: 10, i: 288, }, D { l: 139, t: 10, i: 1005, }, D { l: 135, t: 11, i: 1005, }, D { l: 6, t: 0, i: 281 }, D { l: 7, t: 0, i: 6 }, D { l: 8, t: 0, i: 282 }, D { l: 8, t: 0, i: 480 }, D { l: 8, t: 0, i: 499 }, D { l: 9, t: 0, i: 198 }, D { l: 10, t: 0, i: 143, }, D { l: 10, t: 0, i: 169, }, D { l: 10, t: 0, i: 211, }, D { l: 10, t: 0, i: 417, }, D { l: 10, t: 0, i: 574, }, D { l: 11, t: 0, i: 147, }, D { l: 11, t: 0, i: 395, }, D { l: 12, t: 0, i: 75 }, D { l: 12, t: 0, i: 407, }, D { l: 12, t: 0, i: 608, }, D { l: 13, t: 0, i: 500, }, D { l: 142, t: 0, i: 251, }, D { l: 6, t: 0, i: 1093, }, D { l: 6, t: 0, i: 1405, }, D { l: 9, t: 10, i: 370, }, D { l: 138, t: 10, i: 90, }, D { l: 4, t: 11, i: 926, }, D { l: 133, t: 11, i: 983, }, D { l: 135, t: 0, i: 1776, }, D { l: 134, t: 0, i: 1528, }, D { l: 132, t: 0, i: 419, }, D { l: 132, t: 11, i: 538, }, D { l: 6, t: 11, i: 294, }, D { l: 7, t: 11, i: 1267, }, D { l: 136, t: 11, i: 624, }, D { l: 135, t: 11, i: 1772, }, D { l: 138, t: 11, i: 301, }, D { l: 4, t: 10, i: 257, }, D { l: 135, t: 10, i: 2031, }, D { l: 4, t: 0, i: 138 }, D { l: 7, t: 0, i: 1012, }, D { l: 7, t: 0, i: 1280, }, D { l: 9, t: 0, i: 76 }, D { l: 135, t: 10, i: 1768, }, D { l: 132, t: 11, i: 757, }, D { l: 5, t: 0, i: 29 }, D { l: 140, t: 0, i: 638, }, D { l: 7, t: 11, i: 655, }, D { l: 135, t: 11, i: 1844, }, D { l: 7, t: 0, i: 1418, }, D { l: 6, t: 11, i: 257, }, D { l: 135, t: 11, i: 1522, }, D { l: 8, t: 11, i: 469, }, D { l: 138, t: 11, i: 47, }, D { l: 142, t: 11, i: 278, }, D { l: 6, t: 10, i: 83 }, D { l: 6, t: 10, i: 1733, }, D { l: 135, t: 10, i: 1389, }, D { l: 11, t: 11, i: 204, }, D { l: 11, t: 11, i: 243, }, D { l: 140, t: 11, i: 293, }, D { l: 135, t: 11, i: 1875, }, D { l: 6, t: 0, i: 1710, }, D { l: 135, t: 0, i: 2038, }, D { l: 137, t: 11, i: 299, }, D { l: 4, t: 0, i: 17 }, D { l: 5, t: 0, i: 23 }, D { l: 7, t: 0, i: 995 }, D { l: 11, t: 0, i: 383, }, D { l: 11, t: 0, i: 437, }, D { l: 12, t: 0, i: 460, }, D { l: 140, t: 0, i: 532, }, D { l: 133, t: 0, i: 862, }, D { l: 137, t: 10, i: 696, }, D { l: 6, t: 0, i: 592 }, D { l: 138, t: 0, i: 946, }, D { l: 138, t: 11, i: 599, }, D { l: 7, t: 10, i: 1718, }, D { l: 9, t: 10, i: 95 }, D { l: 9, t: 10, i: 274, }, D { l: 10, t: 10, i: 279, }, D { l: 10, t: 10, i: 317, }, D { l: 10, t: 10, i: 420, }, D { l: 11, t: 10, i: 303, }, D { l: 11, t: 10, i: 808, }, D { l: 12, t: 10, i: 134, }, D { l: 12, t: 10, i: 367, }, D { l: 13, t: 10, i: 149, }, D { l: 13, t: 10, i: 347, }, D { l: 14, t: 10, i: 349, }, D { l: 14, t: 10, i: 406, }, D { l: 18, t: 10, i: 22, }, D { l: 18, t: 10, i: 89, }, D { l: 18, t: 10, i: 122, }, D { l: 147, t: 10, i: 47, }, D { l: 8, t: 0, i: 70 }, D { l: 12, t: 0, i: 171, }, D { l: 141, t: 0, i: 272, }, D { l: 133, t: 10, i: 26, }, D { l: 132, t: 10, i: 550, }, D { l: 137, t: 0, i: 812, }, D { l: 10, t: 0, i: 233, }, D { l: 139, t: 0, i: 76, }, D { l: 134, t: 0, i: 988, }, D { l: 134, t: 0, i: 442, }, D { l: 136, t: 10, i: 822, }, D { l: 7, t: 0, i: 896 }, D { l: 4, t: 10, i: 902, }, D { l: 5, t: 10, i: 809, }, D { l: 134, t: 10, i: 122, }, D { l: 5, t: 11, i: 150, }, D { l: 7, t: 11, i: 106, }, D { l: 8, t: 11, i: 603, }, D { l: 9, t: 11, i: 593, }, D { l: 9, t: 11, i: 634, }, D { l: 10, t: 11, i: 44, }, D { l: 10, t: 11, i: 173, }, D { l: 11, t: 11, i: 462, }, D { l: 11, t: 11, i: 515, }, D { l: 13, t: 11, i: 216, }, D { l: 13, t: 11, i: 288, }, D { l: 142, t: 11, i: 400, }, D { l: 136, t: 0, i: 483, }, D { l: 135, t: 10, i: 262, }, D { l: 6, t: 0, i: 1709, }, D { l: 133, t: 10, i: 620, }, D { l: 4, t: 10, i: 34 }, D { l: 5, t: 10, i: 574, }, D { l: 7, t: 10, i: 279, }, D { l: 7, t: 10, i: 1624, }, D { l: 136, t: 10, i: 601, }, D { l: 137, t: 10, i: 170, }, D { l: 147, t: 0, i: 119, }, D { l: 12, t: 11, i: 108, }, D { l: 141, t: 11, i: 291, }, D { l: 11, t: 0, i: 69 }, D { l: 12, t: 0, i: 105, }, D { l: 12, t: 0, i: 117, }, D { l: 13, t: 0, i: 213, }, D { l: 14, t: 0, i: 13 }, D { l: 14, t: 0, i: 62 }, D { l: 14, t: 0, i: 177, }, D { l: 14, t: 0, i: 421, }, D { l: 15, t: 0, i: 19 }, D { l: 146, t: 0, i: 141, }, D { l: 137, t: 0, i: 309, }, D { l: 11, t: 11, i: 278, }, D { l: 142, t: 11, i: 73, }, D { l: 7, t: 0, i: 608 }, D { l: 7, t: 0, i: 976 }, D { l: 9, t: 0, i: 146 }, D { l: 10, t: 0, i: 206, }, D { l: 10, t: 0, i: 596, }, D { l: 13, t: 0, i: 218, }, D { l: 142, t: 0, i: 153, }, D { l: 133, t: 10, i: 332, }, D { l: 6, t: 10, i: 261, }, D { l: 8, t: 10, i: 182, }, D { l: 139, t: 10, i: 943, }, D { l: 4, t: 11, i: 493, }, D { l: 144, t: 11, i: 55, }, D { l: 134, t: 10, i: 1721, }, D { l: 132, t: 0, i: 768, }, D { l: 4, t: 10, i: 933, }, D { l: 133, t: 10, i: 880, }, D { l: 7, t: 11, i: 555, }, D { l: 7, t: 11, i: 1316, }, D { l: 7, t: 11, i: 1412, }, D { l: 7, t: 11, i: 1839, }, D { l: 9, t: 11, i: 192, }, D { l: 9, t: 11, i: 589, }, D { l: 11, t: 11, i: 241, }, D { l: 11, t: 11, i: 676, }, D { l: 11, t: 11, i: 811, }, D { l: 11, t: 11, i: 891, }, D { l: 12, t: 11, i: 140, }, D { l: 12, t: 11, i: 346, }, D { l: 12, t: 11, i: 479, }, D { l: 13, t: 11, i: 30, }, D { l: 13, t: 11, i: 49, }, D { l: 13, t: 11, i: 381, }, D { l: 14, t: 11, i: 188, }, D { l: 15, t: 11, i: 150, }, D { l: 16, t: 11, i: 76, }, D { l: 18, t: 11, i: 30, }, D { l: 148, t: 11, i: 52, }, D { l: 4, t: 0, i: 518 }, D { l: 135, t: 0, i: 1136, }, D { l: 6, t: 11, i: 568, }, D { l: 7, t: 11, i: 112, }, D { l: 7, t: 11, i: 1804, }, D { l: 8, t: 11, i: 362, }, D { l: 8, t: 11, i: 410, }, D { l: 8, t: 11, i: 830, }, D { l: 9, t: 11, i: 514, }, D { l: 11, t: 11, i: 649, }, D { l: 142, t: 11, i: 157, }, D { l: 135, t: 11, i: 673, }, D { l: 8, t: 0, i: 689 }, D { l: 137, t: 0, i: 863, }, D { l: 4, t: 0, i: 18 }, D { l: 7, t: 0, i: 145 }, D { l: 7, t: 0, i: 444 }, D { l: 7, t: 0, i: 1278, }, D { l: 8, t: 0, i: 49 }, D { l: 8, t: 0, i: 400 }, D { l: 9, t: 0, i: 71 }, D { l: 9, t: 0, i: 250 }, D { l: 10, t: 0, i: 459, }, D { l: 12, t: 0, i: 160, }, D { l: 16, t: 0, i: 24 }, D { l: 132, t: 11, i: 625, }, D { l: 140, t: 0, i: 1020, }, D { l: 4, t: 0, i: 997 }, D { l: 6, t: 0, i: 1946, }, D { l: 6, t: 0, i: 1984, }, D { l: 134, t: 0, i: 1998, }, D { l: 6, t: 11, i: 16 }, D { l: 6, t: 11, i: 158, }, D { l: 7, t: 11, i: 43 }, D { l: 7, t: 11, i: 129, }, D { l: 7, t: 11, i: 181, }, D { l: 8, t: 11, i: 276, }, D { l: 8, t: 11, i: 377, }, D { l: 10, t: 11, i: 523, }, D { l: 11, t: 11, i: 816, }, D { l: 12, t: 11, i: 455, }, D { l: 13, t: 11, i: 303, }, D { l: 142, t: 11, i: 135, }, D { l: 133, t: 10, i: 812, }, D { l: 134, t: 0, i: 658, }, D { l: 4, t: 11, i: 1 }, D { l: 7, t: 11, i: 1143, }, D { l: 7, t: 11, i: 1463, }, D { l: 8, t: 11, i: 61 }, D { l: 9, t: 11, i: 207, }, D { l: 9, t: 11, i: 390, }, D { l: 9, t: 11, i: 467, }, D { l: 139, t: 11, i: 836, }, D { l: 150, t: 11, i: 26, }, D { l: 140, t: 0, i: 106, }, D { l: 6, t: 0, i: 1827, }, D { l: 10, t: 0, i: 931, }, D { l: 18, t: 0, i: 166, }, D { l: 20, t: 0, i: 114, }, D { l: 4, t: 10, i: 137, }, D { l: 7, t: 10, i: 1178, }, D { l: 7, t: 11, i: 1319, }, D { l: 135, t: 10, i: 1520, }, D { l: 133, t: 0, i: 1010, }, D { l: 4, t: 11, i: 723, }, D { l: 5, t: 11, i: 895, }, D { l: 7, t: 11, i: 1031, }, D { l: 8, t: 11, i: 199, }, D { l: 8, t: 11, i: 340, }, D { l: 9, t: 11, i: 153, }, D { l: 9, t: 11, i: 215, }, D { l: 10, t: 11, i: 21, }, D { l: 10, t: 11, i: 59, }, D { l: 10, t: 11, i: 80, }, D { l: 10, t: 11, i: 224, }, D { l: 11, t: 11, i: 229, }, D { l: 11, t: 11, i: 652, }, D { l: 12, t: 11, i: 192, }, D { l: 13, t: 11, i: 146, }, D { l: 142, t: 11, i: 91, }, D { l: 132, t: 11, i: 295, }, D { l: 6, t: 11, i: 619, }, D { l: 7, t: 11, i: 898, }, D { l: 7, t: 11, i: 1092, }, D { l: 8, t: 11, i: 485, }, D { l: 18, t: 11, i: 28, }, D { l: 147, t: 11, i: 116, }, D { l: 137, t: 11, i: 51, }, D { l: 6, t: 10, i: 1661, }, D { l: 7, t: 10, i: 1975, }, D { l: 7, t: 10, i: 2009, }, D { l: 135, t: 10, i: 2011, }, D { l: 5, t: 11, i: 309, }, D { l: 140, t: 11, i: 211, }, D { l: 5, t: 0, i: 87 }, D { l: 7, t: 0, i: 313 }, D { l: 7, t: 0, i: 1103, }, D { l: 10, t: 0, i: 208, }, D { l: 10, t: 0, i: 582, }, D { l: 11, t: 0, i: 389, }, D { l: 11, t: 0, i: 813, }, D { l: 12, t: 0, i: 385, }, D { l: 13, t: 0, i: 286, }, D { l: 14, t: 0, i: 124, }, D { l: 146, t: 0, i: 108, }, D { l: 5, t: 11, i: 125, }, D { l: 8, t: 11, i: 77 }, D { l: 138, t: 11, i: 15, }, D { l: 132, t: 0, i: 267, }, D { l: 133, t: 0, i: 703, }, D { l: 137, t: 11, i: 155, }, D { l: 133, t: 11, i: 439, }, D { l: 11, t: 11, i: 164, }, D { l: 140, t: 11, i: 76, }, D { l: 9, t: 0, i: 496 }, D { l: 5, t: 10, i: 89 }, D { l: 7, t: 10, i: 1915, }, D { l: 9, t: 10, i: 185, }, D { l: 9, t: 10, i: 235, }, D { l: 10, t: 10, i: 64, }, D { l: 10, t: 10, i: 270, }, D { l: 10, t: 10, i: 403, }, D { l: 10, t: 10, i: 469, }, D { l: 10, t: 10, i: 529, }, D { l: 10, t: 10, i: 590, }, D { l: 11, t: 10, i: 140, }, D { l: 11, t: 10, i: 860, }, D { l: 13, t: 10, i: 1 }, D { l: 13, t: 10, i: 422, }, D { l: 14, t: 10, i: 341, }, D { l: 14, t: 10, i: 364, }, D { l: 17, t: 10, i: 93, }, D { l: 18, t: 10, i: 113, }, D { l: 19, t: 10, i: 97, }, D { l: 147, t: 10, i: 113, }, D { l: 133, t: 10, i: 695, }, D { l: 135, t: 0, i: 1121, }, D { l: 5, t: 10, i: 6 }, D { l: 6, t: 10, i: 183, }, D { l: 7, t: 10, i: 680, }, D { l: 7, t: 10, i: 978, }, D { l: 7, t: 10, i: 1013, }, D { l: 7, t: 10, i: 1055, }, D { l: 12, t: 10, i: 230, }, D { l: 13, t: 10, i: 172, }, D { l: 146, t: 10, i: 29, }, D { l: 4, t: 11, i: 8 }, D { l: 7, t: 11, i: 1152, }, D { l: 7, t: 11, i: 1153, }, D { l: 7, t: 11, i: 1715, }, D { l: 9, t: 11, i: 374, }, D { l: 10, t: 11, i: 478, }, D { l: 139, t: 11, i: 648, }, D { l: 135, t: 11, i: 1099, }, D { l: 6, t: 10, i: 29 }, D { l: 139, t: 10, i: 63, }, D { l: 4, t: 0, i: 561 }, D { l: 10, t: 0, i: 249, }, D { l: 139, t: 0, i: 209, }, D { l: 132, t: 0, i: 760, }, D { l: 7, t: 11, i: 799, }, D { l: 138, t: 11, i: 511, }, D { l: 136, t: 11, i: 87, }, D { l: 9, t: 0, i: 154 }, D { l: 140, t: 0, i: 485, }, D { l: 136, t: 0, i: 255, }, D { l: 132, t: 0, i: 323, }, D { l: 140, t: 0, i: 419, }, D { l: 132, t: 10, i: 311, }, D { l: 134, t: 10, i: 1740, }, D { l: 4, t: 0, i: 368 }, D { l: 135, t: 0, i: 641, }, D { l: 7, t: 10, i: 170, }, D { l: 8, t: 10, i: 90 }, D { l: 8, t: 10, i: 177, }, D { l: 8, t: 10, i: 415, }, D { l: 11, t: 10, i: 714, }, D { l: 142, t: 10, i: 281, }, D { l: 4, t: 11, i: 69 }, D { l: 5, t: 11, i: 122, }, D { l: 9, t: 11, i: 656, }, D { l: 138, t: 11, i: 464, }, D { l: 5, t: 11, i: 849, }, D { l: 134, t: 11, i: 1633, }, D { l: 8, t: 0, i: 522 }, D { l: 142, t: 0, i: 328, }, D { l: 11, t: 10, i: 91, }, D { l: 13, t: 10, i: 129, }, D { l: 15, t: 10, i: 101, }, D { l: 145, t: 10, i: 125, }, D { l: 7, t: 0, i: 562 }, D { l: 8, t: 0, i: 551 }, D { l: 4, t: 10, i: 494, }, D { l: 6, t: 10, i: 74 }, D { l: 7, t: 10, i: 44 }, D { l: 11, t: 11, i: 499, }, D { l: 12, t: 10, i: 17, }, D { l: 15, t: 10, i: 5 }, D { l: 148, t: 10, i: 11, }, D { l: 4, t: 10, i: 276, }, D { l: 133, t: 10, i: 296, }, D { l: 9, t: 0, i: 92 }, D { l: 147, t: 0, i: 91, }, D { l: 4, t: 10, i: 7 }, D { l: 5, t: 10, i: 90 }, D { l: 5, t: 10, i: 158, }, D { l: 6, t: 10, i: 542, }, D { l: 7, t: 10, i: 221, }, D { l: 7, t: 10, i: 1574, }, D { l: 9, t: 10, i: 490, }, D { l: 10, t: 10, i: 540, }, D { l: 11, t: 10, i: 443, }, D { l: 139, t: 10, i: 757, }, D { l: 6, t: 0, i: 525 }, D { l: 6, t: 0, i: 1976, }, D { l: 8, t: 0, i: 806 }, D { l: 9, t: 0, i: 876 }, D { l: 140, t: 0, i: 284, }, D { l: 5, t: 11, i: 859, }, D { l: 7, t: 10, i: 588, }, D { l: 7, t: 11, i: 1160, }, D { l: 8, t: 11, i: 107, }, D { l: 9, t: 10, i: 175, }, D { l: 9, t: 11, i: 291, }, D { l: 9, t: 11, i: 439, }, D { l: 10, t: 10, i: 530, }, D { l: 10, t: 11, i: 663, }, D { l: 11, t: 11, i: 609, }, D { l: 140, t: 11, i: 197, }, D { l: 7, t: 11, i: 168, }, D { l: 13, t: 11, i: 196, }, D { l: 141, t: 11, i: 237, }, D { l: 139, t: 0, i: 958, }, D { l: 133, t: 0, i: 594, }, D { l: 135, t: 10, i: 580, }, D { l: 7, t: 10, i: 88 }, D { l: 136, t: 10, i: 627, }, D { l: 6, t: 0, i: 479 }, D { l: 6, t: 0, i: 562 }, D { l: 7, t: 0, i: 1060, }, D { l: 13, t: 0, i: 6 }, D { l: 5, t: 10, i: 872, }, D { l: 6, t: 10, i: 57 }, D { l: 7, t: 10, i: 471, }, D { l: 9, t: 10, i: 447, }, D { l: 137, t: 10, i: 454, }, D { l: 136, t: 11, i: 413, }, D { l: 145, t: 11, i: 19, }, D { l: 4, t: 11, i: 117, }, D { l: 6, t: 11, i: 372, }, D { l: 7, t: 11, i: 1905, }, D { l: 142, t: 11, i: 323, }, D { l: 4, t: 11, i: 722, }, D { l: 139, t: 11, i: 471, }, D { l: 17, t: 0, i: 61 }, D { l: 5, t: 10, i: 31 }, D { l: 134, t: 10, i: 614, }, D { l: 8, t: 10, i: 330, }, D { l: 140, t: 10, i: 477, }, D { l: 7, t: 10, i: 1200, }, D { l: 138, t: 10, i: 460, }, D { l: 6, t: 10, i: 424, }, D { l: 135, t: 10, i: 1866, }, D { l: 6, t: 0, i: 1641, }, D { l: 136, t: 0, i: 820, }, D { l: 6, t: 0, i: 1556, }, D { l: 134, t: 0, i: 1618, }, D { l: 9, t: 11, i: 5 }, D { l: 12, t: 11, i: 216, }, D { l: 12, t: 11, i: 294, }, D { l: 12, t: 11, i: 298, }, D { l: 12, t: 11, i: 400, }, D { l: 12, t: 11, i: 518, }, D { l: 13, t: 11, i: 229, }, D { l: 143, t: 11, i: 139, }, D { l: 15, t: 11, i: 155, }, D { l: 144, t: 11, i: 79, }, D { l: 4, t: 0, i: 302 }, D { l: 135, t: 0, i: 1766, }, D { l: 5, t: 10, i: 13 }, D { l: 134, t: 10, i: 142, }, D { l: 6, t: 0, i: 148 }, D { l: 7, t: 0, i: 1313, }, D { l: 7, t: 10, i: 116, }, D { l: 8, t: 10, i: 322, }, D { l: 8, t: 10, i: 755, }, D { l: 9, t: 10, i: 548, }, D { l: 10, t: 10, i: 714, }, D { l: 11, t: 10, i: 884, }, D { l: 141, t: 10, i: 324, }, D { l: 137, t: 0, i: 676, }, D { l: 9, t: 11, i: 88 }, D { l: 139, t: 11, i: 270, }, D { l: 5, t: 11, i: 12 }, D { l: 7, t: 11, i: 375, }, D { l: 137, t: 11, i: 438, }, D { l: 134, t: 0, i: 1674, }, D { l: 7, t: 10, i: 1472, }, D { l: 135, t: 10, i: 1554, }, D { l: 11, t: 0, i: 178, }, D { l: 7, t: 10, i: 1071, }, D { l: 7, t: 10, i: 1541, }, D { l: 7, t: 10, i: 1767, }, D { l: 7, t: 10, i: 1806, }, D { l: 11, t: 10, i: 162, }, D { l: 11, t: 10, i: 242, }, D { l: 12, t: 10, i: 605, }, D { l: 15, t: 10, i: 26, }, D { l: 144, t: 10, i: 44, }, D { l: 6, t: 0, i: 389 }, D { l: 7, t: 0, i: 149 }, D { l: 9, t: 0, i: 142 }, D { l: 138, t: 0, i: 94, }, D { l: 140, t: 11, i: 71, }, D { l: 145, t: 10, i: 115, }, D { l: 6, t: 0, i: 8 }, D { l: 7, t: 0, i: 1881, }, D { l: 8, t: 0, i: 91 }, D { l: 11, t: 11, i: 966, }, D { l: 12, t: 11, i: 287, }, D { l: 13, t: 11, i: 342, }, D { l: 13, t: 11, i: 402, }, D { l: 15, t: 11, i: 110, }, D { l: 143, t: 11, i: 163, }, D { l: 4, t: 11, i: 258, }, D { l: 136, t: 11, i: 639, }, D { l: 6, t: 11, i: 22 }, D { l: 7, t: 11, i: 903, }, D { l: 138, t: 11, i: 577, }, D { l: 133, t: 11, i: 681, }, D { l: 135, t: 10, i: 1111, }, D { l: 135, t: 11, i: 1286, }, D { l: 9, t: 0, i: 112 }, D { l: 8, t: 10, i: 1 }, D { l: 138, t: 10, i: 326, }, D { l: 5, t: 10, i: 488, }, D { l: 6, t: 10, i: 527, }, D { l: 7, t: 10, i: 489, }, D { l: 7, t: 10, i: 1636, }, D { l: 8, t: 10, i: 121, }, D { l: 8, t: 10, i: 144, }, D { l: 8, t: 10, i: 359, }, D { l: 9, t: 10, i: 193, }, D { l: 9, t: 10, i: 241, }, D { l: 9, t: 10, i: 336, }, D { l: 9, t: 10, i: 882, }, D { l: 11, t: 10, i: 266, }, D { l: 11, t: 10, i: 372, }, D { l: 11, t: 10, i: 944, }, D { l: 12, t: 10, i: 401, }, D { l: 140, t: 10, i: 641, }, D { l: 4, t: 11, i: 664, }, D { l: 133, t: 11, i: 804, }, D { l: 6, t: 0, i: 747 }, D { l: 134, t: 0, i: 1015, }, D { l: 135, t: 0, i: 1746, }, D { l: 9, t: 10, i: 31 }, D { l: 10, t: 10, i: 244, }, D { l: 10, t: 10, i: 699, }, D { l: 12, t: 10, i: 149, }, D { l: 141, t: 10, i: 497, }, D { l: 133, t: 10, i: 377, }, D { l: 135, t: 0, i: 24, }, D { l: 6, t: 0, i: 1352, }, D { l: 5, t: 11, i: 32 }, D { l: 145, t: 10, i: 101, }, D { l: 7, t: 0, i: 1530, }, D { l: 10, t: 0, i: 158, }, D { l: 13, t: 0, i: 13 }, D { l: 13, t: 0, i: 137, }, D { l: 13, t: 0, i: 258, }, D { l: 14, t: 0, i: 111, }, D { l: 14, t: 0, i: 225, }, D { l: 14, t: 0, i: 253, }, D { l: 14, t: 0, i: 304, }, D { l: 14, t: 0, i: 339, }, D { l: 14, t: 0, i: 417, }, D { l: 146, t: 0, i: 33, }, D { l: 4, t: 0, i: 503 }, D { l: 135, t: 0, i: 1661, }, D { l: 5, t: 0, i: 130 }, D { l: 6, t: 0, i: 845 }, D { l: 7, t: 0, i: 1314, }, D { l: 9, t: 0, i: 610 }, D { l: 10, t: 0, i: 718, }, D { l: 11, t: 0, i: 601, }, D { l: 11, t: 0, i: 819, }, D { l: 11, t: 0, i: 946, }, D { l: 140, t: 0, i: 536, }, D { l: 10, t: 0, i: 149, }, D { l: 11, t: 0, i: 280, }, D { l: 142, t: 0, i: 336, }, D { l: 134, t: 0, i: 1401, }, D { l: 135, t: 0, i: 1946, }, D { l: 8, t: 0, i: 663 }, D { l: 144, t: 0, i: 8 }, D { l: 134, t: 0, i: 1607, }, D { l: 135, t: 10, i: 2023, }, D { l: 4, t: 11, i: 289, }, D { l: 7, t: 11, i: 629, }, D { l: 7, t: 11, i: 1698, }, D { l: 7, t: 11, i: 1711, }, D { l: 140, t: 11, i: 215, }, D { l: 6, t: 11, i: 450, }, D { l: 136, t: 11, i: 109, }, D { l: 10, t: 0, i: 882, }, D { l: 10, t: 0, i: 883, }, D { l: 10, t: 0, i: 914, }, D { l: 138, t: 0, i: 928, }, D { l: 133, t: 10, i: 843, }, D { l: 136, t: 11, i: 705, }, D { l: 132, t: 10, i: 554, }, D { l: 133, t: 10, i: 536, }, D { l: 5, t: 0, i: 417 }, D { l: 9, t: 10, i: 79 }, D { l: 11, t: 10, i: 625, }, D { l: 145, t: 10, i: 7, }, D { l: 7, t: 11, i: 1238, }, D { l: 142, t: 11, i: 37, }, D { l: 4, t: 0, i: 392 }, D { l: 135, t: 0, i: 1597, }, D { l: 5, t: 0, i: 433 }, D { l: 9, t: 0, i: 633 }, D { l: 11, t: 0, i: 629, }, D { l: 132, t: 10, i: 424, }, D { l: 7, t: 10, i: 336, }, D { l: 136, t: 10, i: 785, }, D { l: 134, t: 11, i: 355, }, D { l: 6, t: 0, i: 234 }, D { l: 7, t: 0, i: 769 }, D { l: 9, t: 0, i: 18 }, D { l: 138, t: 0, i: 358, }, D { l: 4, t: 10, i: 896, }, D { l: 134, t: 10, i: 1777, }, D { l: 138, t: 11, i: 323, }, D { l: 7, t: 0, i: 140 }, D { l: 7, t: 0, i: 1950, }, D { l: 8, t: 0, i: 680 }, D { l: 11, t: 0, i: 817, }, D { l: 147, t: 0, i: 88, }, D { l: 7, t: 0, i: 1222, }, D { l: 138, t: 0, i: 386, }, D { l: 139, t: 11, i: 908, }, D { l: 11, t: 0, i: 249, }, D { l: 12, t: 0, i: 313, }, D { l: 16, t: 0, i: 66 }, D { l: 145, t: 0, i: 26, }, D { l: 134, t: 0, i: 5 }, D { l: 7, t: 10, i: 750, }, D { l: 9, t: 10, i: 223, }, D { l: 11, t: 10, i: 27, }, D { l: 11, t: 10, i: 466, }, D { l: 12, t: 10, i: 624, }, D { l: 14, t: 10, i: 265, }, D { l: 146, t: 10, i: 61, }, D { l: 134, t: 11, i: 26, }, D { l: 134, t: 0, i: 1216, }, D { l: 5, t: 0, i: 963 }, D { l: 134, t: 0, i: 1773, }, D { l: 4, t: 11, i: 414, }, D { l: 5, t: 11, i: 467, }, D { l: 9, t: 11, i: 654, }, D { l: 10, t: 11, i: 451, }, D { l: 12, t: 11, i: 59, }, D { l: 141, t: 11, i: 375, }, D { l: 135, t: 11, i: 17, }, D { l: 4, t: 10, i: 603, }, D { l: 133, t: 10, i: 661, }, D { l: 4, t: 10, i: 11 }, D { l: 6, t: 10, i: 128, }, D { l: 7, t: 10, i: 231, }, D { l: 7, t: 10, i: 1533, }, D { l: 138, t: 10, i: 725, }, D { l: 135, t: 11, i: 955, }, D { l: 7, t: 0, i: 180 }, D { l: 8, t: 0, i: 509 }, D { l: 136, t: 0, i: 792, }, D { l: 132, t: 10, i: 476, }, D { l: 132, t: 0, i: 1002, }, D { l: 133, t: 11, i: 538, }, D { l: 135, t: 10, i: 1807, }, D { l: 132, t: 0, i: 931, }, D { l: 7, t: 0, i: 943 }, D { l: 11, t: 0, i: 614, }, D { l: 140, t: 0, i: 747, }, D { l: 135, t: 0, i: 1837, }, D { l: 9, t: 10, i: 20 }, D { l: 10, t: 10, i: 324, }, D { l: 10, t: 10, i: 807, }, D { l: 139, t: 10, i: 488, }, D { l: 134, t: 0, i: 641, }, D { l: 6, t: 11, i: 280, }, D { l: 10, t: 11, i: 502, }, D { l: 11, t: 11, i: 344, }, D { l: 140, t: 11, i: 38, }, D { l: 5, t: 11, i: 45 }, D { l: 7, t: 11, i: 1161, }, D { l: 11, t: 11, i: 448, }, D { l: 11, t: 11, i: 880, }, D { l: 13, t: 11, i: 139, }, D { l: 13, t: 11, i: 407, }, D { l: 15, t: 11, i: 16, }, D { l: 17, t: 11, i: 95, }, D { l: 18, t: 11, i: 66, }, D { l: 18, t: 11, i: 88, }, D { l: 18, t: 11, i: 123, }, D { l: 149, t: 11, i: 7, }, D { l: 9, t: 0, i: 280 }, D { l: 138, t: 0, i: 134, }, D { l: 22, t: 0, i: 22 }, D { l: 23, t: 0, i: 5 }, D { l: 151, t: 0, i: 29, }, D { l: 136, t: 11, i: 777, }, D { l: 4, t: 0, i: 90 }, D { l: 5, t: 0, i: 545 }, D { l: 7, t: 0, i: 754 }, D { l: 9, t: 0, i: 186 }, D { l: 10, t: 0, i: 72 }, D { l: 10, t: 0, i: 782, }, D { l: 11, t: 0, i: 577, }, D { l: 11, t: 0, i: 610, }, D { l: 11, t: 0, i: 960, }, D { l: 12, t: 0, i: 354, }, D { l: 12, t: 0, i: 362, }, D { l: 12, t: 0, i: 595, }, D { l: 4, t: 11, i: 410, }, D { l: 135, t: 11, i: 521, }, D { l: 135, t: 11, i: 1778, }, D { l: 5, t: 10, i: 112, }, D { l: 6, t: 10, i: 103, }, D { l: 134, t: 10, i: 150, }, D { l: 138, t: 10, i: 356, }, D { l: 132, t: 0, i: 742, }, D { l: 7, t: 0, i: 151 }, D { l: 9, t: 0, i: 329 }, D { l: 139, t: 0, i: 254, }, D { l: 8, t: 0, i: 853 }, D { l: 8, t: 0, i: 881 }, D { l: 8, t: 0, i: 911 }, D { l: 8, t: 0, i: 912 }, D { l: 10, t: 0, i: 872, }, D { l: 12, t: 0, i: 741, }, D { l: 12, t: 0, i: 742, }, D { l: 152, t: 0, i: 18, }, D { l: 4, t: 11, i: 573, }, D { l: 136, t: 11, i: 655, }, D { l: 6, t: 0, i: 921 }, D { l: 134, t: 0, i: 934, }, D { l: 9, t: 0, i: 187 }, D { l: 10, t: 0, i: 36 }, D { l: 11, t: 0, i: 1016, }, D { l: 17, t: 0, i: 44 }, D { l: 146, t: 0, i: 64, }, D { l: 7, t: 0, i: 833 }, D { l: 136, t: 0, i: 517, }, D { l: 4, t: 0, i: 506 }, D { l: 5, t: 0, i: 295 }, D { l: 135, t: 0, i: 1680, }, D { l: 4, t: 10, i: 708, }, D { l: 8, t: 10, i: 15 }, D { l: 9, t: 10, i: 50 }, D { l: 9, t: 10, i: 386, }, D { l: 11, t: 10, i: 18, }, D { l: 11, t: 10, i: 529, }, D { l: 140, t: 10, i: 228, }, D { l: 7, t: 0, i: 251 }, D { l: 7, t: 0, i: 1701, }, D { l: 8, t: 0, i: 436 }, D { l: 4, t: 10, i: 563, }, D { l: 7, t: 10, i: 592, }, D { l: 7, t: 10, i: 637, }, D { l: 7, t: 10, i: 770, }, D { l: 8, t: 10, i: 463, }, D { l: 9, t: 10, i: 60 }, D { l: 9, t: 10, i: 335, }, D { l: 9, t: 10, i: 904, }, D { l: 10, t: 10, i: 73, }, D { l: 11, t: 10, i: 434, }, D { l: 12, t: 10, i: 585, }, D { l: 13, t: 10, i: 331, }, D { l: 18, t: 10, i: 110, }, D { l: 148, t: 10, i: 60, }, D { l: 132, t: 10, i: 502, }, D { l: 136, t: 0, i: 584, }, D { l: 6, t: 10, i: 347, }, D { l: 138, t: 10, i: 161, }, D { l: 7, t: 0, i: 987 }, D { l: 9, t: 0, i: 688 }, D { l: 10, t: 0, i: 522, }, D { l: 11, t: 0, i: 788, }, D { l: 12, t: 0, i: 137, }, D { l: 12, t: 0, i: 566, }, D { l: 14, t: 0, i: 9 }, D { l: 14, t: 0, i: 24 }, D { l: 14, t: 0, i: 64 }, D { l: 7, t: 11, i: 899, }, D { l: 142, t: 11, i: 325, }, D { l: 4, t: 0, i: 214 }, D { l: 5, t: 0, i: 500 }, D { l: 5, t: 10, i: 102, }, D { l: 6, t: 10, i: 284, }, D { l: 7, t: 10, i: 1079, }, D { l: 7, t: 10, i: 1423, }, D { l: 7, t: 10, i: 1702, }, D { l: 8, t: 10, i: 470, }, D { l: 9, t: 10, i: 554, }, D { l: 9, t: 10, i: 723, }, D { l: 139, t: 10, i: 333, }, D { l: 7, t: 10, i: 246, }, D { l: 135, t: 10, i: 840, }, D { l: 6, t: 10, i: 10 }, D { l: 8, t: 10, i: 571, }, D { l: 9, t: 10, i: 739, }, D { l: 143, t: 10, i: 91, }, D { l: 133, t: 10, i: 626, }, D { l: 146, t: 0, i: 195, }, D { l: 134, t: 0, i: 1775, }, D { l: 7, t: 0, i: 389 }, D { l: 7, t: 0, i: 700 }, D { l: 7, t: 0, i: 940 }, D { l: 8, t: 0, i: 514 }, D { l: 9, t: 0, i: 116 }, D { l: 9, t: 0, i: 535 }, D { l: 10, t: 0, i: 118, }, D { l: 11, t: 0, i: 107, }, D { l: 11, t: 0, i: 148, }, D { l: 11, t: 0, i: 922, }, D { l: 12, t: 0, i: 254, }, D { l: 12, t: 0, i: 421, }, D { l: 142, t: 0, i: 238, }, D { l: 5, t: 10, i: 18 }, D { l: 6, t: 10, i: 526, }, D { l: 13, t: 10, i: 24, }, D { l: 13, t: 10, i: 110, }, D { l: 19, t: 10, i: 5 }, D { l: 147, t: 10, i: 44, }, D { l: 132, t: 0, i: 743, }, D { l: 11, t: 0, i: 292, }, D { l: 4, t: 10, i: 309, }, D { l: 5, t: 10, i: 462, }, D { l: 7, t: 10, i: 970, }, D { l: 135, t: 10, i: 1097, }, D { l: 22, t: 10, i: 30, }, D { l: 150, t: 10, i: 33, }, D { l: 139, t: 11, i: 338, }, D { l: 135, t: 11, i: 1598, }, D { l: 7, t: 0, i: 1283, }, D { l: 9, t: 0, i: 227 }, D { l: 11, t: 0, i: 325, }, D { l: 11, t: 0, i: 408, }, D { l: 14, t: 0, i: 180, }, D { l: 146, t: 0, i: 47, }, D { l: 4, t: 0, i: 953 }, D { l: 6, t: 0, i: 1805, }, D { l: 6, t: 0, i: 1814, }, D { l: 6, t: 0, i: 1862, }, D { l: 140, t: 0, i: 774, }, D { l: 6, t: 11, i: 611, }, D { l: 135, t: 11, i: 1733, }, D { l: 135, t: 11, i: 1464, }, D { l: 5, t: 0, i: 81 }, D { l: 7, t: 0, i: 146 }, D { l: 7, t: 0, i: 1342, }, D { l: 8, t: 0, i: 53 }, D { l: 8, t: 0, i: 561 }, D { l: 8, t: 0, i: 694 }, D { l: 8, t: 0, i: 754 }, D { l: 9, t: 0, i: 115 }, D { l: 9, t: 0, i: 179 }, D { l: 9, t: 0, i: 894 }, D { l: 10, t: 0, i: 462, }, D { l: 10, t: 0, i: 813, }, D { l: 11, t: 0, i: 230, }, D { l: 11, t: 0, i: 657, }, D { l: 11, t: 0, i: 699, }, D { l: 11, t: 0, i: 748, }, D { l: 12, t: 0, i: 119, }, D { l: 12, t: 0, i: 200, }, D { l: 12, t: 0, i: 283, }, D { l: 142, t: 0, i: 273, }, D { l: 5, t: 0, i: 408 }, D { l: 6, t: 0, i: 789 }, D { l: 6, t: 0, i: 877 }, D { l: 6, t: 0, i: 1253, }, D { l: 6, t: 0, i: 1413, }, D { l: 137, t: 0, i: 747, }, D { l: 134, t: 10, i: 1704, }, D { l: 135, t: 11, i: 663, }, D { l: 6, t: 0, i: 1910, }, D { l: 6, t: 0, i: 1915, }, D { l: 6, t: 0, i: 1923, }, D { l: 9, t: 0, i: 913 }, D { l: 9, t: 0, i: 928 }, D { l: 9, t: 0, i: 950 }, D { l: 9, t: 0, i: 954 }, D { l: 9, t: 0, i: 978 }, D { l: 9, t: 0, i: 993 }, D { l: 12, t: 0, i: 812, }, D { l: 12, t: 0, i: 819, }, D { l: 12, t: 0, i: 831, }, D { l: 12, t: 0, i: 833, }, D { l: 12, t: 0, i: 838, }, D { l: 12, t: 0, i: 909, }, D { l: 12, t: 0, i: 928, }, D { l: 12, t: 0, i: 931, }, D { l: 12, t: 0, i: 950, }, D { l: 15, t: 0, i: 186, }, D { l: 15, t: 0, i: 187, }, D { l: 15, t: 0, i: 195, }, D { l: 15, t: 0, i: 196, }, D { l: 15, t: 0, i: 209, }, D { l: 15, t: 0, i: 215, }, D { l: 15, t: 0, i: 236, }, D { l: 15, t: 0, i: 241, }, D { l: 15, t: 0, i: 249, }, D { l: 15, t: 0, i: 253, }, D { l: 18, t: 0, i: 180, }, D { l: 18, t: 0, i: 221, }, D { l: 18, t: 0, i: 224, }, D { l: 18, t: 0, i: 227, }, D { l: 18, t: 0, i: 229, }, D { l: 149, t: 0, i: 60, }, D { l: 7, t: 0, i: 1826, }, D { l: 135, t: 0, i: 1938, }, D { l: 11, t: 0, i: 490, }, D { l: 18, t: 0, i: 143, }, D { l: 5, t: 10, i: 86 }, D { l: 7, t: 10, i: 743, }, D { l: 9, t: 10, i: 85 }, D { l: 10, t: 10, i: 281, }, D { l: 10, t: 10, i: 432, }, D { l: 12, t: 10, i: 251, }, D { l: 13, t: 10, i: 118, }, D { l: 142, t: 10, i: 378, }, D { l: 5, t: 10, i: 524, }, D { l: 133, t: 10, i: 744, }, D { l: 141, t: 11, i: 442, }, D { l: 10, t: 10, i: 107, }, D { l: 140, t: 10, i: 436, }, D { l: 135, t: 11, i: 503, }, D { l: 134, t: 0, i: 1162, }, D { l: 132, t: 10, i: 927, }, D { l: 7, t: 0, i: 30 }, D { l: 8, t: 0, i: 86 }, D { l: 8, t: 0, i: 315 }, D { l: 8, t: 0, i: 700 }, D { l: 9, t: 0, i: 576 }, D { l: 9, t: 0, i: 858 }, D { l: 10, t: 0, i: 414, }, D { l: 11, t: 0, i: 310, }, D { l: 11, t: 0, i: 888, }, D { l: 11, t: 0, i: 904, }, D { l: 12, t: 0, i: 361, }, D { l: 13, t: 0, i: 248, }, D { l: 13, t: 0, i: 371, }, D { l: 14, t: 0, i: 142, }, D { l: 12, t: 10, i: 670, }, D { l: 146, t: 10, i: 94, }, D { l: 134, t: 0, i: 721, }, D { l: 4, t: 11, i: 113, }, D { l: 5, t: 11, i: 163, }, D { l: 5, t: 11, i: 735, }, D { l: 7, t: 11, i: 1009, }, D { l: 7, t: 10, i: 1149, }, D { l: 9, t: 11, i: 9 }, D { l: 9, t: 10, i: 156, }, D { l: 9, t: 11, i: 771, }, D { l: 12, t: 11, i: 90, }, D { l: 13, t: 11, i: 138, }, D { l: 13, t: 11, i: 410, }, D { l: 143, t: 11, i: 128, }, D { l: 138, t: 0, i: 839, }, D { l: 133, t: 10, i: 778, }, D { l: 137, t: 0, i: 617, }, D { l: 133, t: 10, i: 502, }, D { l: 8, t: 10, i: 196, }, D { l: 10, t: 10, i: 283, }, D { l: 139, t: 10, i: 406, }, D { l: 6, t: 0, i: 428 }, D { l: 7, t: 0, i: 524 }, D { l: 8, t: 0, i: 169 }, D { l: 8, t: 0, i: 234 }, D { l: 9, t: 0, i: 480 }, D { l: 138, t: 0, i: 646, }, D { l: 133, t: 10, i: 855, }, D { l: 134, t: 0, i: 1648, }, D { l: 7, t: 0, i: 1205, }, D { l: 138, t: 0, i: 637, }, D { l: 7, t: 0, i: 1596, }, D { l: 4, t: 11, i: 935, }, D { l: 133, t: 11, i: 823, }, D { l: 5, t: 11, i: 269, }, D { l: 7, t: 11, i: 434, }, D { l: 7, t: 11, i: 891, }, D { l: 8, t: 11, i: 339, }, D { l: 9, t: 11, i: 702, }, D { l: 11, t: 11, i: 594, }, D { l: 11, t: 11, i: 718, }, D { l: 145, t: 11, i: 100, }, D { l: 7, t: 11, i: 878, }, D { l: 9, t: 11, i: 485, }, D { l: 141, t: 11, i: 264, }, D { l: 4, t: 0, i: 266 }, D { l: 8, t: 0, i: 4 }, D { l: 9, t: 0, i: 39 }, D { l: 10, t: 0, i: 166, }, D { l: 11, t: 0, i: 918, }, D { l: 12, t: 0, i: 635, }, D { l: 20, t: 0, i: 10 }, D { l: 22, t: 0, i: 27 }, D { l: 22, t: 0, i: 43 }, D { l: 22, t: 0, i: 52 }, D { l: 134, t: 11, i: 1713, }, D { l: 7, t: 10, i: 1400, }, D { l: 9, t: 10, i: 446, }, D { l: 138, t: 10, i: 45, }, D { l: 135, t: 11, i: 900, }, D { l: 132, t: 0, i: 862, }, D { l: 134, t: 0, i: 1554, }, D { l: 135, t: 11, i: 1033, }, D { l: 19, t: 0, i: 16 }, D { l: 147, t: 11, i: 16, }, D { l: 135, t: 11, i: 1208, }, D { l: 7, t: 0, i: 157 }, D { l: 136, t: 0, i: 279, }, D { l: 6, t: 0, i: 604 }, D { l: 136, t: 0, i: 391, }, D { l: 13, t: 10, i: 455, }, D { l: 15, t: 10, i: 99, }, D { l: 15, t: 10, i: 129, }, D { l: 144, t: 10, i: 68, }, D { l: 135, t: 10, i: 172, }, D { l: 7, t: 0, i: 945 }, D { l: 11, t: 0, i: 713, }, D { l: 139, t: 0, i: 744, }, D { l: 4, t: 0, i: 973 }, D { l: 10, t: 0, i: 877, }, D { l: 10, t: 0, i: 937, }, D { l: 10, t: 0, i: 938, }, D { l: 140, t: 0, i: 711, }, D { l: 139, t: 0, i: 1022, }, D { l: 132, t: 10, i: 568, }, D { l: 142, t: 11, i: 143, }, D { l: 4, t: 0, i: 567 }, D { l: 9, t: 0, i: 859 }, D { l: 132, t: 10, i: 732, }, D { l: 7, t: 0, i: 1846, }, D { l: 136, t: 0, i: 628, }, D { l: 136, t: 10, i: 733, }, D { l: 133, t: 0, i: 762, }, D { l: 4, t: 10, i: 428, }, D { l: 135, t: 10, i: 1789, }, D { l: 10, t: 0, i: 784, }, D { l: 13, t: 0, i: 191, }, D { l: 7, t: 10, i: 2015, }, D { l: 140, t: 10, i: 665, }, D { l: 133, t: 0, i: 298, }, D { l: 7, t: 0, i: 633 }, D { l: 7, t: 0, i: 905 }, D { l: 7, t: 0, i: 909 }, D { l: 7, t: 0, i: 1538, }, D { l: 9, t: 0, i: 767 }, D { l: 140, t: 0, i: 636, }, D { l: 138, t: 10, i: 806, }, D { l: 132, t: 0, i: 795, }, D { l: 139, t: 0, i: 301, }, D { l: 135, t: 0, i: 1970, }, D { l: 5, t: 11, i: 625, }, D { l: 135, t: 11, i: 1617, }, D { l: 135, t: 11, i: 275, }, D { l: 7, t: 11, i: 37 }, D { l: 8, t: 11, i: 425, }, D { l: 8, t: 11, i: 693, }, D { l: 9, t: 11, i: 720, }, D { l: 10, t: 11, i: 380, }, D { l: 10, t: 11, i: 638, }, D { l: 11, t: 11, i: 273, }, D { l: 11, t: 11, i: 307, }, D { l: 11, t: 11, i: 473, }, D { l: 12, t: 11, i: 61, }, D { l: 143, t: 11, i: 43, }, D { l: 135, t: 11, i: 198, }, D { l: 134, t: 0, i: 1236, }, D { l: 7, t: 0, i: 369 }, D { l: 12, t: 0, i: 644, }, D { l: 12, t: 0, i: 645, }, D { l: 144, t: 0, i: 90, }, D { l: 19, t: 0, i: 15 }, D { l: 149, t: 0, i: 27, }, D { l: 6, t: 0, i: 71 }, D { l: 7, t: 0, i: 845 }, D { l: 8, t: 0, i: 160 }, D { l: 9, t: 0, i: 318 }, D { l: 6, t: 10, i: 1623, }, D { l: 134, t: 10, i: 1681, }, D { l: 134, t: 0, i: 1447, }, D { l: 134, t: 0, i: 1255, }, D { l: 138, t: 0, i: 735, }, D { l: 8, t: 0, i: 76 }, D { l: 132, t: 11, i: 168, }, D { l: 6, t: 10, i: 1748, }, D { l: 8, t: 10, i: 715, }, D { l: 9, t: 10, i: 802, }, D { l: 10, t: 10, i: 46, }, D { l: 10, t: 10, i: 819, }, D { l: 13, t: 10, i: 308, }, D { l: 14, t: 10, i: 351, }, D { l: 14, t: 10, i: 363, }, D { l: 146, t: 10, i: 67, }, D { l: 135, t: 11, i: 91, }, D { l: 6, t: 0, i: 474 }, D { l: 4, t: 10, i: 63 }, D { l: 133, t: 10, i: 347, }, D { l: 133, t: 10, i: 749, }, D { l: 138, t: 0, i: 841, }, D { l: 133, t: 10, i: 366, }, D { l: 6, t: 0, i: 836 }, D { l: 132, t: 11, i: 225, }, D { l: 135, t: 0, i: 1622, }, D { l: 135, t: 10, i: 89, }, D { l: 140, t: 0, i: 735, }, D { l: 134, t: 0, i: 1601, }, D { l: 138, t: 11, i: 145, }, D { l: 6, t: 0, i: 1390, }, D { l: 137, t: 0, i: 804, }, D { l: 142, t: 0, i: 394, }, D { l: 6, t: 11, i: 15 }, D { l: 7, t: 11, i: 70 }, D { l: 10, t: 11, i: 240, }, D { l: 147, t: 11, i: 93, }, D { l: 6, t: 0, i: 96 }, D { l: 135, t: 0, i: 1426, }, D { l: 4, t: 0, i: 651 }, D { l: 133, t: 0, i: 289, }, D { l: 7, t: 11, i: 956, }, D { l: 7, t: 10, i: 977, }, D { l: 7, t: 11, i: 1157, }, D { l: 7, t: 11, i: 1506, }, D { l: 7, t: 11, i: 1606, }, D { l: 7, t: 11, i: 1615, }, D { l: 7, t: 11, i: 1619, }, D { l: 7, t: 11, i: 1736, }, D { l: 7, t: 11, i: 1775, }, D { l: 8, t: 11, i: 590, }, D { l: 9, t: 11, i: 324, }, D { l: 9, t: 11, i: 736, }, D { l: 9, t: 11, i: 774, }, D { l: 9, t: 11, i: 776, }, D { l: 9, t: 11, i: 784, }, D { l: 10, t: 11, i: 567, }, D { l: 10, t: 11, i: 708, }, D { l: 11, t: 11, i: 518, }, D { l: 11, t: 11, i: 613, }, D { l: 11, t: 11, i: 695, }, D { l: 11, t: 11, i: 716, }, D { l: 11, t: 11, i: 739, }, D { l: 11, t: 11, i: 770, }, D { l: 11, t: 11, i: 771, }, D { l: 11, t: 11, i: 848, }, D { l: 11, t: 11, i: 857, }, D { l: 11, t: 11, i: 931, }, D { l: 11, t: 11, i: 947, }, D { l: 12, t: 11, i: 326, }, D { l: 12, t: 11, i: 387, }, D { l: 12, t: 11, i: 484, }, D { l: 12, t: 11, i: 528, }, D { l: 12, t: 11, i: 552, }, D { l: 12, t: 11, i: 613, }, D { l: 13, t: 11, i: 189, }, D { l: 13, t: 11, i: 256, }, D { l: 13, t: 11, i: 340, }, D { l: 13, t: 11, i: 432, }, D { l: 13, t: 11, i: 436, }, D { l: 13, t: 11, i: 440, }, D { l: 13, t: 11, i: 454, }, D { l: 14, t: 11, i: 174, }, D { l: 14, t: 11, i: 220, }, D { l: 14, t: 11, i: 284, }, D { l: 14, t: 11, i: 390, }, D { l: 145, t: 11, i: 121, }, D { l: 7, t: 0, i: 688 }, D { l: 8, t: 0, i: 35 }, D { l: 9, t: 0, i: 511 }, D { l: 10, t: 0, i: 767, }, D { l: 147, t: 0, i: 118, }, D { l: 134, t: 0, i: 667, }, D { l: 4, t: 0, i: 513 }, D { l: 5, t: 10, i: 824, }, D { l: 133, t: 10, i: 941, }, D { l: 7, t: 10, i: 440, }, D { l: 8, t: 10, i: 230, }, D { l: 139, t: 10, i: 106, }, D { l: 134, t: 0, i: 2034, }, D { l: 135, t: 11, i: 1399, }, D { l: 143, t: 11, i: 66, }, D { l: 135, t: 11, i: 1529, }, D { l: 4, t: 11, i: 145, }, D { l: 6, t: 11, i: 176, }, D { l: 7, t: 11, i: 395, }, D { l: 9, t: 11, i: 562, }, D { l: 144, t: 11, i: 28, }, D { l: 132, t: 11, i: 501, }, D { l: 132, t: 0, i: 704, }, D { l: 134, t: 0, i: 1524, }, D { l: 7, t: 0, i: 1078, }, D { l: 134, t: 11, i: 464, }, D { l: 6, t: 11, i: 509, }, D { l: 10, t: 11, i: 82, }, D { l: 20, t: 11, i: 91, }, D { l: 151, t: 11, i: 13, }, D { l: 4, t: 0, i: 720 }, D { l: 133, t: 0, i: 306, }, D { l: 133, t: 0, i: 431, }, D { l: 7, t: 0, i: 1196, }, D { l: 4, t: 10, i: 914, }, D { l: 5, t: 10, i: 800, }, D { l: 133, t: 10, i: 852, }, D { l: 135, t: 11, i: 1189, }, D { l: 10, t: 0, i: 54 }, D { l: 141, t: 10, i: 115, }, D { l: 7, t: 10, i: 564, }, D { l: 142, t: 10, i: 168, }, D { l: 5, t: 0, i: 464 }, D { l: 6, t: 0, i: 236 }, D { l: 7, t: 0, i: 696 }, D { l: 7, t: 0, i: 914 }, D { l: 7, t: 0, i: 1108, }, D { l: 7, t: 0, i: 1448, }, D { l: 9, t: 0, i: 15 }, D { l: 9, t: 0, i: 564 }, D { l: 10, t: 0, i: 14 }, D { l: 12, t: 0, i: 565, }, D { l: 13, t: 0, i: 449, }, D { l: 14, t: 0, i: 53 }, D { l: 15, t: 0, i: 13 }, D { l: 16, t: 0, i: 64 }, D { l: 17, t: 0, i: 41 }, D { l: 4, t: 10, i: 918, }, D { l: 133, t: 10, i: 876, }, D { l: 6, t: 0, i: 1418, }, D { l: 134, t: 10, i: 1764, }, D { l: 4, t: 10, i: 92 }, D { l: 133, t: 10, i: 274, }, D { l: 134, t: 0, i: 907, }, D { l: 4, t: 11, i: 114, }, D { l: 8, t: 10, i: 501, }, D { l: 9, t: 11, i: 492, }, D { l: 13, t: 11, i: 462, }, D { l: 142, t: 11, i: 215, }, D { l: 4, t: 11, i: 77 }, D { l: 5, t: 11, i: 361, }, D { l: 6, t: 11, i: 139, }, D { l: 6, t: 11, i: 401, }, D { l: 6, t: 11, i: 404, }, D { l: 7, t: 11, i: 413, }, D { l: 7, t: 11, i: 715, }, D { l: 7, t: 11, i: 1716, }, D { l: 11, t: 11, i: 279, }, D { l: 12, t: 11, i: 179, }, D { l: 12, t: 11, i: 258, }, D { l: 13, t: 11, i: 244, }, D { l: 142, t: 11, i: 358, }, D { l: 6, t: 0, i: 1767, }, D { l: 12, t: 0, i: 194, }, D { l: 145, t: 0, i: 107, }, D { l: 134, t: 11, i: 1717, }, D { l: 5, t: 10, i: 743, }, D { l: 142, t: 11, i: 329, }, D { l: 4, t: 10, i: 49 }, D { l: 7, t: 10, i: 280, }, D { l: 135, t: 10, i: 1633, }, D { l: 5, t: 0, i: 840 }, D { l: 7, t: 11, i: 1061, }, D { l: 8, t: 11, i: 82 }, D { l: 11, t: 11, i: 250, }, D { l: 12, t: 11, i: 420, }, D { l: 141, t: 11, i: 184, }, D { l: 135, t: 11, i: 724, }, D { l: 134, t: 0, i: 900, }, D { l: 136, t: 10, i: 47, }, D { l: 134, t: 0, i: 1436, }, D { l: 144, t: 11, i: 0, }, D { l: 6, t: 0, i: 675 }, D { l: 7, t: 0, i: 1008, }, D { l: 7, t: 0, i: 1560, }, D { l: 9, t: 0, i: 642 }, D { l: 11, t: 0, i: 236, }, D { l: 14, t: 0, i: 193, }, D { l: 5, t: 10, i: 272, }, D { l: 5, t: 10, i: 908, }, D { l: 5, t: 10, i: 942, }, D { l: 8, t: 10, i: 197, }, D { l: 9, t: 10, i: 47 }, D { l: 11, t: 10, i: 538, }, D { l: 139, t: 10, i: 742, }, D { l: 4, t: 0, i: 68 }, D { l: 5, t: 0, i: 628 }, D { l: 5, t: 0, i: 634 }, D { l: 6, t: 0, i: 386 }, D { l: 7, t: 0, i: 794 }, D { l: 8, t: 0, i: 273 }, D { l: 9, t: 0, i: 563 }, D { l: 10, t: 0, i: 105, }, D { l: 10, t: 0, i: 171, }, D { l: 11, t: 0, i: 94 }, D { l: 139, t: 0, i: 354, }, D { l: 135, t: 10, i: 1911, }, D { l: 137, t: 10, i: 891, }, D { l: 4, t: 0, i: 95 }, D { l: 6, t: 0, i: 1297, }, D { l: 6, t: 0, i: 1604, }, D { l: 7, t: 0, i: 416 }, D { l: 139, t: 0, i: 830, }, D { l: 6, t: 11, i: 513, }, D { l: 135, t: 11, i: 1052, }, D { l: 7, t: 0, i: 731 }, D { l: 13, t: 0, i: 20 }, D { l: 143, t: 0, i: 11, }, D { l: 137, t: 11, i: 899, }, D { l: 10, t: 0, i: 850, }, D { l: 140, t: 0, i: 697, }, D { l: 4, t: 0, i: 662 }, D { l: 7, t: 11, i: 1417, }, D { l: 12, t: 11, i: 382, }, D { l: 17, t: 11, i: 48, }, D { l: 152, t: 11, i: 12, }, D { l: 133, t: 0, i: 736, }, D { l: 132, t: 0, i: 861, }, D { l: 4, t: 10, i: 407, }, D { l: 132, t: 10, i: 560, }, D { l: 141, t: 10, i: 490, }, D { l: 6, t: 11, i: 545, }, D { l: 7, t: 11, i: 565, }, D { l: 7, t: 11, i: 1669, }, D { l: 10, t: 11, i: 114, }, D { l: 11, t: 11, i: 642, }, D { l: 140, t: 11, i: 618, }, D { l: 6, t: 0, i: 871 }, D { l: 134, t: 0, i: 1000, }, D { l: 5, t: 0, i: 864 }, D { l: 10, t: 0, i: 648, }, D { l: 11, t: 0, i: 671, }, D { l: 15, t: 0, i: 46 }, D { l: 133, t: 11, i: 5, }, D { l: 133, t: 0, i: 928, }, D { l: 11, t: 0, i: 90 }, D { l: 13, t: 0, i: 7 }, D { l: 4, t: 10, i: 475, }, D { l: 11, t: 10, i: 35, }, D { l: 13, t: 10, i: 71, }, D { l: 13, t: 10, i: 177, }, D { l: 142, t: 10, i: 422, }, D { l: 136, t: 0, i: 332, }, D { l: 135, t: 11, i: 192, }, D { l: 134, t: 0, i: 1055, }, D { l: 136, t: 11, i: 763, }, D { l: 11, t: 0, i: 986, }, D { l: 140, t: 0, i: 682, }, D { l: 7, t: 0, i: 76 }, D { l: 8, t: 0, i: 44 }, D { l: 9, t: 0, i: 884 }, D { l: 10, t: 0, i: 580, }, D { l: 11, t: 0, i: 399, }, D { l: 11, t: 0, i: 894, }, D { l: 143, t: 0, i: 122, }, D { l: 135, t: 11, i: 1237, }, D { l: 135, t: 10, i: 636, }, D { l: 11, t: 0, i: 300, }, D { l: 6, t: 10, i: 222, }, D { l: 7, t: 10, i: 1620, }, D { l: 8, t: 10, i: 409, }, D { l: 137, t: 10, i: 693, }, D { l: 4, t: 11, i: 87 }, D { l: 5, t: 11, i: 250, }, D { l: 10, t: 11, i: 601, }, D { l: 13, t: 11, i: 298, }, D { l: 13, t: 11, i: 353, }, D { l: 141, t: 11, i: 376, }, D { l: 5, t: 0, i: 518 }, D { l: 10, t: 0, i: 340, }, D { l: 11, t: 0, i: 175, }, D { l: 149, t: 0, i: 16, }, D { l: 140, t: 0, i: 771, }, D { l: 6, t: 0, i: 1108, }, D { l: 137, t: 0, i: 831, }, D { l: 132, t: 0, i: 836, }, D { l: 135, t: 0, i: 1852, }, D { l: 4, t: 0, i: 957 }, D { l: 6, t: 0, i: 1804, }, D { l: 8, t: 0, i: 842 }, D { l: 8, t: 0, i: 843 }, D { l: 8, t: 0, i: 851 }, D { l: 8, t: 0, i: 855 }, D { l: 140, t: 0, i: 767, }, D { l: 135, t: 11, i: 814, }, D { l: 4, t: 11, i: 57 }, D { l: 7, t: 11, i: 1195, }, D { l: 7, t: 11, i: 1438, }, D { l: 7, t: 11, i: 1548, }, D { l: 7, t: 11, i: 1835, }, D { l: 7, t: 11, i: 1904, }, D { l: 9, t: 11, i: 757, }, D { l: 10, t: 11, i: 604, }, D { l: 139, t: 11, i: 519, }, D { l: 133, t: 10, i: 882, }, D { l: 138, t: 0, i: 246, }, D { l: 4, t: 0, i: 934 }, D { l: 5, t: 0, i: 202 }, D { l: 8, t: 0, i: 610 }, D { l: 7, t: 11, i: 1897, }, D { l: 12, t: 11, i: 290, }, D { l: 13, t: 11, i: 80, }, D { l: 13, t: 11, i: 437, }, D { l: 145, t: 11, i: 74, }, D { l: 8, t: 0, i: 96 }, D { l: 9, t: 0, i: 36 }, D { l: 10, t: 0, i: 607, }, D { l: 10, t: 0, i: 804, }, D { l: 10, t: 0, i: 832, }, D { l: 11, t: 0, i: 423, }, D { l: 11, t: 0, i: 442, }, D { l: 12, t: 0, i: 309, }, D { l: 14, t: 0, i: 199, }, D { l: 15, t: 0, i: 90 }, D { l: 145, t: 0, i: 110, }, D { l: 132, t: 10, i: 426, }, D { l: 7, t: 0, i: 654 }, D { l: 8, t: 0, i: 240 }, D { l: 6, t: 10, i: 58 }, D { l: 7, t: 10, i: 745, }, D { l: 7, t: 10, i: 1969, }, D { l: 8, t: 10, i: 675, }, D { l: 9, t: 10, i: 479, }, D { l: 9, t: 10, i: 731, }, D { l: 10, t: 10, i: 330, }, D { l: 10, t: 10, i: 593, }, D { l: 10, t: 10, i: 817, }, D { l: 11, t: 10, i: 32, }, D { l: 11, t: 10, i: 133, }, D { l: 11, t: 10, i: 221, }, D { l: 145, t: 10, i: 68, }, D { l: 9, t: 0, i: 13 }, D { l: 9, t: 0, i: 398 }, D { l: 9, t: 0, i: 727 }, D { l: 10, t: 0, i: 75 }, D { l: 10, t: 0, i: 184, }, D { l: 10, t: 0, i: 230, }, D { l: 10, t: 0, i: 564, }, D { l: 10, t: 0, i: 569, }, D { l: 11, t: 0, i: 973, }, D { l: 12, t: 0, i: 70 }, D { l: 12, t: 0, i: 189, }, D { l: 13, t: 0, i: 57 }, D { l: 141, t: 0, i: 257, }, D { l: 4, t: 11, i: 209, }, D { l: 135, t: 11, i: 902, }, D { l: 7, t: 0, i: 391 }, D { l: 137, t: 10, i: 538, }, D { l: 134, t: 0, i: 403, }, D { l: 6, t: 11, i: 303, }, D { l: 7, t: 11, i: 335, }, D { l: 7, t: 11, i: 1437, }, D { l: 7, t: 11, i: 1668, }, D { l: 8, t: 11, i: 553, }, D { l: 8, t: 11, i: 652, }, D { l: 8, t: 11, i: 656, }, D { l: 9, t: 11, i: 558, }, D { l: 11, t: 11, i: 743, }, D { l: 149, t: 11, i: 18, }, D { l: 132, t: 11, i: 559, }, D { l: 11, t: 0, i: 75 }, D { l: 142, t: 0, i: 267, }, D { l: 6, t: 0, i: 815 }, D { l: 141, t: 11, i: 2, }, D { l: 141, t: 0, i: 366, }, D { l: 137, t: 0, i: 631, }, D { l: 133, t: 11, i: 1017, }, D { l: 5, t: 0, i: 345 }, D { l: 135, t: 0, i: 1016, }, D { l: 133, t: 11, i: 709, }, D { l: 134, t: 11, i: 1745, }, D { l: 133, t: 10, i: 566, }, D { l: 7, t: 0, i: 952 }, D { l: 6, t: 10, i: 48 }, D { l: 9, t: 10, i: 139, }, D { l: 10, t: 10, i: 399, }, D { l: 11, t: 10, i: 469, }, D { l: 12, t: 10, i: 634, }, D { l: 141, t: 10, i: 223, }, D { l: 133, t: 0, i: 673, }, D { l: 9, t: 0, i: 850 }, D { l: 7, t: 11, i: 8 }, D { l: 136, t: 11, i: 206, }, D { l: 6, t: 0, i: 662 }, D { l: 149, t: 0, i: 35, }, D { l: 4, t: 0, i: 287 }, D { l: 133, t: 0, i: 1018, }, D { l: 6, t: 10, i: 114, }, D { l: 7, t: 10, i: 1224, }, D { l: 7, t: 10, i: 1556, }, D { l: 136, t: 10, i: 3, }, D { l: 8, t: 10, i: 576, }, D { l: 137, t: 10, i: 267, }, D { l: 4, t: 0, i: 884 }, D { l: 5, t: 0, i: 34 }, D { l: 10, t: 0, i: 724, }, D { l: 12, t: 0, i: 444, }, D { l: 13, t: 0, i: 354, }, D { l: 18, t: 0, i: 32 }, D { l: 23, t: 0, i: 24 }, D { l: 23, t: 0, i: 31 }, D { l: 152, t: 0, i: 5 }, D { l: 133, t: 10, i: 933, }, D { l: 132, t: 11, i: 776, }, D { l: 138, t: 0, i: 151, }, D { l: 136, t: 0, i: 427, }, D { l: 134, t: 0, i: 382, }, D { l: 132, t: 0, i: 329, }, D { l: 9, t: 0, i: 846 }, D { l: 10, t: 0, i: 827, }, D { l: 138, t: 11, i: 33, }, D { l: 9, t: 0, i: 279 }, D { l: 10, t: 0, i: 407, }, D { l: 14, t: 0, i: 84 }, D { l: 22, t: 0, i: 18 }, D { l: 135, t: 11, i: 1297, }, D { l: 136, t: 11, i: 406, }, D { l: 132, t: 0, i: 906, }, D { l: 136, t: 0, i: 366, }, D { l: 134, t: 0, i: 843, }, D { l: 134, t: 0, i: 1443, }, D { l: 135, t: 0, i: 1372, }, D { l: 138, t: 0, i: 992, }, D { l: 4, t: 0, i: 123 }, D { l: 5, t: 0, i: 605 }, D { l: 7, t: 0, i: 1509, }, D { l: 136, t: 0, i: 36, }, D { l: 132, t: 0, i: 649, }, D { l: 8, t: 11, i: 175, }, D { l: 10, t: 11, i: 168, }, D { l: 138, t: 11, i: 573, }, D { l: 133, t: 0, i: 767, }, D { l: 134, t: 0, i: 1018, }, D { l: 135, t: 11, i: 1305, }, D { l: 12, t: 10, i: 30, }, D { l: 13, t: 10, i: 148, }, D { l: 14, t: 10, i: 87, }, D { l: 14, t: 10, i: 182, }, D { l: 16, t: 10, i: 42, }, D { l: 148, t: 10, i: 70, }, D { l: 134, t: 11, i: 607, }, D { l: 4, t: 0, i: 273 }, D { l: 5, t: 0, i: 658 }, D { l: 133, t: 0, i: 995, }, D { l: 6, t: 0, i: 72 }, D { l: 139, t: 11, i: 174, }, D { l: 10, t: 0, i: 483, }, D { l: 12, t: 0, i: 368, }, D { l: 7, t: 10, i: 56 }, D { l: 7, t: 10, i: 1989, }, D { l: 8, t: 10, i: 337, }, D { l: 8, t: 10, i: 738, }, D { l: 9, t: 10, i: 600, }, D { l: 13, t: 10, i: 447, }, D { l: 142, t: 10, i: 92, }, D { l: 5, t: 11, i: 784, }, D { l: 138, t: 10, i: 666, }, D { l: 135, t: 0, i: 1345, }, D { l: 139, t: 11, i: 882, }, D { l: 134, t: 0, i: 1293, }, D { l: 133, t: 0, i: 589, }, D { l: 134, t: 0, i: 1988, }, D { l: 5, t: 0, i: 117 }, D { l: 6, t: 0, i: 514 }, D { l: 6, t: 0, i: 541 }, D { l: 7, t: 0, i: 1164, }, D { l: 7, t: 0, i: 1436, }, D { l: 8, t: 0, i: 220 }, D { l: 8, t: 0, i: 648 }, D { l: 10, t: 0, i: 688, }, D { l: 139, t: 0, i: 560, }, D { l: 136, t: 0, i: 379, }, D { l: 5, t: 0, i: 686 }, D { l: 7, t: 10, i: 866, }, D { l: 135, t: 10, i: 1163, }, D { l: 132, t: 10, i: 328, }, D { l: 9, t: 11, i: 14 }, D { l: 9, t: 11, i: 441, }, D { l: 10, t: 11, i: 306, }, D { l: 139, t: 11, i: 9, }, D { l: 4, t: 10, i: 101, }, D { l: 135, t: 10, i: 1171, }, D { l: 5, t: 10, i: 833, }, D { l: 136, t: 10, i: 744, }, D { l: 5, t: 11, i: 161, }, D { l: 7, t: 11, i: 839, }, D { l: 135, t: 11, i: 887, }, D { l: 7, t: 0, i: 196 }, D { l: 10, t: 0, i: 765, }, D { l: 11, t: 0, i: 347, }, D { l: 11, t: 0, i: 552, }, D { l: 11, t: 0, i: 790, }, D { l: 12, t: 0, i: 263, }, D { l: 13, t: 0, i: 246, }, D { l: 13, t: 0, i: 270, }, D { l: 13, t: 0, i: 395, }, D { l: 14, t: 0, i: 176, }, D { l: 14, t: 0, i: 190, }, D { l: 14, t: 0, i: 398, }, D { l: 14, t: 0, i: 412, }, D { l: 15, t: 0, i: 32 }, D { l: 15, t: 0, i: 63 }, D { l: 16, t: 0, i: 88 }, D { l: 147, t: 0, i: 105, }, D { l: 6, t: 10, i: 9 }, D { l: 6, t: 10, i: 397, }, D { l: 7, t: 10, i: 53 }, D { l: 7, t: 10, i: 1742, }, D { l: 10, t: 10, i: 632, }, D { l: 11, t: 10, i: 828, }, D { l: 140, t: 10, i: 146, }, D { l: 5, t: 0, i: 381 }, D { l: 135, t: 0, i: 1792, }, D { l: 134, t: 0, i: 1452, }, D { l: 135, t: 11, i: 429, }, D { l: 8, t: 0, i: 367 }, D { l: 10, t: 0, i: 760, }, D { l: 14, t: 0, i: 79 }, D { l: 20, t: 0, i: 17 }, D { l: 152, t: 0, i: 0 }, D { l: 7, t: 0, i: 616 }, D { l: 138, t: 0, i: 413, }, D { l: 11, t: 10, i: 417, }, D { l: 12, t: 10, i: 223, }, D { l: 140, t: 10, i: 265, }, D { l: 7, t: 11, i: 1611, }, D { l: 13, t: 11, i: 14, }, D { l: 15, t: 11, i: 44, }, D { l: 19, t: 11, i: 13, }, D { l: 148, t: 11, i: 76, }, D { l: 135, t: 0, i: 1229, }, D { l: 6, t: 0, i: 120 }, D { l: 7, t: 0, i: 1188, }, D { l: 7, t: 0, i: 1710, }, D { l: 8, t: 0, i: 286 }, D { l: 9, t: 0, i: 667 }, D { l: 11, t: 0, i: 592, }, D { l: 139, t: 0, i: 730, }, D { l: 135, t: 11, i: 1814, }, D { l: 135, t: 0, i: 1146, }, D { l: 4, t: 10, i: 186, }, D { l: 5, t: 10, i: 157, }, D { l: 8, t: 10, i: 168, }, D { l: 138, t: 10, i: 6, }, D { l: 4, t: 0, i: 352 }, D { l: 135, t: 0, i: 687, }, D { l: 4, t: 0, i: 192 }, D { l: 5, t: 0, i: 49 }, D { l: 6, t: 0, i: 200 }, D { l: 6, t: 0, i: 293 }, D { l: 6, t: 0, i: 1696, }, D { l: 135, t: 0, i: 1151, }, D { l: 133, t: 10, i: 875, }, D { l: 5, t: 10, i: 773, }, D { l: 5, t: 10, i: 991, }, D { l: 6, t: 10, i: 1635, }, D { l: 134, t: 10, i: 1788, }, D { l: 7, t: 10, i: 111, }, D { l: 136, t: 10, i: 581, }, D { l: 6, t: 0, i: 935 }, D { l: 134, t: 0, i: 1151, }, D { l: 134, t: 0, i: 1050, }, D { l: 132, t: 0, i: 650, }, D { l: 132, t: 0, i: 147, }, D { l: 11, t: 0, i: 194, }, D { l: 12, t: 0, i: 62 }, D { l: 12, t: 0, i: 88 }, D { l: 11, t: 11, i: 194, }, D { l: 12, t: 11, i: 62, }, D { l: 140, t: 11, i: 88, }, D { l: 6, t: 0, i: 339 }, D { l: 135, t: 0, i: 923, }, D { l: 134, t: 10, i: 1747, }, D { l: 7, t: 11, i: 643, }, D { l: 136, t: 11, i: 236, }, D { l: 133, t: 0, i: 934, }, D { l: 7, t: 10, i: 1364, }, D { l: 7, t: 10, i: 1907, }, D { l: 141, t: 10, i: 158, }, D { l: 132, t: 10, i: 659, }, D { l: 4, t: 10, i: 404, }, D { l: 135, t: 10, i: 675, }, D { l: 7, t: 11, i: 581, }, D { l: 9, t: 11, i: 644, }, D { l: 137, t: 11, i: 699, }, D { l: 13, t: 0, i: 211, }, D { l: 14, t: 0, i: 133, }, D { l: 14, t: 0, i: 204, }, D { l: 15, t: 0, i: 64 }, D { l: 15, t: 0, i: 69 }, D { l: 15, t: 0, i: 114, }, D { l: 16, t: 0, i: 10 }, D { l: 19, t: 0, i: 23 }, D { l: 19, t: 0, i: 35 }, D { l: 19, t: 0, i: 39 }, D { l: 19, t: 0, i: 51 }, D { l: 19, t: 0, i: 71 }, D { l: 19, t: 0, i: 75 }, D { l: 152, t: 0, i: 15, }, D { l: 133, t: 10, i: 391, }, D { l: 5, t: 11, i: 54 }, D { l: 135, t: 11, i: 1513, }, D { l: 7, t: 0, i: 222 }, D { l: 8, t: 0, i: 341 }, D { l: 5, t: 10, i: 540, }, D { l: 134, t: 10, i: 1697, }, D { l: 134, t: 10, i: 78, }, D { l: 132, t: 11, i: 744, }, D { l: 136, t: 0, i: 293, }, D { l: 137, t: 11, i: 701, }, D { l: 7, t: 11, i: 930, }, D { l: 10, t: 11, i: 402, }, D { l: 10, t: 11, i: 476, }, D { l: 13, t: 11, i: 452, }, D { l: 18, t: 11, i: 55, }, D { l: 147, t: 11, i: 104, }, D { l: 132, t: 0, i: 637, }, D { l: 133, t: 10, i: 460, }, D { l: 8, t: 11, i: 50 }, D { l: 137, t: 11, i: 624, }, D { l: 132, t: 11, i: 572, }, D { l: 134, t: 0, i: 1159, }, D { l: 4, t: 10, i: 199, }, D { l: 139, t: 10, i: 34, }, D { l: 134, t: 0, i: 847, }, D { l: 134, t: 10, i: 388, }, D { l: 6, t: 11, i: 43 }, D { l: 7, t: 11, i: 38 }, D { l: 8, t: 11, i: 248, }, D { l: 9, t: 11, i: 504, }, D { l: 138, t: 11, i: 513, }, D { l: 9, t: 0, i: 683 }, D { l: 4, t: 10, i: 511, }, D { l: 6, t: 10, i: 608, }, D { l: 9, t: 10, i: 333, }, D { l: 10, t: 10, i: 602, }, D { l: 11, t: 10, i: 441, }, D { l: 11, t: 10, i: 723, }, D { l: 11, t: 10, i: 976, }, D { l: 140, t: 10, i: 357, }, D { l: 9, t: 0, i: 867 }, D { l: 138, t: 0, i: 837, }, D { l: 6, t: 0, i: 944 }, D { l: 135, t: 11, i: 326, }, D { l: 135, t: 0, i: 1809, }, D { l: 5, t: 10, i: 938, }, D { l: 7, t: 11, i: 783, }, D { l: 136, t: 10, i: 707, }, D { l: 133, t: 11, i: 766, }, D { l: 133, t: 11, i: 363, }, D { l: 6, t: 0, i: 170 }, D { l: 7, t: 0, i: 1080, }, D { l: 8, t: 0, i: 395 }, D { l: 8, t: 0, i: 487 }, D { l: 141, t: 0, i: 147, }, D { l: 6, t: 11, i: 258, }, D { l: 140, t: 11, i: 409, }, D { l: 4, t: 0, i: 535 }, D { l: 8, t: 0, i: 618 }, D { l: 5, t: 11, i: 249, }, D { l: 148, t: 11, i: 82, }, D { l: 6, t: 0, i: 1379, }, D { l: 149, t: 11, i: 15, }, D { l: 135, t: 0, i: 1625, }, D { l: 150, t: 0, i: 23, }, D { l: 5, t: 11, i: 393, }, D { l: 6, t: 11, i: 378, }, D { l: 7, t: 11, i: 1981, }, D { l: 9, t: 11, i: 32 }, D { l: 9, t: 11, i: 591, }, D { l: 10, t: 11, i: 685, }, D { l: 10, t: 11, i: 741, }, D { l: 142, t: 11, i: 382, }, D { l: 133, t: 11, i: 788, }, D { l: 7, t: 11, i: 1968, }, D { l: 10, t: 11, i: 19, }, D { l: 139, t: 11, i: 911, }, D { l: 7, t: 11, i: 1401, }, D { l: 135, t: 11, i: 1476, }, D { l: 4, t: 11, i: 61 }, D { l: 5, t: 11, i: 58 }, D { l: 5, t: 11, i: 171, }, D { l: 5, t: 11, i: 635, }, D { l: 5, t: 11, i: 683, }, D { l: 5, t: 11, i: 700, }, D { l: 6, t: 11, i: 291, }, D { l: 6, t: 11, i: 566, }, D { l: 7, t: 11, i: 1650, }, D { l: 11, t: 11, i: 523, }, D { l: 12, t: 11, i: 273, }, D { l: 12, t: 11, i: 303, }, D { l: 15, t: 11, i: 39, }, D { l: 143, t: 11, i: 111, }, D { l: 6, t: 10, i: 469, }, D { l: 7, t: 10, i: 1709, }, D { l: 138, t: 10, i: 515, }, D { l: 4, t: 0, i: 778 }, D { l: 134, t: 11, i: 589, }, D { l: 132, t: 0, i: 46, }, D { l: 5, t: 0, i: 811 }, D { l: 6, t: 0, i: 1679, }, D { l: 6, t: 0, i: 1714, }, D { l: 135, t: 0, i: 2032, }, D { l: 7, t: 0, i: 1458, }, D { l: 9, t: 0, i: 407 }, D { l: 11, t: 0, i: 15 }, D { l: 12, t: 0, i: 651, }, D { l: 149, t: 0, i: 37, }, D { l: 7, t: 0, i: 938 }, D { l: 132, t: 10, i: 500, }, D { l: 6, t: 0, i: 34 }, D { l: 7, t: 0, i: 69 }, D { l: 7, t: 0, i: 1089, }, D { l: 7, t: 0, i: 1281, }, D { l: 8, t: 0, i: 708 }, D { l: 8, t: 0, i: 721 }, D { l: 9, t: 0, i: 363 }, D { l: 148, t: 0, i: 98, }, D { l: 10, t: 11, i: 231, }, D { l: 147, t: 11, i: 124, }, D { l: 7, t: 11, i: 726, }, D { l: 152, t: 11, i: 9, }, D { l: 5, t: 10, i: 68 }, D { l: 134, t: 10, i: 383, }, D { l: 136, t: 11, i: 583, }, D { l: 4, t: 11, i: 917, }, D { l: 133, t: 11, i: 1005, }, D { l: 11, t: 10, i: 216, }, D { l: 139, t: 10, i: 340, }, D { l: 135, t: 11, i: 1675, }, D { l: 8, t: 0, i: 441 }, D { l: 10, t: 0, i: 314, }, D { l: 143, t: 0, i: 3 }, D { l: 132, t: 11, i: 919, }, D { l: 4, t: 10, i: 337, }, D { l: 6, t: 10, i: 353, }, D { l: 7, t: 10, i: 1934, }, D { l: 8, t: 10, i: 488, }, D { l: 137, t: 10, i: 429, }, D { l: 7, t: 0, i: 889 }, D { l: 7, t: 10, i: 1795, }, D { l: 8, t: 10, i: 259, }, D { l: 9, t: 10, i: 135, }, D { l: 9, t: 10, i: 177, }, D { l: 9, t: 10, i: 860, }, D { l: 10, t: 10, i: 825, }, D { l: 11, t: 10, i: 115, }, D { l: 11, t: 10, i: 370, }, D { l: 11, t: 10, i: 405, }, D { l: 11, t: 10, i: 604, }, D { l: 12, t: 10, i: 10, }, D { l: 12, t: 10, i: 667, }, D { l: 12, t: 10, i: 669, }, D { l: 13, t: 10, i: 76, }, D { l: 14, t: 10, i: 310, }, D { l: 15, t: 10, i: 76, }, D { l: 15, t: 10, i: 147, }, D { l: 148, t: 10, i: 23, }, D { l: 4, t: 10, i: 15 }, D { l: 4, t: 11, i: 255, }, D { l: 5, t: 10, i: 22 }, D { l: 5, t: 11, i: 302, }, D { l: 6, t: 11, i: 132, }, D { l: 6, t: 10, i: 244, }, D { l: 7, t: 10, i: 40 }, D { l: 7, t: 11, i: 128, }, D { l: 7, t: 10, i: 200, }, D { l: 7, t: 11, i: 283, }, D { l: 7, t: 10, i: 906, }, D { l: 7, t: 10, i: 1199, }, D { l: 7, t: 11, i: 1299, }, D { l: 9, t: 10, i: 616, }, D { l: 10, t: 11, i: 52, }, D { l: 10, t: 11, i: 514, }, D { l: 10, t: 10, i: 716, }, D { l: 11, t: 10, i: 635, }, D { l: 11, t: 10, i: 801, }, D { l: 11, t: 11, i: 925, }, D { l: 12, t: 10, i: 458, }, D { l: 13, t: 11, i: 92, }, D { l: 142, t: 11, i: 309, }, D { l: 132, t: 0, i: 462, }, D { l: 137, t: 11, i: 173, }, D { l: 135, t: 10, i: 1735, }, D { l: 8, t: 0, i: 525 }, D { l: 5, t: 10, i: 598, }, D { l: 7, t: 10, i: 791, }, D { l: 8, t: 10, i: 108, }, D { l: 137, t: 10, i: 123, }, D { l: 5, t: 0, i: 73 }, D { l: 6, t: 0, i: 23 }, D { l: 134, t: 0, i: 338, }, D { l: 132, t: 0, i: 676, }, D { l: 132, t: 10, i: 683, }, D { l: 7, t: 0, i: 725 }, D { l: 8, t: 0, i: 498 }, D { l: 139, t: 0, i: 268, }, D { l: 12, t: 0, i: 21 }, D { l: 151, t: 0, i: 7 }, D { l: 135, t: 0, i: 773, }, D { l: 4, t: 10, i: 155, }, D { l: 135, t: 10, i: 1689, }, D { l: 4, t: 0, i: 164 }, D { l: 5, t: 0, i: 730 }, D { l: 5, t: 10, i: 151, }, D { l: 5, t: 10, i: 741, }, D { l: 6, t: 11, i: 210, }, D { l: 7, t: 10, i: 498, }, D { l: 7, t: 10, i: 870, }, D { l: 7, t: 10, i: 1542, }, D { l: 12, t: 10, i: 213, }, D { l: 14, t: 10, i: 36, }, D { l: 14, t: 10, i: 391, }, D { l: 17, t: 10, i: 111, }, D { l: 18, t: 10, i: 6 }, D { l: 18, t: 10, i: 46, }, D { l: 18, t: 10, i: 151, }, D { l: 19, t: 10, i: 36, }, D { l: 20, t: 10, i: 32, }, D { l: 20, t: 10, i: 56, }, D { l: 20, t: 10, i: 69, }, D { l: 20, t: 10, i: 102, }, D { l: 21, t: 10, i: 4 }, D { l: 22, t: 10, i: 8 }, D { l: 22, t: 10, i: 10, }, D { l: 22, t: 10, i: 14, }, D { l: 150, t: 10, i: 31, }, D { l: 4, t: 10, i: 624, }, D { l: 135, t: 10, i: 1752, }, D { l: 4, t: 0, i: 583 }, D { l: 9, t: 0, i: 936 }, D { l: 15, t: 0, i: 214, }, D { l: 18, t: 0, i: 199, }, D { l: 24, t: 0, i: 26 }, D { l: 134, t: 11, i: 588, }, D { l: 7, t: 0, i: 1462, }, D { l: 11, t: 0, i: 659, }, D { l: 4, t: 11, i: 284, }, D { l: 134, t: 11, i: 223, }, D { l: 133, t: 0, i: 220, }, D { l: 139, t: 0, i: 803, }, D { l: 132, t: 0, i: 544, }, D { l: 4, t: 10, i: 492, }, D { l: 133, t: 10, i: 451, }, D { l: 16, t: 0, i: 98 }, D { l: 148, t: 0, i: 119, }, D { l: 4, t: 11, i: 218, }, D { l: 7, t: 11, i: 526, }, D { l: 143, t: 11, i: 137, }, D { l: 135, t: 10, i: 835, }, D { l: 4, t: 11, i: 270, }, D { l: 5, t: 11, i: 192, }, D { l: 6, t: 11, i: 332, }, D { l: 7, t: 11, i: 1322, }, D { l: 13, t: 11, i: 9 }, D { l: 13, t: 10, i: 70, }, D { l: 14, t: 11, i: 104, }, D { l: 142, t: 11, i: 311, }, D { l: 132, t: 10, i: 539, }, D { l: 140, t: 11, i: 661, }, D { l: 5, t: 0, i: 176 }, D { l: 6, t: 0, i: 437 }, D { l: 6, t: 0, i: 564 }, D { l: 11, t: 0, i: 181, }, D { l: 141, t: 0, i: 183, }, D { l: 135, t: 0, i: 1192, }, D { l: 6, t: 10, i: 113, }, D { l: 135, t: 10, i: 436, }, D { l: 136, t: 10, i: 718, }, D { l: 135, t: 10, i: 520, }, D { l: 135, t: 0, i: 1878, }, D { l: 140, t: 11, i: 196, }, D { l: 7, t: 11, i: 379, }, D { l: 8, t: 11, i: 481, }, D { l: 137, t: 11, i: 377, }, D { l: 5, t: 11, i: 1003, }, D { l: 6, t: 11, i: 149, }, D { l: 137, t: 11, i: 746, }, D { l: 8, t: 11, i: 262, }, D { l: 9, t: 11, i: 627, }, D { l: 10, t: 11, i: 18, }, D { l: 11, t: 11, i: 214, }, D { l: 11, t: 11, i: 404, }, D { l: 11, t: 11, i: 457, }, D { l: 11, t: 11, i: 780, }, D { l: 11, t: 11, i: 849, }, D { l: 11, t: 11, i: 913, }, D { l: 13, t: 11, i: 330, }, D { l: 13, t: 11, i: 401, }, D { l: 142, t: 11, i: 200, }, D { l: 149, t: 0, i: 26, }, D { l: 136, t: 11, i: 304, }, D { l: 132, t: 11, i: 142, }, D { l: 135, t: 0, i: 944, }, D { l: 4, t: 0, i: 790 }, D { l: 5, t: 0, i: 273 }, D { l: 134, t: 0, i: 394, }, D { l: 134, t: 0, i: 855, }, D { l: 4, t: 0, i: 135 }, D { l: 6, t: 0, i: 127 }, D { l: 7, t: 0, i: 1185, }, D { l: 7, t: 0, i: 1511, }, D { l: 8, t: 0, i: 613 }, D { l: 11, t: 0, i: 5 }, D { l: 12, t: 0, i: 336, }, D { l: 12, t: 0, i: 495, }, D { l: 12, t: 0, i: 586, }, D { l: 12, t: 0, i: 660, }, D { l: 12, t: 0, i: 668, }, D { l: 14, t: 0, i: 385, }, D { l: 15, t: 0, i: 118, }, D { l: 17, t: 0, i: 20 }, D { l: 146, t: 0, i: 98, }, D { l: 6, t: 0, i: 230 }, D { l: 9, t: 0, i: 752 }, D { l: 18, t: 0, i: 109, }, D { l: 12, t: 10, i: 610, }, D { l: 13, t: 10, i: 431, }, D { l: 144, t: 10, i: 59, }, D { l: 7, t: 0, i: 1954, }, D { l: 135, t: 11, i: 925, }, D { l: 4, t: 11, i: 471, }, D { l: 5, t: 11, i: 51 }, D { l: 6, t: 11, i: 602, }, D { l: 8, t: 11, i: 484, }, D { l: 10, t: 11, i: 195, }, D { l: 140, t: 11, i: 159, }, D { l: 132, t: 10, i: 307, }, D { l: 136, t: 11, i: 688, }, D { l: 132, t: 11, i: 697, }, D { l: 7, t: 11, i: 812, }, D { l: 7, t: 11, i: 1261, }, D { l: 7, t: 11, i: 1360, }, D { l: 9, t: 11, i: 632, }, D { l: 140, t: 11, i: 352, }, D { l: 5, t: 0, i: 162 }, D { l: 8, t: 0, i: 68 }, D { l: 133, t: 10, i: 964, }, D { l: 4, t: 0, i: 654 }, D { l: 136, t: 11, i: 212, }, D { l: 4, t: 0, i: 156 }, D { l: 7, t: 0, i: 998 }, D { l: 7, t: 0, i: 1045, }, D { l: 7, t: 0, i: 1860, }, D { l: 9, t: 0, i: 48 }, D { l: 9, t: 0, i: 692 }, D { l: 11, t: 0, i: 419, }, D { l: 139, t: 0, i: 602, }, D { l: 133, t: 11, i: 221, }, D { l: 4, t: 11, i: 373, }, D { l: 5, t: 11, i: 283, }, D { l: 6, t: 11, i: 480, }, D { l: 135, t: 11, i: 609, }, D { l: 142, t: 11, i: 216, }, D { l: 132, t: 0, i: 240, }, D { l: 6, t: 11, i: 192, }, D { l: 9, t: 11, i: 793, }, D { l: 145, t: 11, i: 55, }, D { l: 4, t: 10, i: 75 }, D { l: 5, t: 10, i: 180, }, D { l: 6, t: 10, i: 500, }, D { l: 7, t: 10, i: 58 }, D { l: 7, t: 10, i: 710, }, D { l: 138, t: 10, i: 645, }, D { l: 4, t: 11, i: 132, }, D { l: 5, t: 11, i: 69 }, D { l: 5, t: 10, i: 649, }, D { l: 135, t: 11, i: 1242, }, D { l: 6, t: 10, i: 276, }, D { l: 7, t: 10, i: 282, }, D { l: 7, t: 10, i: 879, }, D { l: 7, t: 10, i: 924, }, D { l: 8, t: 10, i: 459, }, D { l: 9, t: 10, i: 599, }, D { l: 9, t: 10, i: 754, }, D { l: 11, t: 10, i: 574, }, D { l: 12, t: 10, i: 128, }, D { l: 12, t: 10, i: 494, }, D { l: 13, t: 10, i: 52, }, D { l: 13, t: 10, i: 301, }, D { l: 15, t: 10, i: 30, }, D { l: 143, t: 10, i: 132, }, D { l: 132, t: 10, i: 200, }, D { l: 4, t: 11, i: 111, }, D { l: 135, t: 11, i: 302, }, D { l: 9, t: 0, i: 197 }, D { l: 10, t: 0, i: 300, }, D { l: 12, t: 0, i: 473, }, D { l: 13, t: 0, i: 90 }, D { l: 141, t: 0, i: 405, }, D { l: 132, t: 11, i: 767, }, D { l: 6, t: 11, i: 42 }, D { l: 7, t: 11, i: 1416, }, D { l: 7, t: 11, i: 1590, }, D { l: 7, t: 11, i: 2005, }, D { l: 8, t: 11, i: 131, }, D { l: 8, t: 11, i: 466, }, D { l: 9, t: 11, i: 672, }, D { l: 13, t: 11, i: 252, }, D { l: 148, t: 11, i: 103, }, D { l: 8, t: 0, i: 958 }, D { l: 8, t: 0, i: 999 }, D { l: 10, t: 0, i: 963, }, D { l: 138, t: 0, i: 1001, }, D { l: 135, t: 10, i: 1621, }, D { l: 135, t: 0, i: 858, }, D { l: 4, t: 0, i: 606 }, D { l: 137, t: 11, i: 444, }, D { l: 6, t: 11, i: 44 }, D { l: 136, t: 11, i: 368, }, D { l: 139, t: 11, i: 172, }, D { l: 4, t: 11, i: 570, }, D { l: 133, t: 11, i: 120, }, D { l: 139, t: 11, i: 624, }, D { l: 7, t: 0, i: 1978, }, D { l: 8, t: 0, i: 676 }, D { l: 6, t: 10, i: 225, }, D { l: 137, t: 10, i: 211, }, D { l: 7, t: 0, i: 972 }, D { l: 11, t: 0, i: 102, }, D { l: 136, t: 10, i: 687, }, D { l: 6, t: 11, i: 227, }, D { l: 135, t: 11, i: 1589, }, D { l: 8, t: 10, i: 58 }, D { l: 9, t: 10, i: 724, }, D { l: 11, t: 10, i: 809, }, D { l: 13, t: 10, i: 113, }, D { l: 145, t: 10, i: 72, }, D { l: 4, t: 0, i: 361 }, D { l: 133, t: 0, i: 315, }, D { l: 132, t: 0, i: 461, }, D { l: 6, t: 10, i: 345, }, D { l: 135, t: 10, i: 1247, }, D { l: 132, t: 0, i: 472, }, D { l: 8, t: 10, i: 767, }, D { l: 8, t: 10, i: 803, }, D { l: 9, t: 10, i: 301, }, D { l: 137, t: 10, i: 903, }, D { l: 135, t: 11, i: 1333, }, D { l: 135, t: 11, i: 477, }, D { l: 7, t: 10, i: 1949, }, D { l: 136, t: 10, i: 674, }, D { l: 6, t: 0, i: 905 }, D { l: 138, t: 0, i: 747, }, D { l: 133, t: 0, i: 155, }, D { l: 134, t: 10, i: 259, }, D { l: 7, t: 0, i: 163 }, D { l: 8, t: 0, i: 319 }, D { l: 9, t: 0, i: 402 }, D { l: 10, t: 0, i: 24 }, D { l: 10, t: 0, i: 681, }, D { l: 11, t: 0, i: 200, }, D { l: 12, t: 0, i: 253, }, D { l: 12, t: 0, i: 410, }, D { l: 142, t: 0, i: 219, }, D { l: 5, t: 0, i: 475 }, D { l: 7, t: 0, i: 1780, }, D { l: 9, t: 0, i: 230 }, D { l: 11, t: 0, i: 297, }, D { l: 11, t: 0, i: 558, }, D { l: 14, t: 0, i: 322, }, D { l: 19, t: 0, i: 76 }, D { l: 6, t: 11, i: 1667, }, D { l: 7, t: 11, i: 2036, }, D { l: 138, t: 11, i: 600, }, D { l: 136, t: 10, i: 254, }, D { l: 6, t: 0, i: 848 }, D { l: 135, t: 0, i: 1956, }, D { l: 6, t: 11, i: 511, }, D { l: 140, t: 11, i: 132, }, D { l: 5, t: 11, i: 568, }, D { l: 6, t: 11, i: 138, }, D { l: 135, t: 11, i: 1293, }, D { l: 6, t: 0, i: 631 }, D { l: 137, t: 0, i: 838, }, D { l: 149, t: 0, i: 36, }, D { l: 4, t: 11, i: 565, }, D { l: 8, t: 11, i: 23 }, D { l: 136, t: 11, i: 827, }, D { l: 5, t: 0, i: 944 }, D { l: 134, t: 0, i: 1769, }, D { l: 4, t: 0, i: 144 }, D { l: 6, t: 0, i: 842 }, D { l: 6, t: 0, i: 1400, }, D { l: 4, t: 11, i: 922, }, D { l: 133, t: 11, i: 1023, }, D { l: 133, t: 10, i: 248, }, D { l: 9, t: 10, i: 800, }, D { l: 10, t: 10, i: 693, }, D { l: 11, t: 10, i: 482, }, D { l: 11, t: 10, i: 734, }, D { l: 139, t: 10, i: 789, }, D { l: 7, t: 11, i: 1002, }, D { l: 139, t: 11, i: 145, }, D { l: 4, t: 10, i: 116, }, D { l: 5, t: 10, i: 95 }, D { l: 5, t: 10, i: 445, }, D { l: 7, t: 10, i: 1688, }, D { l: 8, t: 10, i: 29 }, D { l: 9, t: 10, i: 272, }, D { l: 11, t: 10, i: 509, }, D { l: 139, t: 10, i: 915, }, D { l: 14, t: 0, i: 369, }, D { l: 146, t: 0, i: 72, }, D { l: 135, t: 10, i: 1641, }, D { l: 132, t: 11, i: 740, }, D { l: 133, t: 10, i: 543, }, D { l: 140, t: 11, i: 116, }, D { l: 6, t: 0, i: 247 }, D { l: 9, t: 0, i: 555 }, D { l: 5, t: 10, i: 181, }, D { l: 136, t: 10, i: 41, }, D { l: 133, t: 10, i: 657, }, D { l: 136, t: 0, i: 996, }, D { l: 138, t: 10, i: 709, }, D { l: 7, t: 0, i: 189 }, D { l: 8, t: 10, i: 202, }, D { l: 138, t: 10, i: 536, }, D { l: 136, t: 11, i: 402, }, D { l: 4, t: 11, i: 716, }, D { l: 141, t: 11, i: 31, }, D { l: 10, t: 0, i: 280, }, D { l: 138, t: 0, i: 797, }, D { l: 9, t: 10, i: 423, }, D { l: 140, t: 10, i: 89, }, D { l: 8, t: 10, i: 113, }, D { l: 9, t: 10, i: 877, }, D { l: 10, t: 10, i: 554, }, D { l: 11, t: 10, i: 83, }, D { l: 12, t: 10, i: 136, }, D { l: 147, t: 10, i: 109, }, D { l: 133, t: 10, i: 976, }, D { l: 7, t: 0, i: 746 }, D { l: 132, t: 10, i: 206, }, D { l: 136, t: 0, i: 526, }, D { l: 139, t: 0, i: 345, }, D { l: 136, t: 0, i: 1017, }, D { l: 8, t: 11, i: 152, }, D { l: 9, t: 11, i: 53 }, D { l: 9, t: 11, i: 268, }, D { l: 9, t: 11, i: 901, }, D { l: 10, t: 11, i: 518, }, D { l: 10, t: 11, i: 829, }, D { l: 11, t: 11, i: 188, }, D { l: 13, t: 11, i: 74, }, D { l: 14, t: 11, i: 46, }, D { l: 15, t: 11, i: 17, }, D { l: 15, t: 11, i: 33, }, D { l: 17, t: 11, i: 40, }, D { l: 18, t: 11, i: 36, }, D { l: 19, t: 11, i: 20, }, D { l: 22, t: 11, i: 1 }, D { l: 152, t: 11, i: 2, }, D { l: 133, t: 11, i: 736, }, D { l: 136, t: 11, i: 532, }, D { l: 5, t: 0, i: 428 }, D { l: 138, t: 0, i: 651, }, D { l: 135, t: 11, i: 681, }, D { l: 135, t: 0, i: 1162, }, D { l: 7, t: 0, i: 327 }, D { l: 13, t: 0, i: 230, }, D { l: 17, t: 0, i: 113, }, D { l: 8, t: 10, i: 226, }, D { l: 10, t: 10, i: 537, }, D { l: 11, t: 10, i: 570, }, D { l: 11, t: 10, i: 605, }, D { l: 11, t: 10, i: 799, }, D { l: 11, t: 10, i: 804, }, D { l: 12, t: 10, i: 85, }, D { l: 12, t: 10, i: 516, }, D { l: 12, t: 10, i: 623, }, D { l: 12, t: 11, i: 677, }, D { l: 13, t: 10, i: 361, }, D { l: 14, t: 10, i: 77, }, D { l: 14, t: 10, i: 78, }, D { l: 147, t: 10, i: 110, }, D { l: 4, t: 0, i: 792 }, D { l: 7, t: 0, i: 1717, }, D { l: 10, t: 0, i: 546, }, D { l: 132, t: 10, i: 769, }, D { l: 4, t: 11, i: 684, }, D { l: 136, t: 11, i: 384, }, D { l: 132, t: 10, i: 551, }, D { l: 134, t: 0, i: 1203, }, D { l: 9, t: 10, i: 57 }, D { l: 9, t: 10, i: 459, }, D { l: 10, t: 10, i: 425, }, D { l: 11, t: 10, i: 119, }, D { l: 12, t: 10, i: 184, }, D { l: 12, t: 10, i: 371, }, D { l: 13, t: 10, i: 358, }, D { l: 145, t: 10, i: 51, }, D { l: 5, t: 0, i: 672 }, D { l: 5, t: 10, i: 814, }, D { l: 8, t: 10, i: 10 }, D { l: 9, t: 10, i: 421, }, D { l: 9, t: 10, i: 729, }, D { l: 10, t: 10, i: 609, }, D { l: 139, t: 10, i: 689, }, D { l: 138, t: 0, i: 189, }, D { l: 134, t: 10, i: 624, }, D { l: 7, t: 11, i: 110, }, D { l: 7, t: 11, i: 188, }, D { l: 8, t: 11, i: 290, }, D { l: 8, t: 11, i: 591, }, D { l: 9, t: 11, i: 382, }, D { l: 9, t: 11, i: 649, }, D { l: 11, t: 11, i: 71, }, D { l: 11, t: 11, i: 155, }, D { l: 11, t: 11, i: 313, }, D { l: 12, t: 11, i: 5 }, D { l: 13, t: 11, i: 325, }, D { l: 142, t: 11, i: 287, }, D { l: 133, t: 0, i: 99, }, D { l: 6, t: 0, i: 1053, }, D { l: 135, t: 0, i: 298, }, D { l: 7, t: 11, i: 360, }, D { l: 7, t: 11, i: 425, }, D { l: 9, t: 11, i: 66 }, D { l: 9, t: 11, i: 278, }, D { l: 138, t: 11, i: 644, }, D { l: 4, t: 0, i: 397 }, D { l: 136, t: 0, i: 555, }, D { l: 137, t: 10, i: 269, }, D { l: 132, t: 10, i: 528, }, D { l: 4, t: 11, i: 900, }, D { l: 133, t: 11, i: 861, }, D { l: 6, t: 0, i: 1157, }, D { l: 5, t: 11, i: 254, }, D { l: 7, t: 11, i: 985, }, D { l: 136, t: 11, i: 73, }, D { l: 7, t: 11, i: 1959, }, D { l: 136, t: 11, i: 683, }, D { l: 12, t: 0, i: 398, }, D { l: 20, t: 0, i: 39 }, D { l: 21, t: 0, i: 11 }, D { l: 150, t: 0, i: 41, }, D { l: 4, t: 0, i: 485 }, D { l: 7, t: 0, i: 353 }, D { l: 135, t: 0, i: 1523, }, D { l: 6, t: 0, i: 366 }, D { l: 7, t: 0, i: 1384, }, D { l: 135, t: 0, i: 1601, }, D { l: 138, t: 0, i: 787, }, D { l: 137, t: 0, i: 282, }, D { l: 5, t: 10, i: 104, }, D { l: 6, t: 10, i: 173, }, D { l: 135, t: 10, i: 1631, }, D { l: 139, t: 11, i: 146, }, D { l: 4, t: 0, i: 157 }, D { l: 133, t: 0, i: 471, }, D { l: 134, t: 0, i: 941, }, D { l: 132, t: 11, i: 725, }, D { l: 7, t: 0, i: 1336, }, D { l: 8, t: 10, i: 138, }, D { l: 8, t: 10, i: 342, }, D { l: 9, t: 10, i: 84 }, D { l: 10, t: 10, i: 193, }, D { l: 11, t: 10, i: 883, }, D { l: 140, t: 10, i: 359, }, D { l: 134, t: 11, i: 196, }, D { l: 136, t: 0, i: 116, }, D { l: 133, t: 11, i: 831, }, D { l: 134, t: 0, i: 787, }, D { l: 134, t: 10, i: 95, }, D { l: 6, t: 10, i: 406, }, D { l: 10, t: 10, i: 409, }, D { l: 10, t: 10, i: 447, }, D { l: 11, t: 10, i: 44, }, D { l: 140, t: 10, i: 100, }, D { l: 5, t: 0, i: 160 }, D { l: 7, t: 0, i: 363 }, D { l: 7, t: 0, i: 589 }, D { l: 10, t: 0, i: 170, }, D { l: 141, t: 0, i: 55, }, D { l: 134, t: 0, i: 1815, }, D { l: 132, t: 0, i: 866, }, D { l: 6, t: 0, i: 889 }, D { l: 6, t: 0, i: 1067, }, D { l: 6, t: 0, i: 1183, }, D { l: 4, t: 11, i: 321, }, D { l: 134, t: 11, i: 569, }, D { l: 5, t: 11, i: 848, }, D { l: 134, t: 11, i: 66, }, D { l: 4, t: 11, i: 36 }, D { l: 6, t: 10, i: 1636, }, D { l: 7, t: 11, i: 1387, }, D { l: 10, t: 11, i: 205, }, D { l: 11, t: 11, i: 755, }, D { l: 141, t: 11, i: 271, }, D { l: 132, t: 0, i: 689, }, D { l: 9, t: 0, i: 820 }, D { l: 4, t: 10, i: 282, }, D { l: 7, t: 10, i: 1034, }, D { l: 11, t: 10, i: 398, }, D { l: 11, t: 10, i: 634, }, D { l: 12, t: 10, i: 1 }, D { l: 12, t: 10, i: 79, }, D { l: 12, t: 10, i: 544, }, D { l: 14, t: 10, i: 237, }, D { l: 17, t: 10, i: 10, }, D { l: 146, t: 10, i: 20, }, D { l: 4, t: 0, i: 108 }, D { l: 7, t: 0, i: 804 }, D { l: 139, t: 0, i: 498, }, D { l: 132, t: 11, i: 887, }, D { l: 6, t: 0, i: 1119, }, D { l: 135, t: 11, i: 620, }, D { l: 6, t: 11, i: 165, }, D { l: 138, t: 11, i: 388, }, D { l: 5, t: 0, i: 244 }, D { l: 5, t: 10, i: 499, }, D { l: 6, t: 10, i: 476, }, D { l: 7, t: 10, i: 600, }, D { l: 7, t: 10, i: 888, }, D { l: 135, t: 10, i: 1096, }, D { l: 140, t: 0, i: 609, }, D { l: 135, t: 0, i: 1005, }, D { l: 4, t: 0, i: 412 }, D { l: 133, t: 0, i: 581, }, D { l: 4, t: 11, i: 719, }, D { l: 135, t: 11, i: 155, }, D { l: 7, t: 10, i: 296, }, D { l: 7, t: 10, i: 596, }, D { l: 8, t: 10, i: 560, }, D { l: 8, t: 10, i: 586, }, D { l: 9, t: 10, i: 612, }, D { l: 11, t: 10, i: 304, }, D { l: 12, t: 10, i: 46, }, D { l: 13, t: 10, i: 89, }, D { l: 14, t: 10, i: 112, }, D { l: 145, t: 10, i: 122, }, D { l: 4, t: 0, i: 895 }, D { l: 133, t: 0, i: 772, }, D { l: 142, t: 11, i: 307, }, D { l: 135, t: 0, i: 1898, }, D { l: 4, t: 0, i: 926 }, D { l: 133, t: 0, i: 983, }, D { l: 4, t: 11, i: 353, }, D { l: 6, t: 11, i: 146, }, D { l: 6, t: 11, i: 1789, }, D { l: 7, t: 11, i: 288, }, D { l: 7, t: 11, i: 990, }, D { l: 7, t: 11, i: 1348, }, D { l: 9, t: 11, i: 665, }, D { l: 9, t: 11, i: 898, }, D { l: 11, t: 11, i: 893, }, D { l: 142, t: 11, i: 212, }, D { l: 132, t: 0, i: 538, }, D { l: 133, t: 11, i: 532, }, D { l: 6, t: 0, i: 294 }, D { l: 7, t: 0, i: 1267, }, D { l: 8, t: 0, i: 624 }, D { l: 141, t: 0, i: 496, }, D { l: 7, t: 0, i: 1325, }, D { l: 4, t: 11, i: 45 }, D { l: 135, t: 11, i: 1257, }, D { l: 138, t: 0, i: 301, }, D { l: 9, t: 0, i: 298 }, D { l: 12, t: 0, i: 291, }, D { l: 13, t: 0, i: 276, }, D { l: 14, t: 0, i: 6 }, D { l: 17, t: 0, i: 18 }, D { l: 21, t: 0, i: 32 }, D { l: 7, t: 10, i: 1599, }, D { l: 7, t: 10, i: 1723, }, D { l: 8, t: 10, i: 79 }, D { l: 8, t: 10, i: 106, }, D { l: 8, t: 10, i: 190, }, D { l: 8, t: 10, i: 302, }, D { l: 8, t: 10, i: 383, }, D { l: 8, t: 10, i: 713, }, D { l: 9, t: 10, i: 119, }, D { l: 9, t: 10, i: 233, }, D { l: 9, t: 10, i: 419, }, D { l: 9, t: 10, i: 471, }, D { l: 10, t: 10, i: 181, }, D { l: 10, t: 10, i: 406, }, D { l: 11, t: 10, i: 57, }, D { l: 11, t: 10, i: 85, }, D { l: 11, t: 10, i: 120, }, D { l: 11, t: 10, i: 177, }, D { l: 11, t: 10, i: 296, }, D { l: 11, t: 10, i: 382, }, D { l: 11, t: 10, i: 454, }, D { l: 11, t: 10, i: 758, }, D { l: 11, t: 10, i: 999, }, D { l: 12, t: 10, i: 27, }, D { l: 12, t: 10, i: 131, }, D { l: 12, t: 10, i: 245, }, D { l: 12, t: 10, i: 312, }, D { l: 12, t: 10, i: 446, }, D { l: 12, t: 10, i: 454, }, D { l: 13, t: 10, i: 98, }, D { l: 13, t: 10, i: 426, }, D { l: 13, t: 10, i: 508, }, D { l: 14, t: 10, i: 163, }, D { l: 14, t: 10, i: 272, }, D { l: 14, t: 10, i: 277, }, D { l: 14, t: 10, i: 370, }, D { l: 15, t: 10, i: 95, }, D { l: 15, t: 10, i: 138, }, D { l: 15, t: 10, i: 167, }, D { l: 17, t: 10, i: 38, }, D { l: 148, t: 10, i: 96, }, D { l: 132, t: 0, i: 757, }, D { l: 134, t: 0, i: 1263, }, D { l: 4, t: 0, i: 820 }, D { l: 134, t: 10, i: 1759, }, D { l: 133, t: 0, i: 722, }, D { l: 136, t: 11, i: 816, }, D { l: 138, t: 10, i: 372, }, D { l: 145, t: 10, i: 16, }, D { l: 134, t: 0, i: 1039, }, D { l: 4, t: 0, i: 991 }, D { l: 134, t: 0, i: 2028, }, D { l: 133, t: 10, i: 258, }, D { l: 7, t: 0, i: 1875, }, D { l: 139, t: 0, i: 124, }, D { l: 6, t: 11, i: 559, }, D { l: 6, t: 11, i: 1691, }, D { l: 135, t: 11, i: 586, }, D { l: 5, t: 0, i: 324 }, D { l: 7, t: 0, i: 881 }, D { l: 8, t: 10, i: 134, }, D { l: 9, t: 10, i: 788, }, D { l: 140, t: 10, i: 438, }, D { l: 7, t: 11, i: 1823, }, D { l: 139, t: 11, i: 693, }, D { l: 6, t: 0, i: 1348, }, D { l: 134, t: 0, i: 1545, }, D { l: 134, t: 0, i: 911, }, D { l: 132, t: 0, i: 954, }, D { l: 8, t: 0, i: 329 }, D { l: 8, t: 0, i: 414 }, D { l: 7, t: 10, i: 1948, }, D { l: 135, t: 10, i: 2004, }, D { l: 5, t: 0, i: 517 }, D { l: 6, t: 10, i: 439, }, D { l: 7, t: 10, i: 780, }, D { l: 135, t: 10, i: 1040, }, D { l: 132, t: 0, i: 816, }, D { l: 5, t: 10, i: 1 }, D { l: 6, t: 10, i: 81 }, D { l: 138, t: 10, i: 520, }, D { l: 9, t: 0, i: 713 }, D { l: 10, t: 0, i: 222, }, D { l: 5, t: 10, i: 482, }, D { l: 8, t: 10, i: 98 }, D { l: 10, t: 10, i: 700, }, D { l: 10, t: 10, i: 822, }, D { l: 11, t: 10, i: 302, }, D { l: 11, t: 10, i: 778, }, D { l: 12, t: 10, i: 50, }, D { l: 12, t: 10, i: 127, }, D { l: 12, t: 10, i: 396, }, D { l: 13, t: 10, i: 62, }, D { l: 13, t: 10, i: 328, }, D { l: 14, t: 10, i: 122, }, D { l: 147, t: 10, i: 72, }, D { l: 137, t: 0, i: 33, }, D { l: 5, t: 10, i: 2 }, D { l: 7, t: 10, i: 1494, }, D { l: 136, t: 10, i: 589, }, D { l: 6, t: 10, i: 512, }, D { l: 7, t: 10, i: 797, }, D { l: 8, t: 10, i: 253, }, D { l: 9, t: 10, i: 77 }, D { l: 10, t: 10, i: 1 }, D { l: 10, t: 11, i: 108, }, D { l: 10, t: 10, i: 129, }, D { l: 10, t: 10, i: 225, }, D { l: 11, t: 11, i: 116, }, D { l: 11, t: 10, i: 118, }, D { l: 11, t: 10, i: 226, }, D { l: 11, t: 10, i: 251, }, D { l: 11, t: 10, i: 430, }, D { l: 11, t: 10, i: 701, }, D { l: 11, t: 10, i: 974, }, D { l: 11, t: 10, i: 982, }, D { l: 12, t: 10, i: 64, }, D { l: 12, t: 10, i: 260, }, D { l: 12, t: 10, i: 488, }, D { l: 140, t: 10, i: 690, }, D { l: 134, t: 11, i: 456, }, D { l: 133, t: 11, i: 925, }, D { l: 5, t: 0, i: 150 }, D { l: 7, t: 0, i: 106 }, D { l: 7, t: 0, i: 774 }, D { l: 8, t: 0, i: 603 }, D { l: 9, t: 0, i: 593 }, D { l: 9, t: 0, i: 634 }, D { l: 10, t: 0, i: 44 }, D { l: 10, t: 0, i: 173, }, D { l: 11, t: 0, i: 462, }, D { l: 11, t: 0, i: 515, }, D { l: 13, t: 0, i: 216, }, D { l: 13, t: 0, i: 288, }, D { l: 142, t: 0, i: 400, }, D { l: 137, t: 10, i: 347, }, D { l: 5, t: 0, i: 748 }, D { l: 134, t: 0, i: 553, }, D { l: 12, t: 0, i: 108, }, D { l: 141, t: 0, i: 291, }, D { l: 7, t: 0, i: 420 }, D { l: 4, t: 10, i: 12 }, D { l: 7, t: 10, i: 522, }, D { l: 7, t: 10, i: 809, }, D { l: 8, t: 10, i: 797, }, D { l: 141, t: 10, i: 88, }, D { l: 6, t: 11, i: 193, }, D { l: 7, t: 11, i: 240, }, D { l: 7, t: 11, i: 1682, }, D { l: 10, t: 11, i: 51, }, D { l: 10, t: 11, i: 640, }, D { l: 11, t: 11, i: 410, }, D { l: 13, t: 11, i: 82, }, D { l: 14, t: 11, i: 247, }, D { l: 14, t: 11, i: 331, }, D { l: 142, t: 11, i: 377, }, D { l: 133, t: 10, i: 528, }, D { l: 135, t: 0, i: 1777, }, D { l: 4, t: 0, i: 493 }, D { l: 144, t: 0, i: 55, }, D { l: 136, t: 11, i: 633, }, D { l: 139, t: 0, i: 81, }, D { l: 6, t: 0, i: 980 }, D { l: 136, t: 0, i: 321, }, D { l: 148, t: 10, i: 109, }, D { l: 5, t: 10, i: 266, }, D { l: 9, t: 10, i: 290, }, D { l: 9, t: 10, i: 364, }, D { l: 10, t: 10, i: 293, }, D { l: 11, t: 10, i: 606, }, D { l: 142, t: 10, i: 45, }, D { l: 6, t: 0, i: 568 }, D { l: 7, t: 0, i: 112 }, D { l: 7, t: 0, i: 1804, }, D { l: 8, t: 0, i: 362 }, D { l: 8, t: 0, i: 410 }, D { l: 8, t: 0, i: 830 }, D { l: 9, t: 0, i: 514 }, D { l: 11, t: 0, i: 649, }, D { l: 142, t: 0, i: 157, }, D { l: 4, t: 0, i: 74 }, D { l: 6, t: 0, i: 510 }, D { l: 6, t: 10, i: 594, }, D { l: 9, t: 10, i: 121, }, D { l: 10, t: 10, i: 49, }, D { l: 10, t: 10, i: 412, }, D { l: 139, t: 10, i: 834, }, D { l: 134, t: 0, i: 838, }, D { l: 136, t: 10, i: 748, }, D { l: 132, t: 10, i: 466, }, D { l: 132, t: 0, i: 625, }, D { l: 135, t: 11, i: 1443, }, D { l: 4, t: 11, i: 237, }, D { l: 135, t: 11, i: 514, }, D { l: 9, t: 10, i: 378, }, D { l: 141, t: 10, i: 162, }, D { l: 6, t: 0, i: 16 }, D { l: 6, t: 0, i: 158 }, D { l: 7, t: 0, i: 43 }, D { l: 7, t: 0, i: 129 }, D { l: 7, t: 0, i: 181 }, D { l: 8, t: 0, i: 276 }, D { l: 8, t: 0, i: 377 }, D { l: 10, t: 0, i: 523, }, D { l: 11, t: 0, i: 816, }, D { l: 12, t: 0, i: 455, }, D { l: 13, t: 0, i: 303, }, D { l: 142, t: 0, i: 135, }, D { l: 135, t: 0, i: 281, }, D { l: 4, t: 0, i: 1 }, D { l: 7, t: 0, i: 1143, }, D { l: 7, t: 0, i: 1463, }, D { l: 8, t: 0, i: 61 }, D { l: 9, t: 0, i: 207 }, D { l: 9, t: 0, i: 390 }, D { l: 9, t: 0, i: 467 }, D { l: 139, t: 0, i: 836, }, D { l: 6, t: 11, i: 392, }, D { l: 7, t: 11, i: 65 }, D { l: 135, t: 11, i: 2019, }, D { l: 132, t: 10, i: 667, }, D { l: 4, t: 0, i: 723 }, D { l: 5, t: 0, i: 895 }, D { l: 7, t: 0, i: 1031, }, D { l: 8, t: 0, i: 199 }, D { l: 8, t: 0, i: 340 }, D { l: 9, t: 0, i: 153 }, D { l: 9, t: 0, i: 215 }, D { l: 10, t: 0, i: 21 }, D { l: 10, t: 0, i: 59 }, D { l: 10, t: 0, i: 80 }, D { l: 10, t: 0, i: 224, }, D { l: 10, t: 0, i: 838, }, D { l: 11, t: 0, i: 229, }, D { l: 11, t: 0, i: 652, }, D { l: 12, t: 0, i: 192, }, D { l: 13, t: 0, i: 146, }, D { l: 142, t: 0, i: 91, }, D { l: 132, t: 0, i: 295, }, D { l: 137, t: 0, i: 51, }, D { l: 9, t: 11, i: 222, }, D { l: 10, t: 11, i: 43, }, D { l: 139, t: 11, i: 900, }, D { l: 5, t: 0, i: 309 }, D { l: 140, t: 0, i: 211, }, D { l: 5, t: 0, i: 125 }, D { l: 8, t: 0, i: 77 }, D { l: 138, t: 0, i: 15, }, D { l: 136, t: 11, i: 604, }, D { l: 138, t: 0, i: 789, }, D { l: 5, t: 0, i: 173 }, D { l: 4, t: 10, i: 39 }, D { l: 7, t: 10, i: 1843, }, D { l: 8, t: 10, i: 407, }, D { l: 11, t: 10, i: 144, }, D { l: 140, t: 10, i: 523, }, D { l: 138, t: 11, i: 265, }, D { l: 133, t: 0, i: 439, }, D { l: 132, t: 10, i: 510, }, D { l: 7, t: 0, i: 648 }, D { l: 7, t: 0, i: 874 }, D { l: 11, t: 0, i: 164, }, D { l: 12, t: 0, i: 76 }, D { l: 18, t: 0, i: 9 }, D { l: 7, t: 10, i: 1980, }, D { l: 10, t: 10, i: 487, }, D { l: 138, t: 10, i: 809, }, D { l: 12, t: 0, i: 111, }, D { l: 14, t: 0, i: 294, }, D { l: 19, t: 0, i: 45 }, D { l: 13, t: 10, i: 260, }, D { l: 146, t: 10, i: 63, }, D { l: 133, t: 11, i: 549, }, D { l: 134, t: 10, i: 570, }, D { l: 4, t: 0, i: 8 }, D { l: 7, t: 0, i: 1152, }, D { l: 7, t: 0, i: 1153, }, D { l: 7, t: 0, i: 1715, }, D { l: 9, t: 0, i: 374 }, D { l: 10, t: 0, i: 478, }, D { l: 139, t: 0, i: 648, }, D { l: 135, t: 0, i: 1099, }, D { l: 5, t: 0, i: 575 }, D { l: 6, t: 0, i: 354 }, D { l: 135, t: 0, i: 701, }, D { l: 7, t: 11, i: 36 }, D { l: 8, t: 11, i: 201, }, D { l: 136, t: 11, i: 605, }, D { l: 4, t: 10, i: 787, }, D { l: 136, t: 11, i: 156, }, D { l: 6, t: 0, i: 518 }, D { l: 149, t: 11, i: 13, }, D { l: 140, t: 11, i: 224, }, D { l: 134, t: 0, i: 702, }, D { l: 132, t: 10, i: 516, }, D { l: 5, t: 11, i: 724, }, D { l: 10, t: 11, i: 305, }, D { l: 11, t: 11, i: 151, }, D { l: 12, t: 11, i: 33, }, D { l: 12, t: 11, i: 121, }, D { l: 12, t: 11, i: 381, }, D { l: 17, t: 11, i: 3 }, D { l: 17, t: 11, i: 27, }, D { l: 17, t: 11, i: 78, }, D { l: 18, t: 11, i: 18, }, D { l: 19, t: 11, i: 54, }, D { l: 149, t: 11, i: 5, }, D { l: 8, t: 0, i: 87 }, D { l: 4, t: 11, i: 523, }, D { l: 5, t: 11, i: 638, }, D { l: 11, t: 10, i: 887, }, D { l: 14, t: 10, i: 365, }, D { l: 142, t: 10, i: 375, }, D { l: 138, t: 0, i: 438, }, D { l: 136, t: 10, i: 821, }, D { l: 135, t: 11, i: 1908, }, D { l: 6, t: 11, i: 242, }, D { l: 7, t: 11, i: 227, }, D { l: 7, t: 11, i: 1581, }, D { l: 8, t: 11, i: 104, }, D { l: 9, t: 11, i: 113, }, D { l: 9, t: 11, i: 220, }, D { l: 9, t: 11, i: 427, }, D { l: 10, t: 11, i: 74, }, D { l: 10, t: 11, i: 239, }, D { l: 11, t: 11, i: 579, }, D { l: 11, t: 11, i: 1023, }, D { l: 13, t: 11, i: 4 }, D { l: 13, t: 11, i: 204, }, D { l: 13, t: 11, i: 316, }, D { l: 18, t: 11, i: 95, }, D { l: 148, t: 11, i: 86, }, D { l: 4, t: 0, i: 69 }, D { l: 5, t: 0, i: 122 }, D { l: 5, t: 0, i: 849 }, D { l: 6, t: 0, i: 1633, }, D { l: 9, t: 0, i: 656 }, D { l: 138, t: 0, i: 464, }, D { l: 7, t: 0, i: 1802, }, D { l: 4, t: 10, i: 10 }, D { l: 139, t: 10, i: 786, }, D { l: 135, t: 11, i: 861, }, D { l: 139, t: 0, i: 499, }, D { l: 7, t: 0, i: 476 }, D { l: 7, t: 0, i: 1592, }, D { l: 138, t: 0, i: 87, }, D { l: 133, t: 10, i: 684, }, D { l: 4, t: 0, i: 840 }, D { l: 134, t: 10, i: 27, }, D { l: 142, t: 0, i: 283, }, D { l: 6, t: 0, i: 1620, }, D { l: 7, t: 11, i: 1328, }, D { l: 136, t: 11, i: 494, }, D { l: 5, t: 0, i: 859 }, D { l: 7, t: 0, i: 1160, }, D { l: 8, t: 0, i: 107 }, D { l: 9, t: 0, i: 291 }, D { l: 9, t: 0, i: 439 }, D { l: 10, t: 0, i: 663, }, D { l: 11, t: 0, i: 609, }, D { l: 140, t: 0, i: 197, }, D { l: 7, t: 11, i: 1306, }, D { l: 8, t: 11, i: 505, }, D { l: 9, t: 11, i: 482, }, D { l: 10, t: 11, i: 126, }, D { l: 11, t: 11, i: 225, }, D { l: 12, t: 11, i: 347, }, D { l: 12, t: 11, i: 449, }, D { l: 13, t: 11, i: 19, }, D { l: 142, t: 11, i: 218, }, D { l: 5, t: 11, i: 268, }, D { l: 10, t: 11, i: 764, }, D { l: 12, t: 11, i: 120, }, D { l: 13, t: 11, i: 39, }, D { l: 145, t: 11, i: 127, }, D { l: 145, t: 10, i: 56, }, D { l: 7, t: 11, i: 1672, }, D { l: 10, t: 11, i: 472, }, D { l: 11, t: 11, i: 189, }, D { l: 143, t: 11, i: 51, }, D { l: 6, t: 10, i: 342, }, D { l: 6, t: 10, i: 496, }, D { l: 8, t: 10, i: 275, }, D { l: 137, t: 10, i: 206, }, D { l: 133, t: 0, i: 600, }, D { l: 4, t: 0, i: 117 }, D { l: 6, t: 0, i: 372 }, D { l: 7, t: 0, i: 1905, }, D { l: 142, t: 0, i: 323, }, D { l: 4, t: 10, i: 909, }, D { l: 5, t: 10, i: 940, }, D { l: 135, t: 11, i: 1471, }, D { l: 132, t: 10, i: 891, }, D { l: 4, t: 0, i: 722 }, D { l: 139, t: 0, i: 471, }, D { l: 4, t: 11, i: 384, }, D { l: 135, t: 11, i: 1022, }, D { l: 132, t: 10, i: 687, }, D { l: 9, t: 0, i: 5 }, D { l: 12, t: 0, i: 216, }, D { l: 12, t: 0, i: 294, }, D { l: 12, t: 0, i: 298, }, D { l: 12, t: 0, i: 400, }, D { l: 12, t: 0, i: 518, }, D { l: 13, t: 0, i: 229, }, D { l: 143, t: 0, i: 139, }, D { l: 135, t: 11, i: 1703, }, D { l: 7, t: 11, i: 1602, }, D { l: 10, t: 11, i: 698, }, D { l: 12, t: 11, i: 212, }, D { l: 141, t: 11, i: 307, }, D { l: 6, t: 10, i: 41 }, D { l: 141, t: 10, i: 160, }, D { l: 135, t: 11, i: 1077, }, D { l: 9, t: 11, i: 159, }, D { l: 11, t: 11, i: 28, }, D { l: 140, t: 11, i: 603, }, D { l: 4, t: 0, i: 514 }, D { l: 7, t: 0, i: 1304, }, D { l: 138, t: 0, i: 477, }, D { l: 134, t: 0, i: 1774, }, D { l: 9, t: 0, i: 88 }, D { l: 139, t: 0, i: 270, }, D { l: 5, t: 0, i: 12 }, D { l: 7, t: 0, i: 375 }, D { l: 9, t: 0, i: 438 }, D { l: 134, t: 10, i: 1718, }, D { l: 132, t: 11, i: 515, }, D { l: 136, t: 10, i: 778, }, D { l: 8, t: 11, i: 632, }, D { l: 8, t: 11, i: 697, }, D { l: 137, t: 11, i: 854, }, D { l: 6, t: 0, i: 362 }, D { l: 6, t: 0, i: 997 }, D { l: 146, t: 0, i: 51, }, D { l: 7, t: 0, i: 816 }, D { l: 7, t: 0, i: 1241, }, D { l: 9, t: 0, i: 283 }, D { l: 9, t: 0, i: 520 }, D { l: 10, t: 0, i: 213, }, D { l: 10, t: 0, i: 307, }, D { l: 10, t: 0, i: 463, }, D { l: 10, t: 0, i: 671, }, D { l: 10, t: 0, i: 746, }, D { l: 11, t: 0, i: 401, }, D { l: 11, t: 0, i: 794, }, D { l: 12, t: 0, i: 517, }, D { l: 18, t: 0, i: 107, }, D { l: 147, t: 0, i: 115, }, D { l: 133, t: 10, i: 115, }, D { l: 150, t: 11, i: 28, }, D { l: 4, t: 11, i: 136, }, D { l: 133, t: 11, i: 551, }, D { l: 142, t: 10, i: 314, }, D { l: 132, t: 0, i: 258, }, D { l: 6, t: 0, i: 22 }, D { l: 7, t: 0, i: 903 }, D { l: 7, t: 0, i: 1963, }, D { l: 8, t: 0, i: 639 }, D { l: 138, t: 0, i: 577, }, D { l: 5, t: 0, i: 681 }, D { l: 8, t: 0, i: 782 }, D { l: 13, t: 0, i: 130, }, D { l: 17, t: 0, i: 84 }, D { l: 5, t: 10, i: 193, }, D { l: 140, t: 10, i: 178, }, D { l: 9, t: 11, i: 17 }, D { l: 138, t: 11, i: 291, }, D { l: 7, t: 11, i: 1287, }, D { l: 9, t: 11, i: 44 }, D { l: 10, t: 11, i: 552, }, D { l: 10, t: 11, i: 642, }, D { l: 11, t: 11, i: 839, }, D { l: 12, t: 11, i: 274, }, D { l: 12, t: 11, i: 275, }, D { l: 12, t: 11, i: 372, }, D { l: 13, t: 11, i: 91, }, D { l: 142, t: 11, i: 125, }, D { l: 135, t: 10, i: 174, }, D { l: 4, t: 0, i: 664 }, D { l: 5, t: 0, i: 804 }, D { l: 139, t: 0, i: 1013, }, D { l: 134, t: 0, i: 942, }, D { l: 6, t: 0, i: 1349, }, D { l: 6, t: 0, i: 1353, }, D { l: 6, t: 0, i: 1450, }, D { l: 7, t: 11, i: 1518, }, D { l: 139, t: 11, i: 694, }, D { l: 11, t: 0, i: 356, }, D { l: 4, t: 10, i: 122, }, D { l: 5, t: 10, i: 796, }, D { l: 5, t: 10, i: 952, }, D { l: 6, t: 10, i: 1660, }, D { l: 6, t: 10, i: 1671, }, D { l: 8, t: 10, i: 567, }, D { l: 9, t: 10, i: 687, }, D { l: 9, t: 10, i: 742, }, D { l: 10, t: 10, i: 686, }, D { l: 11, t: 10, i: 682, }, D { l: 140, t: 10, i: 281, }, D { l: 5, t: 0, i: 32 }, D { l: 6, t: 11, i: 147, }, D { l: 7, t: 11, i: 886, }, D { l: 9, t: 11, i: 753, }, D { l: 138, t: 11, i: 268, }, D { l: 5, t: 10, i: 179, }, D { l: 7, t: 10, i: 1095, }, D { l: 135, t: 10, i: 1213, }, D { l: 4, t: 10, i: 66 }, D { l: 7, t: 10, i: 722, }, D { l: 135, t: 10, i: 904, }, D { l: 135, t: 10, i: 352, }, D { l: 9, t: 11, i: 245, }, D { l: 138, t: 11, i: 137, }, D { l: 4, t: 0, i: 289 }, D { l: 7, t: 0, i: 629 }, D { l: 7, t: 0, i: 1698, }, D { l: 7, t: 0, i: 1711, }, D { l: 12, t: 0, i: 215, }, D { l: 133, t: 11, i: 414, }, D { l: 6, t: 0, i: 1975, }, D { l: 135, t: 11, i: 1762, }, D { l: 6, t: 0, i: 450 }, D { l: 136, t: 0, i: 109, }, D { l: 141, t: 10, i: 35, }, D { l: 134, t: 11, i: 599, }, D { l: 136, t: 0, i: 705, }, D { l: 133, t: 0, i: 664, }, D { l: 134, t: 11, i: 1749, }, D { l: 11, t: 11, i: 402, }, D { l: 12, t: 11, i: 109, }, D { l: 12, t: 11, i: 431, }, D { l: 13, t: 11, i: 179, }, D { l: 13, t: 11, i: 206, }, D { l: 14, t: 11, i: 175, }, D { l: 14, t: 11, i: 217, }, D { l: 16, t: 11, i: 3 }, D { l: 148, t: 11, i: 53, }, D { l: 135, t: 0, i: 1238, }, D { l: 134, t: 11, i: 1627, }, D { l: 132, t: 11, i: 488, }, D { l: 13, t: 0, i: 318, }, D { l: 10, t: 10, i: 592, }, D { l: 10, t: 10, i: 753, }, D { l: 12, t: 10, i: 317, }, D { l: 12, t: 10, i: 355, }, D { l: 12, t: 10, i: 465, }, D { l: 12, t: 10, i: 469, }, D { l: 12, t: 10, i: 560, }, D { l: 140, t: 10, i: 578, }, D { l: 133, t: 10, i: 564, }, D { l: 132, t: 11, i: 83, }, D { l: 140, t: 11, i: 676, }, D { l: 6, t: 0, i: 1872, }, D { l: 6, t: 0, i: 1906, }, D { l: 6, t: 0, i: 1907, }, D { l: 9, t: 0, i: 934 }, D { l: 9, t: 0, i: 956 }, D { l: 9, t: 0, i: 960 }, D { l: 9, t: 0, i: 996 }, D { l: 12, t: 0, i: 794, }, D { l: 12, t: 0, i: 876, }, D { l: 12, t: 0, i: 880, }, D { l: 12, t: 0, i: 918, }, D { l: 15, t: 0, i: 230, }, D { l: 18, t: 0, i: 234, }, D { l: 18, t: 0, i: 238, }, D { l: 21, t: 0, i: 38 }, D { l: 149, t: 0, i: 62, }, D { l: 134, t: 10, i: 556, }, D { l: 134, t: 11, i: 278, }, D { l: 137, t: 0, i: 103, }, D { l: 7, t: 10, i: 544, }, D { l: 8, t: 10, i: 719, }, D { l: 138, t: 10, i: 61, }, D { l: 4, t: 10, i: 5 }, D { l: 5, t: 10, i: 498, }, D { l: 8, t: 10, i: 637, }, D { l: 137, t: 10, i: 521, }, D { l: 7, t: 0, i: 777 }, D { l: 12, t: 0, i: 229, }, D { l: 12, t: 0, i: 239, }, D { l: 15, t: 0, i: 12 }, D { l: 12, t: 11, i: 229, }, D { l: 12, t: 11, i: 239, }, D { l: 143, t: 11, i: 12, }, D { l: 6, t: 0, i: 26 }, D { l: 7, t: 11, i: 388, }, D { l: 7, t: 11, i: 644, }, D { l: 139, t: 11, i: 781, }, D { l: 7, t: 11, i: 229, }, D { l: 8, t: 11, i: 59 }, D { l: 9, t: 11, i: 190, }, D { l: 9, t: 11, i: 257, }, D { l: 10, t: 11, i: 378, }, D { l: 140, t: 11, i: 191, }, D { l: 133, t: 10, i: 927, }, D { l: 135, t: 10, i: 1441, }, D { l: 4, t: 10, i: 893, }, D { l: 5, t: 10, i: 780, }, D { l: 133, t: 10, i: 893, }, D { l: 4, t: 0, i: 414 }, D { l: 5, t: 0, i: 467 }, D { l: 9, t: 0, i: 654 }, D { l: 10, t: 0, i: 451, }, D { l: 12, t: 0, i: 59 }, D { l: 141, t: 0, i: 375, }, D { l: 142, t: 0, i: 173, }, D { l: 135, t: 0, i: 17, }, D { l: 7, t: 0, i: 1350, }, D { l: 133, t: 10, i: 238, }, D { l: 135, t: 0, i: 955, }, D { l: 4, t: 0, i: 960 }, D { l: 10, t: 0, i: 887, }, D { l: 12, t: 0, i: 753, }, D { l: 18, t: 0, i: 161, }, D { l: 18, t: 0, i: 162, }, D { l: 152, t: 0, i: 19, }, D { l: 136, t: 11, i: 344, }, D { l: 6, t: 10, i: 1729, }, D { l: 137, t: 11, i: 288, }, D { l: 132, t: 11, i: 660, }, D { l: 4, t: 0, i: 217 }, D { l: 5, t: 0, i: 710 }, D { l: 7, t: 0, i: 760 }, D { l: 7, t: 0, i: 1926, }, D { l: 9, t: 0, i: 428 }, D { l: 9, t: 0, i: 708 }, D { l: 10, t: 0, i: 254, }, D { l: 10, t: 0, i: 296, }, D { l: 10, t: 0, i: 720, }, D { l: 11, t: 0, i: 109, }, D { l: 11, t: 0, i: 255, }, D { l: 12, t: 0, i: 165, }, D { l: 12, t: 0, i: 315, }, D { l: 13, t: 0, i: 107, }, D { l: 13, t: 0, i: 203, }, D { l: 14, t: 0, i: 54 }, D { l: 14, t: 0, i: 99 }, D { l: 14, t: 0, i: 114, }, D { l: 14, t: 0, i: 388, }, D { l: 16, t: 0, i: 85 }, D { l: 17, t: 0, i: 9 }, D { l: 17, t: 0, i: 33 }, D { l: 20, t: 0, i: 25 }, D { l: 20, t: 0, i: 28 }, D { l: 20, t: 0, i: 29 }, D { l: 21, t: 0, i: 9 }, D { l: 21, t: 0, i: 10 }, D { l: 21, t: 0, i: 34 }, D { l: 22, t: 0, i: 17 }, D { l: 4, t: 10, i: 60 }, D { l: 7, t: 10, i: 1800, }, D { l: 8, t: 10, i: 314, }, D { l: 9, t: 10, i: 700, }, D { l: 139, t: 10, i: 487, }, D { l: 7, t: 11, i: 1035, }, D { l: 138, t: 11, i: 737, }, D { l: 7, t: 11, i: 690, }, D { l: 9, t: 11, i: 217, }, D { l: 9, t: 11, i: 587, }, D { l: 140, t: 11, i: 521, }, D { l: 6, t: 0, i: 919 }, D { l: 7, t: 11, i: 706, }, D { l: 7, t: 11, i: 1058, }, D { l: 138, t: 11, i: 538, }, D { l: 7, t: 10, i: 1853, }, D { l: 138, t: 10, i: 437, }, D { l: 136, t: 10, i: 419, }, D { l: 6, t: 0, i: 280 }, D { l: 10, t: 0, i: 502, }, D { l: 11, t: 0, i: 344, }, D { l: 140, t: 0, i: 38, }, D { l: 5, t: 0, i: 45 }, D { l: 7, t: 0, i: 1161, }, D { l: 11, t: 0, i: 448, }, D { l: 11, t: 0, i: 880, }, D { l: 13, t: 0, i: 139, }, D { l: 13, t: 0, i: 407, }, D { l: 15, t: 0, i: 16 }, D { l: 17, t: 0, i: 95 }, D { l: 18, t: 0, i: 66 }, D { l: 18, t: 0, i: 88 }, D { l: 18, t: 0, i: 123, }, D { l: 149, t: 0, i: 7 }, D { l: 11, t: 11, i: 92, }, D { l: 11, t: 11, i: 196, }, D { l: 11, t: 11, i: 409, }, D { l: 11, t: 11, i: 450, }, D { l: 11, t: 11, i: 666, }, D { l: 11, t: 11, i: 777, }, D { l: 12, t: 11, i: 262, }, D { l: 13, t: 11, i: 385, }, D { l: 13, t: 11, i: 393, }, D { l: 15, t: 11, i: 115, }, D { l: 16, t: 11, i: 45, }, D { l: 145, t: 11, i: 82, }, D { l: 136, t: 0, i: 777, }, D { l: 134, t: 11, i: 1744, }, D { l: 4, t: 0, i: 410 }, D { l: 7, t: 0, i: 521 }, D { l: 133, t: 10, i: 828, }, D { l: 134, t: 0, i: 673, }, D { l: 7, t: 0, i: 1110, }, D { l: 7, t: 0, i: 1778, }, D { l: 7, t: 10, i: 176, }, D { l: 135, t: 10, i: 178, }, D { l: 5, t: 10, i: 806, }, D { l: 7, t: 11, i: 268, }, D { l: 7, t: 10, i: 1976, }, D { l: 136, t: 11, i: 569, }, D { l: 4, t: 11, i: 733, }, D { l: 9, t: 11, i: 194, }, D { l: 10, t: 11, i: 92, }, D { l: 11, t: 11, i: 198, }, D { l: 12, t: 11, i: 84, }, D { l: 12, t: 11, i: 87, }, D { l: 13, t: 11, i: 128, }, D { l: 144, t: 11, i: 74, }, D { l: 5, t: 0, i: 341 }, D { l: 7, t: 0, i: 1129, }, D { l: 11, t: 0, i: 414, }, D { l: 4, t: 10, i: 51 }, D { l: 6, t: 10, i: 4 }, D { l: 7, t: 10, i: 591, }, D { l: 7, t: 10, i: 849, }, D { l: 7, t: 10, i: 951, }, D { l: 7, t: 10, i: 1613, }, D { l: 7, t: 10, i: 1760, }, D { l: 7, t: 10, i: 1988, }, D { l: 9, t: 10, i: 434, }, D { l: 10, t: 10, i: 754, }, D { l: 11, t: 10, i: 25, }, D { l: 139, t: 10, i: 37, }, D { l: 133, t: 10, i: 902, }, D { l: 135, t: 10, i: 928, }, D { l: 135, t: 0, i: 787, }, D { l: 132, t: 0, i: 436, }, D { l: 134, t: 10, i: 270, }, D { l: 7, t: 0, i: 1587, }, D { l: 135, t: 0, i: 1707, }, D { l: 6, t: 0, i: 377 }, D { l: 7, t: 0, i: 1025, }, D { l: 9, t: 0, i: 613 }, D { l: 145, t: 0, i: 104, }, D { l: 7, t: 11, i: 982, }, D { l: 7, t: 11, i: 1361, }, D { l: 10, t: 11, i: 32, }, D { l: 143, t: 11, i: 56, }, D { l: 139, t: 0, i: 96, }, D { l: 132, t: 0, i: 451, }, D { l: 132, t: 10, i: 416, }, D { l: 142, t: 10, i: 372, }, D { l: 5, t: 10, i: 152, }, D { l: 5, t: 10, i: 197, }, D { l: 7, t: 11, i: 306, }, D { l: 7, t: 10, i: 340, }, D { l: 7, t: 10, i: 867, }, D { l: 10, t: 10, i: 548, }, D { l: 10, t: 10, i: 581, }, D { l: 11, t: 10, i: 6 }, D { l: 12, t: 10, i: 3 }, D { l: 12, t: 10, i: 19, }, D { l: 14, t: 10, i: 110, }, D { l: 142, t: 10, i: 289, }, D { l: 134, t: 0, i: 680, }, D { l: 134, t: 11, i: 609, }, D { l: 7, t: 0, i: 483 }, D { l: 7, t: 10, i: 190, }, D { l: 8, t: 10, i: 28 }, D { l: 8, t: 10, i: 141, }, D { l: 8, t: 10, i: 444, }, D { l: 8, t: 10, i: 811, }, D { l: 9, t: 10, i: 468, }, D { l: 11, t: 10, i: 334, }, D { l: 12, t: 10, i: 24, }, D { l: 12, t: 10, i: 386, }, D { l: 140, t: 10, i: 576, }, D { l: 10, t: 0, i: 916, }, D { l: 133, t: 10, i: 757, }, D { l: 5, t: 10, i: 721, }, D { l: 135, t: 10, i: 1553, }, D { l: 133, t: 11, i: 178, }, D { l: 134, t: 0, i: 937, }, D { l: 132, t: 10, i: 898, }, D { l: 133, t: 0, i: 739, }, D { l: 147, t: 0, i: 82, }, D { l: 135, t: 0, i: 663, }, D { l: 146, t: 0, i: 128, }, D { l: 5, t: 10, i: 277, }, D { l: 141, t: 10, i: 247, }, D { l: 134, t: 0, i: 1087, }, D { l: 132, t: 10, i: 435, }, D { l: 6, t: 11, i: 381, }, D { l: 7, t: 11, i: 645, }, D { l: 7, t: 11, i: 694, }, D { l: 136, t: 11, i: 546, }, D { l: 7, t: 0, i: 503 }, D { l: 135, t: 0, i: 1885, }, D { l: 6, t: 0, i: 1965, }, D { l: 8, t: 0, i: 925 }, D { l: 138, t: 0, i: 955, }, D { l: 4, t: 0, i: 113 }, D { l: 5, t: 0, i: 163 }, D { l: 5, t: 0, i: 735 }, D { l: 7, t: 0, i: 1009, }, D { l: 9, t: 0, i: 9 }, D { l: 9, t: 0, i: 771 }, D { l: 12, t: 0, i: 90 }, D { l: 13, t: 0, i: 138, }, D { l: 13, t: 0, i: 410, }, D { l: 143, t: 0, i: 128, }, D { l: 4, t: 0, i: 324 }, D { l: 138, t: 0, i: 104, }, D { l: 7, t: 0, i: 460 }, D { l: 5, t: 10, i: 265, }, D { l: 134, t: 10, i: 212, }, D { l: 133, t: 11, i: 105, }, D { l: 7, t: 11, i: 261, }, D { l: 7, t: 11, i: 1107, }, D { l: 7, t: 11, i: 1115, }, D { l: 7, t: 11, i: 1354, }, D { l: 7, t: 11, i: 1588, }, D { l: 7, t: 11, i: 1705, }, D { l: 7, t: 11, i: 1902, }, D { l: 9, t: 11, i: 465, }, D { l: 10, t: 11, i: 248, }, D { l: 10, t: 11, i: 349, }, D { l: 10, t: 11, i: 647, }, D { l: 11, t: 11, i: 527, }, D { l: 11, t: 11, i: 660, }, D { l: 11, t: 11, i: 669, }, D { l: 12, t: 11, i: 529, }, D { l: 141, t: 11, i: 305, }, D { l: 5, t: 11, i: 438, }, D { l: 9, t: 11, i: 694, }, D { l: 12, t: 11, i: 627, }, D { l: 141, t: 11, i: 210, }, D { l: 152, t: 11, i: 11, }, D { l: 4, t: 0, i: 935 }, D { l: 133, t: 0, i: 823, }, D { l: 132, t: 10, i: 702, }, D { l: 5, t: 0, i: 269 }, D { l: 7, t: 0, i: 434 }, D { l: 7, t: 0, i: 891 }, D { l: 8, t: 0, i: 339 }, D { l: 9, t: 0, i: 702 }, D { l: 11, t: 0, i: 594, }, D { l: 11, t: 0, i: 718, }, D { l: 17, t: 0, i: 100, }, D { l: 5, t: 10, i: 808, }, D { l: 135, t: 10, i: 2045, }, D { l: 7, t: 0, i: 1014, }, D { l: 9, t: 0, i: 485 }, D { l: 141, t: 0, i: 264, }, D { l: 134, t: 0, i: 1713, }, D { l: 7, t: 0, i: 1810, }, D { l: 11, t: 0, i: 866, }, D { l: 12, t: 0, i: 103, }, D { l: 13, t: 0, i: 495, }, D { l: 140, t: 11, i: 233, }, D { l: 4, t: 0, i: 423 }, D { l: 10, t: 0, i: 949, }, D { l: 138, t: 0, i: 1013, }, D { l: 135, t: 0, i: 900, }, D { l: 8, t: 11, i: 25 }, D { l: 138, t: 11, i: 826, }, D { l: 5, t: 10, i: 166, }, D { l: 8, t: 10, i: 739, }, D { l: 140, t: 10, i: 511, }, D { l: 134, t: 0, i: 2018, }, D { l: 7, t: 11, i: 1270, }, D { l: 139, t: 11, i: 612, }, D { l: 4, t: 10, i: 119, }, D { l: 5, t: 10, i: 170, }, D { l: 5, t: 10, i: 447, }, D { l: 7, t: 10, i: 1708, }, D { l: 7, t: 10, i: 1889, }, D { l: 9, t: 10, i: 357, }, D { l: 9, t: 10, i: 719, }, D { l: 12, t: 10, i: 486, }, D { l: 140, t: 10, i: 596, }, D { l: 12, t: 0, i: 574, }, D { l: 140, t: 11, i: 574, }, D { l: 132, t: 11, i: 308, }, D { l: 6, t: 0, i: 964 }, D { l: 6, t: 0, i: 1206, }, D { l: 134, t: 0, i: 1302, }, D { l: 4, t: 10, i: 450, }, D { l: 135, t: 10, i: 1158, }, D { l: 135, t: 11, i: 150, }, D { l: 136, t: 11, i: 649, }, D { l: 14, t: 0, i: 213, }, D { l: 148, t: 0, i: 38, }, D { l: 9, t: 11, i: 45 }, D { l: 9, t: 11, i: 311, }, D { l: 141, t: 11, i: 42, }, D { l: 134, t: 11, i: 521, }, D { l: 7, t: 10, i: 1375, }, D { l: 7, t: 10, i: 1466, }, D { l: 138, t: 10, i: 331, }, D { l: 132, t: 10, i: 754, }, D { l: 5, t: 11, i: 339, }, D { l: 7, t: 11, i: 1442, }, D { l: 14, t: 11, i: 3 }, D { l: 15, t: 11, i: 41, }, D { l: 147, t: 11, i: 66, }, D { l: 136, t: 11, i: 378, }, D { l: 134, t: 0, i: 1022, }, D { l: 5, t: 10, i: 850, }, D { l: 136, t: 10, i: 799, }, D { l: 142, t: 0, i: 143, }, D { l: 135, t: 0, i: 2029, }, D { l: 134, t: 11, i: 1628, }, D { l: 8, t: 0, i: 523 }, D { l: 150, t: 0, i: 34, }, D { l: 5, t: 0, i: 625 }, D { l: 135, t: 0, i: 1617, }, D { l: 7, t: 0, i: 275 }, D { l: 7, t: 10, i: 238, }, D { l: 7, t: 10, i: 2033, }, D { l: 8, t: 10, i: 120, }, D { l: 8, t: 10, i: 188, }, D { l: 8, t: 10, i: 659, }, D { l: 9, t: 10, i: 598, }, D { l: 10, t: 10, i: 466, }, D { l: 12, t: 10, i: 342, }, D { l: 12, t: 10, i: 588, }, D { l: 13, t: 10, i: 503, }, D { l: 14, t: 10, i: 246, }, D { l: 143, t: 10, i: 92, }, D { l: 7, t: 0, i: 37 }, D { l: 8, t: 0, i: 425 }, D { l: 8, t: 0, i: 693 }, D { l: 9, t: 0, i: 720 }, D { l: 10, t: 0, i: 380, }, D { l: 10, t: 0, i: 638, }, D { l: 11, t: 0, i: 273, }, D { l: 11, t: 0, i: 473, }, D { l: 12, t: 0, i: 61 }, D { l: 143, t: 0, i: 43, }, D { l: 135, t: 11, i: 829, }, D { l: 135, t: 0, i: 1943, }, D { l: 132, t: 0, i: 765, }, D { l: 5, t: 11, i: 486, }, D { l: 135, t: 11, i: 1349, }, D { l: 7, t: 11, i: 1635, }, D { l: 8, t: 11, i: 17 }, D { l: 10, t: 11, i: 217, }, D { l: 138, t: 11, i: 295, }, D { l: 4, t: 10, i: 201, }, D { l: 7, t: 10, i: 1744, }, D { l: 8, t: 10, i: 602, }, D { l: 11, t: 10, i: 247, }, D { l: 11, t: 10, i: 826, }, D { l: 145, t: 10, i: 65, }, D { l: 138, t: 11, i: 558, }, D { l: 11, t: 0, i: 551, }, D { l: 142, t: 0, i: 159, }, D { l: 8, t: 10, i: 164, }, D { l: 146, t: 10, i: 62, }, D { l: 139, t: 11, i: 176, }, D { l: 132, t: 0, i: 168, }, D { l: 136, t: 0, i: 1010, }, D { l: 134, t: 0, i: 1994, }, D { l: 135, t: 0, i: 91, }, D { l: 138, t: 0, i: 532, }, D { l: 135, t: 10, i: 1243, }, D { l: 135, t: 0, i: 1884, }, D { l: 132, t: 10, i: 907, }, D { l: 5, t: 10, i: 100, }, D { l: 10, t: 10, i: 329, }, D { l: 12, t: 10, i: 416, }, D { l: 149, t: 10, i: 29, }, D { l: 134, t: 11, i: 447, }, D { l: 132, t: 10, i: 176, }, D { l: 5, t: 10, i: 636, }, D { l: 5, t: 10, i: 998, }, D { l: 7, t: 10, i: 9 }, D { l: 7, t: 10, i: 1508, }, D { l: 8, t: 10, i: 26 }, D { l: 9, t: 10, i: 317, }, D { l: 9, t: 10, i: 358, }, D { l: 10, t: 10, i: 210, }, D { l: 10, t: 10, i: 292, }, D { l: 10, t: 10, i: 533, }, D { l: 11, t: 10, i: 555, }, D { l: 12, t: 10, i: 526, }, D { l: 12, t: 10, i: 607, }, D { l: 13, t: 10, i: 263, }, D { l: 13, t: 10, i: 459, }, D { l: 142, t: 10, i: 271, }, D { l: 4, t: 11, i: 609, }, D { l: 135, t: 11, i: 756, }, D { l: 6, t: 0, i: 15 }, D { l: 7, t: 0, i: 70 }, D { l: 10, t: 0, i: 240, }, D { l: 147, t: 0, i: 93, }, D { l: 4, t: 11, i: 930, }, D { l: 133, t: 11, i: 947, }, D { l: 134, t: 0, i: 1227, }, D { l: 134, t: 0, i: 1534, }, D { l: 133, t: 11, i: 939, }, D { l: 133, t: 11, i: 962, }, D { l: 5, t: 11, i: 651, }, D { l: 8, t: 11, i: 170, }, D { l: 9, t: 11, i: 61 }, D { l: 9, t: 11, i: 63 }, D { l: 10, t: 11, i: 23, }, D { l: 10, t: 11, i: 37, }, D { l: 10, t: 11, i: 834, }, D { l: 11, t: 11, i: 4 }, D { l: 11, t: 11, i: 187, }, D { l: 11, t: 11, i: 281, }, D { l: 11, t: 11, i: 503, }, D { l: 11, t: 11, i: 677, }, D { l: 12, t: 11, i: 96, }, D { l: 12, t: 11, i: 130, }, D { l: 12, t: 11, i: 244, }, D { l: 14, t: 11, i: 5 }, D { l: 14, t: 11, i: 40, }, D { l: 14, t: 11, i: 162, }, D { l: 14, t: 11, i: 202, }, D { l: 146, t: 11, i: 133, }, D { l: 4, t: 11, i: 406, }, D { l: 5, t: 11, i: 579, }, D { l: 12, t: 11, i: 492, }, D { l: 150, t: 11, i: 15, }, D { l: 139, t: 0, i: 392, }, D { l: 6, t: 10, i: 610, }, D { l: 10, t: 10, i: 127, }, D { l: 141, t: 10, i: 27, }, D { l: 7, t: 0, i: 655 }, D { l: 7, t: 0, i: 1844, }, D { l: 136, t: 10, i: 119, }, D { l: 4, t: 0, i: 145 }, D { l: 6, t: 0, i: 176 }, D { l: 7, t: 0, i: 395 }, D { l: 137, t: 0, i: 562, }, D { l: 132, t: 0, i: 501, }, D { l: 140, t: 11, i: 145, }, D { l: 136, t: 0, i: 1019, }, D { l: 134, t: 0, i: 509, }, D { l: 139, t: 0, i: 267, }, D { l: 6, t: 11, i: 17 }, D { l: 7, t: 11, i: 16 }, D { l: 7, t: 11, i: 1001, }, D { l: 7, t: 11, i: 1982, }, D { l: 9, t: 11, i: 886, }, D { l: 10, t: 11, i: 489, }, D { l: 10, t: 11, i: 800, }, D { l: 11, t: 11, i: 782, }, D { l: 12, t: 11, i: 320, }, D { l: 13, t: 11, i: 467, }, D { l: 14, t: 11, i: 145, }, D { l: 14, t: 11, i: 387, }, D { l: 143, t: 11, i: 119, }, D { l: 145, t: 11, i: 17, }, D { l: 6, t: 0, i: 1099, }, D { l: 133, t: 11, i: 458, }, D { l: 7, t: 11, i: 1983, }, D { l: 8, t: 11, i: 0 }, D { l: 8, t: 11, i: 171, }, D { l: 9, t: 11, i: 120, }, D { l: 9, t: 11, i: 732, }, D { l: 10, t: 11, i: 473, }, D { l: 11, t: 11, i: 656, }, D { l: 11, t: 11, i: 998, }, D { l: 18, t: 11, i: 0 }, D { l: 18, t: 11, i: 2 }, D { l: 147, t: 11, i: 21, }, D { l: 12, t: 11, i: 427, }, D { l: 146, t: 11, i: 38, }, D { l: 10, t: 0, i: 948, }, D { l: 138, t: 0, i: 968, }, D { l: 7, t: 10, i: 126, }, D { l: 136, t: 10, i: 84, }, D { l: 136, t: 10, i: 790, }, D { l: 4, t: 0, i: 114 }, D { l: 9, t: 0, i: 492 }, D { l: 13, t: 0, i: 462, }, D { l: 142, t: 0, i: 215, }, D { l: 6, t: 10, i: 64 }, D { l: 12, t: 10, i: 377, }, D { l: 141, t: 10, i: 309, }, D { l: 4, t: 0, i: 77 }, D { l: 5, t: 0, i: 361 }, D { l: 6, t: 0, i: 139 }, D { l: 6, t: 0, i: 401 }, D { l: 6, t: 0, i: 404 }, D { l: 7, t: 0, i: 413 }, D { l: 7, t: 0, i: 715 }, D { l: 7, t: 0, i: 1716, }, D { l: 11, t: 0, i: 279, }, D { l: 12, t: 0, i: 179, }, D { l: 12, t: 0, i: 258, }, D { l: 13, t: 0, i: 244, }, D { l: 142, t: 0, i: 358, }, D { l: 134, t: 0, i: 1717, }, D { l: 7, t: 0, i: 772 }, D { l: 7, t: 0, i: 1061, }, D { l: 7, t: 0, i: 1647, }, D { l: 8, t: 0, i: 82 }, D { l: 11, t: 0, i: 250, }, D { l: 11, t: 0, i: 607, }, D { l: 12, t: 0, i: 311, }, D { l: 12, t: 0, i: 420, }, D { l: 13, t: 0, i: 184, }, D { l: 13, t: 0, i: 367, }, D { l: 7, t: 10, i: 1104, }, D { l: 11, t: 10, i: 269, }, D { l: 11, t: 10, i: 539, }, D { l: 11, t: 10, i: 627, }, D { l: 11, t: 10, i: 706, }, D { l: 11, t: 10, i: 975, }, D { l: 12, t: 10, i: 248, }, D { l: 12, t: 10, i: 434, }, D { l: 12, t: 10, i: 600, }, D { l: 12, t: 10, i: 622, }, D { l: 13, t: 10, i: 297, }, D { l: 13, t: 10, i: 485, }, D { l: 14, t: 10, i: 69, }, D { l: 14, t: 10, i: 409, }, D { l: 143, t: 10, i: 108, }, D { l: 135, t: 0, i: 724, }, D { l: 4, t: 11, i: 512, }, D { l: 4, t: 11, i: 519, }, D { l: 133, t: 11, i: 342, }, D { l: 134, t: 0, i: 1133, }, D { l: 145, t: 11, i: 29, }, D { l: 11, t: 10, i: 977, }, D { l: 141, t: 10, i: 507, }, D { l: 6, t: 0, i: 841 }, D { l: 6, t: 0, i: 1042, }, D { l: 6, t: 0, i: 1194, }, D { l: 10, t: 0, i: 993, }, D { l: 140, t: 0, i: 1021, }, D { l: 6, t: 11, i: 31 }, D { l: 7, t: 11, i: 491, }, D { l: 7, t: 11, i: 530, }, D { l: 8, t: 11, i: 592, }, D { l: 9, t: 10, i: 34 }, D { l: 11, t: 11, i: 53, }, D { l: 11, t: 10, i: 484, }, D { l: 11, t: 11, i: 779, }, D { l: 12, t: 11, i: 167, }, D { l: 12, t: 11, i: 411, }, D { l: 14, t: 11, i: 14, }, D { l: 14, t: 11, i: 136, }, D { l: 15, t: 11, i: 72, }, D { l: 16, t: 11, i: 17, }, D { l: 144, t: 11, i: 72, }, D { l: 4, t: 0, i: 1021, }, D { l: 6, t: 0, i: 2037, }, D { l: 133, t: 11, i: 907, }, D { l: 7, t: 0, i: 373 }, D { l: 8, t: 0, i: 335 }, D { l: 8, t: 0, i: 596 }, D { l: 9, t: 0, i: 488 }, D { l: 6, t: 10, i: 1700, }, D { l: 7, t: 10, i: 293, }, D { l: 7, t: 10, i: 382, }, D { l: 7, t: 10, i: 1026, }, D { l: 7, t: 10, i: 1087, }, D { l: 7, t: 10, i: 2027, }, D { l: 8, t: 10, i: 252, }, D { l: 8, t: 10, i: 727, }, D { l: 8, t: 10, i: 729, }, D { l: 9, t: 10, i: 30 }, D { l: 9, t: 10, i: 199, }, D { l: 9, t: 10, i: 231, }, D { l: 9, t: 10, i: 251, }, D { l: 9, t: 10, i: 334, }, D { l: 9, t: 10, i: 361, }, D { l: 9, t: 10, i: 712, }, D { l: 10, t: 10, i: 55, }, D { l: 10, t: 10, i: 60, }, D { l: 10, t: 10, i: 232, }, D { l: 10, t: 10, i: 332, }, D { l: 10, t: 10, i: 384, }, D { l: 10, t: 10, i: 396, }, D { l: 10, t: 10, i: 504, }, D { l: 10, t: 10, i: 542, }, D { l: 10, t: 10, i: 652, }, D { l: 11, t: 10, i: 20, }, D { l: 11, t: 10, i: 48, }, D { l: 11, t: 10, i: 207, }, D { l: 11, t: 10, i: 291, }, D { l: 11, t: 10, i: 298, }, D { l: 11, t: 10, i: 342, }, D { l: 11, t: 10, i: 365, }, D { l: 11, t: 10, i: 394, }, D { l: 11, t: 10, i: 620, }, D { l: 11, t: 10, i: 705, }, D { l: 11, t: 10, i: 1017, }, D { l: 12, t: 10, i: 123, }, D { l: 12, t: 10, i: 340, }, D { l: 12, t: 10, i: 406, }, D { l: 12, t: 10, i: 643, }, D { l: 13, t: 10, i: 61, }, D { l: 13, t: 10, i: 269, }, D { l: 13, t: 10, i: 311, }, D { l: 13, t: 10, i: 319, }, D { l: 13, t: 10, i: 486, }, D { l: 14, t: 10, i: 234, }, D { l: 15, t: 10, i: 62, }, D { l: 15, t: 10, i: 85, }, D { l: 16, t: 10, i: 71, }, D { l: 18, t: 10, i: 119, }, D { l: 148, t: 10, i: 105, }, D { l: 150, t: 0, i: 37, }, D { l: 4, t: 11, i: 208, }, D { l: 5, t: 11, i: 106, }, D { l: 6, t: 11, i: 531, }, D { l: 8, t: 11, i: 408, }, D { l: 9, t: 11, i: 188, }, D { l: 138, t: 11, i: 572, }, D { l: 132, t: 0, i: 564, }, D { l: 6, t: 0, i: 513 }, D { l: 135, t: 0, i: 1052, }, D { l: 132, t: 0, i: 825, }, D { l: 9, t: 0, i: 899 }, D { l: 140, t: 11, i: 441, }, D { l: 134, t: 0, i: 778, }, D { l: 133, t: 11, i: 379, }, D { l: 7, t: 0, i: 1417, }, D { l: 12, t: 0, i: 382, }, D { l: 17, t: 0, i: 48 }, D { l: 152, t: 0, i: 12, }, D { l: 132, t: 11, i: 241, }, D { l: 7, t: 0, i: 1116, }, D { l: 6, t: 10, i: 379, }, D { l: 7, t: 10, i: 270, }, D { l: 8, t: 10, i: 176, }, D { l: 8, t: 10, i: 183, }, D { l: 9, t: 10, i: 432, }, D { l: 9, t: 10, i: 661, }, D { l: 12, t: 10, i: 247, }, D { l: 12, t: 10, i: 617, }, D { l: 146, t: 10, i: 125, }, D { l: 5, t: 10, i: 792, }, D { l: 133, t: 10, i: 900, }, D { l: 6, t: 0, i: 545 }, D { l: 7, t: 0, i: 565 }, D { l: 7, t: 0, i: 1669, }, D { l: 10, t: 0, i: 114, }, D { l: 11, t: 0, i: 642, }, D { l: 140, t: 0, i: 618, }, D { l: 133, t: 0, i: 5 }, D { l: 138, t: 11, i: 7, }, D { l: 132, t: 11, i: 259, }, D { l: 135, t: 0, i: 192, }, D { l: 134, t: 0, i: 701, }, D { l: 136, t: 0, i: 763, }, D { l: 135, t: 10, i: 1979, }, D { l: 4, t: 10, i: 901, }, D { l: 133, t: 10, i: 776, }, D { l: 10, t: 0, i: 755, }, D { l: 147, t: 0, i: 29, }, D { l: 133, t: 0, i: 759, }, D { l: 4, t: 11, i: 173, }, D { l: 5, t: 11, i: 312, }, D { l: 5, t: 11, i: 512, }, D { l: 135, t: 11, i: 1285, }, D { l: 7, t: 11, i: 1603, }, D { l: 7, t: 11, i: 1691, }, D { l: 9, t: 11, i: 464, }, D { l: 11, t: 11, i: 195, }, D { l: 12, t: 11, i: 279, }, D { l: 12, t: 11, i: 448, }, D { l: 14, t: 11, i: 11, }, D { l: 147, t: 11, i: 102, }, D { l: 7, t: 0, i: 370 }, D { l: 7, t: 0, i: 1007, }, D { l: 7, t: 0, i: 1177, }, D { l: 135, t: 0, i: 1565, }, D { l: 135, t: 0, i: 1237, }, D { l: 4, t: 0, i: 87 }, D { l: 5, t: 0, i: 250 }, D { l: 141, t: 0, i: 298, }, D { l: 4, t: 11, i: 452, }, D { l: 5, t: 11, i: 583, }, D { l: 5, t: 11, i: 817, }, D { l: 6, t: 11, i: 433, }, D { l: 7, t: 11, i: 593, }, D { l: 7, t: 11, i: 720, }, D { l: 7, t: 11, i: 1378, }, D { l: 8, t: 11, i: 161, }, D { l: 9, t: 11, i: 284, }, D { l: 10, t: 11, i: 313, }, D { l: 139, t: 11, i: 886, }, D { l: 4, t: 11, i: 547, }, D { l: 135, t: 11, i: 1409, }, D { l: 136, t: 11, i: 722, }, D { l: 4, t: 10, i: 37 }, D { l: 5, t: 10, i: 334, }, D { l: 135, t: 10, i: 1253, }, D { l: 132, t: 10, i: 508, }, D { l: 12, t: 0, i: 107, }, D { l: 146, t: 0, i: 31, }, D { l: 8, t: 11, i: 420, }, D { l: 139, t: 11, i: 193, }, D { l: 135, t: 0, i: 814, }, D { l: 135, t: 11, i: 409, }, D { l: 140, t: 0, i: 991, }, D { l: 4, t: 0, i: 57 }, D { l: 7, t: 0, i: 1195, }, D { l: 7, t: 0, i: 1438, }, D { l: 7, t: 0, i: 1548, }, D { l: 7, t: 0, i: 1835, }, D { l: 7, t: 0, i: 1904, }, D { l: 9, t: 0, i: 757 }, D { l: 10, t: 0, i: 604, }, D { l: 139, t: 0, i: 519, }, D { l: 132, t: 0, i: 540, }, D { l: 138, t: 11, i: 308, }, D { l: 132, t: 10, i: 533, }, D { l: 136, t: 0, i: 608, }, D { l: 144, t: 11, i: 65, }, D { l: 4, t: 0, i: 1014, }, D { l: 134, t: 0, i: 2029, }, D { l: 4, t: 0, i: 209 }, D { l: 7, t: 0, i: 902 }, D { l: 5, t: 11, i: 1002, }, D { l: 136, t: 11, i: 745, }, D { l: 134, t: 0, i: 2030, }, D { l: 6, t: 0, i: 303 }, D { l: 7, t: 0, i: 335 }, D { l: 7, t: 0, i: 1437, }, D { l: 7, t: 0, i: 1668, }, D { l: 8, t: 0, i: 553 }, D { l: 8, t: 0, i: 652 }, D { l: 8, t: 0, i: 656 }, D { l: 9, t: 0, i: 558 }, D { l: 11, t: 0, i: 743, }, D { l: 149, t: 0, i: 18, }, D { l: 5, t: 11, i: 575, }, D { l: 6, t: 11, i: 354, }, D { l: 135, t: 11, i: 701, }, D { l: 4, t: 11, i: 239, }, D { l: 6, t: 11, i: 477, }, D { l: 7, t: 11, i: 1607, }, D { l: 11, t: 11, i: 68, }, D { l: 139, t: 11, i: 617, }, D { l: 132, t: 0, i: 559, }, D { l: 8, t: 0, i: 527 }, D { l: 18, t: 0, i: 60 }, D { l: 147, t: 0, i: 24, }, D { l: 133, t: 10, i: 920, }, D { l: 138, t: 0, i: 511, }, D { l: 133, t: 0, i: 1017, }, D { l: 133, t: 0, i: 675, }, D { l: 138, t: 10, i: 391, }, D { l: 11, t: 0, i: 156, }, D { l: 135, t: 10, i: 1952, }, D { l: 138, t: 11, i: 369, }, D { l: 132, t: 11, i: 367, }, D { l: 133, t: 0, i: 709, }, D { l: 6, t: 0, i: 698 }, D { l: 134, t: 0, i: 887, }, D { l: 142, t: 10, i: 126, }, D { l: 134, t: 0, i: 1745, }, D { l: 132, t: 10, i: 483, }, D { l: 13, t: 11, i: 299, }, D { l: 142, t: 11, i: 75, }, D { l: 133, t: 0, i: 714, }, D { l: 7, t: 0, i: 8 }, D { l: 136, t: 0, i: 206, }, D { l: 138, t: 10, i: 480, }, D { l: 4, t: 11, i: 694, }, D { l: 9, t: 10, i: 495, }, D { l: 146, t: 10, i: 104, }, D { l: 7, t: 11, i: 1248, }, D { l: 11, t: 11, i: 621, }, D { l: 139, t: 11, i: 702, }, D { l: 140, t: 11, i: 687, }, D { l: 132, t: 0, i: 776, }, D { l: 139, t: 10, i: 1009, }, D { l: 135, t: 0, i: 1272, }, D { l: 134, t: 0, i: 1059, }, D { l: 8, t: 10, i: 653, }, D { l: 13, t: 10, i: 93, }, D { l: 147, t: 10, i: 14, }, D { l: 135, t: 11, i: 213, }, D { l: 136, t: 0, i: 406, }, D { l: 133, t: 10, i: 172, }, D { l: 132, t: 0, i: 947, }, D { l: 8, t: 0, i: 175 }, D { l: 10, t: 0, i: 168, }, D { l: 138, t: 0, i: 573, }, D { l: 132, t: 0, i: 870, }, D { l: 6, t: 0, i: 1567, }, D { l: 151, t: 11, i: 28, }, D { l: 134, t: 11, i: 472, }, D { l: 5, t: 10, i: 260, }, D { l: 136, t: 11, i: 132, }, D { l: 4, t: 11, i: 751, }, D { l: 11, t: 11, i: 390, }, D { l: 140, t: 11, i: 32, }, D { l: 4, t: 11, i: 409, }, D { l: 133, t: 11, i: 78, }, D { l: 12, t: 0, i: 554, }, D { l: 6, t: 11, i: 473, }, D { l: 145, t: 11, i: 105, }, D { l: 133, t: 0, i: 784, }, D { l: 8, t: 0, i: 908 }, D { l: 136, t: 11, i: 306, }, D { l: 139, t: 0, i: 882, }, D { l: 6, t: 0, i: 358 }, D { l: 7, t: 0, i: 1393, }, D { l: 8, t: 0, i: 396 }, D { l: 10, t: 0, i: 263, }, D { l: 14, t: 0, i: 154, }, D { l: 16, t: 0, i: 48 }, D { l: 17, t: 0, i: 8 }, D { l: 7, t: 11, i: 1759, }, D { l: 8, t: 11, i: 396, }, D { l: 10, t: 11, i: 263, }, D { l: 14, t: 11, i: 154, }, D { l: 16, t: 11, i: 48, }, D { l: 145, t: 11, i: 8, }, D { l: 13, t: 11, i: 163, }, D { l: 13, t: 11, i: 180, }, D { l: 18, t: 11, i: 78, }, D { l: 148, t: 11, i: 35, }, D { l: 14, t: 0, i: 32 }, D { l: 18, t: 0, i: 85 }, D { l: 20, t: 0, i: 2 }, D { l: 152, t: 0, i: 16, }, D { l: 7, t: 0, i: 228 }, D { l: 10, t: 0, i: 770, }, D { l: 8, t: 10, i: 167, }, D { l: 8, t: 10, i: 375, }, D { l: 9, t: 10, i: 82 }, D { l: 9, t: 10, i: 561, }, D { l: 138, t: 10, i: 620, }, D { l: 132, t: 0, i: 845, }, D { l: 9, t: 0, i: 14 }, D { l: 9, t: 0, i: 441 }, D { l: 10, t: 0, i: 306, }, D { l: 139, t: 0, i: 9 }, D { l: 11, t: 0, i: 966, }, D { l: 12, t: 0, i: 287, }, D { l: 13, t: 0, i: 342, }, D { l: 13, t: 0, i: 402, }, D { l: 15, t: 0, i: 110, }, D { l: 15, t: 0, i: 163, }, D { l: 8, t: 10, i: 194, }, D { l: 136, t: 10, i: 756, }, D { l: 134, t: 0, i: 1578, }, D { l: 4, t: 0, i: 967 }, D { l: 6, t: 0, i: 1820, }, D { l: 6, t: 0, i: 1847, }, D { l: 140, t: 0, i: 716, }, D { l: 136, t: 0, i: 594, }, D { l: 7, t: 0, i: 1428, }, D { l: 7, t: 0, i: 1640, }, D { l: 7, t: 0, i: 1867, }, D { l: 9, t: 0, i: 169 }, D { l: 9, t: 0, i: 182 }, D { l: 9, t: 0, i: 367 }, D { l: 9, t: 0, i: 478 }, D { l: 9, t: 0, i: 506 }, D { l: 9, t: 0, i: 551 }, D { l: 9, t: 0, i: 557 }, D { l: 9, t: 0, i: 648 }, D { l: 9, t: 0, i: 697 }, D { l: 9, t: 0, i: 705 }, D { l: 9, t: 0, i: 725 }, D { l: 9, t: 0, i: 787 }, D { l: 9, t: 0, i: 794 }, D { l: 10, t: 0, i: 198, }, D { l: 10, t: 0, i: 214, }, D { l: 10, t: 0, i: 267, }, D { l: 10, t: 0, i: 275, }, D { l: 10, t: 0, i: 456, }, D { l: 10, t: 0, i: 551, }, D { l: 10, t: 0, i: 561, }, D { l: 10, t: 0, i: 613, }, D { l: 10, t: 0, i: 627, }, D { l: 10, t: 0, i: 668, }, D { l: 10, t: 0, i: 675, }, D { l: 10, t: 0, i: 691, }, D { l: 10, t: 0, i: 695, }, D { l: 10, t: 0, i: 707, }, D { l: 10, t: 0, i: 715, }, D { l: 11, t: 0, i: 183, }, D { l: 11, t: 0, i: 201, }, D { l: 11, t: 0, i: 244, }, D { l: 11, t: 0, i: 262, }, D { l: 11, t: 0, i: 352, }, D { l: 11, t: 0, i: 439, }, D { l: 11, t: 0, i: 493, }, D { l: 11, t: 0, i: 572, }, D { l: 11, t: 0, i: 591, }, D { l: 11, t: 0, i: 608, }, D { l: 11, t: 0, i: 611, }, D { l: 11, t: 0, i: 646, }, D { l: 11, t: 0, i: 674, }, D { l: 11, t: 0, i: 711, }, D { l: 11, t: 0, i: 751, }, D { l: 11, t: 0, i: 761, }, D { l: 11, t: 0, i: 776, }, D { l: 11, t: 0, i: 785, }, D { l: 11, t: 0, i: 850, }, D { l: 11, t: 0, i: 853, }, D { l: 11, t: 0, i: 862, }, D { l: 11, t: 0, i: 865, }, D { l: 11, t: 0, i: 868, }, D { l: 11, t: 0, i: 875, }, D { l: 11, t: 0, i: 898, }, D { l: 11, t: 0, i: 902, }, D { l: 11, t: 0, i: 903, }, D { l: 11, t: 0, i: 910, }, D { l: 11, t: 0, i: 932, }, D { l: 11, t: 0, i: 942, }, D { l: 11, t: 0, i: 957, }, D { l: 11, t: 0, i: 967, }, D { l: 11, t: 0, i: 972, }, D { l: 12, t: 0, i: 148, }, D { l: 12, t: 0, i: 195, }, D { l: 12, t: 0, i: 220, }, D { l: 12, t: 0, i: 237, }, D { l: 12, t: 0, i: 318, }, D { l: 12, t: 0, i: 339, }, D { l: 12, t: 0, i: 393, }, D { l: 12, t: 0, i: 445, }, D { l: 12, t: 0, i: 450, }, D { l: 12, t: 0, i: 474, }, D { l: 12, t: 0, i: 505, }, D { l: 12, t: 0, i: 509, }, D { l: 12, t: 0, i: 533, }, D { l: 12, t: 0, i: 591, }, D { l: 12, t: 0, i: 594, }, D { l: 12, t: 0, i: 597, }, D { l: 12, t: 0, i: 621, }, D { l: 12, t: 0, i: 633, }, D { l: 12, t: 0, i: 642, }, D { l: 13, t: 0, i: 59 }, D { l: 13, t: 0, i: 60 }, D { l: 13, t: 0, i: 145, }, D { l: 13, t: 0, i: 239, }, D { l: 13, t: 0, i: 250, }, D { l: 13, t: 0, i: 329, }, D { l: 13, t: 0, i: 344, }, D { l: 13, t: 0, i: 365, }, D { l: 13, t: 0, i: 372, }, D { l: 13, t: 0, i: 387, }, D { l: 13, t: 0, i: 403, }, D { l: 13, t: 0, i: 414, }, D { l: 13, t: 0, i: 456, }, D { l: 13, t: 0, i: 470, }, D { l: 13, t: 0, i: 478, }, D { l: 13, t: 0, i: 483, }, D { l: 13, t: 0, i: 489, }, D { l: 14, t: 0, i: 55 }, D { l: 14, t: 0, i: 57 }, D { l: 14, t: 0, i: 81 }, D { l: 14, t: 0, i: 90 }, D { l: 14, t: 0, i: 148, }, D { l: 14, t: 0, i: 239, }, D { l: 14, t: 0, i: 266, }, D { l: 14, t: 0, i: 321, }, D { l: 14, t: 0, i: 326, }, D { l: 14, t: 0, i: 327, }, D { l: 14, t: 0, i: 330, }, D { l: 14, t: 0, i: 347, }, D { l: 14, t: 0, i: 355, }, D { l: 14, t: 0, i: 401, }, D { l: 14, t: 0, i: 404, }, D { l: 14, t: 0, i: 411, }, D { l: 14, t: 0, i: 414, }, D { l: 14, t: 0, i: 416, }, D { l: 14, t: 0, i: 420, }, D { l: 15, t: 0, i: 61 }, D { l: 15, t: 0, i: 74 }, D { l: 15, t: 0, i: 87 }, D { l: 15, t: 0, i: 88 }, D { l: 15, t: 0, i: 94 }, D { l: 15, t: 0, i: 96 }, D { l: 15, t: 0, i: 116, }, D { l: 15, t: 0, i: 149, }, D { l: 15, t: 0, i: 154, }, D { l: 16, t: 0, i: 50 }, D { l: 16, t: 0, i: 63 }, D { l: 16, t: 0, i: 73 }, D { l: 17, t: 0, i: 2 }, D { l: 17, t: 0, i: 66 }, D { l: 17, t: 0, i: 92 }, D { l: 17, t: 0, i: 103, }, D { l: 17, t: 0, i: 112, }, D { l: 17, t: 0, i: 120, }, D { l: 18, t: 0, i: 50 }, D { l: 18, t: 0, i: 54 }, D { l: 18, t: 0, i: 82 }, D { l: 18, t: 0, i: 86 }, D { l: 18, t: 0, i: 90 }, D { l: 18, t: 0, i: 111, }, D { l: 18, t: 0, i: 115, }, D { l: 18, t: 0, i: 156, }, D { l: 19, t: 0, i: 40 }, D { l: 19, t: 0, i: 79 }, D { l: 20, t: 0, i: 78 }, D { l: 21, t: 0, i: 22 }, D { l: 135, t: 11, i: 883, }, D { l: 5, t: 0, i: 161 }, D { l: 135, t: 0, i: 839, }, D { l: 4, t: 0, i: 782 }, D { l: 13, t: 11, i: 293, }, D { l: 142, t: 11, i: 56, }, D { l: 133, t: 11, i: 617, }, D { l: 139, t: 11, i: 50, }, D { l: 135, t: 10, i: 22, }, D { l: 145, t: 0, i: 64, }, D { l: 5, t: 10, i: 639, }, D { l: 7, t: 10, i: 1249, }, D { l: 139, t: 10, i: 896, }, D { l: 138, t: 0, i: 998, }, D { l: 135, t: 11, i: 2042, }, D { l: 4, t: 11, i: 546, }, D { l: 142, t: 11, i: 233, }, D { l: 6, t: 0, i: 1043, }, D { l: 134, t: 0, i: 1574, }, D { l: 134, t: 0, i: 1496, }, D { l: 4, t: 10, i: 102, }, D { l: 7, t: 10, i: 815, }, D { l: 7, t: 10, i: 1699, }, D { l: 139, t: 10, i: 964, }, D { l: 12, t: 0, i: 781, }, D { l: 142, t: 0, i: 461, }, D { l: 4, t: 11, i: 313, }, D { l: 133, t: 11, i: 577, }, D { l: 6, t: 0, i: 639 }, D { l: 6, t: 0, i: 1114, }, D { l: 137, t: 0, i: 817, }, D { l: 8, t: 11, i: 184, }, D { l: 141, t: 11, i: 433, }, D { l: 7, t: 0, i: 1814, }, D { l: 135, t: 11, i: 935, }, D { l: 10, t: 0, i: 997, }, D { l: 140, t: 0, i: 958, }, D { l: 4, t: 0, i: 812 }, D { l: 137, t: 11, i: 625, }, D { l: 132, t: 10, i: 899, }, D { l: 136, t: 10, i: 795, }, D { l: 5, t: 11, i: 886, }, D { l: 6, t: 11, i: 46 }, D { l: 6, t: 11, i: 1790, }, D { l: 7, t: 11, i: 14 }, D { l: 7, t: 11, i: 732, }, D { l: 7, t: 11, i: 1654, }, D { l: 8, t: 11, i: 95 }, D { l: 8, t: 11, i: 327, }, D { l: 8, t: 11, i: 616, }, D { l: 10, t: 11, i: 598, }, D { l: 10, t: 11, i: 769, }, D { l: 11, t: 11, i: 134, }, D { l: 11, t: 11, i: 747, }, D { l: 12, t: 11, i: 378, }, D { l: 142, t: 11, i: 97, }, D { l: 136, t: 0, i: 139, }, D { l: 6, t: 10, i: 52 }, D { l: 9, t: 10, i: 104, }, D { l: 9, t: 10, i: 559, }, D { l: 12, t: 10, i: 308, }, D { l: 147, t: 10, i: 87, }, D { l: 133, t: 11, i: 1021, }, D { l: 132, t: 10, i: 604, }, D { l: 132, t: 10, i: 301, }, D { l: 136, t: 10, i: 779, }, D { l: 7, t: 0, i: 643 }, D { l: 136, t: 0, i: 236, }, D { l: 132, t: 11, i: 153, }, D { l: 134, t: 0, i: 1172, }, D { l: 147, t: 10, i: 32, }, D { l: 133, t: 11, i: 798, }, D { l: 6, t: 0, i: 1338, }, D { l: 132, t: 11, i: 587, }, D { l: 6, t: 11, i: 598, }, D { l: 7, t: 11, i: 42 }, D { l: 8, t: 11, i: 695, }, D { l: 10, t: 11, i: 212, }, D { l: 11, t: 11, i: 158, }, D { l: 14, t: 11, i: 196, }, D { l: 145, t: 11, i: 85, }, D { l: 135, t: 10, i: 508, }, D { l: 5, t: 11, i: 957, }, D { l: 5, t: 11, i: 1008, }, D { l: 135, t: 11, i: 249, }, D { l: 4, t: 11, i: 129, }, D { l: 135, t: 11, i: 465, }, D { l: 5, t: 0, i: 54 }, D { l: 7, t: 11, i: 470, }, D { l: 7, t: 11, i: 1057, }, D { l: 7, t: 11, i: 1201, }, D { l: 9, t: 11, i: 755, }, D { l: 11, t: 11, i: 906, }, D { l: 140, t: 11, i: 527, }, D { l: 7, t: 11, i: 908, }, D { l: 146, t: 11, i: 7, }, D { l: 5, t: 11, i: 148, }, D { l: 136, t: 11, i: 450, }, D { l: 144, t: 11, i: 1, }, D { l: 4, t: 0, i: 256 }, D { l: 135, t: 0, i: 1488, }, D { l: 9, t: 0, i: 351 }, D { l: 6, t: 10, i: 310, }, D { l: 7, t: 10, i: 1849, }, D { l: 8, t: 10, i: 72 }, D { l: 8, t: 10, i: 272, }, D { l: 8, t: 10, i: 431, }, D { l: 9, t: 10, i: 12 }, D { l: 10, t: 10, i: 563, }, D { l: 10, t: 10, i: 630, }, D { l: 10, t: 10, i: 796, }, D { l: 10, t: 10, i: 810, }, D { l: 11, t: 10, i: 367, }, D { l: 11, t: 10, i: 599, }, D { l: 11, t: 10, i: 686, }, D { l: 140, t: 10, i: 672, }, D { l: 6, t: 0, i: 1885, }, D { l: 6, t: 0, i: 1898, }, D { l: 6, t: 0, i: 1899, }, D { l: 140, t: 0, i: 955, }, D { l: 4, t: 0, i: 714 }, D { l: 133, t: 0, i: 469, }, D { l: 6, t: 0, i: 1270, }, D { l: 134, t: 0, i: 1456, }, D { l: 132, t: 0, i: 744, }, D { l: 6, t: 0, i: 313 }, D { l: 7, t: 10, i: 537, }, D { l: 8, t: 10, i: 64 }, D { l: 9, t: 10, i: 127, }, D { l: 10, t: 10, i: 496, }, D { l: 12, t: 10, i: 510, }, D { l: 141, t: 10, i: 384, }, D { l: 4, t: 11, i: 217, }, D { l: 4, t: 10, i: 244, }, D { l: 5, t: 11, i: 710, }, D { l: 7, t: 10, i: 233, }, D { l: 7, t: 11, i: 1926, }, D { l: 9, t: 11, i: 428, }, D { l: 9, t: 11, i: 708, }, D { l: 10, t: 11, i: 254, }, D { l: 10, t: 11, i: 296, }, D { l: 10, t: 11, i: 720, }, D { l: 11, t: 11, i: 109, }, D { l: 11, t: 11, i: 255, }, D { l: 12, t: 11, i: 165, }, D { l: 12, t: 11, i: 315, }, D { l: 13, t: 11, i: 107, }, D { l: 13, t: 11, i: 203, }, D { l: 14, t: 11, i: 54, }, D { l: 14, t: 11, i: 99, }, D { l: 14, t: 11, i: 114, }, D { l: 14, t: 11, i: 388, }, D { l: 16, t: 11, i: 85, }, D { l: 17, t: 11, i: 9 }, D { l: 17, t: 11, i: 33, }, D { l: 20, t: 11, i: 25, }, D { l: 20, t: 11, i: 28, }, D { l: 20, t: 11, i: 29, }, D { l: 21, t: 11, i: 9 }, D { l: 21, t: 11, i: 10, }, D { l: 21, t: 11, i: 34, }, D { l: 150, t: 11, i: 17, }, D { l: 138, t: 0, i: 402, }, D { l: 7, t: 0, i: 969 }, D { l: 146, t: 0, i: 55, }, D { l: 8, t: 0, i: 50 }, D { l: 137, t: 0, i: 624, }, D { l: 134, t: 0, i: 1355, }, D { l: 132, t: 0, i: 572, }, D { l: 134, t: 10, i: 1650, }, D { l: 10, t: 10, i: 702, }, D { l: 139, t: 10, i: 245, }, D { l: 10, t: 0, i: 847, }, D { l: 142, t: 0, i: 445, }, D { l: 6, t: 0, i: 43 }, D { l: 7, t: 0, i: 38 }, D { l: 8, t: 0, i: 248 }, D { l: 138, t: 0, i: 513, }, D { l: 133, t: 0, i: 369, }, D { l: 137, t: 10, i: 338, }, D { l: 133, t: 0, i: 766, }, D { l: 133, t: 0, i: 363, }, D { l: 133, t: 10, i: 896, }, D { l: 8, t: 11, i: 392, }, D { l: 11, t: 11, i: 54, }, D { l: 13, t: 11, i: 173, }, D { l: 13, t: 11, i: 294, }, D { l: 148, t: 11, i: 7, }, D { l: 134, t: 0, i: 678, }, D { l: 7, t: 11, i: 1230, }, D { l: 136, t: 11, i: 531, }, D { l: 6, t: 0, i: 258 }, D { l: 140, t: 0, i: 409, }, D { l: 5, t: 0, i: 249 }, D { l: 148, t: 0, i: 82, }, D { l: 7, t: 10, i: 1117, }, D { l: 136, t: 10, i: 539, }, D { l: 5, t: 0, i: 393 }, D { l: 6, t: 0, i: 378 }, D { l: 7, t: 0, i: 1981, }, D { l: 9, t: 0, i: 32 }, D { l: 9, t: 0, i: 591 }, D { l: 10, t: 0, i: 685, }, D { l: 10, t: 0, i: 741, }, D { l: 142, t: 0, i: 382, }, D { l: 133, t: 0, i: 788, }, D { l: 134, t: 0, i: 1281, }, D { l: 134, t: 0, i: 1295, }, D { l: 7, t: 0, i: 1968, }, D { l: 141, t: 0, i: 509, }, D { l: 4, t: 0, i: 61 }, D { l: 5, t: 0, i: 58 }, D { l: 5, t: 0, i: 171 }, D { l: 5, t: 0, i: 683 }, D { l: 6, t: 0, i: 291 }, D { l: 6, t: 0, i: 566 }, D { l: 7, t: 0, i: 1650, }, D { l: 11, t: 0, i: 523, }, D { l: 12, t: 0, i: 273, }, D { l: 12, t: 0, i: 303, }, D { l: 15, t: 0, i: 39 }, D { l: 143, t: 0, i: 111, }, D { l: 6, t: 0, i: 706 }, D { l: 134, t: 0, i: 1283, }, D { l: 134, t: 0, i: 589, }, D { l: 135, t: 11, i: 1433, }, D { l: 133, t: 11, i: 435, }, D { l: 7, t: 0, i: 1059, }, D { l: 13, t: 0, i: 54 }, D { l: 5, t: 10, i: 4 }, D { l: 5, t: 10, i: 810, }, D { l: 6, t: 10, i: 13 }, D { l: 6, t: 10, i: 538, }, D { l: 6, t: 10, i: 1690, }, D { l: 6, t: 10, i: 1726, }, D { l: 7, t: 10, i: 1819, }, D { l: 8, t: 10, i: 148, }, D { l: 8, t: 10, i: 696, }, D { l: 8, t: 10, i: 791, }, D { l: 12, t: 10, i: 125, }, D { l: 143, t: 10, i: 9, }, D { l: 135, t: 10, i: 1268, }, D { l: 5, t: 11, i: 85 }, D { l: 6, t: 11, i: 419, }, D { l: 7, t: 11, i: 134, }, D { l: 7, t: 11, i: 305, }, D { l: 7, t: 11, i: 361, }, D { l: 7, t: 11, i: 1337, }, D { l: 8, t: 11, i: 71 }, D { l: 140, t: 11, i: 519, }, D { l: 137, t: 0, i: 824, }, D { l: 140, t: 11, i: 688, }, D { l: 5, t: 11, i: 691, }, D { l: 7, t: 11, i: 345, }, D { l: 7, t: 10, i: 1385, }, D { l: 9, t: 11, i: 94 }, D { l: 11, t: 10, i: 582, }, D { l: 11, t: 10, i: 650, }, D { l: 11, t: 10, i: 901, }, D { l: 11, t: 10, i: 949, }, D { l: 12, t: 11, i: 169, }, D { l: 12, t: 10, i: 232, }, D { l: 12, t: 10, i: 236, }, D { l: 13, t: 10, i: 413, }, D { l: 13, t: 10, i: 501, }, D { l: 146, t: 10, i: 116, }, D { l: 4, t: 0, i: 917 }, D { l: 133, t: 0, i: 1005, }, D { l: 7, t: 0, i: 1598, }, D { l: 5, t: 11, i: 183, }, D { l: 6, t: 11, i: 582, }, D { l: 9, t: 11, i: 344, }, D { l: 10, t: 11, i: 679, }, D { l: 140, t: 11, i: 435, }, D { l: 4, t: 10, i: 925, }, D { l: 5, t: 10, i: 803, }, D { l: 8, t: 10, i: 698, }, D { l: 138, t: 10, i: 828, }, D { l: 132, t: 0, i: 919, }, D { l: 135, t: 11, i: 511, }, D { l: 139, t: 10, i: 992, }, D { l: 4, t: 0, i: 255 }, D { l: 5, t: 0, i: 302 }, D { l: 6, t: 0, i: 132 }, D { l: 7, t: 0, i: 128 }, D { l: 7, t: 0, i: 283 }, D { l: 7, t: 0, i: 1299, }, D { l: 10, t: 0, i: 52 }, D { l: 10, t: 0, i: 514, }, D { l: 11, t: 0, i: 925, }, D { l: 13, t: 0, i: 92 }, D { l: 142, t: 0, i: 309, }, D { l: 134, t: 0, i: 1369, }, D { l: 135, t: 10, i: 1847, }, D { l: 134, t: 0, i: 328, }, D { l: 7, t: 11, i: 1993, }, D { l: 136, t: 11, i: 684, }, D { l: 133, t: 10, i: 383, }, D { l: 137, t: 0, i: 173, }, D { l: 134, t: 11, i: 583, }, D { l: 134, t: 0, i: 1411, }, D { l: 19, t: 0, i: 65 }, D { l: 5, t: 11, i: 704, }, D { l: 8, t: 11, i: 357, }, D { l: 10, t: 11, i: 745, }, D { l: 14, t: 11, i: 426, }, D { l: 17, t: 11, i: 94, }, D { l: 147, t: 11, i: 57, }, D { l: 9, t: 10, i: 660, }, D { l: 138, t: 10, i: 347, }, D { l: 4, t: 11, i: 179, }, D { l: 5, t: 11, i: 198, }, D { l: 133, t: 11, i: 697, }, D { l: 7, t: 11, i: 347, }, D { l: 7, t: 11, i: 971, }, D { l: 8, t: 11, i: 181, }, D { l: 138, t: 11, i: 711, }, D { l: 141, t: 0, i: 442, }, D { l: 11, t: 0, i: 842, }, D { l: 11, t: 0, i: 924, }, D { l: 13, t: 0, i: 317, }, D { l: 13, t: 0, i: 370, }, D { l: 13, t: 0, i: 469, }, D { l: 13, t: 0, i: 471, }, D { l: 14, t: 0, i: 397, }, D { l: 18, t: 0, i: 69 }, D { l: 18, t: 0, i: 145, }, D { l: 7, t: 10, i: 572, }, D { l: 9, t: 10, i: 592, }, D { l: 11, t: 10, i: 680, }, D { l: 12, t: 10, i: 356, }, D { l: 140, t: 10, i: 550, }, D { l: 14, t: 11, i: 19, }, D { l: 14, t: 11, i: 28, }, D { l: 144, t: 11, i: 29, }, D { l: 136, t: 0, i: 534, }, D { l: 4, t: 11, i: 243, }, D { l: 5, t: 11, i: 203, }, D { l: 7, t: 11, i: 19 }, D { l: 7, t: 11, i: 71 }, D { l: 7, t: 11, i: 113, }, D { l: 10, t: 11, i: 405, }, D { l: 11, t: 11, i: 357, }, D { l: 142, t: 11, i: 240, }, D { l: 6, t: 0, i: 210 }, D { l: 10, t: 0, i: 845, }, D { l: 138, t: 0, i: 862, }, D { l: 7, t: 11, i: 1351, }, D { l: 9, t: 11, i: 581, }, D { l: 10, t: 11, i: 639, }, D { l: 11, t: 11, i: 453, }, D { l: 140, t: 11, i: 584, }, D { l: 7, t: 11, i: 1450, }, D { l: 139, t: 11, i: 99, }, D { l: 10, t: 0, i: 892, }, D { l: 12, t: 0, i: 719, }, D { l: 144, t: 0, i: 105, }, D { l: 4, t: 0, i: 284 }, D { l: 6, t: 0, i: 223 }, D { l: 134, t: 11, i: 492, }, D { l: 5, t: 11, i: 134, }, D { l: 6, t: 11, i: 408, }, D { l: 6, t: 11, i: 495, }, D { l: 135, t: 11, i: 1593, }, D { l: 136, t: 0, i: 529, }, D { l: 137, t: 0, i: 807, }, D { l: 4, t: 0, i: 218 }, D { l: 7, t: 0, i: 526 }, D { l: 143, t: 0, i: 137, }, D { l: 6, t: 0, i: 1444, }, D { l: 142, t: 11, i: 4, }, D { l: 132, t: 11, i: 665, }, D { l: 4, t: 0, i: 270 }, D { l: 5, t: 0, i: 192 }, D { l: 6, t: 0, i: 332 }, D { l: 7, t: 0, i: 1322, }, D { l: 4, t: 11, i: 248, }, D { l: 7, t: 11, i: 137, }, D { l: 137, t: 11, i: 349, }, D { l: 140, t: 0, i: 661, }, D { l: 7, t: 0, i: 1517, }, D { l: 11, t: 0, i: 597, }, D { l: 14, t: 0, i: 76 }, D { l: 14, t: 0, i: 335, }, D { l: 20, t: 0, i: 33 }, D { l: 7, t: 10, i: 748, }, D { l: 139, t: 10, i: 700, }, D { l: 5, t: 11, i: 371, }, D { l: 135, t: 11, i: 563, }, D { l: 146, t: 11, i: 57, }, D { l: 133, t: 10, i: 127, }, D { l: 133, t: 0, i: 418, }, D { l: 4, t: 11, i: 374, }, D { l: 7, t: 11, i: 547, }, D { l: 7, t: 11, i: 1700, }, D { l: 7, t: 11, i: 1833, }, D { l: 139, t: 11, i: 858, }, D { l: 6, t: 10, i: 198, }, D { l: 140, t: 10, i: 83, }, D { l: 7, t: 11, i: 1812, }, D { l: 13, t: 11, i: 259, }, D { l: 13, t: 11, i: 356, }, D { l: 14, t: 11, i: 242, }, D { l: 147, t: 11, i: 114, }, D { l: 7, t: 0, i: 379 }, D { l: 8, t: 0, i: 481 }, D { l: 9, t: 0, i: 377 }, D { l: 5, t: 10, i: 276, }, D { l: 6, t: 10, i: 55 }, D { l: 135, t: 10, i: 1369, }, D { l: 138, t: 11, i: 286, }, D { l: 5, t: 0, i: 1003, }, D { l: 6, t: 0, i: 149 }, D { l: 6, t: 10, i: 1752, }, D { l: 136, t: 10, i: 726, }, D { l: 8, t: 0, i: 262 }, D { l: 9, t: 0, i: 627 }, D { l: 10, t: 0, i: 18 }, D { l: 11, t: 0, i: 214, }, D { l: 11, t: 0, i: 404, }, D { l: 11, t: 0, i: 457, }, D { l: 11, t: 0, i: 780, }, D { l: 11, t: 0, i: 913, }, D { l: 13, t: 0, i: 401, }, D { l: 14, t: 0, i: 200, }, D { l: 6, t: 11, i: 1647, }, D { l: 7, t: 11, i: 1552, }, D { l: 7, t: 11, i: 2010, }, D { l: 9, t: 11, i: 494, }, D { l: 137, t: 11, i: 509, }, D { l: 135, t: 0, i: 742, }, D { l: 136, t: 0, i: 304, }, D { l: 132, t: 0, i: 142, }, D { l: 133, t: 10, i: 764, }, D { l: 6, t: 10, i: 309, }, D { l: 7, t: 10, i: 331, }, D { l: 138, t: 10, i: 550, }, D { l: 135, t: 10, i: 1062, }, D { l: 6, t: 11, i: 123, }, D { l: 7, t: 11, i: 214, }, D { l: 7, t: 10, i: 986, }, D { l: 9, t: 11, i: 728, }, D { l: 10, t: 11, i: 157, }, D { l: 11, t: 11, i: 346, }, D { l: 11, t: 11, i: 662, }, D { l: 143, t: 11, i: 106, }, D { l: 135, t: 10, i: 1573, }, D { l: 7, t: 0, i: 925 }, D { l: 137, t: 0, i: 799, }, D { l: 4, t: 0, i: 471 }, D { l: 5, t: 0, i: 51 }, D { l: 6, t: 0, i: 602 }, D { l: 8, t: 0, i: 484 }, D { l: 138, t: 0, i: 195, }, D { l: 136, t: 0, i: 688, }, D { l: 132, t: 0, i: 697, }, D { l: 6, t: 0, i: 1169, }, D { l: 6, t: 0, i: 1241, }, D { l: 6, t: 10, i: 194, }, D { l: 7, t: 10, i: 133, }, D { l: 10, t: 10, i: 493, }, D { l: 10, t: 10, i: 570, }, D { l: 139, t: 10, i: 664, }, D { l: 140, t: 0, i: 751, }, D { l: 7, t: 0, i: 929 }, D { l: 10, t: 0, i: 452, }, D { l: 11, t: 0, i: 878, }, D { l: 16, t: 0, i: 33 }, D { l: 5, t: 10, i: 24 }, D { l: 5, t: 10, i: 569, }, D { l: 6, t: 10, i: 3 }, D { l: 6, t: 10, i: 119, }, D { l: 6, t: 10, i: 143, }, D { l: 6, t: 10, i: 440, }, D { l: 7, t: 10, i: 599, }, D { l: 7, t: 10, i: 1686, }, D { l: 7, t: 10, i: 1854, }, D { l: 8, t: 10, i: 424, }, D { l: 9, t: 10, i: 43 }, D { l: 9, t: 10, i: 584, }, D { l: 9, t: 10, i: 760, }, D { l: 10, t: 10, i: 328, }, D { l: 11, t: 10, i: 159, }, D { l: 11, t: 10, i: 253, }, D { l: 12, t: 10, i: 487, }, D { l: 140, t: 10, i: 531, }, D { l: 4, t: 11, i: 707, }, D { l: 13, t: 11, i: 106, }, D { l: 18, t: 11, i: 49, }, D { l: 147, t: 11, i: 41, }, D { l: 5, t: 0, i: 221 }, D { l: 5, t: 11, i: 588, }, D { l: 134, t: 11, i: 393, }, D { l: 134, t: 0, i: 1437, }, D { l: 6, t: 11, i: 211, }, D { l: 7, t: 11, i: 1690, }, D { l: 11, t: 11, i: 486, }, D { l: 140, t: 11, i: 369, }, D { l: 5, t: 10, i: 14 }, D { l: 5, t: 10, i: 892, }, D { l: 6, t: 10, i: 283, }, D { l: 7, t: 10, i: 234, }, D { l: 136, t: 10, i: 537, }, D { l: 4, t: 0, i: 988 }, D { l: 136, t: 0, i: 955, }, D { l: 135, t: 0, i: 1251, }, D { l: 4, t: 10, i: 126, }, D { l: 8, t: 10, i: 635, }, D { l: 147, t: 10, i: 34, }, D { l: 4, t: 10, i: 316, }, D { l: 135, t: 10, i: 1561, }, D { l: 137, t: 10, i: 861, }, D { l: 4, t: 10, i: 64 }, D { l: 5, t: 10, i: 352, }, D { l: 5, t: 10, i: 720, }, D { l: 6, t: 10, i: 368, }, D { l: 139, t: 10, i: 359, }, D { l: 134, t: 0, i: 192, }, D { l: 4, t: 0, i: 132 }, D { l: 5, t: 0, i: 69 }, D { l: 135, t: 0, i: 1242, }, D { l: 7, t: 10, i: 1577, }, D { l: 10, t: 10, i: 304, }, D { l: 10, t: 10, i: 549, }, D { l: 12, t: 10, i: 365, }, D { l: 13, t: 10, i: 220, }, D { l: 13, t: 10, i: 240, }, D { l: 142, t: 10, i: 33, }, D { l: 4, t: 0, i: 111 }, D { l: 7, t: 0, i: 865 }, D { l: 134, t: 11, i: 219, }, D { l: 5, t: 11, i: 582, }, D { l: 6, t: 11, i: 1646, }, D { l: 7, t: 11, i: 99 }, D { l: 7, t: 11, i: 1962, }, D { l: 7, t: 11, i: 1986, }, D { l: 8, t: 11, i: 515, }, D { l: 8, t: 11, i: 773, }, D { l: 9, t: 11, i: 23 }, D { l: 9, t: 11, i: 491, }, D { l: 12, t: 11, i: 620, }, D { l: 14, t: 11, i: 52, }, D { l: 145, t: 11, i: 50, }, D { l: 132, t: 0, i: 767, }, D { l: 7, t: 11, i: 568, }, D { l: 148, t: 11, i: 21, }, D { l: 6, t: 0, i: 42 }, D { l: 7, t: 0, i: 1416, }, D { l: 7, t: 0, i: 2005, }, D { l: 8, t: 0, i: 131 }, D { l: 8, t: 0, i: 466 }, D { l: 9, t: 0, i: 672 }, D { l: 13, t: 0, i: 252, }, D { l: 20, t: 0, i: 103, }, D { l: 133, t: 11, i: 851, }, D { l: 135, t: 0, i: 1050, }, D { l: 6, t: 10, i: 175, }, D { l: 137, t: 10, i: 289, }, D { l: 5, t: 10, i: 432, }, D { l: 133, t: 10, i: 913, }, D { l: 6, t: 0, i: 44 }, D { l: 136, t: 0, i: 368, }, D { l: 135, t: 11, i: 784, }, D { l: 132, t: 0, i: 570, }, D { l: 133, t: 0, i: 120, }, D { l: 139, t: 10, i: 595, }, D { l: 140, t: 0, i: 29, }, D { l: 6, t: 0, i: 227 }, D { l: 135, t: 0, i: 1589, }, D { l: 4, t: 11, i: 98 }, D { l: 7, t: 11, i: 1365, }, D { l: 9, t: 11, i: 422, }, D { l: 9, t: 11, i: 670, }, D { l: 10, t: 11, i: 775, }, D { l: 11, t: 11, i: 210, }, D { l: 13, t: 11, i: 26, }, D { l: 13, t: 11, i: 457, }, D { l: 141, t: 11, i: 476, }, D { l: 140, t: 10, i: 80, }, D { l: 5, t: 10, i: 931, }, D { l: 134, t: 10, i: 1698, }, D { l: 133, t: 0, i: 522, }, D { l: 134, t: 0, i: 1120, }, D { l: 135, t: 0, i: 1529, }, D { l: 12, t: 0, i: 739, }, D { l: 14, t: 0, i: 448, }, D { l: 142, t: 0, i: 467, }, D { l: 11, t: 10, i: 526, }, D { l: 11, t: 10, i: 939, }, D { l: 141, t: 10, i: 290, }, D { l: 5, t: 10, i: 774, }, D { l: 6, t: 10, i: 1637, }, D { l: 6, t: 10, i: 1686, }, D { l: 134, t: 10, i: 1751, }, D { l: 6, t: 0, i: 1667, }, D { l: 135, t: 0, i: 2036, }, D { l: 7, t: 10, i: 1167, }, D { l: 11, t: 10, i: 934, }, D { l: 13, t: 10, i: 391, }, D { l: 145, t: 10, i: 76, }, D { l: 137, t: 11, i: 147, }, D { l: 6, t: 10, i: 260, }, D { l: 7, t: 10, i: 1484, }, D { l: 11, t: 11, i: 821, }, D { l: 12, t: 11, i: 110, }, D { l: 12, t: 11, i: 153, }, D { l: 18, t: 11, i: 41, }, D { l: 150, t: 11, i: 19, }, D { l: 6, t: 0, i: 511 }, D { l: 12, t: 0, i: 132, }, D { l: 134, t: 10, i: 573, }, D { l: 5, t: 0, i: 568 }, D { l: 6, t: 0, i: 138 }, D { l: 135, t: 0, i: 1293, }, D { l: 132, t: 0, i: 1020, }, D { l: 8, t: 0, i: 258 }, D { l: 9, t: 0, i: 208 }, D { l: 137, t: 0, i: 359, }, D { l: 4, t: 0, i: 565 }, D { l: 8, t: 0, i: 23 }, D { l: 136, t: 0, i: 827, }, D { l: 134, t: 0, i: 344, }, D { l: 4, t: 0, i: 922 }, D { l: 5, t: 0, i: 1023, }, D { l: 13, t: 11, i: 477, }, D { l: 14, t: 11, i: 120, }, D { l: 148, t: 11, i: 61, }, D { l: 134, t: 0, i: 240, }, D { l: 5, t: 11, i: 209, }, D { l: 6, t: 11, i: 30 }, D { l: 11, t: 11, i: 56, }, D { l: 139, t: 11, i: 305, }, D { l: 6, t: 0, i: 171 }, D { l: 7, t: 0, i: 1002, }, D { l: 7, t: 0, i: 1324, }, D { l: 9, t: 0, i: 415 }, D { l: 14, t: 0, i: 230, }, D { l: 18, t: 0, i: 68 }, D { l: 4, t: 10, i: 292, }, D { l: 4, t: 10, i: 736, }, D { l: 5, t: 10, i: 871, }, D { l: 6, t: 10, i: 1689, }, D { l: 7, t: 10, i: 1944, }, D { l: 137, t: 10, i: 580, }, D { l: 9, t: 11, i: 635, }, D { l: 139, t: 11, i: 559, }, D { l: 4, t: 11, i: 150, }, D { l: 5, t: 11, i: 303, }, D { l: 134, t: 11, i: 327, }, D { l: 6, t: 10, i: 63 }, D { l: 135, t: 10, i: 920, }, D { l: 133, t: 10, i: 793, }, D { l: 8, t: 11, i: 192, }, D { l: 10, t: 11, i: 78, }, D { l: 10, t: 11, i: 555, }, D { l: 11, t: 11, i: 308, }, D { l: 13, t: 11, i: 359, }, D { l: 147, t: 11, i: 95, }, D { l: 135, t: 11, i: 786, }, D { l: 135, t: 11, i: 1712, }, D { l: 136, t: 0, i: 402, }, D { l: 6, t: 0, i: 754 }, D { l: 6, t: 11, i: 1638, }, D { l: 7, t: 11, i: 79 }, D { l: 7, t: 11, i: 496, }, D { l: 9, t: 11, i: 138, }, D { l: 10, t: 11, i: 336, }, D { l: 11, t: 11, i: 12, }, D { l: 12, t: 11, i: 412, }, D { l: 12, t: 11, i: 440, }, D { l: 142, t: 11, i: 305, }, D { l: 4, t: 0, i: 716 }, D { l: 141, t: 0, i: 31, }, D { l: 133, t: 0, i: 982, }, D { l: 8, t: 0, i: 691 }, D { l: 8, t: 0, i: 731 }, D { l: 5, t: 10, i: 67 }, D { l: 6, t: 10, i: 62 }, D { l: 6, t: 10, i: 374, }, D { l: 135, t: 10, i: 1391, }, D { l: 9, t: 10, i: 790, }, D { l: 140, t: 10, i: 47, }, D { l: 139, t: 11, i: 556, }, D { l: 151, t: 11, i: 1, }, D { l: 7, t: 11, i: 204, }, D { l: 7, t: 11, i: 415, }, D { l: 8, t: 11, i: 42 }, D { l: 10, t: 11, i: 85, }, D { l: 11, t: 11, i: 33, }, D { l: 11, t: 11, i: 564, }, D { l: 12, t: 11, i: 571, }, D { l: 149, t: 11, i: 1, }, D { l: 8, t: 0, i: 888 }, D { l: 7, t: 11, i: 610, }, D { l: 135, t: 11, i: 1501, }, D { l: 4, t: 10, i: 391, }, D { l: 135, t: 10, i: 1169, }, D { l: 5, t: 0, i: 847 }, D { l: 9, t: 0, i: 840 }, D { l: 138, t: 0, i: 803, }, D { l: 137, t: 0, i: 823, }, D { l: 134, t: 0, i: 785, }, D { l: 8, t: 0, i: 152 }, D { l: 9, t: 0, i: 53 }, D { l: 9, t: 0, i: 268 }, D { l: 9, t: 0, i: 901 }, D { l: 10, t: 0, i: 518, }, D { l: 10, t: 0, i: 829, }, D { l: 11, t: 0, i: 188, }, D { l: 13, t: 0, i: 74 }, D { l: 14, t: 0, i: 46 }, D { l: 15, t: 0, i: 17 }, D { l: 15, t: 0, i: 33 }, D { l: 17, t: 0, i: 40 }, D { l: 18, t: 0, i: 36 }, D { l: 19, t: 0, i: 20 }, D { l: 22, t: 0, i: 1 }, D { l: 152, t: 0, i: 2 }, D { l: 4, t: 11, i: 3 }, D { l: 5, t: 11, i: 247, }, D { l: 5, t: 11, i: 644, }, D { l: 7, t: 11, i: 744, }, D { l: 7, t: 11, i: 1207, }, D { l: 7, t: 11, i: 1225, }, D { l: 7, t: 11, i: 1909, }, D { l: 146, t: 11, i: 147, }, D { l: 136, t: 0, i: 532, }, D { l: 135, t: 0, i: 681, }, D { l: 132, t: 10, i: 271, }, D { l: 140, t: 0, i: 314, }, D { l: 140, t: 0, i: 677, }, D { l: 4, t: 0, i: 684 }, D { l: 136, t: 0, i: 384, }, D { l: 5, t: 11, i: 285, }, D { l: 9, t: 11, i: 67 }, D { l: 13, t: 11, i: 473, }, D { l: 143, t: 11, i: 82, }, D { l: 4, t: 10, i: 253, }, D { l: 5, t: 10, i: 544, }, D { l: 7, t: 10, i: 300, }, D { l: 137, t: 10, i: 340, }, D { l: 7, t: 0, i: 110 }, D { l: 7, t: 0, i: 447 }, D { l: 8, t: 0, i: 290 }, D { l: 8, t: 0, i: 591 }, D { l: 9, t: 0, i: 382 }, D { l: 9, t: 0, i: 649 }, D { l: 11, t: 0, i: 71 }, D { l: 11, t: 0, i: 155, }, D { l: 11, t: 0, i: 313, }, D { l: 12, t: 0, i: 5 }, D { l: 13, t: 0, i: 325, }, D { l: 142, t: 0, i: 287, }, D { l: 134, t: 0, i: 1818, }, D { l: 136, t: 0, i: 1007, }, D { l: 138, t: 0, i: 321, }, D { l: 7, t: 0, i: 360 }, D { l: 7, t: 0, i: 425 }, D { l: 9, t: 0, i: 66 }, D { l: 9, t: 0, i: 278 }, D { l: 138, t: 0, i: 644, }, D { l: 133, t: 10, i: 818, }, D { l: 5, t: 0, i: 385 }, D { l: 5, t: 10, i: 541, }, D { l: 6, t: 10, i: 94 }, D { l: 6, t: 10, i: 499, }, D { l: 7, t: 10, i: 230, }, D { l: 139, t: 10, i: 321, }, D { l: 4, t: 10, i: 920, }, D { l: 5, t: 10, i: 25 }, D { l: 5, t: 10, i: 790, }, D { l: 6, t: 10, i: 457, }, D { l: 7, t: 10, i: 853, }, D { l: 136, t: 10, i: 788, }, D { l: 4, t: 0, i: 900 }, D { l: 133, t: 0, i: 861, }, D { l: 5, t: 0, i: 254 }, D { l: 7, t: 0, i: 985 }, D { l: 136, t: 0, i: 73, }, D { l: 7, t: 0, i: 1959, }, D { l: 136, t: 0, i: 683, }, D { l: 134, t: 10, i: 1765, }, D { l: 133, t: 10, i: 822, }, D { l: 132, t: 10, i: 634, }, D { l: 4, t: 11, i: 29 }, D { l: 6, t: 11, i: 532, }, D { l: 7, t: 11, i: 1628, }, D { l: 7, t: 11, i: 1648, }, D { l: 9, t: 11, i: 303, }, D { l: 9, t: 11, i: 350, }, D { l: 10, t: 11, i: 433, }, D { l: 11, t: 11, i: 97, }, D { l: 11, t: 11, i: 557, }, D { l: 11, t: 11, i: 745, }, D { l: 12, t: 11, i: 289, }, D { l: 12, t: 11, i: 335, }, D { l: 12, t: 11, i: 348, }, D { l: 12, t: 11, i: 606, }, D { l: 13, t: 11, i: 116, }, D { l: 13, t: 11, i: 233, }, D { l: 13, t: 11, i: 466, }, D { l: 14, t: 11, i: 181, }, D { l: 14, t: 11, i: 209, }, D { l: 14, t: 11, i: 232, }, D { l: 14, t: 11, i: 236, }, D { l: 14, t: 11, i: 300, }, D { l: 16, t: 11, i: 41, }, D { l: 148, t: 11, i: 97, }, D { l: 19, t: 0, i: 86 }, D { l: 6, t: 10, i: 36 }, D { l: 7, t: 10, i: 658, }, D { l: 136, t: 10, i: 454, }, D { l: 135, t: 11, i: 1692, }, D { l: 132, t: 0, i: 725, }, D { l: 5, t: 11, i: 501, }, D { l: 7, t: 11, i: 1704, }, D { l: 9, t: 11, i: 553, }, D { l: 11, t: 11, i: 520, }, D { l: 12, t: 11, i: 557, }, D { l: 141, t: 11, i: 249, }, D { l: 134, t: 0, i: 196, }, D { l: 133, t: 0, i: 831, }, D { l: 136, t: 0, i: 723, }, D { l: 7, t: 0, i: 1897, }, D { l: 13, t: 0, i: 80 }, D { l: 13, t: 0, i: 437, }, D { l: 145, t: 0, i: 74, }, D { l: 4, t: 0, i: 992 }, D { l: 6, t: 0, i: 627 }, D { l: 136, t: 0, i: 994, }, D { l: 135, t: 11, i: 1294, }, D { l: 132, t: 10, i: 104, }, D { l: 5, t: 0, i: 848 }, D { l: 6, t: 0, i: 66 }, D { l: 136, t: 0, i: 764, }, D { l: 4, t: 0, i: 36 }, D { l: 7, t: 0, i: 1387, }, D { l: 10, t: 0, i: 205, }, D { l: 139, t: 0, i: 755, }, D { l: 6, t: 0, i: 1046, }, D { l: 134, t: 0, i: 1485, }, D { l: 134, t: 0, i: 950, }, D { l: 132, t: 0, i: 887, }, D { l: 14, t: 0, i: 450, }, D { l: 148, t: 0, i: 111, }, D { l: 7, t: 0, i: 620 }, D { l: 7, t: 0, i: 831 }, D { l: 9, t: 10, i: 542, }, D { l: 9, t: 10, i: 566, }, D { l: 138, t: 10, i: 728, }, D { l: 6, t: 0, i: 165 }, D { l: 138, t: 0, i: 388, }, D { l: 139, t: 10, i: 263, }, D { l: 4, t: 0, i: 719 }, D { l: 135, t: 0, i: 155, }, D { l: 138, t: 10, i: 468, }, D { l: 6, t: 11, i: 453, }, D { l: 144, t: 11, i: 36, }, D { l: 134, t: 11, i: 129, }, D { l: 5, t: 0, i: 533 }, D { l: 7, t: 0, i: 755 }, D { l: 138, t: 0, i: 780, }, D { l: 134, t: 0, i: 1465, }, D { l: 4, t: 0, i: 353 }, D { l: 6, t: 0, i: 146 }, D { l: 6, t: 0, i: 1789, }, D { l: 7, t: 0, i: 427 }, D { l: 7, t: 0, i: 990 }, D { l: 7, t: 0, i: 1348, }, D { l: 9, t: 0, i: 665 }, D { l: 9, t: 0, i: 898 }, D { l: 11, t: 0, i: 893, }, D { l: 142, t: 0, i: 212, }, D { l: 7, t: 10, i: 87 }, D { l: 142, t: 10, i: 288, }, D { l: 4, t: 0, i: 45 }, D { l: 135, t: 0, i: 1257, }, D { l: 12, t: 0, i: 7 }, D { l: 7, t: 10, i: 988, }, D { l: 7, t: 10, i: 1939, }, D { l: 9, t: 10, i: 64 }, D { l: 9, t: 10, i: 502, }, D { l: 12, t: 10, i: 34, }, D { l: 13, t: 10, i: 12, }, D { l: 13, t: 10, i: 234, }, D { l: 147, t: 10, i: 77, }, D { l: 4, t: 0, i: 607 }, D { l: 5, t: 11, i: 60 }, D { l: 6, t: 11, i: 504, }, D { l: 7, t: 11, i: 614, }, D { l: 7, t: 11, i: 1155, }, D { l: 140, t: 11, i: 0, }, D { l: 135, t: 10, i: 141, }, D { l: 8, t: 11, i: 198, }, D { l: 11, t: 11, i: 29, }, D { l: 140, t: 11, i: 534, }, D { l: 140, t: 0, i: 65, }, D { l: 136, t: 0, i: 816, }, D { l: 132, t: 10, i: 619, }, D { l: 139, t: 0, i: 88, }, D { l: 5, t: 10, i: 246, }, D { l: 8, t: 10, i: 189, }, D { l: 9, t: 10, i: 355, }, D { l: 9, t: 10, i: 512, }, D { l: 10, t: 10, i: 124, }, D { l: 10, t: 10, i: 453, }, D { l: 11, t: 10, i: 143, }, D { l: 11, t: 10, i: 416, }, D { l: 11, t: 10, i: 859, }, D { l: 141, t: 10, i: 341, }, D { l: 4, t: 11, i: 379, }, D { l: 135, t: 11, i: 1397, }, D { l: 4, t: 0, i: 600 }, D { l: 137, t: 0, i: 621, }, D { l: 133, t: 0, i: 367, }, D { l: 134, t: 0, i: 561, }, D { l: 6, t: 0, i: 559 }, D { l: 134, t: 0, i: 1691, }, D { l: 6, t: 0, i: 585 }, D { l: 134, t: 11, i: 585, }, D { l: 135, t: 11, i: 1228, }, D { l: 4, t: 11, i: 118, }, D { l: 5, t: 10, i: 678, }, D { l: 6, t: 11, i: 274, }, D { l: 6, t: 11, i: 361, }, D { l: 7, t: 11, i: 75 }, D { l: 141, t: 11, i: 441, }, D { l: 135, t: 11, i: 1818, }, D { l: 137, t: 11, i: 841, }, D { l: 5, t: 0, i: 573 }, D { l: 6, t: 0, i: 287 }, D { l: 7, t: 10, i: 862, }, D { l: 7, t: 10, i: 1886, }, D { l: 138, t: 10, i: 179, }, D { l: 132, t: 10, i: 517, }, D { l: 140, t: 11, i: 693, }, D { l: 5, t: 11, i: 314, }, D { l: 6, t: 11, i: 221, }, D { l: 7, t: 11, i: 419, }, D { l: 10, t: 11, i: 650, }, D { l: 11, t: 11, i: 396, }, D { l: 12, t: 11, i: 156, }, D { l: 13, t: 11, i: 369, }, D { l: 14, t: 11, i: 333, }, D { l: 145, t: 11, i: 47, }, D { l: 140, t: 10, i: 540, }, D { l: 136, t: 10, i: 667, }, D { l: 11, t: 10, i: 403, }, D { l: 146, t: 10, i: 83, }, D { l: 6, t: 0, i: 672 }, D { l: 133, t: 10, i: 761, }, D { l: 9, t: 0, i: 157 }, D { l: 10, t: 10, i: 131, }, D { l: 140, t: 10, i: 72, }, D { l: 7, t: 0, i: 714 }, D { l: 134, t: 11, i: 460, }, D { l: 134, t: 0, i: 456, }, D { l: 133, t: 0, i: 925, }, D { l: 5, t: 11, i: 682, }, D { l: 135, t: 11, i: 1887, }, D { l: 136, t: 11, i: 510, }, D { l: 136, t: 11, i: 475, }, D { l: 133, t: 11, i: 1016, }, D { l: 9, t: 0, i: 19 }, D { l: 7, t: 11, i: 602, }, D { l: 8, t: 11, i: 179, }, D { l: 10, t: 11, i: 781, }, D { l: 140, t: 11, i: 126, }, D { l: 6, t: 11, i: 329, }, D { l: 138, t: 11, i: 111, }, D { l: 6, t: 0, i: 822 }, D { l: 134, t: 0, i: 1473, }, D { l: 144, t: 11, i: 86, }, D { l: 11, t: 0, i: 113, }, D { l: 139, t: 11, i: 113, }, D { l: 5, t: 11, i: 821, }, D { l: 134, t: 11, i: 1687, }, D { l: 133, t: 10, i: 449, }, D { l: 7, t: 0, i: 463 }, D { l: 17, t: 0, i: 69 }, D { l: 136, t: 10, i: 103, }, D { l: 7, t: 10, i: 2028, }, D { l: 138, t: 10, i: 641, }, D { l: 6, t: 0, i: 193 }, D { l: 7, t: 0, i: 240 }, D { l: 7, t: 0, i: 1682, }, D { l: 10, t: 0, i: 51 }, D { l: 10, t: 0, i: 640, }, D { l: 11, t: 0, i: 410, }, D { l: 13, t: 0, i: 82 }, D { l: 14, t: 0, i: 247, }, D { l: 14, t: 0, i: 331, }, D { l: 142, t: 0, i: 377, }, D { l: 6, t: 0, i: 471 }, D { l: 11, t: 0, i: 411, }, D { l: 142, t: 0, i: 2 }, D { l: 5, t: 11, i: 71 }, D { l: 7, t: 11, i: 1407, }, D { l: 9, t: 11, i: 388, }, D { l: 9, t: 11, i: 704, }, D { l: 10, t: 11, i: 261, }, D { l: 10, t: 11, i: 619, }, D { l: 11, t: 11, i: 547, }, D { l: 11, t: 11, i: 619, }, D { l: 143, t: 11, i: 157, }, D { l: 136, t: 0, i: 633, }, D { l: 135, t: 0, i: 1148, }, D { l: 6, t: 0, i: 554 }, D { l: 7, t: 0, i: 1392, }, D { l: 12, t: 0, i: 129, }, D { l: 7, t: 10, i: 1274, }, D { l: 7, t: 10, i: 1386, }, D { l: 7, t: 11, i: 2008, }, D { l: 9, t: 11, i: 337, }, D { l: 10, t: 11, i: 517, }, D { l: 146, t: 10, i: 87, }, D { l: 7, t: 0, i: 803 }, D { l: 8, t: 0, i: 542 }, D { l: 6, t: 10, i: 187, }, D { l: 7, t: 10, i: 1203, }, D { l: 8, t: 10, i: 380, }, D { l: 14, t: 10, i: 117, }, D { l: 149, t: 10, i: 28, }, D { l: 6, t: 10, i: 297, }, D { l: 7, t: 10, i: 793, }, D { l: 139, t: 10, i: 938, }, D { l: 8, t: 0, i: 438 }, D { l: 11, t: 0, i: 363, }, D { l: 7, t: 10, i: 464, }, D { l: 11, t: 10, i: 105, }, D { l: 12, t: 10, i: 231, }, D { l: 14, t: 10, i: 386, }, D { l: 15, t: 10, i: 102, }, D { l: 148, t: 10, i: 75, }, D { l: 5, t: 11, i: 16 }, D { l: 6, t: 11, i: 86 }, D { l: 6, t: 11, i: 603, }, D { l: 7, t: 11, i: 292, }, D { l: 7, t: 11, i: 561, }, D { l: 8, t: 11, i: 257, }, D { l: 8, t: 11, i: 382, }, D { l: 9, t: 11, i: 721, }, D { l: 9, t: 11, i: 778, }, D { l: 11, t: 11, i: 581, }, D { l: 140, t: 11, i: 466, }, D { l: 6, t: 0, i: 717 }, D { l: 4, t: 11, i: 486, }, D { l: 133, t: 11, i: 491, }, D { l: 132, t: 0, i: 875, }, D { l: 132, t: 11, i: 72, }, D { l: 6, t: 11, i: 265, }, D { l: 135, t: 11, i: 847, }, D { l: 4, t: 0, i: 237 }, D { l: 135, t: 0, i: 514, }, D { l: 6, t: 0, i: 392 }, D { l: 7, t: 0, i: 65 }, D { l: 135, t: 0, i: 2019, }, D { l: 140, t: 11, i: 261, }, D { l: 135, t: 11, i: 922, }, D { l: 137, t: 11, i: 404, }, D { l: 12, t: 0, i: 563, }, D { l: 14, t: 0, i: 101, }, D { l: 18, t: 0, i: 129, }, D { l: 7, t: 10, i: 1010, }, D { l: 11, t: 10, i: 733, }, D { l: 11, t: 10, i: 759, }, D { l: 13, t: 10, i: 34, }, D { l: 146, t: 10, i: 45, }, D { l: 7, t: 10, i: 1656, }, D { l: 9, t: 10, i: 369, }, D { l: 10, t: 10, i: 338, }, D { l: 10, t: 10, i: 490, }, D { l: 11, t: 10, i: 154, }, D { l: 11, t: 10, i: 545, }, D { l: 11, t: 10, i: 775, }, D { l: 13, t: 10, i: 77, }, D { l: 141, t: 10, i: 274, }, D { l: 4, t: 0, i: 444 }, D { l: 10, t: 0, i: 146, }, D { l: 140, t: 0, i: 9 }, D { l: 139, t: 11, i: 163, }, D { l: 7, t: 0, i: 1260, }, D { l: 135, t: 0, i: 1790, }, D { l: 9, t: 0, i: 222 }, D { l: 10, t: 0, i: 43 }, D { l: 139, t: 0, i: 900, }, D { l: 137, t: 11, i: 234, }, D { l: 138, t: 0, i: 971, }, D { l: 137, t: 0, i: 761, }, D { l: 134, t: 0, i: 699, }, D { l: 136, t: 11, i: 434, }, D { l: 6, t: 0, i: 1116, }, D { l: 7, t: 0, i: 1366, }, D { l: 5, t: 10, i: 20 }, D { l: 6, t: 11, i: 197, }, D { l: 6, t: 10, i: 298, }, D { l: 7, t: 10, i: 659, }, D { l: 8, t: 11, i: 205, }, D { l: 137, t: 10, i: 219, }, D { l: 132, t: 11, i: 490, }, D { l: 11, t: 11, i: 820, }, D { l: 150, t: 11, i: 51, }, D { l: 7, t: 10, i: 1440, }, D { l: 11, t: 10, i: 854, }, D { l: 11, t: 10, i: 872, }, D { l: 11, t: 10, i: 921, }, D { l: 12, t: 10, i: 551, }, D { l: 13, t: 10, i: 472, }, D { l: 142, t: 10, i: 367, }, D { l: 140, t: 11, i: 13, }, D { l: 132, t: 0, i: 829, }, D { l: 12, t: 0, i: 242, }, D { l: 132, t: 10, i: 439, }, D { l: 136, t: 10, i: 669, }, D { l: 6, t: 0, i: 593 }, D { l: 6, t: 11, i: 452, }, D { l: 7, t: 11, i: 312, }, D { l: 138, t: 11, i: 219, }, D { l: 4, t: 11, i: 333, }, D { l: 9, t: 11, i: 176, }, D { l: 12, t: 11, i: 353, }, D { l: 141, t: 11, i: 187, }, D { l: 7, t: 0, i: 36 }, D { l: 8, t: 0, i: 201 }, D { l: 136, t: 0, i: 605, }, D { l: 140, t: 0, i: 224, }, D { l: 132, t: 10, i: 233, }, D { l: 134, t: 0, i: 1430, }, D { l: 134, t: 0, i: 1806, }, D { l: 4, t: 0, i: 523 }, D { l: 133, t: 0, i: 638, }, D { l: 6, t: 0, i: 1889, }, D { l: 9, t: 0, i: 958 }, D { l: 9, t: 0, i: 971 }, D { l: 9, t: 0, i: 976 }, D { l: 12, t: 0, i: 796, }, D { l: 12, t: 0, i: 799, }, D { l: 12, t: 0, i: 808, }, D { l: 12, t: 0, i: 835, }, D { l: 12, t: 0, i: 836, }, D { l: 12, t: 0, i: 914, }, D { l: 12, t: 0, i: 946, }, D { l: 15, t: 0, i: 216, }, D { l: 15, t: 0, i: 232, }, D { l: 18, t: 0, i: 183, }, D { l: 18, t: 0, i: 187, }, D { l: 18, t: 0, i: 194, }, D { l: 18, t: 0, i: 212, }, D { l: 18, t: 0, i: 232, }, D { l: 149, t: 0, i: 49, }, D { l: 132, t: 10, i: 482, }, D { l: 6, t: 0, i: 827 }, D { l: 134, t: 0, i: 1434, }, D { l: 135, t: 10, i: 346, }, D { l: 134, t: 0, i: 2043, }, D { l: 6, t: 0, i: 242 }, D { l: 7, t: 0, i: 227 }, D { l: 7, t: 0, i: 1581, }, D { l: 8, t: 0, i: 104 }, D { l: 9, t: 0, i: 113 }, D { l: 9, t: 0, i: 220 }, D { l: 9, t: 0, i: 427 }, D { l: 10, t: 0, i: 136, }, D { l: 10, t: 0, i: 239, }, D { l: 11, t: 0, i: 579, }, D { l: 11, t: 0, i: 1023, }, D { l: 13, t: 0, i: 4 }, D { l: 13, t: 0, i: 204, }, D { l: 13, t: 0, i: 316, }, D { l: 148, t: 0, i: 86, }, D { l: 134, t: 11, i: 1685, }, D { l: 7, t: 0, i: 148 }, D { l: 8, t: 0, i: 284 }, D { l: 141, t: 0, i: 63, }, D { l: 142, t: 0, i: 10, }, D { l: 135, t: 11, i: 584, }, D { l: 134, t: 0, i: 1249, }, D { l: 7, t: 0, i: 861 }, D { l: 135, t: 10, i: 334, }, D { l: 5, t: 10, i: 795, }, D { l: 6, t: 10, i: 1741, }, D { l: 137, t: 11, i: 70, }, D { l: 132, t: 0, i: 807, }, D { l: 7, t: 11, i: 135, }, D { l: 8, t: 11, i: 7 }, D { l: 8, t: 11, i: 62 }, D { l: 9, t: 11, i: 243, }, D { l: 10, t: 11, i: 658, }, D { l: 10, t: 11, i: 697, }, D { l: 11, t: 11, i: 456, }, D { l: 139, t: 11, i: 756, }, D { l: 9, t: 11, i: 395, }, D { l: 138, t: 11, i: 79, }, D { l: 137, t: 11, i: 108, }, D { l: 147, t: 0, i: 94, }, D { l: 136, t: 0, i: 494, }, D { l: 135, t: 11, i: 631, }, D { l: 135, t: 10, i: 622, }, D { l: 7, t: 0, i: 1510, }, D { l: 135, t: 10, i: 1750, }, D { l: 4, t: 10, i: 203, }, D { l: 135, t: 10, i: 1936, }, D { l: 7, t: 11, i: 406, }, D { l: 7, t: 11, i: 459, }, D { l: 8, t: 11, i: 606, }, D { l: 139, t: 11, i: 726, }, D { l: 7, t: 0, i: 1306, }, D { l: 8, t: 0, i: 505 }, D { l: 9, t: 0, i: 482 }, D { l: 10, t: 0, i: 126, }, D { l: 11, t: 0, i: 225, }, D { l: 12, t: 0, i: 347, }, D { l: 12, t: 0, i: 449, }, D { l: 13, t: 0, i: 19 }, D { l: 14, t: 0, i: 218, }, D { l: 142, t: 0, i: 435, }, D { l: 5, t: 0, i: 268 }, D { l: 10, t: 0, i: 764, }, D { l: 12, t: 0, i: 120, }, D { l: 13, t: 0, i: 39 }, D { l: 145, t: 0, i: 127, }, D { l: 142, t: 11, i: 68, }, D { l: 11, t: 10, i: 678, }, D { l: 140, t: 10, i: 307, }, D { l: 12, t: 11, i: 268, }, D { l: 12, t: 11, i: 640, }, D { l: 142, t: 11, i: 119, }, D { l: 135, t: 10, i: 2044, }, D { l: 133, t: 11, i: 612, }, D { l: 4, t: 11, i: 372, }, D { l: 7, t: 11, i: 482, }, D { l: 8, t: 11, i: 158, }, D { l: 9, t: 11, i: 602, }, D { l: 9, t: 11, i: 615, }, D { l: 10, t: 11, i: 245, }, D { l: 10, t: 11, i: 678, }, D { l: 10, t: 11, i: 744, }, D { l: 11, t: 11, i: 248, }, D { l: 139, t: 11, i: 806, }, D { l: 7, t: 10, i: 311, }, D { l: 9, t: 10, i: 308, }, D { l: 140, t: 10, i: 255, }, D { l: 4, t: 0, i: 384 }, D { l: 135, t: 0, i: 1022, }, D { l: 5, t: 11, i: 854, }, D { l: 135, t: 11, i: 1991, }, D { l: 135, t: 10, i: 1266, }, D { l: 4, t: 10, i: 400, }, D { l: 5, t: 10, i: 267, }, D { l: 135, t: 10, i: 232, }, D { l: 135, t: 0, i: 1703, }, D { l: 9, t: 0, i: 159 }, D { l: 11, t: 0, i: 661, }, D { l: 140, t: 0, i: 603, }, D { l: 4, t: 0, i: 964 }, D { l: 14, t: 0, i: 438, }, D { l: 14, t: 0, i: 444, }, D { l: 14, t: 0, i: 456, }, D { l: 22, t: 0, i: 60 }, D { l: 22, t: 0, i: 63 }, D { l: 9, t: 11, i: 106, }, D { l: 9, t: 11, i: 163, }, D { l: 9, t: 11, i: 296, }, D { l: 10, t: 11, i: 167, }, D { l: 10, t: 11, i: 172, }, D { l: 10, t: 11, i: 777, }, D { l: 139, t: 11, i: 16, }, D { l: 136, t: 0, i: 583, }, D { l: 132, t: 0, i: 515, }, D { l: 8, t: 0, i: 632 }, D { l: 8, t: 0, i: 697 }, D { l: 137, t: 0, i: 854, }, D { l: 5, t: 11, i: 195, }, D { l: 135, t: 11, i: 1685, }, D { l: 6, t: 0, i: 1123, }, D { l: 134, t: 0, i: 1365, }, D { l: 134, t: 11, i: 328, }, D { l: 7, t: 11, i: 1997, }, D { l: 8, t: 11, i: 730, }, D { l: 139, t: 11, i: 1006, }, D { l: 4, t: 0, i: 136 }, D { l: 133, t: 0, i: 551, }, D { l: 134, t: 0, i: 1782, }, D { l: 7, t: 0, i: 1287, }, D { l: 9, t: 0, i: 44 }, D { l: 10, t: 0, i: 552, }, D { l: 10, t: 0, i: 642, }, D { l: 11, t: 0, i: 839, }, D { l: 12, t: 0, i: 274, }, D { l: 12, t: 0, i: 275, }, D { l: 12, t: 0, i: 372, }, D { l: 13, t: 0, i: 91 }, D { l: 142, t: 0, i: 125, }, D { l: 5, t: 11, i: 751, }, D { l: 11, t: 11, i: 797, }, D { l: 140, t: 11, i: 203, }, D { l: 133, t: 0, i: 732, }, D { l: 7, t: 0, i: 679 }, D { l: 8, t: 0, i: 313 }, D { l: 4, t: 10, i: 100, }, D { l: 135, t: 11, i: 821, }, D { l: 10, t: 0, i: 361, }, D { l: 142, t: 0, i: 316, }, D { l: 134, t: 0, i: 595, }, D { l: 6, t: 0, i: 147 }, D { l: 7, t: 0, i: 886 }, D { l: 9, t: 0, i: 753 }, D { l: 138, t: 0, i: 268, }, D { l: 5, t: 10, i: 362, }, D { l: 5, t: 10, i: 443, }, D { l: 6, t: 10, i: 318, }, D { l: 7, t: 10, i: 1019, }, D { l: 139, t: 10, i: 623, }, D { l: 5, t: 10, i: 463, }, D { l: 136, t: 10, i: 296, }, D { l: 4, t: 10, i: 454, }, D { l: 5, t: 11, i: 950, }, D { l: 5, t: 11, i: 994, }, D { l: 134, t: 11, i: 351, }, D { l: 138, t: 0, i: 137, }, D { l: 5, t: 10, i: 48 }, D { l: 5, t: 10, i: 404, }, D { l: 6, t: 10, i: 557, }, D { l: 7, t: 10, i: 458, }, D { l: 8, t: 10, i: 597, }, D { l: 10, t: 10, i: 455, }, D { l: 10, t: 10, i: 606, }, D { l: 11, t: 10, i: 49, }, D { l: 11, t: 10, i: 548, }, D { l: 12, t: 10, i: 476, }, D { l: 13, t: 10, i: 18, }, D { l: 141, t: 10, i: 450, }, D { l: 133, t: 0, i: 414, }, D { l: 135, t: 0, i: 1762, }, D { l: 5, t: 11, i: 421, }, D { l: 135, t: 11, i: 47, }, D { l: 5, t: 10, i: 442, }, D { l: 135, t: 10, i: 1984, }, D { l: 134, t: 0, i: 599, }, D { l: 134, t: 0, i: 1749, }, D { l: 134, t: 0, i: 1627, }, D { l: 4, t: 0, i: 488 }, D { l: 132, t: 11, i: 350, }, D { l: 137, t: 11, i: 751, }, D { l: 132, t: 0, i: 83, }, D { l: 140, t: 0, i: 676, }, D { l: 133, t: 11, i: 967, }, D { l: 7, t: 0, i: 1639, }, D { l: 5, t: 10, i: 55 }, D { l: 140, t: 10, i: 161, }, D { l: 4, t: 11, i: 473, }, D { l: 7, t: 11, i: 623, }, D { l: 8, t: 11, i: 808, }, D { l: 9, t: 11, i: 871, }, D { l: 9, t: 11, i: 893, }, D { l: 11, t: 11, i: 38, }, D { l: 11, t: 11, i: 431, }, D { l: 12, t: 11, i: 112, }, D { l: 12, t: 11, i: 217, }, D { l: 12, t: 11, i: 243, }, D { l: 12, t: 11, i: 562, }, D { l: 12, t: 11, i: 683, }, D { l: 13, t: 11, i: 141, }, D { l: 13, t: 11, i: 197, }, D { l: 13, t: 11, i: 227, }, D { l: 13, t: 11, i: 406, }, D { l: 13, t: 11, i: 487, }, D { l: 14, t: 11, i: 156, }, D { l: 14, t: 11, i: 203, }, D { l: 14, t: 11, i: 224, }, D { l: 14, t: 11, i: 256, }, D { l: 18, t: 11, i: 58, }, D { l: 150, t: 11, i: 0, }, D { l: 133, t: 10, i: 450, }, D { l: 7, t: 11, i: 736, }, D { l: 139, t: 11, i: 264, }, D { l: 134, t: 0, i: 278, }, D { l: 4, t: 11, i: 222, }, D { l: 7, t: 11, i: 286, }, D { l: 136, t: 11, i: 629, }, D { l: 135, t: 10, i: 869, }, D { l: 140, t: 0, i: 97, }, D { l: 144, t: 0, i: 14, }, D { l: 134, t: 0, i: 1085, }, D { l: 4, t: 10, i: 213, }, D { l: 7, t: 10, i: 223, }, D { l: 136, t: 10, i: 80, }, D { l: 7, t: 0, i: 388 }, D { l: 7, t: 0, i: 644 }, D { l: 139, t: 0, i: 781, }, D { l: 132, t: 0, i: 849, }, D { l: 7, t: 0, i: 229 }, D { l: 8, t: 0, i: 59 }, D { l: 9, t: 0, i: 190 }, D { l: 10, t: 0, i: 378, }, D { l: 140, t: 0, i: 191, }, D { l: 7, t: 10, i: 381, }, D { l: 7, t: 10, i: 806, }, D { l: 7, t: 10, i: 820, }, D { l: 8, t: 10, i: 354, }, D { l: 8, t: 10, i: 437, }, D { l: 8, t: 10, i: 787, }, D { l: 9, t: 10, i: 657, }, D { l: 10, t: 10, i: 58, }, D { l: 10, t: 10, i: 339, }, D { l: 10, t: 10, i: 749, }, D { l: 11, t: 10, i: 914, }, D { l: 12, t: 10, i: 162, }, D { l: 13, t: 10, i: 75, }, D { l: 14, t: 10, i: 106, }, D { l: 14, t: 10, i: 198, }, D { l: 14, t: 10, i: 320, }, D { l: 14, t: 10, i: 413, }, D { l: 146, t: 10, i: 43, }, D { l: 141, t: 11, i: 306, }, D { l: 136, t: 10, i: 747, }, D { l: 134, t: 0, i: 1115, }, D { l: 16, t: 0, i: 94 }, D { l: 16, t: 0, i: 108, }, D { l: 136, t: 11, i: 146, }, D { l: 6, t: 0, i: 700 }, D { l: 6, t: 0, i: 817 }, D { l: 134, t: 0, i: 1002, }, D { l: 133, t: 10, i: 692, }, D { l: 4, t: 11, i: 465, }, D { l: 135, t: 11, i: 1663, }, D { l: 134, t: 10, i: 191, }, D { l: 6, t: 0, i: 1414, }, D { l: 135, t: 11, i: 913, }, D { l: 132, t: 0, i: 660, }, D { l: 7, t: 0, i: 1035, }, D { l: 138, t: 0, i: 737, }, D { l: 6, t: 10, i: 162, }, D { l: 7, t: 10, i: 1960, }, D { l: 136, t: 10, i: 831, }, D { l: 132, t: 10, i: 706, }, D { l: 7, t: 0, i: 690 }, D { l: 9, t: 0, i: 217 }, D { l: 9, t: 0, i: 587 }, D { l: 140, t: 0, i: 521, }, D { l: 138, t: 10, i: 426, }, D { l: 135, t: 10, i: 1235, }, D { l: 6, t: 11, i: 82 }, D { l: 7, t: 11, i: 138, }, D { l: 7, t: 11, i: 517, }, D { l: 9, t: 11, i: 673, }, D { l: 139, t: 11, i: 238, }, D { l: 138, t: 0, i: 272, }, D { l: 5, t: 11, i: 495, }, D { l: 7, t: 11, i: 834, }, D { l: 9, t: 11, i: 733, }, D { l: 139, t: 11, i: 378, }, D { l: 134, t: 0, i: 1744, }, D { l: 132, t: 0, i: 1011, }, D { l: 7, t: 11, i: 828, }, D { l: 142, t: 11, i: 116, }, D { l: 4, t: 0, i: 733 }, D { l: 9, t: 0, i: 194 }, D { l: 10, t: 0, i: 92 }, D { l: 11, t: 0, i: 198, }, D { l: 12, t: 0, i: 84 }, D { l: 13, t: 0, i: 128, }, D { l: 133, t: 11, i: 559, }, D { l: 10, t: 0, i: 57 }, D { l: 10, t: 0, i: 277, }, D { l: 6, t: 11, i: 21 }, D { l: 6, t: 11, i: 1737, }, D { l: 7, t: 11, i: 1444, }, D { l: 136, t: 11, i: 224, }, D { l: 4, t: 10, i: 204, }, D { l: 137, t: 10, i: 902, }, D { l: 136, t: 10, i: 833, }, D { l: 11, t: 0, i: 348, }, D { l: 12, t: 0, i: 99 }, D { l: 18, t: 0, i: 1 }, D { l: 18, t: 0, i: 11 }, D { l: 19, t: 0, i: 4 }, D { l: 7, t: 10, i: 366, }, D { l: 9, t: 10, i: 287, }, D { l: 12, t: 10, i: 199, }, D { l: 12, t: 10, i: 556, }, D { l: 140, t: 10, i: 577, }, D { l: 6, t: 0, i: 1981, }, D { l: 136, t: 0, i: 936, }, D { l: 21, t: 0, i: 33 }, D { l: 150, t: 0, i: 40, }, D { l: 5, t: 11, i: 519, }, D { l: 138, t: 11, i: 204, }, D { l: 5, t: 10, i: 356, }, D { l: 135, t: 10, i: 224, }, D { l: 134, t: 0, i: 775, }, D { l: 135, t: 0, i: 306, }, D { l: 7, t: 10, i: 630, }, D { l: 9, t: 10, i: 567, }, D { l: 11, t: 10, i: 150, }, D { l: 11, t: 10, i: 444, }, D { l: 141, t: 10, i: 119, }, D { l: 5, t: 0, i: 979 }, D { l: 134, t: 10, i: 539, }, D { l: 133, t: 0, i: 611, }, D { l: 4, t: 11, i: 402, }, D { l: 135, t: 11, i: 1679, }, D { l: 5, t: 0, i: 178 }, D { l: 7, t: 11, i: 2 }, D { l: 8, t: 11, i: 323, }, D { l: 136, t: 11, i: 479, }, D { l: 5, t: 11, i: 59 }, D { l: 135, t: 11, i: 672, }, D { l: 4, t: 0, i: 1010, }, D { l: 6, t: 0, i: 1969, }, D { l: 138, t: 11, i: 237, }, D { l: 133, t: 11, i: 412, }, D { l: 146, t: 11, i: 34, }, D { l: 7, t: 11, i: 1740, }, D { l: 146, t: 11, i: 48, }, D { l: 134, t: 0, i: 664, }, D { l: 139, t: 10, i: 814, }, D { l: 4, t: 11, i: 85 }, D { l: 135, t: 11, i: 549, }, D { l: 133, t: 11, i: 94, }, D { l: 133, t: 11, i: 457, }, D { l: 132, t: 0, i: 390, }, D { l: 134, t: 0, i: 1510, }, D { l: 4, t: 10, i: 235, }, D { l: 135, t: 10, i: 255, }, D { l: 4, t: 10, i: 194, }, D { l: 5, t: 10, i: 584, }, D { l: 6, t: 11, i: 11 }, D { l: 6, t: 10, i: 384, }, D { l: 7, t: 11, i: 187, }, D { l: 7, t: 10, i: 583, }, D { l: 10, t: 10, i: 761, }, D { l: 11, t: 10, i: 760, }, D { l: 139, t: 10, i: 851, }, D { l: 4, t: 11, i: 522, }, D { l: 139, t: 11, i: 802, }, D { l: 135, t: 0, i: 493, }, D { l: 10, t: 11, i: 776, }, D { l: 13, t: 11, i: 345, }, D { l: 142, t: 11, i: 425, }, D { l: 146, t: 0, i: 37, }, D { l: 4, t: 11, i: 52 }, D { l: 135, t: 11, i: 661, }, D { l: 134, t: 0, i: 724, }, D { l: 134, t: 0, i: 829, }, D { l: 133, t: 11, i: 520, }, D { l: 133, t: 10, i: 562, }, D { l: 4, t: 11, i: 281, }, D { l: 5, t: 11, i: 38 }, D { l: 7, t: 11, i: 194, }, D { l: 7, t: 11, i: 668, }, D { l: 7, t: 11, i: 1893, }, D { l: 137, t: 11, i: 397, }, D { l: 5, t: 10, i: 191, }, D { l: 137, t: 10, i: 271, }, D { l: 7, t: 0, i: 1537, }, D { l: 14, t: 0, i: 96 }, D { l: 143, t: 0, i: 73, }, D { l: 5, t: 0, i: 473 }, D { l: 11, t: 0, i: 168, }, D { l: 4, t: 10, i: 470, }, D { l: 6, t: 10, i: 153, }, D { l: 7, t: 10, i: 1503, }, D { l: 7, t: 10, i: 1923, }, D { l: 10, t: 10, i: 701, }, D { l: 11, t: 10, i: 132, }, D { l: 11, t: 10, i: 227, }, D { l: 11, t: 10, i: 320, }, D { l: 11, t: 10, i: 436, }, D { l: 11, t: 10, i: 525, }, D { l: 11, t: 10, i: 855, }, D { l: 12, t: 10, i: 41, }, D { l: 12, t: 10, i: 286, }, D { l: 13, t: 10, i: 103, }, D { l: 13, t: 10, i: 284, }, D { l: 14, t: 10, i: 255, }, D { l: 14, t: 10, i: 262, }, D { l: 15, t: 10, i: 117, }, D { l: 143, t: 10, i: 127, }, D { l: 133, t: 0, i: 105, }, D { l: 5, t: 0, i: 438 }, D { l: 9, t: 0, i: 694 }, D { l: 12, t: 0, i: 627, }, D { l: 141, t: 0, i: 210, }, D { l: 133, t: 10, i: 327, }, D { l: 6, t: 10, i: 552, }, D { l: 7, t: 10, i: 1754, }, D { l: 137, t: 10, i: 604, }, D { l: 134, t: 0, i: 1256, }, D { l: 152, t: 0, i: 11, }, D { l: 5, t: 11, i: 448, }, D { l: 11, t: 11, i: 98, }, D { l: 139, t: 11, i: 524, }, D { l: 7, t: 0, i: 1626, }, D { l: 5, t: 10, i: 80 }, D { l: 6, t: 10, i: 405, }, D { l: 7, t: 10, i: 403, }, D { l: 7, t: 10, i: 1502, }, D { l: 8, t: 10, i: 456, }, D { l: 9, t: 10, i: 487, }, D { l: 9, t: 10, i: 853, }, D { l: 9, t: 10, i: 889, }, D { l: 10, t: 10, i: 309, }, D { l: 11, t: 10, i: 721, }, D { l: 11, t: 10, i: 994, }, D { l: 12, t: 10, i: 430, }, D { l: 13, t: 10, i: 165, }, D { l: 14, t: 11, i: 16, }, D { l: 146, t: 11, i: 44, }, D { l: 132, t: 0, i: 779, }, D { l: 8, t: 0, i: 25 }, D { l: 138, t: 0, i: 826, }, D { l: 4, t: 10, i: 453, }, D { l: 5, t: 10, i: 887, }, D { l: 6, t: 10, i: 535, }, D { l: 8, t: 10, i: 6 }, D { l: 8, t: 10, i: 543, }, D { l: 136, t: 10, i: 826, }, D { l: 137, t: 11, i: 461, }, D { l: 140, t: 11, i: 632, }, D { l: 132, t: 0, i: 308, }, D { l: 135, t: 0, i: 741, }, D { l: 132, t: 0, i: 671, }, D { l: 7, t: 0, i: 150 }, D { l: 8, t: 0, i: 649 }, D { l: 136, t: 0, i: 1020, }, D { l: 9, t: 0, i: 99 }, D { l: 6, t: 11, i: 336, }, D { l: 8, t: 11, i: 552, }, D { l: 9, t: 11, i: 285, }, D { l: 10, t: 11, i: 99, }, D { l: 139, t: 11, i: 568, }, D { l: 134, t: 0, i: 521, }, D { l: 5, t: 0, i: 339 }, D { l: 14, t: 0, i: 3 }, D { l: 15, t: 0, i: 41 }, D { l: 15, t: 0, i: 166, }, D { l: 147, t: 0, i: 66, }, D { l: 6, t: 11, i: 423, }, D { l: 7, t: 11, i: 665, }, D { l: 7, t: 11, i: 1210, }, D { l: 9, t: 11, i: 218, }, D { l: 141, t: 11, i: 222, }, D { l: 6, t: 0, i: 543 }, D { l: 5, t: 10, i: 101, }, D { l: 5, t: 11, i: 256, }, D { l: 6, t: 10, i: 88 }, D { l: 7, t: 10, i: 1677, }, D { l: 9, t: 10, i: 100, }, D { l: 10, t: 10, i: 677, }, D { l: 14, t: 10, i: 169, }, D { l: 14, t: 10, i: 302, }, D { l: 14, t: 10, i: 313, }, D { l: 15, t: 10, i: 48, }, D { l: 143, t: 10, i: 84, }, D { l: 4, t: 10, i: 310, }, D { l: 7, t: 10, i: 708, }, D { l: 7, t: 10, i: 996, }, D { l: 9, t: 10, i: 795, }, D { l: 10, t: 10, i: 390, }, D { l: 10, t: 10, i: 733, }, D { l: 11, t: 10, i: 451, }, D { l: 12, t: 10, i: 249, }, D { l: 14, t: 10, i: 115, }, D { l: 14, t: 10, i: 286, }, D { l: 143, t: 10, i: 100, }, D { l: 133, t: 10, i: 587, }, D { l: 13, t: 11, i: 417, }, D { l: 14, t: 11, i: 129, }, D { l: 143, t: 11, i: 15, }, D { l: 134, t: 0, i: 1358, }, D { l: 136, t: 11, i: 554, }, D { l: 132, t: 10, i: 498, }, D { l: 7, t: 10, i: 217, }, D { l: 8, t: 10, i: 140, }, D { l: 138, t: 10, i: 610, }, D { l: 135, t: 11, i: 989, }, D { l: 135, t: 11, i: 634, }, D { l: 6, t: 0, i: 155 }, D { l: 140, t: 0, i: 234, }, D { l: 135, t: 11, i: 462, }, D { l: 132, t: 11, i: 618, }, D { l: 134, t: 0, i: 1628, }, D { l: 132, t: 0, i: 766, }, D { l: 4, t: 11, i: 339, }, D { l: 5, t: 10, i: 905, }, D { l: 135, t: 11, i: 259, }, D { l: 135, t: 0, i: 829, }, D { l: 4, t: 11, i: 759, }, D { l: 141, t: 11, i: 169, }, D { l: 7, t: 0, i: 1445, }, D { l: 4, t: 10, i: 456, }, D { l: 7, t: 10, i: 358, }, D { l: 7, t: 10, i: 1637, }, D { l: 8, t: 10, i: 643, }, D { l: 139, t: 10, i: 483, }, D { l: 5, t: 0, i: 486 }, D { l: 135, t: 0, i: 1349, }, D { l: 5, t: 11, i: 688, }, D { l: 135, t: 11, i: 712, }, D { l: 7, t: 0, i: 1635, }, D { l: 8, t: 0, i: 17 }, D { l: 10, t: 0, i: 217, }, D { l: 10, t: 0, i: 295, }, D { l: 12, t: 0, i: 2 }, D { l: 140, t: 11, i: 2, }, D { l: 138, t: 0, i: 558, }, D { l: 150, t: 10, i: 56, }, D { l: 4, t: 11, i: 278, }, D { l: 5, t: 11, i: 465, }, D { l: 135, t: 11, i: 1367, }, D { l: 136, t: 11, i: 482, }, D { l: 133, t: 10, i: 535, }, D { l: 6, t: 0, i: 1362, }, D { l: 6, t: 0, i: 1461, }, D { l: 10, t: 11, i: 274, }, D { l: 10, t: 11, i: 625, }, D { l: 139, t: 11, i: 530, }, D { l: 5, t: 0, i: 599 }, D { l: 5, t: 11, i: 336, }, D { l: 6, t: 11, i: 341, }, D { l: 6, t: 11, i: 478, }, D { l: 6, t: 11, i: 1763, }, D { l: 136, t: 11, i: 386, }, D { l: 7, t: 10, i: 1748, }, D { l: 137, t: 11, i: 151, }, D { l: 134, t: 0, i: 1376, }, D { l: 133, t: 10, i: 539, }, D { l: 135, t: 11, i: 73, }, D { l: 135, t: 11, i: 1971, }, D { l: 139, t: 11, i: 283, }, D { l: 9, t: 0, i: 93 }, D { l: 139, t: 0, i: 474, }, D { l: 6, t: 10, i: 91 }, D { l: 135, t: 10, i: 435, }, D { l: 6, t: 0, i: 447 }, D { l: 5, t: 11, i: 396, }, D { l: 134, t: 11, i: 501, }, D { l: 4, t: 10, i: 16 }, D { l: 5, t: 10, i: 316, }, D { l: 5, t: 10, i: 842, }, D { l: 6, t: 10, i: 370, }, D { l: 6, t: 10, i: 1778, }, D { l: 8, t: 10, i: 166, }, D { l: 11, t: 10, i: 812, }, D { l: 12, t: 10, i: 206, }, D { l: 12, t: 10, i: 351, }, D { l: 14, t: 10, i: 418, }, D { l: 16, t: 10, i: 15, }, D { l: 16, t: 10, i: 34, }, D { l: 18, t: 10, i: 3 }, D { l: 19, t: 10, i: 3 }, D { l: 19, t: 10, i: 7 }, D { l: 20, t: 10, i: 4 }, D { l: 149, t: 10, i: 21, }, D { l: 7, t: 0, i: 577 }, D { l: 7, t: 0, i: 1432, }, D { l: 9, t: 0, i: 475 }, D { l: 9, t: 0, i: 505 }, D { l: 9, t: 0, i: 526 }, D { l: 9, t: 0, i: 609 }, D { l: 9, t: 0, i: 689 }, D { l: 9, t: 0, i: 726 }, D { l: 9, t: 0, i: 735 }, D { l: 9, t: 0, i: 738 }, D { l: 10, t: 0, i: 556, }, D { l: 10, t: 0, i: 674, }, D { l: 10, t: 0, i: 684, }, D { l: 11, t: 0, i: 89 }, D { l: 11, t: 0, i: 202, }, D { l: 11, t: 0, i: 272, }, D { l: 11, t: 0, i: 380, }, D { l: 11, t: 0, i: 415, }, D { l: 11, t: 0, i: 505, }, D { l: 11, t: 0, i: 537, }, D { l: 11, t: 0, i: 550, }, D { l: 11, t: 0, i: 562, }, D { l: 11, t: 0, i: 640, }, D { l: 11, t: 0, i: 667, }, D { l: 11, t: 0, i: 688, }, D { l: 11, t: 0, i: 847, }, D { l: 11, t: 0, i: 927, }, D { l: 11, t: 0, i: 930, }, D { l: 11, t: 0, i: 940, }, D { l: 12, t: 0, i: 144, }, D { l: 12, t: 0, i: 325, }, D { l: 12, t: 0, i: 329, }, D { l: 12, t: 0, i: 389, }, D { l: 12, t: 0, i: 403, }, D { l: 12, t: 0, i: 451, }, D { l: 12, t: 0, i: 515, }, D { l: 12, t: 0, i: 604, }, D { l: 12, t: 0, i: 616, }, D { l: 12, t: 0, i: 626, }, D { l: 13, t: 0, i: 66 }, D { l: 13, t: 0, i: 131, }, D { l: 13, t: 0, i: 167, }, D { l: 13, t: 0, i: 236, }, D { l: 13, t: 0, i: 368, }, D { l: 13, t: 0, i: 411, }, D { l: 13, t: 0, i: 434, }, D { l: 13, t: 0, i: 453, }, D { l: 13, t: 0, i: 461, }, D { l: 13, t: 0, i: 474, }, D { l: 14, t: 0, i: 59 }, D { l: 14, t: 0, i: 60 }, D { l: 14, t: 0, i: 139, }, D { l: 14, t: 0, i: 152, }, D { l: 14, t: 0, i: 276, }, D { l: 14, t: 0, i: 353, }, D { l: 14, t: 0, i: 402, }, D { l: 15, t: 0, i: 28 }, D { l: 15, t: 0, i: 81 }, D { l: 15, t: 0, i: 123, }, D { l: 15, t: 0, i: 152, }, D { l: 18, t: 0, i: 136, }, D { l: 148, t: 0, i: 88, }, D { l: 4, t: 11, i: 929, }, D { l: 133, t: 11, i: 799, }, D { l: 136, t: 11, i: 46, }, D { l: 142, t: 0, i: 307, }, D { l: 4, t: 0, i: 609 }, D { l: 7, t: 0, i: 756 }, D { l: 9, t: 0, i: 544 }, D { l: 11, t: 0, i: 413, }, D { l: 144, t: 0, i: 25, }, D { l: 10, t: 0, i: 687, }, D { l: 7, t: 10, i: 619, }, D { l: 10, t: 10, i: 547, }, D { l: 11, t: 10, i: 122, }, D { l: 140, t: 10, i: 601, }, D { l: 4, t: 0, i: 930 }, D { l: 133, t: 0, i: 947, }, D { l: 133, t: 0, i: 939, }, D { l: 142, t: 0, i: 21, }, D { l: 4, t: 11, i: 892, }, D { l: 133, t: 11, i: 770, }, D { l: 133, t: 0, i: 962, }, D { l: 5, t: 0, i: 651 }, D { l: 8, t: 0, i: 170 }, D { l: 9, t: 0, i: 61 }, D { l: 9, t: 0, i: 63 }, D { l: 10, t: 0, i: 23 }, D { l: 10, t: 0, i: 37 }, D { l: 10, t: 0, i: 834, }, D { l: 11, t: 0, i: 4 }, D { l: 11, t: 0, i: 187, }, D { l: 11, t: 0, i: 281, }, D { l: 11, t: 0, i: 503, }, D { l: 11, t: 0, i: 677, }, D { l: 12, t: 0, i: 96 }, D { l: 12, t: 0, i: 130, }, D { l: 12, t: 0, i: 244, }, D { l: 14, t: 0, i: 5 }, D { l: 14, t: 0, i: 40 }, D { l: 14, t: 0, i: 162, }, D { l: 14, t: 0, i: 202, }, D { l: 146, t: 0, i: 133, }, D { l: 4, t: 0, i: 406 }, D { l: 5, t: 0, i: 579 }, D { l: 12, t: 0, i: 492, }, D { l: 150, t: 0, i: 15, }, D { l: 135, t: 11, i: 158, }, D { l: 135, t: 0, i: 597, }, D { l: 132, t: 0, i: 981, }, D { l: 132, t: 10, i: 888, }, D { l: 4, t: 10, i: 149, }, D { l: 138, t: 10, i: 368, }, D { l: 132, t: 0, i: 545, }, D { l: 4, t: 10, i: 154, }, D { l: 7, t: 10, i: 1134, }, D { l: 136, t: 10, i: 105, }, D { l: 135, t: 11, i: 2001, }, D { l: 134, t: 0, i: 1558, }, D { l: 4, t: 10, i: 31 }, D { l: 6, t: 10, i: 429, }, D { l: 7, t: 10, i: 962, }, D { l: 9, t: 10, i: 458, }, D { l: 139, t: 10, i: 691, }, D { l: 132, t: 10, i: 312, }, D { l: 135, t: 10, i: 1642, }, D { l: 6, t: 0, i: 17 }, D { l: 6, t: 0, i: 1304, }, D { l: 7, t: 0, i: 16 }, D { l: 7, t: 0, i: 1001, }, D { l: 9, t: 0, i: 886 }, D { l: 10, t: 0, i: 489, }, D { l: 10, t: 0, i: 800, }, D { l: 11, t: 0, i: 782, }, D { l: 12, t: 0, i: 320, }, D { l: 13, t: 0, i: 467, }, D { l: 14, t: 0, i: 145, }, D { l: 14, t: 0, i: 387, }, D { l: 143, t: 0, i: 119, }, D { l: 135, t: 0, i: 1982, }, D { l: 17, t: 0, i: 17 }, D { l: 7, t: 11, i: 1461, }, D { l: 140, t: 11, i: 91, }, D { l: 4, t: 10, i: 236, }, D { l: 132, t: 11, i: 602, }, D { l: 138, t: 0, i: 907, }, D { l: 136, t: 0, i: 110, }, D { l: 7, t: 0, i: 272 }, D { l: 19, t: 0, i: 53 }, D { l: 5, t: 10, i: 836, }, D { l: 5, t: 10, i: 857, }, D { l: 134, t: 10, i: 1680, }, D { l: 5, t: 0, i: 458 }, D { l: 7, t: 11, i: 1218, }, D { l: 136, t: 11, i: 303, }, D { l: 7, t: 0, i: 1983, }, D { l: 8, t: 0, i: 0 }, D { l: 8, t: 0, i: 171 }, D { l: 9, t: 0, i: 120 }, D { l: 9, t: 0, i: 732 }, D { l: 10, t: 0, i: 473, }, D { l: 11, t: 0, i: 656, }, D { l: 11, t: 0, i: 998, }, D { l: 18, t: 0, i: 0 }, D { l: 18, t: 0, i: 2 }, D { l: 19, t: 0, i: 21 }, D { l: 10, t: 10, i: 68, }, D { l: 139, t: 10, i: 494, }, D { l: 137, t: 11, i: 662, }, D { l: 4, t: 11, i: 13 }, D { l: 5, t: 11, i: 567, }, D { l: 7, t: 11, i: 1498, }, D { l: 9, t: 11, i: 124, }, D { l: 11, t: 11, i: 521, }, D { l: 140, t: 11, i: 405, }, D { l: 4, t: 10, i: 81 }, D { l: 139, t: 10, i: 867, }, D { l: 135, t: 11, i: 1006, }, D { l: 7, t: 11, i: 800, }, D { l: 7, t: 11, i: 1783, }, D { l: 138, t: 11, i: 12, }, D { l: 9, t: 0, i: 295 }, D { l: 10, t: 0, i: 443, }, D { l: 5, t: 10, i: 282, }, D { l: 8, t: 10, i: 650, }, D { l: 137, t: 10, i: 907, }, D { l: 132, t: 11, i: 735, }, D { l: 4, t: 11, i: 170, }, D { l: 4, t: 10, i: 775, }, D { l: 135, t: 11, i: 323, }, D { l: 6, t: 0, i: 1844, }, D { l: 10, t: 0, i: 924, }, D { l: 11, t: 11, i: 844, }, D { l: 12, t: 11, i: 104, }, D { l: 140, t: 11, i: 625, }, D { l: 5, t: 11, i: 304, }, D { l: 7, t: 11, i: 1403, }, D { l: 140, t: 11, i: 498, }, D { l: 134, t: 0, i: 1232, }, D { l: 4, t: 0, i: 519 }, D { l: 10, t: 0, i: 70 }, D { l: 12, t: 0, i: 26 }, D { l: 14, t: 0, i: 17 }, D { l: 14, t: 0, i: 178, }, D { l: 15, t: 0, i: 34 }, D { l: 149, t: 0, i: 12, }, D { l: 132, t: 0, i: 993, }, D { l: 4, t: 11, i: 148, }, D { l: 133, t: 11, i: 742, }, D { l: 6, t: 0, i: 31 }, D { l: 7, t: 0, i: 491 }, D { l: 7, t: 0, i: 530 }, D { l: 8, t: 0, i: 592 }, D { l: 11, t: 0, i: 53 }, D { l: 11, t: 0, i: 779, }, D { l: 12, t: 0, i: 167, }, D { l: 12, t: 0, i: 411, }, D { l: 14, t: 0, i: 14 }, D { l: 14, t: 0, i: 136, }, D { l: 15, t: 0, i: 72 }, D { l: 16, t: 0, i: 17 }, D { l: 144, t: 0, i: 72, }, D { l: 133, t: 0, i: 907, }, D { l: 134, t: 0, i: 733, }, D { l: 133, t: 11, i: 111, }, D { l: 4, t: 10, i: 71 }, D { l: 5, t: 10, i: 376, }, D { l: 7, t: 10, i: 119, }, D { l: 138, t: 10, i: 665, }, D { l: 136, t: 0, i: 55, }, D { l: 8, t: 0, i: 430 }, D { l: 136, t: 11, i: 430, }, D { l: 4, t: 0, i: 208 }, D { l: 5, t: 0, i: 106 }, D { l: 6, t: 0, i: 531 }, D { l: 8, t: 0, i: 408 }, D { l: 9, t: 0, i: 188 }, D { l: 138, t: 0, i: 572, }, D { l: 12, t: 0, i: 56 }, D { l: 11, t: 10, i: 827, }, D { l: 14, t: 10, i: 34, }, D { l: 143, t: 10, i: 148, }, D { l: 134, t: 0, i: 1693, }, D { l: 133, t: 11, i: 444, }, D { l: 132, t: 10, i: 479, }, D { l: 140, t: 0, i: 441, }, D { l: 9, t: 0, i: 449 }, D { l: 10, t: 0, i: 192, }, D { l: 138, t: 0, i: 740, }, D { l: 134, t: 0, i: 928, }, D { l: 4, t: 0, i: 241 }, D { l: 7, t: 10, i: 607, }, D { l: 136, t: 10, i: 99, }, D { l: 8, t: 11, i: 123, }, D { l: 15, t: 11, i: 6 }, D { l: 144, t: 11, i: 7, }, D { l: 6, t: 11, i: 285, }, D { l: 8, t: 11, i: 654, }, D { l: 11, t: 11, i: 749, }, D { l: 12, t: 11, i: 190, }, D { l: 12, t: 11, i: 327, }, D { l: 13, t: 11, i: 120, }, D { l: 13, t: 11, i: 121, }, D { l: 13, t: 11, i: 327, }, D { l: 15, t: 11, i: 47, }, D { l: 146, t: 11, i: 40, }, D { l: 4, t: 10, i: 41 }, D { l: 5, t: 10, i: 74 }, D { l: 7, t: 10, i: 1627, }, D { l: 11, t: 10, i: 871, }, D { l: 140, t: 10, i: 619, }, D { l: 7, t: 0, i: 1525, }, D { l: 11, t: 10, i: 329, }, D { l: 11, t: 10, i: 965, }, D { l: 12, t: 10, i: 241, }, D { l: 14, t: 10, i: 354, }, D { l: 15, t: 10, i: 22, }, D { l: 148, t: 10, i: 63, }, D { l: 132, t: 0, i: 259, }, D { l: 135, t: 11, i: 183, }, D { l: 9, t: 10, i: 209, }, D { l: 137, t: 10, i: 300, }, D { l: 5, t: 11, i: 937, }, D { l: 135, t: 11, i: 100, }, D { l: 133, t: 10, i: 98, }, D { l: 4, t: 0, i: 173 }, D { l: 5, t: 0, i: 312 }, D { l: 5, t: 0, i: 512 }, D { l: 135, t: 0, i: 1285, }, D { l: 141, t: 0, i: 185, }, D { l: 7, t: 0, i: 1603, }, D { l: 7, t: 0, i: 1691, }, D { l: 9, t: 0, i: 464 }, D { l: 11, t: 0, i: 195, }, D { l: 12, t: 0, i: 279, }, D { l: 12, t: 0, i: 448, }, D { l: 14, t: 0, i: 11 }, D { l: 147, t: 0, i: 102, }, D { l: 135, t: 0, i: 1113, }, D { l: 133, t: 10, i: 984, }, D { l: 4, t: 0, i: 452 }, D { l: 5, t: 0, i: 583 }, D { l: 135, t: 0, i: 720, }, D { l: 4, t: 0, i: 547 }, D { l: 5, t: 0, i: 817 }, D { l: 6, t: 0, i: 433 }, D { l: 7, t: 0, i: 593 }, D { l: 7, t: 0, i: 1378, }, D { l: 8, t: 0, i: 161 }, D { l: 9, t: 0, i: 284 }, D { l: 10, t: 0, i: 313, }, D { l: 139, t: 0, i: 886, }, D { l: 8, t: 0, i: 722 }, D { l: 4, t: 10, i: 182, }, D { l: 6, t: 10, i: 205, }, D { l: 135, t: 10, i: 220, }, D { l: 150, t: 0, i: 13, }, D { l: 4, t: 10, i: 42 }, D { l: 9, t: 10, i: 205, }, D { l: 9, t: 10, i: 786, }, D { l: 138, t: 10, i: 659, }, D { l: 6, t: 0, i: 289 }, D { l: 7, t: 0, i: 1670, }, D { l: 12, t: 0, i: 57 }, D { l: 151, t: 0, i: 4 }, D { l: 132, t: 10, i: 635, }, D { l: 14, t: 0, i: 43 }, D { l: 146, t: 0, i: 21, }, D { l: 139, t: 10, i: 533, }, D { l: 135, t: 0, i: 1694, }, D { l: 8, t: 0, i: 420 }, D { l: 139, t: 0, i: 193, }, D { l: 135, t: 0, i: 409, }, D { l: 132, t: 10, i: 371, }, D { l: 4, t: 10, i: 272, }, D { l: 135, t: 10, i: 836, }, D { l: 5, t: 10, i: 825, }, D { l: 134, t: 10, i: 1640, }, D { l: 5, t: 11, i: 251, }, D { l: 5, t: 11, i: 956, }, D { l: 8, t: 11, i: 268, }, D { l: 9, t: 11, i: 214, }, D { l: 146, t: 11, i: 142, }, D { l: 138, t: 0, i: 308, }, D { l: 6, t: 0, i: 1863, }, D { l: 141, t: 11, i: 37, }, D { l: 137, t: 10, i: 879, }, D { l: 7, t: 10, i: 317, }, D { l: 135, t: 10, i: 569, }, D { l: 132, t: 11, i: 294, }, D { l: 134, t: 0, i: 790, }, D { l: 5, t: 0, i: 1002, }, D { l: 136, t: 0, i: 745, }, D { l: 5, t: 11, i: 346, }, D { l: 5, t: 11, i: 711, }, D { l: 136, t: 11, i: 390, }, D { l: 135, t: 0, i: 289, }, D { l: 5, t: 0, i: 504 }, D { l: 11, t: 0, i: 68 }, D { l: 137, t: 10, i: 307, }, D { l: 4, t: 0, i: 239 }, D { l: 6, t: 0, i: 477 }, D { l: 7, t: 0, i: 1607, }, D { l: 139, t: 0, i: 617, }, D { l: 149, t: 0, i: 13, }, D { l: 133, t: 0, i: 609, }, D { l: 133, t: 11, i: 624, }, D { l: 5, t: 11, i: 783, }, D { l: 7, t: 11, i: 1998, }, D { l: 135, t: 11, i: 2047, }, D { l: 133, t: 10, i: 525, }, D { l: 132, t: 0, i: 367, }, D { l: 132, t: 11, i: 594, }, D { l: 6, t: 0, i: 528 }, D { l: 133, t: 10, i: 493, }, D { l: 4, t: 10, i: 174, }, D { l: 135, t: 10, i: 911, }, D { l: 8, t: 10, i: 417, }, D { l: 137, t: 10, i: 782, }, D { l: 132, t: 0, i: 694, }, D { l: 7, t: 0, i: 548 }, D { l: 137, t: 0, i: 58, }, D { l: 4, t: 10, i: 32 }, D { l: 5, t: 10, i: 215, }, D { l: 6, t: 10, i: 269, }, D { l: 7, t: 10, i: 1782, }, D { l: 7, t: 10, i: 1892, }, D { l: 10, t: 10, i: 16, }, D { l: 11, t: 10, i: 822, }, D { l: 11, t: 10, i: 954, }, D { l: 141, t: 10, i: 481, }, D { l: 140, t: 0, i: 687, }, D { l: 7, t: 0, i: 1749, }, D { l: 136, t: 10, i: 477, }, D { l: 132, t: 11, i: 569, }, D { l: 133, t: 10, i: 308, }, D { l: 135, t: 10, i: 1088, }, D { l: 4, t: 0, i: 661 }, D { l: 138, t: 0, i: 1004, }, D { l: 5, t: 11, i: 37 }, D { l: 6, t: 11, i: 39 }, D { l: 6, t: 11, i: 451, }, D { l: 7, t: 11, i: 218, }, D { l: 7, t: 11, i: 667, }, D { l: 7, t: 11, i: 1166, }, D { l: 7, t: 11, i: 1687, }, D { l: 8, t: 11, i: 662, }, D { l: 144, t: 11, i: 2, }, D { l: 9, t: 0, i: 445 }, D { l: 12, t: 0, i: 53 }, D { l: 13, t: 0, i: 492, }, D { l: 5, t: 10, i: 126, }, D { l: 8, t: 10, i: 297, }, D { l: 9, t: 10, i: 366, }, D { l: 140, t: 10, i: 374, }, D { l: 7, t: 10, i: 1551, }, D { l: 139, t: 10, i: 361, }, D { l: 148, t: 0, i: 74, }, D { l: 134, t: 11, i: 508, }, D { l: 135, t: 0, i: 213, }, D { l: 132, t: 10, i: 175, }, D { l: 132, t: 10, i: 685, }, D { l: 6, t: 0, i: 760 }, D { l: 6, t: 0, i: 834 }, D { l: 134, t: 0, i: 1248, }, D { l: 7, t: 11, i: 453, }, D { l: 7, t: 11, i: 635, }, D { l: 7, t: 11, i: 796, }, D { l: 8, t: 11, i: 331, }, D { l: 9, t: 11, i: 328, }, D { l: 9, t: 11, i: 330, }, D { l: 9, t: 11, i: 865, }, D { l: 10, t: 11, i: 119, }, D { l: 10, t: 11, i: 235, }, D { l: 11, t: 11, i: 111, }, D { l: 11, t: 11, i: 129, }, D { l: 11, t: 11, i: 240, }, D { l: 12, t: 11, i: 31, }, D { l: 12, t: 11, i: 66, }, D { l: 12, t: 11, i: 222, }, D { l: 12, t: 11, i: 269, }, D { l: 12, t: 11, i: 599, }, D { l: 12, t: 11, i: 689, }, D { l: 13, t: 11, i: 186, }, D { l: 13, t: 11, i: 364, }, D { l: 142, t: 11, i: 345, }, D { l: 7, t: 0, i: 1672, }, D { l: 139, t: 0, i: 189, }, D { l: 133, t: 10, i: 797, }, D { l: 133, t: 10, i: 565, }, D { l: 6, t: 0, i: 1548, }, D { l: 6, t: 11, i: 98 }, D { l: 7, t: 11, i: 585, }, D { l: 135, t: 11, i: 702, }, D { l: 9, t: 0, i: 968 }, D { l: 15, t: 0, i: 192, }, D { l: 149, t: 0, i: 56, }, D { l: 4, t: 10, i: 252, }, D { l: 6, t: 11, i: 37 }, D { l: 7, t: 11, i: 299, }, D { l: 7, t: 10, i: 1068, }, D { l: 7, t: 11, i: 1666, }, D { l: 8, t: 11, i: 195, }, D { l: 8, t: 11, i: 316, }, D { l: 9, t: 11, i: 178, }, D { l: 9, t: 11, i: 276, }, D { l: 9, t: 11, i: 339, }, D { l: 9, t: 11, i: 536, }, D { l: 10, t: 11, i: 102, }, D { l: 10, t: 11, i: 362, }, D { l: 10, t: 10, i: 434, }, D { l: 10, t: 11, i: 785, }, D { l: 11, t: 11, i: 55, }, D { l: 11, t: 11, i: 149, }, D { l: 11, t: 10, i: 228, }, D { l: 11, t: 10, i: 426, }, D { l: 11, t: 11, i: 773, }, D { l: 13, t: 10, i: 231, }, D { l: 13, t: 11, i: 416, }, D { l: 13, t: 11, i: 419, }, D { l: 14, t: 11, i: 38, }, D { l: 14, t: 11, i: 41, }, D { l: 14, t: 11, i: 210, }, D { l: 18, t: 10, i: 106, }, D { l: 148, t: 10, i: 87, }, D { l: 4, t: 0, i: 751 }, D { l: 11, t: 0, i: 390, }, D { l: 140, t: 0, i: 32, }, D { l: 4, t: 0, i: 409 }, D { l: 133, t: 0, i: 78, }, D { l: 11, t: 11, i: 458, }, D { l: 12, t: 11, i: 15, }, D { l: 140, t: 11, i: 432, }, D { l: 7, t: 0, i: 1602, }, D { l: 10, t: 0, i: 257, }, D { l: 10, t: 0, i: 698, }, D { l: 11, t: 0, i: 544, }, D { l: 11, t: 0, i: 585, }, D { l: 12, t: 0, i: 212, }, D { l: 13, t: 0, i: 307, }, D { l: 5, t: 10, i: 231, }, D { l: 7, t: 10, i: 601, }, D { l: 9, t: 10, i: 277, }, D { l: 9, t: 10, i: 674, }, D { l: 10, t: 10, i: 178, }, D { l: 10, t: 10, i: 418, }, D { l: 10, t: 10, i: 509, }, D { l: 11, t: 10, i: 531, }, D { l: 12, t: 10, i: 113, }, D { l: 12, t: 10, i: 475, }, D { l: 13, t: 10, i: 99, }, D { l: 142, t: 10, i: 428, }, D { l: 6, t: 0, i: 473 }, D { l: 145, t: 0, i: 105, }, D { l: 6, t: 0, i: 1949, }, D { l: 15, t: 0, i: 156, }, D { l: 133, t: 11, i: 645, }, D { l: 7, t: 10, i: 1591, }, D { l: 144, t: 10, i: 43, }, D { l: 135, t: 0, i: 1779, }, D { l: 135, t: 10, i: 1683, }, D { l: 4, t: 11, i: 290, }, D { l: 135, t: 11, i: 1356, }, D { l: 134, t: 0, i: 763, }, D { l: 6, t: 11, i: 70 }, D { l: 7, t: 11, i: 1292, }, D { l: 10, t: 11, i: 762, }, D { l: 139, t: 11, i: 288, }, D { l: 142, t: 0, i: 29, }, D { l: 140, t: 11, i: 428, }, D { l: 7, t: 0, i: 883 }, D { l: 7, t: 11, i: 131, }, D { l: 7, t: 11, i: 422, }, D { l: 8, t: 11, i: 210, }, D { l: 140, t: 11, i: 573, }, D { l: 134, t: 0, i: 488, }, D { l: 4, t: 10, i: 399, }, D { l: 5, t: 10, i: 119, }, D { l: 5, t: 10, i: 494, }, D { l: 7, t: 10, i: 751, }, D { l: 137, t: 10, i: 556, }, D { l: 133, t: 0, i: 617, }, D { l: 132, t: 11, i: 936, }, D { l: 139, t: 0, i: 50, }, D { l: 7, t: 0, i: 1518, }, D { l: 139, t: 0, i: 694, }, D { l: 137, t: 0, i: 785, }, D { l: 4, t: 0, i: 546 }, D { l: 135, t: 0, i: 2042, }, D { l: 7, t: 11, i: 716, }, D { l: 13, t: 11, i: 97, }, D { l: 141, t: 11, i: 251, }, D { l: 132, t: 11, i: 653, }, D { l: 145, t: 0, i: 22, }, D { l: 134, t: 0, i: 1016, }, D { l: 4, t: 0, i: 313 }, D { l: 133, t: 0, i: 577, }, D { l: 136, t: 11, i: 657, }, D { l: 8, t: 0, i: 184 }, D { l: 141, t: 0, i: 433, }, D { l: 135, t: 0, i: 935, }, D { l: 6, t: 0, i: 720 }, D { l: 9, t: 0, i: 114 }, D { l: 146, t: 11, i: 80, }, D { l: 12, t: 0, i: 186, }, D { l: 12, t: 0, i: 292, }, D { l: 14, t: 0, i: 100, }, D { l: 18, t: 0, i: 70 }, D { l: 7, t: 10, i: 594, }, D { l: 7, t: 10, i: 851, }, D { l: 7, t: 10, i: 1858, }, D { l: 9, t: 10, i: 411, }, D { l: 9, t: 10, i: 574, }, D { l: 9, t: 10, i: 666, }, D { l: 9, t: 10, i: 737, }, D { l: 10, t: 10, i: 346, }, D { l: 10, t: 10, i: 712, }, D { l: 11, t: 10, i: 246, }, D { l: 11, t: 10, i: 432, }, D { l: 11, t: 10, i: 517, }, D { l: 11, t: 10, i: 647, }, D { l: 11, t: 10, i: 679, }, D { l: 11, t: 10, i: 727, }, D { l: 12, t: 10, i: 304, }, D { l: 12, t: 10, i: 305, }, D { l: 12, t: 10, i: 323, }, D { l: 12, t: 10, i: 483, }, D { l: 12, t: 10, i: 572, }, D { l: 12, t: 10, i: 593, }, D { l: 12, t: 10, i: 602, }, D { l: 13, t: 10, i: 95, }, D { l: 13, t: 10, i: 101, }, D { l: 13, t: 10, i: 171, }, D { l: 13, t: 10, i: 315, }, D { l: 13, t: 10, i: 378, }, D { l: 13, t: 10, i: 425, }, D { l: 13, t: 10, i: 475, }, D { l: 14, t: 10, i: 63, }, D { l: 14, t: 10, i: 380, }, D { l: 14, t: 10, i: 384, }, D { l: 15, t: 10, i: 133, }, D { l: 18, t: 10, i: 112, }, D { l: 148, t: 10, i: 72, }, D { l: 135, t: 10, i: 1093, }, D { l: 135, t: 11, i: 1836, }, D { l: 132, t: 10, i: 679, }, D { l: 137, t: 10, i: 203, }, D { l: 11, t: 0, i: 402, }, D { l: 12, t: 0, i: 109, }, D { l: 12, t: 0, i: 431, }, D { l: 13, t: 0, i: 179, }, D { l: 13, t: 0, i: 206, }, D { l: 14, t: 0, i: 217, }, D { l: 16, t: 0, i: 3 }, D { l: 148, t: 0, i: 53, }, D { l: 7, t: 11, i: 1368, }, D { l: 8, t: 11, i: 232, }, D { l: 8, t: 11, i: 361, }, D { l: 10, t: 11, i: 682, }, D { l: 138, t: 11, i: 742, }, D { l: 137, t: 10, i: 714, }, D { l: 5, t: 0, i: 886 }, D { l: 6, t: 0, i: 46 }, D { l: 6, t: 0, i: 1790, }, D { l: 7, t: 0, i: 14 }, D { l: 7, t: 0, i: 732 }, D { l: 7, t: 0, i: 1654, }, D { l: 8, t: 0, i: 95 }, D { l: 8, t: 0, i: 327 }, D { l: 8, t: 0, i: 616 }, D { l: 9, t: 0, i: 892 }, D { l: 10, t: 0, i: 598, }, D { l: 10, t: 0, i: 769, }, D { l: 11, t: 0, i: 134, }, D { l: 11, t: 0, i: 747, }, D { l: 12, t: 0, i: 378, }, D { l: 14, t: 0, i: 97 }, D { l: 137, t: 11, i: 534, }, D { l: 4, t: 0, i: 969 }, D { l: 136, t: 10, i: 825, }, D { l: 137, t: 11, i: 27, }, D { l: 6, t: 0, i: 727 }, D { l: 142, t: 11, i: 12, }, D { l: 133, t: 0, i: 1021, }, D { l: 134, t: 0, i: 1190, }, D { l: 134, t: 11, i: 1657, }, D { l: 5, t: 10, i: 143, }, D { l: 5, t: 10, i: 769, }, D { l: 6, t: 10, i: 1760, }, D { l: 7, t: 10, i: 682, }, D { l: 7, t: 10, i: 1992, }, D { l: 136, t: 10, i: 736, }, D { l: 132, t: 0, i: 153, }, D { l: 135, t: 11, i: 127, }, D { l: 133, t: 0, i: 798, }, D { l: 132, t: 0, i: 587, }, D { l: 6, t: 0, i: 598 }, D { l: 7, t: 0, i: 42 }, D { l: 8, t: 0, i: 695 }, D { l: 10, t: 0, i: 212, }, D { l: 11, t: 0, i: 158, }, D { l: 14, t: 0, i: 196, }, D { l: 145, t: 0, i: 85, }, D { l: 133, t: 10, i: 860, }, D { l: 6, t: 0, i: 1929, }, D { l: 134, t: 0, i: 1933, }, D { l: 5, t: 0, i: 957 }, D { l: 5, t: 0, i: 1008, }, D { l: 9, t: 0, i: 577 }, D { l: 12, t: 0, i: 141, }, D { l: 6, t: 10, i: 422, }, D { l: 7, t: 10, i: 0 }, D { l: 7, t: 10, i: 1544, }, D { l: 8, t: 11, i: 364, }, D { l: 11, t: 10, i: 990, }, D { l: 12, t: 10, i: 453, }, D { l: 13, t: 10, i: 47, }, D { l: 141, t: 10, i: 266, }, D { l: 134, t: 0, i: 1319, }, D { l: 4, t: 0, i: 129 }, D { l: 135, t: 0, i: 465, }, D { l: 7, t: 0, i: 470 }, D { l: 7, t: 0, i: 1057, }, D { l: 7, t: 0, i: 1201, }, D { l: 9, t: 0, i: 755 }, D { l: 11, t: 0, i: 906, }, D { l: 140, t: 0, i: 527, }, D { l: 7, t: 0, i: 908 }, D { l: 146, t: 0, i: 7 }, D { l: 5, t: 0, i: 148 }, D { l: 136, t: 0, i: 450, }, D { l: 5, t: 10, i: 515, }, D { l: 137, t: 10, i: 131, }, D { l: 7, t: 10, i: 1605, }, D { l: 11, t: 10, i: 962, }, D { l: 146, t: 10, i: 139, }, D { l: 132, t: 10, i: 646, }, D { l: 134, t: 0, i: 1166, }, D { l: 4, t: 10, i: 396, }, D { l: 7, t: 10, i: 728, }, D { l: 9, t: 10, i: 117, }, D { l: 13, t: 10, i: 202, }, D { l: 148, t: 10, i: 51, }, D { l: 6, t: 10, i: 121, }, D { l: 6, t: 10, i: 124, }, D { l: 6, t: 10, i: 357, }, D { l: 7, t: 10, i: 1138, }, D { l: 7, t: 10, i: 1295, }, D { l: 8, t: 10, i: 162, }, D { l: 139, t: 10, i: 655, }, D { l: 14, t: 0, i: 374, }, D { l: 142, t: 11, i: 374, }, D { l: 138, t: 0, i: 253, }, D { l: 139, t: 0, i: 1003, }, D { l: 5, t: 11, i: 909, }, D { l: 9, t: 11, i: 849, }, D { l: 138, t: 11, i: 805, }, D { l: 133, t: 10, i: 237, }, D { l: 7, t: 11, i: 525, }, D { l: 7, t: 11, i: 1579, }, D { l: 8, t: 11, i: 497, }, D { l: 136, t: 11, i: 573, }, D { l: 137, t: 0, i: 46, }, D { l: 132, t: 0, i: 879, }, D { l: 134, t: 0, i: 806, }, D { l: 135, t: 0, i: 1868, }, D { l: 6, t: 0, i: 1837, }, D { l: 134, t: 0, i: 1846, }, D { l: 6, t: 0, i: 730 }, D { l: 134, t: 0, i: 881, }, D { l: 7, t: 0, i: 965 }, D { l: 7, t: 0, i: 1460, }, D { l: 7, t: 0, i: 1604, }, D { l: 7, t: 11, i: 193, }, D { l: 7, t: 11, i: 397, }, D { l: 7, t: 11, i: 1105, }, D { l: 8, t: 11, i: 124, }, D { l: 8, t: 11, i: 619, }, D { l: 9, t: 11, i: 305, }, D { l: 10, t: 11, i: 264, }, D { l: 11, t: 11, i: 40, }, D { l: 12, t: 11, i: 349, }, D { l: 13, t: 11, i: 134, }, D { l: 13, t: 11, i: 295, }, D { l: 14, t: 11, i: 155, }, D { l: 15, t: 11, i: 120, }, D { l: 146, t: 11, i: 105, }, D { l: 136, t: 0, i: 506, }, D { l: 143, t: 0, i: 10, }, D { l: 4, t: 11, i: 262, }, D { l: 7, t: 11, i: 342, }, D { l: 7, t: 10, i: 571, }, D { l: 7, t: 10, i: 1877, }, D { l: 10, t: 10, i: 366, }, D { l: 141, t: 11, i: 23, }, D { l: 133, t: 11, i: 641, }, D { l: 10, t: 0, i: 22 }, D { l: 9, t: 10, i: 513, }, D { l: 10, t: 10, i: 39, }, D { l: 12, t: 10, i: 122, }, D { l: 140, t: 10, i: 187, }, D { l: 135, t: 11, i: 1431, }, D { l: 150, t: 11, i: 49, }, D { l: 4, t: 11, i: 99 }, D { l: 6, t: 11, i: 250, }, D { l: 6, t: 11, i: 346, }, D { l: 8, t: 11, i: 127, }, D { l: 138, t: 11, i: 81, }, D { l: 6, t: 0, i: 2014, }, D { l: 8, t: 0, i: 928 }, D { l: 10, t: 0, i: 960, }, D { l: 10, t: 0, i: 979, }, D { l: 140, t: 0, i: 996, }, D { l: 134, t: 0, i: 296, }, D { l: 132, t: 11, i: 915, }, D { l: 5, t: 11, i: 75 }, D { l: 9, t: 11, i: 517, }, D { l: 10, t: 11, i: 470, }, D { l: 12, t: 11, i: 155, }, D { l: 141, t: 11, i: 224, }, D { l: 137, t: 10, i: 873, }, D { l: 4, t: 0, i: 854 }, D { l: 140, t: 11, i: 18, }, D { l: 134, t: 0, i: 587, }, D { l: 7, t: 10, i: 107, }, D { l: 7, t: 10, i: 838, }, D { l: 8, t: 10, i: 550, }, D { l: 138, t: 10, i: 401, }, D { l: 11, t: 0, i: 636, }, D { l: 15, t: 0, i: 145, }, D { l: 17, t: 0, i: 34 }, D { l: 19, t: 0, i: 50 }, D { l: 23, t: 0, i: 20 }, D { l: 11, t: 10, i: 588, }, D { l: 11, t: 10, i: 864, }, D { l: 11, t: 10, i: 968, }, D { l: 143, t: 10, i: 160, }, D { l: 135, t: 11, i: 216, }, D { l: 7, t: 0, i: 982 }, D { l: 10, t: 0, i: 32 }, D { l: 143, t: 0, i: 56, }, D { l: 133, t: 10, i: 768, }, D { l: 133, t: 11, i: 954, }, D { l: 6, t: 11, i: 304, }, D { l: 7, t: 11, i: 1114, }, D { l: 8, t: 11, i: 418, }, D { l: 10, t: 11, i: 345, }, D { l: 11, t: 11, i: 341, }, D { l: 11, t: 11, i: 675, }, D { l: 141, t: 11, i: 40, }, D { l: 9, t: 11, i: 410, }, D { l: 139, t: 11, i: 425, }, D { l: 136, t: 0, i: 941, }, D { l: 5, t: 0, i: 435 }, D { l: 132, t: 10, i: 894, }, D { l: 5, t: 0, i: 85 }, D { l: 6, t: 0, i: 419 }, D { l: 7, t: 0, i: 134 }, D { l: 7, t: 0, i: 305 }, D { l: 7, t: 0, i: 361 }, D { l: 7, t: 0, i: 1337, }, D { l: 8, t: 0, i: 71 }, D { l: 140, t: 0, i: 519, }, D { l: 140, t: 0, i: 688, }, D { l: 135, t: 0, i: 740, }, D { l: 5, t: 0, i: 691 }, D { l: 7, t: 0, i: 345 }, D { l: 9, t: 0, i: 94 }, D { l: 140, t: 0, i: 169, }, D { l: 5, t: 0, i: 183 }, D { l: 6, t: 0, i: 582 }, D { l: 10, t: 0, i: 679, }, D { l: 140, t: 0, i: 435, }, D { l: 134, t: 11, i: 14, }, D { l: 6, t: 0, i: 945 }, D { l: 135, t: 0, i: 511, }, D { l: 134, t: 11, i: 1708, }, D { l: 5, t: 11, i: 113, }, D { l: 6, t: 11, i: 243, }, D { l: 7, t: 11, i: 1865, }, D { l: 11, t: 11, i: 161, }, D { l: 16, t: 11, i: 37, }, D { l: 145, t: 11, i: 99, }, D { l: 132, t: 11, i: 274, }, D { l: 137, t: 0, i: 539, }, D { l: 7, t: 0, i: 1993, }, D { l: 8, t: 0, i: 684 }, D { l: 134, t: 10, i: 272, }, D { l: 6, t: 0, i: 659 }, D { l: 134, t: 0, i: 982, }, D { l: 4, t: 10, i: 9 }, D { l: 5, t: 10, i: 128, }, D { l: 7, t: 10, i: 368, }, D { l: 11, t: 10, i: 480, }, D { l: 148, t: 10, i: 3, }, D { l: 134, t: 0, i: 583, }, D { l: 132, t: 0, i: 803, }, D { l: 133, t: 0, i: 704, }, D { l: 4, t: 0, i: 179 }, D { l: 5, t: 0, i: 198 }, D { l: 133, t: 0, i: 697, }, D { l: 7, t: 0, i: 347 }, D { l: 7, t: 0, i: 971 }, D { l: 8, t: 0, i: 181 }, D { l: 10, t: 0, i: 711, }, D { l: 135, t: 11, i: 166, }, D { l: 136, t: 10, i: 682, }, D { l: 4, t: 10, i: 2 }, D { l: 7, t: 10, i: 545, }, D { l: 7, t: 10, i: 894, }, D { l: 136, t: 11, i: 521, }, D { l: 135, t: 0, i: 481, }, D { l: 132, t: 0, i: 243, }, D { l: 5, t: 0, i: 203 }, D { l: 7, t: 0, i: 19 }, D { l: 7, t: 0, i: 71 }, D { l: 7, t: 0, i: 113 }, D { l: 10, t: 0, i: 405, }, D { l: 11, t: 0, i: 357, }, D { l: 142, t: 0, i: 240, }, D { l: 5, t: 11, i: 725, }, D { l: 5, t: 11, i: 727, }, D { l: 135, t: 11, i: 1811, }, D { l: 6, t: 0, i: 826 }, D { l: 137, t: 11, i: 304, }, D { l: 7, t: 0, i: 1450, }, D { l: 139, t: 0, i: 99, }, D { l: 133, t: 11, i: 654, }, D { l: 134, t: 0, i: 492, }, D { l: 5, t: 0, i: 134 }, D { l: 6, t: 0, i: 408 }, D { l: 6, t: 0, i: 495 }, D { l: 7, t: 0, i: 1593, }, D { l: 6, t: 11, i: 273, }, D { l: 10, t: 11, i: 188, }, D { l: 13, t: 11, i: 377, }, D { l: 146, t: 11, i: 77, }, D { l: 9, t: 10, i: 769, }, D { l: 140, t: 10, i: 185, }, D { l: 135, t: 11, i: 410, }, D { l: 142, t: 0, i: 4 }, D { l: 4, t: 0, i: 665 }, D { l: 134, t: 11, i: 1785, }, D { l: 4, t: 0, i: 248 }, D { l: 7, t: 0, i: 137 }, D { l: 137, t: 0, i: 349, }, D { l: 5, t: 10, i: 530, }, D { l: 142, t: 10, i: 113, }, D { l: 7, t: 0, i: 1270, }, D { l: 139, t: 0, i: 612, }, D { l: 132, t: 11, i: 780, }, D { l: 5, t: 0, i: 371 }, D { l: 135, t: 0, i: 563, }, D { l: 135, t: 0, i: 826, }, D { l: 6, t: 0, i: 1535, }, D { l: 23, t: 0, i: 21 }, D { l: 151, t: 0, i: 23, }, D { l: 4, t: 0, i: 374 }, D { l: 7, t: 0, i: 547 }, D { l: 7, t: 0, i: 1700, }, D { l: 7, t: 0, i: 1833, }, D { l: 139, t: 0, i: 858, }, D { l: 133, t: 10, i: 556, }, D { l: 7, t: 11, i: 612, }, D { l: 8, t: 11, i: 545, }, D { l: 8, t: 11, i: 568, }, D { l: 8, t: 11, i: 642, }, D { l: 9, t: 11, i: 717, }, D { l: 10, t: 11, i: 541, }, D { l: 10, t: 11, i: 763, }, D { l: 11, t: 11, i: 449, }, D { l: 12, t: 11, i: 489, }, D { l: 13, t: 11, i: 153, }, D { l: 13, t: 11, i: 296, }, D { l: 14, t: 11, i: 138, }, D { l: 14, t: 11, i: 392, }, D { l: 15, t: 11, i: 50, }, D { l: 16, t: 11, i: 6 }, D { l: 16, t: 11, i: 12, }, D { l: 148, t: 11, i: 9, }, D { l: 9, t: 0, i: 311 }, D { l: 141, t: 0, i: 42, }, D { l: 8, t: 10, i: 16 }, D { l: 140, t: 10, i: 568, }, D { l: 6, t: 0, i: 1968, }, D { l: 6, t: 0, i: 2027, }, D { l: 138, t: 0, i: 991, }, D { l: 6, t: 0, i: 1647, }, D { l: 7, t: 0, i: 1552, }, D { l: 7, t: 0, i: 2010, }, D { l: 9, t: 0, i: 494 }, D { l: 137, t: 0, i: 509, }, D { l: 133, t: 11, i: 948, }, D { l: 6, t: 10, i: 186, }, D { l: 137, t: 10, i: 426, }, D { l: 134, t: 0, i: 769, }, D { l: 134, t: 0, i: 642, }, D { l: 132, t: 10, i: 585, }, D { l: 6, t: 0, i: 123 }, D { l: 7, t: 0, i: 214 }, D { l: 9, t: 0, i: 728 }, D { l: 10, t: 0, i: 157, }, D { l: 11, t: 0, i: 346, }, D { l: 11, t: 0, i: 662, }, D { l: 143, t: 0, i: 106, }, D { l: 142, t: 11, i: 381, }, D { l: 135, t: 0, i: 1435, }, D { l: 4, t: 11, i: 532, }, D { l: 5, t: 11, i: 706, }, D { l: 135, t: 11, i: 662, }, D { l: 5, t: 11, i: 837, }, D { l: 134, t: 11, i: 1651, }, D { l: 4, t: 10, i: 93 }, D { l: 5, t: 10, i: 252, }, D { l: 6, t: 10, i: 229, }, D { l: 7, t: 10, i: 291, }, D { l: 9, t: 10, i: 550, }, D { l: 139, t: 10, i: 644, }, D { l: 148, t: 0, i: 79, }, D { l: 137, t: 10, i: 749, }, D { l: 134, t: 0, i: 1425, }, D { l: 137, t: 10, i: 162, }, D { l: 4, t: 11, i: 362, }, D { l: 7, t: 11, i: 52 }, D { l: 7, t: 11, i: 303, }, D { l: 140, t: 11, i: 166, }, D { l: 132, t: 10, i: 381, }, D { l: 4, t: 11, i: 330, }, D { l: 7, t: 11, i: 933, }, D { l: 7, t: 11, i: 2012, }, D { l: 136, t: 11, i: 292, }, D { l: 135, t: 11, i: 767, }, D { l: 4, t: 0, i: 707 }, D { l: 5, t: 0, i: 588 }, D { l: 6, t: 0, i: 393 }, D { l: 13, t: 0, i: 106, }, D { l: 18, t: 0, i: 49 }, D { l: 147, t: 0, i: 41, }, D { l: 6, t: 0, i: 211 }, D { l: 7, t: 0, i: 1690, }, D { l: 11, t: 0, i: 486, }, D { l: 140, t: 0, i: 369, }, D { l: 137, t: 11, i: 883, }, D { l: 4, t: 11, i: 703, }, D { l: 135, t: 11, i: 207, }, D { l: 4, t: 0, i: 187 }, D { l: 5, t: 0, i: 184 }, D { l: 5, t: 0, i: 690 }, D { l: 7, t: 0, i: 1869, }, D { l: 10, t: 0, i: 756, }, D { l: 139, t: 0, i: 783, }, D { l: 132, t: 11, i: 571, }, D { l: 134, t: 0, i: 1382, }, D { l: 5, t: 0, i: 175 }, D { l: 6, t: 10, i: 77 }, D { l: 6, t: 10, i: 157, }, D { l: 7, t: 10, i: 974, }, D { l: 7, t: 10, i: 1301, }, D { l: 7, t: 10, i: 1339, }, D { l: 7, t: 10, i: 1490, }, D { l: 7, t: 10, i: 1873, }, D { l: 137, t: 10, i: 628, }, D { l: 134, t: 0, i: 1493, }, D { l: 5, t: 11, i: 873, }, D { l: 133, t: 11, i: 960, }, D { l: 134, t: 0, i: 1007, }, D { l: 12, t: 11, i: 93, }, D { l: 12, t: 11, i: 501, }, D { l: 13, t: 11, i: 362, }, D { l: 14, t: 11, i: 151, }, D { l: 15, t: 11, i: 40, }, D { l: 15, t: 11, i: 59, }, D { l: 16, t: 11, i: 46, }, D { l: 17, t: 11, i: 25, }, D { l: 18, t: 11, i: 14, }, D { l: 18, t: 11, i: 134, }, D { l: 19, t: 11, i: 25, }, D { l: 19, t: 11, i: 69, }, D { l: 20, t: 11, i: 16, }, D { l: 20, t: 11, i: 19, }, D { l: 20, t: 11, i: 66, }, D { l: 21, t: 11, i: 23, }, D { l: 21, t: 11, i: 25, }, D { l: 150, t: 11, i: 42, }, D { l: 11, t: 10, i: 919, }, D { l: 141, t: 10, i: 409, }, D { l: 134, t: 0, i: 219, }, D { l: 5, t: 0, i: 582 }, D { l: 6, t: 0, i: 1646, }, D { l: 7, t: 0, i: 99 }, D { l: 7, t: 0, i: 1962, }, D { l: 7, t: 0, i: 1986, }, D { l: 8, t: 0, i: 515 }, D { l: 8, t: 0, i: 773 }, D { l: 9, t: 0, i: 23 }, D { l: 9, t: 0, i: 491 }, D { l: 12, t: 0, i: 620, }, D { l: 142, t: 0, i: 93, }, D { l: 133, t: 0, i: 851, }, D { l: 5, t: 11, i: 33 }, D { l: 134, t: 11, i: 470, }, D { l: 135, t: 11, i: 1291, }, D { l: 134, t: 0, i: 1278, }, D { l: 135, t: 11, i: 1882, }, D { l: 135, t: 10, i: 1489, }, D { l: 132, t: 0, i: 1000, }, D { l: 138, t: 0, i: 982, }, D { l: 8, t: 0, i: 762 }, D { l: 8, t: 0, i: 812 }, D { l: 137, t: 0, i: 910, }, D { l: 6, t: 11, i: 47 }, D { l: 7, t: 11, i: 90 }, D { l: 7, t: 11, i: 664, }, D { l: 7, t: 11, i: 830, }, D { l: 7, t: 11, i: 1380, }, D { l: 7, t: 11, i: 2025, }, D { l: 8, t: 11, i: 448, }, D { l: 136, t: 11, i: 828, }, D { l: 4, t: 0, i: 98 }, D { l: 4, t: 0, i: 940 }, D { l: 6, t: 0, i: 1819, }, D { l: 6, t: 0, i: 1834, }, D { l: 6, t: 0, i: 1841, }, D { l: 7, t: 0, i: 1365, }, D { l: 8, t: 0, i: 859 }, D { l: 8, t: 0, i: 897 }, D { l: 8, t: 0, i: 918 }, D { l: 9, t: 0, i: 422 }, D { l: 9, t: 0, i: 670 }, D { l: 10, t: 0, i: 775, }, D { l: 10, t: 0, i: 894, }, D { l: 10, t: 0, i: 909, }, D { l: 10, t: 0, i: 910, }, D { l: 10, t: 0, i: 935, }, D { l: 11, t: 0, i: 210, }, D { l: 12, t: 0, i: 750, }, D { l: 12, t: 0, i: 755, }, D { l: 13, t: 0, i: 26 }, D { l: 13, t: 0, i: 457, }, D { l: 13, t: 0, i: 476, }, D { l: 16, t: 0, i: 100, }, D { l: 16, t: 0, i: 109, }, D { l: 18, t: 0, i: 173, }, D { l: 18, t: 0, i: 175, }, D { l: 8, t: 10, i: 398, }, D { l: 9, t: 10, i: 681, }, D { l: 139, t: 10, i: 632, }, D { l: 9, t: 11, i: 417, }, D { l: 137, t: 11, i: 493, }, D { l: 136, t: 10, i: 645, }, D { l: 138, t: 0, i: 906, }, D { l: 134, t: 0, i: 1730, }, D { l: 134, t: 10, i: 20, }, D { l: 133, t: 11, i: 1019, }, D { l: 134, t: 0, i: 1185, }, D { l: 10, t: 0, i: 40 }, D { l: 136, t: 10, i: 769, }, D { l: 9, t: 0, i: 147 }, D { l: 134, t: 11, i: 208, }, D { l: 140, t: 0, i: 650, }, D { l: 5, t: 0, i: 209 }, D { l: 6, t: 0, i: 30 }, D { l: 11, t: 0, i: 56 }, D { l: 139, t: 0, i: 305, }, D { l: 132, t: 0, i: 553, }, D { l: 138, t: 11, i: 344, }, D { l: 6, t: 11, i: 68 }, D { l: 7, t: 11, i: 398, }, D { l: 7, t: 11, i: 448, }, D { l: 7, t: 11, i: 1629, }, D { l: 7, t: 11, i: 1813, }, D { l: 8, t: 11, i: 387, }, D { l: 8, t: 11, i: 442, }, D { l: 9, t: 11, i: 710, }, D { l: 10, t: 11, i: 282, }, D { l: 138, t: 11, i: 722, }, D { l: 5, t: 0, i: 597 }, D { l: 14, t: 0, i: 20 }, D { l: 142, t: 11, i: 20, }, D { l: 135, t: 0, i: 1614, }, D { l: 135, t: 10, i: 1757, }, D { l: 4, t: 0, i: 150 }, D { l: 5, t: 0, i: 303 }, D { l: 6, t: 0, i: 327 }, D { l: 135, t: 10, i: 937, }, D { l: 16, t: 0, i: 49 }, D { l: 7, t: 10, i: 1652, }, D { l: 144, t: 11, i: 49, }, D { l: 8, t: 0, i: 192 }, D { l: 10, t: 0, i: 78 }, D { l: 141, t: 0, i: 359, }, D { l: 135, t: 0, i: 786, }, D { l: 143, t: 0, i: 134, }, D { l: 6, t: 0, i: 1638, }, D { l: 7, t: 0, i: 79 }, D { l: 7, t: 0, i: 496 }, D { l: 9, t: 0, i: 138 }, D { l: 10, t: 0, i: 336, }, D { l: 11, t: 0, i: 12 }, D { l: 12, t: 0, i: 412, }, D { l: 12, t: 0, i: 440, }, D { l: 142, t: 0, i: 305, }, D { l: 136, t: 11, i: 491, }, D { l: 4, t: 10, i: 579, }, D { l: 5, t: 10, i: 226, }, D { l: 5, t: 10, i: 323, }, D { l: 135, t: 10, i: 960, }, D { l: 7, t: 0, i: 204 }, D { l: 7, t: 0, i: 415 }, D { l: 8, t: 0, i: 42 }, D { l: 10, t: 0, i: 85 }, D { l: 139, t: 0, i: 564, }, D { l: 132, t: 0, i: 614, }, D { l: 4, t: 11, i: 403, }, D { l: 5, t: 11, i: 441, }, D { l: 7, t: 11, i: 450, }, D { l: 11, t: 11, i: 101, }, D { l: 12, t: 11, i: 193, }, D { l: 141, t: 11, i: 430, }, D { l: 135, t: 11, i: 1927, }, D { l: 135, t: 11, i: 1330, }, D { l: 4, t: 0, i: 3 }, D { l: 5, t: 0, i: 247 }, D { l: 5, t: 0, i: 644 }, D { l: 7, t: 0, i: 744 }, D { l: 7, t: 0, i: 1207, }, D { l: 7, t: 0, i: 1225, }, D { l: 7, t: 0, i: 1909, }, D { l: 146, t: 0, i: 147, }, D { l: 136, t: 0, i: 942, }, D { l: 4, t: 0, i: 1019, }, D { l: 134, t: 0, i: 2023, }, D { l: 5, t: 11, i: 679, }, D { l: 133, t: 10, i: 973, }, D { l: 5, t: 0, i: 285 }, D { l: 9, t: 0, i: 67 }, D { l: 13, t: 0, i: 473, }, D { l: 143, t: 0, i: 82, }, D { l: 7, t: 11, i: 328, }, D { l: 137, t: 11, i: 326, }, D { l: 151, t: 0, i: 8 }, D { l: 6, t: 10, i: 135, }, D { l: 135, t: 10, i: 1176, }, D { l: 135, t: 11, i: 1128, }, D { l: 134, t: 0, i: 1309, }, D { l: 135, t: 11, i: 1796, }, D { l: 135, t: 10, i: 314, }, D { l: 4, t: 11, i: 574, }, D { l: 7, t: 11, i: 350, }, D { l: 7, t: 11, i: 1024, }, D { l: 8, t: 11, i: 338, }, D { l: 9, t: 11, i: 677, }, D { l: 10, t: 11, i: 808, }, D { l: 139, t: 11, i: 508, }, D { l: 7, t: 11, i: 818, }, D { l: 17, t: 11, i: 14, }, D { l: 17, t: 11, i: 45, }, D { l: 18, t: 11, i: 75, }, D { l: 148, t: 11, i: 18, }, D { l: 146, t: 10, i: 4, }, D { l: 135, t: 11, i: 1081, }, D { l: 4, t: 0, i: 29 }, D { l: 6, t: 0, i: 532 }, D { l: 7, t: 0, i: 1628, }, D { l: 7, t: 0, i: 1648, }, D { l: 9, t: 0, i: 350 }, D { l: 10, t: 0, i: 433, }, D { l: 11, t: 0, i: 97 }, D { l: 11, t: 0, i: 557, }, D { l: 11, t: 0, i: 745, }, D { l: 12, t: 0, i: 289, }, D { l: 12, t: 0, i: 335, }, D { l: 12, t: 0, i: 348, }, D { l: 12, t: 0, i: 606, }, D { l: 13, t: 0, i: 116, }, D { l: 13, t: 0, i: 233, }, D { l: 13, t: 0, i: 466, }, D { l: 14, t: 0, i: 181, }, D { l: 14, t: 0, i: 209, }, D { l: 14, t: 0, i: 232, }, D { l: 14, t: 0, i: 236, }, D { l: 14, t: 0, i: 300, }, D { l: 16, t: 0, i: 41 }, D { l: 148, t: 0, i: 97, }, D { l: 7, t: 0, i: 318 }, D { l: 6, t: 10, i: 281, }, D { l: 8, t: 10, i: 282, }, D { l: 8, t: 10, i: 480, }, D { l: 8, t: 10, i: 499, }, D { l: 9, t: 10, i: 198, }, D { l: 10, t: 10, i: 143, }, D { l: 10, t: 10, i: 169, }, D { l: 10, t: 10, i: 211, }, D { l: 10, t: 10, i: 417, }, D { l: 10, t: 10, i: 574, }, D { l: 11, t: 10, i: 147, }, D { l: 11, t: 10, i: 395, }, D { l: 12, t: 10, i: 75, }, D { l: 12, t: 10, i: 407, }, D { l: 12, t: 10, i: 608, }, D { l: 13, t: 10, i: 500, }, D { l: 142, t: 10, i: 251, }, D { l: 135, t: 11, i: 1676, }, D { l: 135, t: 11, i: 2037, }, D { l: 135, t: 0, i: 1692, }, D { l: 5, t: 0, i: 501 }, D { l: 7, t: 0, i: 1704, }, D { l: 9, t: 0, i: 553 }, D { l: 11, t: 0, i: 520, }, D { l: 12, t: 0, i: 557, }, D { l: 141, t: 0, i: 249, }, D { l: 6, t: 0, i: 1527, }, D { l: 14, t: 0, i: 324, }, D { l: 15, t: 0, i: 55 }, D { l: 15, t: 0, i: 80 }, D { l: 14, t: 11, i: 324, }, D { l: 15, t: 11, i: 55, }, D { l: 143, t: 11, i: 80, }, D { l: 135, t: 10, i: 1776, }, D { l: 8, t: 0, i: 988 }, D { l: 137, t: 11, i: 297, }, D { l: 132, t: 10, i: 419, }, D { l: 142, t: 0, i: 223, }, D { l: 139, t: 11, i: 234, }, D { l: 7, t: 0, i: 1123, }, D { l: 12, t: 0, i: 508, }, D { l: 14, t: 0, i: 102, }, D { l: 14, t: 0, i: 226, }, D { l: 144, t: 0, i: 57, }, D { l: 4, t: 10, i: 138, }, D { l: 7, t: 10, i: 1012, }, D { l: 7, t: 10, i: 1280, }, D { l: 137, t: 10, i: 76, }, D { l: 7, t: 0, i: 1764, }, D { l: 5, t: 10, i: 29 }, D { l: 140, t: 10, i: 638, }, D { l: 134, t: 0, i: 2015, }, D { l: 134, t: 0, i: 1599, }, D { l: 138, t: 11, i: 56, }, D { l: 6, t: 11, i: 306, }, D { l: 7, t: 11, i: 1140, }, D { l: 7, t: 11, i: 1340, }, D { l: 8, t: 11, i: 133, }, D { l: 138, t: 11, i: 449, }, D { l: 139, t: 11, i: 1011, }, D { l: 6, t: 10, i: 1710, }, D { l: 135, t: 10, i: 2038, }, D { l: 7, t: 11, i: 1763, }, D { l: 140, t: 11, i: 310, }, D { l: 6, t: 0, i: 129 }, D { l: 4, t: 10, i: 17 }, D { l: 5, t: 10, i: 23 }, D { l: 7, t: 10, i: 995, }, D { l: 11, t: 10, i: 383, }, D { l: 11, t: 10, i: 437, }, D { l: 12, t: 10, i: 460, }, D { l: 140, t: 10, i: 532, }, D { l: 5, t: 11, i: 329, }, D { l: 136, t: 11, i: 260, }, D { l: 133, t: 10, i: 862, }, D { l: 132, t: 0, i: 534, }, D { l: 6, t: 0, i: 811 }, D { l: 135, t: 0, i: 626, }, D { l: 132, t: 11, i: 657, }, D { l: 4, t: 0, i: 25 }, D { l: 5, t: 0, i: 60 }, D { l: 6, t: 0, i: 504 }, D { l: 7, t: 0, i: 614 }, D { l: 7, t: 0, i: 1155, }, D { l: 12, t: 0, i: 0 }, D { l: 152, t: 11, i: 7, }, D { l: 7, t: 0, i: 1248, }, D { l: 11, t: 0, i: 621, }, D { l: 139, t: 0, i: 702, }, D { l: 137, t: 0, i: 321, }, D { l: 8, t: 10, i: 70 }, D { l: 12, t: 10, i: 171, }, D { l: 141, t: 10, i: 272, }, D { l: 10, t: 10, i: 233, }, D { l: 139, t: 10, i: 76, }, D { l: 4, t: 0, i: 379 }, D { l: 7, t: 0, i: 1397, }, D { l: 134, t: 10, i: 442, }, D { l: 5, t: 11, i: 66 }, D { l: 7, t: 11, i: 1896, }, D { l: 136, t: 11, i: 288, }, D { l: 134, t: 11, i: 1643, }, D { l: 134, t: 10, i: 1709, }, D { l: 4, t: 11, i: 21 }, D { l: 5, t: 11, i: 91 }, D { l: 5, t: 11, i: 570, }, D { l: 5, t: 11, i: 648, }, D { l: 5, t: 11, i: 750, }, D { l: 5, t: 11, i: 781, }, D { l: 6, t: 11, i: 54 }, D { l: 6, t: 11, i: 112, }, D { l: 6, t: 11, i: 402, }, D { l: 6, t: 11, i: 1732, }, D { l: 7, t: 11, i: 315, }, D { l: 7, t: 11, i: 749, }, D { l: 7, t: 11, i: 1347, }, D { l: 7, t: 11, i: 1900, }, D { l: 9, t: 11, i: 78 }, D { l: 9, t: 11, i: 508, }, D { l: 10, t: 11, i: 611, }, D { l: 11, t: 11, i: 510, }, D { l: 11, t: 11, i: 728, }, D { l: 13, t: 11, i: 36, }, D { l: 14, t: 11, i: 39, }, D { l: 16, t: 11, i: 83, }, D { l: 17, t: 11, i: 124, }, D { l: 148, t: 11, i: 30, }, D { l: 4, t: 0, i: 118 }, D { l: 6, t: 0, i: 274 }, D { l: 6, t: 0, i: 361 }, D { l: 7, t: 0, i: 75 }, D { l: 141, t: 0, i: 441, }, D { l: 10, t: 11, i: 322, }, D { l: 10, t: 11, i: 719, }, D { l: 139, t: 11, i: 407, }, D { l: 147, t: 10, i: 119, }, D { l: 12, t: 11, i: 549, }, D { l: 14, t: 11, i: 67, }, D { l: 147, t: 11, i: 60, }, D { l: 11, t: 10, i: 69, }, D { l: 12, t: 10, i: 105, }, D { l: 12, t: 10, i: 117, }, D { l: 13, t: 10, i: 213, }, D { l: 14, t: 10, i: 13, }, D { l: 14, t: 10, i: 62, }, D { l: 14, t: 10, i: 177, }, D { l: 14, t: 10, i: 421, }, D { l: 15, t: 10, i: 19, }, D { l: 146, t: 10, i: 141, }, D { l: 9, t: 0, i: 841 }, D { l: 137, t: 10, i: 309, }, D { l: 7, t: 10, i: 608, }, D { l: 7, t: 10, i: 976, }, D { l: 8, t: 11, i: 125, }, D { l: 8, t: 11, i: 369, }, D { l: 8, t: 11, i: 524, }, D { l: 9, t: 10, i: 146, }, D { l: 10, t: 10, i: 206, }, D { l: 10, t: 11, i: 486, }, D { l: 10, t: 10, i: 596, }, D { l: 11, t: 11, i: 13, }, D { l: 11, t: 11, i: 381, }, D { l: 11, t: 11, i: 736, }, D { l: 11, t: 11, i: 766, }, D { l: 11, t: 11, i: 845, }, D { l: 13, t: 11, i: 114, }, D { l: 13, t: 10, i: 218, }, D { l: 13, t: 11, i: 292, }, D { l: 14, t: 11, i: 47, }, D { l: 142, t: 10, i: 153, }, D { l: 12, t: 0, i: 693, }, D { l: 135, t: 11, i: 759, }, D { l: 5, t: 0, i: 314 }, D { l: 6, t: 0, i: 221 }, D { l: 7, t: 0, i: 419 }, D { l: 10, t: 0, i: 650, }, D { l: 11, t: 0, i: 396, }, D { l: 12, t: 0, i: 156, }, D { l: 13, t: 0, i: 369, }, D { l: 14, t: 0, i: 333, }, D { l: 145, t: 0, i: 47, }, D { l: 6, t: 11, i: 1684, }, D { l: 6, t: 11, i: 1731, }, D { l: 7, t: 11, i: 356, }, D { l: 7, t: 11, i: 1932, }, D { l: 8, t: 11, i: 54 }, D { l: 8, t: 11, i: 221, }, D { l: 9, t: 11, i: 225, }, D { l: 9, t: 11, i: 356, }, D { l: 10, t: 11, i: 77, }, D { l: 10, t: 11, i: 446, }, D { l: 10, t: 11, i: 731, }, D { l: 12, t: 11, i: 404, }, D { l: 141, t: 11, i: 491, }, D { l: 132, t: 11, i: 375, }, D { l: 4, t: 10, i: 518, }, D { l: 135, t: 10, i: 1136, }, D { l: 4, t: 0, i: 913 }, D { l: 4, t: 11, i: 411, }, D { l: 11, t: 11, i: 643, }, D { l: 140, t: 11, i: 115, }, D { l: 4, t: 11, i: 80 }, D { l: 133, t: 11, i: 44, }, D { l: 8, t: 10, i: 689, }, D { l: 137, t: 10, i: 863, }, D { l: 138, t: 0, i: 880, }, D { l: 4, t: 10, i: 18 }, D { l: 7, t: 10, i: 145, }, D { l: 7, t: 10, i: 444, }, D { l: 7, t: 10, i: 1278, }, D { l: 8, t: 10, i: 49 }, D { l: 8, t: 10, i: 400, }, D { l: 9, t: 10, i: 71 }, D { l: 9, t: 10, i: 250, }, D { l: 10, t: 10, i: 459, }, D { l: 12, t: 10, i: 160, }, D { l: 144, t: 10, i: 24, }, D { l: 136, t: 0, i: 475, }, D { l: 5, t: 0, i: 1016, }, D { l: 5, t: 11, i: 299, }, D { l: 135, t: 11, i: 1083, }, D { l: 7, t: 0, i: 602 }, D { l: 8, t: 0, i: 179 }, D { l: 10, t: 0, i: 781, }, D { l: 140, t: 0, i: 126, }, D { l: 6, t: 0, i: 329 }, D { l: 138, t: 0, i: 111, }, D { l: 135, t: 0, i: 1864, }, D { l: 4, t: 11, i: 219, }, D { l: 7, t: 11, i: 1761, }, D { l: 137, t: 11, i: 86, }, D { l: 6, t: 0, i: 1888, }, D { l: 6, t: 0, i: 1892, }, D { l: 6, t: 0, i: 1901, }, D { l: 6, t: 0, i: 1904, }, D { l: 9, t: 0, i: 953 }, D { l: 9, t: 0, i: 985 }, D { l: 9, t: 0, i: 991 }, D { l: 9, t: 0, i: 1001, }, D { l: 12, t: 0, i: 818, }, D { l: 12, t: 0, i: 846, }, D { l: 12, t: 0, i: 847, }, D { l: 12, t: 0, i: 861, }, D { l: 12, t: 0, i: 862, }, D { l: 12, t: 0, i: 873, }, D { l: 12, t: 0, i: 875, }, D { l: 12, t: 0, i: 877, }, D { l: 12, t: 0, i: 879, }, D { l: 12, t: 0, i: 881, }, D { l: 12, t: 0, i: 884, }, D { l: 12, t: 0, i: 903, }, D { l: 12, t: 0, i: 915, }, D { l: 12, t: 0, i: 926, }, D { l: 12, t: 0, i: 939, }, D { l: 15, t: 0, i: 182, }, D { l: 15, t: 0, i: 219, }, D { l: 15, t: 0, i: 255, }, D { l: 18, t: 0, i: 191, }, D { l: 18, t: 0, i: 209, }, D { l: 18, t: 0, i: 211, }, D { l: 149, t: 0, i: 41, }, D { l: 5, t: 11, i: 328, }, D { l: 135, t: 11, i: 918, }, D { l: 137, t: 0, i: 780, }, D { l: 12, t: 0, i: 82 }, D { l: 143, t: 0, i: 36, }, D { l: 133, t: 10, i: 1010, }, D { l: 5, t: 0, i: 821 }, D { l: 134, t: 0, i: 1687, }, D { l: 133, t: 11, i: 514, }, D { l: 132, t: 0, i: 956, }, D { l: 134, t: 0, i: 1180, }, D { l: 10, t: 0, i: 112, }, D { l: 5, t: 10, i: 87 }, D { l: 7, t: 10, i: 313, }, D { l: 7, t: 10, i: 1103, }, D { l: 10, t: 10, i: 582, }, D { l: 11, t: 10, i: 389, }, D { l: 11, t: 10, i: 813, }, D { l: 12, t: 10, i: 385, }, D { l: 13, t: 10, i: 286, }, D { l: 14, t: 10, i: 124, }, D { l: 146, t: 10, i: 108, }, D { l: 5, t: 0, i: 71 }, D { l: 7, t: 0, i: 1407, }, D { l: 9, t: 0, i: 704 }, D { l: 10, t: 0, i: 261, }, D { l: 10, t: 0, i: 619, }, D { l: 11, t: 0, i: 547, }, D { l: 11, t: 0, i: 619, }, D { l: 143, t: 0, i: 157, }, D { l: 4, t: 0, i: 531 }, D { l: 5, t: 0, i: 455 }, D { l: 5, t: 11, i: 301, }, D { l: 6, t: 11, i: 571, }, D { l: 14, t: 11, i: 49, }, D { l: 146, t: 11, i: 102, }, D { l: 132, t: 10, i: 267, }, D { l: 6, t: 0, i: 385 }, D { l: 7, t: 0, i: 2008, }, D { l: 9, t: 0, i: 337 }, D { l: 138, t: 0, i: 517, }, D { l: 133, t: 11, i: 726, }, D { l: 133, t: 11, i: 364, }, D { l: 4, t: 11, i: 76 }, D { l: 7, t: 11, i: 1550, }, D { l: 9, t: 11, i: 306, }, D { l: 9, t: 11, i: 430, }, D { l: 9, t: 11, i: 663, }, D { l: 10, t: 11, i: 683, }, D { l: 11, t: 11, i: 427, }, D { l: 11, t: 11, i: 753, }, D { l: 12, t: 11, i: 334, }, D { l: 12, t: 11, i: 442, }, D { l: 14, t: 11, i: 258, }, D { l: 14, t: 11, i: 366, }, D { l: 143, t: 11, i: 131, }, D { l: 6, t: 0, i: 1865, }, D { l: 6, t: 0, i: 1879, }, D { l: 6, t: 0, i: 1881, }, D { l: 6, t: 0, i: 1894, }, D { l: 6, t: 0, i: 1908, }, D { l: 9, t: 0, i: 915 }, D { l: 9, t: 0, i: 926 }, D { l: 9, t: 0, i: 940 }, D { l: 9, t: 0, i: 943 }, D { l: 9, t: 0, i: 966 }, D { l: 9, t: 0, i: 980 }, D { l: 9, t: 0, i: 989 }, D { l: 9, t: 0, i: 1005, }, D { l: 9, t: 0, i: 1010, }, D { l: 12, t: 0, i: 813, }, D { l: 12, t: 0, i: 817, }, D { l: 12, t: 0, i: 840, }, D { l: 12, t: 0, i: 843, }, D { l: 12, t: 0, i: 855, }, D { l: 12, t: 0, i: 864, }, D { l: 12, t: 0, i: 871, }, D { l: 12, t: 0, i: 872, }, D { l: 12, t: 0, i: 899, }, D { l: 12, t: 0, i: 905, }, D { l: 12, t: 0, i: 924, }, D { l: 15, t: 0, i: 171, }, D { l: 15, t: 0, i: 181, }, D { l: 15, t: 0, i: 224, }, D { l: 15, t: 0, i: 235, }, D { l: 15, t: 0, i: 251, }, D { l: 146, t: 0, i: 184, }, D { l: 137, t: 11, i: 52, }, D { l: 5, t: 0, i: 16 }, D { l: 6, t: 0, i: 86 }, D { l: 6, t: 0, i: 603 }, D { l: 7, t: 0, i: 292 }, D { l: 7, t: 0, i: 561 }, D { l: 8, t: 0, i: 257 }, D { l: 8, t: 0, i: 382 }, D { l: 9, t: 0, i: 721 }, D { l: 9, t: 0, i: 778 }, D { l: 11, t: 0, i: 581, }, D { l: 140, t: 0, i: 466, }, D { l: 4, t: 0, i: 486 }, D { l: 5, t: 0, i: 491 }, D { l: 135, t: 10, i: 1121, }, D { l: 4, t: 0, i: 72 }, D { l: 6, t: 0, i: 265 }, D { l: 135, t: 0, i: 1300, }, D { l: 135, t: 11, i: 1183, }, D { l: 10, t: 10, i: 249, }, D { l: 139, t: 10, i: 209, }, D { l: 132, t: 10, i: 561, }, D { l: 137, t: 11, i: 519, }, D { l: 4, t: 11, i: 656, }, D { l: 4, t: 10, i: 760, }, D { l: 135, t: 11, i: 779, }, D { l: 9, t: 10, i: 154, }, D { l: 140, t: 10, i: 485, }, D { l: 135, t: 11, i: 1793, }, D { l: 135, t: 11, i: 144, }, D { l: 136, t: 10, i: 255, }, D { l: 133, t: 0, i: 621, }, D { l: 4, t: 10, i: 368, }, D { l: 135, t: 10, i: 641, }, D { l: 135, t: 11, i: 1373, }, D { l: 7, t: 11, i: 554, }, D { l: 7, t: 11, i: 605, }, D { l: 141, t: 11, i: 10, }, D { l: 137, t: 0, i: 234, }, D { l: 5, t: 0, i: 815 }, D { l: 6, t: 0, i: 1688, }, D { l: 134, t: 0, i: 1755, }, D { l: 5, t: 11, i: 838, }, D { l: 5, t: 11, i: 841, }, D { l: 134, t: 11, i: 1649, }, D { l: 7, t: 0, i: 1987, }, D { l: 7, t: 0, i: 2040, }, D { l: 136, t: 0, i: 743, }, D { l: 133, t: 11, i: 1012, }, D { l: 6, t: 0, i: 197 }, D { l: 136, t: 0, i: 205, }, D { l: 6, t: 0, i: 314 }, D { l: 134, t: 11, i: 314, }, D { l: 144, t: 11, i: 53, }, D { l: 6, t: 11, i: 251, }, D { l: 7, t: 11, i: 365, }, D { l: 7, t: 11, i: 1357, }, D { l: 7, t: 11, i: 1497, }, D { l: 8, t: 11, i: 154, }, D { l: 141, t: 11, i: 281, }, D { l: 133, t: 11, i: 340, }, D { l: 6, t: 0, i: 452 }, D { l: 7, t: 0, i: 312 }, D { l: 138, t: 0, i: 219, }, D { l: 138, t: 0, i: 589, }, D { l: 4, t: 0, i: 333 }, D { l: 9, t: 0, i: 176 }, D { l: 12, t: 0, i: 353, }, D { l: 141, t: 0, i: 187, }, D { l: 9, t: 10, i: 92 }, D { l: 147, t: 10, i: 91, }, D { l: 134, t: 0, i: 1110, }, D { l: 11, t: 0, i: 47 }, D { l: 139, t: 11, i: 495, }, D { l: 6, t: 10, i: 525, }, D { l: 8, t: 10, i: 806, }, D { l: 9, t: 10, i: 876, }, D { l: 140, t: 10, i: 284, }, D { l: 8, t: 11, i: 261, }, D { l: 9, t: 11, i: 144, }, D { l: 9, t: 11, i: 466, }, D { l: 10, t: 11, i: 370, }, D { l: 12, t: 11, i: 470, }, D { l: 13, t: 11, i: 144, }, D { l: 142, t: 11, i: 348, }, D { l: 137, t: 11, i: 897, }, D { l: 8, t: 0, i: 863 }, D { l: 8, t: 0, i: 864 }, D { l: 8, t: 0, i: 868 }, D { l: 8, t: 0, i: 884 }, D { l: 10, t: 0, i: 866, }, D { l: 10, t: 0, i: 868, }, D { l: 10, t: 0, i: 873, }, D { l: 10, t: 0, i: 911, }, D { l: 10, t: 0, i: 912, }, D { l: 10, t: 0, i: 944, }, D { l: 12, t: 0, i: 727, }, D { l: 6, t: 11, i: 248, }, D { l: 9, t: 11, i: 546, }, D { l: 10, t: 11, i: 535, }, D { l: 11, t: 11, i: 681, }, D { l: 141, t: 11, i: 135, }, D { l: 6, t: 0, i: 300 }, D { l: 135, t: 0, i: 1515, }, D { l: 134, t: 0, i: 1237, }, D { l: 139, t: 10, i: 958, }, D { l: 133, t: 10, i: 594, }, D { l: 140, t: 11, i: 250, }, D { l: 134, t: 0, i: 1685, }, D { l: 134, t: 11, i: 567, }, D { l: 7, t: 0, i: 135 }, D { l: 8, t: 0, i: 7 }, D { l: 8, t: 0, i: 62 }, D { l: 9, t: 0, i: 243 }, D { l: 10, t: 0, i: 658, }, D { l: 10, t: 0, i: 697, }, D { l: 11, t: 0, i: 456, }, D { l: 139, t: 0, i: 756, }, D { l: 9, t: 0, i: 395 }, D { l: 138, t: 0, i: 79, }, D { l: 6, t: 10, i: 1641, }, D { l: 136, t: 10, i: 820, }, D { l: 4, t: 10, i: 302, }, D { l: 135, t: 10, i: 1766, }, D { l: 134, t: 11, i: 174, }, D { l: 135, t: 10, i: 1313, }, D { l: 135, t: 0, i: 631, }, D { l: 134, t: 10, i: 1674, }, D { l: 134, t: 11, i: 395, }, D { l: 138, t: 0, i: 835, }, D { l: 7, t: 0, i: 406 }, D { l: 7, t: 0, i: 459 }, D { l: 8, t: 0, i: 606 }, D { l: 139, t: 0, i: 726, }, D { l: 134, t: 11, i: 617, }, D { l: 134, t: 0, i: 979, }, D { l: 6, t: 10, i: 389, }, D { l: 7, t: 10, i: 149, }, D { l: 9, t: 10, i: 142, }, D { l: 138, t: 10, i: 94, }, D { l: 5, t: 11, i: 878, }, D { l: 133, t: 11, i: 972, }, D { l: 6, t: 10, i: 8 }, D { l: 7, t: 10, i: 1881, }, D { l: 8, t: 10, i: 91 }, D { l: 136, t: 11, i: 511, }, D { l: 133, t: 0, i: 612, }, D { l: 132, t: 11, i: 351, }, D { l: 4, t: 0, i: 372 }, D { l: 7, t: 0, i: 482 }, D { l: 8, t: 0, i: 158 }, D { l: 9, t: 0, i: 602 }, D { l: 9, t: 0, i: 615 }, D { l: 10, t: 0, i: 245, }, D { l: 10, t: 0, i: 678, }, D { l: 10, t: 0, i: 744, }, D { l: 11, t: 0, i: 248, }, D { l: 139, t: 0, i: 806, }, D { l: 5, t: 0, i: 854 }, D { l: 135, t: 0, i: 1991, }, D { l: 132, t: 11, i: 286, }, D { l: 135, t: 11, i: 344, }, D { l: 7, t: 11, i: 438, }, D { l: 7, t: 11, i: 627, }, D { l: 7, t: 11, i: 1516, }, D { l: 8, t: 11, i: 40 }, D { l: 9, t: 11, i: 56 }, D { l: 9, t: 11, i: 294, }, D { l: 10, t: 11, i: 30, }, D { l: 10, t: 11, i: 259, }, D { l: 11, t: 11, i: 969, }, D { l: 146, t: 11, i: 148, }, D { l: 135, t: 0, i: 1492, }, D { l: 5, t: 11, i: 259, }, D { l: 7, t: 11, i: 414, }, D { l: 7, t: 11, i: 854, }, D { l: 142, t: 11, i: 107, }, D { l: 135, t: 10, i: 1746, }, D { l: 6, t: 0, i: 833 }, D { l: 134, t: 0, i: 998, }, D { l: 135, t: 10, i: 24, }, D { l: 6, t: 0, i: 750 }, D { l: 135, t: 0, i: 1739, }, D { l: 4, t: 10, i: 503, }, D { l: 135, t: 10, i: 1661, }, D { l: 5, t: 10, i: 130, }, D { l: 7, t: 10, i: 1314, }, D { l: 9, t: 10, i: 610, }, D { l: 10, t: 10, i: 718, }, D { l: 11, t: 10, i: 601, }, D { l: 11, t: 10, i: 819, }, D { l: 11, t: 10, i: 946, }, D { l: 140, t: 10, i: 536, }, D { l: 10, t: 10, i: 149, }, D { l: 11, t: 10, i: 280, }, D { l: 142, t: 10, i: 336, }, D { l: 132, t: 11, i: 738, }, D { l: 135, t: 10, i: 1946, }, D { l: 5, t: 0, i: 195 }, D { l: 135, t: 0, i: 1685, }, D { l: 7, t: 0, i: 1997, }, D { l: 8, t: 0, i: 730 }, D { l: 139, t: 0, i: 1006, }, D { l: 151, t: 11, i: 17, }, D { l: 133, t: 11, i: 866, }, D { l: 14, t: 0, i: 463, }, D { l: 14, t: 0, i: 470, }, D { l: 150, t: 0, i: 61, }, D { l: 5, t: 0, i: 751 }, D { l: 8, t: 0, i: 266 }, D { l: 11, t: 0, i: 578, }, D { l: 4, t: 10, i: 392, }, D { l: 135, t: 10, i: 1597, }, D { l: 5, t: 10, i: 433, }, D { l: 9, t: 10, i: 633, }, D { l: 139, t: 10, i: 629, }, D { l: 135, t: 0, i: 821, }, D { l: 6, t: 0, i: 715 }, D { l: 134, t: 0, i: 1325, }, D { l: 133, t: 11, i: 116, }, D { l: 6, t: 0, i: 868 }, D { l: 132, t: 11, i: 457, }, D { l: 134, t: 0, i: 959, }, D { l: 6, t: 10, i: 234, }, D { l: 138, t: 11, i: 199, }, D { l: 7, t: 0, i: 1053, }, D { l: 7, t: 10, i: 1950, }, D { l: 8, t: 10, i: 680, }, D { l: 11, t: 10, i: 817, }, D { l: 147, t: 10, i: 88, }, D { l: 7, t: 10, i: 1222, }, D { l: 138, t: 10, i: 386, }, D { l: 5, t: 0, i: 950 }, D { l: 5, t: 0, i: 994 }, D { l: 6, t: 0, i: 351 }, D { l: 134, t: 0, i: 1124, }, D { l: 134, t: 0, i: 1081, }, D { l: 7, t: 0, i: 1595, }, D { l: 6, t: 10, i: 5 }, D { l: 11, t: 10, i: 249, }, D { l: 12, t: 10, i: 313, }, D { l: 16, t: 10, i: 66, }, D { l: 145, t: 10, i: 26, }, D { l: 148, t: 0, i: 59, }, D { l: 5, t: 11, i: 527, }, D { l: 6, t: 11, i: 189, }, D { l: 135, t: 11, i: 859, }, D { l: 5, t: 10, i: 963, }, D { l: 6, t: 10, i: 1773, }, D { l: 11, t: 11, i: 104, }, D { l: 11, t: 11, i: 554, }, D { l: 15, t: 11, i: 60, }, D { l: 143, t: 11, i: 125, }, D { l: 135, t: 0, i: 47, }, D { l: 137, t: 0, i: 684, }, D { l: 134, t: 11, i: 116, }, D { l: 134, t: 0, i: 1606, }, D { l: 134, t: 0, i: 777, }, D { l: 7, t: 0, i: 1020, }, D { l: 8, t: 10, i: 509, }, D { l: 136, t: 10, i: 792, }, D { l: 135, t: 0, i: 1094, }, D { l: 132, t: 0, i: 350, }, D { l: 133, t: 11, i: 487, }, D { l: 4, t: 11, i: 86 }, D { l: 5, t: 11, i: 667, }, D { l: 5, t: 11, i: 753, }, D { l: 6, t: 11, i: 316, }, D { l: 6, t: 11, i: 455, }, D { l: 135, t: 11, i: 946, }, D { l: 7, t: 0, i: 1812, }, D { l: 13, t: 0, i: 259, }, D { l: 13, t: 0, i: 356, }, D { l: 14, t: 0, i: 242, }, D { l: 147, t: 0, i: 114, }, D { l: 132, t: 10, i: 931, }, D { l: 133, t: 0, i: 967, }, D { l: 4, t: 0, i: 473 }, D { l: 7, t: 0, i: 623 }, D { l: 8, t: 0, i: 808 }, D { l: 9, t: 0, i: 871 }, D { l: 9, t: 0, i: 893 }, D { l: 11, t: 0, i: 38 }, D { l: 11, t: 0, i: 431, }, D { l: 12, t: 0, i: 112, }, D { l: 12, t: 0, i: 217, }, D { l: 12, t: 0, i: 243, }, D { l: 12, t: 0, i: 562, }, D { l: 12, t: 0, i: 663, }, D { l: 12, t: 0, i: 683, }, D { l: 13, t: 0, i: 141, }, D { l: 13, t: 0, i: 197, }, D { l: 13, t: 0, i: 227, }, D { l: 13, t: 0, i: 406, }, D { l: 13, t: 0, i: 487, }, D { l: 14, t: 0, i: 156, }, D { l: 14, t: 0, i: 203, }, D { l: 14, t: 0, i: 224, }, D { l: 14, t: 0, i: 256, }, D { l: 18, t: 0, i: 58 }, D { l: 150, t: 0, i: 0 }, D { l: 138, t: 0, i: 286, }, D { l: 7, t: 10, i: 943, }, D { l: 139, t: 10, i: 614, }, D { l: 135, t: 10, i: 1837, }, D { l: 150, t: 11, i: 45, }, D { l: 132, t: 0, i: 798, }, D { l: 4, t: 0, i: 222 }, D { l: 7, t: 0, i: 286 }, D { l: 136, t: 0, i: 629, }, D { l: 4, t: 11, i: 79 }, D { l: 7, t: 11, i: 1773, }, D { l: 10, t: 11, i: 450, }, D { l: 11, t: 11, i: 589, }, D { l: 13, t: 11, i: 332, }, D { l: 13, t: 11, i: 493, }, D { l: 14, t: 11, i: 183, }, D { l: 14, t: 11, i: 334, }, D { l: 14, t: 11, i: 362, }, D { l: 14, t: 11, i: 368, }, D { l: 14, t: 11, i: 376, }, D { l: 14, t: 11, i: 379, }, D { l: 19, t: 11, i: 90, }, D { l: 19, t: 11, i: 103, }, D { l: 19, t: 11, i: 127, }, D { l: 148, t: 11, i: 90, }, D { l: 5, t: 0, i: 337 }, D { l: 11, t: 0, i: 513, }, D { l: 11, t: 0, i: 889, }, D { l: 11, t: 0, i: 961, }, D { l: 12, t: 0, i: 461, }, D { l: 13, t: 0, i: 79 }, D { l: 15, t: 0, i: 121, }, D { l: 4, t: 10, i: 90 }, D { l: 5, t: 10, i: 545, }, D { l: 7, t: 10, i: 754, }, D { l: 9, t: 10, i: 186, }, D { l: 10, t: 10, i: 72, }, D { l: 10, t: 10, i: 782, }, D { l: 11, t: 10, i: 577, }, D { l: 11, t: 10, i: 610, }, D { l: 12, t: 10, i: 354, }, D { l: 12, t: 10, i: 362, }, D { l: 140, t: 10, i: 595, }, D { l: 141, t: 0, i: 306, }, D { l: 136, t: 0, i: 146, }, D { l: 7, t: 0, i: 1646, }, D { l: 9, t: 10, i: 329, }, D { l: 11, t: 10, i: 254, }, D { l: 141, t: 11, i: 124, }, D { l: 4, t: 0, i: 465 }, D { l: 135, t: 0, i: 1663, }, D { l: 132, t: 0, i: 525, }, D { l: 133, t: 11, i: 663, }, D { l: 10, t: 0, i: 299, }, D { l: 18, t: 0, i: 74 }, D { l: 9, t: 10, i: 187, }, D { l: 11, t: 10, i: 1016, }, D { l: 145, t: 10, i: 44, }, D { l: 7, t: 0, i: 165 }, D { l: 7, t: 0, i: 919 }, D { l: 4, t: 10, i: 506, }, D { l: 136, t: 10, i: 517, }, D { l: 5, t: 10, i: 295, }, D { l: 135, t: 10, i: 1680, }, D { l: 133, t: 11, i: 846, }, D { l: 134, t: 0, i: 1064, }, D { l: 5, t: 11, i: 378, }, D { l: 7, t: 11, i: 1402, }, D { l: 7, t: 11, i: 1414, }, D { l: 8, t: 11, i: 465, }, D { l: 9, t: 11, i: 286, }, D { l: 10, t: 11, i: 185, }, D { l: 10, t: 11, i: 562, }, D { l: 10, t: 11, i: 635, }, D { l: 11, t: 11, i: 31, }, D { l: 11, t: 11, i: 393, }, D { l: 12, t: 11, i: 456, }, D { l: 13, t: 11, i: 312, }, D { l: 18, t: 11, i: 65, }, D { l: 18, t: 11, i: 96, }, D { l: 147, t: 11, i: 89, }, D { l: 132, t: 0, i: 596, }, D { l: 7, t: 10, i: 987, }, D { l: 9, t: 10, i: 688, }, D { l: 10, t: 10, i: 522, }, D { l: 11, t: 10, i: 788, }, D { l: 140, t: 10, i: 566, }, D { l: 6, t: 0, i: 82 }, D { l: 7, t: 0, i: 138 }, D { l: 7, t: 0, i: 517 }, D { l: 7, t: 0, i: 1741, }, D { l: 11, t: 0, i: 238, }, D { l: 4, t: 11, i: 648, }, D { l: 134, t: 10, i: 1775, }, D { l: 7, t: 0, i: 1233, }, D { l: 7, t: 10, i: 700, }, D { l: 7, t: 10, i: 940, }, D { l: 8, t: 10, i: 514, }, D { l: 9, t: 10, i: 116, }, D { l: 9, t: 10, i: 535, }, D { l: 10, t: 10, i: 118, }, D { l: 11, t: 10, i: 107, }, D { l: 11, t: 10, i: 148, }, D { l: 11, t: 10, i: 922, }, D { l: 12, t: 10, i: 254, }, D { l: 12, t: 10, i: 421, }, D { l: 142, t: 10, i: 238, }, D { l: 4, t: 0, i: 962 }, D { l: 6, t: 0, i: 1824, }, D { l: 8, t: 0, i: 894 }, D { l: 12, t: 0, i: 708, }, D { l: 12, t: 0, i: 725, }, D { l: 14, t: 0, i: 451, }, D { l: 20, t: 0, i: 94 }, D { l: 22, t: 0, i: 59 }, D { l: 150, t: 0, i: 62, }, D { l: 5, t: 11, i: 945, }, D { l: 6, t: 11, i: 1656, }, D { l: 6, t: 11, i: 1787, }, D { l: 7, t: 11, i: 167, }, D { l: 8, t: 11, i: 824, }, D { l: 9, t: 11, i: 391, }, D { l: 10, t: 11, i: 375, }, D { l: 139, t: 11, i: 185, }, D { l: 5, t: 0, i: 495 }, D { l: 7, t: 0, i: 834 }, D { l: 9, t: 0, i: 733 }, D { l: 139, t: 0, i: 378, }, D { l: 4, t: 10, i: 743, }, D { l: 135, t: 11, i: 1273, }, D { l: 6, t: 0, i: 1204, }, D { l: 7, t: 11, i: 1645, }, D { l: 8, t: 11, i: 352, }, D { l: 137, t: 11, i: 249, }, D { l: 139, t: 10, i: 292, }, D { l: 133, t: 0, i: 559, }, D { l: 132, t: 11, i: 152, }, D { l: 9, t: 0, i: 499 }, D { l: 10, t: 0, i: 341, }, D { l: 15, t: 0, i: 144, }, D { l: 19, t: 0, i: 49 }, D { l: 7, t: 10, i: 1283, }, D { l: 9, t: 10, i: 227, }, D { l: 11, t: 10, i: 325, }, D { l: 11, t: 10, i: 408, }, D { l: 14, t: 10, i: 180, }, D { l: 146, t: 10, i: 47, }, D { l: 6, t: 0, i: 21 }, D { l: 6, t: 0, i: 1737, }, D { l: 7, t: 0, i: 1444, }, D { l: 136, t: 0, i: 224, }, D { l: 133, t: 11, i: 1006, }, D { l: 7, t: 0, i: 1446, }, D { l: 9, t: 0, i: 97 }, D { l: 17, t: 0, i: 15 }, D { l: 5, t: 10, i: 81 }, D { l: 7, t: 10, i: 146, }, D { l: 7, t: 10, i: 1342, }, D { l: 8, t: 10, i: 53 }, D { l: 8, t: 10, i: 561, }, D { l: 8, t: 10, i: 694, }, D { l: 8, t: 10, i: 754, }, D { l: 9, t: 10, i: 115, }, D { l: 9, t: 10, i: 894, }, D { l: 10, t: 10, i: 462, }, D { l: 10, t: 10, i: 813, }, D { l: 11, t: 10, i: 230, }, D { l: 11, t: 10, i: 657, }, D { l: 11, t: 10, i: 699, }, D { l: 11, t: 10, i: 748, }, D { l: 12, t: 10, i: 119, }, D { l: 12, t: 10, i: 200, }, D { l: 12, t: 10, i: 283, }, D { l: 142, t: 10, i: 273, }, D { l: 5, t: 10, i: 408, }, D { l: 137, t: 10, i: 747, }, D { l: 135, t: 11, i: 431, }, D { l: 135, t: 11, i: 832, }, D { l: 6, t: 0, i: 729 }, D { l: 134, t: 0, i: 953, }, D { l: 4, t: 0, i: 727 }, D { l: 8, t: 0, i: 565 }, D { l: 5, t: 11, i: 351, }, D { l: 7, t: 11, i: 264, }, D { l: 136, t: 11, i: 565, }, D { l: 134, t: 0, i: 1948, }, D { l: 5, t: 0, i: 519 }, D { l: 5, t: 11, i: 40 }, D { l: 7, t: 11, i: 598, }, D { l: 7, t: 11, i: 1638, }, D { l: 8, t: 11, i: 78 }, D { l: 9, t: 11, i: 166, }, D { l: 9, t: 11, i: 640, }, D { l: 9, t: 11, i: 685, }, D { l: 9, t: 11, i: 773, }, D { l: 11, t: 11, i: 215, }, D { l: 13, t: 11, i: 65, }, D { l: 14, t: 11, i: 172, }, D { l: 14, t: 11, i: 317, }, D { l: 145, t: 11, i: 6, }, D { l: 8, t: 11, i: 60 }, D { l: 9, t: 11, i: 343, }, D { l: 139, t: 11, i: 769, }, D { l: 137, t: 11, i: 455, }, D { l: 134, t: 0, i: 1193, }, D { l: 140, t: 0, i: 790, }, D { l: 7, t: 11, i: 1951, }, D { l: 8, t: 11, i: 765, }, D { l: 8, t: 11, i: 772, }, D { l: 140, t: 11, i: 671, }, D { l: 7, t: 11, i: 108, }, D { l: 8, t: 11, i: 219, }, D { l: 8, t: 11, i: 388, }, D { l: 9, t: 11, i: 639, }, D { l: 9, t: 11, i: 775, }, D { l: 11, t: 11, i: 275, }, D { l: 140, t: 11, i: 464, }, D { l: 132, t: 11, i: 468, }, D { l: 7, t: 10, i: 30 }, D { l: 8, t: 10, i: 86 }, D { l: 8, t: 10, i: 315, }, D { l: 8, t: 10, i: 700, }, D { l: 9, t: 10, i: 576, }, D { l: 9, t: 10, i: 858, }, D { l: 11, t: 10, i: 310, }, D { l: 11, t: 10, i: 888, }, D { l: 11, t: 10, i: 904, }, D { l: 12, t: 10, i: 361, }, D { l: 141, t: 10, i: 248, }, D { l: 5, t: 11, i: 15 }, D { l: 6, t: 11, i: 56 }, D { l: 7, t: 11, i: 1758, }, D { l: 8, t: 11, i: 500, }, D { l: 9, t: 11, i: 730, }, D { l: 11, t: 11, i: 331, }, D { l: 13, t: 11, i: 150, }, D { l: 142, t: 11, i: 282, }, D { l: 4, t: 0, i: 402 }, D { l: 7, t: 0, i: 2 }, D { l: 8, t: 0, i: 323 }, D { l: 136, t: 0, i: 479, }, D { l: 138, t: 10, i: 839, }, D { l: 11, t: 0, i: 580, }, D { l: 142, t: 0, i: 201, }, D { l: 5, t: 0, i: 59 }, D { l: 135, t: 0, i: 672, }, D { l: 137, t: 10, i: 617, }, D { l: 146, t: 0, i: 34, }, D { l: 134, t: 11, i: 1886, }, D { l: 4, t: 0, i: 961 }, D { l: 136, t: 0, i: 896, }, D { l: 6, t: 0, i: 1285, }, D { l: 5, t: 11, i: 205, }, D { l: 6, t: 11, i: 438, }, D { l: 137, t: 11, i: 711, }, D { l: 134, t: 10, i: 428, }, D { l: 7, t: 10, i: 524, }, D { l: 8, t: 10, i: 169, }, D { l: 8, t: 10, i: 234, }, D { l: 9, t: 10, i: 480, }, D { l: 138, t: 10, i: 646, }, D { l: 148, t: 0, i: 46, }, D { l: 141, t: 0, i: 479, }, D { l: 133, t: 11, i: 534, }, D { l: 6, t: 0, i: 2019, }, D { l: 134, t: 10, i: 1648, }, D { l: 4, t: 0, i: 85 }, D { l: 7, t: 0, i: 549 }, D { l: 7, t: 10, i: 1205, }, D { l: 138, t: 10, i: 637, }, D { l: 4, t: 0, i: 663 }, D { l: 5, t: 0, i: 94 }, D { l: 7, t: 11, i: 235, }, D { l: 7, t: 11, i: 1475, }, D { l: 15, t: 11, i: 68, }, D { l: 146, t: 11, i: 120, }, D { l: 6, t: 11, i: 443, }, D { l: 9, t: 11, i: 237, }, D { l: 9, t: 11, i: 571, }, D { l: 9, t: 11, i: 695, }, D { l: 10, t: 11, i: 139, }, D { l: 11, t: 11, i: 715, }, D { l: 12, t: 11, i: 417, }, D { l: 141, t: 11, i: 421, }, D { l: 132, t: 0, i: 783, }, D { l: 4, t: 0, i: 682 }, D { l: 8, t: 0, i: 65 }, D { l: 9, t: 10, i: 39 }, D { l: 10, t: 10, i: 166, }, D { l: 11, t: 10, i: 918, }, D { l: 12, t: 10, i: 635, }, D { l: 20, t: 10, i: 10, }, D { l: 22, t: 10, i: 27, }, D { l: 22, t: 10, i: 43, }, D { l: 150, t: 10, i: 52, }, D { l: 6, t: 0, i: 11 }, D { l: 135, t: 0, i: 187, }, D { l: 132, t: 0, i: 522, }, D { l: 4, t: 0, i: 52 }, D { l: 135, t: 0, i: 661, }, D { l: 4, t: 0, i: 383 }, D { l: 133, t: 0, i: 520, }, D { l: 135, t: 11, i: 546, }, D { l: 11, t: 0, i: 343, }, D { l: 142, t: 0, i: 127, }, D { l: 4, t: 11, i: 578, }, D { l: 7, t: 10, i: 157, }, D { l: 7, t: 11, i: 624, }, D { l: 7, t: 11, i: 916, }, D { l: 8, t: 10, i: 279, }, D { l: 10, t: 11, i: 256, }, D { l: 11, t: 11, i: 87, }, D { l: 139, t: 11, i: 703, }, D { l: 134, t: 10, i: 604, }, D { l: 4, t: 0, i: 281 }, D { l: 5, t: 0, i: 38 }, D { l: 7, t: 0, i: 194 }, D { l: 7, t: 0, i: 668 }, D { l: 7, t: 0, i: 1893, }, D { l: 137, t: 0, i: 397, }, D { l: 7, t: 10, i: 945, }, D { l: 11, t: 10, i: 713, }, D { l: 139, t: 10, i: 744, }, D { l: 139, t: 10, i: 1022, }, D { l: 9, t: 0, i: 635 }, D { l: 139, t: 0, i: 559, }, D { l: 5, t: 11, i: 923, }, D { l: 7, t: 11, i: 490, }, D { l: 12, t: 11, i: 553, }, D { l: 13, t: 11, i: 100, }, D { l: 14, t: 11, i: 118, }, D { l: 143, t: 11, i: 75, }, D { l: 132, t: 0, i: 975, }, D { l: 132, t: 10, i: 567, }, D { l: 137, t: 10, i: 859, }, D { l: 7, t: 10, i: 1846, }, D { l: 7, t: 11, i: 1846, }, D { l: 8, t: 10, i: 628, }, D { l: 136, t: 11, i: 628, }, D { l: 148, t: 0, i: 116, }, D { l: 138, t: 11, i: 750, }, D { l: 14, t: 0, i: 51 }, D { l: 14, t: 11, i: 51, }, D { l: 15, t: 11, i: 7 }, D { l: 148, t: 11, i: 20, }, D { l: 132, t: 0, i: 858, }, D { l: 134, t: 0, i: 1075, }, D { l: 4, t: 11, i: 924, }, D { l: 133, t: 10, i: 762, }, D { l: 136, t: 0, i: 535, }, D { l: 133, t: 0, i: 448, }, D { l: 10, t: 10, i: 784, }, D { l: 141, t: 10, i: 191, }, D { l: 133, t: 10, i: 298, }, D { l: 7, t: 0, i: 610 }, D { l: 135, t: 0, i: 1501, }, D { l: 7, t: 10, i: 633, }, D { l: 7, t: 10, i: 905, }, D { l: 7, t: 10, i: 909, }, D { l: 7, t: 10, i: 1538, }, D { l: 9, t: 10, i: 767, }, D { l: 140, t: 10, i: 636, }, D { l: 4, t: 11, i: 265, }, D { l: 7, t: 11, i: 807, }, D { l: 135, t: 11, i: 950, }, D { l: 5, t: 11, i: 93 }, D { l: 12, t: 11, i: 267, }, D { l: 144, t: 11, i: 26, }, D { l: 136, t: 0, i: 191, }, D { l: 139, t: 10, i: 301, }, D { l: 135, t: 10, i: 1970, }, D { l: 135, t: 0, i: 267, }, D { l: 4, t: 0, i: 319 }, D { l: 5, t: 0, i: 699 }, D { l: 138, t: 0, i: 673, }, D { l: 6, t: 0, i: 336 }, D { l: 7, t: 0, i: 92 }, D { l: 7, t: 0, i: 182 }, D { l: 8, t: 0, i: 453 }, D { l: 8, t: 0, i: 552 }, D { l: 9, t: 0, i: 204 }, D { l: 9, t: 0, i: 285 }, D { l: 10, t: 0, i: 99 }, D { l: 11, t: 0, i: 568, }, D { l: 11, t: 0, i: 950, }, D { l: 12, t: 0, i: 94 }, D { l: 16, t: 0, i: 20 }, D { l: 16, t: 0, i: 70 }, D { l: 19, t: 0, i: 55 }, D { l: 12, t: 10, i: 644, }, D { l: 144, t: 10, i: 90, }, D { l: 6, t: 0, i: 551 }, D { l: 7, t: 0, i: 1308, }, D { l: 7, t: 10, i: 845, }, D { l: 7, t: 11, i: 994, }, D { l: 8, t: 10, i: 160, }, D { l: 137, t: 10, i: 318, }, D { l: 19, t: 11, i: 1 }, D { l: 19, t: 11, i: 26, }, D { l: 150, t: 11, i: 9, }, D { l: 7, t: 0, i: 1406, }, D { l: 9, t: 0, i: 218 }, D { l: 141, t: 0, i: 222, }, D { l: 5, t: 0, i: 256 }, D { l: 138, t: 0, i: 69, }, D { l: 5, t: 11, i: 233, }, D { l: 5, t: 11, i: 320, }, D { l: 6, t: 11, i: 140, }, D { l: 7, t: 11, i: 330, }, D { l: 136, t: 11, i: 295, }, D { l: 6, t: 0, i: 1980, }, D { l: 136, t: 0, i: 952, }, D { l: 4, t: 0, i: 833 }, D { l: 137, t: 11, i: 678, }, D { l: 133, t: 11, i: 978, }, D { l: 4, t: 11, i: 905, }, D { l: 6, t: 11, i: 1701, }, D { l: 137, t: 11, i: 843, }, D { l: 138, t: 10, i: 735, }, D { l: 136, t: 10, i: 76, }, D { l: 17, t: 0, i: 39 }, D { l: 148, t: 0, i: 36, }, D { l: 18, t: 0, i: 81 }, D { l: 146, t: 11, i: 81, }, D { l: 14, t: 0, i: 352, }, D { l: 17, t: 0, i: 53 }, D { l: 18, t: 0, i: 146, }, D { l: 18, t: 0, i: 152, }, D { l: 19, t: 0, i: 11 }, D { l: 150, t: 0, i: 54, }, D { l: 135, t: 0, i: 634, }, D { l: 138, t: 10, i: 841, }, D { l: 132, t: 0, i: 618, }, D { l: 4, t: 0, i: 339 }, D { l: 7, t: 0, i: 259 }, D { l: 17, t: 0, i: 73 }, D { l: 4, t: 11, i: 275, }, D { l: 140, t: 11, i: 376, }, D { l: 132, t: 11, i: 509, }, D { l: 7, t: 11, i: 273, }, D { l: 139, t: 11, i: 377, }, D { l: 4, t: 0, i: 759 }, D { l: 13, t: 0, i: 169, }, D { l: 137, t: 10, i: 804, }, D { l: 6, t: 10, i: 96 }, D { l: 135, t: 10, i: 1426, }, D { l: 4, t: 10, i: 651, }, D { l: 133, t: 10, i: 289, }, D { l: 7, t: 0, i: 1075, }, D { l: 8, t: 10, i: 35 }, D { l: 9, t: 10, i: 511, }, D { l: 10, t: 10, i: 767, }, D { l: 147, t: 10, i: 118, }, D { l: 6, t: 0, i: 649 }, D { l: 6, t: 0, i: 670 }, D { l: 136, t: 0, i: 482, }, D { l: 5, t: 0, i: 336 }, D { l: 6, t: 0, i: 341 }, D { l: 6, t: 0, i: 478 }, D { l: 6, t: 0, i: 1763, }, D { l: 136, t: 0, i: 386, }, D { l: 5, t: 11, i: 802, }, D { l: 7, t: 11, i: 2021, }, D { l: 8, t: 11, i: 805, }, D { l: 14, t: 11, i: 94, }, D { l: 15, t: 11, i: 65, }, D { l: 16, t: 11, i: 4 }, D { l: 16, t: 11, i: 77, }, D { l: 16, t: 11, i: 80, }, D { l: 145, t: 11, i: 5, }, D { l: 6, t: 0, i: 1035, }, D { l: 5, t: 11, i: 167, }, D { l: 5, t: 11, i: 899, }, D { l: 6, t: 11, i: 410, }, D { l: 137, t: 11, i: 777, }, D { l: 134, t: 11, i: 1705, }, D { l: 5, t: 0, i: 924 }, D { l: 133, t: 0, i: 969, }, D { l: 132, t: 10, i: 704, }, D { l: 135, t: 0, i: 73, }, D { l: 135, t: 11, i: 10, }, D { l: 135, t: 10, i: 1078, }, D { l: 5, t: 11, i: 11 }, D { l: 6, t: 11, i: 117, }, D { l: 6, t: 11, i: 485, }, D { l: 7, t: 11, i: 1133, }, D { l: 9, t: 11, i: 582, }, D { l: 9, t: 11, i: 594, }, D { l: 11, t: 11, i: 21, }, D { l: 11, t: 11, i: 818, }, D { l: 12, t: 11, i: 535, }, D { l: 141, t: 11, i: 86, }, D { l: 135, t: 0, i: 1971, }, D { l: 4, t: 11, i: 264, }, D { l: 7, t: 11, i: 1067, }, D { l: 8, t: 11, i: 204, }, D { l: 8, t: 11, i: 385, }, D { l: 139, t: 11, i: 953, }, D { l: 6, t: 0, i: 1458, }, D { l: 135, t: 0, i: 1344, }, D { l: 5, t: 0, i: 396 }, D { l: 134, t: 0, i: 501, }, D { l: 4, t: 10, i: 720, }, D { l: 133, t: 10, i: 306, }, D { l: 4, t: 0, i: 929 }, D { l: 5, t: 0, i: 799 }, D { l: 8, t: 0, i: 46 }, D { l: 8, t: 0, i: 740 }, D { l: 133, t: 10, i: 431, }, D { l: 7, t: 11, i: 646, }, D { l: 7, t: 11, i: 1730, }, D { l: 11, t: 11, i: 446, }, D { l: 141, t: 11, i: 178, }, D { l: 7, t: 0, i: 276 }, D { l: 5, t: 10, i: 464, }, D { l: 6, t: 10, i: 236, }, D { l: 7, t: 10, i: 696, }, D { l: 7, t: 10, i: 914, }, D { l: 7, t: 10, i: 1108, }, D { l: 7, t: 10, i: 1448, }, D { l: 9, t: 10, i: 15 }, D { l: 9, t: 10, i: 564, }, D { l: 10, t: 10, i: 14, }, D { l: 12, t: 10, i: 565, }, D { l: 13, t: 10, i: 449, }, D { l: 14, t: 10, i: 53, }, D { l: 15, t: 10, i: 13, }, D { l: 16, t: 10, i: 64, }, D { l: 145, t: 10, i: 41, }, D { l: 4, t: 0, i: 892 }, D { l: 133, t: 0, i: 770, }, D { l: 6, t: 10, i: 1767, }, D { l: 12, t: 10, i: 194, }, D { l: 145, t: 10, i: 107, }, D { l: 135, t: 0, i: 158, }, D { l: 5, t: 10, i: 840, }, D { l: 138, t: 11, i: 608, }, D { l: 134, t: 0, i: 1432, }, D { l: 138, t: 11, i: 250, }, D { l: 8, t: 11, i: 794, }, D { l: 9, t: 11, i: 400, }, D { l: 10, t: 11, i: 298, }, D { l: 142, t: 11, i: 228, }, D { l: 151, t: 0, i: 25, }, D { l: 7, t: 11, i: 1131, }, D { l: 135, t: 11, i: 1468, }, D { l: 135, t: 0, i: 2001, }, D { l: 9, t: 10, i: 642, }, D { l: 11, t: 10, i: 236, }, D { l: 142, t: 10, i: 193, }, D { l: 4, t: 10, i: 68 }, D { l: 5, t: 10, i: 634, }, D { l: 6, t: 10, i: 386, }, D { l: 7, t: 10, i: 794, }, D { l: 8, t: 10, i: 273, }, D { l: 9, t: 10, i: 563, }, D { l: 10, t: 10, i: 105, }, D { l: 10, t: 10, i: 171, }, D { l: 11, t: 10, i: 94, }, D { l: 139, t: 10, i: 354, }, D { l: 136, t: 11, i: 724, }, D { l: 132, t: 0, i: 478, }, D { l: 11, t: 11, i: 512, }, D { l: 13, t: 11, i: 205, }, D { l: 19, t: 11, i: 30, }, D { l: 22, t: 11, i: 36, }, D { l: 151, t: 11, i: 19, }, D { l: 7, t: 0, i: 1461, }, D { l: 140, t: 0, i: 91, }, D { l: 6, t: 11, i: 190, }, D { l: 7, t: 11, i: 768, }, D { l: 135, t: 11, i: 1170, }, D { l: 4, t: 0, i: 602 }, D { l: 8, t: 0, i: 211 }, D { l: 4, t: 10, i: 95 }, D { l: 7, t: 10, i: 416, }, D { l: 139, t: 10, i: 830, }, D { l: 7, t: 10, i: 731, }, D { l: 13, t: 10, i: 20, }, D { l: 143, t: 10, i: 11, }, D { l: 6, t: 0, i: 1068, }, D { l: 135, t: 0, i: 1872, }, D { l: 4, t: 0, i: 13 }, D { l: 5, t: 0, i: 567 }, D { l: 7, t: 0, i: 1498, }, D { l: 9, t: 0, i: 124 }, D { l: 11, t: 0, i: 521, }, D { l: 12, t: 0, i: 405, }, D { l: 135, t: 11, i: 1023, }, D { l: 135, t: 0, i: 1006, }, D { l: 132, t: 0, i: 735, }, D { l: 138, t: 0, i: 812, }, D { l: 4, t: 0, i: 170 }, D { l: 135, t: 0, i: 323, }, D { l: 6, t: 11, i: 137, }, D { l: 9, t: 11, i: 75 }, D { l: 9, t: 11, i: 253, }, D { l: 10, t: 11, i: 194, }, D { l: 138, t: 11, i: 444, }, D { l: 5, t: 0, i: 304 }, D { l: 7, t: 0, i: 1403, }, D { l: 5, t: 10, i: 864, }, D { l: 10, t: 10, i: 648, }, D { l: 11, t: 10, i: 671, }, D { l: 143, t: 10, i: 46, }, D { l: 135, t: 11, i: 1180, }, D { l: 133, t: 10, i: 928, }, D { l: 4, t: 0, i: 148 }, D { l: 133, t: 0, i: 742, }, D { l: 11, t: 10, i: 986, }, D { l: 140, t: 10, i: 682, }, D { l: 133, t: 0, i: 523, }, D { l: 135, t: 11, i: 1743, }, D { l: 7, t: 0, i: 730 }, D { l: 18, t: 0, i: 144, }, D { l: 19, t: 0, i: 61 }, D { l: 8, t: 10, i: 44 }, D { l: 9, t: 10, i: 884, }, D { l: 10, t: 10, i: 580, }, D { l: 11, t: 10, i: 399, }, D { l: 11, t: 10, i: 894, }, D { l: 143, t: 10, i: 122, }, D { l: 5, t: 11, i: 760, }, D { l: 7, t: 11, i: 542, }, D { l: 8, t: 11, i: 135, }, D { l: 136, t: 11, i: 496, }, D { l: 136, t: 0, i: 981, }, D { l: 133, t: 0, i: 111, }, D { l: 10, t: 0, i: 132, }, D { l: 11, t: 0, i: 191, }, D { l: 11, t: 0, i: 358, }, D { l: 139, t: 0, i: 460, }, D { l: 7, t: 11, i: 319, }, D { l: 7, t: 11, i: 355, }, D { l: 7, t: 11, i: 763, }, D { l: 10, t: 11, i: 389, }, D { l: 145, t: 11, i: 43, }, D { l: 134, t: 0, i: 890, }, D { l: 134, t: 0, i: 1420, }, D { l: 136, t: 11, i: 557, }, D { l: 133, t: 10, i: 518, }, D { l: 133, t: 0, i: 444, }, D { l: 135, t: 0, i: 1787, }, D { l: 135, t: 10, i: 1852, }, D { l: 8, t: 0, i: 123 }, D { l: 15, t: 0, i: 6 }, D { l: 144, t: 0, i: 7 }, D { l: 6, t: 0, i: 2041, }, D { l: 10, t: 11, i: 38, }, D { l: 139, t: 11, i: 784, }, D { l: 136, t: 0, i: 932, }, D { l: 5, t: 0, i: 937 }, D { l: 135, t: 0, i: 100, }, D { l: 6, t: 0, i: 995 }, D { l: 4, t: 11, i: 58 }, D { l: 5, t: 11, i: 286, }, D { l: 6, t: 11, i: 319, }, D { l: 7, t: 11, i: 402, }, D { l: 7, t: 11, i: 1254, }, D { l: 7, t: 11, i: 1903, }, D { l: 8, t: 11, i: 356, }, D { l: 140, t: 11, i: 408, }, D { l: 4, t: 11, i: 389, }, D { l: 9, t: 11, i: 181, }, D { l: 9, t: 11, i: 255, }, D { l: 10, t: 11, i: 8 }, D { l: 10, t: 11, i: 29, }, D { l: 10, t: 11, i: 816, }, D { l: 11, t: 11, i: 311, }, D { l: 11, t: 11, i: 561, }, D { l: 12, t: 11, i: 67, }, D { l: 141, t: 11, i: 181, }, D { l: 138, t: 0, i: 255, }, D { l: 5, t: 0, i: 138 }, D { l: 4, t: 10, i: 934, }, D { l: 136, t: 10, i: 610, }, D { l: 4, t: 0, i: 965 }, D { l: 10, t: 0, i: 863, }, D { l: 138, t: 0, i: 898, }, D { l: 10, t: 10, i: 804, }, D { l: 138, t: 10, i: 832, }, D { l: 12, t: 0, i: 631, }, D { l: 8, t: 10, i: 96 }, D { l: 9, t: 10, i: 36 }, D { l: 10, t: 10, i: 607, }, D { l: 11, t: 10, i: 423, }, D { l: 11, t: 10, i: 442, }, D { l: 12, t: 10, i: 309, }, D { l: 14, t: 10, i: 199, }, D { l: 15, t: 10, i: 90, }, D { l: 145, t: 10, i: 110, }, D { l: 134, t: 0, i: 1394, }, D { l: 4, t: 0, i: 652 }, D { l: 8, t: 0, i: 320 }, D { l: 22, t: 0, i: 6 }, D { l: 22, t: 0, i: 16 }, D { l: 9, t: 10, i: 13 }, D { l: 9, t: 10, i: 398, }, D { l: 9, t: 10, i: 727, }, D { l: 10, t: 10, i: 75, }, D { l: 10, t: 10, i: 184, }, D { l: 10, t: 10, i: 230, }, D { l: 10, t: 10, i: 564, }, D { l: 10, t: 10, i: 569, }, D { l: 11, t: 10, i: 973, }, D { l: 12, t: 10, i: 70, }, D { l: 12, t: 10, i: 189, }, D { l: 13, t: 10, i: 57, }, D { l: 141, t: 10, i: 257, }, D { l: 6, t: 0, i: 897 }, D { l: 134, t: 0, i: 1333, }, D { l: 4, t: 0, i: 692 }, D { l: 133, t: 0, i: 321, }, D { l: 133, t: 11, i: 373, }, D { l: 135, t: 0, i: 922, }, D { l: 5, t: 0, i: 619 }, D { l: 133, t: 0, i: 698, }, D { l: 137, t: 10, i: 631, }, D { l: 5, t: 10, i: 345, }, D { l: 135, t: 10, i: 1016, }, D { l: 9, t: 0, i: 957 }, D { l: 9, t: 0, i: 1018, }, D { l: 12, t: 0, i: 828, }, D { l: 12, t: 0, i: 844, }, D { l: 12, t: 0, i: 897, }, D { l: 12, t: 0, i: 901, }, D { l: 12, t: 0, i: 943, }, D { l: 15, t: 0, i: 180, }, D { l: 18, t: 0, i: 197, }, D { l: 18, t: 0, i: 200, }, D { l: 18, t: 0, i: 213, }, D { l: 18, t: 0, i: 214, }, D { l: 146, t: 0, i: 226, }, D { l: 5, t: 0, i: 917 }, D { l: 134, t: 0, i: 1659, }, D { l: 135, t: 0, i: 1100, }, D { l: 134, t: 0, i: 1173, }, D { l: 134, t: 0, i: 1930, }, D { l: 5, t: 0, i: 251 }, D { l: 5, t: 0, i: 956 }, D { l: 8, t: 0, i: 268 }, D { l: 9, t: 0, i: 214 }, D { l: 146, t: 0, i: 142, }, D { l: 133, t: 10, i: 673, }, D { l: 137, t: 10, i: 850, }, D { l: 4, t: 10, i: 287, }, D { l: 133, t: 10, i: 1018, }, D { l: 132, t: 11, i: 672, }, D { l: 5, t: 0, i: 346 }, D { l: 5, t: 0, i: 711 }, D { l: 8, t: 0, i: 390 }, D { l: 11, t: 11, i: 752, }, D { l: 139, t: 11, i: 885, }, D { l: 5, t: 10, i: 34 }, D { l: 10, t: 10, i: 724, }, D { l: 12, t: 10, i: 444, }, D { l: 13, t: 10, i: 354, }, D { l: 18, t: 10, i: 32, }, D { l: 23, t: 10, i: 24, }, D { l: 23, t: 10, i: 31, }, D { l: 152, t: 10, i: 5, }, D { l: 4, t: 11, i: 710, }, D { l: 134, t: 11, i: 606, }, D { l: 134, t: 0, i: 744, }, D { l: 134, t: 10, i: 382, }, D { l: 133, t: 11, i: 145, }, D { l: 4, t: 10, i: 329, }, D { l: 7, t: 11, i: 884, }, D { l: 140, t: 11, i: 124, }, D { l: 4, t: 11, i: 467, }, D { l: 5, t: 11, i: 405, }, D { l: 134, t: 11, i: 544, }, D { l: 9, t: 10, i: 846, }, D { l: 138, t: 10, i: 827, }, D { l: 133, t: 0, i: 624, }, D { l: 9, t: 11, i: 372, }, D { l: 15, t: 11, i: 2 }, D { l: 19, t: 11, i: 10, }, D { l: 147, t: 11, i: 18, }, D { l: 4, t: 11, i: 387, }, D { l: 135, t: 11, i: 1288, }, D { l: 5, t: 0, i: 783 }, D { l: 7, t: 0, i: 1998, }, D { l: 135, t: 0, i: 2047, }, D { l: 132, t: 10, i: 906, }, D { l: 136, t: 10, i: 366, }, D { l: 135, t: 11, i: 550, }, D { l: 4, t: 10, i: 123, }, D { l: 4, t: 10, i: 649, }, D { l: 5, t: 10, i: 605, }, D { l: 7, t: 10, i: 1509, }, D { l: 136, t: 10, i: 36, }, D { l: 134, t: 0, i: 1125, }, D { l: 132, t: 0, i: 594, }, D { l: 133, t: 10, i: 767, }, D { l: 135, t: 11, i: 1227, }, D { l: 136, t: 11, i: 467, }, D { l: 4, t: 11, i: 576, }, D { l: 135, t: 11, i: 1263, }, D { l: 4, t: 0, i: 268 }, D { l: 7, t: 0, i: 1534, }, D { l: 135, t: 11, i: 1534, }, D { l: 4, t: 10, i: 273, }, D { l: 5, t: 10, i: 658, }, D { l: 5, t: 11, i: 919, }, D { l: 5, t: 10, i: 995, }, D { l: 134, t: 11, i: 1673, }, D { l: 133, t: 0, i: 563, }, D { l: 134, t: 10, i: 72, }, D { l: 135, t: 10, i: 1345, }, D { l: 4, t: 11, i: 82 }, D { l: 5, t: 11, i: 333, }, D { l: 5, t: 11, i: 904, }, D { l: 6, t: 11, i: 207, }, D { l: 7, t: 11, i: 325, }, D { l: 7, t: 11, i: 1726, }, D { l: 8, t: 11, i: 101, }, D { l: 10, t: 11, i: 778, }, D { l: 139, t: 11, i: 220, }, D { l: 5, t: 0, i: 37 }, D { l: 6, t: 0, i: 39 }, D { l: 6, t: 0, i: 451 }, D { l: 7, t: 0, i: 218 }, D { l: 7, t: 0, i: 667 }, D { l: 7, t: 0, i: 1166, }, D { l: 7, t: 0, i: 1687, }, D { l: 8, t: 0, i: 662 }, D { l: 16, t: 0, i: 2 }, D { l: 133, t: 10, i: 589, }, D { l: 134, t: 0, i: 1332, }, D { l: 133, t: 11, i: 903, }, D { l: 134, t: 0, i: 508, }, D { l: 5, t: 10, i: 117, }, D { l: 6, t: 10, i: 514, }, D { l: 6, t: 10, i: 541, }, D { l: 7, t: 10, i: 1164, }, D { l: 7, t: 10, i: 1436, }, D { l: 8, t: 10, i: 220, }, D { l: 8, t: 10, i: 648, }, D { l: 10, t: 10, i: 688, }, D { l: 11, t: 10, i: 560, }, D { l: 140, t: 11, i: 147, }, D { l: 6, t: 11, i: 555, }, D { l: 135, t: 11, i: 485, }, D { l: 133, t: 10, i: 686, }, D { l: 7, t: 0, i: 453 }, D { l: 7, t: 0, i: 635 }, D { l: 7, t: 0, i: 796 }, D { l: 8, t: 0, i: 331 }, D { l: 9, t: 0, i: 330 }, D { l: 9, t: 0, i: 865 }, D { l: 10, t: 0, i: 119, }, D { l: 10, t: 0, i: 235, }, D { l: 11, t: 0, i: 111, }, D { l: 11, t: 0, i: 129, }, D { l: 11, t: 0, i: 240, }, D { l: 12, t: 0, i: 31 }, D { l: 12, t: 0, i: 66 }, D { l: 12, t: 0, i: 222, }, D { l: 12, t: 0, i: 269, }, D { l: 12, t: 0, i: 599, }, D { l: 12, t: 0, i: 684, }, D { l: 12, t: 0, i: 689, }, D { l: 12, t: 0, i: 691, }, D { l: 142, t: 0, i: 345, }, D { l: 135, t: 0, i: 1834, }, D { l: 4, t: 11, i: 705, }, D { l: 7, t: 11, i: 615, }, D { l: 138, t: 11, i: 251, }, D { l: 136, t: 11, i: 345, }, D { l: 137, t: 0, i: 527, }, D { l: 6, t: 0, i: 98 }, D { l: 7, t: 0, i: 702 }, D { l: 135, t: 0, i: 991, }, D { l: 11, t: 0, i: 576, }, D { l: 14, t: 0, i: 74 }, D { l: 7, t: 10, i: 196, }, D { l: 10, t: 10, i: 765, }, D { l: 11, t: 10, i: 347, }, D { l: 11, t: 10, i: 552, }, D { l: 11, t: 10, i: 790, }, D { l: 12, t: 10, i: 263, }, D { l: 13, t: 10, i: 246, }, D { l: 13, t: 10, i: 270, }, D { l: 13, t: 10, i: 395, }, D { l: 14, t: 10, i: 176, }, D { l: 14, t: 10, i: 190, }, D { l: 14, t: 10, i: 398, }, D { l: 14, t: 10, i: 412, }, D { l: 15, t: 10, i: 32, }, D { l: 15, t: 10, i: 63, }, D { l: 16, t: 10, i: 88, }, D { l: 147, t: 10, i: 105, }, D { l: 134, t: 11, i: 90, }, D { l: 13, t: 0, i: 84 }, D { l: 141, t: 0, i: 122, }, D { l: 6, t: 0, i: 37 }, D { l: 7, t: 0, i: 299 }, D { l: 7, t: 0, i: 1666, }, D { l: 8, t: 0, i: 195 }, D { l: 8, t: 0, i: 316 }, D { l: 9, t: 0, i: 178 }, D { l: 9, t: 0, i: 276 }, D { l: 9, t: 0, i: 339 }, D { l: 9, t: 0, i: 536 }, D { l: 10, t: 0, i: 102, }, D { l: 10, t: 0, i: 362, }, D { l: 10, t: 0, i: 785, }, D { l: 11, t: 0, i: 55 }, D { l: 11, t: 0, i: 149, }, D { l: 11, t: 0, i: 773, }, D { l: 13, t: 0, i: 416, }, D { l: 13, t: 0, i: 419, }, D { l: 14, t: 0, i: 38 }, D { l: 14, t: 0, i: 41 }, D { l: 142, t: 0, i: 210, }, D { l: 5, t: 10, i: 381, }, D { l: 135, t: 10, i: 1792, }, D { l: 7, t: 11, i: 813, }, D { l: 12, t: 11, i: 497, }, D { l: 141, t: 11, i: 56, }, D { l: 7, t: 10, i: 616, }, D { l: 138, t: 10, i: 413, }, D { l: 133, t: 0, i: 645, }, D { l: 6, t: 11, i: 125, }, D { l: 135, t: 11, i: 1277, }, D { l: 132, t: 0, i: 290, }, D { l: 6, t: 0, i: 70 }, D { l: 7, t: 0, i: 1292, }, D { l: 10, t: 0, i: 762, }, D { l: 139, t: 0, i: 288, }, D { l: 6, t: 10, i: 120, }, D { l: 7, t: 10, i: 1188, }, D { l: 7, t: 10, i: 1710, }, D { l: 8, t: 10, i: 286, }, D { l: 9, t: 10, i: 667, }, D { l: 11, t: 10, i: 592, }, D { l: 139, t: 10, i: 730, }, D { l: 135, t: 11, i: 1784, }, D { l: 7, t: 0, i: 1315, }, D { l: 135, t: 11, i: 1315, }, D { l: 134, t: 0, i: 1955, }, D { l: 135, t: 10, i: 1146, }, D { l: 7, t: 0, i: 131 }, D { l: 7, t: 0, i: 422 }, D { l: 8, t: 0, i: 210 }, D { l: 140, t: 0, i: 573, }, D { l: 4, t: 10, i: 352, }, D { l: 135, t: 10, i: 687, }, D { l: 139, t: 0, i: 797, }, D { l: 143, t: 0, i: 38, }, D { l: 14, t: 0, i: 179, }, D { l: 15, t: 0, i: 151, }, D { l: 150, t: 0, i: 11, }, D { l: 7, t: 0, i: 488 }, D { l: 4, t: 10, i: 192, }, D { l: 5, t: 10, i: 49 }, D { l: 6, t: 10, i: 200, }, D { l: 6, t: 10, i: 293, }, D { l: 134, t: 10, i: 1696, }, D { l: 132, t: 0, i: 936, }, D { l: 135, t: 11, i: 703, }, D { l: 6, t: 11, i: 160, }, D { l: 7, t: 11, i: 1106, }, D { l: 9, t: 11, i: 770, }, D { l: 10, t: 11, i: 618, }, D { l: 11, t: 11, i: 112, }, D { l: 140, t: 11, i: 413, }, D { l: 5, t: 0, i: 453 }, D { l: 134, t: 0, i: 441, }, D { l: 135, t: 0, i: 595, }, D { l: 132, t: 10, i: 650, }, D { l: 132, t: 10, i: 147, }, D { l: 6, t: 0, i: 991 }, D { l: 6, t: 0, i: 1182, }, D { l: 12, t: 11, i: 271, }, D { l: 145, t: 11, i: 109, }, D { l: 133, t: 10, i: 934, }, D { l: 140, t: 11, i: 221, }, D { l: 132, t: 0, i: 653, }, D { l: 7, t: 0, i: 505 }, D { l: 135, t: 0, i: 523, }, D { l: 134, t: 0, i: 903, }, D { l: 135, t: 11, i: 479, }, D { l: 7, t: 11, i: 304, }, D { l: 9, t: 11, i: 646, }, D { l: 9, t: 11, i: 862, }, D { l: 10, t: 11, i: 262, }, D { l: 11, t: 11, i: 696, }, D { l: 12, t: 11, i: 208, }, D { l: 15, t: 11, i: 79, }, D { l: 147, t: 11, i: 108, }, D { l: 146, t: 0, i: 80, }, D { l: 135, t: 11, i: 981, }, D { l: 142, t: 0, i: 432, }, D { l: 132, t: 0, i: 314, }, D { l: 137, t: 11, i: 152, }, D { l: 7, t: 0, i: 1368, }, D { l: 8, t: 0, i: 232 }, D { l: 8, t: 0, i: 361 }, D { l: 10, t: 0, i: 682, }, D { l: 138, t: 0, i: 742, }, D { l: 135, t: 11, i: 1586, }, D { l: 9, t: 0, i: 534 }, D { l: 4, t: 11, i: 434, }, D { l: 11, t: 11, i: 663, }, D { l: 12, t: 11, i: 210, }, D { l: 13, t: 11, i: 166, }, D { l: 13, t: 11, i: 310, }, D { l: 14, t: 11, i: 373, }, D { l: 147, t: 11, i: 43, }, D { l: 7, t: 11, i: 1091, }, D { l: 135, t: 11, i: 1765, }, D { l: 6, t: 11, i: 550, }, D { l: 135, t: 11, i: 652, }, D { l: 137, t: 0, i: 27, }, D { l: 142, t: 0, i: 12, }, D { l: 4, t: 10, i: 637, }, D { l: 5, t: 11, i: 553, }, D { l: 7, t: 11, i: 766, }, D { l: 138, t: 11, i: 824, }, D { l: 7, t: 11, i: 737, }, D { l: 8, t: 11, i: 298, }, D { l: 136, t: 11, i: 452, }, D { l: 7, t: 0, i: 736 }, D { l: 139, t: 0, i: 264, }, D { l: 134, t: 0, i: 1657, }, D { l: 133, t: 11, i: 292, }, D { l: 138, t: 11, i: 135, }, D { l: 6, t: 0, i: 844 }, D { l: 134, t: 0, i: 1117, }, D { l: 135, t: 0, i: 127, }, D { l: 9, t: 10, i: 867, }, D { l: 138, t: 10, i: 837, }, D { l: 6, t: 0, i: 1184, }, D { l: 134, t: 0, i: 1208, }, D { l: 134, t: 0, i: 1294, }, D { l: 136, t: 0, i: 364, }, D { l: 6, t: 0, i: 1415, }, D { l: 7, t: 0, i: 1334, }, D { l: 11, t: 0, i: 125, }, D { l: 6, t: 10, i: 170, }, D { l: 7, t: 11, i: 393, }, D { l: 8, t: 10, i: 395, }, D { l: 8, t: 10, i: 487, }, D { l: 10, t: 11, i: 603, }, D { l: 11, t: 11, i: 206, }, D { l: 141, t: 10, i: 147, }, D { l: 137, t: 11, i: 748, }, D { l: 4, t: 11, i: 912, }, D { l: 137, t: 11, i: 232, }, D { l: 4, t: 10, i: 535, }, D { l: 136, t: 10, i: 618, }, D { l: 137, t: 0, i: 792, }, D { l: 7, t: 11, i: 1973, }, D { l: 136, t: 11, i: 716, }, D { l: 135, t: 11, i: 98, }, D { l: 5, t: 0, i: 909 }, D { l: 9, t: 0, i: 849 }, D { l: 138, t: 0, i: 805, }, D { l: 4, t: 0, i: 630 }, D { l: 132, t: 0, i: 699, }, D { l: 5, t: 11, i: 733, }, D { l: 14, t: 11, i: 103, }, D { l: 150, t: 10, i: 23, }, D { l: 12, t: 11, i: 158, }, D { l: 18, t: 11, i: 8 }, D { l: 19, t: 11, i: 62, }, D { l: 20, t: 11, i: 6 }, D { l: 22, t: 11, i: 4 }, D { l: 23, t: 11, i: 2 }, D { l: 151, t: 11, i: 9, }, D { l: 132, t: 0, i: 968, }, D { l: 132, t: 10, i: 778, }, D { l: 132, t: 10, i: 46, }, D { l: 5, t: 10, i: 811, }, D { l: 6, t: 10, i: 1679, }, D { l: 6, t: 10, i: 1714, }, D { l: 135, t: 10, i: 2032, }, D { l: 6, t: 0, i: 1446, }, D { l: 7, t: 10, i: 1458, }, D { l: 9, t: 10, i: 407, }, D { l: 139, t: 10, i: 15, }, D { l: 7, t: 0, i: 206 }, D { l: 7, t: 0, i: 397 }, D { l: 7, t: 0, i: 621 }, D { l: 7, t: 0, i: 640 }, D { l: 8, t: 0, i: 124 }, D { l: 8, t: 0, i: 619 }, D { l: 9, t: 0, i: 305 }, D { l: 9, t: 0, i: 643 }, D { l: 10, t: 0, i: 264, }, D { l: 10, t: 0, i: 628, }, D { l: 11, t: 0, i: 40 }, D { l: 12, t: 0, i: 349, }, D { l: 13, t: 0, i: 134, }, D { l: 13, t: 0, i: 295, }, D { l: 14, t: 0, i: 155, }, D { l: 15, t: 0, i: 120, }, D { l: 18, t: 0, i: 105, }, D { l: 6, t: 10, i: 34 }, D { l: 7, t: 10, i: 1089, }, D { l: 8, t: 10, i: 708, }, D { l: 8, t: 10, i: 721, }, D { l: 9, t: 10, i: 363, }, D { l: 148, t: 10, i: 98, }, D { l: 4, t: 0, i: 262 }, D { l: 5, t: 0, i: 641 }, D { l: 135, t: 0, i: 342, }, D { l: 137, t: 11, i: 72, }, D { l: 4, t: 0, i: 99 }, D { l: 6, t: 0, i: 250 }, D { l: 6, t: 0, i: 346 }, D { l: 8, t: 0, i: 127 }, D { l: 138, t: 0, i: 81, }, D { l: 132, t: 0, i: 915, }, D { l: 5, t: 0, i: 75 }, D { l: 9, t: 0, i: 517 }, D { l: 10, t: 0, i: 470, }, D { l: 12, t: 0, i: 155, }, D { l: 141, t: 0, i: 224, }, D { l: 132, t: 10, i: 462, }, D { l: 11, t: 11, i: 600, }, D { l: 11, t: 11, i: 670, }, D { l: 141, t: 11, i: 245, }, D { l: 142, t: 0, i: 83, }, D { l: 5, t: 10, i: 73 }, D { l: 6, t: 10, i: 23 }, D { l: 134, t: 10, i: 338, }, D { l: 6, t: 0, i: 1031, }, D { l: 139, t: 11, i: 923, }, D { l: 7, t: 11, i: 164, }, D { l: 7, t: 11, i: 1571, }, D { l: 9, t: 11, i: 107, }, D { l: 140, t: 11, i: 225, }, D { l: 134, t: 0, i: 1470, }, D { l: 133, t: 0, i: 954, }, D { l: 6, t: 0, i: 304 }, D { l: 8, t: 0, i: 418 }, D { l: 10, t: 0, i: 345, }, D { l: 11, t: 0, i: 341, }, D { l: 139, t: 0, i: 675, }, D { l: 9, t: 0, i: 410 }, D { l: 139, t: 0, i: 425, }, D { l: 4, t: 11, i: 27 }, D { l: 5, t: 11, i: 484, }, D { l: 5, t: 11, i: 510, }, D { l: 6, t: 11, i: 434, }, D { l: 7, t: 11, i: 1000, }, D { l: 7, t: 11, i: 1098, }, D { l: 8, t: 11, i: 2 }, D { l: 136, t: 11, i: 200, }, D { l: 134, t: 0, i: 734, }, D { l: 140, t: 11, i: 257, }, D { l: 7, t: 10, i: 725, }, D { l: 8, t: 10, i: 498, }, D { l: 139, t: 10, i: 268, }, D { l: 134, t: 0, i: 1822, }, D { l: 135, t: 0, i: 1798, }, D { l: 135, t: 10, i: 773, }, D { l: 132, t: 11, i: 460, }, D { l: 4, t: 11, i: 932, }, D { l: 133, t: 11, i: 891, }, D { l: 134, t: 0, i: 14, }, D { l: 132, t: 10, i: 583, }, D { l: 7, t: 10, i: 1462, }, D { l: 8, t: 11, i: 625, }, D { l: 139, t: 10, i: 659, }, D { l: 5, t: 0, i: 113 }, D { l: 6, t: 0, i: 243 }, D { l: 6, t: 0, i: 1708, }, D { l: 7, t: 0, i: 1865, }, D { l: 11, t: 0, i: 161, }, D { l: 16, t: 0, i: 37 }, D { l: 17, t: 0, i: 99 }, D { l: 133, t: 10, i: 220, }, D { l: 134, t: 11, i: 76, }, D { l: 5, t: 11, i: 461, }, D { l: 135, t: 11, i: 1925, }, D { l: 140, t: 0, i: 69, }, D { l: 8, t: 11, i: 92 }, D { l: 137, t: 11, i: 221, }, D { l: 139, t: 10, i: 803, }, D { l: 132, t: 10, i: 544, }, D { l: 4, t: 0, i: 274 }, D { l: 134, t: 0, i: 922, }, D { l: 132, t: 0, i: 541, }, D { l: 5, t: 0, i: 627 }, D { l: 6, t: 10, i: 437, }, D { l: 6, t: 10, i: 564, }, D { l: 11, t: 10, i: 181, }, D { l: 141, t: 10, i: 183, }, D { l: 135, t: 10, i: 1192, }, D { l: 7, t: 0, i: 166 }, D { l: 132, t: 11, i: 763, }, D { l: 133, t: 11, i: 253, }, D { l: 134, t: 0, i: 849, }, D { l: 9, t: 11, i: 73 }, D { l: 10, t: 11, i: 110, }, D { l: 14, t: 11, i: 185, }, D { l: 145, t: 11, i: 119, }, D { l: 5, t: 11, i: 212, }, D { l: 12, t: 11, i: 35, }, D { l: 141, t: 11, i: 382, }, D { l: 133, t: 0, i: 717, }, D { l: 137, t: 0, i: 304, }, D { l: 136, t: 0, i: 600, }, D { l: 133, t: 0, i: 654, }, D { l: 6, t: 0, i: 273 }, D { l: 10, t: 0, i: 188, }, D { l: 13, t: 0, i: 377, }, D { l: 146, t: 0, i: 77, }, D { l: 4, t: 10, i: 790, }, D { l: 5, t: 10, i: 273, }, D { l: 134, t: 10, i: 394, }, D { l: 132, t: 0, i: 543, }, D { l: 135, t: 0, i: 410, }, D { l: 11, t: 0, i: 98 }, D { l: 11, t: 0, i: 524, }, D { l: 141, t: 0, i: 87, }, D { l: 132, t: 0, i: 941, }, D { l: 135, t: 11, i: 1175, }, D { l: 4, t: 0, i: 250 }, D { l: 7, t: 0, i: 1612, }, D { l: 11, t: 0, i: 186, }, D { l: 12, t: 0, i: 133, }, D { l: 6, t: 10, i: 127, }, D { l: 7, t: 10, i: 1511, }, D { l: 8, t: 10, i: 613, }, D { l: 12, t: 10, i: 495, }, D { l: 12, t: 10, i: 586, }, D { l: 12, t: 10, i: 660, }, D { l: 12, t: 10, i: 668, }, D { l: 14, t: 10, i: 385, }, D { l: 15, t: 10, i: 118, }, D { l: 17, t: 10, i: 20, }, D { l: 146, t: 10, i: 98, }, D { l: 6, t: 0, i: 1785, }, D { l: 133, t: 11, i: 816, }, D { l: 134, t: 0, i: 1339, }, D { l: 7, t: 0, i: 961 }, D { l: 7, t: 0, i: 1085, }, D { l: 7, t: 0, i: 1727, }, D { l: 8, t: 0, i: 462 }, D { l: 6, t: 10, i: 230, }, D { l: 135, t: 11, i: 1727, }, D { l: 9, t: 0, i: 636 }, D { l: 135, t: 10, i: 1954, }, D { l: 132, t: 0, i: 780, }, D { l: 5, t: 11, i: 869, }, D { l: 5, t: 11, i: 968, }, D { l: 6, t: 11, i: 1626, }, D { l: 8, t: 11, i: 734, }, D { l: 136, t: 11, i: 784, }, D { l: 4, t: 11, i: 542, }, D { l: 6, t: 11, i: 1716, }, D { l: 6, t: 11, i: 1727, }, D { l: 7, t: 11, i: 1082, }, D { l: 7, t: 11, i: 1545, }, D { l: 8, t: 11, i: 56 }, D { l: 8, t: 11, i: 118, }, D { l: 8, t: 11, i: 412, }, D { l: 8, t: 11, i: 564, }, D { l: 9, t: 11, i: 888, }, D { l: 9, t: 11, i: 908, }, D { l: 10, t: 11, i: 50, }, D { l: 10, t: 11, i: 423, }, D { l: 11, t: 11, i: 685, }, D { l: 11, t: 11, i: 697, }, D { l: 11, t: 11, i: 933, }, D { l: 12, t: 11, i: 299, }, D { l: 13, t: 11, i: 126, }, D { l: 13, t: 11, i: 136, }, D { l: 13, t: 11, i: 170, }, D { l: 141, t: 11, i: 190, }, D { l: 134, t: 11, i: 226, }, D { l: 4, t: 11, i: 232, }, D { l: 9, t: 11, i: 202, }, D { l: 10, t: 11, i: 474, }, D { l: 140, t: 11, i: 433, }, D { l: 137, t: 11, i: 500, }, D { l: 5, t: 0, i: 529 }, D { l: 136, t: 10, i: 68, }, D { l: 132, t: 10, i: 654, }, D { l: 4, t: 10, i: 156, }, D { l: 7, t: 10, i: 998, }, D { l: 7, t: 10, i: 1045, }, D { l: 7, t: 10, i: 1860, }, D { l: 9, t: 10, i: 48 }, D { l: 9, t: 10, i: 692, }, D { l: 11, t: 10, i: 419, }, D { l: 139, t: 10, i: 602, }, D { l: 7, t: 0, i: 1276, }, D { l: 8, t: 0, i: 474 }, D { l: 9, t: 0, i: 652 }, D { l: 6, t: 11, i: 108, }, D { l: 7, t: 11, i: 1003, }, D { l: 7, t: 11, i: 1181, }, D { l: 136, t: 11, i: 343, }, D { l: 7, t: 11, i: 1264, }, D { l: 7, t: 11, i: 1678, }, D { l: 11, t: 11, i: 945, }, D { l: 12, t: 11, i: 341, }, D { l: 12, t: 11, i: 471, }, D { l: 140, t: 11, i: 569, }, D { l: 134, t: 11, i: 1712, }, D { l: 5, t: 0, i: 948 }, D { l: 12, t: 0, i: 468, }, D { l: 19, t: 0, i: 96 }, D { l: 148, t: 0, i: 24, }, D { l: 4, t: 11, i: 133, }, D { l: 7, t: 11, i: 711, }, D { l: 7, t: 11, i: 1298, }, D { l: 7, t: 11, i: 1585, }, D { l: 135, t: 11, i: 1929, }, D { l: 6, t: 0, i: 753 }, D { l: 140, t: 0, i: 657, }, D { l: 139, t: 0, i: 941, }, D { l: 6, t: 11, i: 99 }, D { l: 7, t: 11, i: 1808, }, D { l: 145, t: 11, i: 57, }, D { l: 6, t: 11, i: 574, }, D { l: 7, t: 11, i: 428, }, D { l: 7, t: 11, i: 1250, }, D { l: 10, t: 11, i: 669, }, D { l: 11, t: 11, i: 485, }, D { l: 11, t: 11, i: 840, }, D { l: 12, t: 11, i: 300, }, D { l: 142, t: 11, i: 250, }, D { l: 4, t: 0, i: 532 }, D { l: 5, t: 0, i: 706 }, D { l: 135, t: 0, i: 662, }, D { l: 5, t: 0, i: 837 }, D { l: 6, t: 0, i: 1651, }, D { l: 139, t: 0, i: 985, }, D { l: 7, t: 0, i: 1861, }, D { l: 9, t: 10, i: 197, }, D { l: 10, t: 10, i: 300, }, D { l: 12, t: 10, i: 473, }, D { l: 13, t: 10, i: 90, }, D { l: 141, t: 10, i: 405, }, D { l: 137, t: 11, i: 252, }, D { l: 6, t: 11, i: 323, }, D { l: 135, t: 11, i: 1564, }, D { l: 4, t: 0, i: 330 }, D { l: 4, t: 0, i: 863 }, D { l: 7, t: 0, i: 933 }, D { l: 7, t: 0, i: 2012, }, D { l: 8, t: 0, i: 292 }, D { l: 7, t: 11, i: 461, }, D { l: 8, t: 11, i: 775, }, D { l: 138, t: 11, i: 435, }, D { l: 132, t: 10, i: 606, }, D { l: 4, t: 11, i: 655, }, D { l: 7, t: 11, i: 850, }, D { l: 17, t: 11, i: 75, }, D { l: 146, t: 11, i: 137, }, D { l: 135, t: 0, i: 767, }, D { l: 7, t: 10, i: 1978, }, D { l: 136, t: 10, i: 676, }, D { l: 132, t: 0, i: 641, }, D { l: 135, t: 11, i: 1559, }, D { l: 134, t: 0, i: 1233, }, D { l: 137, t: 0, i: 242, }, D { l: 17, t: 0, i: 114, }, D { l: 4, t: 10, i: 361, }, D { l: 133, t: 10, i: 315, }, D { l: 137, t: 0, i: 883, }, D { l: 132, t: 10, i: 461, }, D { l: 138, t: 0, i: 274, }, D { l: 134, t: 0, i: 2008, }, D { l: 134, t: 0, i: 1794, }, D { l: 4, t: 0, i: 703 }, D { l: 135, t: 0, i: 207, }, D { l: 12, t: 0, i: 285, }, D { l: 132, t: 10, i: 472, }, D { l: 132, t: 0, i: 571, }, D { l: 5, t: 0, i: 873 }, D { l: 5, t: 0, i: 960 }, D { l: 8, t: 0, i: 823 }, D { l: 9, t: 0, i: 881 }, D { l: 136, t: 11, i: 577, }, D { l: 7, t: 0, i: 617 }, D { l: 10, t: 0, i: 498, }, D { l: 11, t: 0, i: 501, }, D { l: 12, t: 0, i: 16 }, D { l: 140, t: 0, i: 150, }, D { l: 138, t: 10, i: 747, }, D { l: 132, t: 0, i: 431, }, D { l: 133, t: 10, i: 155, }, D { l: 11, t: 0, i: 283, }, D { l: 11, t: 0, i: 567, }, D { l: 7, t: 10, i: 163, }, D { l: 8, t: 10, i: 319, }, D { l: 9, t: 10, i: 402, }, D { l: 10, t: 10, i: 24, }, D { l: 10, t: 10, i: 681, }, D { l: 11, t: 10, i: 200, }, D { l: 12, t: 10, i: 253, }, D { l: 12, t: 10, i: 410, }, D { l: 142, t: 10, i: 219, }, D { l: 4, t: 11, i: 413, }, D { l: 5, t: 11, i: 677, }, D { l: 8, t: 11, i: 432, }, D { l: 140, t: 11, i: 280, }, D { l: 9, t: 0, i: 401 }, D { l: 5, t: 10, i: 475, }, D { l: 7, t: 10, i: 1780, }, D { l: 11, t: 10, i: 297, }, D { l: 11, t: 10, i: 558, }, D { l: 14, t: 10, i: 322, }, D { l: 147, t: 10, i: 76, }, D { l: 6, t: 0, i: 781 }, D { l: 9, t: 0, i: 134 }, D { l: 10, t: 0, i: 2 }, D { l: 10, t: 0, i: 27 }, D { l: 10, t: 0, i: 333, }, D { l: 11, t: 0, i: 722, }, D { l: 143, t: 0, i: 1 }, D { l: 5, t: 0, i: 33 }, D { l: 6, t: 0, i: 470 }, D { l: 139, t: 0, i: 424, }, D { l: 135, t: 0, i: 2006, }, D { l: 12, t: 0, i: 783, }, D { l: 135, t: 10, i: 1956, }, D { l: 136, t: 0, i: 274, }, D { l: 135, t: 0, i: 1882, }, D { l: 132, t: 0, i: 794, }, D { l: 135, t: 0, i: 1848, }, D { l: 5, t: 10, i: 944, }, D { l: 134, t: 10, i: 1769, }, D { l: 6, t: 0, i: 47 }, D { l: 7, t: 0, i: 90 }, D { l: 7, t: 0, i: 664 }, D { l: 7, t: 0, i: 830 }, D { l: 7, t: 0, i: 1380, }, D { l: 7, t: 0, i: 2025, }, D { l: 8, t: 0, i: 448 }, D { l: 136, t: 0, i: 828, }, D { l: 132, t: 10, i: 144, }, D { l: 134, t: 0, i: 1199, }, D { l: 4, t: 11, i: 395, }, D { l: 139, t: 11, i: 762, }, D { l: 135, t: 11, i: 1504, }, D { l: 9, t: 0, i: 417 }, D { l: 137, t: 0, i: 493, }, D { l: 9, t: 11, i: 174, }, D { l: 10, t: 11, i: 164, }, D { l: 11, t: 11, i: 440, }, D { l: 11, t: 11, i: 841, }, D { l: 143, t: 11, i: 98, }, D { l: 134, t: 11, i: 426, }, D { l: 139, t: 11, i: 1002, }, D { l: 134, t: 0, i: 295, }, D { l: 134, t: 0, i: 816, }, D { l: 6, t: 10, i: 247, }, D { l: 137, t: 10, i: 555, }, D { l: 133, t: 0, i: 1019, }, D { l: 4, t: 0, i: 620 }, D { l: 5, t: 11, i: 476, }, D { l: 10, t: 10, i: 280, }, D { l: 138, t: 10, i: 797, }, D { l: 139, t: 0, i: 464, }, D { l: 5, t: 11, i: 76 }, D { l: 6, t: 11, i: 458, }, D { l: 6, t: 11, i: 497, }, D { l: 7, t: 11, i: 764, }, D { l: 7, t: 11, i: 868, }, D { l: 9, t: 11, i: 658, }, D { l: 10, t: 11, i: 594, }, D { l: 11, t: 11, i: 173, }, D { l: 11, t: 11, i: 566, }, D { l: 12, t: 11, i: 20, }, D { l: 12, t: 11, i: 338, }, D { l: 141, t: 11, i: 200, }, D { l: 134, t: 0, i: 208, }, D { l: 4, t: 11, i: 526, }, D { l: 7, t: 11, i: 1029, }, D { l: 135, t: 11, i: 1054, }, D { l: 132, t: 11, i: 636, }, D { l: 6, t: 11, i: 233, }, D { l: 7, t: 11, i: 660, }, D { l: 7, t: 11, i: 1124, }, D { l: 17, t: 11, i: 31, }, D { l: 19, t: 11, i: 22, }, D { l: 151, t: 11, i: 14, }, D { l: 10, t: 0, i: 442, }, D { l: 133, t: 10, i: 428, }, D { l: 10, t: 0, i: 930, }, D { l: 140, t: 0, i: 778, }, D { l: 6, t: 0, i: 68 }, D { l: 7, t: 0, i: 448 }, D { l: 7, t: 0, i: 1629, }, D { l: 7, t: 0, i: 1769, }, D { l: 7, t: 0, i: 1813, }, D { l: 8, t: 0, i: 442 }, D { l: 8, t: 0, i: 516 }, D { l: 9, t: 0, i: 710 }, D { l: 10, t: 0, i: 282, }, D { l: 10, t: 0, i: 722, }, D { l: 7, t: 10, i: 1717, }, D { l: 138, t: 10, i: 546, }, D { l: 134, t: 0, i: 1128, }, D { l: 11, t: 0, i: 844, }, D { l: 12, t: 0, i: 104, }, D { l: 140, t: 0, i: 625, }, D { l: 4, t: 11, i: 432, }, D { l: 135, t: 11, i: 824, }, D { l: 138, t: 10, i: 189, }, D { l: 133, t: 0, i: 787, }, D { l: 133, t: 10, i: 99, }, D { l: 4, t: 11, i: 279, }, D { l: 7, t: 11, i: 301, }, D { l: 137, t: 11, i: 362, }, D { l: 8, t: 0, i: 491 }, D { l: 4, t: 10, i: 397, }, D { l: 136, t: 10, i: 555, }, D { l: 4, t: 11, i: 178, }, D { l: 133, t: 11, i: 399, }, D { l: 134, t: 0, i: 711, }, D { l: 144, t: 0, i: 9 }, D { l: 4, t: 0, i: 403 }, D { l: 5, t: 0, i: 441 }, D { l: 7, t: 0, i: 450 }, D { l: 10, t: 0, i: 840, }, D { l: 11, t: 0, i: 101, }, D { l: 12, t: 0, i: 193, }, D { l: 141, t: 0, i: 430, }, D { l: 135, t: 11, i: 1246, }, D { l: 12, t: 10, i: 398, }, D { l: 20, t: 10, i: 39, }, D { l: 21, t: 10, i: 11, }, D { l: 150, t: 10, i: 41, }, D { l: 4, t: 10, i: 485, }, D { l: 7, t: 10, i: 353, }, D { l: 135, t: 10, i: 1523, }, D { l: 6, t: 10, i: 366, }, D { l: 7, t: 10, i: 1384, }, D { l: 7, t: 10, i: 1601, }, D { l: 135, t: 11, i: 1912, }, D { l: 7, t: 0, i: 396 }, D { l: 10, t: 0, i: 160, }, D { l: 135, t: 11, i: 396, }, D { l: 137, t: 10, i: 282, }, D { l: 134, t: 11, i: 1692, }, D { l: 4, t: 10, i: 157, }, D { l: 5, t: 10, i: 471, }, D { l: 6, t: 11, i: 202, }, D { l: 10, t: 11, i: 448, }, D { l: 11, t: 11, i: 208, }, D { l: 12, t: 11, i: 360, }, D { l: 17, t: 11, i: 117, }, D { l: 17, t: 11, i: 118, }, D { l: 18, t: 11, i: 27, }, D { l: 148, t: 11, i: 67, }, D { l: 133, t: 0, i: 679, }, D { l: 137, t: 0, i: 326, }, D { l: 136, t: 10, i: 116, }, D { l: 7, t: 11, i: 872, }, D { l: 10, t: 11, i: 516, }, D { l: 139, t: 11, i: 167, }, D { l: 132, t: 11, i: 224, }, D { l: 5, t: 11, i: 546, }, D { l: 7, t: 11, i: 35 }, D { l: 8, t: 11, i: 11 }, D { l: 8, t: 11, i: 12 }, D { l: 9, t: 11, i: 315, }, D { l: 9, t: 11, i: 533, }, D { l: 10, t: 11, i: 802, }, D { l: 11, t: 11, i: 166, }, D { l: 12, t: 11, i: 525, }, D { l: 142, t: 11, i: 243, }, D { l: 7, t: 0, i: 1128, }, D { l: 135, t: 11, i: 1920, }, D { l: 5, t: 11, i: 241, }, D { l: 8, t: 11, i: 242, }, D { l: 9, t: 11, i: 451, }, D { l: 10, t: 11, i: 667, }, D { l: 11, t: 11, i: 598, }, D { l: 140, t: 11, i: 429, }, D { l: 6, t: 0, i: 737 }, D { l: 5, t: 10, i: 160, }, D { l: 7, t: 10, i: 363, }, D { l: 7, t: 10, i: 589, }, D { l: 10, t: 10, i: 170, }, D { l: 141, t: 10, i: 55, }, D { l: 135, t: 0, i: 1796, }, D { l: 142, t: 11, i: 254, }, D { l: 4, t: 0, i: 574 }, D { l: 7, t: 0, i: 350 }, D { l: 7, t: 0, i: 1024, }, D { l: 8, t: 0, i: 338 }, D { l: 9, t: 0, i: 677 }, D { l: 138, t: 0, i: 808, }, D { l: 134, t: 0, i: 1096, }, D { l: 137, t: 11, i: 516, }, D { l: 7, t: 0, i: 405 }, D { l: 10, t: 0, i: 491, }, D { l: 4, t: 10, i: 108, }, D { l: 4, t: 11, i: 366, }, D { l: 139, t: 10, i: 498, }, D { l: 11, t: 11, i: 337, }, D { l: 142, t: 11, i: 303, }, D { l: 134, t: 11, i: 1736, }, D { l: 7, t: 0, i: 1081, }, D { l: 140, t: 11, i: 364, }, D { l: 7, t: 10, i: 1005, }, D { l: 140, t: 10, i: 609, }, D { l: 7, t: 0, i: 1676, }, D { l: 4, t: 10, i: 895, }, D { l: 133, t: 10, i: 772, }, D { l: 135, t: 0, i: 2037, }, D { l: 6, t: 0, i: 1207, }, D { l: 11, t: 11, i: 916, }, D { l: 142, t: 11, i: 419, }, D { l: 14, t: 11, i: 140, }, D { l: 148, t: 11, i: 41, }, D { l: 6, t: 11, i: 331, }, D { l: 136, t: 11, i: 623, }, D { l: 9, t: 0, i: 944 }, D { l: 9, t: 0, i: 969 }, D { l: 9, t: 0, i: 1022, }, D { l: 12, t: 0, i: 913, }, D { l: 12, t: 0, i: 936, }, D { l: 15, t: 0, i: 177, }, D { l: 15, t: 0, i: 193, }, D { l: 4, t: 10, i: 926, }, D { l: 133, t: 10, i: 983, }, D { l: 5, t: 0, i: 354 }, D { l: 135, t: 11, i: 506, }, D { l: 8, t: 0, i: 598 }, D { l: 9, t: 0, i: 664 }, D { l: 138, t: 0, i: 441, }, D { l: 4, t: 11, i: 640, }, D { l: 133, t: 11, i: 513, }, D { l: 137, t: 0, i: 297, }, D { l: 132, t: 10, i: 538, }, D { l: 6, t: 10, i: 294, }, D { l: 7, t: 10, i: 1267, }, D { l: 136, t: 10, i: 624, }, D { l: 7, t: 0, i: 1772, }, D { l: 7, t: 11, i: 1888, }, D { l: 8, t: 11, i: 289, }, D { l: 11, t: 11, i: 45, }, D { l: 12, t: 11, i: 278, }, D { l: 140, t: 11, i: 537, }, D { l: 135, t: 10, i: 1325, }, D { l: 138, t: 0, i: 751, }, D { l: 141, t: 0, i: 37, }, D { l: 134, t: 0, i: 1828, }, D { l: 132, t: 10, i: 757, }, D { l: 132, t: 11, i: 394, }, D { l: 6, t: 0, i: 257 }, D { l: 135, t: 0, i: 1522, }, D { l: 4, t: 0, i: 582 }, D { l: 9, t: 0, i: 191 }, D { l: 135, t: 11, i: 1931, }, D { l: 7, t: 11, i: 574, }, D { l: 7, t: 11, i: 1719, }, D { l: 137, t: 11, i: 145, }, D { l: 132, t: 11, i: 658, }, D { l: 10, t: 0, i: 790, }, D { l: 132, t: 11, i: 369, }, D { l: 9, t: 11, i: 781, }, D { l: 10, t: 11, i: 144, }, D { l: 11, t: 11, i: 385, }, D { l: 13, t: 11, i: 161, }, D { l: 13, t: 11, i: 228, }, D { l: 13, t: 11, i: 268, }, D { l: 148, t: 11, i: 107, }, D { l: 8, t: 0, i: 469 }, D { l: 10, t: 0, i: 47 }, D { l: 136, t: 11, i: 374, }, D { l: 6, t: 0, i: 306 }, D { l: 7, t: 0, i: 1140, }, D { l: 7, t: 0, i: 1340, }, D { l: 8, t: 0, i: 133 }, D { l: 138, t: 0, i: 449, }, D { l: 139, t: 0, i: 1011, }, D { l: 7, t: 10, i: 1875, }, D { l: 139, t: 10, i: 124, }, D { l: 4, t: 11, i: 344, }, D { l: 6, t: 11, i: 498, }, D { l: 139, t: 11, i: 323, }, D { l: 137, t: 0, i: 299, }, D { l: 132, t: 0, i: 837, }, D { l: 133, t: 11, i: 906, }, D { l: 5, t: 0, i: 329 }, D { l: 8, t: 0, i: 260 }, D { l: 138, t: 0, i: 10, }, D { l: 134, t: 0, i: 1320, }, D { l: 4, t: 0, i: 657 }, D { l: 146, t: 0, i: 158, }, D { l: 135, t: 0, i: 1191, }, D { l: 152, t: 0, i: 7 }, D { l: 6, t: 0, i: 1939, }, D { l: 8, t: 0, i: 974 }, D { l: 138, t: 0, i: 996, }, D { l: 135, t: 0, i: 1665, }, D { l: 11, t: 11, i: 126, }, D { l: 139, t: 11, i: 287, }, D { l: 143, t: 0, i: 8 }, D { l: 14, t: 11, i: 149, }, D { l: 14, t: 11, i: 399, }, D { l: 143, t: 11, i: 57, }, D { l: 5, t: 0, i: 66 }, D { l: 7, t: 0, i: 1896, }, D { l: 136, t: 0, i: 288, }, D { l: 7, t: 0, i: 175 }, D { l: 10, t: 0, i: 494, }, D { l: 5, t: 10, i: 150, }, D { l: 8, t: 10, i: 603, }, D { l: 9, t: 10, i: 593, }, D { l: 9, t: 10, i: 634, }, D { l: 10, t: 10, i: 173, }, D { l: 11, t: 10, i: 462, }, D { l: 11, t: 10, i: 515, }, D { l: 13, t: 10, i: 216, }, D { l: 13, t: 10, i: 288, }, D { l: 142, t: 10, i: 400, }, D { l: 134, t: 0, i: 1643, }, D { l: 136, t: 11, i: 21, }, D { l: 4, t: 0, i: 21 }, D { l: 5, t: 0, i: 91 }, D { l: 5, t: 0, i: 648 }, D { l: 5, t: 0, i: 750 }, D { l: 5, t: 0, i: 781 }, D { l: 6, t: 0, i: 54 }, D { l: 6, t: 0, i: 112 }, D { l: 6, t: 0, i: 402 }, D { l: 6, t: 0, i: 1732, }, D { l: 7, t: 0, i: 315 }, D { l: 7, t: 0, i: 749 }, D { l: 7, t: 0, i: 1427, }, D { l: 7, t: 0, i: 1900, }, D { l: 9, t: 0, i: 78 }, D { l: 9, t: 0, i: 508 }, D { l: 10, t: 0, i: 611, }, D { l: 10, t: 0, i: 811, }, D { l: 11, t: 0, i: 510, }, D { l: 11, t: 0, i: 728, }, D { l: 13, t: 0, i: 36 }, D { l: 14, t: 0, i: 39 }, D { l: 16, t: 0, i: 83 }, D { l: 17, t: 0, i: 124, }, D { l: 148, t: 0, i: 30, }, D { l: 4, t: 0, i: 668 }, D { l: 136, t: 0, i: 570, }, D { l: 10, t: 0, i: 322, }, D { l: 10, t: 0, i: 719, }, D { l: 139, t: 0, i: 407, }, D { l: 135, t: 11, i: 1381, }, D { l: 136, t: 11, i: 193, }, D { l: 12, t: 10, i: 108, }, D { l: 141, t: 10, i: 291, }, D { l: 132, t: 11, i: 616, }, D { l: 136, t: 11, i: 692, }, D { l: 8, t: 0, i: 125 }, D { l: 8, t: 0, i: 369 }, D { l: 8, t: 0, i: 524 }, D { l: 10, t: 0, i: 486, }, D { l: 11, t: 0, i: 13 }, D { l: 11, t: 0, i: 381, }, D { l: 11, t: 0, i: 736, }, D { l: 11, t: 0, i: 766, }, D { l: 11, t: 0, i: 845, }, D { l: 13, t: 0, i: 114, }, D { l: 13, t: 0, i: 292, }, D { l: 142, t: 0, i: 47, }, D { l: 134, t: 0, i: 1247, }, D { l: 6, t: 0, i: 1684, }, D { l: 6, t: 0, i: 1731, }, D { l: 7, t: 0, i: 356 }, D { l: 8, t: 0, i: 54 }, D { l: 8, t: 0, i: 221 }, D { l: 9, t: 0, i: 225 }, D { l: 9, t: 0, i: 356 }, D { l: 10, t: 0, i: 77 }, D { l: 10, t: 0, i: 446, }, D { l: 10, t: 0, i: 731, }, D { l: 12, t: 0, i: 404, }, D { l: 141, t: 0, i: 491, }, D { l: 135, t: 10, i: 1777, }, D { l: 4, t: 11, i: 305, }, D { l: 4, t: 10, i: 493, }, D { l: 144, t: 10, i: 55, }, D { l: 4, t: 0, i: 951 }, D { l: 6, t: 0, i: 1809, }, D { l: 6, t: 0, i: 1849, }, D { l: 8, t: 0, i: 846 }, D { l: 8, t: 0, i: 866 }, D { l: 8, t: 0, i: 899 }, D { l: 10, t: 0, i: 896, }, D { l: 12, t: 0, i: 694, }, D { l: 142, t: 0, i: 468, }, D { l: 5, t: 11, i: 214, }, D { l: 7, t: 11, i: 603, }, D { l: 8, t: 11, i: 611, }, D { l: 9, t: 11, i: 686, }, D { l: 10, t: 11, i: 88, }, D { l: 11, t: 11, i: 459, }, D { l: 11, t: 11, i: 496, }, D { l: 12, t: 11, i: 463, }, D { l: 12, t: 11, i: 590, }, D { l: 13, t: 11, i: 0 }, D { l: 142, t: 11, i: 214, }, D { l: 132, t: 0, i: 411, }, D { l: 4, t: 0, i: 80 }, D { l: 133, t: 0, i: 44, }, D { l: 140, t: 11, i: 74, }, D { l: 143, t: 0, i: 31, }, D { l: 7, t: 0, i: 669 }, D { l: 6, t: 10, i: 568, }, D { l: 7, t: 10, i: 1804, }, D { l: 8, t: 10, i: 362, }, D { l: 8, t: 10, i: 410, }, D { l: 8, t: 10, i: 830, }, D { l: 9, t: 10, i: 514, }, D { l: 11, t: 10, i: 649, }, D { l: 142, t: 10, i: 157, }, D { l: 7, t: 0, i: 673 }, D { l: 134, t: 11, i: 1703, }, D { l: 132, t: 10, i: 625, }, D { l: 134, t: 0, i: 1303, }, D { l: 5, t: 0, i: 299 }, D { l: 135, t: 0, i: 1083, }, D { l: 138, t: 0, i: 704, }, D { l: 6, t: 0, i: 275 }, D { l: 7, t: 0, i: 408 }, D { l: 6, t: 10, i: 158, }, D { l: 7, t: 10, i: 129, }, D { l: 7, t: 10, i: 181, }, D { l: 8, t: 10, i: 276, }, D { l: 8, t: 10, i: 377, }, D { l: 10, t: 10, i: 523, }, D { l: 11, t: 10, i: 816, }, D { l: 12, t: 10, i: 455, }, D { l: 13, t: 10, i: 303, }, D { l: 142, t: 10, i: 135, }, D { l: 4, t: 0, i: 219 }, D { l: 7, t: 0, i: 367 }, D { l: 7, t: 0, i: 1713, }, D { l: 7, t: 0, i: 1761, }, D { l: 9, t: 0, i: 86 }, D { l: 9, t: 0, i: 537 }, D { l: 10, t: 0, i: 165, }, D { l: 12, t: 0, i: 219, }, D { l: 140, t: 0, i: 561, }, D { l: 8, t: 0, i: 216 }, D { l: 4, t: 10, i: 1 }, D { l: 4, t: 11, i: 737, }, D { l: 6, t: 11, i: 317, }, D { l: 7, t: 10, i: 1143, }, D { l: 7, t: 10, i: 1463, }, D { l: 9, t: 10, i: 207, }, D { l: 9, t: 10, i: 390, }, D { l: 9, t: 10, i: 467, }, D { l: 10, t: 11, i: 98, }, D { l: 11, t: 11, i: 294, }, D { l: 11, t: 10, i: 836, }, D { l: 12, t: 11, i: 60, }, D { l: 12, t: 11, i: 437, }, D { l: 13, t: 11, i: 64, }, D { l: 13, t: 11, i: 380, }, D { l: 142, t: 11, i: 430, }, D { l: 6, t: 11, i: 1758, }, D { l: 8, t: 11, i: 520, }, D { l: 9, t: 11, i: 345, }, D { l: 9, t: 11, i: 403, }, D { l: 142, t: 11, i: 350, }, D { l: 5, t: 11, i: 47 }, D { l: 10, t: 11, i: 242, }, D { l: 138, t: 11, i: 579, }, D { l: 5, t: 11, i: 139, }, D { l: 7, t: 11, i: 1168, }, D { l: 138, t: 11, i: 539, }, D { l: 135, t: 0, i: 1319, }, D { l: 4, t: 10, i: 295, }, D { l: 4, t: 10, i: 723, }, D { l: 5, t: 10, i: 895, }, D { l: 7, t: 10, i: 1031, }, D { l: 8, t: 10, i: 199, }, D { l: 8, t: 10, i: 340, }, D { l: 9, t: 10, i: 153, }, D { l: 9, t: 10, i: 215, }, D { l: 10, t: 10, i: 21, }, D { l: 10, t: 10, i: 59, }, D { l: 10, t: 10, i: 80, }, D { l: 10, t: 10, i: 224, }, D { l: 10, t: 10, i: 838, }, D { l: 11, t: 10, i: 229, }, D { l: 11, t: 10, i: 652, }, D { l: 12, t: 10, i: 192, }, D { l: 13, t: 10, i: 146, }, D { l: 142, t: 10, i: 91, }, D { l: 140, t: 0, i: 428, }, D { l: 137, t: 10, i: 51, }, D { l: 133, t: 0, i: 514, }, D { l: 5, t: 10, i: 309, }, D { l: 140, t: 10, i: 211, }, D { l: 6, t: 0, i: 1010, }, D { l: 5, t: 10, i: 125, }, D { l: 8, t: 10, i: 77 }, D { l: 138, t: 10, i: 15, }, D { l: 4, t: 0, i: 55 }, D { l: 5, t: 0, i: 301 }, D { l: 6, t: 0, i: 571 }, D { l: 142, t: 0, i: 49, }, D { l: 146, t: 0, i: 102, }, D { l: 136, t: 11, i: 370, }, D { l: 4, t: 11, i: 107, }, D { l: 7, t: 11, i: 613, }, D { l: 8, t: 11, i: 358, }, D { l: 8, t: 11, i: 439, }, D { l: 8, t: 11, i: 504, }, D { l: 9, t: 11, i: 501, }, D { l: 10, t: 11, i: 383, }, D { l: 139, t: 11, i: 477, }, D { l: 132, t: 11, i: 229, }, D { l: 133, t: 0, i: 364, }, D { l: 133, t: 10, i: 439, }, D { l: 4, t: 11, i: 903, }, D { l: 135, t: 11, i: 1816, }, D { l: 11, t: 0, i: 379, }, D { l: 140, t: 10, i: 76, }, D { l: 4, t: 0, i: 76 }, D { l: 4, t: 0, i: 971 }, D { l: 7, t: 0, i: 1550, }, D { l: 9, t: 0, i: 306 }, D { l: 9, t: 0, i: 430 }, D { l: 9, t: 0, i: 663 }, D { l: 10, t: 0, i: 683, }, D { l: 10, t: 0, i: 921, }, D { l: 11, t: 0, i: 427, }, D { l: 11, t: 0, i: 753, }, D { l: 12, t: 0, i: 334, }, D { l: 12, t: 0, i: 442, }, D { l: 14, t: 0, i: 258, }, D { l: 14, t: 0, i: 366, }, D { l: 143, t: 0, i: 131, }, D { l: 137, t: 0, i: 52, }, D { l: 4, t: 11, i: 47 }, D { l: 6, t: 11, i: 373, }, D { l: 7, t: 11, i: 452, }, D { l: 7, t: 11, i: 543, }, D { l: 7, t: 11, i: 1714, }, D { l: 7, t: 11, i: 1856, }, D { l: 9, t: 11, i: 6 }, D { l: 11, t: 11, i: 257, }, D { l: 139, t: 11, i: 391, }, D { l: 4, t: 10, i: 8 }, D { l: 7, t: 10, i: 1152, }, D { l: 7, t: 10, i: 1153, }, D { l: 7, t: 10, i: 1715, }, D { l: 9, t: 10, i: 374, }, D { l: 10, t: 10, i: 478, }, D { l: 139, t: 10, i: 648, }, D { l: 4, t: 11, i: 785, }, D { l: 133, t: 11, i: 368, }, D { l: 135, t: 10, i: 1099, }, D { l: 135, t: 11, i: 860, }, D { l: 5, t: 11, i: 980, }, D { l: 134, t: 11, i: 1754, }, D { l: 134, t: 0, i: 1258, }, D { l: 6, t: 0, i: 1058, }, D { l: 6, t: 0, i: 1359, }, D { l: 7, t: 11, i: 536, }, D { l: 7, t: 11, i: 1331, }, D { l: 136, t: 11, i: 143, }, D { l: 4, t: 0, i: 656 }, D { l: 135, t: 0, i: 779, }, D { l: 136, t: 10, i: 87, }, D { l: 5, t: 11, i: 19 }, D { l: 6, t: 11, i: 533, }, D { l: 146, t: 11, i: 126, }, D { l: 7, t: 0, i: 144 }, D { l: 138, t: 10, i: 438, }, D { l: 5, t: 11, i: 395, }, D { l: 5, t: 11, i: 951, }, D { l: 134, t: 11, i: 1776, }, D { l: 135, t: 0, i: 1373, }, D { l: 7, t: 0, i: 554 }, D { l: 7, t: 0, i: 605 }, D { l: 141, t: 0, i: 10, }, D { l: 4, t: 10, i: 69 }, D { l: 5, t: 10, i: 122, }, D { l: 9, t: 10, i: 656, }, D { l: 138, t: 10, i: 464, }, D { l: 5, t: 10, i: 849, }, D { l: 134, t: 10, i: 1633, }, D { l: 5, t: 0, i: 838 }, D { l: 5, t: 0, i: 841 }, D { l: 134, t: 0, i: 1649, }, D { l: 133, t: 0, i: 1012, }, D { l: 139, t: 10, i: 499, }, D { l: 7, t: 10, i: 476, }, D { l: 7, t: 10, i: 1592, }, D { l: 138, t: 10, i: 87, }, D { l: 6, t: 0, i: 251 }, D { l: 7, t: 0, i: 365 }, D { l: 7, t: 0, i: 1357, }, D { l: 7, t: 0, i: 1497, }, D { l: 8, t: 0, i: 154 }, D { l: 141, t: 0, i: 281, }, D { l: 132, t: 11, i: 441, }, D { l: 132, t: 11, i: 695, }, D { l: 7, t: 11, i: 497, }, D { l: 9, t: 11, i: 387, }, D { l: 147, t: 11, i: 81, }, D { l: 133, t: 0, i: 340, }, D { l: 14, t: 10, i: 283, }, D { l: 142, t: 11, i: 283, }, D { l: 134, t: 0, i: 810, }, D { l: 135, t: 11, i: 1894, }, D { l: 139, t: 0, i: 495, }, D { l: 5, t: 11, i: 284, }, D { l: 6, t: 11, i: 49 }, D { l: 6, t: 11, i: 350, }, D { l: 7, t: 11, i: 1 }, D { l: 7, t: 11, i: 377, }, D { l: 7, t: 11, i: 1693, }, D { l: 8, t: 11, i: 18 }, D { l: 8, t: 11, i: 678, }, D { l: 9, t: 11, i: 161, }, D { l: 9, t: 11, i: 585, }, D { l: 9, t: 11, i: 671, }, D { l: 9, t: 11, i: 839, }, D { l: 11, t: 11, i: 912, }, D { l: 141, t: 11, i: 427, }, D { l: 5, t: 10, i: 859, }, D { l: 7, t: 10, i: 1160, }, D { l: 8, t: 10, i: 107, }, D { l: 9, t: 10, i: 291, }, D { l: 9, t: 10, i: 439, }, D { l: 10, t: 10, i: 663, }, D { l: 11, t: 10, i: 609, }, D { l: 140, t: 10, i: 197, }, D { l: 8, t: 0, i: 261 }, D { l: 9, t: 0, i: 144 }, D { l: 9, t: 0, i: 466 }, D { l: 10, t: 0, i: 370, }, D { l: 12, t: 0, i: 470, }, D { l: 13, t: 0, i: 144, }, D { l: 142, t: 0, i: 348, }, D { l: 137, t: 0, i: 897, }, D { l: 6, t: 0, i: 248 }, D { l: 9, t: 0, i: 546 }, D { l: 10, t: 0, i: 535, }, D { l: 11, t: 0, i: 681, }, D { l: 141, t: 0, i: 135, }, D { l: 4, t: 0, i: 358 }, D { l: 135, t: 0, i: 1496, }, D { l: 134, t: 0, i: 567, }, D { l: 136, t: 0, i: 445, }, D { l: 4, t: 10, i: 117, }, D { l: 6, t: 10, i: 372, }, D { l: 7, t: 10, i: 1905, }, D { l: 142, t: 10, i: 323, }, D { l: 4, t: 10, i: 722, }, D { l: 139, t: 10, i: 471, }, D { l: 6, t: 0, i: 697 }, D { l: 134, t: 0, i: 996, }, D { l: 7, t: 11, i: 2007, }, D { l: 9, t: 11, i: 101, }, D { l: 9, t: 11, i: 450, }, D { l: 10, t: 11, i: 66, }, D { l: 10, t: 11, i: 842, }, D { l: 11, t: 11, i: 536, }, D { l: 140, t: 11, i: 587, }, D { l: 132, t: 0, i: 577, }, D { l: 134, t: 0, i: 1336, }, D { l: 9, t: 10, i: 5 }, D { l: 12, t: 10, i: 216, }, D { l: 12, t: 10, i: 294, }, D { l: 12, t: 10, i: 298, }, D { l: 12, t: 10, i: 400, }, D { l: 12, t: 10, i: 518, }, D { l: 13, t: 10, i: 229, }, D { l: 143, t: 10, i: 139, }, D { l: 6, t: 0, i: 174 }, D { l: 138, t: 0, i: 917, }, D { l: 134, t: 10, i: 1774, }, D { l: 5, t: 10, i: 12 }, D { l: 7, t: 10, i: 375, }, D { l: 9, t: 10, i: 88 }, D { l: 9, t: 10, i: 438, }, D { l: 11, t: 11, i: 62, }, D { l: 139, t: 10, i: 270, }, D { l: 134, t: 11, i: 1766, }, D { l: 6, t: 11, i: 0 }, D { l: 7, t: 11, i: 84 }, D { l: 7, t: 10, i: 816, }, D { l: 7, t: 10, i: 1241, }, D { l: 9, t: 10, i: 283, }, D { l: 9, t: 10, i: 520, }, D { l: 10, t: 10, i: 213, }, D { l: 10, t: 10, i: 307, }, D { l: 10, t: 10, i: 463, }, D { l: 10, t: 10, i: 671, }, D { l: 10, t: 10, i: 746, }, D { l: 11, t: 10, i: 401, }, D { l: 11, t: 10, i: 794, }, D { l: 11, t: 11, i: 895, }, D { l: 12, t: 10, i: 517, }, D { l: 17, t: 11, i: 11, }, D { l: 18, t: 10, i: 107, }, D { l: 147, t: 10, i: 115, }, D { l: 5, t: 0, i: 878 }, D { l: 133, t: 0, i: 972, }, D { l: 6, t: 11, i: 1665, }, D { l: 7, t: 11, i: 256, }, D { l: 7, t: 11, i: 1388, }, D { l: 138, t: 11, i: 499, }, D { l: 4, t: 10, i: 258, }, D { l: 136, t: 10, i: 639, }, D { l: 4, t: 11, i: 22 }, D { l: 5, t: 11, i: 10 }, D { l: 6, t: 10, i: 22 }, D { l: 7, t: 11, i: 848, }, D { l: 7, t: 10, i: 903, }, D { l: 7, t: 10, i: 1963, }, D { l: 8, t: 11, i: 97 }, D { l: 138, t: 10, i: 577, }, D { l: 5, t: 10, i: 681, }, D { l: 136, t: 10, i: 782, }, D { l: 133, t: 11, i: 481, }, D { l: 132, t: 0, i: 351, }, D { l: 4, t: 10, i: 664, }, D { l: 5, t: 10, i: 804, }, D { l: 139, t: 10, i: 1013, }, D { l: 6, t: 11, i: 134, }, D { l: 7, t: 11, i: 437, }, D { l: 7, t: 11, i: 959, }, D { l: 9, t: 11, i: 37 }, D { l: 14, t: 11, i: 285, }, D { l: 14, t: 11, i: 371, }, D { l: 144, t: 11, i: 60, }, D { l: 7, t: 11, i: 486, }, D { l: 8, t: 11, i: 155, }, D { l: 11, t: 11, i: 93, }, D { l: 140, t: 11, i: 164, }, D { l: 132, t: 0, i: 286, }, D { l: 7, t: 0, i: 438 }, D { l: 7, t: 0, i: 627 }, D { l: 7, t: 0, i: 1516, }, D { l: 8, t: 0, i: 40 }, D { l: 9, t: 0, i: 56 }, D { l: 9, t: 0, i: 294 }, D { l: 10, t: 0, i: 30 }, D { l: 11, t: 0, i: 969, }, D { l: 11, t: 0, i: 995, }, D { l: 146, t: 0, i: 148, }, D { l: 5, t: 11, i: 591, }, D { l: 135, t: 11, i: 337, }, D { l: 134, t: 0, i: 1950, }, D { l: 133, t: 10, i: 32, }, D { l: 138, t: 11, i: 500, }, D { l: 5, t: 11, i: 380, }, D { l: 5, t: 11, i: 650, }, D { l: 136, t: 11, i: 310, }, D { l: 4, t: 11, i: 364, }, D { l: 7, t: 11, i: 1156, }, D { l: 7, t: 11, i: 1187, }, D { l: 137, t: 11, i: 409, }, D { l: 4, t: 0, i: 738 }, D { l: 134, t: 11, i: 482, }, D { l: 4, t: 11, i: 781, }, D { l: 6, t: 11, i: 487, }, D { l: 7, t: 11, i: 926, }, D { l: 8, t: 11, i: 263, }, D { l: 139, t: 11, i: 500, }, D { l: 135, t: 11, i: 418, }, D { l: 6, t: 0, i: 2047, }, D { l: 10, t: 0, i: 969, }, D { l: 4, t: 10, i: 289, }, D { l: 7, t: 10, i: 629, }, D { l: 7, t: 10, i: 1698, }, D { l: 7, t: 10, i: 1711, }, D { l: 140, t: 10, i: 215, }, D { l: 6, t: 10, i: 450, }, D { l: 136, t: 10, i: 109, }, D { l: 134, t: 0, i: 818, }, D { l: 136, t: 10, i: 705, }, D { l: 133, t: 0, i: 866, }, D { l: 4, t: 11, i: 94 }, D { l: 135, t: 11, i: 1265, }, D { l: 132, t: 11, i: 417, }, D { l: 134, t: 0, i: 1467, }, D { l: 135, t: 10, i: 1238, }, D { l: 4, t: 0, i: 972 }, D { l: 6, t: 0, i: 1851, }, D { l: 134, t: 0, i: 1857, }, D { l: 134, t: 0, i: 355, }, D { l: 133, t: 0, i: 116, }, D { l: 132, t: 0, i: 457, }, D { l: 135, t: 11, i: 1411, }, D { l: 4, t: 11, i: 408, }, D { l: 4, t: 11, i: 741, }, D { l: 135, t: 11, i: 500, }, D { l: 134, t: 10, i: 26, }, D { l: 142, t: 11, i: 137, }, D { l: 5, t: 0, i: 527 }, D { l: 6, t: 0, i: 189 }, D { l: 7, t: 0, i: 859 }, D { l: 136, t: 0, i: 267, }, D { l: 11, t: 0, i: 104, }, D { l: 11, t: 0, i: 554, }, D { l: 15, t: 0, i: 60 }, D { l: 143, t: 0, i: 125, }, D { l: 134, t: 0, i: 1613, }, D { l: 4, t: 10, i: 414, }, D { l: 5, t: 10, i: 467, }, D { l: 9, t: 10, i: 654, }, D { l: 10, t: 10, i: 451, }, D { l: 12, t: 10, i: 59, }, D { l: 141, t: 10, i: 375, }, D { l: 135, t: 10, i: 17, }, D { l: 134, t: 0, i: 116, }, D { l: 135, t: 11, i: 541, }, D { l: 135, t: 10, i: 955, }, D { l: 6, t: 11, i: 73 }, D { l: 135, t: 11, i: 177, }, D { l: 133, t: 11, i: 576, }, D { l: 134, t: 0, i: 886, }, D { l: 133, t: 0, i: 487, }, D { l: 4, t: 0, i: 86 }, D { l: 5, t: 0, i: 667 }, D { l: 5, t: 0, i: 753 }, D { l: 6, t: 0, i: 316 }, D { l: 6, t: 0, i: 455 }, D { l: 135, t: 0, i: 946, }, D { l: 142, t: 11, i: 231, }, D { l: 150, t: 0, i: 45, }, D { l: 134, t: 0, i: 863, }, D { l: 134, t: 0, i: 1953, }, D { l: 6, t: 10, i: 280, }, D { l: 10, t: 10, i: 502, }, D { l: 11, t: 10, i: 344, }, D { l: 140, t: 10, i: 38, }, D { l: 4, t: 0, i: 79 }, D { l: 7, t: 0, i: 1773, }, D { l: 10, t: 0, i: 450, }, D { l: 11, t: 0, i: 589, }, D { l: 13, t: 0, i: 332, }, D { l: 13, t: 0, i: 493, }, D { l: 14, t: 0, i: 183, }, D { l: 14, t: 0, i: 334, }, D { l: 14, t: 0, i: 362, }, D { l: 14, t: 0, i: 368, }, D { l: 14, t: 0, i: 376, }, D { l: 14, t: 0, i: 379, }, D { l: 19, t: 0, i: 90 }, D { l: 19, t: 0, i: 103, }, D { l: 19, t: 0, i: 127, }, D { l: 148, t: 0, i: 90, }, D { l: 5, t: 10, i: 45 }, D { l: 7, t: 10, i: 1161, }, D { l: 11, t: 10, i: 448, }, D { l: 11, t: 10, i: 880, }, D { l: 13, t: 10, i: 139, }, D { l: 13, t: 10, i: 407, }, D { l: 15, t: 10, i: 16, }, D { l: 17, t: 10, i: 95, }, D { l: 18, t: 10, i: 66, }, D { l: 18, t: 10, i: 88, }, D { l: 18, t: 10, i: 123, }, D { l: 149, t: 10, i: 7, }, D { l: 136, t: 10, i: 777, }, D { l: 4, t: 10, i: 410, }, D { l: 135, t: 10, i: 521, }, D { l: 135, t: 10, i: 1778, }, D { l: 135, t: 11, i: 538, }, D { l: 142, t: 0, i: 381, }, D { l: 133, t: 11, i: 413, }, D { l: 134, t: 0, i: 1142, }, D { l: 6, t: 0, i: 1189, }, D { l: 136, t: 11, i: 495, }, D { l: 5, t: 0, i: 663 }, D { l: 6, t: 0, i: 1962, }, D { l: 134, t: 0, i: 2003, }, D { l: 7, t: 11, i: 54 }, D { l: 8, t: 11, i: 312, }, D { l: 10, t: 11, i: 191, }, D { l: 10, t: 11, i: 614, }, D { l: 140, t: 11, i: 567, }, D { l: 132, t: 10, i: 436, }, D { l: 133, t: 0, i: 846, }, D { l: 10, t: 0, i: 528, }, D { l: 11, t: 0, i: 504, }, D { l: 7, t: 10, i: 1587, }, D { l: 135, t: 10, i: 1707, }, D { l: 5, t: 0, i: 378 }, D { l: 8, t: 0, i: 465 }, D { l: 9, t: 0, i: 286 }, D { l: 10, t: 0, i: 185, }, D { l: 10, t: 0, i: 562, }, D { l: 10, t: 0, i: 635, }, D { l: 11, t: 0, i: 31 }, D { l: 11, t: 0, i: 393, }, D { l: 13, t: 0, i: 312, }, D { l: 18, t: 0, i: 65 }, D { l: 18, t: 0, i: 96 }, D { l: 147, t: 0, i: 89, }, D { l: 7, t: 0, i: 899 }, D { l: 14, t: 0, i: 325, }, D { l: 6, t: 11, i: 468, }, D { l: 7, t: 11, i: 567, }, D { l: 7, t: 11, i: 1478, }, D { l: 8, t: 11, i: 530, }, D { l: 142, t: 11, i: 290, }, D { l: 7, t: 0, i: 1880, }, D { l: 9, t: 0, i: 680 }, D { l: 139, t: 0, i: 798, }, D { l: 134, t: 0, i: 1770, }, D { l: 132, t: 0, i: 648, }, D { l: 150, t: 11, i: 35, }, D { l: 5, t: 0, i: 945 }, D { l: 6, t: 0, i: 1656, }, D { l: 6, t: 0, i: 1787, }, D { l: 7, t: 0, i: 167 }, D { l: 8, t: 0, i: 824 }, D { l: 9, t: 0, i: 391 }, D { l: 10, t: 0, i: 375, }, D { l: 139, t: 0, i: 185, }, D { l: 6, t: 11, i: 484, }, D { l: 135, t: 11, i: 822, }, D { l: 134, t: 0, i: 2046, }, D { l: 7, t: 0, i: 1645, }, D { l: 8, t: 0, i: 352 }, D { l: 137, t: 0, i: 249, }, D { l: 132, t: 0, i: 152, }, D { l: 6, t: 0, i: 611 }, D { l: 135, t: 0, i: 1733, }, D { l: 6, t: 11, i: 1724, }, D { l: 135, t: 11, i: 2022, }, D { l: 133, t: 0, i: 1006, }, D { l: 141, t: 11, i: 96, }, D { l: 5, t: 0, i: 420 }, D { l: 135, t: 0, i: 1449, }, D { l: 146, t: 11, i: 149, }, D { l: 135, t: 0, i: 832, }, D { l: 135, t: 10, i: 663, }, D { l: 133, t: 0, i: 351, }, D { l: 5, t: 0, i: 40 }, D { l: 7, t: 0, i: 598 }, D { l: 7, t: 0, i: 1638, }, D { l: 8, t: 0, i: 78 }, D { l: 9, t: 0, i: 166 }, D { l: 9, t: 0, i: 640 }, D { l: 9, t: 0, i: 685 }, D { l: 9, t: 0, i: 773 }, D { l: 11, t: 0, i: 215, }, D { l: 13, t: 0, i: 65 }, D { l: 14, t: 0, i: 172, }, D { l: 14, t: 0, i: 317, }, D { l: 145, t: 0, i: 6 }, D { l: 8, t: 0, i: 60 }, D { l: 9, t: 0, i: 343 }, D { l: 139, t: 0, i: 769, }, D { l: 134, t: 0, i: 1354, }, D { l: 132, t: 0, i: 724, }, D { l: 137, t: 0, i: 745, }, D { l: 132, t: 11, i: 474, }, D { l: 7, t: 0, i: 1951, }, D { l: 8, t: 0, i: 765 }, D { l: 8, t: 0, i: 772 }, D { l: 140, t: 0, i: 671, }, D { l: 7, t: 0, i: 108 }, D { l: 8, t: 0, i: 219 }, D { l: 8, t: 0, i: 388 }, D { l: 9, t: 0, i: 775 }, D { l: 11, t: 0, i: 275, }, D { l: 140, t: 0, i: 464, }, D { l: 137, t: 0, i: 639, }, D { l: 135, t: 10, i: 503, }, D { l: 133, t: 11, i: 366, }, D { l: 5, t: 0, i: 15 }, D { l: 6, t: 0, i: 56 }, D { l: 7, t: 0, i: 1758, }, D { l: 8, t: 0, i: 500 }, D { l: 9, t: 0, i: 730 }, D { l: 11, t: 0, i: 331, }, D { l: 13, t: 0, i: 150, }, D { l: 14, t: 0, i: 282, }, D { l: 5, t: 11, i: 305, }, D { l: 9, t: 11, i: 560, }, D { l: 141, t: 11, i: 208, }, D { l: 4, t: 10, i: 113, }, D { l: 5, t: 10, i: 163, }, D { l: 5, t: 10, i: 735, }, D { l: 7, t: 10, i: 1009, }, D { l: 9, t: 10, i: 9 }, D { l: 9, t: 10, i: 771, }, D { l: 12, t: 10, i: 90, }, D { l: 13, t: 10, i: 138, }, D { l: 13, t: 10, i: 410, }, D { l: 143, t: 10, i: 128, }, D { l: 4, t: 10, i: 324, }, D { l: 138, t: 10, i: 104, }, D { l: 135, t: 11, i: 466, }, D { l: 142, t: 11, i: 27, }, D { l: 134, t: 0, i: 1886, }, D { l: 5, t: 0, i: 205 }, D { l: 6, t: 0, i: 438 }, D { l: 9, t: 0, i: 711 }, D { l: 4, t: 11, i: 480, }, D { l: 6, t: 11, i: 167, }, D { l: 6, t: 11, i: 302, }, D { l: 6, t: 11, i: 1642, }, D { l: 7, t: 11, i: 130, }, D { l: 7, t: 11, i: 656, }, D { l: 7, t: 11, i: 837, }, D { l: 7, t: 11, i: 1547, }, D { l: 7, t: 11, i: 1657, }, D { l: 8, t: 11, i: 429, }, D { l: 9, t: 11, i: 228, }, D { l: 10, t: 11, i: 643, }, D { l: 13, t: 11, i: 289, }, D { l: 13, t: 11, i: 343, }, D { l: 147, t: 11, i: 101, }, D { l: 134, t: 0, i: 865, }, D { l: 6, t: 0, i: 2025, }, D { l: 136, t: 0, i: 965, }, D { l: 7, t: 11, i: 278, }, D { l: 10, t: 11, i: 739, }, D { l: 11, t: 11, i: 708, }, D { l: 141, t: 11, i: 348, }, D { l: 133, t: 0, i: 534, }, D { l: 135, t: 11, i: 1922, }, D { l: 137, t: 0, i: 691, }, D { l: 4, t: 10, i: 935, }, D { l: 133, t: 10, i: 823, }, D { l: 6, t: 0, i: 443 }, D { l: 9, t: 0, i: 237 }, D { l: 9, t: 0, i: 571 }, D { l: 9, t: 0, i: 695 }, D { l: 10, t: 0, i: 139, }, D { l: 11, t: 0, i: 715, }, D { l: 12, t: 0, i: 417, }, D { l: 141, t: 0, i: 421, }, D { l: 5, t: 10, i: 269, }, D { l: 7, t: 10, i: 434, }, D { l: 7, t: 10, i: 891, }, D { l: 8, t: 10, i: 339, }, D { l: 9, t: 10, i: 702, }, D { l: 11, t: 10, i: 594, }, D { l: 11, t: 10, i: 718, }, D { l: 145, t: 10, i: 100, }, D { l: 6, t: 0, i: 1555, }, D { l: 7, t: 0, i: 878 }, D { l: 9, t: 10, i: 485, }, D { l: 141, t: 10, i: 264, }, D { l: 134, t: 10, i: 1713, }, D { l: 7, t: 10, i: 1810, }, D { l: 11, t: 10, i: 866, }, D { l: 12, t: 10, i: 103, }, D { l: 141, t: 10, i: 495, }, D { l: 135, t: 10, i: 900, }, D { l: 6, t: 0, i: 1410, }, D { l: 9, t: 11, i: 316, }, D { l: 139, t: 11, i: 256, }, D { l: 4, t: 0, i: 995 }, D { l: 135, t: 0, i: 1033, }, D { l: 132, t: 0, i: 578, }, D { l: 10, t: 0, i: 881, }, D { l: 12, t: 0, i: 740, }, D { l: 12, t: 0, i: 743, }, D { l: 140, t: 0, i: 759, }, D { l: 132, t: 0, i: 822, }, D { l: 133, t: 0, i: 923, }, D { l: 142, t: 10, i: 143, }, D { l: 135, t: 11, i: 1696, }, D { l: 6, t: 11, i: 363, }, D { l: 7, t: 11, i: 1955, }, D { l: 136, t: 11, i: 725, }, D { l: 132, t: 0, i: 924, }, D { l: 133, t: 0, i: 665, }, D { l: 135, t: 10, i: 2029, }, D { l: 135, t: 0, i: 1901, }, D { l: 4, t: 0, i: 265 }, D { l: 6, t: 0, i: 1092, }, D { l: 6, t: 0, i: 1417, }, D { l: 7, t: 0, i: 807 }, D { l: 135, t: 0, i: 950, }, D { l: 5, t: 0, i: 93 }, D { l: 12, t: 0, i: 267, }, D { l: 141, t: 0, i: 498, }, D { l: 135, t: 0, i: 1451, }, D { l: 5, t: 11, i: 813, }, D { l: 135, t: 11, i: 2046, }, D { l: 5, t: 10, i: 625, }, D { l: 135, t: 10, i: 1617, }, D { l: 135, t: 0, i: 747, }, D { l: 6, t: 0, i: 788 }, D { l: 137, t: 0, i: 828, }, D { l: 7, t: 0, i: 184 }, D { l: 11, t: 0, i: 307, }, D { l: 11, t: 0, i: 400, }, D { l: 15, t: 0, i: 130, }, D { l: 5, t: 11, i: 712, }, D { l: 7, t: 11, i: 1855, }, D { l: 8, t: 10, i: 425, }, D { l: 8, t: 10, i: 693, }, D { l: 9, t: 10, i: 720, }, D { l: 10, t: 10, i: 380, }, D { l: 10, t: 10, i: 638, }, D { l: 11, t: 11, i: 17, }, D { l: 11, t: 10, i: 473, }, D { l: 12, t: 10, i: 61, }, D { l: 13, t: 11, i: 321, }, D { l: 144, t: 11, i: 67, }, D { l: 135, t: 0, i: 198, }, D { l: 6, t: 11, i: 320, }, D { l: 7, t: 11, i: 781, }, D { l: 7, t: 11, i: 1921, }, D { l: 9, t: 11, i: 55 }, D { l: 10, t: 11, i: 186, }, D { l: 10, t: 11, i: 273, }, D { l: 10, t: 11, i: 664, }, D { l: 10, t: 11, i: 801, }, D { l: 11, t: 11, i: 996, }, D { l: 11, t: 11, i: 997, }, D { l: 13, t: 11, i: 157, }, D { l: 142, t: 11, i: 170, }, D { l: 136, t: 11, i: 271, }, D { l: 135, t: 0, i: 994, }, D { l: 7, t: 11, i: 103, }, D { l: 7, t: 11, i: 863, }, D { l: 11, t: 11, i: 184, }, D { l: 14, t: 11, i: 299, }, D { l: 145, t: 11, i: 62, }, D { l: 11, t: 10, i: 551, }, D { l: 142, t: 10, i: 159, }, D { l: 5, t: 0, i: 233 }, D { l: 5, t: 0, i: 320 }, D { l: 6, t: 0, i: 140 }, D { l: 8, t: 0, i: 295 }, D { l: 8, t: 0, i: 615 }, D { l: 136, t: 11, i: 615, }, D { l: 133, t: 0, i: 978, }, D { l: 4, t: 0, i: 905 }, D { l: 6, t: 0, i: 1701, }, D { l: 137, t: 0, i: 843, }, D { l: 132, t: 10, i: 168, }, D { l: 4, t: 0, i: 974 }, D { l: 8, t: 0, i: 850 }, D { l: 12, t: 0, i: 709, }, D { l: 12, t: 0, i: 768, }, D { l: 140, t: 0, i: 786, }, D { l: 135, t: 10, i: 91, }, D { l: 152, t: 0, i: 6 }, D { l: 138, t: 10, i: 532, }, D { l: 135, t: 10, i: 1884, }, D { l: 132, t: 0, i: 509, }, D { l: 6, t: 0, i: 1307, }, D { l: 135, t: 0, i: 273, }, D { l: 5, t: 11, i: 77 }, D { l: 7, t: 11, i: 1455, }, D { l: 10, t: 11, i: 843, }, D { l: 19, t: 11, i: 73, }, D { l: 150, t: 11, i: 5, }, D { l: 132, t: 11, i: 458, }, D { l: 135, t: 11, i: 1420, }, D { l: 6, t: 11, i: 109, }, D { l: 138, t: 11, i: 382, }, D { l: 6, t: 0, i: 201 }, D { l: 6, t: 11, i: 330, }, D { l: 7, t: 10, i: 70 }, D { l: 7, t: 11, i: 1084, }, D { l: 10, t: 10, i: 240, }, D { l: 11, t: 11, i: 142, }, D { l: 147, t: 10, i: 93, }, D { l: 7, t: 0, i: 1041, }, D { l: 140, t: 11, i: 328, }, D { l: 133, t: 11, i: 354, }, D { l: 134, t: 0, i: 1040, }, D { l: 133, t: 0, i: 693, }, D { l: 134, t: 0, i: 774, }, D { l: 139, t: 0, i: 234, }, D { l: 132, t: 0, i: 336, }, D { l: 7, t: 0, i: 1399, }, D { l: 139, t: 10, i: 392, }, D { l: 20, t: 0, i: 22 }, D { l: 148, t: 11, i: 22, }, D { l: 5, t: 0, i: 802 }, D { l: 7, t: 0, i: 2021, }, D { l: 136, t: 0, i: 805, }, D { l: 5, t: 0, i: 167 }, D { l: 5, t: 0, i: 899 }, D { l: 6, t: 0, i: 410 }, D { l: 137, t: 0, i: 777, }, D { l: 137, t: 0, i: 789, }, D { l: 134, t: 0, i: 1705, }, D { l: 7, t: 10, i: 655, }, D { l: 135, t: 10, i: 1844, }, D { l: 4, t: 10, i: 145, }, D { l: 6, t: 10, i: 176, }, D { l: 7, t: 10, i: 395, }, D { l: 137, t: 10, i: 562, }, D { l: 132, t: 10, i: 501, }, D { l: 135, t: 0, i: 10, }, D { l: 5, t: 0, i: 11 }, D { l: 6, t: 0, i: 117 }, D { l: 6, t: 0, i: 485 }, D { l: 7, t: 0, i: 1133, }, D { l: 9, t: 0, i: 582 }, D { l: 9, t: 0, i: 594 }, D { l: 10, t: 0, i: 82 }, D { l: 11, t: 0, i: 21 }, D { l: 11, t: 0, i: 818, }, D { l: 12, t: 0, i: 535, }, D { l: 13, t: 0, i: 86 }, D { l: 20, t: 0, i: 91 }, D { l: 23, t: 0, i: 13 }, D { l: 134, t: 10, i: 509, }, D { l: 4, t: 0, i: 264 }, D { l: 7, t: 0, i: 1067, }, D { l: 8, t: 0, i: 204 }, D { l: 8, t: 0, i: 385 }, D { l: 139, t: 0, i: 953, }, D { l: 139, t: 11, i: 737, }, D { l: 138, t: 0, i: 56, }, D { l: 134, t: 0, i: 1917, }, D { l: 133, t: 0, i: 470, }, D { l: 10, t: 11, i: 657, }, D { l: 14, t: 11, i: 297, }, D { l: 142, t: 11, i: 361, }, D { l: 135, t: 11, i: 412, }, D { l: 7, t: 0, i: 1198, }, D { l: 7, t: 11, i: 1198, }, D { l: 8, t: 11, i: 556, }, D { l: 14, t: 11, i: 123, }, D { l: 14, t: 11, i: 192, }, D { l: 143, t: 11, i: 27, }, D { l: 7, t: 11, i: 1985, }, D { l: 14, t: 11, i: 146, }, D { l: 15, t: 11, i: 42, }, D { l: 16, t: 11, i: 23, }, D { l: 17, t: 11, i: 86, }, D { l: 146, t: 11, i: 17, }, D { l: 11, t: 0, i: 1015, }, D { l: 136, t: 11, i: 122, }, D { l: 4, t: 10, i: 114, }, D { l: 9, t: 10, i: 492, }, D { l: 13, t: 10, i: 462, }, D { l: 142, t: 10, i: 215, }, D { l: 4, t: 10, i: 77 }, D { l: 5, t: 10, i: 361, }, D { l: 6, t: 10, i: 139, }, D { l: 6, t: 10, i: 401, }, D { l: 6, t: 10, i: 404, }, D { l: 7, t: 10, i: 413, }, D { l: 7, t: 10, i: 715, }, D { l: 7, t: 10, i: 1716, }, D { l: 11, t: 10, i: 279, }, D { l: 12, t: 10, i: 179, }, D { l: 12, t: 10, i: 258, }, D { l: 13, t: 10, i: 244, }, D { l: 142, t: 10, i: 358, }, D { l: 134, t: 10, i: 1717, }, D { l: 7, t: 10, i: 1061, }, D { l: 8, t: 10, i: 82 }, D { l: 11, t: 10, i: 250, }, D { l: 12, t: 10, i: 420, }, D { l: 141, t: 10, i: 184, }, D { l: 133, t: 0, i: 715, }, D { l: 135, t: 10, i: 724, }, D { l: 9, t: 0, i: 919 }, D { l: 9, t: 0, i: 922 }, D { l: 9, t: 0, i: 927 }, D { l: 9, t: 0, i: 933 }, D { l: 9, t: 0, i: 962 }, D { l: 9, t: 0, i: 1000, }, D { l: 9, t: 0, i: 1002, }, D { l: 9, t: 0, i: 1021, }, D { l: 12, t: 0, i: 890, }, D { l: 12, t: 0, i: 907, }, D { l: 12, t: 0, i: 930, }, D { l: 15, t: 0, i: 207, }, D { l: 15, t: 0, i: 228, }, D { l: 15, t: 0, i: 238, }, D { l: 149, t: 0, i: 61, }, D { l: 8, t: 0, i: 794 }, D { l: 9, t: 0, i: 400 }, D { l: 10, t: 0, i: 298, }, D { l: 142, t: 0, i: 228, }, D { l: 5, t: 11, i: 430, }, D { l: 5, t: 11, i: 932, }, D { l: 6, t: 11, i: 131, }, D { l: 7, t: 11, i: 417, }, D { l: 9, t: 11, i: 522, }, D { l: 11, t: 11, i: 314, }, D { l: 141, t: 11, i: 390, }, D { l: 132, t: 0, i: 867, }, D { l: 8, t: 0, i: 724 }, D { l: 132, t: 11, i: 507, }, D { l: 137, t: 11, i: 261, }, D { l: 4, t: 11, i: 343, }, D { l: 133, t: 11, i: 511, }, D { l: 6, t: 0, i: 190 }, D { l: 7, t: 0, i: 768 }, D { l: 135, t: 0, i: 1170, }, D { l: 6, t: 10, i: 513, }, D { l: 135, t: 10, i: 1052, }, D { l: 7, t: 11, i: 455, }, D { l: 138, t: 11, i: 591, }, D { l: 134, t: 0, i: 1066, }, D { l: 137, t: 10, i: 899, }, D { l: 14, t: 0, i: 67 }, D { l: 147, t: 0, i: 60, }, D { l: 4, t: 0, i: 948 }, D { l: 18, t: 0, i: 174, }, D { l: 146, t: 0, i: 176, }, D { l: 135, t: 0, i: 1023, }, D { l: 7, t: 10, i: 1417, }, D { l: 12, t: 10, i: 382, }, D { l: 17, t: 10, i: 48, }, D { l: 152, t: 10, i: 12, }, D { l: 134, t: 11, i: 575, }, D { l: 132, t: 0, i: 764, }, D { l: 6, t: 10, i: 545, }, D { l: 7, t: 10, i: 565, }, D { l: 7, t: 10, i: 1669, }, D { l: 10, t: 10, i: 114, }, D { l: 11, t: 10, i: 642, }, D { l: 140, t: 10, i: 618, }, D { l: 6, t: 0, i: 137 }, D { l: 9, t: 0, i: 75 }, D { l: 9, t: 0, i: 253 }, D { l: 10, t: 0, i: 194, }, D { l: 138, t: 0, i: 444, }, D { l: 4, t: 0, i: 756 }, D { l: 133, t: 10, i: 5, }, D { l: 8, t: 0, i: 1008, }, D { l: 135, t: 10, i: 192, }, D { l: 132, t: 0, i: 842, }, D { l: 11, t: 0, i: 643, }, D { l: 12, t: 0, i: 115, }, D { l: 136, t: 10, i: 763, }, D { l: 139, t: 0, i: 67, }, D { l: 133, t: 10, i: 759, }, D { l: 4, t: 0, i: 821 }, D { l: 5, t: 0, i: 760 }, D { l: 7, t: 0, i: 542 }, D { l: 8, t: 0, i: 135 }, D { l: 8, t: 0, i: 496 }, D { l: 135, t: 11, i: 580, }, D { l: 7, t: 10, i: 370, }, D { l: 7, t: 10, i: 1007, }, D { l: 7, t: 10, i: 1177, }, D { l: 135, t: 10, i: 1565, }, D { l: 135, t: 10, i: 1237, }, D { l: 140, t: 0, i: 736, }, D { l: 7, t: 0, i: 319 }, D { l: 7, t: 0, i: 355 }, D { l: 7, t: 0, i: 763 }, D { l: 10, t: 0, i: 389, }, D { l: 145, t: 0, i: 43, }, D { l: 8, t: 11, i: 333, }, D { l: 138, t: 11, i: 182, }, D { l: 4, t: 10, i: 87 }, D { l: 5, t: 10, i: 250, }, D { l: 141, t: 10, i: 298, }, D { l: 138, t: 0, i: 786, }, D { l: 134, t: 0, i: 2044, }, D { l: 8, t: 11, i: 330, }, D { l: 140, t: 11, i: 477, }, D { l: 135, t: 11, i: 1338, }, D { l: 132, t: 11, i: 125, }, D { l: 134, t: 0, i: 1030, }, D { l: 134, t: 0, i: 1083, }, D { l: 132, t: 11, i: 721, }, D { l: 135, t: 10, i: 814, }, D { l: 7, t: 11, i: 776, }, D { l: 8, t: 11, i: 145, }, D { l: 147, t: 11, i: 56, }, D { l: 134, t: 0, i: 1226, }, D { l: 4, t: 10, i: 57 }, D { l: 7, t: 10, i: 1195, }, D { l: 7, t: 10, i: 1438, }, D { l: 7, t: 10, i: 1548, }, D { l: 7, t: 10, i: 1835, }, D { l: 7, t: 10, i: 1904, }, D { l: 9, t: 10, i: 757, }, D { l: 10, t: 10, i: 604, }, D { l: 139, t: 10, i: 519, }, D { l: 7, t: 11, i: 792, }, D { l: 8, t: 11, i: 147, }, D { l: 10, t: 11, i: 821, }, D { l: 139, t: 11, i: 1021, }, D { l: 137, t: 11, i: 797, }, D { l: 4, t: 0, i: 58 }, D { l: 5, t: 0, i: 286 }, D { l: 6, t: 0, i: 319 }, D { l: 7, t: 0, i: 402 }, D { l: 7, t: 0, i: 1254, }, D { l: 7, t: 0, i: 1903, }, D { l: 8, t: 0, i: 356 }, D { l: 140, t: 0, i: 408, }, D { l: 4, t: 0, i: 389 }, D { l: 4, t: 0, i: 815 }, D { l: 9, t: 0, i: 181 }, D { l: 9, t: 0, i: 255 }, D { l: 10, t: 0, i: 8 }, D { l: 10, t: 0, i: 29 }, D { l: 10, t: 0, i: 816, }, D { l: 11, t: 0, i: 311, }, D { l: 11, t: 0, i: 561, }, D { l: 12, t: 0, i: 67 }, D { l: 141, t: 0, i: 181, }, D { l: 7, t: 11, i: 1472, }, D { l: 135, t: 11, i: 1554, }, D { l: 7, t: 11, i: 1071, }, D { l: 7, t: 11, i: 1541, }, D { l: 7, t: 11, i: 1767, }, D { l: 7, t: 11, i: 1806, }, D { l: 7, t: 11, i: 1999, }, D { l: 9, t: 11, i: 248, }, D { l: 10, t: 11, i: 400, }, D { l: 11, t: 11, i: 162, }, D { l: 11, t: 11, i: 178, }, D { l: 11, t: 11, i: 242, }, D { l: 12, t: 11, i: 605, }, D { l: 15, t: 11, i: 26, }, D { l: 144, t: 11, i: 44, }, D { l: 5, t: 11, i: 168, }, D { l: 5, t: 11, i: 930, }, D { l: 8, t: 11, i: 74 }, D { l: 9, t: 11, i: 623, }, D { l: 12, t: 11, i: 500, }, D { l: 12, t: 11, i: 579, }, D { l: 13, t: 11, i: 41, }, D { l: 143, t: 11, i: 93, }, D { l: 6, t: 11, i: 220, }, D { l: 7, t: 11, i: 1101, }, D { l: 141, t: 11, i: 105, }, D { l: 5, t: 0, i: 474 }, D { l: 7, t: 0, i: 507 }, D { l: 4, t: 10, i: 209, }, D { l: 7, t: 11, i: 507, }, D { l: 135, t: 10, i: 902, }, D { l: 132, t: 0, i: 427, }, D { l: 6, t: 0, i: 413 }, D { l: 7, t: 10, i: 335, }, D { l: 7, t: 10, i: 1437, }, D { l: 7, t: 10, i: 1668, }, D { l: 8, t: 10, i: 553, }, D { l: 8, t: 10, i: 652, }, D { l: 8, t: 10, i: 656, }, D { l: 9, t: 10, i: 558, }, D { l: 11, t: 10, i: 743, }, D { l: 149, t: 10, i: 18, }, D { l: 132, t: 0, i: 730, }, D { l: 6, t: 11, i: 19 }, D { l: 7, t: 11, i: 1413, }, D { l: 139, t: 11, i: 428, }, D { l: 133, t: 0, i: 373, }, D { l: 132, t: 10, i: 559, }, D { l: 7, t: 11, i: 96 }, D { l: 8, t: 11, i: 401, }, D { l: 137, t: 11, i: 896, }, D { l: 7, t: 0, i: 799 }, D { l: 7, t: 0, i: 1972, }, D { l: 5, t: 10, i: 1017, }, D { l: 138, t: 10, i: 511, }, D { l: 135, t: 0, i: 1793, }, D { l: 7, t: 11, i: 1961, }, D { l: 7, t: 11, i: 1965, }, D { l: 8, t: 11, i: 702, }, D { l: 136, t: 11, i: 750, }, D { l: 8, t: 11, i: 150, }, D { l: 8, t: 11, i: 737, }, D { l: 140, t: 11, i: 366, }, D { l: 132, t: 0, i: 322, }, D { l: 133, t: 10, i: 709, }, D { l: 8, t: 11, i: 800, }, D { l: 9, t: 11, i: 148, }, D { l: 9, t: 11, i: 872, }, D { l: 9, t: 11, i: 890, }, D { l: 11, t: 11, i: 309, }, D { l: 11, t: 11, i: 1001, }, D { l: 13, t: 11, i: 267, }, D { l: 141, t: 11, i: 323, }, D { l: 134, t: 10, i: 1745, }, D { l: 7, t: 0, i: 290 }, D { l: 136, t: 10, i: 206, }, D { l: 7, t: 0, i: 1651, }, D { l: 145, t: 0, i: 89, }, D { l: 139, t: 0, i: 2 }, D { l: 132, t: 0, i: 672, }, D { l: 6, t: 0, i: 1860, }, D { l: 8, t: 0, i: 905 }, D { l: 10, t: 0, i: 844, }, D { l: 10, t: 0, i: 846, }, D { l: 10, t: 0, i: 858, }, D { l: 12, t: 0, i: 699, }, D { l: 12, t: 0, i: 746, }, D { l: 140, t: 0, i: 772, }, D { l: 135, t: 11, i: 424, }, D { l: 133, t: 11, i: 547, }, D { l: 133, t: 0, i: 737, }, D { l: 5, t: 11, i: 490, }, D { l: 6, t: 11, i: 615, }, D { l: 6, t: 11, i: 620, }, D { l: 135, t: 11, i: 683, }, D { l: 6, t: 0, i: 746 }, D { l: 134, t: 0, i: 1612, }, D { l: 132, t: 10, i: 776, }, D { l: 9, t: 11, i: 385, }, D { l: 149, t: 11, i: 17, }, D { l: 133, t: 0, i: 145, }, D { l: 135, t: 10, i: 1272, }, D { l: 7, t: 0, i: 884 }, D { l: 140, t: 0, i: 124, }, D { l: 4, t: 0, i: 387 }, D { l: 135, t: 0, i: 1288, }, D { l: 5, t: 11, i: 133, }, D { l: 136, t: 10, i: 406, }, D { l: 136, t: 11, i: 187, }, D { l: 6, t: 0, i: 679 }, D { l: 8, t: 11, i: 8 }, D { l: 138, t: 11, i: 0, }, D { l: 135, t: 0, i: 550, }, D { l: 135, t: 11, i: 798, }, D { l: 136, t: 11, i: 685, }, D { l: 7, t: 11, i: 1086, }, D { l: 145, t: 11, i: 46, }, D { l: 8, t: 10, i: 175, }, D { l: 10, t: 10, i: 168, }, D { l: 138, t: 10, i: 573, }, D { l: 135, t: 0, i: 1305, }, D { l: 4, t: 0, i: 576 }, D { l: 135, t: 0, i: 1263, }, D { l: 6, t: 0, i: 686 }, D { l: 134, t: 0, i: 1563, }, D { l: 134, t: 0, i: 607, }, D { l: 5, t: 0, i: 919 }, D { l: 134, t: 0, i: 1673, }, D { l: 148, t: 0, i: 37, }, D { l: 8, t: 11, i: 774, }, D { l: 10, t: 11, i: 670, }, D { l: 140, t: 11, i: 51, }, D { l: 133, t: 10, i: 784, }, D { l: 139, t: 10, i: 882, }, D { l: 4, t: 0, i: 82 }, D { l: 5, t: 0, i: 333 }, D { l: 5, t: 0, i: 904 }, D { l: 6, t: 0, i: 207 }, D { l: 7, t: 0, i: 325 }, D { l: 7, t: 0, i: 1726, }, D { l: 8, t: 0, i: 101 }, D { l: 10, t: 0, i: 778, }, D { l: 139, t: 0, i: 220, }, D { l: 135, t: 11, i: 371, }, D { l: 132, t: 0, i: 958, }, D { l: 133, t: 0, i: 903, }, D { l: 4, t: 11, i: 127, }, D { l: 5, t: 11, i: 350, }, D { l: 6, t: 11, i: 356, }, D { l: 8, t: 11, i: 426, }, D { l: 9, t: 11, i: 572, }, D { l: 10, t: 11, i: 247, }, D { l: 139, t: 11, i: 312, }, D { l: 140, t: 0, i: 147, }, D { l: 6, t: 11, i: 59 }, D { l: 7, t: 11, i: 885, }, D { l: 9, t: 11, i: 603, }, D { l: 141, t: 11, i: 397, }, D { l: 10, t: 0, i: 367, }, D { l: 9, t: 10, i: 14 }, D { l: 9, t: 10, i: 441, }, D { l: 139, t: 10, i: 9, }, D { l: 11, t: 10, i: 966, }, D { l: 12, t: 10, i: 287, }, D { l: 13, t: 10, i: 342, }, D { l: 13, t: 10, i: 402, }, D { l: 15, t: 10, i: 110, }, D { l: 143, t: 10, i: 163, }, D { l: 134, t: 0, i: 690, }, D { l: 132, t: 0, i: 705, }, D { l: 9, t: 0, i: 651 }, D { l: 11, t: 0, i: 971, }, D { l: 13, t: 0, i: 273, }, D { l: 7, t: 10, i: 1428, }, D { l: 7, t: 10, i: 1640, }, D { l: 7, t: 10, i: 1867, }, D { l: 9, t: 10, i: 169, }, D { l: 9, t: 10, i: 182, }, D { l: 9, t: 10, i: 367, }, D { l: 9, t: 10, i: 478, }, D { l: 9, t: 10, i: 506, }, D { l: 9, t: 10, i: 551, }, D { l: 9, t: 10, i: 557, }, D { l: 9, t: 10, i: 648, }, D { l: 9, t: 10, i: 697, }, D { l: 9, t: 10, i: 705, }, D { l: 9, t: 10, i: 725, }, D { l: 9, t: 10, i: 787, }, D { l: 9, t: 10, i: 794, }, D { l: 10, t: 10, i: 198, }, D { l: 10, t: 10, i: 214, }, D { l: 10, t: 10, i: 267, }, D { l: 10, t: 10, i: 275, }, D { l: 10, t: 10, i: 456, }, D { l: 10, t: 10, i: 551, }, D { l: 10, t: 10, i: 561, }, D { l: 10, t: 10, i: 613, }, D { l: 10, t: 10, i: 627, }, D { l: 10, t: 10, i: 668, }, D { l: 10, t: 10, i: 675, }, D { l: 10, t: 10, i: 691, }, D { l: 10, t: 10, i: 695, }, D { l: 10, t: 10, i: 707, }, D { l: 10, t: 10, i: 715, }, D { l: 11, t: 10, i: 183, }, D { l: 11, t: 10, i: 201, }, D { l: 11, t: 10, i: 262, }, D { l: 11, t: 10, i: 352, }, D { l: 11, t: 10, i: 439, }, D { l: 11, t: 10, i: 493, }, D { l: 11, t: 10, i: 572, }, D { l: 11, t: 10, i: 591, }, D { l: 11, t: 10, i: 608, }, D { l: 11, t: 10, i: 611, }, D { l: 11, t: 10, i: 646, }, D { l: 11, t: 10, i: 674, }, D { l: 11, t: 10, i: 711, }, D { l: 11, t: 10, i: 751, }, D { l: 11, t: 10, i: 761, }, D { l: 11, t: 10, i: 776, }, D { l: 11, t: 10, i: 785, }, D { l: 11, t: 10, i: 850, }, D { l: 11, t: 10, i: 853, }, D { l: 11, t: 10, i: 862, }, D { l: 11, t: 10, i: 865, }, D { l: 11, t: 10, i: 868, }, D { l: 11, t: 10, i: 875, }, D { l: 11, t: 10, i: 898, }, D { l: 11, t: 10, i: 902, }, D { l: 11, t: 10, i: 903, }, D { l: 11, t: 10, i: 910, }, D { l: 11, t: 10, i: 932, }, D { l: 11, t: 10, i: 942, }, D { l: 11, t: 10, i: 957, }, D { l: 11, t: 10, i: 967, }, D { l: 11, t: 10, i: 972, }, D { l: 12, t: 10, i: 148, }, D { l: 12, t: 10, i: 195, }, D { l: 12, t: 10, i: 220, }, D { l: 12, t: 10, i: 237, }, D { l: 12, t: 10, i: 318, }, D { l: 12, t: 10, i: 339, }, D { l: 12, t: 10, i: 393, }, D { l: 12, t: 10, i: 445, }, D { l: 12, t: 10, i: 450, }, D { l: 12, t: 10, i: 474, }, D { l: 12, t: 10, i: 505, }, D { l: 12, t: 10, i: 509, }, D { l: 12, t: 10, i: 533, }, D { l: 12, t: 10, i: 591, }, D { l: 12, t: 10, i: 594, }, D { l: 12, t: 10, i: 597, }, D { l: 12, t: 10, i: 621, }, D { l: 12, t: 10, i: 633, }, D { l: 12, t: 10, i: 642, }, D { l: 13, t: 10, i: 59, }, D { l: 13, t: 10, i: 60, }, D { l: 13, t: 10, i: 145, }, D { l: 13, t: 10, i: 239, }, D { l: 13, t: 10, i: 250, }, D { l: 13, t: 10, i: 329, }, D { l: 13, t: 10, i: 344, }, D { l: 13, t: 10, i: 365, }, D { l: 13, t: 10, i: 372, }, D { l: 13, t: 10, i: 387, }, D { l: 13, t: 10, i: 403, }, D { l: 13, t: 10, i: 414, }, D { l: 13, t: 10, i: 456, }, D { l: 13, t: 10, i: 470, }, D { l: 13, t: 10, i: 478, }, D { l: 13, t: 10, i: 483, }, D { l: 13, t: 10, i: 489, }, D { l: 14, t: 10, i: 55, }, D { l: 14, t: 10, i: 57, }, D { l: 14, t: 10, i: 81, }, D { l: 14, t: 10, i: 90, }, D { l: 14, t: 10, i: 148, }, D { l: 14, t: 10, i: 239, }, D { l: 14, t: 10, i: 266, }, D { l: 14, t: 10, i: 321, }, D { l: 14, t: 10, i: 326, }, D { l: 14, t: 10, i: 327, }, D { l: 14, t: 10, i: 330, }, D { l: 14, t: 10, i: 347, }, D { l: 14, t: 10, i: 355, }, D { l: 14, t: 10, i: 401, }, D { l: 14, t: 10, i: 404, }, D { l: 14, t: 10, i: 411, }, D { l: 14, t: 10, i: 414, }, D { l: 14, t: 10, i: 416, }, D { l: 14, t: 10, i: 420, }, D { l: 15, t: 10, i: 61, }, D { l: 15, t: 10, i: 74, }, D { l: 15, t: 10, i: 87, }, D { l: 15, t: 10, i: 88, }, D { l: 15, t: 10, i: 94, }, D { l: 15, t: 10, i: 96, }, D { l: 15, t: 10, i: 116, }, D { l: 15, t: 10, i: 149, }, D { l: 15, t: 10, i: 154, }, D { l: 16, t: 10, i: 50, }, D { l: 16, t: 10, i: 63, }, D { l: 16, t: 10, i: 73, }, D { l: 17, t: 10, i: 2 }, D { l: 17, t: 10, i: 66, }, D { l: 17, t: 10, i: 92, }, D { l: 17, t: 10, i: 103, }, D { l: 17, t: 10, i: 112, }, D { l: 17, t: 10, i: 120, }, D { l: 18, t: 10, i: 50, }, D { l: 18, t: 10, i: 54, }, D { l: 18, t: 10, i: 82, }, D { l: 18, t: 10, i: 86, }, D { l: 18, t: 10, i: 90, }, D { l: 18, t: 10, i: 111, }, D { l: 18, t: 10, i: 115, }, D { l: 18, t: 10, i: 156, }, D { l: 19, t: 10, i: 40, }, D { l: 19, t: 10, i: 79, }, D { l: 20, t: 10, i: 78, }, D { l: 149, t: 10, i: 22, }, D { l: 7, t: 0, i: 887 }, D { l: 5, t: 10, i: 161, }, D { l: 135, t: 10, i: 839, }, D { l: 142, t: 11, i: 98, }, D { l: 134, t: 0, i: 90, }, D { l: 138, t: 11, i: 356, }, D { l: 135, t: 11, i: 441, }, D { l: 6, t: 11, i: 111, }, D { l: 7, t: 11, i: 4 }, D { l: 8, t: 11, i: 163, }, D { l: 8, t: 11, i: 776, }, D { l: 138, t: 11, i: 566, }, D { l: 134, t: 0, i: 908, }, D { l: 134, t: 0, i: 1261, }, D { l: 7, t: 0, i: 813 }, D { l: 12, t: 0, i: 497, }, D { l: 141, t: 0, i: 56, }, D { l: 134, t: 0, i: 1235, }, D { l: 135, t: 0, i: 429, }, D { l: 135, t: 11, i: 1994, }, D { l: 138, t: 0, i: 904, }, D { l: 6, t: 0, i: 125 }, D { l: 7, t: 0, i: 1277, }, D { l: 137, t: 0, i: 772, }, D { l: 151, t: 0, i: 12, }, D { l: 4, t: 0, i: 841 }, D { l: 5, t: 0, i: 386 }, D { l: 133, t: 11, i: 386, }, D { l: 5, t: 11, i: 297, }, D { l: 135, t: 11, i: 1038, }, D { l: 6, t: 0, i: 860 }, D { l: 6, t: 0, i: 1069, }, D { l: 135, t: 11, i: 309, }, D { l: 136, t: 0, i: 946, }, D { l: 135, t: 10, i: 1814, }, D { l: 141, t: 11, i: 418, }, D { l: 136, t: 11, i: 363, }, D { l: 10, t: 0, i: 768, }, D { l: 139, t: 0, i: 787, }, D { l: 22, t: 11, i: 30, }, D { l: 150, t: 11, i: 33, }, D { l: 6, t: 0, i: 160 }, D { l: 7, t: 0, i: 1106, }, D { l: 9, t: 0, i: 770 }, D { l: 11, t: 0, i: 112, }, D { l: 140, t: 0, i: 413, }, D { l: 11, t: 11, i: 216, }, D { l: 139, t: 11, i: 340, }, D { l: 136, t: 10, i: 139, }, D { l: 135, t: 11, i: 1390, }, D { l: 135, t: 11, i: 808, }, D { l: 132, t: 11, i: 280, }, D { l: 12, t: 0, i: 271, }, D { l: 17, t: 0, i: 109, }, D { l: 7, t: 10, i: 643, }, D { l: 136, t: 10, i: 236, }, D { l: 140, t: 11, i: 54, }, D { l: 4, t: 11, i: 421, }, D { l: 133, t: 11, i: 548, }, D { l: 11, t: 0, i: 719, }, D { l: 12, t: 0, i: 36 }, D { l: 141, t: 0, i: 337, }, D { l: 7, t: 0, i: 581 }, D { l: 9, t: 0, i: 644 }, D { l: 137, t: 0, i: 699, }, D { l: 11, t: 11, i: 511, }, D { l: 13, t: 11, i: 394, }, D { l: 14, t: 11, i: 298, }, D { l: 14, t: 11, i: 318, }, D { l: 146, t: 11, i: 103, }, D { l: 7, t: 0, i: 304 }, D { l: 9, t: 0, i: 646 }, D { l: 9, t: 0, i: 862 }, D { l: 11, t: 0, i: 696, }, D { l: 12, t: 0, i: 208, }, D { l: 15, t: 0, i: 79 }, D { l: 147, t: 0, i: 108, }, D { l: 4, t: 0, i: 631 }, D { l: 7, t: 0, i: 1126, }, D { l: 135, t: 0, i: 1536, }, D { l: 135, t: 11, i: 1527, }, D { l: 8, t: 0, i: 880 }, D { l: 10, t: 0, i: 869, }, D { l: 138, t: 0, i: 913, }, D { l: 7, t: 0, i: 1513, }, D { l: 5, t: 10, i: 54 }, D { l: 6, t: 11, i: 254, }, D { l: 9, t: 11, i: 109, }, D { l: 138, t: 11, i: 103, }, D { l: 135, t: 0, i: 981, }, D { l: 133, t: 11, i: 729, }, D { l: 132, t: 10, i: 744, }, D { l: 132, t: 0, i: 434, }, D { l: 134, t: 0, i: 550, }, D { l: 7, t: 0, i: 930 }, D { l: 10, t: 0, i: 476, }, D { l: 13, t: 0, i: 452, }, D { l: 19, t: 0, i: 104, }, D { l: 6, t: 11, i: 1630, }, D { l: 10, t: 10, i: 402, }, D { l: 146, t: 10, i: 55, }, D { l: 5, t: 0, i: 553 }, D { l: 138, t: 0, i: 824, }, D { l: 136, t: 0, i: 452, }, D { l: 8, t: 0, i: 151 }, D { l: 137, t: 10, i: 624, }, D { l: 132, t: 10, i: 572, }, D { l: 132, t: 0, i: 772, }, D { l: 133, t: 11, i: 671, }, D { l: 133, t: 0, i: 292, }, D { l: 138, t: 0, i: 135, }, D { l: 132, t: 11, i: 889, }, D { l: 140, t: 11, i: 207, }, D { l: 9, t: 0, i: 504 }, D { l: 6, t: 10, i: 43 }, D { l: 7, t: 10, i: 38 }, D { l: 8, t: 10, i: 248, }, D { l: 138, t: 10, i: 513, }, D { l: 6, t: 0, i: 1089, }, D { l: 135, t: 11, i: 1910, }, D { l: 4, t: 11, i: 627, }, D { l: 133, t: 11, i: 775, }, D { l: 135, t: 0, i: 783, }, D { l: 133, t: 10, i: 766, }, D { l: 133, t: 10, i: 363, }, D { l: 7, t: 0, i: 387 }, D { l: 135, t: 11, i: 387, }, D { l: 7, t: 0, i: 393 }, D { l: 10, t: 0, i: 603, }, D { l: 11, t: 0, i: 206, }, D { l: 7, t: 11, i: 202, }, D { l: 11, t: 11, i: 362, }, D { l: 11, t: 11, i: 948, }, D { l: 140, t: 11, i: 388, }, D { l: 6, t: 11, i: 507, }, D { l: 7, t: 11, i: 451, }, D { l: 8, t: 11, i: 389, }, D { l: 12, t: 11, i: 490, }, D { l: 13, t: 11, i: 16, }, D { l: 13, t: 11, i: 215, }, D { l: 13, t: 11, i: 351, }, D { l: 18, t: 11, i: 132, }, D { l: 147, t: 11, i: 125, }, D { l: 4, t: 0, i: 912 }, D { l: 9, t: 0, i: 232 }, D { l: 135, t: 11, i: 841, }, D { l: 6, t: 10, i: 258, }, D { l: 140, t: 10, i: 409, }, D { l: 5, t: 10, i: 249, }, D { l: 148, t: 10, i: 82, }, D { l: 136, t: 11, i: 566, }, D { l: 6, t: 0, i: 977 }, D { l: 135, t: 11, i: 1214, }, D { l: 7, t: 0, i: 1973, }, D { l: 136, t: 0, i: 716, }, D { l: 135, t: 0, i: 98, }, D { l: 133, t: 0, i: 733, }, D { l: 5, t: 11, i: 912, }, D { l: 134, t: 11, i: 1695, }, D { l: 5, t: 10, i: 393, }, D { l: 6, t: 10, i: 378, }, D { l: 7, t: 10, i: 1981, }, D { l: 9, t: 10, i: 32 }, D { l: 9, t: 10, i: 591, }, D { l: 10, t: 10, i: 685, }, D { l: 10, t: 10, i: 741, }, D { l: 142, t: 10, i: 382, }, D { l: 133, t: 10, i: 788, }, D { l: 10, t: 0, i: 19 }, D { l: 11, t: 0, i: 911, }, D { l: 7, t: 10, i: 1968, }, D { l: 141, t: 10, i: 509, }, D { l: 5, t: 0, i: 668 }, D { l: 5, t: 11, i: 236, }, D { l: 6, t: 11, i: 572, }, D { l: 8, t: 11, i: 492, }, D { l: 11, t: 11, i: 618, }, D { l: 144, t: 11, i: 56, }, D { l: 135, t: 11, i: 1789, }, D { l: 4, t: 0, i: 360 }, D { l: 5, t: 0, i: 635 }, D { l: 5, t: 0, i: 700 }, D { l: 5, t: 10, i: 58 }, D { l: 5, t: 10, i: 171, }, D { l: 5, t: 10, i: 683, }, D { l: 6, t: 10, i: 291, }, D { l: 6, t: 10, i: 566, }, D { l: 7, t: 10, i: 1650, }, D { l: 11, t: 10, i: 523, }, D { l: 12, t: 10, i: 273, }, D { l: 12, t: 10, i: 303, }, D { l: 15, t: 10, i: 39, }, D { l: 143, t: 10, i: 111, }, D { l: 133, t: 0, i: 901, }, D { l: 134, t: 10, i: 589, }, D { l: 5, t: 11, i: 190, }, D { l: 136, t: 11, i: 318, }, D { l: 140, t: 0, i: 656, }, D { l: 7, t: 0, i: 726 }, D { l: 152, t: 0, i: 9 }, D { l: 4, t: 10, i: 917, }, D { l: 133, t: 10, i: 1005, }, D { l: 135, t: 10, i: 1598, }, D { l: 134, t: 11, i: 491, }, D { l: 4, t: 10, i: 919, }, D { l: 133, t: 11, i: 434, }, D { l: 137, t: 0, i: 72, }, D { l: 6, t: 0, i: 1269, }, D { l: 6, t: 0, i: 1566, }, D { l: 134, t: 0, i: 1621, }, D { l: 9, t: 0, i: 463 }, D { l: 10, t: 0, i: 595, }, D { l: 4, t: 10, i: 255, }, D { l: 5, t: 10, i: 302, }, D { l: 6, t: 10, i: 132, }, D { l: 7, t: 10, i: 128, }, D { l: 7, t: 10, i: 283, }, D { l: 7, t: 10, i: 1299, }, D { l: 10, t: 10, i: 52, }, D { l: 10, t: 10, i: 514, }, D { l: 11, t: 10, i: 925, }, D { l: 13, t: 10, i: 92, }, D { l: 142, t: 10, i: 309, }, D { l: 135, t: 0, i: 1454, }, D { l: 134, t: 0, i: 1287, }, D { l: 11, t: 0, i: 600, }, D { l: 13, t: 0, i: 245, }, D { l: 137, t: 10, i: 173, }, D { l: 136, t: 0, i: 989, }, D { l: 7, t: 0, i: 164 }, D { l: 7, t: 0, i: 1571, }, D { l: 9, t: 0, i: 107 }, D { l: 140, t: 0, i: 225, }, D { l: 6, t: 0, i: 1061, }, D { l: 141, t: 10, i: 442, }, D { l: 4, t: 0, i: 27 }, D { l: 5, t: 0, i: 484 }, D { l: 5, t: 0, i: 510 }, D { l: 6, t: 0, i: 434 }, D { l: 7, t: 0, i: 1000, }, D { l: 7, t: 0, i: 1098, }, D { l: 136, t: 0, i: 2 }, D { l: 7, t: 11, i: 85 }, D { l: 7, t: 11, i: 247, }, D { l: 8, t: 11, i: 585, }, D { l: 10, t: 11, i: 163, }, D { l: 138, t: 11, i: 316, }, D { l: 11, t: 11, i: 103, }, D { l: 142, t: 11, i: 0, }, D { l: 134, t: 0, i: 1127, }, D { l: 4, t: 0, i: 460 }, D { l: 134, t: 0, i: 852, }, D { l: 134, t: 10, i: 210, }, D { l: 4, t: 0, i: 932 }, D { l: 133, t: 0, i: 891, }, D { l: 6, t: 0, i: 588 }, D { l: 147, t: 11, i: 83, }, D { l: 8, t: 0, i: 625 }, D { l: 4, t: 10, i: 284, }, D { l: 134, t: 10, i: 223, }, D { l: 134, t: 0, i: 76, }, D { l: 8, t: 0, i: 92 }, D { l: 137, t: 0, i: 221, }, D { l: 4, t: 11, i: 124, }, D { l: 10, t: 11, i: 457, }, D { l: 11, t: 11, i: 121, }, D { l: 11, t: 11, i: 169, }, D { l: 11, t: 11, i: 422, }, D { l: 11, t: 11, i: 870, }, D { l: 12, t: 11, i: 214, }, D { l: 13, t: 11, i: 389, }, D { l: 14, t: 11, i: 187, }, D { l: 143, t: 11, i: 77, }, D { l: 9, t: 11, i: 618, }, D { l: 138, t: 11, i: 482, }, D { l: 4, t: 10, i: 218, }, D { l: 7, t: 10, i: 526, }, D { l: 143, t: 10, i: 137, }, D { l: 13, t: 0, i: 9 }, D { l: 14, t: 0, i: 104, }, D { l: 14, t: 0, i: 311, }, D { l: 4, t: 10, i: 270, }, D { l: 5, t: 10, i: 192, }, D { l: 6, t: 10, i: 332, }, D { l: 135, t: 10, i: 1322, }, D { l: 140, t: 10, i: 661, }, D { l: 135, t: 11, i: 1193, }, D { l: 6, t: 11, i: 107, }, D { l: 7, t: 11, i: 638, }, D { l: 7, t: 11, i: 1632, }, D { l: 137, t: 11, i: 396, }, D { l: 132, t: 0, i: 763, }, D { l: 4, t: 0, i: 622 }, D { l: 5, t: 11, i: 370, }, D { l: 134, t: 11, i: 1756, }, D { l: 133, t: 0, i: 253, }, D { l: 135, t: 0, i: 546, }, D { l: 9, t: 0, i: 73 }, D { l: 10, t: 0, i: 110, }, D { l: 14, t: 0, i: 185, }, D { l: 17, t: 0, i: 119, }, D { l: 133, t: 11, i: 204, }, D { l: 7, t: 0, i: 624 }, D { l: 7, t: 0, i: 916 }, D { l: 10, t: 0, i: 256, }, D { l: 139, t: 0, i: 87, }, D { l: 7, t: 10, i: 379, }, D { l: 8, t: 10, i: 481, }, D { l: 137, t: 10, i: 377, }, D { l: 5, t: 0, i: 212 }, D { l: 12, t: 0, i: 35 }, D { l: 13, t: 0, i: 382, }, D { l: 5, t: 11, i: 970, }, D { l: 134, t: 11, i: 1706, }, D { l: 9, t: 0, i: 746 }, D { l: 5, t: 10, i: 1003, }, D { l: 134, t: 10, i: 149, }, D { l: 10, t: 0, i: 150, }, D { l: 11, t: 0, i: 849, }, D { l: 13, t: 0, i: 330, }, D { l: 8, t: 10, i: 262, }, D { l: 9, t: 10, i: 627, }, D { l: 11, t: 10, i: 214, }, D { l: 11, t: 10, i: 404, }, D { l: 11, t: 10, i: 457, }, D { l: 11, t: 10, i: 780, }, D { l: 11, t: 10, i: 913, }, D { l: 13, t: 10, i: 401, }, D { l: 142, t: 10, i: 200, }, D { l: 134, t: 0, i: 1466, }, D { l: 135, t: 11, i: 3, }, D { l: 6, t: 0, i: 1299, }, D { l: 4, t: 11, i: 35 }, D { l: 5, t: 11, i: 121, }, D { l: 5, t: 11, i: 483, }, D { l: 5, t: 11, i: 685, }, D { l: 6, t: 11, i: 489, }, D { l: 7, t: 11, i: 1204, }, D { l: 136, t: 11, i: 394, }, D { l: 135, t: 10, i: 742, }, D { l: 4, t: 10, i: 142, }, D { l: 136, t: 10, i: 304, }, D { l: 4, t: 11, i: 921, }, D { l: 133, t: 11, i: 1007, }, D { l: 134, t: 0, i: 1518, }, D { l: 6, t: 0, i: 1229, }, D { l: 135, t: 0, i: 1175, }, D { l: 133, t: 0, i: 816, }, D { l: 12, t: 0, i: 159, }, D { l: 4, t: 10, i: 471, }, D { l: 4, t: 11, i: 712, }, D { l: 5, t: 10, i: 51 }, D { l: 6, t: 10, i: 602, }, D { l: 7, t: 10, i: 925, }, D { l: 8, t: 10, i: 484, }, D { l: 138, t: 10, i: 195, }, D { l: 134, t: 11, i: 1629, }, D { l: 5, t: 0, i: 869 }, D { l: 5, t: 0, i: 968 }, D { l: 6, t: 0, i: 1626, }, D { l: 8, t: 0, i: 734 }, D { l: 136, t: 0, i: 784, }, D { l: 4, t: 0, i: 542 }, D { l: 6, t: 0, i: 1716, }, D { l: 6, t: 0, i: 1727, }, D { l: 7, t: 0, i: 1082, }, D { l: 7, t: 0, i: 1545, }, D { l: 8, t: 0, i: 56 }, D { l: 8, t: 0, i: 118 }, D { l: 8, t: 0, i: 412 }, D { l: 8, t: 0, i: 564 }, D { l: 9, t: 0, i: 888 }, D { l: 9, t: 0, i: 908 }, D { l: 10, t: 0, i: 50 }, D { l: 10, t: 0, i: 423, }, D { l: 11, t: 0, i: 685, }, D { l: 11, t: 0, i: 697, }, D { l: 11, t: 0, i: 933, }, D { l: 12, t: 0, i: 299, }, D { l: 13, t: 0, i: 126, }, D { l: 13, t: 0, i: 136, }, D { l: 13, t: 0, i: 170, }, D { l: 13, t: 0, i: 190, }, D { l: 136, t: 10, i: 688, }, D { l: 132, t: 10, i: 697, }, D { l: 4, t: 0, i: 232 }, D { l: 9, t: 0, i: 202 }, D { l: 10, t: 0, i: 474, }, D { l: 140, t: 0, i: 433, }, D { l: 136, t: 0, i: 212, }, D { l: 6, t: 0, i: 108 }, D { l: 7, t: 0, i: 1003, }, D { l: 7, t: 0, i: 1181, }, D { l: 8, t: 0, i: 111 }, D { l: 136, t: 0, i: 343, }, D { l: 5, t: 10, i: 221, }, D { l: 135, t: 11, i: 1255, }, D { l: 133, t: 11, i: 485, }, D { l: 134, t: 0, i: 1712, }, D { l: 142, t: 0, i: 216, }, D { l: 5, t: 0, i: 643 }, D { l: 6, t: 0, i: 516 }, D { l: 4, t: 11, i: 285, }, D { l: 5, t: 11, i: 317, }, D { l: 6, t: 11, i: 301, }, D { l: 7, t: 11, i: 7 }, D { l: 8, t: 11, i: 153, }, D { l: 10, t: 11, i: 766, }, D { l: 11, t: 11, i: 468, }, D { l: 12, t: 11, i: 467, }, D { l: 141, t: 11, i: 143, }, D { l: 4, t: 0, i: 133 }, D { l: 7, t: 0, i: 711 }, D { l: 7, t: 0, i: 1298, }, D { l: 135, t: 0, i: 1585, }, D { l: 134, t: 0, i: 650, }, D { l: 135, t: 11, i: 512, }, D { l: 6, t: 0, i: 99 }, D { l: 7, t: 0, i: 1808, }, D { l: 145, t: 0, i: 57, }, D { l: 6, t: 0, i: 246 }, D { l: 6, t: 0, i: 574 }, D { l: 7, t: 0, i: 428 }, D { l: 9, t: 0, i: 793 }, D { l: 10, t: 0, i: 669, }, D { l: 11, t: 0, i: 485, }, D { l: 11, t: 0, i: 840, }, D { l: 12, t: 0, i: 300, }, D { l: 14, t: 0, i: 250, }, D { l: 145, t: 0, i: 55, }, D { l: 4, t: 10, i: 132, }, D { l: 5, t: 10, i: 69 }, D { l: 135, t: 10, i: 1242, }, D { l: 136, t: 0, i: 1023, }, D { l: 7, t: 0, i: 302 }, D { l: 132, t: 10, i: 111, }, D { l: 135, t: 0, i: 1871, }, D { l: 132, t: 0, i: 728, }, D { l: 9, t: 0, i: 252 }, D { l: 132, t: 10, i: 767, }, D { l: 6, t: 0, i: 461 }, D { l: 7, t: 0, i: 1590, }, D { l: 7, t: 10, i: 1416, }, D { l: 7, t: 10, i: 2005, }, D { l: 8, t: 10, i: 131, }, D { l: 8, t: 10, i: 466, }, D { l: 9, t: 10, i: 672, }, D { l: 13, t: 10, i: 252, }, D { l: 148, t: 10, i: 103, }, D { l: 6, t: 0, i: 323 }, D { l: 135, t: 0, i: 1564, }, D { l: 7, t: 0, i: 461 }, D { l: 136, t: 0, i: 775, }, D { l: 6, t: 10, i: 44 }, D { l: 136, t: 10, i: 368, }, D { l: 139, t: 0, i: 172, }, D { l: 132, t: 0, i: 464, }, D { l: 4, t: 10, i: 570, }, D { l: 133, t: 10, i: 120, }, D { l: 137, t: 11, i: 269, }, D { l: 6, t: 10, i: 227, }, D { l: 135, t: 10, i: 1589, }, D { l: 6, t: 11, i: 1719, }, D { l: 6, t: 11, i: 1735, }, D { l: 7, t: 11, i: 2016, }, D { l: 7, t: 11, i: 2020, }, D { l: 8, t: 11, i: 837, }, D { l: 137, t: 11, i: 852, }, D { l: 7, t: 0, i: 727 }, D { l: 146, t: 0, i: 73, }, D { l: 132, t: 0, i: 1023, }, D { l: 135, t: 11, i: 852, }, D { l: 135, t: 10, i: 1529, }, D { l: 136, t: 0, i: 577, }, D { l: 138, t: 11, i: 568, }, D { l: 134, t: 0, i: 1037, }, D { l: 8, t: 11, i: 67 }, D { l: 138, t: 11, i: 419, }, D { l: 4, t: 0, i: 413 }, D { l: 5, t: 0, i: 677 }, D { l: 8, t: 0, i: 432 }, D { l: 140, t: 0, i: 280, }, D { l: 10, t: 0, i: 600, }, D { l: 6, t: 10, i: 1667, }, D { l: 7, t: 11, i: 967, }, D { l: 7, t: 10, i: 2036, }, D { l: 141, t: 11, i: 11, }, D { l: 6, t: 10, i: 511, }, D { l: 140, t: 10, i: 132, }, D { l: 6, t: 0, i: 799 }, D { l: 5, t: 10, i: 568, }, D { l: 6, t: 10, i: 138, }, D { l: 135, t: 10, i: 1293, }, D { l: 8, t: 0, i: 159 }, D { l: 4, t: 10, i: 565, }, D { l: 136, t: 10, i: 827, }, D { l: 7, t: 0, i: 646 }, D { l: 7, t: 0, i: 1730, }, D { l: 11, t: 0, i: 446, }, D { l: 141, t: 0, i: 178, }, D { l: 4, t: 10, i: 922, }, D { l: 133, t: 10, i: 1023, }, D { l: 135, t: 11, i: 11, }, D { l: 132, t: 0, i: 395, }, D { l: 11, t: 0, i: 145, }, D { l: 135, t: 10, i: 1002, }, D { l: 9, t: 0, i: 174 }, D { l: 10, t: 0, i: 164, }, D { l: 11, t: 0, i: 440, }, D { l: 11, t: 0, i: 514, }, D { l: 11, t: 0, i: 841, }, D { l: 15, t: 0, i: 98 }, D { l: 149, t: 0, i: 20, }, D { l: 134, t: 0, i: 426, }, D { l: 10, t: 0, i: 608, }, D { l: 139, t: 0, i: 1002, }, D { l: 7, t: 11, i: 320, }, D { l: 8, t: 11, i: 51 }, D { l: 12, t: 11, i: 481, }, D { l: 12, t: 11, i: 570, }, D { l: 148, t: 11, i: 106, }, D { l: 9, t: 0, i: 977 }, D { l: 9, t: 0, i: 983 }, D { l: 132, t: 11, i: 445, }, D { l: 138, t: 0, i: 250, }, D { l: 139, t: 0, i: 100, }, D { l: 6, t: 0, i: 1982, }, D { l: 136, t: 10, i: 402, }, D { l: 133, t: 11, i: 239, }, D { l: 4, t: 10, i: 716, }, D { l: 141, t: 10, i: 31, }, D { l: 5, t: 0, i: 476 }, D { l: 7, t: 11, i: 83 }, D { l: 7, t: 11, i: 1990, }, D { l: 8, t: 11, i: 130, }, D { l: 139, t: 11, i: 720, }, D { l: 8, t: 10, i: 691, }, D { l: 136, t: 10, i: 731, }, D { l: 5, t: 11, i: 123, }, D { l: 6, t: 11, i: 530, }, D { l: 7, t: 11, i: 348, }, D { l: 135, t: 11, i: 1419, }, D { l: 5, t: 0, i: 76 }, D { l: 6, t: 0, i: 458 }, D { l: 6, t: 0, i: 497 }, D { l: 7, t: 0, i: 868 }, D { l: 9, t: 0, i: 658 }, D { l: 10, t: 0, i: 594, }, D { l: 11, t: 0, i: 173, }, D { l: 11, t: 0, i: 566, }, D { l: 12, t: 0, i: 20 }, D { l: 12, t: 0, i: 338, }, D { l: 141, t: 0, i: 200, }, D { l: 9, t: 11, i: 139, }, D { l: 10, t: 11, i: 399, }, D { l: 11, t: 11, i: 469, }, D { l: 12, t: 11, i: 634, }, D { l: 141, t: 11, i: 223, }, D { l: 9, t: 10, i: 840, }, D { l: 138, t: 10, i: 803, }, D { l: 133, t: 10, i: 847, }, D { l: 11, t: 11, i: 223, }, D { l: 140, t: 11, i: 168, }, D { l: 132, t: 11, i: 210, }, D { l: 8, t: 0, i: 447 }, D { l: 9, t: 10, i: 53 }, D { l: 9, t: 10, i: 268, }, D { l: 9, t: 10, i: 901, }, D { l: 10, t: 10, i: 518, }, D { l: 10, t: 10, i: 829, }, D { l: 11, t: 10, i: 188, }, D { l: 13, t: 10, i: 74, }, D { l: 14, t: 10, i: 46, }, D { l: 15, t: 10, i: 17, }, D { l: 15, t: 10, i: 33, }, D { l: 17, t: 10, i: 40, }, D { l: 18, t: 10, i: 36, }, D { l: 19, t: 10, i: 20, }, D { l: 22, t: 10, i: 1 }, D { l: 152, t: 10, i: 2, }, D { l: 4, t: 0, i: 526 }, D { l: 7, t: 0, i: 1029, }, D { l: 135, t: 0, i: 1054, }, D { l: 19, t: 11, i: 59, }, D { l: 150, t: 11, i: 2, }, D { l: 4, t: 0, i: 636 }, D { l: 6, t: 0, i: 1875, }, D { l: 6, t: 0, i: 1920, }, D { l: 9, t: 0, i: 999 }, D { l: 12, t: 0, i: 807, }, D { l: 12, t: 0, i: 825, }, D { l: 15, t: 0, i: 179, }, D { l: 15, t: 0, i: 190, }, D { l: 18, t: 0, i: 182, }, D { l: 136, t: 10, i: 532, }, D { l: 6, t: 0, i: 1699, }, D { l: 7, t: 0, i: 660 }, D { l: 7, t: 0, i: 1124, }, D { l: 17, t: 0, i: 31 }, D { l: 19, t: 0, i: 22 }, D { l: 151, t: 0, i: 14, }, D { l: 135, t: 10, i: 681, }, D { l: 132, t: 11, i: 430, }, D { l: 140, t: 10, i: 677, }, D { l: 4, t: 10, i: 684, }, D { l: 136, t: 10, i: 384, }, D { l: 132, t: 11, i: 756, }, D { l: 133, t: 11, i: 213, }, D { l: 7, t: 0, i: 188 }, D { l: 7, t: 10, i: 110, }, D { l: 8, t: 10, i: 290, }, D { l: 8, t: 10, i: 591, }, D { l: 9, t: 10, i: 382, }, D { l: 9, t: 10, i: 649, }, D { l: 11, t: 10, i: 71, }, D { l: 11, t: 10, i: 155, }, D { l: 11, t: 10, i: 313, }, D { l: 12, t: 10, i: 5 }, D { l: 13, t: 10, i: 325, }, D { l: 142, t: 10, i: 287, }, D { l: 7, t: 10, i: 360, }, D { l: 7, t: 10, i: 425, }, D { l: 9, t: 10, i: 66 }, D { l: 9, t: 10, i: 278, }, D { l: 138, t: 10, i: 644, }, D { l: 142, t: 11, i: 164, }, D { l: 4, t: 0, i: 279 }, D { l: 7, t: 0, i: 301 }, D { l: 137, t: 0, i: 362, }, D { l: 134, t: 11, i: 586, }, D { l: 135, t: 0, i: 1743, }, D { l: 4, t: 0, i: 178 }, D { l: 133, t: 0, i: 399, }, D { l: 4, t: 10, i: 900, }, D { l: 133, t: 10, i: 861, }, D { l: 5, t: 10, i: 254, }, D { l: 7, t: 10, i: 985, }, D { l: 136, t: 10, i: 73, }, D { l: 133, t: 11, i: 108, }, D { l: 7, t: 10, i: 1959, }, D { l: 136, t: 10, i: 683, }, D { l: 133, t: 11, i: 219, }, D { l: 4, t: 11, i: 193, }, D { l: 5, t: 11, i: 916, }, D { l: 7, t: 11, i: 364, }, D { l: 10, t: 11, i: 398, }, D { l: 10, t: 11, i: 726, }, D { l: 11, t: 11, i: 317, }, D { l: 11, t: 11, i: 626, }, D { l: 12, t: 11, i: 142, }, D { l: 12, t: 11, i: 288, }, D { l: 12, t: 11, i: 678, }, D { l: 13, t: 11, i: 313, }, D { l: 15, t: 11, i: 113, }, D { l: 18, t: 11, i: 114, }, D { l: 21, t: 11, i: 30, }, D { l: 150, t: 11, i: 53, }, D { l: 6, t: 11, i: 241, }, D { l: 7, t: 11, i: 907, }, D { l: 8, t: 11, i: 832, }, D { l: 9, t: 11, i: 342, }, D { l: 10, t: 11, i: 729, }, D { l: 11, t: 11, i: 284, }, D { l: 11, t: 11, i: 445, }, D { l: 11, t: 11, i: 651, }, D { l: 11, t: 11, i: 863, }, D { l: 13, t: 11, i: 398, }, D { l: 146, t: 11, i: 99, }, D { l: 132, t: 0, i: 872, }, D { l: 134, t: 0, i: 831, }, D { l: 134, t: 0, i: 1692, }, D { l: 6, t: 0, i: 202 }, D { l: 6, t: 0, i: 1006, }, D { l: 9, t: 0, i: 832 }, D { l: 10, t: 0, i: 636, }, D { l: 11, t: 0, i: 208, }, D { l: 12, t: 0, i: 360, }, D { l: 17, t: 0, i: 118, }, D { l: 18, t: 0, i: 27 }, D { l: 20, t: 0, i: 67 }, D { l: 137, t: 11, i: 734, }, D { l: 132, t: 10, i: 725, }, D { l: 7, t: 11, i: 993, }, D { l: 138, t: 11, i: 666, }, D { l: 134, t: 0, i: 1954, }, D { l: 134, t: 10, i: 196, }, D { l: 7, t: 0, i: 872 }, D { l: 10, t: 0, i: 516, }, D { l: 139, t: 0, i: 167, }, D { l: 133, t: 10, i: 831, }, D { l: 4, t: 11, i: 562, }, D { l: 9, t: 11, i: 254, }, D { l: 139, t: 11, i: 879, }, D { l: 137, t: 0, i: 313, }, D { l: 4, t: 0, i: 224 }, D { l: 132, t: 11, i: 786, }, D { l: 11, t: 0, i: 24 }, D { l: 12, t: 0, i: 170, }, D { l: 136, t: 10, i: 723, }, D { l: 5, t: 0, i: 546 }, D { l: 7, t: 0, i: 35 }, D { l: 8, t: 0, i: 11 }, D { l: 8, t: 0, i: 12 }, D { l: 9, t: 0, i: 315 }, D { l: 9, t: 0, i: 533 }, D { l: 10, t: 0, i: 802, }, D { l: 11, t: 0, i: 166, }, D { l: 12, t: 0, i: 525, }, D { l: 142, t: 0, i: 243, }, D { l: 7, t: 0, i: 1937, }, D { l: 13, t: 10, i: 80, }, D { l: 13, t: 10, i: 437, }, D { l: 145, t: 10, i: 74, }, D { l: 5, t: 0, i: 241 }, D { l: 8, t: 0, i: 242 }, D { l: 9, t: 0, i: 451 }, D { l: 10, t: 0, i: 667, }, D { l: 11, t: 0, i: 598, }, D { l: 140, t: 0, i: 429, }, D { l: 150, t: 0, i: 46, }, D { l: 6, t: 0, i: 1273, }, D { l: 137, t: 0, i: 830, }, D { l: 5, t: 10, i: 848, }, D { l: 6, t: 10, i: 66 }, D { l: 136, t: 10, i: 764, }, D { l: 6, t: 0, i: 825 }, D { l: 134, t: 0, i: 993, }, D { l: 4, t: 0, i: 1006, }, D { l: 10, t: 0, i: 327, }, D { l: 13, t: 0, i: 271, }, D { l: 4, t: 10, i: 36 }, D { l: 7, t: 10, i: 1387, }, D { l: 139, t: 10, i: 755, }, D { l: 134, t: 0, i: 1023, }, D { l: 135, t: 0, i: 1580, }, D { l: 4, t: 0, i: 366 }, D { l: 137, t: 0, i: 516, }, D { l: 132, t: 10, i: 887, }, D { l: 6, t: 0, i: 1736, }, D { l: 135, t: 0, i: 1891, }, D { l: 6, t: 11, i: 216, }, D { l: 7, t: 11, i: 901, }, D { l: 7, t: 11, i: 1343, }, D { l: 136, t: 11, i: 493, }, D { l: 6, t: 10, i: 165, }, D { l: 138, t: 10, i: 388, }, D { l: 7, t: 11, i: 341, }, D { l: 139, t: 11, i: 219, }, D { l: 4, t: 10, i: 719, }, D { l: 135, t: 10, i: 155, }, D { l: 134, t: 0, i: 1935, }, D { l: 132, t: 0, i: 826, }, D { l: 6, t: 0, i: 331 }, D { l: 6, t: 0, i: 1605, }, D { l: 8, t: 0, i: 623 }, D { l: 11, t: 0, i: 139, }, D { l: 139, t: 0, i: 171, }, D { l: 135, t: 11, i: 1734, }, D { l: 10, t: 11, i: 115, }, D { l: 11, t: 11, i: 420, }, D { l: 12, t: 11, i: 154, }, D { l: 13, t: 11, i: 404, }, D { l: 14, t: 11, i: 346, }, D { l: 15, t: 11, i: 54, }, D { l: 143, t: 11, i: 112, }, D { l: 7, t: 0, i: 288 }, D { l: 4, t: 10, i: 353, }, D { l: 6, t: 10, i: 146, }, D { l: 6, t: 10, i: 1789, }, D { l: 7, t: 10, i: 990, }, D { l: 7, t: 10, i: 1348, }, D { l: 9, t: 10, i: 665, }, D { l: 9, t: 10, i: 898, }, D { l: 11, t: 10, i: 893, }, D { l: 142, t: 10, i: 212, }, D { l: 6, t: 0, i: 916 }, D { l: 134, t: 0, i: 1592, }, D { l: 7, t: 0, i: 1888, }, D { l: 4, t: 10, i: 45 }, D { l: 135, t: 10, i: 1257, }, D { l: 5, t: 11, i: 1011, }, D { l: 136, t: 11, i: 701, }, D { l: 139, t: 11, i: 596, }, D { l: 4, t: 11, i: 54 }, D { l: 5, t: 11, i: 666, }, D { l: 7, t: 11, i: 1039, }, D { l: 7, t: 11, i: 1130, }, D { l: 9, t: 11, i: 195, }, D { l: 138, t: 11, i: 302, }, D { l: 134, t: 0, i: 1471, }, D { l: 134, t: 0, i: 1570, }, D { l: 132, t: 0, i: 394, }, D { l: 140, t: 10, i: 65, }, D { l: 136, t: 10, i: 816, }, D { l: 135, t: 0, i: 1931, }, D { l: 7, t: 0, i: 574 }, D { l: 135, t: 0, i: 1719, }, D { l: 134, t: 11, i: 467, }, D { l: 132, t: 0, i: 658, }, D { l: 9, t: 0, i: 781 }, D { l: 10, t: 0, i: 144, }, D { l: 11, t: 0, i: 385, }, D { l: 13, t: 0, i: 161, }, D { l: 13, t: 0, i: 228, }, D { l: 13, t: 0, i: 268, }, D { l: 20, t: 0, i: 107, }, D { l: 134, t: 11, i: 1669, }, D { l: 136, t: 0, i: 374, }, D { l: 135, t: 0, i: 735, }, D { l: 4, t: 0, i: 344 }, D { l: 6, t: 0, i: 498 }, D { l: 139, t: 0, i: 323, }, D { l: 7, t: 0, i: 586 }, D { l: 7, t: 0, i: 1063, }, D { l: 6, t: 10, i: 559, }, D { l: 134, t: 10, i: 1691, }, D { l: 137, t: 0, i: 155, }, D { l: 133, t: 0, i: 906, }, D { l: 7, t: 11, i: 122, }, D { l: 9, t: 11, i: 259, }, D { l: 10, t: 11, i: 84, }, D { l: 11, t: 11, i: 470, }, D { l: 12, t: 11, i: 541, }, D { l: 141, t: 11, i: 379, }, D { l: 134, t: 0, i: 1139, }, D { l: 10, t: 0, i: 108, }, D { l: 139, t: 0, i: 116, }, D { l: 134, t: 10, i: 456, }, D { l: 133, t: 10, i: 925, }, D { l: 5, t: 11, i: 82 }, D { l: 5, t: 11, i: 131, }, D { l: 7, t: 11, i: 1755, }, D { l: 8, t: 11, i: 31 }, D { l: 9, t: 11, i: 168, }, D { l: 9, t: 11, i: 764, }, D { l: 139, t: 11, i: 869, }, D { l: 134, t: 11, i: 605, }, D { l: 5, t: 11, i: 278, }, D { l: 137, t: 11, i: 68, }, D { l: 4, t: 11, i: 163, }, D { l: 5, t: 11, i: 201, }, D { l: 5, t: 11, i: 307, }, D { l: 5, t: 11, i: 310, }, D { l: 6, t: 11, i: 335, }, D { l: 7, t: 11, i: 284, }, D { l: 136, t: 11, i: 165, }, D { l: 135, t: 11, i: 1660, }, D { l: 6, t: 11, i: 33 }, D { l: 135, t: 11, i: 1244, }, D { l: 4, t: 0, i: 616 }, D { l: 136, t: 11, i: 483, }, D { l: 8, t: 0, i: 857 }, D { l: 8, t: 0, i: 902 }, D { l: 8, t: 0, i: 910 }, D { l: 10, t: 0, i: 879, }, D { l: 12, t: 0, i: 726, }, D { l: 4, t: 11, i: 199, }, D { l: 139, t: 11, i: 34, }, D { l: 136, t: 0, i: 692, }, D { l: 6, t: 10, i: 193, }, D { l: 7, t: 10, i: 240, }, D { l: 7, t: 10, i: 1682, }, D { l: 10, t: 10, i: 51, }, D { l: 10, t: 10, i: 640, }, D { l: 11, t: 10, i: 410, }, D { l: 13, t: 10, i: 82, }, D { l: 14, t: 10, i: 247, }, D { l: 14, t: 10, i: 331, }, D { l: 142, t: 10, i: 377, }, D { l: 6, t: 0, i: 823 }, D { l: 134, t: 0, i: 983, }, D { l: 139, t: 10, i: 411, }, D { l: 132, t: 0, i: 305, }, D { l: 136, t: 10, i: 633, }, D { l: 138, t: 11, i: 203, }, D { l: 134, t: 0, i: 681, }, D { l: 6, t: 11, i: 326, }, D { l: 7, t: 11, i: 677, }, D { l: 137, t: 11, i: 425, }, D { l: 5, t: 0, i: 214 }, D { l: 7, t: 0, i: 603 }, D { l: 8, t: 0, i: 611 }, D { l: 9, t: 0, i: 686 }, D { l: 10, t: 0, i: 88 }, D { l: 11, t: 0, i: 459, }, D { l: 11, t: 0, i: 496, }, D { l: 12, t: 0, i: 463, }, D { l: 12, t: 0, i: 590, }, D { l: 141, t: 0, i: 0 }, D { l: 136, t: 0, i: 1004, }, D { l: 142, t: 0, i: 23, }, D { l: 134, t: 0, i: 1703, }, D { l: 147, t: 11, i: 8, }, D { l: 145, t: 11, i: 56, }, D { l: 135, t: 0, i: 1443, }, D { l: 4, t: 10, i: 237, }, D { l: 135, t: 10, i: 514, }, D { l: 6, t: 0, i: 714 }, D { l: 145, t: 0, i: 19, }, D { l: 5, t: 11, i: 358, }, D { l: 7, t: 11, i: 473, }, D { l: 7, t: 11, i: 1184, }, D { l: 10, t: 11, i: 662, }, D { l: 13, t: 11, i: 212, }, D { l: 13, t: 11, i: 304, }, D { l: 13, t: 11, i: 333, }, D { l: 145, t: 11, i: 98, }, D { l: 4, t: 0, i: 737 }, D { l: 10, t: 0, i: 98 }, D { l: 11, t: 0, i: 294, }, D { l: 12, t: 0, i: 60 }, D { l: 12, t: 0, i: 437, }, D { l: 13, t: 0, i: 64 }, D { l: 13, t: 0, i: 380, }, D { l: 142, t: 0, i: 430, }, D { l: 6, t: 10, i: 392, }, D { l: 7, t: 10, i: 65 }, D { l: 135, t: 10, i: 2019, }, D { l: 6, t: 0, i: 1758, }, D { l: 8, t: 0, i: 520 }, D { l: 9, t: 0, i: 345 }, D { l: 9, t: 0, i: 403 }, D { l: 142, t: 0, i: 350, }, D { l: 5, t: 0, i: 47 }, D { l: 10, t: 0, i: 242, }, D { l: 138, t: 0, i: 579, }, D { l: 5, t: 0, i: 139 }, D { l: 7, t: 0, i: 1168, }, D { l: 138, t: 0, i: 539, }, D { l: 134, t: 0, i: 1459, }, D { l: 13, t: 0, i: 388, }, D { l: 141, t: 11, i: 388, }, D { l: 134, t: 0, i: 253, }, D { l: 7, t: 10, i: 1260, }, D { l: 135, t: 10, i: 1790, }, D { l: 10, t: 0, i: 252, }, D { l: 9, t: 10, i: 222, }, D { l: 139, t: 10, i: 900, }, D { l: 140, t: 0, i: 745, }, D { l: 133, t: 11, i: 946, }, D { l: 4, t: 0, i: 107 }, D { l: 7, t: 0, i: 613 }, D { l: 8, t: 0, i: 439 }, D { l: 8, t: 0, i: 504 }, D { l: 9, t: 0, i: 501 }, D { l: 10, t: 0, i: 383, }, D { l: 139, t: 0, i: 477, }, D { l: 135, t: 11, i: 1485, }, D { l: 132, t: 0, i: 871, }, D { l: 7, t: 11, i: 411, }, D { l: 7, t: 11, i: 590, }, D { l: 8, t: 11, i: 631, }, D { l: 9, t: 11, i: 323, }, D { l: 10, t: 11, i: 355, }, D { l: 11, t: 11, i: 491, }, D { l: 12, t: 11, i: 143, }, D { l: 12, t: 11, i: 402, }, D { l: 13, t: 11, i: 73, }, D { l: 14, t: 11, i: 408, }, D { l: 15, t: 11, i: 107, }, D { l: 146, t: 11, i: 71, }, D { l: 132, t: 0, i: 229, }, D { l: 132, t: 0, i: 903, }, D { l: 140, t: 0, i: 71, }, D { l: 133, t: 0, i: 549, }, D { l: 4, t: 0, i: 47 }, D { l: 6, t: 0, i: 373 }, D { l: 7, t: 0, i: 452 }, D { l: 7, t: 0, i: 543 }, D { l: 7, t: 0, i: 1828, }, D { l: 7, t: 0, i: 1856, }, D { l: 9, t: 0, i: 6 }, D { l: 11, t: 0, i: 257, }, D { l: 139, t: 0, i: 391, }, D { l: 7, t: 11, i: 1467, }, D { l: 8, t: 11, i: 328, }, D { l: 10, t: 11, i: 544, }, D { l: 11, t: 11, i: 955, }, D { l: 13, t: 11, i: 320, }, D { l: 145, t: 11, i: 83, }, D { l: 5, t: 0, i: 980 }, D { l: 134, t: 0, i: 1754, }, D { l: 136, t: 0, i: 865, }, D { l: 5, t: 0, i: 705 }, D { l: 137, t: 0, i: 606, }, D { l: 7, t: 0, i: 161 }, D { l: 8, t: 10, i: 201, }, D { l: 136, t: 10, i: 605, }, D { l: 143, t: 11, i: 35, }, D { l: 5, t: 11, i: 835, }, D { l: 6, t: 11, i: 483, }, D { l: 140, t: 10, i: 224, }, D { l: 7, t: 0, i: 536 }, D { l: 7, t: 0, i: 1331, }, D { l: 136, t: 0, i: 143, }, D { l: 134, t: 0, i: 1388, }, D { l: 5, t: 0, i: 724 }, D { l: 10, t: 0, i: 305, }, D { l: 11, t: 0, i: 151, }, D { l: 12, t: 0, i: 33 }, D { l: 12, t: 0, i: 121, }, D { l: 12, t: 0, i: 381, }, D { l: 17, t: 0, i: 3 }, D { l: 17, t: 0, i: 27 }, D { l: 17, t: 0, i: 78 }, D { l: 18, t: 0, i: 18 }, D { l: 19, t: 0, i: 54 }, D { l: 149, t: 0, i: 5 }, D { l: 4, t: 10, i: 523, }, D { l: 133, t: 10, i: 638, }, D { l: 5, t: 0, i: 19 }, D { l: 134, t: 0, i: 533, }, D { l: 5, t: 0, i: 395 }, D { l: 5, t: 0, i: 951 }, D { l: 134, t: 0, i: 1776, }, D { l: 135, t: 0, i: 1908, }, D { l: 132, t: 0, i: 846, }, D { l: 10, t: 0, i: 74 }, D { l: 11, t: 0, i: 663, }, D { l: 12, t: 0, i: 210, }, D { l: 13, t: 0, i: 166, }, D { l: 13, t: 0, i: 310, }, D { l: 14, t: 0, i: 373, }, D { l: 18, t: 0, i: 95 }, D { l: 19, t: 0, i: 43 }, D { l: 6, t: 10, i: 242, }, D { l: 7, t: 10, i: 227, }, D { l: 7, t: 10, i: 1581, }, D { l: 8, t: 10, i: 104, }, D { l: 9, t: 10, i: 113, }, D { l: 9, t: 10, i: 220, }, D { l: 9, t: 10, i: 427, }, D { l: 10, t: 10, i: 239, }, D { l: 11, t: 10, i: 579, }, D { l: 11, t: 10, i: 1023, }, D { l: 13, t: 10, i: 4 }, D { l: 13, t: 10, i: 204, }, D { l: 13, t: 10, i: 316, }, D { l: 148, t: 10, i: 86, }, D { l: 9, t: 11, i: 716, }, D { l: 11, t: 11, i: 108, }, D { l: 13, t: 11, i: 123, }, D { l: 14, t: 11, i: 252, }, D { l: 19, t: 11, i: 38, }, D { l: 21, t: 11, i: 3 }, D { l: 151, t: 11, i: 11, }, D { l: 8, t: 0, i: 372 }, D { l: 9, t: 0, i: 122 }, D { l: 138, t: 0, i: 175, }, D { l: 132, t: 11, i: 677, }, D { l: 7, t: 11, i: 1374, }, D { l: 136, t: 11, i: 540, }, D { l: 135, t: 10, i: 861, }, D { l: 132, t: 0, i: 695, }, D { l: 7, t: 0, i: 497 }, D { l: 9, t: 0, i: 387 }, D { l: 147, t: 0, i: 81, }, D { l: 136, t: 0, i: 937, }, D { l: 134, t: 0, i: 718, }, D { l: 7, t: 0, i: 1328, }, D { l: 136, t: 10, i: 494, }, D { l: 132, t: 11, i: 331, }, D { l: 6, t: 0, i: 1581, }, D { l: 133, t: 11, i: 747, }, D { l: 5, t: 0, i: 284 }, D { l: 6, t: 0, i: 49 }, D { l: 6, t: 0, i: 350 }, D { l: 7, t: 0, i: 1 }, D { l: 7, t: 0, i: 377 }, D { l: 7, t: 0, i: 1693, }, D { l: 8, t: 0, i: 18 }, D { l: 8, t: 0, i: 678 }, D { l: 9, t: 0, i: 161 }, D { l: 9, t: 0, i: 585 }, D { l: 9, t: 0, i: 671 }, D { l: 9, t: 0, i: 839 }, D { l: 11, t: 0, i: 912, }, D { l: 141, t: 0, i: 427, }, D { l: 7, t: 10, i: 1306, }, D { l: 8, t: 10, i: 505, }, D { l: 9, t: 10, i: 482, }, D { l: 10, t: 10, i: 126, }, D { l: 11, t: 10, i: 225, }, D { l: 12, t: 10, i: 347, }, D { l: 12, t: 10, i: 449, }, D { l: 13, t: 10, i: 19, }, D { l: 14, t: 10, i: 218, }, D { l: 142, t: 10, i: 435, }, D { l: 10, t: 10, i: 764, }, D { l: 12, t: 10, i: 120, }, D { l: 13, t: 10, i: 39, }, D { l: 145, t: 10, i: 127, }, D { l: 4, t: 0, i: 597 }, D { l: 133, t: 10, i: 268, }, D { l: 134, t: 0, i: 1094, }, D { l: 4, t: 0, i: 1008, }, D { l: 134, t: 0, i: 1973, }, D { l: 132, t: 0, i: 811, }, D { l: 139, t: 0, i: 908, }, D { l: 135, t: 0, i: 1471, }, D { l: 133, t: 11, i: 326, }, D { l: 4, t: 10, i: 384, }, D { l: 135, t: 10, i: 1022, }, D { l: 7, t: 0, i: 1935, }, D { l: 8, t: 0, i: 324 }, D { l: 12, t: 0, i: 42 }, D { l: 4, t: 11, i: 691, }, D { l: 7, t: 11, i: 1935, }, D { l: 8, t: 11, i: 324, }, D { l: 9, t: 11, i: 35 }, D { l: 10, t: 11, i: 680, }, D { l: 11, t: 11, i: 364, }, D { l: 12, t: 11, i: 42, }, D { l: 13, t: 11, i: 357, }, D { l: 146, t: 11, i: 16, }, D { l: 135, t: 0, i: 2014, }, D { l: 7, t: 0, i: 2007, }, D { l: 9, t: 0, i: 101 }, D { l: 9, t: 0, i: 450 }, D { l: 10, t: 0, i: 66 }, D { l: 10, t: 0, i: 842, }, D { l: 11, t: 0, i: 536, }, D { l: 12, t: 0, i: 587, }, D { l: 6, t: 11, i: 32 }, D { l: 7, t: 11, i: 385, }, D { l: 7, t: 11, i: 757, }, D { l: 7, t: 11, i: 1916, }, D { l: 8, t: 11, i: 37 }, D { l: 8, t: 11, i: 94 }, D { l: 8, t: 11, i: 711, }, D { l: 9, t: 11, i: 541, }, D { l: 10, t: 11, i: 162, }, D { l: 10, t: 11, i: 795, }, D { l: 11, t: 11, i: 989, }, D { l: 11, t: 11, i: 1010, }, D { l: 12, t: 11, i: 14, }, D { l: 142, t: 11, i: 308, }, D { l: 139, t: 0, i: 586, }, D { l: 135, t: 10, i: 1703, }, D { l: 7, t: 0, i: 1077, }, D { l: 11, t: 0, i: 28 }, D { l: 9, t: 10, i: 159, }, D { l: 140, t: 10, i: 603, }, D { l: 6, t: 0, i: 1221, }, D { l: 136, t: 10, i: 583, }, D { l: 6, t: 11, i: 152, }, D { l: 6, t: 11, i: 349, }, D { l: 6, t: 11, i: 1682, }, D { l: 7, t: 11, i: 1252, }, D { l: 8, t: 11, i: 112, }, D { l: 9, t: 11, i: 435, }, D { l: 9, t: 11, i: 668, }, D { l: 10, t: 11, i: 290, }, D { l: 10, t: 11, i: 319, }, D { l: 10, t: 11, i: 815, }, D { l: 11, t: 11, i: 180, }, D { l: 11, t: 11, i: 837, }, D { l: 12, t: 11, i: 240, }, D { l: 13, t: 11, i: 152, }, D { l: 13, t: 11, i: 219, }, D { l: 142, t: 11, i: 158, }, D { l: 139, t: 0, i: 62, }, D { l: 132, t: 10, i: 515, }, D { l: 8, t: 10, i: 632, }, D { l: 8, t: 10, i: 697, }, D { l: 137, t: 10, i: 854, }, D { l: 134, t: 0, i: 1766, }, D { l: 132, t: 11, i: 581, }, D { l: 6, t: 11, i: 126, }, D { l: 7, t: 11, i: 573, }, D { l: 8, t: 11, i: 397, }, D { l: 142, t: 11, i: 44, }, D { l: 150, t: 0, i: 28, }, D { l: 11, t: 0, i: 670, }, D { l: 22, t: 0, i: 25 }, D { l: 4, t: 10, i: 136, }, D { l: 133, t: 10, i: 551, }, D { l: 6, t: 0, i: 1665, }, D { l: 7, t: 0, i: 256 }, D { l: 7, t: 0, i: 1388, }, D { l: 138, t: 0, i: 499, }, D { l: 4, t: 0, i: 22 }, D { l: 5, t: 0, i: 10 }, D { l: 7, t: 0, i: 1576, }, D { l: 136, t: 0, i: 97, }, D { l: 134, t: 10, i: 1782, }, D { l: 5, t: 0, i: 481 }, D { l: 7, t: 10, i: 1287, }, D { l: 9, t: 10, i: 44 }, D { l: 10, t: 10, i: 552, }, D { l: 10, t: 10, i: 642, }, D { l: 11, t: 10, i: 839, }, D { l: 12, t: 10, i: 274, }, D { l: 12, t: 10, i: 275, }, D { l: 12, t: 10, i: 372, }, D { l: 13, t: 10, i: 91, }, D { l: 142, t: 10, i: 125, }, D { l: 133, t: 11, i: 926, }, D { l: 7, t: 11, i: 1232, }, D { l: 137, t: 11, i: 531, }, D { l: 6, t: 0, i: 134 }, D { l: 7, t: 0, i: 437 }, D { l: 7, t: 0, i: 1824, }, D { l: 9, t: 0, i: 37 }, D { l: 14, t: 0, i: 285, }, D { l: 142, t: 0, i: 371, }, D { l: 7, t: 0, i: 486 }, D { l: 8, t: 0, i: 155 }, D { l: 11, t: 0, i: 93 }, D { l: 140, t: 0, i: 164, }, D { l: 6, t: 0, i: 1391, }, D { l: 134, t: 0, i: 1442, }, D { l: 133, t: 11, i: 670, }, D { l: 133, t: 0, i: 591, }, D { l: 6, t: 10, i: 147, }, D { l: 7, t: 10, i: 886, }, D { l: 7, t: 11, i: 1957, }, D { l: 9, t: 10, i: 753, }, D { l: 138, t: 10, i: 268, }, D { l: 5, t: 0, i: 380 }, D { l: 5, t: 0, i: 650 }, D { l: 7, t: 0, i: 1173, }, D { l: 136, t: 0, i: 310, }, D { l: 4, t: 0, i: 364 }, D { l: 7, t: 0, i: 1156, }, D { l: 7, t: 0, i: 1187, }, D { l: 137, t: 0, i: 409, }, D { l: 135, t: 11, i: 1621, }, D { l: 134, t: 0, i: 482, }, D { l: 133, t: 11, i: 506, }, D { l: 4, t: 0, i: 781 }, D { l: 6, t: 0, i: 487 }, D { l: 7, t: 0, i: 926 }, D { l: 8, t: 0, i: 263 }, D { l: 139, t: 0, i: 500, }, D { l: 138, t: 10, i: 137, }, D { l: 135, t: 11, i: 242, }, D { l: 139, t: 11, i: 96, }, D { l: 133, t: 10, i: 414, }, D { l: 135, t: 10, i: 1762, }, D { l: 134, t: 0, i: 804, }, D { l: 5, t: 11, i: 834, }, D { l: 7, t: 11, i: 1202, }, D { l: 8, t: 11, i: 14 }, D { l: 9, t: 11, i: 481, }, D { l: 137, t: 11, i: 880, }, D { l: 134, t: 10, i: 599, }, D { l: 4, t: 0, i: 94 }, D { l: 135, t: 0, i: 1265, }, D { l: 4, t: 0, i: 415 }, D { l: 132, t: 0, i: 417, }, D { l: 5, t: 0, i: 348 }, D { l: 6, t: 0, i: 522 }, D { l: 6, t: 10, i: 1749, }, D { l: 7, t: 11, i: 1526, }, D { l: 138, t: 11, i: 465, }, D { l: 134, t: 10, i: 1627, }, D { l: 132, t: 0, i: 1012, }, D { l: 132, t: 10, i: 488, }, D { l: 4, t: 11, i: 357, }, D { l: 6, t: 11, i: 172, }, D { l: 7, t: 11, i: 143, }, D { l: 137, t: 11, i: 413, }, D { l: 4, t: 10, i: 83 }, D { l: 4, t: 11, i: 590, }, D { l: 146, t: 11, i: 76, }, D { l: 140, t: 10, i: 676, }, D { l: 7, t: 11, i: 287, }, D { l: 8, t: 11, i: 355, }, D { l: 9, t: 11, i: 293, }, D { l: 137, t: 11, i: 743, }, D { l: 134, t: 10, i: 278, }, D { l: 6, t: 0, i: 1803, }, D { l: 18, t: 0, i: 165, }, D { l: 24, t: 0, i: 21 }, D { l: 5, t: 11, i: 169, }, D { l: 7, t: 11, i: 333, }, D { l: 136, t: 11, i: 45, }, D { l: 12, t: 10, i: 97, }, D { l: 140, t: 11, i: 97, }, D { l: 4, t: 0, i: 408 }, D { l: 4, t: 0, i: 741 }, D { l: 135, t: 0, i: 500, }, D { l: 132, t: 11, i: 198, }, D { l: 7, t: 10, i: 388, }, D { l: 7, t: 10, i: 644, }, D { l: 139, t: 10, i: 781, }, D { l: 4, t: 11, i: 24 }, D { l: 5, t: 11, i: 140, }, D { l: 5, t: 11, i: 185, }, D { l: 7, t: 11, i: 1500, }, D { l: 11, t: 11, i: 565, }, D { l: 139, t: 11, i: 838, }, D { l: 6, t: 0, i: 1321, }, D { l: 9, t: 0, i: 257 }, D { l: 7, t: 10, i: 229, }, D { l: 8, t: 10, i: 59 }, D { l: 9, t: 10, i: 190, }, D { l: 10, t: 10, i: 378, }, D { l: 140, t: 10, i: 191, }, D { l: 4, t: 11, i: 334, }, D { l: 133, t: 11, i: 593, }, D { l: 135, t: 11, i: 1885, }, D { l: 134, t: 0, i: 1138, }, D { l: 4, t: 0, i: 249 }, D { l: 6, t: 0, i: 73 }, D { l: 135, t: 0, i: 177, }, D { l: 133, t: 0, i: 576, }, D { l: 142, t: 0, i: 231, }, D { l: 137, t: 0, i: 288, }, D { l: 132, t: 10, i: 660, }, D { l: 7, t: 10, i: 1035, }, D { l: 138, t: 10, i: 737, }, D { l: 135, t: 0, i: 1487, }, D { l: 6, t: 0, i: 989 }, D { l: 9, t: 0, i: 433 }, D { l: 7, t: 10, i: 690, }, D { l: 9, t: 10, i: 587, }, D { l: 140, t: 10, i: 521, }, D { l: 7, t: 0, i: 1264, }, D { l: 7, t: 0, i: 1678, }, D { l: 11, t: 0, i: 945, }, D { l: 12, t: 0, i: 341, }, D { l: 12, t: 0, i: 471, }, D { l: 140, t: 0, i: 569, }, D { l: 132, t: 11, i: 709, }, D { l: 133, t: 11, i: 897, }, D { l: 5, t: 11, i: 224, }, D { l: 13, t: 11, i: 174, }, D { l: 146, t: 11, i: 52, }, D { l: 135, t: 11, i: 1840, }, D { l: 134, t: 10, i: 1744, }, D { l: 12, t: 0, i: 87 }, D { l: 16, t: 0, i: 74 }, D { l: 4, t: 10, i: 733, }, D { l: 9, t: 10, i: 194, }, D { l: 10, t: 10, i: 92, }, D { l: 11, t: 10, i: 198, }, D { l: 12, t: 10, i: 84, }, D { l: 141, t: 10, i: 128, }, D { l: 140, t: 0, i: 779, }, D { l: 135, t: 0, i: 538, }, D { l: 4, t: 11, i: 608, }, D { l: 133, t: 11, i: 497, }, D { l: 133, t: 0, i: 413, }, D { l: 7, t: 11, i: 1375, }, D { l: 7, t: 11, i: 1466, }, D { l: 138, t: 11, i: 331, }, D { l: 136, t: 0, i: 495, }, D { l: 6, t: 11, i: 540, }, D { l: 136, t: 11, i: 136, }, D { l: 7, t: 0, i: 54 }, D { l: 8, t: 0, i: 312 }, D { l: 10, t: 0, i: 191, }, D { l: 10, t: 0, i: 614, }, D { l: 140, t: 0, i: 567, }, D { l: 6, t: 0, i: 468 }, D { l: 7, t: 0, i: 567 }, D { l: 7, t: 0, i: 1478, }, D { l: 8, t: 0, i: 530 }, D { l: 14, t: 0, i: 290, }, D { l: 133, t: 11, i: 999, }, D { l: 4, t: 11, i: 299, }, D { l: 7, t: 10, i: 306, }, D { l: 135, t: 11, i: 1004, }, D { l: 142, t: 11, i: 296, }, D { l: 134, t: 0, i: 1484, }, D { l: 133, t: 10, i: 979, }, D { l: 6, t: 0, i: 609 }, D { l: 9, t: 0, i: 815 }, D { l: 12, t: 11, i: 137, }, D { l: 14, t: 11, i: 9 }, D { l: 14, t: 11, i: 24, }, D { l: 142, t: 11, i: 64, }, D { l: 133, t: 11, i: 456, }, D { l: 6, t: 0, i: 484 }, D { l: 135, t: 0, i: 822, }, D { l: 133, t: 10, i: 178, }, D { l: 136, t: 11, i: 180, }, D { l: 132, t: 11, i: 755, }, D { l: 137, t: 0, i: 900, }, D { l: 135, t: 0, i: 1335, }, D { l: 6, t: 0, i: 1724, }, D { l: 135, t: 0, i: 2022, }, D { l: 135, t: 11, i: 1139, }, D { l: 5, t: 0, i: 640 }, D { l: 132, t: 10, i: 390, }, D { l: 6, t: 0, i: 1831, }, D { l: 138, t: 11, i: 633, }, D { l: 135, t: 11, i: 566, }, D { l: 4, t: 11, i: 890, }, D { l: 5, t: 11, i: 805, }, D { l: 5, t: 11, i: 819, }, D { l: 5, t: 11, i: 961, }, D { l: 6, t: 11, i: 396, }, D { l: 6, t: 11, i: 1631, }, D { l: 6, t: 11, i: 1678, }, D { l: 7, t: 11, i: 1967, }, D { l: 7, t: 11, i: 2041, }, D { l: 9, t: 11, i: 630, }, D { l: 11, t: 11, i: 8 }, D { l: 11, t: 11, i: 1019, }, D { l: 12, t: 11, i: 176, }, D { l: 13, t: 11, i: 225, }, D { l: 14, t: 11, i: 292, }, D { l: 149, t: 11, i: 24, }, D { l: 132, t: 0, i: 474, }, D { l: 134, t: 0, i: 1103, }, D { l: 135, t: 0, i: 1504, }, D { l: 134, t: 0, i: 1576, }, D { l: 6, t: 0, i: 961 }, D { l: 6, t: 0, i: 1034, }, D { l: 140, t: 0, i: 655, }, D { l: 11, t: 11, i: 514, }, D { l: 149, t: 11, i: 20, }, D { l: 5, t: 0, i: 305 }, D { l: 135, t: 11, i: 1815, }, D { l: 7, t: 11, i: 1505, }, D { l: 10, t: 11, i: 190, }, D { l: 10, t: 11, i: 634, }, D { l: 11, t: 11, i: 792, }, D { l: 12, t: 11, i: 358, }, D { l: 140, t: 11, i: 447, }, D { l: 5, t: 11, i: 0 }, D { l: 6, t: 11, i: 536, }, D { l: 7, t: 11, i: 604, }, D { l: 13, t: 11, i: 445, }, D { l: 145, t: 11, i: 126, }, D { l: 7, t: 0, i: 1236, }, D { l: 133, t: 10, i: 105, }, D { l: 4, t: 0, i: 480 }, D { l: 6, t: 0, i: 217 }, D { l: 6, t: 0, i: 302 }, D { l: 6, t: 0, i: 1642, }, D { l: 7, t: 0, i: 130 }, D { l: 7, t: 0, i: 837 }, D { l: 7, t: 0, i: 1321, }, D { l: 7, t: 0, i: 1547, }, D { l: 7, t: 0, i: 1657, }, D { l: 8, t: 0, i: 429 }, D { l: 9, t: 0, i: 228 }, D { l: 13, t: 0, i: 289, }, D { l: 13, t: 0, i: 343, }, D { l: 19, t: 0, i: 101, }, D { l: 6, t: 11, i: 232, }, D { l: 6, t: 11, i: 412, }, D { l: 7, t: 11, i: 1074, }, D { l: 8, t: 11, i: 9 }, D { l: 8, t: 11, i: 157, }, D { l: 8, t: 11, i: 786, }, D { l: 9, t: 11, i: 196, }, D { l: 9, t: 11, i: 352, }, D { l: 9, t: 11, i: 457, }, D { l: 10, t: 11, i: 337, }, D { l: 11, t: 11, i: 232, }, D { l: 11, t: 11, i: 877, }, D { l: 12, t: 11, i: 480, }, D { l: 140, t: 11, i: 546, }, D { l: 5, t: 10, i: 438, }, D { l: 7, t: 11, i: 958, }, D { l: 9, t: 10, i: 694, }, D { l: 12, t: 10, i: 627, }, D { l: 13, t: 11, i: 38, }, D { l: 141, t: 10, i: 210, }, D { l: 4, t: 11, i: 382, }, D { l: 136, t: 11, i: 579, }, D { l: 7, t: 0, i: 278 }, D { l: 10, t: 0, i: 739, }, D { l: 11, t: 0, i: 708, }, D { l: 141, t: 0, i: 348, }, D { l: 4, t: 11, i: 212, }, D { l: 135, t: 11, i: 1206, }, D { l: 135, t: 11, i: 1898, }, D { l: 6, t: 0, i: 708 }, D { l: 6, t: 0, i: 1344, }, D { l: 152, t: 10, i: 11, }, D { l: 137, t: 11, i: 768, }, D { l: 134, t: 0, i: 1840, }, D { l: 140, t: 0, i: 233, }, D { l: 8, t: 10, i: 25 }, D { l: 138, t: 10, i: 826, }, D { l: 6, t: 0, i: 2017, }, D { l: 133, t: 11, i: 655, }, D { l: 6, t: 0, i: 1488, }, D { l: 139, t: 11, i: 290, }, D { l: 132, t: 10, i: 308, }, D { l: 134, t: 0, i: 1590, }, D { l: 134, t: 0, i: 1800, }, D { l: 134, t: 0, i: 1259, }, D { l: 16, t: 0, i: 28 }, D { l: 6, t: 11, i: 231, }, D { l: 7, t: 11, i: 95 }, D { l: 136, t: 11, i: 423, }, D { l: 133, t: 11, i: 300, }, D { l: 135, t: 10, i: 150, }, D { l: 136, t: 10, i: 649, }, D { l: 7, t: 11, i: 1874, }, D { l: 137, t: 11, i: 641, }, D { l: 6, t: 11, i: 237, }, D { l: 7, t: 11, i: 611, }, D { l: 8, t: 11, i: 100, }, D { l: 9, t: 11, i: 416, }, D { l: 11, t: 11, i: 335, }, D { l: 12, t: 11, i: 173, }, D { l: 146, t: 11, i: 101, }, D { l: 137, t: 0, i: 45, }, D { l: 134, t: 10, i: 521, }, D { l: 17, t: 0, i: 36 }, D { l: 14, t: 11, i: 26, }, D { l: 146, t: 11, i: 150, }, D { l: 7, t: 0, i: 1442, }, D { l: 14, t: 0, i: 22 }, D { l: 5, t: 10, i: 339, }, D { l: 15, t: 10, i: 41, }, D { l: 15, t: 10, i: 166, }, D { l: 147, t: 10, i: 66, }, D { l: 8, t: 0, i: 378 }, D { l: 6, t: 11, i: 581, }, D { l: 135, t: 11, i: 1119, }, D { l: 134, t: 0, i: 1507, }, D { l: 147, t: 11, i: 117, }, D { l: 139, t: 0, i: 39, }, D { l: 134, t: 0, i: 1054, }, D { l: 6, t: 0, i: 363 }, D { l: 7, t: 0, i: 1955, }, D { l: 136, t: 0, i: 725, }, D { l: 134, t: 0, i: 2036, }, D { l: 133, t: 11, i: 199, }, D { l: 6, t: 0, i: 1871, }, D { l: 9, t: 0, i: 935 }, D { l: 9, t: 0, i: 961 }, D { l: 9, t: 0, i: 1004, }, D { l: 9, t: 0, i: 1016, }, D { l: 12, t: 0, i: 805, }, D { l: 12, t: 0, i: 852, }, D { l: 12, t: 0, i: 853, }, D { l: 12, t: 0, i: 869, }, D { l: 12, t: 0, i: 882, }, D { l: 12, t: 0, i: 896, }, D { l: 12, t: 0, i: 906, }, D { l: 12, t: 0, i: 917, }, D { l: 12, t: 0, i: 940, }, D { l: 15, t: 0, i: 170, }, D { l: 15, t: 0, i: 176, }, D { l: 15, t: 0, i: 188, }, D { l: 15, t: 0, i: 201, }, D { l: 15, t: 0, i: 205, }, D { l: 15, t: 0, i: 212, }, D { l: 15, t: 0, i: 234, }, D { l: 15, t: 0, i: 244, }, D { l: 18, t: 0, i: 181, }, D { l: 18, t: 0, i: 193, }, D { l: 18, t: 0, i: 196, }, D { l: 18, t: 0, i: 201, }, D { l: 18, t: 0, i: 202, }, D { l: 18, t: 0, i: 210, }, D { l: 18, t: 0, i: 217, }, D { l: 18, t: 0, i: 235, }, D { l: 18, t: 0, i: 236, }, D { l: 18, t: 0, i: 237, }, D { l: 21, t: 0, i: 54 }, D { l: 21, t: 0, i: 55 }, D { l: 21, t: 0, i: 58 }, D { l: 21, t: 0, i: 59 }, D { l: 152, t: 0, i: 22, }, D { l: 134, t: 10, i: 1628, }, D { l: 137, t: 0, i: 805, }, D { l: 5, t: 0, i: 813 }, D { l: 135, t: 0, i: 2046, }, D { l: 142, t: 11, i: 42, }, D { l: 5, t: 0, i: 712 }, D { l: 6, t: 0, i: 1240, }, D { l: 11, t: 0, i: 17 }, D { l: 13, t: 0, i: 321, }, D { l: 144, t: 0, i: 67, }, D { l: 132, t: 0, i: 617, }, D { l: 135, t: 10, i: 829, }, D { l: 6, t: 0, i: 320 }, D { l: 7, t: 0, i: 781 }, D { l: 7, t: 0, i: 1921, }, D { l: 9, t: 0, i: 55 }, D { l: 10, t: 0, i: 186, }, D { l: 10, t: 0, i: 273, }, D { l: 10, t: 0, i: 664, }, D { l: 10, t: 0, i: 801, }, D { l: 11, t: 0, i: 996, }, D { l: 11, t: 0, i: 997, }, D { l: 13, t: 0, i: 157, }, D { l: 142, t: 0, i: 170, }, D { l: 136, t: 0, i: 271, }, D { l: 5, t: 10, i: 486, }, D { l: 135, t: 10, i: 1349, }, D { l: 18, t: 11, i: 91, }, D { l: 147, t: 11, i: 70, }, D { l: 10, t: 0, i: 445, }, D { l: 7, t: 10, i: 1635, }, D { l: 8, t: 10, i: 17 }, D { l: 138, t: 10, i: 295, }, D { l: 136, t: 11, i: 404, }, D { l: 7, t: 0, i: 103 }, D { l: 7, t: 0, i: 863 }, D { l: 11, t: 0, i: 184, }, D { l: 145, t: 0, i: 62, }, D { l: 138, t: 10, i: 558, }, D { l: 137, t: 0, i: 659, }, D { l: 6, t: 11, i: 312, }, D { l: 6, t: 11, i: 1715, }, D { l: 10, t: 11, i: 584, }, D { l: 11, t: 11, i: 546, }, D { l: 11, t: 11, i: 692, }, D { l: 12, t: 11, i: 259, }, D { l: 12, t: 11, i: 295, }, D { l: 13, t: 11, i: 46, }, D { l: 141, t: 11, i: 154, }, D { l: 134, t: 0, i: 676, }, D { l: 132, t: 11, i: 588, }, D { l: 4, t: 11, i: 231, }, D { l: 5, t: 11, i: 61 }, D { l: 6, t: 11, i: 104, }, D { l: 7, t: 11, i: 729, }, D { l: 7, t: 11, i: 964, }, D { l: 7, t: 11, i: 1658, }, D { l: 140, t: 11, i: 414, }, D { l: 6, t: 11, i: 263, }, D { l: 138, t: 11, i: 757, }, D { l: 11, t: 0, i: 337, }, D { l: 142, t: 0, i: 303, }, D { l: 135, t: 11, i: 1363, }, D { l: 132, t: 11, i: 320, }, D { l: 140, t: 0, i: 506, }, D { l: 134, t: 10, i: 447, }, D { l: 5, t: 0, i: 77 }, D { l: 7, t: 0, i: 1455, }, D { l: 10, t: 0, i: 843, }, D { l: 147, t: 0, i: 73, }, D { l: 7, t: 10, i: 577, }, D { l: 7, t: 10, i: 1432, }, D { l: 9, t: 10, i: 475, }, D { l: 9, t: 10, i: 505, }, D { l: 9, t: 10, i: 526, }, D { l: 9, t: 10, i: 609, }, D { l: 9, t: 10, i: 689, }, D { l: 9, t: 10, i: 726, }, D { l: 9, t: 10, i: 735, }, D { l: 9, t: 10, i: 738, }, D { l: 10, t: 10, i: 556, }, D { l: 10, t: 10, i: 674, }, D { l: 10, t: 10, i: 684, }, D { l: 11, t: 10, i: 89, }, D { l: 11, t: 10, i: 202, }, D { l: 11, t: 10, i: 272, }, D { l: 11, t: 10, i: 380, }, D { l: 11, t: 10, i: 415, }, D { l: 11, t: 10, i: 505, }, D { l: 11, t: 10, i: 537, }, D { l: 11, t: 10, i: 550, }, D { l: 11, t: 10, i: 562, }, D { l: 11, t: 10, i: 640, }, D { l: 11, t: 10, i: 667, }, D { l: 11, t: 10, i: 688, }, D { l: 11, t: 10, i: 847, }, D { l: 11, t: 10, i: 927, }, D { l: 11, t: 10, i: 930, }, D { l: 11, t: 10, i: 940, }, D { l: 12, t: 10, i: 144, }, D { l: 12, t: 10, i: 325, }, D { l: 12, t: 10, i: 329, }, D { l: 12, t: 10, i: 389, }, D { l: 12, t: 10, i: 403, }, D { l: 12, t: 10, i: 451, }, D { l: 12, t: 10, i: 515, }, D { l: 12, t: 10, i: 604, }, D { l: 12, t: 10, i: 616, }, D { l: 12, t: 10, i: 626, }, D { l: 13, t: 10, i: 66, }, D { l: 13, t: 10, i: 131, }, D { l: 13, t: 10, i: 167, }, D { l: 13, t: 10, i: 236, }, D { l: 13, t: 10, i: 368, }, D { l: 13, t: 10, i: 411, }, D { l: 13, t: 10, i: 434, }, D { l: 13, t: 10, i: 453, }, D { l: 13, t: 10, i: 461, }, D { l: 13, t: 10, i: 474, }, D { l: 14, t: 10, i: 59, }, D { l: 14, t: 10, i: 60, }, D { l: 14, t: 10, i: 139, }, D { l: 14, t: 10, i: 152, }, D { l: 14, t: 10, i: 276, }, D { l: 14, t: 10, i: 353, }, D { l: 14, t: 10, i: 402, }, D { l: 15, t: 10, i: 28, }, D { l: 15, t: 10, i: 81, }, D { l: 15, t: 10, i: 123, }, D { l: 15, t: 10, i: 152, }, D { l: 18, t: 10, i: 136, }, D { l: 148, t: 10, i: 88, }, D { l: 132, t: 0, i: 458, }, D { l: 135, t: 0, i: 1420, }, D { l: 6, t: 0, i: 109 }, D { l: 10, t: 0, i: 382, }, D { l: 4, t: 11, i: 405, }, D { l: 4, t: 10, i: 609, }, D { l: 7, t: 10, i: 756, }, D { l: 7, t: 11, i: 817, }, D { l: 9, t: 10, i: 544, }, D { l: 11, t: 10, i: 413, }, D { l: 14, t: 11, i: 58, }, D { l: 14, t: 10, i: 307, }, D { l: 16, t: 10, i: 25, }, D { l: 17, t: 11, i: 37, }, D { l: 146, t: 11, i: 124, }, D { l: 6, t: 0, i: 330 }, D { l: 7, t: 0, i: 1084, }, D { l: 11, t: 0, i: 142, }, D { l: 133, t: 11, i: 974, }, D { l: 4, t: 10, i: 930, }, D { l: 133, t: 10, i: 947, }, D { l: 5, t: 10, i: 939, }, D { l: 142, t: 11, i: 394, }, D { l: 16, t: 0, i: 91 }, D { l: 145, t: 0, i: 87, }, D { l: 5, t: 11, i: 235, }, D { l: 5, t: 10, i: 962, }, D { l: 7, t: 11, i: 1239, }, D { l: 11, t: 11, i: 131, }, D { l: 140, t: 11, i: 370, }, D { l: 11, t: 0, i: 492, }, D { l: 5, t: 10, i: 651, }, D { l: 8, t: 10, i: 170, }, D { l: 9, t: 10, i: 61 }, D { l: 9, t: 10, i: 63 }, D { l: 10, t: 10, i: 23, }, D { l: 10, t: 10, i: 37, }, D { l: 10, t: 10, i: 834, }, D { l: 11, t: 10, i: 4 }, D { l: 11, t: 10, i: 281, }, D { l: 11, t: 10, i: 503, }, D { l: 11, t: 10, i: 677, }, D { l: 12, t: 10, i: 96, }, D { l: 12, t: 10, i: 130, }, D { l: 12, t: 10, i: 244, }, D { l: 14, t: 10, i: 5 }, D { l: 14, t: 10, i: 40, }, D { l: 14, t: 10, i: 162, }, D { l: 14, t: 10, i: 202, }, D { l: 146, t: 10, i: 133, }, D { l: 4, t: 10, i: 406, }, D { l: 5, t: 10, i: 579, }, D { l: 12, t: 10, i: 492, }, D { l: 150, t: 10, i: 15, }, D { l: 9, t: 11, i: 137, }, D { l: 138, t: 11, i: 221, }, D { l: 134, t: 0, i: 1239, }, D { l: 11, t: 0, i: 211, }, D { l: 140, t: 0, i: 145, }, D { l: 7, t: 11, i: 390, }, D { l: 138, t: 11, i: 140, }, D { l: 135, t: 11, i: 1418, }, D { l: 135, t: 11, i: 1144, }, D { l: 134, t: 0, i: 1049, }, D { l: 7, t: 0, i: 321 }, D { l: 6, t: 10, i: 17 }, D { l: 7, t: 10, i: 1001, }, D { l: 7, t: 10, i: 1982, }, D { l: 9, t: 10, i: 886, }, D { l: 10, t: 10, i: 489, }, D { l: 10, t: 10, i: 800, }, D { l: 11, t: 10, i: 782, }, D { l: 12, t: 10, i: 320, }, D { l: 13, t: 10, i: 467, }, D { l: 14, t: 10, i: 145, }, D { l: 14, t: 10, i: 387, }, D { l: 143, t: 10, i: 119, }, D { l: 145, t: 10, i: 17, }, D { l: 5, t: 11, i: 407, }, D { l: 11, t: 11, i: 489, }, D { l: 19, t: 11, i: 37, }, D { l: 20, t: 11, i: 73, }, D { l: 150, t: 11, i: 38, }, D { l: 133, t: 10, i: 458, }, D { l: 135, t: 0, i: 1985, }, D { l: 7, t: 10, i: 1983, }, D { l: 8, t: 10, i: 0 }, D { l: 8, t: 10, i: 171, }, D { l: 9, t: 10, i: 120, }, D { l: 9, t: 10, i: 732, }, D { l: 10, t: 10, i: 473, }, D { l: 11, t: 10, i: 656, }, D { l: 11, t: 10, i: 998, }, D { l: 18, t: 10, i: 0 }, D { l: 18, t: 10, i: 2 }, D { l: 147, t: 10, i: 21, }, D { l: 5, t: 11, i: 325, }, D { l: 7, t: 11, i: 1483, }, D { l: 8, t: 11, i: 5 }, D { l: 8, t: 11, i: 227, }, D { l: 9, t: 11, i: 105, }, D { l: 10, t: 11, i: 585, }, D { l: 140, t: 11, i: 614, }, D { l: 136, t: 0, i: 122, }, D { l: 132, t: 0, i: 234, }, D { l: 135, t: 11, i: 1196, }, D { l: 6, t: 0, i: 976 }, D { l: 6, t: 0, i: 1098, }, D { l: 134, t: 0, i: 1441, }, D { l: 7, t: 0, i: 253 }, D { l: 136, t: 0, i: 549, }, D { l: 6, t: 11, i: 621, }, D { l: 13, t: 11, i: 504, }, D { l: 144, t: 11, i: 19, }, D { l: 132, t: 10, i: 519, }, D { l: 5, t: 0, i: 430 }, D { l: 5, t: 0, i: 932 }, D { l: 6, t: 0, i: 131 }, D { l: 7, t: 0, i: 417 }, D { l: 9, t: 0, i: 522 }, D { l: 11, t: 0, i: 314, }, D { l: 141, t: 0, i: 390, }, D { l: 14, t: 0, i: 149, }, D { l: 14, t: 0, i: 399, }, D { l: 143, t: 0, i: 57, }, D { l: 5, t: 10, i: 907, }, D { l: 6, t: 10, i: 31 }, D { l: 6, t: 11, i: 218, }, D { l: 7, t: 10, i: 491, }, D { l: 7, t: 10, i: 530, }, D { l: 8, t: 10, i: 592, }, D { l: 11, t: 10, i: 53, }, D { l: 11, t: 10, i: 779, }, D { l: 12, t: 10, i: 167, }, D { l: 12, t: 10, i: 411, }, D { l: 14, t: 10, i: 14, }, D { l: 14, t: 10, i: 136, }, D { l: 15, t: 10, i: 72, }, D { l: 16, t: 10, i: 17, }, D { l: 144, t: 10, i: 72, }, D { l: 140, t: 11, i: 330, }, D { l: 7, t: 11, i: 454, }, D { l: 7, t: 11, i: 782, }, D { l: 136, t: 11, i: 768, }, D { l: 132, t: 0, i: 507, }, D { l: 10, t: 11, i: 676, }, D { l: 140, t: 11, i: 462, }, D { l: 6, t: 0, i: 630 }, D { l: 9, t: 0, i: 811 }, D { l: 4, t: 10, i: 208, }, D { l: 5, t: 10, i: 106, }, D { l: 6, t: 10, i: 531, }, D { l: 8, t: 10, i: 408, }, D { l: 9, t: 10, i: 188, }, D { l: 138, t: 10, i: 572, }, D { l: 4, t: 0, i: 343 }, D { l: 5, t: 0, i: 511 }, D { l: 134, t: 10, i: 1693, }, D { l: 134, t: 11, i: 164, }, D { l: 132, t: 0, i: 448, }, D { l: 7, t: 0, i: 455 }, D { l: 138, t: 0, i: 591, }, D { l: 135, t: 0, i: 1381, }, D { l: 12, t: 10, i: 441, }, D { l: 150, t: 11, i: 50, }, D { l: 9, t: 10, i: 449, }, D { l: 10, t: 10, i: 192, }, D { l: 138, t: 10, i: 740, }, D { l: 6, t: 0, i: 575 }, D { l: 132, t: 10, i: 241, }, D { l: 134, t: 0, i: 1175, }, D { l: 134, t: 0, i: 653, }, D { l: 134, t: 0, i: 1761, }, D { l: 134, t: 0, i: 1198, }, D { l: 132, t: 10, i: 259, }, D { l: 6, t: 11, i: 343, }, D { l: 7, t: 11, i: 195, }, D { l: 9, t: 11, i: 226, }, D { l: 10, t: 11, i: 197, }, D { l: 10, t: 11, i: 575, }, D { l: 11, t: 11, i: 502, }, D { l: 139, t: 11, i: 899, }, D { l: 7, t: 0, i: 1127, }, D { l: 7, t: 0, i: 1572, }, D { l: 10, t: 0, i: 297, }, D { l: 10, t: 0, i: 422, }, D { l: 11, t: 0, i: 764, }, D { l: 11, t: 0, i: 810, }, D { l: 12, t: 0, i: 264, }, D { l: 13, t: 0, i: 102, }, D { l: 13, t: 0, i: 300, }, D { l: 13, t: 0, i: 484, }, D { l: 14, t: 0, i: 147, }, D { l: 14, t: 0, i: 229, }, D { l: 17, t: 0, i: 71 }, D { l: 18, t: 0, i: 118, }, D { l: 147, t: 0, i: 120, }, D { l: 135, t: 11, i: 666, }, D { l: 132, t: 0, i: 678, }, D { l: 4, t: 10, i: 173, }, D { l: 5, t: 10, i: 312, }, D { l: 5, t: 10, i: 512, }, D { l: 135, t: 10, i: 1285, }, D { l: 7, t: 10, i: 1603, }, D { l: 7, t: 10, i: 1691, }, D { l: 9, t: 10, i: 464, }, D { l: 11, t: 10, i: 195, }, D { l: 12, t: 10, i: 279, }, D { l: 12, t: 10, i: 448, }, D { l: 14, t: 10, i: 11, }, D { l: 147, t: 10, i: 102, }, D { l: 16, t: 0, i: 99 }, D { l: 146, t: 0, i: 164, }, D { l: 7, t: 11, i: 1125, }, D { l: 9, t: 11, i: 143, }, D { l: 11, t: 11, i: 61, }, D { l: 14, t: 11, i: 405, }, D { l: 150, t: 11, i: 21, }, D { l: 137, t: 11, i: 260, }, D { l: 4, t: 10, i: 452, }, D { l: 5, t: 10, i: 583, }, D { l: 5, t: 10, i: 817, }, D { l: 6, t: 10, i: 433, }, D { l: 7, t: 10, i: 593, }, D { l: 7, t: 10, i: 720, }, D { l: 7, t: 10, i: 1378, }, D { l: 8, t: 10, i: 161, }, D { l: 9, t: 10, i: 284, }, D { l: 10, t: 10, i: 313, }, D { l: 139, t: 10, i: 886, }, D { l: 132, t: 10, i: 547, }, D { l: 136, t: 10, i: 722, }, D { l: 14, t: 0, i: 35 }, D { l: 142, t: 0, i: 191, }, D { l: 141, t: 0, i: 45, }, D { l: 138, t: 0, i: 121, }, D { l: 132, t: 0, i: 125, }, D { l: 134, t: 0, i: 1622, }, D { l: 133, t: 11, i: 959, }, D { l: 8, t: 10, i: 420, }, D { l: 139, t: 10, i: 193, }, D { l: 132, t: 0, i: 721, }, D { l: 135, t: 10, i: 409, }, D { l: 136, t: 0, i: 145, }, D { l: 7, t: 0, i: 792 }, D { l: 8, t: 0, i: 147 }, D { l: 10, t: 0, i: 821, }, D { l: 11, t: 0, i: 970, }, D { l: 11, t: 0, i: 1021, }, D { l: 136, t: 11, i: 173, }, D { l: 134, t: 11, i: 266, }, D { l: 132, t: 0, i: 715, }, D { l: 7, t: 0, i: 1999, }, D { l: 138, t: 10, i: 308, }, D { l: 133, t: 0, i: 531, }, D { l: 5, t: 0, i: 168 }, D { l: 5, t: 0, i: 930 }, D { l: 8, t: 0, i: 74 }, D { l: 9, t: 0, i: 623 }, D { l: 12, t: 0, i: 500, }, D { l: 140, t: 0, i: 579, }, D { l: 144, t: 0, i: 65, }, D { l: 138, t: 11, i: 246, }, D { l: 6, t: 0, i: 220 }, D { l: 7, t: 0, i: 1101, }, D { l: 13, t: 0, i: 105, }, D { l: 142, t: 11, i: 314, }, D { l: 5, t: 10, i: 1002, }, D { l: 136, t: 10, i: 745, }, D { l: 134, t: 0, i: 960, }, D { l: 20, t: 0, i: 0 }, D { l: 148, t: 11, i: 0, }, D { l: 4, t: 0, i: 1005, }, D { l: 4, t: 10, i: 239, }, D { l: 6, t: 10, i: 477, }, D { l: 7, t: 10, i: 1607, }, D { l: 11, t: 10, i: 68, }, D { l: 139, t: 10, i: 617, }, D { l: 6, t: 0, i: 19 }, D { l: 7, t: 0, i: 1413, }, D { l: 139, t: 0, i: 428, }, D { l: 149, t: 10, i: 13, }, D { l: 7, t: 0, i: 96 }, D { l: 8, t: 0, i: 401 }, D { l: 8, t: 0, i: 703 }, D { l: 9, t: 0, i: 896 }, D { l: 136, t: 11, i: 300, }, D { l: 134, t: 0, i: 1595, }, D { l: 145, t: 0, i: 116, }, D { l: 136, t: 0, i: 1021, }, D { l: 7, t: 0, i: 1961, }, D { l: 7, t: 0, i: 1965, }, D { l: 7, t: 0, i: 2030, }, D { l: 8, t: 0, i: 150 }, D { l: 8, t: 0, i: 702 }, D { l: 8, t: 0, i: 737 }, D { l: 8, t: 0, i: 750 }, D { l: 140, t: 0, i: 366, }, D { l: 11, t: 11, i: 75, }, D { l: 142, t: 11, i: 267, }, D { l: 132, t: 10, i: 367, }, D { l: 8, t: 0, i: 800 }, D { l: 9, t: 0, i: 148 }, D { l: 9, t: 0, i: 872 }, D { l: 9, t: 0, i: 890 }, D { l: 11, t: 0, i: 309, }, D { l: 11, t: 0, i: 1001, }, D { l: 13, t: 0, i: 267, }, D { l: 13, t: 0, i: 323, }, D { l: 5, t: 11, i: 427, }, D { l: 5, t: 11, i: 734, }, D { l: 7, t: 11, i: 478, }, D { l: 136, t: 11, i: 52, }, D { l: 7, t: 11, i: 239, }, D { l: 11, t: 11, i: 217, }, D { l: 142, t: 11, i: 165, }, D { l: 132, t: 11, i: 323, }, D { l: 140, t: 11, i: 419, }, D { l: 13, t: 0, i: 299, }, D { l: 142, t: 0, i: 75, }, D { l: 6, t: 11, i: 87 }, D { l: 6, t: 11, i: 1734, }, D { l: 7, t: 11, i: 20 }, D { l: 7, t: 11, i: 1056, }, D { l: 8, t: 11, i: 732, }, D { l: 9, t: 11, i: 406, }, D { l: 9, t: 11, i: 911, }, D { l: 138, t: 11, i: 694, }, D { l: 134, t: 0, i: 1383, }, D { l: 132, t: 10, i: 694, }, D { l: 133, t: 11, i: 613, }, D { l: 137, t: 0, i: 779, }, D { l: 4, t: 0, i: 598 }, D { l: 140, t: 10, i: 687, }, D { l: 6, t: 0, i: 970 }, D { l: 135, t: 0, i: 424, }, D { l: 133, t: 0, i: 547, }, D { l: 7, t: 11, i: 32 }, D { l: 7, t: 11, i: 984, }, D { l: 8, t: 11, i: 85 }, D { l: 8, t: 11, i: 709, }, D { l: 9, t: 11, i: 579, }, D { l: 9, t: 11, i: 847, }, D { l: 9, t: 11, i: 856, }, D { l: 10, t: 11, i: 799, }, D { l: 11, t: 11, i: 258, }, D { l: 11, t: 11, i: 1007, }, D { l: 12, t: 11, i: 331, }, D { l: 12, t: 11, i: 615, }, D { l: 13, t: 11, i: 188, }, D { l: 13, t: 11, i: 435, }, D { l: 14, t: 11, i: 8 }, D { l: 15, t: 11, i: 165, }, D { l: 16, t: 11, i: 27, }, D { l: 148, t: 11, i: 40, }, D { l: 6, t: 0, i: 1222, }, D { l: 134, t: 0, i: 1385, }, D { l: 132, t: 0, i: 876, }, D { l: 138, t: 11, i: 151, }, D { l: 135, t: 10, i: 213, }, D { l: 4, t: 11, i: 167, }, D { l: 135, t: 11, i: 82, }, D { l: 133, t: 0, i: 133, }, D { l: 6, t: 11, i: 24 }, D { l: 7, t: 11, i: 74 }, D { l: 7, t: 11, i: 678, }, D { l: 137, t: 11, i: 258, }, D { l: 5, t: 11, i: 62 }, D { l: 6, t: 11, i: 534, }, D { l: 7, t: 11, i: 684, }, D { l: 7, t: 11, i: 1043, }, D { l: 7, t: 11, i: 1072, }, D { l: 8, t: 11, i: 280, }, D { l: 8, t: 11, i: 541, }, D { l: 8, t: 11, i: 686, }, D { l: 10, t: 11, i: 519, }, D { l: 11, t: 11, i: 252, }, D { l: 140, t: 11, i: 282, }, D { l: 136, t: 0, i: 187, }, D { l: 8, t: 0, i: 8 }, D { l: 10, t: 0, i: 0 }, D { l: 10, t: 0, i: 818, }, D { l: 139, t: 0, i: 988, }, D { l: 132, t: 11, i: 359, }, D { l: 11, t: 0, i: 429, }, D { l: 15, t: 0, i: 51 }, D { l: 135, t: 10, i: 1672, }, D { l: 136, t: 0, i: 685, }, D { l: 5, t: 11, i: 211, }, D { l: 7, t: 11, i: 88 }, D { l: 136, t: 11, i: 627, }, D { l: 134, t: 0, i: 472, }, D { l: 136, t: 0, i: 132, }, D { l: 6, t: 11, i: 145, }, D { l: 141, t: 11, i: 336, }, D { l: 4, t: 10, i: 751, }, D { l: 11, t: 10, i: 390, }, D { l: 140, t: 10, i: 32, }, D { l: 6, t: 0, i: 938 }, D { l: 6, t: 0, i: 1060, }, D { l: 4, t: 11, i: 263, }, D { l: 4, t: 10, i: 409, }, D { l: 133, t: 10, i: 78, }, D { l: 137, t: 0, i: 874, }, D { l: 8, t: 0, i: 774 }, D { l: 10, t: 0, i: 670, }, D { l: 12, t: 0, i: 51 }, D { l: 4, t: 11, i: 916, }, D { l: 6, t: 10, i: 473, }, D { l: 7, t: 10, i: 1602, }, D { l: 10, t: 10, i: 698, }, D { l: 12, t: 10, i: 212, }, D { l: 13, t: 10, i: 307, }, D { l: 145, t: 10, i: 105, }, D { l: 146, t: 0, i: 92, }, D { l: 143, t: 10, i: 156, }, D { l: 132, t: 0, i: 830, }, D { l: 137, t: 0, i: 701, }, D { l: 4, t: 11, i: 599, }, D { l: 6, t: 11, i: 1634, }, D { l: 7, t: 11, i: 5 }, D { l: 7, t: 11, i: 55 }, D { l: 7, t: 11, i: 67 }, D { l: 7, t: 11, i: 97 }, D { l: 7, t: 11, i: 691, }, D { l: 7, t: 11, i: 979, }, D { l: 7, t: 11, i: 1697, }, D { l: 8, t: 11, i: 207, }, D { l: 8, t: 11, i: 214, }, D { l: 8, t: 11, i: 231, }, D { l: 8, t: 11, i: 294, }, D { l: 8, t: 11, i: 336, }, D { l: 8, t: 11, i: 428, }, D { l: 8, t: 11, i: 451, }, D { l: 8, t: 11, i: 460, }, D { l: 8, t: 11, i: 471, }, D { l: 8, t: 11, i: 622, }, D { l: 8, t: 11, i: 626, }, D { l: 8, t: 11, i: 679, }, D { l: 8, t: 11, i: 759, }, D { l: 8, t: 11, i: 829, }, D { l: 9, t: 11, i: 11 }, D { l: 9, t: 11, i: 246, }, D { l: 9, t: 11, i: 484, }, D { l: 9, t: 11, i: 573, }, D { l: 9, t: 11, i: 706, }, D { l: 9, t: 11, i: 762, }, D { l: 9, t: 11, i: 798, }, D { l: 9, t: 11, i: 855, }, D { l: 9, t: 11, i: 870, }, D { l: 9, t: 11, i: 912, }, D { l: 10, t: 11, i: 303, }, D { l: 10, t: 11, i: 335, }, D { l: 10, t: 11, i: 424, }, D { l: 10, t: 11, i: 461, }, D { l: 10, t: 11, i: 543, }, D { l: 10, t: 11, i: 759, }, D { l: 10, t: 11, i: 814, }, D { l: 11, t: 11, i: 59, }, D { l: 11, t: 11, i: 199, }, D { l: 11, t: 11, i: 235, }, D { l: 11, t: 11, i: 475, }, D { l: 11, t: 11, i: 590, }, D { l: 11, t: 11, i: 929, }, D { l: 11, t: 11, i: 963, }, D { l: 12, t: 11, i: 114, }, D { l: 12, t: 11, i: 182, }, D { l: 12, t: 11, i: 226, }, D { l: 12, t: 11, i: 332, }, D { l: 12, t: 11, i: 439, }, D { l: 12, t: 11, i: 575, }, D { l: 12, t: 11, i: 598, }, D { l: 13, t: 11, i: 8 }, D { l: 13, t: 11, i: 125, }, D { l: 13, t: 11, i: 194, }, D { l: 13, t: 11, i: 287, }, D { l: 14, t: 11, i: 197, }, D { l: 14, t: 11, i: 383, }, D { l: 15, t: 11, i: 53, }, D { l: 17, t: 11, i: 63, }, D { l: 19, t: 11, i: 46, }, D { l: 19, t: 11, i: 98, }, D { l: 19, t: 11, i: 106, }, D { l: 148, t: 11, i: 85, }, D { l: 4, t: 0, i: 127 }, D { l: 5, t: 0, i: 350 }, D { l: 6, t: 0, i: 356 }, D { l: 8, t: 0, i: 426 }, D { l: 9, t: 0, i: 572 }, D { l: 10, t: 0, i: 247, }, D { l: 139, t: 0, i: 312, }, D { l: 134, t: 0, i: 1215, }, D { l: 6, t: 0, i: 59 }, D { l: 9, t: 0, i: 603 }, D { l: 13, t: 0, i: 397, }, D { l: 7, t: 11, i: 1853, }, D { l: 138, t: 11, i: 437, }, D { l: 134, t: 0, i: 1762, }, D { l: 147, t: 11, i: 126, }, D { l: 135, t: 10, i: 883, }, D { l: 13, t: 0, i: 293, }, D { l: 142, t: 0, i: 56, }, D { l: 133, t: 10, i: 617, }, D { l: 139, t: 10, i: 50, }, D { l: 5, t: 11, i: 187, }, D { l: 7, t: 10, i: 1518, }, D { l: 139, t: 10, i: 694, }, D { l: 135, t: 0, i: 441, }, D { l: 6, t: 0, i: 111 }, D { l: 7, t: 0, i: 4 }, D { l: 8, t: 0, i: 163 }, D { l: 8, t: 0, i: 776 }, D { l: 138, t: 0, i: 566, }, D { l: 132, t: 0, i: 806, }, D { l: 4, t: 11, i: 215, }, D { l: 9, t: 11, i: 38 }, D { l: 10, t: 11, i: 3 }, D { l: 11, t: 11, i: 23, }, D { l: 11, t: 11, i: 127, }, D { l: 139, t: 11, i: 796, }, D { l: 14, t: 0, i: 233, }, D { l: 4, t: 10, i: 546, }, D { l: 135, t: 10, i: 2042, }, D { l: 135, t: 0, i: 1994, }, D { l: 134, t: 0, i: 1739, }, D { l: 135, t: 11, i: 1530, }, D { l: 136, t: 0, i: 393, }, D { l: 5, t: 0, i: 297 }, D { l: 7, t: 0, i: 1038, }, D { l: 14, t: 0, i: 359, }, D { l: 19, t: 0, i: 52 }, D { l: 148, t: 0, i: 47, }, D { l: 135, t: 0, i: 309, }, D { l: 4, t: 10, i: 313, }, D { l: 133, t: 10, i: 577, }, D { l: 8, t: 10, i: 184, }, D { l: 141, t: 10, i: 433, }, D { l: 135, t: 10, i: 935, }, D { l: 12, t: 10, i: 186, }, D { l: 12, t: 10, i: 292, }, D { l: 14, t: 10, i: 100, }, D { l: 146, t: 10, i: 70, }, D { l: 136, t: 0, i: 363, }, D { l: 14, t: 0, i: 175, }, D { l: 11, t: 10, i: 402, }, D { l: 12, t: 10, i: 109, }, D { l: 12, t: 10, i: 431, }, D { l: 13, t: 10, i: 179, }, D { l: 13, t: 10, i: 206, }, D { l: 14, t: 10, i: 217, }, D { l: 16, t: 10, i: 3 }, D { l: 148, t: 10, i: 53, }, D { l: 5, t: 10, i: 886, }, D { l: 6, t: 10, i: 46 }, D { l: 6, t: 10, i: 1790, }, D { l: 7, t: 10, i: 14 }, D { l: 7, t: 10, i: 732, }, D { l: 7, t: 10, i: 1654, }, D { l: 8, t: 10, i: 95 }, D { l: 8, t: 10, i: 327, }, D { l: 8, t: 10, i: 616, }, D { l: 9, t: 10, i: 892, }, D { l: 10, t: 10, i: 598, }, D { l: 10, t: 10, i: 769, }, D { l: 11, t: 10, i: 134, }, D { l: 11, t: 10, i: 747, }, D { l: 12, t: 10, i: 378, }, D { l: 142, t: 10, i: 97, }, D { l: 136, t: 0, i: 666, }, D { l: 135, t: 0, i: 1675, }, D { l: 6, t: 0, i: 655 }, D { l: 134, t: 0, i: 1600, }, D { l: 135, t: 0, i: 808, }, D { l: 133, t: 10, i: 1021, }, D { l: 4, t: 11, i: 28 }, D { l: 5, t: 11, i: 440, }, D { l: 7, t: 11, i: 248, }, D { l: 11, t: 11, i: 833, }, D { l: 140, t: 11, i: 344, }, D { l: 134, t: 11, i: 1654, }, D { l: 132, t: 0, i: 280, }, D { l: 140, t: 0, i: 54, }, D { l: 4, t: 0, i: 421 }, D { l: 133, t: 0, i: 548, }, D { l: 132, t: 10, i: 153, }, D { l: 6, t: 11, i: 339, }, D { l: 135, t: 11, i: 923, }, D { l: 133, t: 11, i: 853, }, D { l: 133, t: 10, i: 798, }, D { l: 132, t: 10, i: 587, }, D { l: 6, t: 11, i: 249, }, D { l: 7, t: 11, i: 1234, }, D { l: 139, t: 11, i: 573, }, D { l: 6, t: 10, i: 598, }, D { l: 7, t: 10, i: 42 }, D { l: 8, t: 10, i: 695, }, D { l: 10, t: 10, i: 212, }, D { l: 11, t: 10, i: 158, }, D { l: 14, t: 10, i: 196, }, D { l: 145, t: 10, i: 85, }, D { l: 7, t: 0, i: 249 }, D { l: 5, t: 10, i: 957, }, D { l: 133, t: 10, i: 1008, }, D { l: 4, t: 10, i: 129, }, D { l: 135, t: 10, i: 465, }, D { l: 6, t: 0, i: 254 }, D { l: 7, t: 0, i: 842 }, D { l: 7, t: 0, i: 1659, }, D { l: 9, t: 0, i: 109 }, D { l: 10, t: 0, i: 103, }, D { l: 7, t: 10, i: 908, }, D { l: 7, t: 10, i: 1201, }, D { l: 9, t: 10, i: 755, }, D { l: 11, t: 10, i: 906, }, D { l: 12, t: 10, i: 527, }, D { l: 146, t: 10, i: 7, }, D { l: 5, t: 0, i: 262 }, D { l: 136, t: 10, i: 450, }, D { l: 144, t: 0, i: 1 }, D { l: 10, t: 11, i: 201, }, D { l: 142, t: 11, i: 319, }, D { l: 7, t: 11, i: 49 }, D { l: 7, t: 11, i: 392, }, D { l: 8, t: 11, i: 20 }, D { l: 8, t: 11, i: 172, }, D { l: 8, t: 11, i: 690, }, D { l: 9, t: 11, i: 383, }, D { l: 9, t: 11, i: 845, }, D { l: 10, t: 11, i: 48, }, D { l: 11, t: 11, i: 293, }, D { l: 11, t: 11, i: 832, }, D { l: 11, t: 11, i: 920, }, D { l: 141, t: 11, i: 221, }, D { l: 5, t: 11, i: 858, }, D { l: 133, t: 11, i: 992, }, D { l: 134, t: 0, i: 805, }, D { l: 139, t: 10, i: 1003, }, D { l: 6, t: 0, i: 1630, }, D { l: 134, t: 11, i: 307, }, D { l: 7, t: 11, i: 1512, }, D { l: 135, t: 11, i: 1794, }, D { l: 6, t: 11, i: 268, }, D { l: 137, t: 11, i: 62, }, D { l: 135, t: 10, i: 1868, }, D { l: 133, t: 0, i: 671, }, D { l: 4, t: 0, i: 989 }, D { l: 8, t: 0, i: 972 }, D { l: 136, t: 0, i: 998, }, D { l: 132, t: 11, i: 423, }, D { l: 132, t: 0, i: 889, }, D { l: 135, t: 0, i: 1382, }, D { l: 135, t: 0, i: 1910, }, D { l: 7, t: 10, i: 965, }, D { l: 7, t: 10, i: 1460, }, D { l: 135, t: 10, i: 1604, }, D { l: 4, t: 0, i: 627 }, D { l: 5, t: 0, i: 775 }, D { l: 138, t: 11, i: 106, }, D { l: 134, t: 11, i: 348, }, D { l: 7, t: 0, i: 202 }, D { l: 11, t: 0, i: 362, }, D { l: 11, t: 0, i: 948, }, D { l: 140, t: 0, i: 388, }, D { l: 138, t: 11, i: 771, }, D { l: 6, t: 11, i: 613, }, D { l: 136, t: 11, i: 223, }, D { l: 6, t: 0, i: 560 }, D { l: 7, t: 0, i: 451 }, D { l: 8, t: 0, i: 389 }, D { l: 12, t: 0, i: 490, }, D { l: 13, t: 0, i: 16 }, D { l: 13, t: 0, i: 215, }, D { l: 13, t: 0, i: 351, }, D { l: 18, t: 0, i: 132, }, D { l: 147, t: 0, i: 125, }, D { l: 135, t: 0, i: 841, }, D { l: 136, t: 0, i: 566, }, D { l: 136, t: 0, i: 938, }, D { l: 132, t: 11, i: 670, }, D { l: 5, t: 0, i: 912 }, D { l: 6, t: 0, i: 1695, }, D { l: 140, t: 11, i: 55, }, D { l: 9, t: 11, i: 40 }, D { l: 139, t: 11, i: 136, }, D { l: 7, t: 0, i: 1361, }, D { l: 7, t: 10, i: 982, }, D { l: 10, t: 10, i: 32, }, D { l: 143, t: 10, i: 56, }, D { l: 11, t: 11, i: 259, }, D { l: 140, t: 11, i: 270, }, D { l: 5, t: 0, i: 236 }, D { l: 6, t: 0, i: 572 }, D { l: 8, t: 0, i: 492 }, D { l: 11, t: 0, i: 618, }, D { l: 144, t: 0, i: 56, }, D { l: 8, t: 11, i: 572, }, D { l: 9, t: 11, i: 310, }, D { l: 9, t: 11, i: 682, }, D { l: 137, t: 11, i: 698, }, D { l: 134, t: 0, i: 1854, }, D { l: 5, t: 0, i: 190 }, D { l: 136, t: 0, i: 318, }, D { l: 133, t: 10, i: 435, }, D { l: 135, t: 0, i: 1376, }, D { l: 4, t: 11, i: 296, }, D { l: 6, t: 11, i: 352, }, D { l: 7, t: 11, i: 401, }, D { l: 7, t: 11, i: 1410, }, D { l: 7, t: 11, i: 1594, }, D { l: 7, t: 11, i: 1674, }, D { l: 8, t: 11, i: 63 }, D { l: 8, t: 11, i: 660, }, D { l: 137, t: 11, i: 74, }, D { l: 7, t: 0, i: 349 }, D { l: 5, t: 10, i: 85 }, D { l: 6, t: 10, i: 419, }, D { l: 7, t: 10, i: 305, }, D { l: 7, t: 10, i: 361, }, D { l: 7, t: 10, i: 1337, }, D { l: 8, t: 10, i: 71 }, D { l: 140, t: 10, i: 519, }, D { l: 4, t: 11, i: 139, }, D { l: 4, t: 11, i: 388, }, D { l: 140, t: 11, i: 188, }, D { l: 6, t: 0, i: 1972, }, D { l: 6, t: 0, i: 2013, }, D { l: 8, t: 0, i: 951 }, D { l: 10, t: 0, i: 947, }, D { l: 10, t: 0, i: 974, }, D { l: 10, t: 0, i: 1018, }, D { l: 142, t: 0, i: 476, }, D { l: 140, t: 10, i: 688, }, D { l: 135, t: 10, i: 740, }, D { l: 5, t: 10, i: 691, }, D { l: 7, t: 10, i: 345, }, D { l: 9, t: 10, i: 94 }, D { l: 140, t: 10, i: 169, }, D { l: 9, t: 0, i: 344 }, D { l: 5, t: 10, i: 183, }, D { l: 6, t: 10, i: 582, }, D { l: 10, t: 10, i: 679, }, D { l: 140, t: 10, i: 435, }, D { l: 135, t: 10, i: 511, }, D { l: 132, t: 0, i: 850, }, D { l: 8, t: 11, i: 441, }, D { l: 10, t: 11, i: 314, }, D { l: 143, t: 11, i: 3, }, D { l: 7, t: 10, i: 1993, }, D { l: 136, t: 10, i: 684, }, D { l: 4, t: 11, i: 747, }, D { l: 6, t: 11, i: 290, }, D { l: 6, t: 10, i: 583, }, D { l: 7, t: 11, i: 649, }, D { l: 7, t: 11, i: 1479, }, D { l: 135, t: 11, i: 1583, }, D { l: 133, t: 11, i: 232, }, D { l: 133, t: 10, i: 704, }, D { l: 134, t: 0, i: 910, }, D { l: 4, t: 10, i: 179, }, D { l: 5, t: 10, i: 198, }, D { l: 133, t: 10, i: 697, }, D { l: 7, t: 10, i: 347, }, D { l: 7, t: 10, i: 971, }, D { l: 8, t: 10, i: 181, }, D { l: 138, t: 10, i: 711, }, D { l: 136, t: 11, i: 525, }, D { l: 14, t: 0, i: 19 }, D { l: 14, t: 0, i: 28 }, D { l: 144, t: 0, i: 29, }, D { l: 7, t: 0, i: 85 }, D { l: 7, t: 0, i: 247 }, D { l: 8, t: 0, i: 585 }, D { l: 138, t: 0, i: 163, }, D { l: 4, t: 0, i: 487 }, D { l: 7, t: 11, i: 472, }, D { l: 7, t: 11, i: 1801, }, D { l: 10, t: 11, i: 748, }, D { l: 141, t: 11, i: 458, }, D { l: 4, t: 10, i: 243, }, D { l: 5, t: 10, i: 203, }, D { l: 7, t: 10, i: 19 }, D { l: 7, t: 10, i: 71 }, D { l: 7, t: 10, i: 113, }, D { l: 10, t: 10, i: 405, }, D { l: 11, t: 10, i: 357, }, D { l: 142, t: 10, i: 240, }, D { l: 7, t: 10, i: 1450, }, D { l: 139, t: 10, i: 99, }, D { l: 132, t: 11, i: 425, }, D { l: 138, t: 0, i: 145, }, D { l: 147, t: 0, i: 83, }, D { l: 6, t: 10, i: 492, }, D { l: 137, t: 11, i: 247, }, D { l: 4, t: 0, i: 1013, }, D { l: 134, t: 0, i: 2033, }, D { l: 5, t: 10, i: 134, }, D { l: 6, t: 10, i: 408, }, D { l: 6, t: 10, i: 495, }, D { l: 135, t: 10, i: 1593, }, D { l: 135, t: 0, i: 1922, }, D { l: 134, t: 11, i: 1768, }, D { l: 4, t: 0, i: 124 }, D { l: 10, t: 0, i: 457, }, D { l: 11, t: 0, i: 121, }, D { l: 11, t: 0, i: 169, }, D { l: 11, t: 0, i: 870, }, D { l: 11, t: 0, i: 874, }, D { l: 12, t: 0, i: 214, }, D { l: 14, t: 0, i: 187, }, D { l: 143, t: 0, i: 77, }, D { l: 5, t: 0, i: 557 }, D { l: 135, t: 0, i: 1457, }, D { l: 139, t: 0, i: 66, }, D { l: 5, t: 11, i: 943, }, D { l: 6, t: 11, i: 1779, }, D { l: 142, t: 10, i: 4, }, D { l: 4, t: 10, i: 248, }, D { l: 4, t: 10, i: 665, }, D { l: 7, t: 10, i: 137, }, D { l: 137, t: 10, i: 349, }, D { l: 7, t: 0, i: 1193, }, D { l: 5, t: 11, i: 245, }, D { l: 6, t: 11, i: 576, }, D { l: 7, t: 11, i: 582, }, D { l: 136, t: 11, i: 225, }, D { l: 144, t: 0, i: 82, }, D { l: 7, t: 10, i: 1270, }, D { l: 139, t: 10, i: 612, }, D { l: 5, t: 0, i: 454 }, D { l: 10, t: 0, i: 352, }, D { l: 138, t: 11, i: 352, }, D { l: 18, t: 0, i: 57 }, D { l: 5, t: 10, i: 371, }, D { l: 135, t: 10, i: 563, }, D { l: 135, t: 0, i: 1333, }, D { l: 6, t: 0, i: 107 }, D { l: 7, t: 0, i: 638 }, D { l: 7, t: 0, i: 1632, }, D { l: 9, t: 0, i: 396 }, D { l: 134, t: 11, i: 610, }, D { l: 5, t: 0, i: 370 }, D { l: 134, t: 0, i: 1756, }, D { l: 4, t: 10, i: 374, }, D { l: 7, t: 10, i: 547, }, D { l: 7, t: 10, i: 1700, }, D { l: 7, t: 10, i: 1833, }, D { l: 139, t: 10, i: 858, }, D { l: 133, t: 0, i: 204, }, D { l: 6, t: 0, i: 1305, }, D { l: 9, t: 10, i: 311, }, D { l: 141, t: 10, i: 42, }, D { l: 5, t: 0, i: 970 }, D { l: 134, t: 0, i: 1706, }, D { l: 6, t: 10, i: 1647, }, D { l: 7, t: 10, i: 1552, }, D { l: 7, t: 10, i: 2010, }, D { l: 9, t: 10, i: 494, }, D { l: 137, t: 10, i: 509, }, D { l: 13, t: 11, i: 455, }, D { l: 15, t: 11, i: 99, }, D { l: 15, t: 11, i: 129, }, D { l: 144, t: 11, i: 68, }, D { l: 135, t: 0, i: 3 }, D { l: 4, t: 0, i: 35 }, D { l: 5, t: 0, i: 121 }, D { l: 5, t: 0, i: 483 }, D { l: 5, t: 0, i: 685 }, D { l: 6, t: 0, i: 489 }, D { l: 6, t: 0, i: 782 }, D { l: 6, t: 0, i: 1032, }, D { l: 7, t: 0, i: 1204, }, D { l: 136, t: 0, i: 394, }, D { l: 4, t: 0, i: 921 }, D { l: 133, t: 0, i: 1007, }, D { l: 8, t: 11, i: 360, }, D { l: 138, t: 11, i: 63, }, D { l: 135, t: 0, i: 1696, }, D { l: 134, t: 0, i: 1519, }, D { l: 132, t: 11, i: 443, }, D { l: 135, t: 11, i: 944, }, D { l: 6, t: 10, i: 123, }, D { l: 7, t: 10, i: 214, }, D { l: 9, t: 10, i: 728, }, D { l: 10, t: 10, i: 157, }, D { l: 11, t: 10, i: 346, }, D { l: 11, t: 10, i: 662, }, D { l: 143, t: 10, i: 106, }, D { l: 137, t: 0, i: 981, }, D { l: 135, t: 10, i: 1435, }, D { l: 134, t: 0, i: 1072, }, D { l: 132, t: 0, i: 712, }, D { l: 134, t: 0, i: 1629, }, D { l: 134, t: 0, i: 728, }, D { l: 4, t: 11, i: 298, }, D { l: 137, t: 11, i: 483, }, D { l: 6, t: 0, i: 1177, }, D { l: 6, t: 0, i: 1271, }, D { l: 5, t: 11, i: 164, }, D { l: 7, t: 11, i: 121, }, D { l: 142, t: 11, i: 189, }, D { l: 7, t: 0, i: 1608, }, D { l: 4, t: 10, i: 707, }, D { l: 5, t: 10, i: 588, }, D { l: 6, t: 10, i: 393, }, D { l: 13, t: 10, i: 106, }, D { l: 18, t: 10, i: 49, }, D { l: 147, t: 10, i: 41, }, D { l: 23, t: 0, i: 16 }, D { l: 151, t: 11, i: 16, }, D { l: 6, t: 10, i: 211, }, D { l: 7, t: 10, i: 1690, }, D { l: 11, t: 10, i: 486, }, D { l: 140, t: 10, i: 369, }, D { l: 133, t: 0, i: 485, }, D { l: 19, t: 11, i: 15, }, D { l: 149, t: 11, i: 27, }, D { l: 4, t: 11, i: 172, }, D { l: 9, t: 11, i: 611, }, D { l: 10, t: 11, i: 436, }, D { l: 12, t: 11, i: 673, }, D { l: 141, t: 11, i: 255, }, D { l: 5, t: 11, i: 844, }, D { l: 10, t: 11, i: 484, }, D { l: 11, t: 11, i: 754, }, D { l: 12, t: 11, i: 457, }, D { l: 14, t: 11, i: 171, }, D { l: 14, t: 11, i: 389, }, D { l: 146, t: 11, i: 153, }, D { l: 4, t: 0, i: 285 }, D { l: 5, t: 0, i: 27 }, D { l: 5, t: 0, i: 317 }, D { l: 6, t: 0, i: 301 }, D { l: 7, t: 0, i: 7 }, D { l: 8, t: 0, i: 153 }, D { l: 10, t: 0, i: 766, }, D { l: 11, t: 0, i: 468, }, D { l: 12, t: 0, i: 467, }, D { l: 141, t: 0, i: 143, }, D { l: 134, t: 0, i: 1462, }, D { l: 9, t: 11, i: 263, }, D { l: 10, t: 11, i: 147, }, D { l: 138, t: 11, i: 492, }, D { l: 133, t: 11, i: 537, }, D { l: 6, t: 0, i: 1945, }, D { l: 6, t: 0, i: 1986, }, D { l: 6, t: 0, i: 1991, }, D { l: 134, t: 0, i: 2038, }, D { l: 134, t: 10, i: 219, }, D { l: 137, t: 11, i: 842, }, D { l: 14, t: 0, i: 52 }, D { l: 17, t: 0, i: 50 }, D { l: 5, t: 10, i: 582, }, D { l: 6, t: 10, i: 1646, }, D { l: 7, t: 10, i: 99 }, D { l: 7, t: 10, i: 1962, }, D { l: 7, t: 10, i: 1986, }, D { l: 8, t: 10, i: 515, }, D { l: 8, t: 10, i: 773, }, D { l: 9, t: 10, i: 23 }, D { l: 9, t: 10, i: 491, }, D { l: 12, t: 10, i: 620, }, D { l: 142, t: 10, i: 93, }, D { l: 138, t: 11, i: 97, }, D { l: 20, t: 0, i: 21 }, D { l: 20, t: 0, i: 44 }, D { l: 133, t: 10, i: 851, }, D { l: 136, t: 0, i: 819, }, D { l: 139, t: 0, i: 917, }, D { l: 5, t: 11, i: 230, }, D { l: 5, t: 11, i: 392, }, D { l: 6, t: 11, i: 420, }, D { l: 8, t: 10, i: 762, }, D { l: 8, t: 10, i: 812, }, D { l: 9, t: 11, i: 568, }, D { l: 9, t: 10, i: 910, }, D { l: 140, t: 11, i: 612, }, D { l: 135, t: 0, i: 784, }, D { l: 15, t: 0, i: 135, }, D { l: 143, t: 11, i: 135, }, D { l: 10, t: 0, i: 454, }, D { l: 140, t: 0, i: 324, }, D { l: 4, t: 11, i: 0 }, D { l: 5, t: 11, i: 41 }, D { l: 7, t: 11, i: 1459, }, D { l: 7, t: 11, i: 1469, }, D { l: 7, t: 11, i: 1618, }, D { l: 7, t: 11, i: 1859, }, D { l: 9, t: 11, i: 549, }, D { l: 139, t: 11, i: 905, }, D { l: 4, t: 10, i: 98 }, D { l: 7, t: 10, i: 1365, }, D { l: 9, t: 10, i: 422, }, D { l: 9, t: 10, i: 670, }, D { l: 10, t: 10, i: 775, }, D { l: 11, t: 10, i: 210, }, D { l: 13, t: 10, i: 26, }, D { l: 13, t: 10, i: 457, }, D { l: 141, t: 10, i: 476, }, D { l: 6, t: 0, i: 1719, }, D { l: 6, t: 0, i: 1735, }, D { l: 7, t: 0, i: 2016, }, D { l: 7, t: 0, i: 2020, }, D { l: 8, t: 0, i: 837 }, D { l: 137, t: 0, i: 852, }, D { l: 133, t: 11, i: 696, }, D { l: 135, t: 0, i: 852, }, D { l: 132, t: 0, i: 952, }, D { l: 134, t: 10, i: 1730, }, D { l: 132, t: 11, i: 771, }, D { l: 138, t: 0, i: 568, }, D { l: 137, t: 0, i: 448, }, D { l: 139, t: 0, i: 146, }, D { l: 8, t: 0, i: 67 }, D { l: 138, t: 0, i: 419, }, D { l: 133, t: 11, i: 921, }, D { l: 137, t: 10, i: 147, }, D { l: 134, t: 0, i: 1826, }, D { l: 10, t: 0, i: 657, }, D { l: 14, t: 0, i: 297, }, D { l: 142, t: 0, i: 361, }, D { l: 6, t: 0, i: 666 }, D { l: 6, t: 0, i: 767 }, D { l: 134, t: 0, i: 1542, }, D { l: 139, t: 0, i: 729, }, D { l: 6, t: 11, i: 180, }, D { l: 7, t: 11, i: 1137, }, D { l: 8, t: 11, i: 751, }, D { l: 139, t: 11, i: 805, }, D { l: 4, t: 11, i: 183, }, D { l: 7, t: 11, i: 271, }, D { l: 11, t: 11, i: 824, }, D { l: 11, t: 11, i: 952, }, D { l: 13, t: 11, i: 278, }, D { l: 13, t: 11, i: 339, }, D { l: 13, t: 11, i: 482, }, D { l: 14, t: 11, i: 424, }, D { l: 148, t: 11, i: 99, }, D { l: 4, t: 0, i: 669 }, D { l: 5, t: 11, i: 477, }, D { l: 5, t: 11, i: 596, }, D { l: 6, t: 11, i: 505, }, D { l: 7, t: 11, i: 1221, }, D { l: 11, t: 11, i: 907, }, D { l: 12, t: 11, i: 209, }, D { l: 141, t: 11, i: 214, }, D { l: 135, t: 11, i: 1215, }, D { l: 5, t: 0, i: 402 }, D { l: 6, t: 10, i: 30 }, D { l: 11, t: 10, i: 56, }, D { l: 139, t: 10, i: 305, }, D { l: 7, t: 11, i: 564, }, D { l: 142, t: 11, i: 168, }, D { l: 139, t: 0, i: 152, }, D { l: 7, t: 0, i: 912 }, D { l: 135, t: 10, i: 1614, }, D { l: 4, t: 10, i: 150, }, D { l: 5, t: 10, i: 303, }, D { l: 134, t: 10, i: 327, }, D { l: 7, t: 0, i: 320 }, D { l: 8, t: 0, i: 51 }, D { l: 9, t: 0, i: 868 }, D { l: 10, t: 0, i: 833, }, D { l: 12, t: 0, i: 481, }, D { l: 12, t: 0, i: 570, }, D { l: 148, t: 0, i: 106, }, D { l: 132, t: 0, i: 445, }, D { l: 7, t: 11, i: 274, }, D { l: 11, t: 11, i: 263, }, D { l: 11, t: 11, i: 479, }, D { l: 11, t: 11, i: 507, }, D { l: 140, t: 11, i: 277, }, D { l: 10, t: 0, i: 555, }, D { l: 11, t: 0, i: 308, }, D { l: 19, t: 0, i: 95 }, D { l: 6, t: 11, i: 1645, }, D { l: 8, t: 10, i: 192, }, D { l: 10, t: 10, i: 78, }, D { l: 141, t: 10, i: 359, }, D { l: 135, t: 10, i: 786, }, D { l: 6, t: 11, i: 92 }, D { l: 6, t: 11, i: 188, }, D { l: 7, t: 11, i: 1269, }, D { l: 7, t: 11, i: 1524, }, D { l: 7, t: 11, i: 1876, }, D { l: 10, t: 11, i: 228, }, D { l: 139, t: 11, i: 1020, }, D { l: 4, t: 11, i: 459, }, D { l: 133, t: 11, i: 966, }, D { l: 11, t: 0, i: 386, }, D { l: 6, t: 10, i: 1638, }, D { l: 7, t: 10, i: 79 }, D { l: 7, t: 10, i: 496, }, D { l: 9, t: 10, i: 138, }, D { l: 10, t: 10, i: 336, }, D { l: 12, t: 10, i: 412, }, D { l: 12, t: 10, i: 440, }, D { l: 142, t: 10, i: 305, }, D { l: 133, t: 0, i: 239, }, D { l: 7, t: 0, i: 83 }, D { l: 7, t: 0, i: 1990, }, D { l: 8, t: 0, i: 130 }, D { l: 139, t: 0, i: 720, }, D { l: 138, t: 11, i: 709, }, D { l: 4, t: 0, i: 143 }, D { l: 5, t: 0, i: 550 }, D { l: 133, t: 0, i: 752, }, D { l: 5, t: 0, i: 123 }, D { l: 6, t: 0, i: 530 }, D { l: 7, t: 0, i: 348 }, D { l: 135, t: 0, i: 1419, }, D { l: 135, t: 0, i: 2024, }, D { l: 6, t: 11, i: 18 }, D { l: 7, t: 11, i: 179, }, D { l: 7, t: 11, i: 721, }, D { l: 7, t: 11, i: 932, }, D { l: 8, t: 11, i: 548, }, D { l: 8, t: 11, i: 757, }, D { l: 9, t: 11, i: 54 }, D { l: 9, t: 11, i: 65 }, D { l: 9, t: 11, i: 532, }, D { l: 9, t: 11, i: 844, }, D { l: 10, t: 11, i: 113, }, D { l: 10, t: 11, i: 117, }, D { l: 10, t: 11, i: 236, }, D { l: 10, t: 11, i: 315, }, D { l: 10, t: 11, i: 430, }, D { l: 10, t: 11, i: 798, }, D { l: 11, t: 11, i: 153, }, D { l: 11, t: 11, i: 351, }, D { l: 11, t: 11, i: 375, }, D { l: 12, t: 11, i: 78, }, D { l: 12, t: 11, i: 151, }, D { l: 12, t: 11, i: 392, }, D { l: 14, t: 11, i: 248, }, D { l: 143, t: 11, i: 23, }, D { l: 7, t: 10, i: 204, }, D { l: 7, t: 10, i: 415, }, D { l: 8, t: 10, i: 42 }, D { l: 10, t: 10, i: 85, }, D { l: 139, t: 10, i: 564, }, D { l: 134, t: 0, i: 958, }, D { l: 133, t: 11, i: 965, }, D { l: 132, t: 0, i: 210, }, D { l: 135, t: 11, i: 1429, }, D { l: 138, t: 11, i: 480, }, D { l: 134, t: 11, i: 182, }, D { l: 139, t: 11, i: 345, }, D { l: 10, t: 11, i: 65, }, D { l: 10, t: 11, i: 488, }, D { l: 138, t: 11, i: 497, }, D { l: 4, t: 10, i: 3 }, D { l: 5, t: 10, i: 247, }, D { l: 5, t: 10, i: 644, }, D { l: 7, t: 10, i: 744, }, D { l: 7, t: 10, i: 1207, }, D { l: 7, t: 10, i: 1225, }, D { l: 7, t: 10, i: 1909, }, D { l: 146, t: 10, i: 147, }, D { l: 132, t: 0, i: 430, }, D { l: 5, t: 10, i: 285, }, D { l: 9, t: 10, i: 67 }, D { l: 13, t: 10, i: 473, }, D { l: 143, t: 10, i: 82, }, D { l: 144, t: 11, i: 16, }, D { l: 7, t: 11, i: 1162, }, D { l: 9, t: 11, i: 588, }, D { l: 10, t: 11, i: 260, }, D { l: 151, t: 10, i: 8, }, D { l: 133, t: 0, i: 213, }, D { l: 138, t: 0, i: 7 }, D { l: 135, t: 0, i: 801, }, D { l: 134, t: 11, i: 1786, }, D { l: 135, t: 11, i: 308, }, D { l: 6, t: 0, i: 936 }, D { l: 134, t: 0, i: 1289, }, D { l: 133, t: 0, i: 108, }, D { l: 132, t: 0, i: 885, }, D { l: 133, t: 0, i: 219, }, D { l: 139, t: 0, i: 587, }, D { l: 4, t: 0, i: 193 }, D { l: 5, t: 0, i: 916 }, D { l: 6, t: 0, i: 1041, }, D { l: 7, t: 0, i: 364 }, D { l: 10, t: 0, i: 398, }, D { l: 10, t: 0, i: 726, }, D { l: 11, t: 0, i: 317, }, D { l: 11, t: 0, i: 626, }, D { l: 12, t: 0, i: 142, }, D { l: 12, t: 0, i: 288, }, D { l: 12, t: 0, i: 678, }, D { l: 13, t: 0, i: 313, }, D { l: 15, t: 0, i: 113, }, D { l: 146, t: 0, i: 114, }, D { l: 135, t: 0, i: 1165, }, D { l: 6, t: 0, i: 241 }, D { l: 9, t: 0, i: 342 }, D { l: 10, t: 0, i: 729, }, D { l: 11, t: 0, i: 284, }, D { l: 11, t: 0, i: 445, }, D { l: 11, t: 0, i: 651, }, D { l: 11, t: 0, i: 863, }, D { l: 13, t: 0, i: 398, }, D { l: 146, t: 0, i: 99, }, D { l: 7, t: 0, i: 907 }, D { l: 136, t: 0, i: 832, }, D { l: 9, t: 0, i: 303 }, D { l: 4, t: 10, i: 29 }, D { l: 6, t: 10, i: 532, }, D { l: 7, t: 10, i: 1628, }, D { l: 7, t: 10, i: 1648, }, D { l: 9, t: 10, i: 350, }, D { l: 10, t: 10, i: 433, }, D { l: 11, t: 10, i: 97, }, D { l: 11, t: 10, i: 557, }, D { l: 11, t: 10, i: 745, }, D { l: 12, t: 10, i: 289, }, D { l: 12, t: 10, i: 335, }, D { l: 12, t: 10, i: 348, }, D { l: 12, t: 10, i: 606, }, D { l: 13, t: 10, i: 116, }, D { l: 13, t: 10, i: 233, }, D { l: 13, t: 10, i: 466, }, D { l: 14, t: 10, i: 181, }, D { l: 14, t: 10, i: 209, }, D { l: 14, t: 10, i: 232, }, D { l: 14, t: 10, i: 236, }, D { l: 14, t: 10, i: 300, }, D { l: 16, t: 10, i: 41, }, D { l: 148, t: 10, i: 97, }, D { l: 7, t: 11, i: 423, }, D { l: 7, t: 10, i: 1692, }, D { l: 136, t: 11, i: 588, }, D { l: 6, t: 0, i: 931 }, D { l: 134, t: 0, i: 1454, }, D { l: 5, t: 10, i: 501, }, D { l: 7, t: 10, i: 1704, }, D { l: 9, t: 10, i: 553, }, D { l: 11, t: 10, i: 520, }, D { l: 12, t: 10, i: 557, }, D { l: 141, t: 10, i: 249, }, D { l: 136, t: 11, i: 287, }, D { l: 4, t: 0, i: 562 }, D { l: 9, t: 0, i: 254 }, D { l: 139, t: 0, i: 879, }, D { l: 132, t: 0, i: 786, }, D { l: 14, t: 11, i: 32, }, D { l: 18, t: 11, i: 85, }, D { l: 20, t: 11, i: 2 }, D { l: 152, t: 11, i: 16, }, D { l: 135, t: 0, i: 1294, }, D { l: 7, t: 11, i: 723, }, D { l: 135, t: 11, i: 1135, }, D { l: 6, t: 0, i: 216 }, D { l: 7, t: 0, i: 901 }, D { l: 7, t: 0, i: 1343, }, D { l: 8, t: 0, i: 493 }, D { l: 134, t: 11, i: 403, }, D { l: 7, t: 11, i: 719, }, D { l: 8, t: 11, i: 809, }, D { l: 136, t: 11, i: 834, }, D { l: 5, t: 11, i: 210, }, D { l: 6, t: 11, i: 213, }, D { l: 7, t: 11, i: 60 }, D { l: 10, t: 11, i: 364, }, D { l: 139, t: 11, i: 135, }, D { l: 7, t: 0, i: 341 }, D { l: 11, t: 0, i: 219, }, D { l: 5, t: 11, i: 607, }, D { l: 8, t: 11, i: 326, }, D { l: 136, t: 11, i: 490, }, D { l: 4, t: 11, i: 701, }, D { l: 5, t: 11, i: 472, }, D { l: 5, t: 11, i: 639, }, D { l: 7, t: 11, i: 1249, }, D { l: 9, t: 11, i: 758, }, D { l: 139, t: 11, i: 896, }, D { l: 135, t: 11, i: 380, }, D { l: 135, t: 11, i: 1947, }, D { l: 139, t: 0, i: 130, }, D { l: 135, t: 0, i: 1734, }, D { l: 10, t: 0, i: 115, }, D { l: 11, t: 0, i: 420, }, D { l: 12, t: 0, i: 154, }, D { l: 13, t: 0, i: 404, }, D { l: 14, t: 0, i: 346, }, D { l: 143, t: 0, i: 54, }, D { l: 134, t: 10, i: 129, }, D { l: 4, t: 11, i: 386, }, D { l: 7, t: 11, i: 41 }, D { l: 8, t: 11, i: 405, }, D { l: 9, t: 11, i: 497, }, D { l: 11, t: 11, i: 110, }, D { l: 11, t: 11, i: 360, }, D { l: 15, t: 11, i: 37, }, D { l: 144, t: 11, i: 84, }, D { l: 141, t: 11, i: 282, }, D { l: 5, t: 11, i: 46 }, D { l: 7, t: 11, i: 1452, }, D { l: 7, t: 11, i: 1480, }, D { l: 8, t: 11, i: 634, }, D { l: 140, t: 11, i: 472, }, D { l: 4, t: 11, i: 524, }, D { l: 136, t: 11, i: 810, }, D { l: 10, t: 11, i: 238, }, D { l: 141, t: 11, i: 33, }, D { l: 133, t: 0, i: 604, }, D { l: 5, t: 0, i: 1011, }, D { l: 136, t: 0, i: 701, }, D { l: 8, t: 0, i: 856 }, D { l: 8, t: 0, i: 858 }, D { l: 8, t: 0, i: 879 }, D { l: 12, t: 0, i: 702, }, D { l: 142, t: 0, i: 447, }, D { l: 4, t: 0, i: 54 }, D { l: 5, t: 0, i: 666 }, D { l: 7, t: 0, i: 1039, }, D { l: 7, t: 0, i: 1130, }, D { l: 9, t: 0, i: 195 }, D { l: 138, t: 0, i: 302, }, D { l: 4, t: 10, i: 25 }, D { l: 5, t: 10, i: 60 }, D { l: 6, t: 10, i: 504, }, D { l: 7, t: 10, i: 614, }, D { l: 7, t: 10, i: 1155, }, D { l: 140, t: 10, i: 0, }, D { l: 7, t: 10, i: 1248, }, D { l: 11, t: 10, i: 621, }, D { l: 139, t: 10, i: 702, }, D { l: 133, t: 11, i: 997, }, D { l: 137, t: 10, i: 321, }, D { l: 134, t: 0, i: 1669, }, D { l: 134, t: 0, i: 1791, }, D { l: 4, t: 10, i: 379, }, D { l: 135, t: 10, i: 1397, }, D { l: 138, t: 11, i: 372, }, D { l: 5, t: 11, i: 782, }, D { l: 5, t: 11, i: 829, }, D { l: 134, t: 11, i: 1738, }, D { l: 135, t: 0, i: 1228, }, D { l: 4, t: 10, i: 118, }, D { l: 6, t: 10, i: 274, }, D { l: 6, t: 10, i: 361, }, D { l: 7, t: 10, i: 75 }, D { l: 141, t: 10, i: 441, }, D { l: 132, t: 0, i: 623, }, D { l: 9, t: 11, i: 279, }, D { l: 10, t: 11, i: 407, }, D { l: 14, t: 11, i: 84, }, D { l: 150, t: 11, i: 18, }, D { l: 137, t: 10, i: 841, }, D { l: 135, t: 0, i: 798, }, D { l: 140, t: 10, i: 693, }, D { l: 5, t: 10, i: 314, }, D { l: 6, t: 10, i: 221, }, D { l: 7, t: 10, i: 419, }, D { l: 10, t: 10, i: 650, }, D { l: 11, t: 10, i: 396, }, D { l: 12, t: 10, i: 156, }, D { l: 13, t: 10, i: 369, }, D { l: 14, t: 10, i: 333, }, D { l: 145, t: 10, i: 47, }, D { l: 135, t: 11, i: 1372, }, D { l: 7, t: 0, i: 122 }, D { l: 9, t: 0, i: 259 }, D { l: 10, t: 0, i: 84 }, D { l: 11, t: 0, i: 470, }, D { l: 12, t: 0, i: 541, }, D { l: 141, t: 0, i: 379, }, D { l: 134, t: 0, i: 837, }, D { l: 8, t: 0, i: 1013, }, D { l: 4, t: 11, i: 78 }, D { l: 5, t: 11, i: 96 }, D { l: 5, t: 11, i: 182, }, D { l: 7, t: 11, i: 1724, }, D { l: 7, t: 11, i: 1825, }, D { l: 10, t: 11, i: 394, }, D { l: 10, t: 11, i: 471, }, D { l: 11, t: 11, i: 532, }, D { l: 14, t: 11, i: 340, }, D { l: 145, t: 11, i: 88, }, D { l: 134, t: 0, i: 577, }, D { l: 135, t: 11, i: 1964, }, D { l: 132, t: 10, i: 913, }, D { l: 134, t: 0, i: 460, }, D { l: 8, t: 0, i: 891 }, D { l: 10, t: 0, i: 901, }, D { l: 10, t: 0, i: 919, }, D { l: 10, t: 0, i: 932, }, D { l: 12, t: 0, i: 715, }, D { l: 12, t: 0, i: 728, }, D { l: 12, t: 0, i: 777, }, D { l: 14, t: 0, i: 457, }, D { l: 144, t: 0, i: 103, }, D { l: 5, t: 0, i: 82 }, D { l: 5, t: 0, i: 131 }, D { l: 7, t: 0, i: 1755, }, D { l: 8, t: 0, i: 31 }, D { l: 9, t: 0, i: 168 }, D { l: 9, t: 0, i: 764 }, D { l: 139, t: 0, i: 869, }, D { l: 136, t: 10, i: 475, }, D { l: 6, t: 0, i: 605 }, D { l: 5, t: 10, i: 1016, }, D { l: 9, t: 11, i: 601, }, D { l: 9, t: 11, i: 619, }, D { l: 10, t: 11, i: 505, }, D { l: 10, t: 11, i: 732, }, D { l: 11, t: 11, i: 355, }, D { l: 140, t: 11, i: 139, }, D { l: 7, t: 10, i: 602, }, D { l: 8, t: 10, i: 179, }, D { l: 10, t: 10, i: 781, }, D { l: 140, t: 10, i: 126, }, D { l: 134, t: 0, i: 1246, }, D { l: 6, t: 10, i: 329, }, D { l: 138, t: 10, i: 111, }, D { l: 6, t: 11, i: 215, }, D { l: 7, t: 11, i: 1028, }, D { l: 7, t: 11, i: 1473, }, D { l: 7, t: 11, i: 1721, }, D { l: 9, t: 11, i: 424, }, D { l: 138, t: 11, i: 779, }, D { l: 5, t: 0, i: 278 }, D { l: 137, t: 0, i: 68, }, D { l: 6, t: 0, i: 932 }, D { l: 6, t: 0, i: 1084, }, D { l: 144, t: 0, i: 86, }, D { l: 4, t: 0, i: 163 }, D { l: 5, t: 0, i: 201 }, D { l: 5, t: 0, i: 307 }, D { l: 5, t: 0, i: 310 }, D { l: 6, t: 0, i: 335 }, D { l: 7, t: 0, i: 284 }, D { l: 7, t: 0, i: 1660, }, D { l: 136, t: 0, i: 165, }, D { l: 136, t: 0, i: 781, }, D { l: 134, t: 0, i: 707, }, D { l: 6, t: 0, i: 33 }, D { l: 135, t: 0, i: 1244, }, D { l: 5, t: 10, i: 821, }, D { l: 6, t: 11, i: 67 }, D { l: 6, t: 10, i: 1687, }, D { l: 7, t: 11, i: 258, }, D { l: 7, t: 11, i: 1630, }, D { l: 9, t: 11, i: 354, }, D { l: 9, t: 11, i: 675, }, D { l: 10, t: 11, i: 830, }, D { l: 14, t: 11, i: 80, }, D { l: 145, t: 11, i: 80, }, D { l: 6, t: 11, i: 141, }, D { l: 7, t: 11, i: 225, }, D { l: 9, t: 11, i: 59 }, D { l: 9, t: 11, i: 607, }, D { l: 10, t: 11, i: 312, }, D { l: 11, t: 11, i: 687, }, D { l: 12, t: 11, i: 555, }, D { l: 13, t: 11, i: 373, }, D { l: 13, t: 11, i: 494, }, D { l: 148, t: 11, i: 58, }, D { l: 134, t: 0, i: 1113, }, D { l: 9, t: 0, i: 388 }, D { l: 5, t: 10, i: 71 }, D { l: 7, t: 10, i: 1407, }, D { l: 9, t: 10, i: 704, }, D { l: 10, t: 10, i: 261, }, D { l: 10, t: 10, i: 619, }, D { l: 11, t: 10, i: 547, }, D { l: 11, t: 10, i: 619, }, D { l: 143, t: 10, i: 157, }, D { l: 7, t: 0, i: 1953, }, D { l: 136, t: 0, i: 720, }, D { l: 138, t: 0, i: 203, }, D { l: 7, t: 10, i: 2008, }, D { l: 9, t: 10, i: 337, }, D { l: 138, t: 10, i: 517, }, D { l: 6, t: 0, i: 326 }, D { l: 7, t: 0, i: 677 }, D { l: 137, t: 0, i: 425, }, D { l: 139, t: 11, i: 81, }, D { l: 7, t: 0, i: 1316, }, D { l: 7, t: 0, i: 1412, }, D { l: 7, t: 0, i: 1839, }, D { l: 9, t: 0, i: 589 }, D { l: 11, t: 0, i: 241, }, D { l: 11, t: 0, i: 676, }, D { l: 11, t: 0, i: 811, }, D { l: 11, t: 0, i: 891, }, D { l: 12, t: 0, i: 140, }, D { l: 12, t: 0, i: 346, }, D { l: 12, t: 0, i: 479, }, D { l: 13, t: 0, i: 140, }, D { l: 13, t: 0, i: 381, }, D { l: 14, t: 0, i: 188, }, D { l: 18, t: 0, i: 30 }, D { l: 148, t: 0, i: 108, }, D { l: 5, t: 0, i: 416 }, D { l: 6, t: 10, i: 86 }, D { l: 6, t: 10, i: 603, }, D { l: 7, t: 10, i: 292, }, D { l: 7, t: 10, i: 561, }, D { l: 8, t: 10, i: 257, }, D { l: 8, t: 10, i: 382, }, D { l: 9, t: 10, i: 721, }, D { l: 9, t: 10, i: 778, }, D { l: 11, t: 10, i: 581, }, D { l: 140, t: 10, i: 466, }, D { l: 4, t: 10, i: 486, }, D { l: 133, t: 10, i: 491, }, D { l: 134, t: 0, i: 1300, }, D { l: 132, t: 10, i: 72, }, D { l: 7, t: 0, i: 847 }, D { l: 6, t: 10, i: 265, }, D { l: 7, t: 11, i: 430, }, D { l: 139, t: 11, i: 46, }, D { l: 5, t: 11, i: 602, }, D { l: 6, t: 11, i: 106, }, D { l: 7, t: 11, i: 1786, }, D { l: 7, t: 11, i: 1821, }, D { l: 7, t: 11, i: 2018, }, D { l: 9, t: 11, i: 418, }, D { l: 137, t: 11, i: 763, }, D { l: 5, t: 0, i: 358 }, D { l: 7, t: 0, i: 535 }, D { l: 7, t: 0, i: 1184, }, D { l: 10, t: 0, i: 662, }, D { l: 13, t: 0, i: 212, }, D { l: 13, t: 0, i: 304, }, D { l: 13, t: 0, i: 333, }, D { l: 145, t: 0, i: 98, }, D { l: 5, t: 11, i: 65 }, D { l: 6, t: 11, i: 416, }, D { l: 7, t: 11, i: 1720, }, D { l: 7, t: 11, i: 1924, }, D { l: 8, t: 11, i: 677, }, D { l: 10, t: 11, i: 109, }, D { l: 11, t: 11, i: 14, }, D { l: 11, t: 11, i: 70, }, D { l: 11, t: 11, i: 569, }, D { l: 11, t: 11, i: 735, }, D { l: 15, t: 11, i: 153, }, D { l: 148, t: 11, i: 80, }, D { l: 6, t: 0, i: 1823, }, D { l: 8, t: 0, i: 839 }, D { l: 8, t: 0, i: 852 }, D { l: 8, t: 0, i: 903 }, D { l: 10, t: 0, i: 940, }, D { l: 12, t: 0, i: 707, }, D { l: 140, t: 0, i: 775, }, D { l: 135, t: 11, i: 1229, }, D { l: 6, t: 0, i: 1522, }, D { l: 140, t: 0, i: 654, }, D { l: 136, t: 11, i: 595, }, D { l: 139, t: 0, i: 163, }, D { l: 141, t: 0, i: 314, }, D { l: 132, t: 0, i: 978, }, D { l: 4, t: 0, i: 601 }, D { l: 6, t: 0, i: 2035, }, D { l: 137, t: 10, i: 234, }, D { l: 5, t: 10, i: 815, }, D { l: 6, t: 10, i: 1688, }, D { l: 134, t: 10, i: 1755, }, D { l: 133, t: 0, i: 946, }, D { l: 136, t: 0, i: 434, }, D { l: 6, t: 10, i: 197, }, D { l: 136, t: 10, i: 205, }, D { l: 7, t: 0, i: 411 }, D { l: 7, t: 0, i: 590 }, D { l: 8, t: 0, i: 631 }, D { l: 9, t: 0, i: 323 }, D { l: 10, t: 0, i: 355, }, D { l: 11, t: 0, i: 491, }, D { l: 12, t: 0, i: 143, }, D { l: 12, t: 0, i: 402, }, D { l: 13, t: 0, i: 73 }, D { l: 14, t: 0, i: 408, }, D { l: 15, t: 0, i: 107, }, D { l: 146, t: 0, i: 71, }, D { l: 7, t: 0, i: 1467, }, D { l: 8, t: 0, i: 328 }, D { l: 10, t: 0, i: 544, }, D { l: 11, t: 0, i: 955, }, D { l: 12, t: 0, i: 13 }, D { l: 13, t: 0, i: 320, }, D { l: 145, t: 0, i: 83, }, D { l: 142, t: 0, i: 410, }, D { l: 11, t: 0, i: 511, }, D { l: 13, t: 0, i: 394, }, D { l: 14, t: 0, i: 298, }, D { l: 14, t: 0, i: 318, }, D { l: 146, t: 0, i: 103, }, D { l: 6, t: 10, i: 452, }, D { l: 7, t: 10, i: 312, }, D { l: 138, t: 10, i: 219, }, D { l: 138, t: 10, i: 589, }, D { l: 4, t: 10, i: 333, }, D { l: 9, t: 10, i: 176, }, D { l: 12, t: 10, i: 353, }, D { l: 141, t: 10, i: 187, }, D { l: 135, t: 11, i: 329, }, D { l: 132, t: 11, i: 469, }, D { l: 5, t: 0, i: 835 }, D { l: 134, t: 0, i: 483, }, D { l: 134, t: 11, i: 1743, }, D { l: 5, t: 11, i: 929, }, D { l: 6, t: 11, i: 340, }, D { l: 8, t: 11, i: 376, }, D { l: 136, t: 11, i: 807, }, D { l: 134, t: 10, i: 1685, }, D { l: 132, t: 0, i: 677, }, D { l: 5, t: 11, i: 218, }, D { l: 7, t: 11, i: 1610, }, D { l: 138, t: 11, i: 83, }, D { l: 5, t: 11, i: 571, }, D { l: 135, t: 11, i: 1842, }, D { l: 132, t: 11, i: 455, }, D { l: 137, t: 0, i: 70, }, D { l: 135, t: 0, i: 1405, }, D { l: 7, t: 10, i: 135, }, D { l: 8, t: 10, i: 7 }, D { l: 8, t: 10, i: 62 }, D { l: 9, t: 10, i: 243, }, D { l: 10, t: 10, i: 658, }, D { l: 10, t: 10, i: 697, }, D { l: 11, t: 10, i: 456, }, D { l: 139, t: 10, i: 756, }, D { l: 9, t: 10, i: 395, }, D { l: 138, t: 10, i: 79, }, D { l: 137, t: 0, i: 108, }, D { l: 6, t: 11, i: 161, }, D { l: 7, t: 11, i: 372, }, D { l: 137, t: 11, i: 597, }, D { l: 132, t: 11, i: 349, }, D { l: 132, t: 0, i: 777, }, D { l: 132, t: 0, i: 331, }, D { l: 135, t: 10, i: 631, }, D { l: 133, t: 0, i: 747, }, D { l: 6, t: 11, i: 432, }, D { l: 6, t: 11, i: 608, }, D { l: 139, t: 11, i: 322, }, D { l: 138, t: 10, i: 835, }, D { l: 5, t: 11, i: 468, }, D { l: 7, t: 11, i: 1809, }, D { l: 10, t: 11, i: 325, }, D { l: 11, t: 11, i: 856, }, D { l: 12, t: 11, i: 345, }, D { l: 143, t: 11, i: 104, }, D { l: 133, t: 11, i: 223, }, D { l: 7, t: 10, i: 406, }, D { l: 7, t: 10, i: 459, }, D { l: 8, t: 10, i: 606, }, D { l: 139, t: 10, i: 726, }, D { l: 132, t: 11, i: 566, }, D { l: 142, t: 0, i: 68, }, D { l: 4, t: 11, i: 59 }, D { l: 135, t: 11, i: 1394, }, D { l: 6, t: 11, i: 436, }, D { l: 139, t: 11, i: 481, }, D { l: 4, t: 11, i: 48 }, D { l: 5, t: 11, i: 271, }, D { l: 135, t: 11, i: 953, }, D { l: 139, t: 11, i: 170, }, D { l: 5, t: 11, i: 610, }, D { l: 136, t: 11, i: 457, }, D { l: 133, t: 11, i: 755, }, D { l: 135, t: 11, i: 1217, }, D { l: 133, t: 10, i: 612, }, D { l: 132, t: 11, i: 197, }, D { l: 132, t: 0, i: 505, }, D { l: 4, t: 10, i: 372, }, D { l: 7, t: 10, i: 482, }, D { l: 8, t: 10, i: 158, }, D { l: 9, t: 10, i: 602, }, D { l: 9, t: 10, i: 615, }, D { l: 10, t: 10, i: 245, }, D { l: 10, t: 10, i: 678, }, D { l: 10, t: 10, i: 744, }, D { l: 11, t: 10, i: 248, }, D { l: 139, t: 10, i: 806, }, D { l: 133, t: 0, i: 326, }, D { l: 5, t: 10, i: 854, }, D { l: 135, t: 10, i: 1991, }, D { l: 4, t: 0, i: 691 }, D { l: 146, t: 0, i: 16, }, D { l: 6, t: 0, i: 628 }, D { l: 9, t: 0, i: 35 }, D { l: 10, t: 0, i: 680, }, D { l: 10, t: 0, i: 793, }, D { l: 11, t: 0, i: 364, }, D { l: 13, t: 0, i: 357, }, D { l: 143, t: 0, i: 164, }, D { l: 138, t: 0, i: 654, }, D { l: 6, t: 0, i: 32 }, D { l: 7, t: 0, i: 385 }, D { l: 7, t: 0, i: 757 }, D { l: 7, t: 0, i: 1916, }, D { l: 8, t: 0, i: 37 }, D { l: 8, t: 0, i: 94 }, D { l: 8, t: 0, i: 711 }, D { l: 9, t: 0, i: 541 }, D { l: 10, t: 0, i: 162, }, D { l: 10, t: 0, i: 795, }, D { l: 11, t: 0, i: 989, }, D { l: 11, t: 0, i: 1010, }, D { l: 12, t: 0, i: 14 }, D { l: 142, t: 0, i: 308, }, D { l: 133, t: 11, i: 217, }, D { l: 6, t: 0, i: 152 }, D { l: 6, t: 0, i: 349 }, D { l: 6, t: 0, i: 1682, }, D { l: 7, t: 0, i: 1252, }, D { l: 8, t: 0, i: 112 }, D { l: 9, t: 0, i: 435 }, D { l: 9, t: 0, i: 668 }, D { l: 10, t: 0, i: 290, }, D { l: 10, t: 0, i: 319, }, D { l: 10, t: 0, i: 815, }, D { l: 11, t: 0, i: 180, }, D { l: 11, t: 0, i: 837, }, D { l: 12, t: 0, i: 240, }, D { l: 13, t: 0, i: 152, }, D { l: 13, t: 0, i: 219, }, D { l: 142, t: 0, i: 158, }, D { l: 4, t: 0, i: 581 }, D { l: 134, t: 0, i: 726, }, D { l: 5, t: 10, i: 195, }, D { l: 135, t: 10, i: 1685, }, D { l: 6, t: 0, i: 126 }, D { l: 7, t: 0, i: 573 }, D { l: 8, t: 0, i: 397 }, D { l: 142, t: 0, i: 44, }, D { l: 138, t: 0, i: 89, }, D { l: 7, t: 10, i: 1997, }, D { l: 8, t: 10, i: 730, }, D { l: 139, t: 10, i: 1006, }, D { l: 134, t: 0, i: 1531, }, D { l: 134, t: 0, i: 1167, }, D { l: 5, t: 0, i: 926 }, D { l: 12, t: 0, i: 203, }, D { l: 133, t: 10, i: 751, }, D { l: 4, t: 11, i: 165, }, D { l: 7, t: 11, i: 1398, }, D { l: 135, t: 11, i: 1829, }, D { l: 7, t: 0, i: 1232, }, D { l: 137, t: 0, i: 531, }, D { l: 135, t: 10, i: 821, }, D { l: 134, t: 0, i: 943, }, D { l: 133, t: 0, i: 670, }, D { l: 4, t: 0, i: 880 }, D { l: 139, t: 0, i: 231, }, D { l: 134, t: 0, i: 1617, }, D { l: 135, t: 0, i: 1957, }, D { l: 5, t: 11, i: 9 }, D { l: 7, t: 11, i: 297, }, D { l: 7, t: 11, i: 966, }, D { l: 140, t: 11, i: 306, }, D { l: 6, t: 0, i: 975 }, D { l: 134, t: 0, i: 985, }, D { l: 5, t: 10, i: 950, }, D { l: 5, t: 10, i: 994, }, D { l: 134, t: 10, i: 351, }, D { l: 12, t: 11, i: 21, }, D { l: 151, t: 11, i: 7, }, D { l: 5, t: 11, i: 146, }, D { l: 6, t: 11, i: 411, }, D { l: 138, t: 11, i: 721, }, D { l: 7, t: 0, i: 242 }, D { l: 135, t: 0, i: 1942, }, D { l: 6, t: 11, i: 177, }, D { l: 135, t: 11, i: 467, }, D { l: 5, t: 0, i: 421 }, D { l: 7, t: 10, i: 47 }, D { l: 137, t: 10, i: 684, }, D { l: 5, t: 0, i: 834 }, D { l: 7, t: 0, i: 1202, }, D { l: 8, t: 0, i: 14 }, D { l: 9, t: 0, i: 481 }, D { l: 137, t: 0, i: 880, }, D { l: 138, t: 0, i: 465, }, D { l: 6, t: 0, i: 688 }, D { l: 9, t: 0, i: 834 }, D { l: 132, t: 10, i: 350, }, D { l: 132, t: 0, i: 855, }, D { l: 4, t: 0, i: 357 }, D { l: 6, t: 0, i: 172 }, D { l: 7, t: 0, i: 143 }, D { l: 137, t: 0, i: 413, }, D { l: 133, t: 11, i: 200, }, D { l: 132, t: 0, i: 590, }, D { l: 7, t: 10, i: 1812, }, D { l: 13, t: 10, i: 259, }, D { l: 13, t: 10, i: 356, }, D { l: 14, t: 10, i: 242, }, D { l: 147, t: 10, i: 114, }, D { l: 133, t: 10, i: 967, }, D { l: 11, t: 0, i: 114, }, D { l: 4, t: 10, i: 473, }, D { l: 7, t: 10, i: 623, }, D { l: 8, t: 10, i: 808, }, D { l: 9, t: 10, i: 871, }, D { l: 9, t: 10, i: 893, }, D { l: 11, t: 10, i: 431, }, D { l: 12, t: 10, i: 112, }, D { l: 12, t: 10, i: 217, }, D { l: 12, t: 10, i: 243, }, D { l: 12, t: 10, i: 562, }, D { l: 12, t: 10, i: 663, }, D { l: 12, t: 10, i: 683, }, D { l: 13, t: 10, i: 141, }, D { l: 13, t: 10, i: 197, }, D { l: 13, t: 10, i: 227, }, D { l: 13, t: 10, i: 406, }, D { l: 13, t: 10, i: 487, }, D { l: 14, t: 10, i: 156, }, D { l: 14, t: 10, i: 203, }, D { l: 14, t: 10, i: 224, }, D { l: 14, t: 10, i: 256, }, D { l: 18, t: 10, i: 58, }, D { l: 150, t: 10, i: 0, }, D { l: 138, t: 10, i: 286, }, D { l: 4, t: 10, i: 222, }, D { l: 7, t: 10, i: 286, }, D { l: 136, t: 10, i: 629, }, D { l: 5, t: 0, i: 169 }, D { l: 7, t: 0, i: 333 }, D { l: 136, t: 0, i: 45, }, D { l: 134, t: 11, i: 481, }, D { l: 132, t: 0, i: 198, }, D { l: 4, t: 0, i: 24 }, D { l: 5, t: 0, i: 140 }, D { l: 5, t: 0, i: 185 }, D { l: 7, t: 0, i: 1500, }, D { l: 11, t: 0, i: 565, }, D { l: 11, t: 0, i: 838, }, D { l: 4, t: 11, i: 84 }, D { l: 7, t: 11, i: 1482, }, D { l: 10, t: 11, i: 76, }, D { l: 138, t: 11, i: 142, }, D { l: 133, t: 0, i: 585, }, D { l: 141, t: 10, i: 306, }, D { l: 133, t: 11, i: 1015, }, D { l: 4, t: 11, i: 315, }, D { l: 5, t: 11, i: 507, }, D { l: 135, t: 11, i: 1370, }, D { l: 136, t: 10, i: 146, }, D { l: 6, t: 0, i: 691 }, D { l: 134, t: 0, i: 1503, }, D { l: 4, t: 0, i: 334 }, D { l: 133, t: 0, i: 593, }, D { l: 4, t: 10, i: 465, }, D { l: 135, t: 10, i: 1663, }, D { l: 142, t: 11, i: 173, }, D { l: 135, t: 0, i: 913, }, D { l: 12, t: 0, i: 116, }, D { l: 134, t: 11, i: 1722, }, D { l: 134, t: 0, i: 1360, }, D { l: 132, t: 0, i: 802, }, D { l: 8, t: 11, i: 222, }, D { l: 8, t: 11, i: 476, }, D { l: 9, t: 11, i: 238, }, D { l: 11, t: 11, i: 516, }, D { l: 11, t: 11, i: 575, }, D { l: 15, t: 11, i: 109, }, D { l: 146, t: 11, i: 100, }, D { l: 6, t: 0, i: 308 }, D { l: 9, t: 0, i: 673 }, D { l: 7, t: 10, i: 138, }, D { l: 7, t: 10, i: 517, }, D { l: 139, t: 10, i: 238, }, D { l: 132, t: 0, i: 709, }, D { l: 6, t: 0, i: 1876, }, D { l: 6, t: 0, i: 1895, }, D { l: 9, t: 0, i: 994 }, D { l: 9, t: 0, i: 1006, }, D { l: 12, t: 0, i: 829, }, D { l: 12, t: 0, i: 888, }, D { l: 12, t: 0, i: 891, }, D { l: 146, t: 0, i: 185, }, D { l: 148, t: 10, i: 94, }, D { l: 4, t: 0, i: 228 }, D { l: 133, t: 0, i: 897, }, D { l: 7, t: 0, i: 1840, }, D { l: 5, t: 10, i: 495, }, D { l: 7, t: 10, i: 834, }, D { l: 9, t: 10, i: 733, }, D { l: 139, t: 10, i: 378, }, D { l: 133, t: 10, i: 559, }, D { l: 6, t: 10, i: 21 }, D { l: 6, t: 10, i: 1737, }, D { l: 7, t: 10, i: 1444, }, D { l: 136, t: 10, i: 224, }, D { l: 4, t: 0, i: 608 }, D { l: 133, t: 0, i: 497, }, D { l: 6, t: 11, i: 40 }, D { l: 135, t: 11, i: 1781, }, D { l: 134, t: 0, i: 1573, }, D { l: 135, t: 0, i: 2039, }, D { l: 6, t: 0, i: 540 }, D { l: 136, t: 0, i: 136, }, D { l: 4, t: 0, i: 897 }, D { l: 5, t: 0, i: 786 }, D { l: 133, t: 10, i: 519, }, D { l: 6, t: 0, i: 1878, }, D { l: 6, t: 0, i: 1884, }, D { l: 9, t: 0, i: 938 }, D { l: 9, t: 0, i: 948 }, D { l: 9, t: 0, i: 955 }, D { l: 9, t: 0, i: 973 }, D { l: 9, t: 0, i: 1012, }, D { l: 12, t: 0, i: 895, }, D { l: 12, t: 0, i: 927, }, D { l: 143, t: 0, i: 254, }, D { l: 134, t: 0, i: 1469, }, D { l: 133, t: 0, i: 999, }, D { l: 4, t: 0, i: 299 }, D { l: 135, t: 0, i: 1004, }, D { l: 4, t: 0, i: 745 }, D { l: 133, t: 0, i: 578, }, D { l: 136, t: 11, i: 574, }, D { l: 133, t: 0, i: 456, }, D { l: 134, t: 0, i: 1457, }, D { l: 7, t: 0, i: 1679, }, D { l: 132, t: 10, i: 402, }, D { l: 7, t: 0, i: 693 }, D { l: 8, t: 0, i: 180 }, D { l: 12, t: 0, i: 163, }, D { l: 8, t: 10, i: 323, }, D { l: 136, t: 10, i: 479, }, D { l: 11, t: 10, i: 580, }, D { l: 142, t: 10, i: 201, }, D { l: 5, t: 10, i: 59 }, D { l: 135, t: 10, i: 672, }, D { l: 132, t: 11, i: 354, }, D { l: 146, t: 10, i: 34, }, D { l: 4, t: 0, i: 755 }, D { l: 135, t: 11, i: 1558, }, D { l: 7, t: 0, i: 1740, }, D { l: 146, t: 0, i: 48, }, D { l: 4, t: 10, i: 85 }, D { l: 135, t: 10, i: 549, }, D { l: 139, t: 0, i: 338, }, D { l: 133, t: 10, i: 94, }, D { l: 134, t: 0, i: 1091, }, D { l: 135, t: 11, i: 469, }, D { l: 12, t: 0, i: 695, }, D { l: 12, t: 0, i: 704, }, D { l: 20, t: 0, i: 113, }, D { l: 5, t: 11, i: 830, }, D { l: 14, t: 11, i: 338, }, D { l: 148, t: 11, i: 81, }, D { l: 135, t: 0, i: 1464, }, D { l: 6, t: 10, i: 11 }, D { l: 135, t: 10, i: 187, }, D { l: 135, t: 0, i: 975, }, D { l: 13, t: 0, i: 335, }, D { l: 132, t: 10, i: 522, }, D { l: 134, t: 0, i: 1979, }, D { l: 5, t: 11, i: 496, }, D { l: 135, t: 11, i: 203, }, D { l: 4, t: 10, i: 52 }, D { l: 135, t: 10, i: 661, }, D { l: 7, t: 0, i: 1566, }, D { l: 8, t: 0, i: 269 }, D { l: 9, t: 0, i: 212 }, D { l: 9, t: 0, i: 718 }, D { l: 14, t: 0, i: 15 }, D { l: 14, t: 0, i: 132, }, D { l: 142, t: 0, i: 227, }, D { l: 4, t: 0, i: 890 }, D { l: 5, t: 0, i: 805 }, D { l: 5, t: 0, i: 819 }, D { l: 5, t: 0, i: 961 }, D { l: 6, t: 0, i: 396 }, D { l: 6, t: 0, i: 1631, }, D { l: 6, t: 0, i: 1678, }, D { l: 7, t: 0, i: 1967, }, D { l: 7, t: 0, i: 2041, }, D { l: 9, t: 0, i: 630 }, D { l: 11, t: 0, i: 8 }, D { l: 11, t: 0, i: 1019, }, D { l: 12, t: 0, i: 176, }, D { l: 13, t: 0, i: 225, }, D { l: 14, t: 0, i: 292, }, D { l: 21, t: 0, i: 24 }, D { l: 4, t: 10, i: 383, }, D { l: 133, t: 10, i: 520, }, D { l: 134, t: 11, i: 547, }, D { l: 135, t: 11, i: 1748, }, D { l: 5, t: 11, i: 88 }, D { l: 137, t: 11, i: 239, }, D { l: 146, t: 11, i: 128, }, D { l: 7, t: 11, i: 650, }, D { l: 135, t: 11, i: 1310, }, D { l: 4, t: 10, i: 281, }, D { l: 5, t: 10, i: 38 }, D { l: 7, t: 10, i: 194, }, D { l: 7, t: 10, i: 668, }, D { l: 7, t: 10, i: 1893, }, D { l: 137, t: 10, i: 397, }, D { l: 135, t: 0, i: 1815, }, D { l: 9, t: 10, i: 635, }, D { l: 139, t: 10, i: 559, }, D { l: 7, t: 0, i: 1505, }, D { l: 10, t: 0, i: 190, }, D { l: 10, t: 0, i: 634, }, D { l: 11, t: 0, i: 792, }, D { l: 12, t: 0, i: 358, }, D { l: 140, t: 0, i: 447, }, D { l: 5, t: 0, i: 0 }, D { l: 6, t: 0, i: 536 }, D { l: 7, t: 0, i: 604 }, D { l: 13, t: 0, i: 445, }, D { l: 145, t: 0, i: 126, }, D { l: 7, t: 11, i: 1076, }, D { l: 9, t: 11, i: 80 }, D { l: 11, t: 11, i: 78, }, D { l: 11, t: 11, i: 421, }, D { l: 11, t: 11, i: 534, }, D { l: 140, t: 11, i: 545, }, D { l: 8, t: 0, i: 966 }, D { l: 10, t: 0, i: 1023, }, D { l: 14, t: 11, i: 369, }, D { l: 146, t: 11, i: 72, }, D { l: 135, t: 11, i: 1641, }, D { l: 6, t: 0, i: 232 }, D { l: 6, t: 0, i: 412 }, D { l: 7, t: 0, i: 1074, }, D { l: 8, t: 0, i: 9 }, D { l: 8, t: 0, i: 157 }, D { l: 8, t: 0, i: 786 }, D { l: 9, t: 0, i: 196 }, D { l: 9, t: 0, i: 352 }, D { l: 9, t: 0, i: 457 }, D { l: 10, t: 0, i: 337, }, D { l: 11, t: 0, i: 232, }, D { l: 11, t: 0, i: 877, }, D { l: 12, t: 0, i: 480, }, D { l: 140, t: 0, i: 546, }, D { l: 135, t: 0, i: 958, }, D { l: 4, t: 0, i: 382 }, D { l: 136, t: 0, i: 579, }, D { l: 4, t: 0, i: 212 }, D { l: 135, t: 0, i: 1206, }, D { l: 4, t: 11, i: 497, }, D { l: 5, t: 11, i: 657, }, D { l: 135, t: 11, i: 1584, }, D { l: 132, t: 0, i: 681, }, D { l: 8, t: 0, i: 971 }, D { l: 138, t: 0, i: 965, }, D { l: 5, t: 10, i: 448, }, D { l: 136, t: 10, i: 535, }, D { l: 14, t: 0, i: 16 }, D { l: 146, t: 0, i: 44, }, D { l: 11, t: 0, i: 584, }, D { l: 11, t: 0, i: 616, }, D { l: 14, t: 0, i: 275, }, D { l: 11, t: 11, i: 584, }, D { l: 11, t: 11, i: 616, }, D { l: 142, t: 11, i: 275, }, D { l: 136, t: 11, i: 13, }, D { l: 7, t: 10, i: 610, }, D { l: 135, t: 10, i: 1501, }, D { l: 7, t: 11, i: 642, }, D { l: 8, t: 11, i: 250, }, D { l: 11, t: 11, i: 123, }, D { l: 11, t: 11, i: 137, }, D { l: 13, t: 11, i: 48, }, D { l: 142, t: 11, i: 95, }, D { l: 133, t: 0, i: 655, }, D { l: 17, t: 0, i: 67 }, D { l: 147, t: 0, i: 74, }, D { l: 134, t: 0, i: 751, }, D { l: 134, t: 0, i: 1967, }, D { l: 6, t: 0, i: 231 }, D { l: 136, t: 0, i: 423, }, D { l: 5, t: 0, i: 300 }, D { l: 138, t: 0, i: 1016, }, D { l: 4, t: 10, i: 319, }, D { l: 5, t: 10, i: 699, }, D { l: 138, t: 10, i: 673, }, D { l: 6, t: 0, i: 237 }, D { l: 7, t: 0, i: 611 }, D { l: 8, t: 0, i: 100 }, D { l: 9, t: 0, i: 416 }, D { l: 11, t: 0, i: 335, }, D { l: 12, t: 0, i: 173, }, D { l: 18, t: 0, i: 101, }, D { l: 6, t: 10, i: 336, }, D { l: 8, t: 10, i: 552, }, D { l: 9, t: 10, i: 285, }, D { l: 10, t: 10, i: 99, }, D { l: 139, t: 10, i: 568, }, D { l: 134, t: 0, i: 1370, }, D { l: 7, t: 10, i: 1406, }, D { l: 9, t: 10, i: 218, }, D { l: 141, t: 10, i: 222, }, D { l: 133, t: 10, i: 256, }, D { l: 135, t: 0, i: 1208, }, D { l: 14, t: 11, i: 213, }, D { l: 148, t: 11, i: 38, }, D { l: 6, t: 0, i: 1219, }, D { l: 135, t: 11, i: 1642, }, D { l: 13, t: 0, i: 417, }, D { l: 14, t: 0, i: 129, }, D { l: 143, t: 0, i: 15, }, D { l: 10, t: 11, i: 545, }, D { l: 140, t: 11, i: 301, }, D { l: 17, t: 10, i: 39, }, D { l: 148, t: 10, i: 36, }, D { l: 133, t: 0, i: 199, }, D { l: 4, t: 11, i: 904, }, D { l: 133, t: 11, i: 794, }, D { l: 12, t: 0, i: 427, }, D { l: 146, t: 0, i: 38, }, D { l: 134, t: 0, i: 949, }, D { l: 8, t: 0, i: 665 }, D { l: 135, t: 10, i: 634, }, D { l: 132, t: 10, i: 618, }, D { l: 135, t: 10, i: 259, }, D { l: 132, t: 10, i: 339, }, D { l: 133, t: 11, i: 761, }, D { l: 141, t: 10, i: 169, }, D { l: 132, t: 10, i: 759, }, D { l: 5, t: 0, i: 688 }, D { l: 7, t: 0, i: 539 }, D { l: 135, t: 0, i: 712, }, D { l: 7, t: 11, i: 386, }, D { l: 138, t: 11, i: 713, }, D { l: 134, t: 0, i: 1186, }, D { l: 6, t: 11, i: 7 }, D { l: 6, t: 11, i: 35 }, D { l: 7, t: 11, i: 147, }, D { l: 7, t: 11, i: 1069, }, D { l: 7, t: 11, i: 1568, }, D { l: 7, t: 11, i: 1575, }, D { l: 7, t: 11, i: 1917, }, D { l: 8, t: 11, i: 43 }, D { l: 8, t: 11, i: 208, }, D { l: 9, t: 11, i: 128, }, D { l: 9, t: 11, i: 866, }, D { l: 10, t: 11, i: 20, }, D { l: 11, t: 11, i: 981, }, D { l: 147, t: 11, i: 33, }, D { l: 7, t: 11, i: 893, }, D { l: 8, t: 10, i: 482, }, D { l: 141, t: 11, i: 424, }, D { l: 6, t: 0, i: 312 }, D { l: 6, t: 0, i: 1715, }, D { l: 10, t: 0, i: 584, }, D { l: 11, t: 0, i: 546, }, D { l: 11, t: 0, i: 692, }, D { l: 12, t: 0, i: 259, }, D { l: 12, t: 0, i: 295, }, D { l: 13, t: 0, i: 46 }, D { l: 141, t: 0, i: 154, }, D { l: 5, t: 10, i: 336, }, D { l: 6, t: 10, i: 341, }, D { l: 6, t: 10, i: 478, }, D { l: 6, t: 10, i: 1763, }, D { l: 136, t: 10, i: 386, }, D { l: 137, t: 0, i: 151, }, D { l: 132, t: 0, i: 588, }, D { l: 152, t: 0, i: 4 }, D { l: 6, t: 11, i: 322, }, D { l: 9, t: 11, i: 552, }, D { l: 11, t: 11, i: 274, }, D { l: 13, t: 11, i: 209, }, D { l: 13, t: 11, i: 499, }, D { l: 14, t: 11, i: 85, }, D { l: 15, t: 11, i: 126, }, D { l: 145, t: 11, i: 70, }, D { l: 135, t: 10, i: 73, }, D { l: 4, t: 0, i: 231 }, D { l: 5, t: 0, i: 61 }, D { l: 6, t: 0, i: 104 }, D { l: 7, t: 0, i: 729 }, D { l: 7, t: 0, i: 964 }, D { l: 7, t: 0, i: 1658, }, D { l: 140, t: 0, i: 414, }, D { l: 6, t: 0, i: 263 }, D { l: 138, t: 0, i: 757, }, D { l: 135, t: 10, i: 1971, }, D { l: 4, t: 0, i: 612 }, D { l: 133, t: 0, i: 561, }, D { l: 132, t: 0, i: 320, }, D { l: 135, t: 10, i: 1344, }, D { l: 8, t: 11, i: 83 }, D { l: 8, t: 11, i: 817, }, D { l: 9, t: 11, i: 28 }, D { l: 9, t: 11, i: 29 }, D { l: 9, t: 11, i: 885, }, D { l: 10, t: 11, i: 387, }, D { l: 11, t: 11, i: 633, }, D { l: 11, t: 11, i: 740, }, D { l: 13, t: 11, i: 235, }, D { l: 13, t: 11, i: 254, }, D { l: 15, t: 11, i: 143, }, D { l: 143, t: 11, i: 146, }, D { l: 5, t: 10, i: 396, }, D { l: 134, t: 10, i: 501, }, D { l: 140, t: 11, i: 49, }, D { l: 132, t: 0, i: 225, }, D { l: 4, t: 10, i: 929, }, D { l: 5, t: 10, i: 799, }, D { l: 8, t: 10, i: 46 }, D { l: 136, t: 10, i: 740, }, D { l: 4, t: 0, i: 405 }, D { l: 7, t: 0, i: 817 }, D { l: 14, t: 0, i: 58 }, D { l: 17, t: 0, i: 37 }, D { l: 146, t: 0, i: 124, }, D { l: 133, t: 0, i: 974, }, D { l: 4, t: 11, i: 412, }, D { l: 133, t: 11, i: 581, }, D { l: 4, t: 10, i: 892, }, D { l: 133, t: 10, i: 770, }, D { l: 4, t: 0, i: 996 }, D { l: 134, t: 0, i: 2026, }, D { l: 4, t: 0, i: 527 }, D { l: 5, t: 0, i: 235 }, D { l: 7, t: 0, i: 1239, }, D { l: 11, t: 0, i: 131, }, D { l: 140, t: 0, i: 370, }, D { l: 9, t: 0, i: 16 }, D { l: 13, t: 0, i: 386, }, D { l: 135, t: 11, i: 421, }, D { l: 7, t: 0, i: 956 }, D { l: 7, t: 0, i: 1157, }, D { l: 7, t: 0, i: 1506, }, D { l: 7, t: 0, i: 1606, }, D { l: 7, t: 0, i: 1615, }, D { l: 7, t: 0, i: 1619, }, D { l: 7, t: 0, i: 1736, }, D { l: 7, t: 0, i: 1775, }, D { l: 8, t: 0, i: 590 }, D { l: 9, t: 0, i: 324 }, D { l: 9, t: 0, i: 736 }, D { l: 9, t: 0, i: 774 }, D { l: 9, t: 0, i: 776 }, D { l: 9, t: 0, i: 784 }, D { l: 10, t: 0, i: 567, }, D { l: 10, t: 0, i: 708, }, D { l: 11, t: 0, i: 518, }, D { l: 11, t: 0, i: 613, }, D { l: 11, t: 0, i: 695, }, D { l: 11, t: 0, i: 716, }, D { l: 11, t: 0, i: 739, }, D { l: 11, t: 0, i: 770, }, D { l: 11, t: 0, i: 771, }, D { l: 11, t: 0, i: 848, }, D { l: 11, t: 0, i: 857, }, D { l: 11, t: 0, i: 931, }, D { l: 11, t: 0, i: 947, }, D { l: 12, t: 0, i: 326, }, D { l: 12, t: 0, i: 387, }, D { l: 12, t: 0, i: 484, }, D { l: 12, t: 0, i: 528, }, D { l: 12, t: 0, i: 552, }, D { l: 12, t: 0, i: 613, }, D { l: 13, t: 0, i: 189, }, D { l: 13, t: 0, i: 256, }, D { l: 13, t: 0, i: 340, }, D { l: 13, t: 0, i: 432, }, D { l: 13, t: 0, i: 436, }, D { l: 13, t: 0, i: 440, }, D { l: 13, t: 0, i: 454, }, D { l: 14, t: 0, i: 174, }, D { l: 14, t: 0, i: 220, }, D { l: 14, t: 0, i: 284, }, D { l: 14, t: 0, i: 390, }, D { l: 145, t: 0, i: 121, }, D { l: 135, t: 10, i: 158, }, D { l: 9, t: 0, i: 137 }, D { l: 138, t: 0, i: 221, }, D { l: 4, t: 11, i: 110, }, D { l: 10, t: 11, i: 415, }, D { l: 10, t: 11, i: 597, }, D { l: 142, t: 11, i: 206, }, D { l: 141, t: 11, i: 496, }, D { l: 135, t: 11, i: 205, }, D { l: 151, t: 10, i: 25, }, D { l: 135, t: 11, i: 778, }, D { l: 7, t: 11, i: 1656, }, D { l: 7, t: 10, i: 2001, }, D { l: 9, t: 11, i: 369, }, D { l: 10, t: 11, i: 338, }, D { l: 10, t: 11, i: 490, }, D { l: 11, t: 11, i: 154, }, D { l: 11, t: 11, i: 545, }, D { l: 11, t: 11, i: 775, }, D { l: 13, t: 11, i: 77, }, D { l: 141, t: 11, i: 274, }, D { l: 4, t: 11, i: 444, }, D { l: 10, t: 11, i: 146, }, D { l: 140, t: 11, i: 9, }, D { l: 7, t: 0, i: 390 }, D { l: 138, t: 0, i: 140, }, D { l: 135, t: 0, i: 1144, }, D { l: 134, t: 0, i: 464, }, D { l: 7, t: 10, i: 1461, }, D { l: 140, t: 10, i: 91, }, D { l: 132, t: 10, i: 602, }, D { l: 4, t: 11, i: 283, }, D { l: 135, t: 11, i: 1194, }, D { l: 5, t: 0, i: 407 }, D { l: 11, t: 0, i: 204, }, D { l: 11, t: 0, i: 243, }, D { l: 11, t: 0, i: 489, }, D { l: 12, t: 0, i: 293, }, D { l: 19, t: 0, i: 37 }, D { l: 20, t: 0, i: 73 }, D { l: 150, t: 0, i: 38, }, D { l: 7, t: 0, i: 1218, }, D { l: 136, t: 0, i: 303, }, D { l: 5, t: 0, i: 325 }, D { l: 8, t: 0, i: 5 }, D { l: 8, t: 0, i: 227 }, D { l: 9, t: 0, i: 105 }, D { l: 10, t: 0, i: 585, }, D { l: 12, t: 0, i: 614, }, D { l: 4, t: 10, i: 13 }, D { l: 5, t: 10, i: 567, }, D { l: 7, t: 10, i: 1498, }, D { l: 9, t: 10, i: 124, }, D { l: 11, t: 10, i: 521, }, D { l: 140, t: 10, i: 405, }, D { l: 135, t: 10, i: 1006, }, D { l: 7, t: 0, i: 800 }, D { l: 10, t: 0, i: 12 }, D { l: 134, t: 11, i: 1720, }, D { l: 135, t: 0, i: 1783, }, D { l: 132, t: 10, i: 735, }, D { l: 138, t: 10, i: 812, }, D { l: 4, t: 10, i: 170, }, D { l: 135, t: 10, i: 323, }, D { l: 6, t: 0, i: 621 }, D { l: 13, t: 0, i: 504, }, D { l: 144, t: 0, i: 89, }, D { l: 5, t: 10, i: 304, }, D { l: 135, t: 10, i: 1403, }, D { l: 137, t: 11, i: 216, }, D { l: 6, t: 0, i: 920 }, D { l: 6, t: 0, i: 1104, }, D { l: 9, t: 11, i: 183, }, D { l: 139, t: 11, i: 286, }, D { l: 4, t: 0, i: 376 }, D { l: 133, t: 10, i: 742, }, D { l: 134, t: 0, i: 218, }, D { l: 8, t: 0, i: 641 }, D { l: 11, t: 0, i: 388, }, D { l: 140, t: 0, i: 580, }, D { l: 7, t: 0, i: 454 }, D { l: 7, t: 0, i: 782 }, D { l: 8, t: 0, i: 768 }, D { l: 140, t: 0, i: 686, }, D { l: 137, t: 11, i: 33, }, D { l: 133, t: 10, i: 111, }, D { l: 144, t: 0, i: 0 }, D { l: 10, t: 0, i: 676, }, D { l: 140, t: 0, i: 462, }, D { l: 6, t: 0, i: 164 }, D { l: 136, t: 11, i: 735, }, D { l: 133, t: 10, i: 444, }, D { l: 150, t: 0, i: 50, }, D { l: 7, t: 11, i: 1862, }, D { l: 12, t: 11, i: 491, }, D { l: 12, t: 11, i: 520, }, D { l: 13, t: 11, i: 383, }, D { l: 14, t: 11, i: 244, }, D { l: 146, t: 11, i: 12, }, D { l: 5, t: 11, i: 132, }, D { l: 9, t: 11, i: 486, }, D { l: 9, t: 11, i: 715, }, D { l: 10, t: 11, i: 458, }, D { l: 11, t: 11, i: 373, }, D { l: 11, t: 11, i: 668, }, D { l: 11, t: 11, i: 795, }, D { l: 11, t: 11, i: 897, }, D { l: 12, t: 11, i: 272, }, D { l: 12, t: 11, i: 424, }, D { l: 12, t: 11, i: 539, }, D { l: 12, t: 11, i: 558, }, D { l: 14, t: 11, i: 245, }, D { l: 14, t: 11, i: 263, }, D { l: 14, t: 11, i: 264, }, D { l: 14, t: 11, i: 393, }, D { l: 142, t: 11, i: 403, }, D { l: 8, t: 10, i: 123, }, D { l: 15, t: 10, i: 6 }, D { l: 144, t: 10, i: 7, }, D { l: 6, t: 0, i: 285 }, D { l: 8, t: 0, i: 654 }, D { l: 11, t: 0, i: 749, }, D { l: 12, t: 0, i: 190, }, D { l: 12, t: 0, i: 327, }, D { l: 13, t: 0, i: 120, }, D { l: 13, t: 0, i: 121, }, D { l: 13, t: 0, i: 327, }, D { l: 15, t: 0, i: 47 }, D { l: 146, t: 0, i: 40, }, D { l: 5, t: 11, i: 8 }, D { l: 6, t: 11, i: 89 }, D { l: 6, t: 11, i: 400, }, D { l: 7, t: 11, i: 1569, }, D { l: 7, t: 11, i: 1623, }, D { l: 7, t: 11, i: 1850, }, D { l: 8, t: 11, i: 218, }, D { l: 8, t: 11, i: 422, }, D { l: 9, t: 11, i: 570, }, D { l: 138, t: 11, i: 626, }, D { l: 6, t: 11, i: 387, }, D { l: 7, t: 11, i: 882, }, D { l: 141, t: 11, i: 111, }, D { l: 6, t: 0, i: 343 }, D { l: 7, t: 0, i: 195 }, D { l: 9, t: 0, i: 226 }, D { l: 10, t: 0, i: 197, }, D { l: 10, t: 0, i: 575, }, D { l: 11, t: 0, i: 502, }, D { l: 11, t: 0, i: 899, }, D { l: 6, t: 11, i: 224, }, D { l: 7, t: 11, i: 877, }, D { l: 137, t: 11, i: 647, }, D { l: 5, t: 10, i: 937, }, D { l: 135, t: 10, i: 100, }, D { l: 135, t: 11, i: 790, }, D { l: 150, t: 0, i: 29, }, D { l: 147, t: 0, i: 8 }, D { l: 134, t: 0, i: 1812, }, D { l: 149, t: 0, i: 8 }, D { l: 135, t: 11, i: 394, }, D { l: 7, t: 0, i: 1125, }, D { l: 9, t: 0, i: 143 }, D { l: 11, t: 0, i: 61 }, D { l: 14, t: 0, i: 405, }, D { l: 150, t: 0, i: 21, }, D { l: 10, t: 11, i: 755, }, D { l: 147, t: 11, i: 29, }, D { l: 9, t: 11, i: 378, }, D { l: 141, t: 11, i: 162, }, D { l: 135, t: 10, i: 922, }, D { l: 5, t: 10, i: 619, }, D { l: 133, t: 10, i: 698, }, D { l: 134, t: 0, i: 1327, }, D { l: 6, t: 0, i: 1598, }, D { l: 137, t: 0, i: 575, }, D { l: 9, t: 11, i: 569, }, D { l: 12, t: 11, i: 12, }, D { l: 12, t: 11, i: 81, }, D { l: 12, t: 11, i: 319, }, D { l: 13, t: 11, i: 69, }, D { l: 14, t: 11, i: 259, }, D { l: 16, t: 11, i: 87, }, D { l: 17, t: 11, i: 1 }, D { l: 17, t: 11, i: 21, }, D { l: 17, t: 11, i: 24, }, D { l: 18, t: 11, i: 15, }, D { l: 18, t: 11, i: 56, }, D { l: 18, t: 11, i: 59, }, D { l: 18, t: 11, i: 127, }, D { l: 18, t: 11, i: 154, }, D { l: 19, t: 11, i: 19, }, D { l: 148, t: 11, i: 31, }, D { l: 6, t: 0, i: 895 }, D { l: 135, t: 11, i: 1231, }, D { l: 5, t: 0, i: 959 }, D { l: 7, t: 11, i: 124, }, D { l: 136, t: 11, i: 38, }, D { l: 5, t: 11, i: 261, }, D { l: 7, t: 11, i: 78 }, D { l: 7, t: 11, i: 199, }, D { l: 8, t: 11, i: 815, }, D { l: 9, t: 11, i: 126, }, D { l: 138, t: 11, i: 342, }, D { l: 5, t: 10, i: 917, }, D { l: 134, t: 10, i: 1659, }, D { l: 7, t: 0, i: 1759, }, D { l: 5, t: 11, i: 595, }, D { l: 135, t: 11, i: 1863, }, D { l: 136, t: 0, i: 173, }, D { l: 134, t: 0, i: 266, }, D { l: 142, t: 0, i: 261, }, D { l: 132, t: 11, i: 628, }, D { l: 5, t: 10, i: 251, }, D { l: 5, t: 10, i: 956, }, D { l: 8, t: 10, i: 268, }, D { l: 9, t: 10, i: 214, }, D { l: 146, t: 10, i: 142, }, D { l: 7, t: 11, i: 266, }, D { l: 136, t: 11, i: 804, }, D { l: 135, t: 11, i: 208, }, D { l: 6, t: 11, i: 79 }, D { l: 7, t: 11, i: 1021, }, D { l: 135, t: 11, i: 1519, }, D { l: 11, t: 11, i: 704, }, D { l: 141, t: 11, i: 396, }, D { l: 5, t: 10, i: 346, }, D { l: 5, t: 10, i: 711, }, D { l: 136, t: 10, i: 390, }, D { l: 136, t: 11, i: 741, }, D { l: 134, t: 11, i: 376, }, D { l: 134, t: 0, i: 1427, }, D { l: 6, t: 0, i: 1033, }, D { l: 6, t: 0, i: 1217, }, D { l: 136, t: 0, i: 300, }, D { l: 133, t: 10, i: 624, }, D { l: 6, t: 11, i: 100, }, D { l: 7, t: 11, i: 244, }, D { l: 7, t: 11, i: 632, }, D { l: 7, t: 11, i: 1609, }, D { l: 8, t: 11, i: 178, }, D { l: 8, t: 11, i: 638, }, D { l: 141, t: 11, i: 58, }, D { l: 6, t: 0, i: 584 }, D { l: 5, t: 10, i: 783, }, D { l: 7, t: 10, i: 1998, }, D { l: 135, t: 10, i: 2047, }, D { l: 5, t: 0, i: 427 }, D { l: 5, t: 0, i: 734 }, D { l: 7, t: 0, i: 478 }, D { l: 136, t: 0, i: 52, }, D { l: 7, t: 0, i: 239 }, D { l: 11, t: 0, i: 217, }, D { l: 142, t: 0, i: 165, }, D { l: 134, t: 0, i: 1129, }, D { l: 6, t: 0, i: 168 }, D { l: 6, t: 0, i: 1734, }, D { l: 7, t: 0, i: 20 }, D { l: 7, t: 0, i: 1056, }, D { l: 8, t: 0, i: 732 }, D { l: 9, t: 0, i: 406 }, D { l: 9, t: 0, i: 911 }, D { l: 138, t: 0, i: 694, }, D { l: 132, t: 10, i: 594, }, D { l: 133, t: 11, i: 791, }, D { l: 7, t: 11, i: 686, }, D { l: 8, t: 11, i: 33 }, D { l: 8, t: 11, i: 238, }, D { l: 10, t: 11, i: 616, }, D { l: 11, t: 11, i: 467, }, D { l: 11, t: 11, i: 881, }, D { l: 13, t: 11, i: 217, }, D { l: 13, t: 11, i: 253, }, D { l: 142, t: 11, i: 268, }, D { l: 137, t: 11, i: 476, }, D { l: 134, t: 0, i: 418, }, D { l: 133, t: 0, i: 613, }, D { l: 132, t: 0, i: 632, }, D { l: 132, t: 11, i: 447, }, D { l: 7, t: 0, i: 32 }, D { l: 7, t: 0, i: 984 }, D { l: 8, t: 0, i: 85 }, D { l: 8, t: 0, i: 709 }, D { l: 9, t: 0, i: 579 }, D { l: 9, t: 0, i: 847 }, D { l: 9, t: 0, i: 856 }, D { l: 10, t: 0, i: 799, }, D { l: 11, t: 0, i: 258, }, D { l: 11, t: 0, i: 1007, }, D { l: 12, t: 0, i: 331, }, D { l: 12, t: 0, i: 615, }, D { l: 13, t: 0, i: 188, }, D { l: 13, t: 0, i: 435, }, D { l: 14, t: 0, i: 8 }, D { l: 15, t: 0, i: 165, }, D { l: 16, t: 0, i: 27 }, D { l: 20, t: 0, i: 40 }, D { l: 144, t: 11, i: 35, }, D { l: 4, t: 11, i: 128, }, D { l: 5, t: 11, i: 415, }, D { l: 6, t: 11, i: 462, }, D { l: 7, t: 11, i: 294, }, D { l: 7, t: 11, i: 578, }, D { l: 10, t: 11, i: 710, }, D { l: 139, t: 11, i: 86, }, D { l: 5, t: 0, i: 694 }, D { l: 136, t: 0, i: 909, }, D { l: 7, t: 0, i: 1109, }, D { l: 11, t: 0, i: 7 }, D { l: 5, t: 10, i: 37 }, D { l: 6, t: 10, i: 39 }, D { l: 6, t: 10, i: 451, }, D { l: 7, t: 10, i: 218, }, D { l: 7, t: 10, i: 1166, }, D { l: 7, t: 10, i: 1687, }, D { l: 8, t: 10, i: 662, }, D { l: 144, t: 10, i: 2, }, D { l: 136, t: 11, i: 587, }, D { l: 6, t: 11, i: 427, }, D { l: 7, t: 11, i: 1018, }, D { l: 138, t: 11, i: 692, }, D { l: 4, t: 11, i: 195, }, D { l: 6, t: 10, i: 508, }, D { l: 135, t: 11, i: 802, }, D { l: 4, t: 0, i: 167 }, D { l: 135, t: 0, i: 82, }, D { l: 5, t: 0, i: 62 }, D { l: 6, t: 0, i: 24 }, D { l: 6, t: 0, i: 534 }, D { l: 7, t: 0, i: 74 }, D { l: 7, t: 0, i: 678 }, D { l: 7, t: 0, i: 684 }, D { l: 7, t: 0, i: 1043, }, D { l: 7, t: 0, i: 1072, }, D { l: 8, t: 0, i: 280 }, D { l: 8, t: 0, i: 541 }, D { l: 8, t: 0, i: 686 }, D { l: 9, t: 0, i: 258 }, D { l: 10, t: 0, i: 519, }, D { l: 11, t: 0, i: 252, }, D { l: 140, t: 0, i: 282, }, D { l: 138, t: 0, i: 33, }, D { l: 4, t: 0, i: 359 }, D { l: 133, t: 11, i: 738, }, D { l: 7, t: 0, i: 980 }, D { l: 9, t: 0, i: 328 }, D { l: 13, t: 0, i: 186, }, D { l: 13, t: 0, i: 364, }, D { l: 7, t: 10, i: 635, }, D { l: 7, t: 10, i: 796, }, D { l: 8, t: 10, i: 331, }, D { l: 9, t: 10, i: 330, }, D { l: 9, t: 10, i: 865, }, D { l: 10, t: 10, i: 119, }, D { l: 10, t: 10, i: 235, }, D { l: 11, t: 10, i: 111, }, D { l: 11, t: 10, i: 129, }, D { l: 11, t: 10, i: 240, }, D { l: 12, t: 10, i: 31, }, D { l: 12, t: 10, i: 66, }, D { l: 12, t: 10, i: 222, }, D { l: 12, t: 10, i: 269, }, D { l: 12, t: 10, i: 599, }, D { l: 12, t: 10, i: 684, }, D { l: 12, t: 10, i: 689, }, D { l: 12, t: 10, i: 691, }, D { l: 142, t: 10, i: 345, }, D { l: 137, t: 10, i: 527, }, D { l: 6, t: 0, i: 596 }, D { l: 7, t: 0, i: 585 }, D { l: 135, t: 10, i: 702, }, D { l: 134, t: 11, i: 1683, }, D { l: 133, t: 0, i: 211, }, D { l: 6, t: 0, i: 145 }, D { l: 141, t: 0, i: 336, }, D { l: 134, t: 0, i: 1130, }, D { l: 7, t: 0, i: 873 }, D { l: 6, t: 10, i: 37 }, D { l: 7, t: 10, i: 1666, }, D { l: 8, t: 10, i: 195, }, D { l: 8, t: 10, i: 316, }, D { l: 9, t: 10, i: 178, }, D { l: 9, t: 10, i: 276, }, D { l: 9, t: 10, i: 339, }, D { l: 9, t: 10, i: 536, }, D { l: 10, t: 10, i: 102, }, D { l: 10, t: 10, i: 362, }, D { l: 10, t: 10, i: 785, }, D { l: 11, t: 10, i: 55, }, D { l: 11, t: 10, i: 149, }, D { l: 11, t: 10, i: 773, }, D { l: 13, t: 10, i: 416, }, D { l: 13, t: 10, i: 419, }, D { l: 14, t: 10, i: 38, }, D { l: 14, t: 10, i: 41, }, D { l: 142, t: 10, i: 210, }, D { l: 8, t: 0, i: 840 }, D { l: 136, t: 0, i: 841, }, D { l: 132, t: 0, i: 263, }, D { l: 5, t: 11, i: 3 }, D { l: 8, t: 11, i: 578, }, D { l: 9, t: 11, i: 118, }, D { l: 10, t: 11, i: 705, }, D { l: 12, t: 11, i: 383, }, D { l: 141, t: 11, i: 279, }, D { l: 132, t: 0, i: 916, }, D { l: 133, t: 11, i: 229, }, D { l: 133, t: 10, i: 645, }, D { l: 15, t: 0, i: 155, }, D { l: 16, t: 0, i: 79 }, D { l: 8, t: 11, i: 102, }, D { l: 10, t: 11, i: 578, }, D { l: 10, t: 11, i: 672, }, D { l: 12, t: 11, i: 496, }, D { l: 13, t: 11, i: 408, }, D { l: 14, t: 11, i: 121, }, D { l: 145, t: 11, i: 106, }, D { l: 4, t: 0, i: 599 }, D { l: 5, t: 0, i: 592 }, D { l: 6, t: 0, i: 1634, }, D { l: 7, t: 0, i: 5 }, D { l: 7, t: 0, i: 55 }, D { l: 7, t: 0, i: 67 }, D { l: 7, t: 0, i: 97 }, D { l: 7, t: 0, i: 691 }, D { l: 7, t: 0, i: 979 }, D { l: 7, t: 0, i: 1600, }, D { l: 7, t: 0, i: 1697, }, D { l: 8, t: 0, i: 207 }, D { l: 8, t: 0, i: 214 }, D { l: 8, t: 0, i: 231 }, D { l: 8, t: 0, i: 294 }, D { l: 8, t: 0, i: 336 }, D { l: 8, t: 0, i: 428 }, D { l: 8, t: 0, i: 471 }, D { l: 8, t: 0, i: 622 }, D { l: 8, t: 0, i: 626 }, D { l: 8, t: 0, i: 679 }, D { l: 8, t: 0, i: 759 }, D { l: 8, t: 0, i: 829 }, D { l: 9, t: 0, i: 11 }, D { l: 9, t: 0, i: 246 }, D { l: 9, t: 0, i: 484 }, D { l: 9, t: 0, i: 573 }, D { l: 9, t: 0, i: 706 }, D { l: 9, t: 0, i: 762 }, D { l: 9, t: 0, i: 798 }, D { l: 9, t: 0, i: 855 }, D { l: 9, t: 0, i: 870 }, D { l: 9, t: 0, i: 912 }, D { l: 10, t: 0, i: 303, }, D { l: 10, t: 0, i: 335, }, D { l: 10, t: 0, i: 424, }, D { l: 10, t: 0, i: 461, }, D { l: 10, t: 0, i: 543, }, D { l: 10, t: 0, i: 759, }, D { l: 10, t: 0, i: 814, }, D { l: 11, t: 0, i: 59 }, D { l: 11, t: 0, i: 199, }, D { l: 11, t: 0, i: 235, }, D { l: 11, t: 0, i: 590, }, D { l: 11, t: 0, i: 631, }, D { l: 11, t: 0, i: 929, }, D { l: 11, t: 0, i: 963, }, D { l: 11, t: 0, i: 987, }, D { l: 12, t: 0, i: 114, }, D { l: 12, t: 0, i: 182, }, D { l: 12, t: 0, i: 226, }, D { l: 12, t: 0, i: 332, }, D { l: 12, t: 0, i: 439, }, D { l: 12, t: 0, i: 575, }, D { l: 12, t: 0, i: 598, }, D { l: 12, t: 0, i: 675, }, D { l: 13, t: 0, i: 8 }, D { l: 13, t: 0, i: 125, }, D { l: 13, t: 0, i: 194, }, D { l: 13, t: 0, i: 287, }, D { l: 14, t: 0, i: 197, }, D { l: 14, t: 0, i: 383, }, D { l: 15, t: 0, i: 53 }, D { l: 17, t: 0, i: 63 }, D { l: 19, t: 0, i: 46 }, D { l: 19, t: 0, i: 98 }, D { l: 19, t: 0, i: 106, }, D { l: 148, t: 0, i: 85, }, D { l: 7, t: 0, i: 1356, }, D { l: 132, t: 10, i: 290, }, D { l: 6, t: 10, i: 70 }, D { l: 7, t: 10, i: 1292, }, D { l: 10, t: 10, i: 762, }, D { l: 139, t: 10, i: 288, }, D { l: 150, t: 11, i: 55, }, D { l: 4, t: 0, i: 593 }, D { l: 8, t: 11, i: 115, }, D { l: 8, t: 11, i: 350, }, D { l: 9, t: 11, i: 489, }, D { l: 10, t: 11, i: 128, }, D { l: 11, t: 11, i: 306, }, D { l: 12, t: 11, i: 373, }, D { l: 14, t: 11, i: 30, }, D { l: 17, t: 11, i: 79, }, D { l: 147, t: 11, i: 80, }, D { l: 135, t: 11, i: 1235, }, D { l: 134, t: 0, i: 1392, }, D { l: 4, t: 11, i: 230, }, D { l: 133, t: 11, i: 702, }, D { l: 147, t: 0, i: 126, }, D { l: 7, t: 10, i: 131, }, D { l: 7, t: 10, i: 422, }, D { l: 8, t: 10, i: 210, }, D { l: 140, t: 10, i: 573, }, D { l: 134, t: 0, i: 1179, }, D { l: 139, t: 11, i: 435, }, D { l: 139, t: 10, i: 797, }, D { l: 134, t: 11, i: 1728, }, D { l: 4, t: 0, i: 162 }, D { l: 18, t: 11, i: 26, }, D { l: 19, t: 11, i: 42, }, D { l: 20, t: 11, i: 43, }, D { l: 21, t: 11, i: 0 }, D { l: 23, t: 11, i: 27, }, D { l: 152, t: 11, i: 14, }, D { l: 132, t: 10, i: 936, }, D { l: 6, t: 0, i: 765 }, D { l: 5, t: 10, i: 453, }, D { l: 134, t: 10, i: 441, }, D { l: 133, t: 0, i: 187, }, D { l: 135, t: 0, i: 1286, }, D { l: 6, t: 0, i: 635 }, D { l: 6, t: 0, i: 904 }, D { l: 6, t: 0, i: 1210, }, D { l: 134, t: 0, i: 1489, }, D { l: 4, t: 0, i: 215 }, D { l: 8, t: 0, i: 890 }, D { l: 9, t: 0, i: 38 }, D { l: 10, t: 0, i: 923, }, D { l: 11, t: 0, i: 23 }, D { l: 11, t: 0, i: 127, }, D { l: 139, t: 0, i: 796, }, D { l: 6, t: 0, i: 1165, }, D { l: 134, t: 0, i: 1306, }, D { l: 7, t: 0, i: 716 }, D { l: 13, t: 0, i: 97 }, D { l: 141, t: 0, i: 251, }, D { l: 132, t: 10, i: 653, }, D { l: 136, t: 0, i: 657, }, D { l: 146, t: 10, i: 80, }, D { l: 5, t: 11, i: 622, }, D { l: 7, t: 11, i: 1032, }, D { l: 11, t: 11, i: 26, }, D { l: 11, t: 11, i: 213, }, D { l: 11, t: 11, i: 707, }, D { l: 12, t: 11, i: 380, }, D { l: 13, t: 11, i: 226, }, D { l: 141, t: 11, i: 355, }, D { l: 6, t: 0, i: 299 }, D { l: 5, t: 11, i: 70 }, D { l: 6, t: 11, i: 334, }, D { l: 9, t: 11, i: 171, }, D { l: 11, t: 11, i: 637, }, D { l: 12, t: 11, i: 202, }, D { l: 14, t: 11, i: 222, }, D { l: 145, t: 11, i: 42, }, D { l: 142, t: 0, i: 134, }, D { l: 4, t: 11, i: 23 }, D { l: 5, t: 11, i: 313, }, D { l: 5, t: 11, i: 1014, }, D { l: 6, t: 11, i: 50 }, D { l: 6, t: 11, i: 51 }, D { l: 7, t: 11, i: 142, }, D { l: 7, t: 11, i: 384, }, D { l: 9, t: 11, i: 783, }, D { l: 139, t: 11, i: 741, }, D { l: 4, t: 11, i: 141, }, D { l: 7, t: 11, i: 559, }, D { l: 8, t: 11, i: 640, }, D { l: 9, t: 11, i: 460, }, D { l: 12, t: 11, i: 183, }, D { l: 141, t: 11, i: 488, }, D { l: 136, t: 11, i: 614, }, D { l: 7, t: 10, i: 1368, }, D { l: 8, t: 10, i: 232, }, D { l: 8, t: 10, i: 361, }, D { l: 10, t: 10, i: 682, }, D { l: 138, t: 10, i: 742, }, D { l: 137, t: 10, i: 534, }, D { l: 6, t: 0, i: 1082, }, D { l: 140, t: 0, i: 658, }, D { l: 137, t: 10, i: 27, }, D { l: 135, t: 0, i: 2002, }, D { l: 142, t: 10, i: 12, }, D { l: 4, t: 0, i: 28 }, D { l: 5, t: 0, i: 440 }, D { l: 7, t: 0, i: 248 }, D { l: 11, t: 0, i: 833, }, D { l: 140, t: 0, i: 344, }, D { l: 7, t: 10, i: 736, }, D { l: 139, t: 10, i: 264, }, D { l: 134, t: 10, i: 1657, }, D { l: 134, t: 0, i: 1654, }, D { l: 138, t: 0, i: 531, }, D { l: 5, t: 11, i: 222, }, D { l: 9, t: 11, i: 140, }, D { l: 138, t: 11, i: 534, }, D { l: 6, t: 0, i: 634 }, D { l: 6, t: 0, i: 798 }, D { l: 134, t: 0, i: 840, }, D { l: 138, t: 11, i: 503, }, D { l: 135, t: 10, i: 127, }, D { l: 133, t: 0, i: 853, }, D { l: 5, t: 11, i: 154, }, D { l: 7, t: 11, i: 1491, }, D { l: 10, t: 11, i: 379, }, D { l: 138, t: 11, i: 485, }, D { l: 6, t: 0, i: 249 }, D { l: 7, t: 0, i: 1234, }, D { l: 139, t: 0, i: 573, }, D { l: 133, t: 11, i: 716, }, D { l: 7, t: 11, i: 1570, }, D { l: 140, t: 11, i: 542, }, D { l: 136, t: 10, i: 364, }, D { l: 138, t: 0, i: 527, }, D { l: 4, t: 11, i: 91 }, D { l: 5, t: 11, i: 388, }, D { l: 5, t: 11, i: 845, }, D { l: 6, t: 11, i: 206, }, D { l: 6, t: 11, i: 252, }, D { l: 6, t: 11, i: 365, }, D { l: 7, t: 11, i: 136, }, D { l: 7, t: 11, i: 531, }, D { l: 8, t: 11, i: 264, }, D { l: 136, t: 11, i: 621, }, D { l: 134, t: 0, i: 1419, }, D { l: 135, t: 11, i: 1441, }, D { l: 7, t: 0, i: 49 }, D { l: 7, t: 0, i: 392 }, D { l: 8, t: 0, i: 20 }, D { l: 8, t: 0, i: 172 }, D { l: 8, t: 0, i: 690 }, D { l: 9, t: 0, i: 383 }, D { l: 9, t: 0, i: 845 }, D { l: 10, t: 0, i: 48 }, D { l: 11, t: 0, i: 293, }, D { l: 11, t: 0, i: 832, }, D { l: 11, t: 0, i: 920, }, D { l: 11, t: 0, i: 984, }, D { l: 141, t: 0, i: 221, }, D { l: 5, t: 0, i: 858 }, D { l: 133, t: 0, i: 992, }, D { l: 5, t: 0, i: 728 }, D { l: 137, t: 10, i: 792, }, D { l: 5, t: 10, i: 909, }, D { l: 9, t: 10, i: 849, }, D { l: 138, t: 10, i: 805, }, D { l: 7, t: 0, i: 525 }, D { l: 7, t: 0, i: 1579, }, D { l: 8, t: 0, i: 497 }, D { l: 136, t: 0, i: 573, }, D { l: 6, t: 0, i: 268 }, D { l: 137, t: 0, i: 62, }, D { l: 135, t: 11, i: 576, }, D { l: 134, t: 0, i: 1201, }, D { l: 5, t: 11, i: 771, }, D { l: 5, t: 11, i: 863, }, D { l: 5, t: 11, i: 898, }, D { l: 6, t: 11, i: 1632, }, D { l: 6, t: 11, i: 1644, }, D { l: 134, t: 11, i: 1780, }, D { l: 133, t: 11, i: 331, }, D { l: 7, t: 0, i: 193 }, D { l: 7, t: 0, i: 1105, }, D { l: 10, t: 0, i: 495, }, D { l: 7, t: 10, i: 397, }, D { l: 8, t: 10, i: 124, }, D { l: 8, t: 10, i: 619, }, D { l: 9, t: 10, i: 305, }, D { l: 11, t: 10, i: 40, }, D { l: 12, t: 10, i: 349, }, D { l: 13, t: 10, i: 134, }, D { l: 13, t: 10, i: 295, }, D { l: 14, t: 10, i: 155, }, D { l: 15, t: 10, i: 120, }, D { l: 146, t: 10, i: 105, }, D { l: 138, t: 0, i: 106, }, D { l: 6, t: 0, i: 859 }, D { l: 5, t: 11, i: 107, }, D { l: 7, t: 11, i: 201, }, D { l: 136, t: 11, i: 518, }, D { l: 6, t: 11, i: 446, }, D { l: 135, t: 11, i: 1817, }, D { l: 13, t: 0, i: 23 }, D { l: 4, t: 10, i: 262, }, D { l: 135, t: 10, i: 342, }, D { l: 133, t: 10, i: 641, }, D { l: 137, t: 11, i: 851, }, D { l: 6, t: 0, i: 925 }, D { l: 137, t: 0, i: 813, }, D { l: 132, t: 11, i: 504, }, D { l: 6, t: 0, i: 613 }, D { l: 136, t: 0, i: 223, }, D { l: 4, t: 10, i: 99 }, D { l: 6, t: 10, i: 250, }, D { l: 6, t: 10, i: 346, }, D { l: 8, t: 10, i: 127, }, D { l: 138, t: 10, i: 81, }, D { l: 136, t: 0, i: 953, }, D { l: 132, t: 10, i: 915, }, D { l: 139, t: 11, i: 892, }, D { l: 5, t: 10, i: 75 }, D { l: 9, t: 10, i: 517, }, D { l: 10, t: 10, i: 470, }, D { l: 12, t: 10, i: 155, }, D { l: 141, t: 10, i: 224, }, D { l: 4, t: 0, i: 666 }, D { l: 7, t: 0, i: 1017, }, D { l: 7, t: 11, i: 996, }, D { l: 138, t: 11, i: 390, }, D { l: 5, t: 11, i: 883, }, D { l: 133, t: 11, i: 975, }, D { l: 14, t: 10, i: 83, }, D { l: 142, t: 11, i: 83, }, D { l: 4, t: 0, i: 670 }, D { l: 5, t: 11, i: 922, }, D { l: 134, t: 11, i: 1707, }, D { l: 135, t: 0, i: 216, }, D { l: 9, t: 0, i: 40 }, D { l: 11, t: 0, i: 136, }, D { l: 135, t: 11, i: 787, }, D { l: 5, t: 10, i: 954, }, D { l: 5, t: 11, i: 993, }, D { l: 7, t: 11, i: 515, }, D { l: 137, t: 11, i: 91, }, D { l: 139, t: 0, i: 259, }, D { l: 7, t: 0, i: 1114, }, D { l: 9, t: 0, i: 310 }, D { l: 9, t: 0, i: 682 }, D { l: 10, t: 0, i: 440, }, D { l: 13, t: 0, i: 40 }, D { l: 6, t: 10, i: 304, }, D { l: 8, t: 10, i: 418, }, D { l: 11, t: 10, i: 341, }, D { l: 139, t: 10, i: 675, }, D { l: 14, t: 0, i: 296, }, D { l: 9, t: 10, i: 410, }, D { l: 139, t: 10, i: 425, }, D { l: 10, t: 11, i: 377, }, D { l: 12, t: 11, i: 363, }, D { l: 13, t: 11, i: 68, }, D { l: 13, t: 11, i: 94, }, D { l: 14, t: 11, i: 108, }, D { l: 142, t: 11, i: 306, }, D { l: 7, t: 0, i: 1401, }, D { l: 135, t: 0, i: 1476, }, D { l: 4, t: 0, i: 296 }, D { l: 6, t: 0, i: 475 }, D { l: 7, t: 0, i: 401 }, D { l: 7, t: 0, i: 1410, }, D { l: 7, t: 0, i: 1594, }, D { l: 7, t: 0, i: 1674, }, D { l: 8, t: 0, i: 63 }, D { l: 8, t: 0, i: 660 }, D { l: 137, t: 0, i: 74, }, D { l: 4, t: 0, i: 139 }, D { l: 4, t: 0, i: 388 }, D { l: 140, t: 0, i: 188, }, D { l: 132, t: 0, i: 797, }, D { l: 132, t: 11, i: 766, }, D { l: 5, t: 11, i: 103, }, D { l: 7, t: 11, i: 921, }, D { l: 8, t: 11, i: 580, }, D { l: 8, t: 11, i: 593, }, D { l: 8, t: 11, i: 630, }, D { l: 138, t: 11, i: 28, }, D { l: 4, t: 11, i: 911, }, D { l: 5, t: 11, i: 867, }, D { l: 133, t: 11, i: 1013, }, D { l: 134, t: 10, i: 14, }, D { l: 134, t: 0, i: 1572, }, D { l: 134, t: 10, i: 1708, }, D { l: 21, t: 0, i: 39 }, D { l: 5, t: 10, i: 113, }, D { l: 6, t: 10, i: 243, }, D { l: 7, t: 10, i: 1865, }, D { l: 11, t: 10, i: 161, }, D { l: 16, t: 10, i: 37, }, D { l: 145, t: 10, i: 99, }, D { l: 7, t: 11, i: 1563, }, D { l: 141, t: 11, i: 182, }, D { l: 5, t: 11, i: 135, }, D { l: 6, t: 11, i: 519, }, D { l: 7, t: 11, i: 1722, }, D { l: 10, t: 11, i: 271, }, D { l: 11, t: 11, i: 261, }, D { l: 145, t: 11, i: 54, }, D { l: 132, t: 10, i: 274, }, D { l: 134, t: 0, i: 1594, }, D { l: 4, t: 11, i: 300, }, D { l: 5, t: 11, i: 436, }, D { l: 135, t: 11, i: 484, }, D { l: 4, t: 0, i: 747 }, D { l: 6, t: 0, i: 290 }, D { l: 7, t: 0, i: 649 }, D { l: 7, t: 0, i: 1479, }, D { l: 135, t: 0, i: 1583, }, D { l: 133, t: 11, i: 535, }, D { l: 147, t: 11, i: 82, }, D { l: 133, t: 0, i: 232, }, D { l: 137, t: 0, i: 887, }, D { l: 135, t: 10, i: 166, }, D { l: 136, t: 0, i: 521, }, D { l: 4, t: 0, i: 14 }, D { l: 7, t: 0, i: 472 }, D { l: 7, t: 0, i: 1801, }, D { l: 10, t: 0, i: 748, }, D { l: 141, t: 0, i: 458, }, D { l: 134, t: 0, i: 741, }, D { l: 134, t: 0, i: 992, }, D { l: 16, t: 0, i: 111, }, D { l: 137, t: 10, i: 304, }, D { l: 4, t: 0, i: 425 }, D { l: 5, t: 11, i: 387, }, D { l: 7, t: 11, i: 557, }, D { l: 12, t: 11, i: 547, }, D { l: 142, t: 11, i: 86, }, D { l: 135, t: 11, i: 1747, }, D { l: 5, t: 10, i: 654, }, D { l: 135, t: 11, i: 1489, }, D { l: 7, t: 0, i: 789 }, D { l: 4, t: 11, i: 6 }, D { l: 5, t: 11, i: 708, }, D { l: 136, t: 11, i: 75, }, D { l: 6, t: 10, i: 273, }, D { l: 10, t: 10, i: 188, }, D { l: 13, t: 10, i: 377, }, D { l: 146, t: 10, i: 77, }, D { l: 6, t: 0, i: 1593, }, D { l: 4, t: 11, i: 303, }, D { l: 7, t: 11, i: 619, }, D { l: 10, t: 11, i: 547, }, D { l: 10, t: 11, i: 687, }, D { l: 11, t: 11, i: 122, }, D { l: 140, t: 11, i: 601, }, D { l: 134, t: 0, i: 1768, }, D { l: 135, t: 10, i: 410, }, D { l: 138, t: 11, i: 772, }, D { l: 11, t: 0, i: 233, }, D { l: 139, t: 10, i: 524, }, D { l: 5, t: 0, i: 943 }, D { l: 134, t: 0, i: 1779, }, D { l: 134, t: 10, i: 1785, }, D { l: 136, t: 11, i: 529, }, D { l: 132, t: 0, i: 955, }, D { l: 5, t: 0, i: 245 }, D { l: 6, t: 0, i: 576 }, D { l: 7, t: 0, i: 582 }, D { l: 136, t: 0, i: 225, }, D { l: 132, t: 10, i: 780, }, D { l: 142, t: 0, i: 241, }, D { l: 134, t: 0, i: 1943, }, D { l: 4, t: 11, i: 106, }, D { l: 7, t: 11, i: 310, }, D { l: 7, t: 11, i: 1785, }, D { l: 10, t: 11, i: 690, }, D { l: 139, t: 11, i: 717, }, D { l: 134, t: 0, i: 1284, }, D { l: 5, t: 11, i: 890, }, D { l: 133, t: 11, i: 988, }, D { l: 6, t: 11, i: 626, }, D { l: 142, t: 11, i: 431, }, D { l: 10, t: 11, i: 706, }, D { l: 145, t: 11, i: 32, }, D { l: 137, t: 11, i: 332, }, D { l: 132, t: 11, i: 698, }, D { l: 135, t: 0, i: 709, }, D { l: 5, t: 10, i: 948, }, D { l: 138, t: 11, i: 17, }, D { l: 136, t: 0, i: 554, }, D { l: 134, t: 0, i: 1564, }, D { l: 139, t: 10, i: 941, }, D { l: 132, t: 0, i: 443, }, D { l: 134, t: 0, i: 909, }, D { l: 134, t: 11, i: 84, }, D { l: 142, t: 0, i: 280, }, D { l: 4, t: 10, i: 532, }, D { l: 5, t: 10, i: 706, }, D { l: 135, t: 10, i: 662, }, D { l: 132, t: 0, i: 729, }, D { l: 5, t: 10, i: 837, }, D { l: 6, t: 10, i: 1651, }, D { l: 139, t: 10, i: 985, }, D { l: 135, t: 10, i: 1861, }, D { l: 4, t: 0, i: 348 }, D { l: 152, t: 11, i: 3, }, D { l: 5, t: 11, i: 986, }, D { l: 6, t: 11, i: 130, }, D { l: 7, t: 11, i: 1582, }, D { l: 8, t: 11, i: 458, }, D { l: 10, t: 11, i: 101, }, D { l: 10, t: 11, i: 318, }, D { l: 138, t: 11, i: 823, }, D { l: 134, t: 0, i: 758, }, D { l: 4, t: 0, i: 298 }, D { l: 137, t: 0, i: 848, }, D { l: 4, t: 10, i: 330, }, D { l: 7, t: 10, i: 933, }, D { l: 7, t: 10, i: 2012, }, D { l: 136, t: 10, i: 292, }, D { l: 7, t: 11, i: 1644, }, D { l: 137, t: 11, i: 129, }, D { l: 6, t: 0, i: 1422, }, D { l: 9, t: 0, i: 829 }, D { l: 135, t: 10, i: 767, }, D { l: 5, t: 0, i: 164 }, D { l: 7, t: 0, i: 121 }, D { l: 142, t: 0, i: 189, }, D { l: 7, t: 0, i: 812 }, D { l: 7, t: 0, i: 1261, }, D { l: 7, t: 0, i: 1360, }, D { l: 9, t: 0, i: 632 }, D { l: 140, t: 0, i: 352, }, D { l: 135, t: 11, i: 1788, }, D { l: 139, t: 0, i: 556, }, D { l: 135, t: 11, i: 997, }, D { l: 145, t: 10, i: 114, }, D { l: 4, t: 0, i: 172 }, D { l: 9, t: 0, i: 611 }, D { l: 10, t: 0, i: 436, }, D { l: 12, t: 0, i: 673, }, D { l: 13, t: 0, i: 255, }, D { l: 137, t: 10, i: 883, }, D { l: 11, t: 0, i: 530, }, D { l: 138, t: 10, i: 274, }, D { l: 133, t: 0, i: 844, }, D { l: 134, t: 0, i: 984, }, D { l: 13, t: 0, i: 232, }, D { l: 18, t: 0, i: 35 }, D { l: 4, t: 10, i: 703, }, D { l: 135, t: 10, i: 207, }, D { l: 132, t: 10, i: 571, }, D { l: 9, t: 0, i: 263 }, D { l: 10, t: 0, i: 147, }, D { l: 138, t: 0, i: 492, }, D { l: 7, t: 11, i: 1756, }, D { l: 137, t: 11, i: 98, }, D { l: 5, t: 10, i: 873, }, D { l: 5, t: 10, i: 960, }, D { l: 8, t: 10, i: 823, }, D { l: 137, t: 10, i: 881, }, D { l: 133, t: 0, i: 537, }, D { l: 132, t: 0, i: 859, }, D { l: 7, t: 11, i: 1046, }, D { l: 139, t: 11, i: 160, }, D { l: 137, t: 0, i: 842, }, D { l: 139, t: 10, i: 283, }, D { l: 5, t: 10, i: 33 }, D { l: 6, t: 10, i: 470, }, D { l: 139, t: 10, i: 424, }, D { l: 6, t: 11, i: 45 }, D { l: 7, t: 11, i: 433, }, D { l: 8, t: 11, i: 129, }, D { l: 9, t: 11, i: 21 }, D { l: 10, t: 11, i: 392, }, D { l: 11, t: 11, i: 79, }, D { l: 12, t: 11, i: 499, }, D { l: 13, t: 11, i: 199, }, D { l: 141, t: 11, i: 451, }, D { l: 135, t: 0, i: 1291, }, D { l: 135, t: 10, i: 1882, }, D { l: 7, t: 11, i: 558, }, D { l: 136, t: 11, i: 353, }, D { l: 134, t: 0, i: 1482, }, D { l: 5, t: 0, i: 230 }, D { l: 5, t: 0, i: 392 }, D { l: 6, t: 0, i: 420 }, D { l: 9, t: 0, i: 568 }, D { l: 140, t: 0, i: 612, }, D { l: 6, t: 0, i: 262 }, D { l: 7, t: 10, i: 90 }, D { l: 7, t: 10, i: 664, }, D { l: 7, t: 10, i: 830, }, D { l: 7, t: 10, i: 1380, }, D { l: 7, t: 10, i: 2025, }, D { l: 8, t: 11, i: 81 }, D { l: 8, t: 10, i: 448, }, D { l: 8, t: 10, i: 828, }, D { l: 9, t: 11, i: 189, }, D { l: 9, t: 11, i: 201, }, D { l: 11, t: 11, i: 478, }, D { l: 11, t: 11, i: 712, }, D { l: 141, t: 11, i: 338, }, D { l: 142, t: 0, i: 31, }, D { l: 5, t: 11, i: 353, }, D { l: 151, t: 11, i: 26, }, D { l: 132, t: 0, i: 753, }, D { l: 4, t: 0, i: 0 }, D { l: 5, t: 0, i: 41 }, D { l: 7, t: 0, i: 1459, }, D { l: 7, t: 0, i: 1469, }, D { l: 7, t: 0, i: 1859, }, D { l: 9, t: 0, i: 549 }, D { l: 139, t: 0, i: 905, }, D { l: 9, t: 10, i: 417, }, D { l: 137, t: 10, i: 493, }, D { l: 135, t: 11, i: 1113, }, D { l: 133, t: 0, i: 696, }, D { l: 141, t: 11, i: 448, }, D { l: 134, t: 10, i: 295, }, D { l: 132, t: 0, i: 834, }, D { l: 4, t: 0, i: 771 }, D { l: 5, t: 10, i: 1019, }, D { l: 6, t: 11, i: 25 }, D { l: 7, t: 11, i: 855, }, D { l: 7, t: 11, i: 1258, }, D { l: 144, t: 11, i: 32, }, D { l: 134, t: 0, i: 1076, }, D { l: 133, t: 0, i: 921, }, D { l: 133, t: 0, i: 674, }, D { l: 4, t: 11, i: 4 }, D { l: 7, t: 11, i: 1118, }, D { l: 7, t: 11, i: 1320, }, D { l: 7, t: 11, i: 1706, }, D { l: 8, t: 11, i: 277, }, D { l: 9, t: 11, i: 622, }, D { l: 10, t: 11, i: 9 }, D { l: 11, t: 11, i: 724, }, D { l: 12, t: 11, i: 350, }, D { l: 12, t: 11, i: 397, }, D { l: 13, t: 11, i: 28, }, D { l: 13, t: 11, i: 159, }, D { l: 15, t: 11, i: 89, }, D { l: 18, t: 11, i: 5 }, D { l: 19, t: 11, i: 9 }, D { l: 20, t: 11, i: 34, }, D { l: 150, t: 11, i: 47, }, D { l: 134, t: 10, i: 208, }, D { l: 6, t: 0, i: 444 }, D { l: 136, t: 0, i: 308, }, D { l: 6, t: 0, i: 180 }, D { l: 7, t: 0, i: 1137, }, D { l: 8, t: 0, i: 751 }, D { l: 139, t: 0, i: 805, }, D { l: 4, t: 0, i: 183 }, D { l: 7, t: 0, i: 271 }, D { l: 11, t: 0, i: 824, }, D { l: 11, t: 0, i: 952, }, D { l: 13, t: 0, i: 278, }, D { l: 13, t: 0, i: 339, }, D { l: 13, t: 0, i: 482, }, D { l: 14, t: 0, i: 424, }, D { l: 148, t: 0, i: 99, }, D { l: 7, t: 11, i: 317, }, D { l: 135, t: 11, i: 569, }, D { l: 4, t: 0, i: 19 }, D { l: 5, t: 0, i: 477 }, D { l: 5, t: 0, i: 596 }, D { l: 6, t: 0, i: 505 }, D { l: 7, t: 0, i: 1221, }, D { l: 11, t: 0, i: 907, }, D { l: 12, t: 0, i: 209, }, D { l: 141, t: 0, i: 214, }, D { l: 135, t: 0, i: 1215, }, D { l: 6, t: 0, i: 271 }, D { l: 7, t: 0, i: 398 }, D { l: 8, t: 0, i: 387 }, D { l: 10, t: 0, i: 344, }, D { l: 7, t: 10, i: 448, }, D { l: 7, t: 10, i: 1629, }, D { l: 7, t: 10, i: 1813, }, D { l: 8, t: 10, i: 442, }, D { l: 9, t: 10, i: 710, }, D { l: 10, t: 10, i: 282, }, D { l: 138, t: 10, i: 722, }, D { l: 11, t: 10, i: 844, }, D { l: 12, t: 10, i: 104, }, D { l: 140, t: 10, i: 625, }, D { l: 134, t: 11, i: 255, }, D { l: 133, t: 10, i: 787, }, D { l: 134, t: 0, i: 1645, }, D { l: 11, t: 11, i: 956, }, D { l: 151, t: 11, i: 3, }, D { l: 6, t: 0, i: 92 }, D { l: 6, t: 0, i: 188 }, D { l: 7, t: 0, i: 209 }, D { l: 7, t: 0, i: 1269, }, D { l: 7, t: 0, i: 1524, }, D { l: 7, t: 0, i: 1876, }, D { l: 8, t: 0, i: 661 }, D { l: 10, t: 0, i: 42 }, D { l: 10, t: 0, i: 228, }, D { l: 11, t: 0, i: 58 }, D { l: 11, t: 0, i: 1020, }, D { l: 12, t: 0, i: 58 }, D { l: 12, t: 0, i: 118, }, D { l: 141, t: 0, i: 32, }, D { l: 4, t: 0, i: 459 }, D { l: 133, t: 0, i: 966, }, D { l: 4, t: 11, i: 536, }, D { l: 7, t: 11, i: 1141, }, D { l: 10, t: 11, i: 723, }, D { l: 139, t: 11, i: 371, }, D { l: 140, t: 0, i: 330, }, D { l: 134, t: 0, i: 1557, }, D { l: 7, t: 11, i: 285, }, D { l: 135, t: 11, i: 876, }, D { l: 136, t: 10, i: 491, }, D { l: 135, t: 11, i: 560, }, D { l: 6, t: 0, i: 18 }, D { l: 7, t: 0, i: 179 }, D { l: 7, t: 0, i: 932 }, D { l: 8, t: 0, i: 548 }, D { l: 8, t: 0, i: 757 }, D { l: 9, t: 0, i: 54 }, D { l: 9, t: 0, i: 65 }, D { l: 9, t: 0, i: 532 }, D { l: 9, t: 0, i: 844 }, D { l: 10, t: 0, i: 113, }, D { l: 10, t: 0, i: 117, }, D { l: 10, t: 0, i: 315, }, D { l: 10, t: 0, i: 560, }, D { l: 10, t: 0, i: 622, }, D { l: 10, t: 0, i: 798, }, D { l: 11, t: 0, i: 153, }, D { l: 11, t: 0, i: 351, }, D { l: 11, t: 0, i: 375, }, D { l: 12, t: 0, i: 78 }, D { l: 12, t: 0, i: 151, }, D { l: 12, t: 0, i: 392, }, D { l: 12, t: 0, i: 666, }, D { l: 14, t: 0, i: 248, }, D { l: 143, t: 0, i: 23, }, D { l: 6, t: 0, i: 1742, }, D { l: 132, t: 11, i: 690, }, D { l: 4, t: 10, i: 403, }, D { l: 5, t: 10, i: 441, }, D { l: 7, t: 10, i: 450, }, D { l: 10, t: 10, i: 840, }, D { l: 11, t: 10, i: 101, }, D { l: 12, t: 10, i: 193, }, D { l: 141, t: 10, i: 430, }, D { l: 133, t: 0, i: 965, }, D { l: 134, t: 0, i: 182, }, D { l: 10, t: 0, i: 65 }, D { l: 10, t: 0, i: 488, }, D { l: 138, t: 0, i: 497, }, D { l: 135, t: 11, i: 1346, }, D { l: 6, t: 0, i: 973 }, D { l: 6, t: 0, i: 1158, }, D { l: 10, t: 11, i: 200, }, D { l: 19, t: 11, i: 2 }, D { l: 151, t: 11, i: 22, }, D { l: 4, t: 11, i: 190, }, D { l: 133, t: 11, i: 554, }, D { l: 133, t: 10, i: 679, }, D { l: 7, t: 0, i: 328 }, D { l: 137, t: 10, i: 326, }, D { l: 133, t: 11, i: 1001, }, D { l: 9, t: 0, i: 588 }, D { l: 138, t: 0, i: 260, }, D { l: 133, t: 11, i: 446, }, D { l: 135, t: 10, i: 1128, }, D { l: 135, t: 10, i: 1796, }, D { l: 147, t: 11, i: 119, }, D { l: 134, t: 0, i: 1786, }, D { l: 6, t: 0, i: 1328, }, D { l: 6, t: 0, i: 1985, }, D { l: 8, t: 0, i: 962 }, D { l: 138, t: 0, i: 1017, }, D { l: 135, t: 0, i: 308, }, D { l: 11, t: 0, i: 508, }, D { l: 4, t: 10, i: 574, }, D { l: 7, t: 10, i: 350, }, D { l: 7, t: 10, i: 1024, }, D { l: 8, t: 10, i: 338, }, D { l: 9, t: 10, i: 677, }, D { l: 138, t: 10, i: 808, }, D { l: 138, t: 11, i: 752, }, D { l: 135, t: 10, i: 1081, }, D { l: 137, t: 11, i: 96, }, D { l: 7, t: 10, i: 1676, }, D { l: 135, t: 10, i: 2037, }, D { l: 136, t: 0, i: 588, }, D { l: 132, t: 11, i: 304, }, D { l: 133, t: 0, i: 614, }, D { l: 140, t: 0, i: 793, }, D { l: 136, t: 0, i: 287, }, D { l: 137, t: 10, i: 297, }, D { l: 141, t: 10, i: 37, }, D { l: 6, t: 11, i: 53 }, D { l: 6, t: 11, i: 199, }, D { l: 7, t: 11, i: 1408, }, D { l: 8, t: 11, i: 32 }, D { l: 8, t: 11, i: 93 }, D { l: 9, t: 11, i: 437, }, D { l: 10, t: 11, i: 397, }, D { l: 10, t: 11, i: 629, }, D { l: 11, t: 11, i: 593, }, D { l: 11, t: 11, i: 763, }, D { l: 13, t: 11, i: 326, }, D { l: 145, t: 11, i: 35, }, D { l: 134, t: 11, i: 105, }, D { l: 9, t: 11, i: 320, }, D { l: 10, t: 11, i: 506, }, D { l: 138, t: 11, i: 794, }, D { l: 5, t: 11, i: 114, }, D { l: 5, t: 11, i: 255, }, D { l: 141, t: 11, i: 285, }, D { l: 140, t: 0, i: 290, }, D { l: 7, t: 11, i: 2035, }, D { l: 8, t: 11, i: 19 }, D { l: 9, t: 11, i: 89 }, D { l: 138, t: 11, i: 831, }, D { l: 134, t: 0, i: 1136, }, D { l: 7, t: 0, i: 719 }, D { l: 8, t: 0, i: 796 }, D { l: 8, t: 0, i: 809 }, D { l: 8, t: 0, i: 834 }, D { l: 6, t: 10, i: 306, }, D { l: 7, t: 10, i: 1140, }, D { l: 7, t: 10, i: 1340, }, D { l: 8, t: 10, i: 133, }, D { l: 138, t: 10, i: 449, }, D { l: 139, t: 10, i: 1011, }, D { l: 5, t: 0, i: 210 }, D { l: 6, t: 0, i: 213 }, D { l: 7, t: 0, i: 60 }, D { l: 10, t: 0, i: 364, }, D { l: 139, t: 0, i: 135, }, D { l: 5, t: 0, i: 607 }, D { l: 8, t: 0, i: 326 }, D { l: 136, t: 0, i: 490, }, D { l: 138, t: 11, i: 176, }, D { l: 132, t: 0, i: 701, }, D { l: 5, t: 0, i: 472 }, D { l: 7, t: 0, i: 380 }, D { l: 137, t: 0, i: 758, }, D { l: 135, t: 0, i: 1947, }, D { l: 6, t: 0, i: 1079, }, D { l: 138, t: 0, i: 278, }, D { l: 138, t: 11, i: 391, }, D { l: 5, t: 10, i: 329, }, D { l: 8, t: 10, i: 260, }, D { l: 139, t: 11, i: 156, }, D { l: 4, t: 0, i: 386 }, D { l: 7, t: 0, i: 41 }, D { l: 8, t: 0, i: 405 }, D { l: 8, t: 0, i: 728 }, D { l: 9, t: 0, i: 497 }, D { l: 11, t: 0, i: 110, }, D { l: 11, t: 0, i: 360, }, D { l: 15, t: 0, i: 37 }, D { l: 144, t: 0, i: 84, }, D { l: 5, t: 0, i: 46 }, D { l: 7, t: 0, i: 1452, }, D { l: 7, t: 0, i: 1480, }, D { l: 8, t: 0, i: 634 }, D { l: 140, t: 0, i: 472, }, D { l: 136, t: 0, i: 961, }, D { l: 4, t: 0, i: 524 }, D { l: 136, t: 0, i: 810, }, D { l: 10, t: 0, i: 238, }, D { l: 141, t: 0, i: 33, }, D { l: 132, t: 10, i: 657, }, D { l: 152, t: 10, i: 7, }, D { l: 133, t: 0, i: 532, }, D { l: 5, t: 0, i: 997 }, D { l: 135, t: 10, i: 1665, }, D { l: 7, t: 11, i: 594, }, D { l: 7, t: 11, i: 851, }, D { l: 7, t: 11, i: 1858, }, D { l: 9, t: 11, i: 411, }, D { l: 9, t: 11, i: 574, }, D { l: 9, t: 11, i: 666, }, D { l: 9, t: 11, i: 737, }, D { l: 10, t: 11, i: 346, }, D { l: 10, t: 11, i: 712, }, D { l: 11, t: 11, i: 246, }, D { l: 11, t: 11, i: 432, }, D { l: 11, t: 11, i: 517, }, D { l: 11, t: 11, i: 647, }, D { l: 11, t: 11, i: 679, }, D { l: 11, t: 11, i: 727, }, D { l: 12, t: 11, i: 304, }, D { l: 12, t: 11, i: 305, }, D { l: 12, t: 11, i: 323, }, D { l: 12, t: 11, i: 483, }, D { l: 12, t: 11, i: 572, }, D { l: 12, t: 11, i: 593, }, D { l: 12, t: 11, i: 602, }, D { l: 13, t: 11, i: 95, }, D { l: 13, t: 11, i: 101, }, D { l: 13, t: 11, i: 171, }, D { l: 13, t: 11, i: 315, }, D { l: 13, t: 11, i: 378, }, D { l: 13, t: 11, i: 425, }, D { l: 13, t: 11, i: 475, }, D { l: 14, t: 11, i: 63, }, D { l: 14, t: 11, i: 380, }, D { l: 14, t: 11, i: 384, }, D { l: 15, t: 11, i: 133, }, D { l: 18, t: 11, i: 112, }, D { l: 148, t: 11, i: 72, }, D { l: 5, t: 11, i: 955, }, D { l: 136, t: 11, i: 814, }, D { l: 134, t: 0, i: 1301, }, D { l: 5, t: 10, i: 66 }, D { l: 7, t: 10, i: 1896, }, D { l: 136, t: 10, i: 288, }, D { l: 133, t: 11, i: 56, }, D { l: 134, t: 10, i: 1643, }, D { l: 6, t: 0, i: 1298, }, D { l: 148, t: 11, i: 100, }, D { l: 5, t: 0, i: 782 }, D { l: 5, t: 0, i: 829 }, D { l: 6, t: 0, i: 671 }, D { l: 6, t: 0, i: 1156, }, D { l: 6, t: 0, i: 1738, }, D { l: 137, t: 11, i: 621, }, D { l: 4, t: 0, i: 306 }, D { l: 5, t: 0, i: 570 }, D { l: 7, t: 0, i: 1347, }, D { l: 5, t: 10, i: 91 }, D { l: 5, t: 10, i: 648, }, D { l: 5, t: 10, i: 750, }, D { l: 5, t: 10, i: 781, }, D { l: 6, t: 10, i: 54 }, D { l: 6, t: 10, i: 112, }, D { l: 6, t: 10, i: 402, }, D { l: 6, t: 10, i: 1732, }, D { l: 7, t: 10, i: 315, }, D { l: 7, t: 10, i: 749, }, D { l: 7, t: 10, i: 1900, }, D { l: 9, t: 10, i: 78 }, D { l: 9, t: 10, i: 508, }, D { l: 10, t: 10, i: 611, }, D { l: 10, t: 10, i: 811, }, D { l: 11, t: 10, i: 510, }, D { l: 11, t: 10, i: 728, }, D { l: 13, t: 10, i: 36, }, D { l: 14, t: 10, i: 39, }, D { l: 16, t: 10, i: 83, }, D { l: 17, t: 10, i: 124, }, D { l: 148, t: 10, i: 30, }, D { l: 8, t: 10, i: 570, }, D { l: 9, t: 11, i: 477, }, D { l: 141, t: 11, i: 78, }, D { l: 4, t: 11, i: 639, }, D { l: 10, t: 11, i: 4 }, D { l: 10, t: 10, i: 322, }, D { l: 10, t: 10, i: 719, }, D { l: 11, t: 10, i: 407, }, D { l: 11, t: 11, i: 638, }, D { l: 12, t: 11, i: 177, }, D { l: 148, t: 11, i: 57, }, D { l: 7, t: 0, i: 1823, }, D { l: 139, t: 0, i: 693, }, D { l: 7, t: 0, i: 759 }, D { l: 5, t: 11, i: 758, }, D { l: 8, t: 10, i: 125, }, D { l: 8, t: 10, i: 369, }, D { l: 8, t: 10, i: 524, }, D { l: 10, t: 10, i: 486, }, D { l: 11, t: 10, i: 13, }, D { l: 11, t: 10, i: 381, }, D { l: 11, t: 10, i: 736, }, D { l: 11, t: 10, i: 766, }, D { l: 11, t: 10, i: 845, }, D { l: 13, t: 10, i: 114, }, D { l: 13, t: 10, i: 292, }, D { l: 142, t: 10, i: 47, }, D { l: 7, t: 0, i: 1932, }, D { l: 6, t: 10, i: 1684, }, D { l: 6, t: 10, i: 1731, }, D { l: 7, t: 10, i: 356, }, D { l: 8, t: 10, i: 54 }, D { l: 8, t: 10, i: 221, }, D { l: 9, t: 10, i: 225, }, D { l: 9, t: 10, i: 356, }, D { l: 10, t: 10, i: 77, }, D { l: 10, t: 10, i: 446, }, D { l: 10, t: 10, i: 731, }, D { l: 12, t: 10, i: 404, }, D { l: 141, t: 10, i: 491, }, D { l: 135, t: 11, i: 552, }, D { l: 135, t: 11, i: 1112, }, D { l: 4, t: 0, i: 78 }, D { l: 5, t: 0, i: 96 }, D { l: 5, t: 0, i: 182 }, D { l: 6, t: 0, i: 1257, }, D { l: 7, t: 0, i: 1724, }, D { l: 7, t: 0, i: 1825, }, D { l: 10, t: 0, i: 394, }, D { l: 10, t: 0, i: 471, }, D { l: 11, t: 0, i: 532, }, D { l: 14, t: 0, i: 340, }, D { l: 145, t: 0, i: 88, }, D { l: 139, t: 11, i: 328, }, D { l: 135, t: 0, i: 1964, }, D { l: 132, t: 10, i: 411, }, D { l: 4, t: 10, i: 80 }, D { l: 5, t: 10, i: 44 }, D { l: 137, t: 11, i: 133, }, D { l: 5, t: 11, i: 110, }, D { l: 6, t: 11, i: 169, }, D { l: 6, t: 11, i: 1702, }, D { l: 7, t: 11, i: 400, }, D { l: 8, t: 11, i: 538, }, D { l: 9, t: 11, i: 184, }, D { l: 9, t: 11, i: 524, }, D { l: 140, t: 11, i: 218, }, D { l: 4, t: 0, i: 521 }, D { l: 5, t: 10, i: 299, }, D { l: 7, t: 10, i: 1083, }, D { l: 140, t: 11, i: 554, }, D { l: 6, t: 11, i: 133, }, D { l: 9, t: 11, i: 353, }, D { l: 12, t: 11, i: 628, }, D { l: 146, t: 11, i: 79, }, D { l: 6, t: 0, i: 215 }, D { l: 7, t: 0, i: 584 }, D { l: 7, t: 0, i: 1028, }, D { l: 7, t: 0, i: 1473, }, D { l: 7, t: 0, i: 1721, }, D { l: 9, t: 0, i: 424 }, D { l: 138, t: 0, i: 779, }, D { l: 7, t: 0, i: 857 }, D { l: 7, t: 0, i: 1209, }, D { l: 7, t: 10, i: 1713, }, D { l: 9, t: 10, i: 537, }, D { l: 10, t: 10, i: 165, }, D { l: 12, t: 10, i: 219, }, D { l: 140, t: 10, i: 561, }, D { l: 4, t: 10, i: 219, }, D { l: 6, t: 11, i: 93 }, D { l: 7, t: 11, i: 1422, }, D { l: 7, t: 10, i: 1761, }, D { l: 7, t: 11, i: 1851, }, D { l: 8, t: 11, i: 673, }, D { l: 9, t: 10, i: 86 }, D { l: 9, t: 11, i: 529, }, D { l: 140, t: 11, i: 43, }, D { l: 137, t: 11, i: 371, }, D { l: 136, t: 0, i: 671, }, D { l: 5, t: 0, i: 328 }, D { l: 135, t: 0, i: 918, }, D { l: 132, t: 0, i: 529, }, D { l: 9, t: 11, i: 25 }, D { l: 10, t: 11, i: 467, }, D { l: 138, t: 11, i: 559, }, D { l: 4, t: 11, i: 335, }, D { l: 135, t: 11, i: 942, }, D { l: 134, t: 0, i: 716, }, D { l: 134, t: 0, i: 1509, }, D { l: 6, t: 0, i: 67 }, D { l: 7, t: 0, i: 258 }, D { l: 7, t: 0, i: 1630, }, D { l: 9, t: 0, i: 354 }, D { l: 9, t: 0, i: 675 }, D { l: 10, t: 0, i: 830, }, D { l: 14, t: 0, i: 80 }, D { l: 17, t: 0, i: 80 }, D { l: 140, t: 10, i: 428, }, D { l: 134, t: 0, i: 1112, }, D { l: 6, t: 0, i: 141 }, D { l: 7, t: 0, i: 225 }, D { l: 9, t: 0, i: 59 }, D { l: 9, t: 0, i: 607 }, D { l: 10, t: 0, i: 312, }, D { l: 11, t: 0, i: 687, }, D { l: 12, t: 0, i: 555, }, D { l: 13, t: 0, i: 373, }, D { l: 13, t: 0, i: 494, }, D { l: 148, t: 0, i: 58, }, D { l: 133, t: 10, i: 514, }, D { l: 8, t: 11, i: 39 }, D { l: 10, t: 11, i: 773, }, D { l: 11, t: 11, i: 84, }, D { l: 12, t: 11, i: 205, }, D { l: 142, t: 11, i: 1, }, D { l: 8, t: 0, i: 783 }, D { l: 5, t: 11, i: 601, }, D { l: 133, t: 11, i: 870, }, D { l: 136, t: 11, i: 594, }, D { l: 4, t: 10, i: 55 }, D { l: 5, t: 10, i: 301, }, D { l: 6, t: 10, i: 571, }, D { l: 14, t: 10, i: 49, }, D { l: 146, t: 10, i: 102, }, D { l: 132, t: 11, i: 181, }, D { l: 134, t: 11, i: 1652, }, D { l: 133, t: 10, i: 364, }, D { l: 4, t: 11, i: 97 }, D { l: 5, t: 11, i: 147, }, D { l: 6, t: 11, i: 286, }, D { l: 7, t: 11, i: 1362, }, D { l: 141, t: 11, i: 176, }, D { l: 4, t: 10, i: 76 }, D { l: 7, t: 10, i: 1550, }, D { l: 9, t: 10, i: 306, }, D { l: 9, t: 10, i: 430, }, D { l: 9, t: 10, i: 663, }, D { l: 10, t: 10, i: 683, }, D { l: 11, t: 10, i: 427, }, D { l: 11, t: 10, i: 753, }, D { l: 12, t: 10, i: 334, }, D { l: 12, t: 10, i: 442, }, D { l: 14, t: 10, i: 258, }, D { l: 14, t: 10, i: 366, }, D { l: 143, t: 10, i: 131, }, D { l: 137, t: 10, i: 52, }, D { l: 6, t: 0, i: 955 }, D { l: 134, t: 0, i: 1498, }, D { l: 6, t: 11, i: 375, }, D { l: 7, t: 11, i: 169, }, D { l: 7, t: 11, i: 254, }, D { l: 136, t: 11, i: 780, }, D { l: 7, t: 0, i: 430 }, D { l: 11, t: 0, i: 46 }, D { l: 14, t: 0, i: 343, }, D { l: 142, t: 11, i: 343, }, D { l: 135, t: 0, i: 1183, }, D { l: 5, t: 0, i: 602 }, D { l: 7, t: 0, i: 2018, }, D { l: 9, t: 0, i: 418 }, D { l: 9, t: 0, i: 803 }, D { l: 135, t: 11, i: 1447, }, D { l: 8, t: 0, i: 677 }, D { l: 135, t: 11, i: 1044, }, D { l: 139, t: 11, i: 285, }, D { l: 4, t: 10, i: 656, }, D { l: 135, t: 10, i: 779, }, D { l: 135, t: 10, i: 144, }, D { l: 5, t: 11, i: 629, }, D { l: 135, t: 11, i: 1549, }, D { l: 135, t: 10, i: 1373, }, D { l: 138, t: 11, i: 209, }, D { l: 7, t: 10, i: 554, }, D { l: 7, t: 10, i: 605, }, D { l: 141, t: 10, i: 10, }, D { l: 5, t: 10, i: 838, }, D { l: 5, t: 10, i: 841, }, D { l: 134, t: 10, i: 1649, }, D { l: 133, t: 10, i: 1012, }, D { l: 6, t: 0, i: 1357, }, D { l: 134, t: 0, i: 1380, }, D { l: 144, t: 0, i: 53, }, D { l: 6, t: 0, i: 590 }, D { l: 7, t: 10, i: 365, }, D { l: 7, t: 10, i: 1357, }, D { l: 7, t: 10, i: 1497, }, D { l: 8, t: 10, i: 154, }, D { l: 141, t: 10, i: 281, }, D { l: 133, t: 10, i: 340, }, D { l: 132, t: 11, i: 420, }, D { l: 135, t: 0, i: 329, }, D { l: 147, t: 11, i: 32, }, D { l: 4, t: 0, i: 469 }, D { l: 10, t: 11, i: 429, }, D { l: 139, t: 10, i: 495, }, D { l: 8, t: 10, i: 261, }, D { l: 9, t: 10, i: 144, }, D { l: 9, t: 10, i: 466, }, D { l: 10, t: 10, i: 370, }, D { l: 12, t: 10, i: 470, }, D { l: 13, t: 10, i: 144, }, D { l: 142, t: 10, i: 348, }, D { l: 142, t: 0, i: 460, }, D { l: 4, t: 11, i: 325, }, D { l: 9, t: 10, i: 897, }, D { l: 138, t: 11, i: 125, }, D { l: 6, t: 0, i: 1743, }, D { l: 6, t: 10, i: 248, }, D { l: 9, t: 10, i: 546, }, D { l: 10, t: 10, i: 535, }, D { l: 11, t: 10, i: 681, }, D { l: 141, t: 10, i: 135, }, D { l: 4, t: 0, i: 990 }, D { l: 5, t: 0, i: 929 }, D { l: 6, t: 0, i: 340 }, D { l: 8, t: 0, i: 376 }, D { l: 8, t: 0, i: 807 }, D { l: 8, t: 0, i: 963 }, D { l: 8, t: 0, i: 980 }, D { l: 138, t: 0, i: 1007, }, D { l: 134, t: 0, i: 1603, }, D { l: 140, t: 0, i: 250, }, D { l: 4, t: 11, i: 714, }, D { l: 133, t: 11, i: 469, }, D { l: 134, t: 10, i: 567, }, D { l: 136, t: 10, i: 445, }, D { l: 5, t: 0, i: 218 }, D { l: 7, t: 0, i: 1610, }, D { l: 8, t: 0, i: 646 }, D { l: 10, t: 0, i: 83 }, D { l: 11, t: 11, i: 138, }, D { l: 140, t: 11, i: 40, }, D { l: 7, t: 0, i: 1512, }, D { l: 135, t: 0, i: 1794, }, D { l: 135, t: 11, i: 1216, }, D { l: 11, t: 0, i: 0 }, D { l: 16, t: 0, i: 78 }, D { l: 132, t: 11, i: 718, }, D { l: 133, t: 0, i: 571, }, D { l: 132, t: 0, i: 455, }, D { l: 134, t: 0, i: 1012, }, D { l: 5, t: 11, i: 124, }, D { l: 5, t: 11, i: 144, }, D { l: 6, t: 11, i: 548, }, D { l: 7, t: 11, i: 15 }, D { l: 7, t: 11, i: 153, }, D { l: 137, t: 11, i: 629, }, D { l: 142, t: 11, i: 10, }, D { l: 6, t: 11, i: 75 }, D { l: 7, t: 11, i: 1531, }, D { l: 8, t: 11, i: 416, }, D { l: 9, t: 11, i: 240, }, D { l: 9, t: 11, i: 275, }, D { l: 10, t: 11, i: 100, }, D { l: 11, t: 11, i: 658, }, D { l: 11, t: 11, i: 979, }, D { l: 12, t: 11, i: 86, }, D { l: 13, t: 11, i: 468, }, D { l: 14, t: 11, i: 66, }, D { l: 14, t: 11, i: 207, }, D { l: 15, t: 11, i: 20, }, D { l: 15, t: 11, i: 25, }, D { l: 144, t: 11, i: 58, }, D { l: 132, t: 10, i: 577, }, D { l: 5, t: 11, i: 141, }, D { l: 5, t: 11, i: 915, }, D { l: 6, t: 11, i: 1783, }, D { l: 7, t: 11, i: 211, }, D { l: 7, t: 11, i: 698, }, D { l: 7, t: 11, i: 1353, }, D { l: 9, t: 11, i: 83 }, D { l: 9, t: 11, i: 281, }, D { l: 10, t: 11, i: 376, }, D { l: 10, t: 11, i: 431, }, D { l: 11, t: 11, i: 543, }, D { l: 12, t: 11, i: 664, }, D { l: 13, t: 11, i: 280, }, D { l: 13, t: 11, i: 428, }, D { l: 14, t: 11, i: 61, }, D { l: 14, t: 11, i: 128, }, D { l: 17, t: 11, i: 52, }, D { l: 145, t: 11, i: 81, }, D { l: 6, t: 0, i: 161 }, D { l: 7, t: 0, i: 372 }, D { l: 137, t: 0, i: 597, }, D { l: 132, t: 0, i: 349, }, D { l: 10, t: 11, i: 702, }, D { l: 139, t: 11, i: 245, }, D { l: 134, t: 0, i: 524, }, D { l: 134, t: 10, i: 174, }, D { l: 6, t: 0, i: 432 }, D { l: 9, t: 0, i: 751 }, D { l: 139, t: 0, i: 322, }, D { l: 147, t: 11, i: 94, }, D { l: 4, t: 11, i: 338, }, D { l: 133, t: 11, i: 400, }, D { l: 5, t: 0, i: 468 }, D { l: 10, t: 0, i: 325, }, D { l: 11, t: 0, i: 856, }, D { l: 12, t: 0, i: 345, }, D { l: 143, t: 0, i: 104, }, D { l: 133, t: 0, i: 223, }, D { l: 132, t: 0, i: 566, }, D { l: 4, t: 11, i: 221, }, D { l: 5, t: 11, i: 659, }, D { l: 5, t: 11, i: 989, }, D { l: 7, t: 11, i: 697, }, D { l: 7, t: 11, i: 1211, }, D { l: 138, t: 11, i: 284, }, D { l: 135, t: 11, i: 1070, }, D { l: 4, t: 0, i: 59 }, D { l: 135, t: 0, i: 1394, }, D { l: 6, t: 0, i: 436 }, D { l: 11, t: 0, i: 481, }, D { l: 5, t: 10, i: 878, }, D { l: 133, t: 10, i: 972, }, D { l: 4, t: 0, i: 48 }, D { l: 5, t: 0, i: 271 }, D { l: 135, t: 0, i: 953, }, D { l: 5, t: 0, i: 610 }, D { l: 136, t: 0, i: 457, }, D { l: 4, t: 0, i: 773 }, D { l: 5, t: 0, i: 618 }, D { l: 137, t: 0, i: 756, }, D { l: 133, t: 0, i: 755, }, D { l: 135, t: 0, i: 1217, }, D { l: 138, t: 11, i: 507, }, D { l: 132, t: 10, i: 351, }, D { l: 132, t: 0, i: 197, }, D { l: 143, t: 11, i: 78, }, D { l: 4, t: 11, i: 188, }, D { l: 7, t: 11, i: 805, }, D { l: 11, t: 11, i: 276, }, D { l: 142, t: 11, i: 293, }, D { l: 5, t: 11, i: 884, }, D { l: 139, t: 11, i: 991, }, D { l: 132, t: 10, i: 286, }, D { l: 10, t: 0, i: 259, }, D { l: 10, t: 0, i: 428, }, D { l: 7, t: 10, i: 438, }, D { l: 7, t: 10, i: 627, }, D { l: 7, t: 10, i: 1516, }, D { l: 8, t: 10, i: 40 }, D { l: 9, t: 10, i: 56 }, D { l: 9, t: 10, i: 294, }, D { l: 11, t: 10, i: 969, }, D { l: 11, t: 10, i: 995, }, D { l: 146, t: 10, i: 148, }, D { l: 4, t: 0, i: 356 }, D { l: 5, t: 0, i: 217 }, D { l: 5, t: 0, i: 492 }, D { l: 5, t: 0, i: 656 }, D { l: 8, t: 0, i: 544 }, D { l: 136, t: 11, i: 544, }, D { l: 5, t: 0, i: 259 }, D { l: 6, t: 0, i: 1230, }, D { l: 7, t: 0, i: 414 }, D { l: 7, t: 0, i: 854 }, D { l: 142, t: 0, i: 107, }, D { l: 132, t: 0, i: 1007, }, D { l: 15, t: 0, i: 14 }, D { l: 144, t: 0, i: 5 }, D { l: 6, t: 0, i: 1580, }, D { l: 132, t: 10, i: 738, }, D { l: 132, t: 11, i: 596, }, D { l: 132, t: 0, i: 673, }, D { l: 133, t: 10, i: 866, }, D { l: 6, t: 0, i: 1843, }, D { l: 135, t: 11, i: 1847, }, D { l: 4, t: 0, i: 165 }, D { l: 7, t: 0, i: 1398, }, D { l: 135, t: 0, i: 1829, }, D { l: 135, t: 11, i: 1634, }, D { l: 147, t: 11, i: 65, }, D { l: 6, t: 0, i: 885 }, D { l: 6, t: 0, i: 1009, }, D { l: 137, t: 0, i: 809, }, D { l: 133, t: 10, i: 116, }, D { l: 132, t: 10, i: 457, }, D { l: 136, t: 11, i: 770, }, D { l: 9, t: 0, i: 498 }, D { l: 12, t: 0, i: 181, }, D { l: 10, t: 11, i: 361, }, D { l: 142, t: 11, i: 316, }, D { l: 134, t: 11, i: 595, }, D { l: 5, t: 0, i: 9 }, D { l: 7, t: 0, i: 297 }, D { l: 7, t: 0, i: 966 }, D { l: 140, t: 0, i: 306, }, D { l: 4, t: 11, i: 89 }, D { l: 5, t: 11, i: 489, }, D { l: 6, t: 11, i: 315, }, D { l: 7, t: 11, i: 553, }, D { l: 7, t: 11, i: 1745, }, D { l: 138, t: 11, i: 243, }, D { l: 134, t: 0, i: 1487, }, D { l: 132, t: 0, i: 437, }, D { l: 5, t: 0, i: 146 }, D { l: 6, t: 0, i: 411 }, D { l: 138, t: 0, i: 721, }, D { l: 5, t: 10, i: 527, }, D { l: 6, t: 10, i: 189, }, D { l: 135, t: 10, i: 859, }, D { l: 11, t: 10, i: 104, }, D { l: 11, t: 10, i: 554, }, D { l: 15, t: 10, i: 60, }, D { l: 143, t: 10, i: 125, }, D { l: 6, t: 11, i: 1658, }, D { l: 9, t: 11, i: 3 }, D { l: 10, t: 11, i: 154, }, D { l: 11, t: 11, i: 641, }, D { l: 13, t: 11, i: 85, }, D { l: 13, t: 11, i: 201, }, D { l: 141, t: 11, i: 346, }, D { l: 6, t: 0, i: 177 }, D { l: 135, t: 0, i: 467, }, D { l: 134, t: 0, i: 1377, }, D { l: 134, t: 10, i: 116, }, D { l: 136, t: 11, i: 645, }, D { l: 4, t: 11, i: 166, }, D { l: 5, t: 11, i: 505, }, D { l: 6, t: 11, i: 1670, }, D { l: 137, t: 11, i: 110, }, D { l: 133, t: 10, i: 487, }, D { l: 4, t: 10, i: 86 }, D { l: 5, t: 10, i: 667, }, D { l: 5, t: 10, i: 753, }, D { l: 6, t: 10, i: 316, }, D { l: 6, t: 10, i: 455, }, D { l: 135, t: 10, i: 946, }, D { l: 133, t: 0, i: 200, }, D { l: 132, t: 0, i: 959, }, D { l: 6, t: 0, i: 1928, }, D { l: 134, t: 0, i: 1957, }, D { l: 139, t: 11, i: 203, }, D { l: 150, t: 10, i: 45, }, D { l: 4, t: 10, i: 79 }, D { l: 7, t: 10, i: 1773, }, D { l: 10, t: 10, i: 450, }, D { l: 11, t: 10, i: 589, }, D { l: 13, t: 10, i: 332, }, D { l: 13, t: 10, i: 493, }, D { l: 14, t: 10, i: 183, }, D { l: 14, t: 10, i: 334, }, D { l: 14, t: 10, i: 362, }, D { l: 14, t: 10, i: 368, }, D { l: 14, t: 10, i: 376, }, D { l: 14, t: 10, i: 379, }, D { l: 19, t: 10, i: 90, }, D { l: 19, t: 10, i: 103, }, D { l: 19, t: 10, i: 127, }, D { l: 148, t: 10, i: 90, }, D { l: 6, t: 0, i: 1435, }, D { l: 135, t: 11, i: 1275, }, D { l: 134, t: 0, i: 481, }, D { l: 7, t: 11, i: 445, }, D { l: 8, t: 11, i: 307, }, D { l: 8, t: 11, i: 704, }, D { l: 10, t: 11, i: 41, }, D { l: 10, t: 11, i: 439, }, D { l: 11, t: 11, i: 237, }, D { l: 11, t: 11, i: 622, }, D { l: 140, t: 11, i: 201, }, D { l: 135, t: 11, i: 869, }, D { l: 4, t: 0, i: 84 }, D { l: 7, t: 0, i: 1482, }, D { l: 10, t: 0, i: 76 }, D { l: 138, t: 0, i: 142, }, D { l: 11, t: 11, i: 277, }, D { l: 144, t: 11, i: 14, }, D { l: 135, t: 11, i: 1977, }, D { l: 4, t: 11, i: 189, }, D { l: 5, t: 11, i: 713, }, D { l: 136, t: 11, i: 57, }, D { l: 133, t: 0, i: 1015, }, D { l: 138, t: 11, i: 371, }, D { l: 4, t: 0, i: 315 }, D { l: 5, t: 0, i: 507 }, D { l: 135, t: 0, i: 1370, }, D { l: 4, t: 11, i: 552, }, D { l: 142, t: 10, i: 381, }, D { l: 9, t: 0, i: 759 }, D { l: 16, t: 0, i: 31 }, D { l: 16, t: 0, i: 39 }, D { l: 16, t: 0, i: 75 }, D { l: 18, t: 0, i: 24 }, D { l: 20, t: 0, i: 42 }, D { l: 152, t: 0, i: 1 }, D { l: 134, t: 0, i: 712, }, D { l: 134, t: 0, i: 1722, }, D { l: 133, t: 10, i: 663, }, D { l: 133, t: 10, i: 846, }, D { l: 8, t: 0, i: 222 }, D { l: 8, t: 0, i: 476 }, D { l: 9, t: 0, i: 238 }, D { l: 11, t: 0, i: 516, }, D { l: 11, t: 0, i: 575, }, D { l: 15, t: 0, i: 109, }, D { l: 146, t: 0, i: 100, }, D { l: 7, t: 0, i: 1402, }, D { l: 7, t: 0, i: 1414, }, D { l: 12, t: 0, i: 456, }, D { l: 5, t: 10, i: 378, }, D { l: 8, t: 10, i: 465, }, D { l: 9, t: 10, i: 286, }, D { l: 10, t: 10, i: 185, }, D { l: 10, t: 10, i: 562, }, D { l: 10, t: 10, i: 635, }, D { l: 11, t: 10, i: 31, }, D { l: 11, t: 10, i: 393, }, D { l: 13, t: 10, i: 312, }, D { l: 18, t: 10, i: 65, }, D { l: 18, t: 10, i: 96, }, D { l: 147, t: 10, i: 89, }, D { l: 4, t: 0, i: 986 }, D { l: 6, t: 0, i: 1958, }, D { l: 6, t: 0, i: 2032, }, D { l: 8, t: 0, i: 934 }, D { l: 138, t: 0, i: 985, }, D { l: 7, t: 10, i: 1880, }, D { l: 9, t: 10, i: 680, }, D { l: 139, t: 10, i: 798, }, D { l: 134, t: 10, i: 1770, }, D { l: 145, t: 11, i: 49, }, D { l: 132, t: 11, i: 614, }, D { l: 132, t: 10, i: 648, }, D { l: 5, t: 10, i: 945, }, D { l: 6, t: 10, i: 1656, }, D { l: 6, t: 10, i: 1787, }, D { l: 7, t: 10, i: 167, }, D { l: 8, t: 10, i: 824, }, D { l: 9, t: 10, i: 391, }, D { l: 10, t: 10, i: 375, }, D { l: 139, t: 10, i: 185, }, D { l: 138, t: 11, i: 661, }, D { l: 7, t: 0, i: 1273, }, D { l: 135, t: 11, i: 1945, }, D { l: 7, t: 0, i: 706 }, D { l: 7, t: 0, i: 1058, }, D { l: 138, t: 0, i: 538, }, D { l: 7, t: 10, i: 1645, }, D { l: 8, t: 10, i: 352, }, D { l: 137, t: 10, i: 249, }, D { l: 132, t: 10, i: 152, }, D { l: 11, t: 0, i: 92 }, D { l: 11, t: 0, i: 196, }, D { l: 11, t: 0, i: 409, }, D { l: 11, t: 0, i: 450, }, D { l: 11, t: 0, i: 666, }, D { l: 11, t: 0, i: 777, }, D { l: 12, t: 0, i: 262, }, D { l: 13, t: 0, i: 385, }, D { l: 13, t: 0, i: 393, }, D { l: 15, t: 0, i: 115, }, D { l: 16, t: 0, i: 45 }, D { l: 145, t: 0, i: 82, }, D { l: 133, t: 10, i: 1006, }, D { l: 6, t: 0, i: 40 }, D { l: 135, t: 0, i: 1781, }, D { l: 9, t: 11, i: 614, }, D { l: 139, t: 11, i: 327, }, D { l: 5, t: 10, i: 420, }, D { l: 135, t: 10, i: 1449, }, D { l: 135, t: 0, i: 431, }, D { l: 10, t: 0, i: 97 }, D { l: 135, t: 10, i: 832, }, D { l: 6, t: 0, i: 423 }, D { l: 7, t: 0, i: 665 }, D { l: 135, t: 0, i: 1210, }, D { l: 7, t: 0, i: 237 }, D { l: 8, t: 0, i: 664 }, D { l: 9, t: 0, i: 42 }, D { l: 9, t: 0, i: 266 }, D { l: 9, t: 0, i: 380 }, D { l: 9, t: 0, i: 645 }, D { l: 10, t: 0, i: 177, }, D { l: 138, t: 0, i: 276, }, D { l: 7, t: 0, i: 264 }, D { l: 133, t: 10, i: 351, }, D { l: 8, t: 0, i: 213 }, D { l: 5, t: 10, i: 40 }, D { l: 7, t: 10, i: 598, }, D { l: 7, t: 10, i: 1638, }, D { l: 9, t: 10, i: 166, }, D { l: 9, t: 10, i: 640, }, D { l: 9, t: 10, i: 685, }, D { l: 9, t: 10, i: 773, }, D { l: 11, t: 10, i: 215, }, D { l: 13, t: 10, i: 65, }, D { l: 14, t: 10, i: 172, }, D { l: 14, t: 10, i: 317, }, D { l: 145, t: 10, i: 6, }, D { l: 5, t: 11, i: 84 }, D { l: 134, t: 11, i: 163, }, D { l: 8, t: 10, i: 60 }, D { l: 9, t: 10, i: 343, }, D { l: 139, t: 10, i: 769, }, D { l: 137, t: 0, i: 455, }, D { l: 133, t: 11, i: 410, }, D { l: 8, t: 0, i: 906 }, D { l: 12, t: 0, i: 700, }, D { l: 12, t: 0, i: 706, }, D { l: 140, t: 0, i: 729, }, D { l: 21, t: 11, i: 33, }, D { l: 150, t: 11, i: 40, }, D { l: 7, t: 10, i: 1951, }, D { l: 8, t: 10, i: 765, }, D { l: 8, t: 10, i: 772, }, D { l: 140, t: 10, i: 671, }, D { l: 7, t: 10, i: 108, }, D { l: 8, t: 10, i: 219, }, D { l: 8, t: 10, i: 388, }, D { l: 9, t: 10, i: 639, }, D { l: 9, t: 10, i: 775, }, D { l: 11, t: 10, i: 275, }, D { l: 140, t: 10, i: 464, }, D { l: 5, t: 11, i: 322, }, D { l: 7, t: 11, i: 1941, }, D { l: 8, t: 11, i: 186, }, D { l: 9, t: 11, i: 262, }, D { l: 10, t: 11, i: 187, }, D { l: 14, t: 11, i: 208, }, D { l: 146, t: 11, i: 130, }, D { l: 139, t: 0, i: 624, }, D { l: 8, t: 0, i: 574 }, D { l: 5, t: 11, i: 227, }, D { l: 140, t: 11, i: 29, }, D { l: 7, t: 11, i: 1546, }, D { l: 11, t: 11, i: 299, }, D { l: 142, t: 11, i: 407, }, D { l: 5, t: 10, i: 15 }, D { l: 6, t: 10, i: 56 }, D { l: 7, t: 10, i: 1758, }, D { l: 8, t: 10, i: 500, }, D { l: 9, t: 10, i: 730, }, D { l: 11, t: 10, i: 331, }, D { l: 13, t: 10, i: 150, }, D { l: 142, t: 10, i: 282, }, D { l: 7, t: 11, i: 1395, }, D { l: 8, t: 11, i: 486, }, D { l: 9, t: 11, i: 236, }, D { l: 9, t: 11, i: 878, }, D { l: 10, t: 11, i: 218, }, D { l: 11, t: 11, i: 95, }, D { l: 19, t: 11, i: 17, }, D { l: 147, t: 11, i: 31, }, D { l: 135, t: 11, i: 2043, }, D { l: 4, t: 0, i: 354 }, D { l: 146, t: 11, i: 4, }, D { l: 140, t: 11, i: 80, }, D { l: 135, t: 0, i: 1558, }, D { l: 134, t: 10, i: 1886, }, D { l: 5, t: 10, i: 205, }, D { l: 6, t: 10, i: 438, }, D { l: 137, t: 10, i: 711, }, D { l: 133, t: 11, i: 522, }, D { l: 133, t: 10, i: 534, }, D { l: 7, t: 0, i: 235 }, D { l: 7, t: 0, i: 1475, }, D { l: 15, t: 0, i: 68 }, D { l: 146, t: 0, i: 120, }, D { l: 137, t: 10, i: 691, }, D { l: 4, t: 0, i: 942 }, D { l: 6, t: 0, i: 1813, }, D { l: 8, t: 0, i: 917 }, D { l: 10, t: 0, i: 884, }, D { l: 12, t: 0, i: 696, }, D { l: 12, t: 0, i: 717, }, D { l: 12, t: 0, i: 723, }, D { l: 12, t: 0, i: 738, }, D { l: 12, t: 0, i: 749, }, D { l: 12, t: 0, i: 780, }, D { l: 16, t: 0, i: 97 }, D { l: 146, t: 0, i: 169, }, D { l: 6, t: 10, i: 443, }, D { l: 8, t: 11, i: 562, }, D { l: 9, t: 10, i: 237, }, D { l: 9, t: 10, i: 571, }, D { l: 9, t: 10, i: 695, }, D { l: 10, t: 10, i: 139, }, D { l: 11, t: 10, i: 715, }, D { l: 12, t: 10, i: 417, }, D { l: 141, t: 10, i: 421, }, D { l: 135, t: 0, i: 957, }, D { l: 133, t: 0, i: 830, }, D { l: 134, t: 11, i: 1771, }, D { l: 146, t: 0, i: 23, }, D { l: 5, t: 0, i: 496 }, D { l: 6, t: 0, i: 694 }, D { l: 7, t: 0, i: 203 }, D { l: 7, t: 11, i: 1190, }, D { l: 137, t: 11, i: 620, }, D { l: 137, t: 11, i: 132, }, D { l: 6, t: 0, i: 547 }, D { l: 134, t: 0, i: 1549, }, D { l: 8, t: 11, i: 258, }, D { l: 9, t: 11, i: 208, }, D { l: 137, t: 11, i: 359, }, D { l: 4, t: 0, i: 864 }, D { l: 5, t: 0, i: 88 }, D { l: 137, t: 0, i: 239, }, D { l: 135, t: 11, i: 493, }, D { l: 4, t: 11, i: 317, }, D { l: 135, t: 11, i: 1279, }, D { l: 132, t: 11, i: 477, }, D { l: 4, t: 10, i: 578, }, D { l: 5, t: 11, i: 63 }, D { l: 133, t: 11, i: 509, }, D { l: 7, t: 0, i: 650 }, D { l: 135, t: 0, i: 1310, }, D { l: 7, t: 0, i: 1076, }, D { l: 9, t: 0, i: 80 }, D { l: 11, t: 0, i: 78 }, D { l: 11, t: 0, i: 421, }, D { l: 11, t: 0, i: 534, }, D { l: 140, t: 0, i: 545, }, D { l: 132, t: 11, i: 288, }, D { l: 12, t: 0, i: 553, }, D { l: 14, t: 0, i: 118, }, D { l: 133, t: 10, i: 923, }, D { l: 7, t: 0, i: 274 }, D { l: 11, t: 0, i: 479, }, D { l: 139, t: 0, i: 507, }, D { l: 8, t: 11, i: 89 }, D { l: 8, t: 11, i: 620, }, D { l: 9, t: 11, i: 49 }, D { l: 10, t: 11, i: 774, }, D { l: 11, t: 11, i: 628, }, D { l: 12, t: 11, i: 322, }, D { l: 143, t: 11, i: 124, }, D { l: 4, t: 0, i: 497 }, D { l: 135, t: 0, i: 1584, }, D { l: 7, t: 0, i: 261 }, D { l: 7, t: 0, i: 1115, }, D { l: 7, t: 0, i: 1354, }, D { l: 7, t: 0, i: 1404, }, D { l: 7, t: 0, i: 1588, }, D { l: 7, t: 0, i: 1705, }, D { l: 7, t: 0, i: 1902, }, D { l: 9, t: 0, i: 465 }, D { l: 10, t: 0, i: 248, }, D { l: 10, t: 0, i: 349, }, D { l: 10, t: 0, i: 647, }, D { l: 11, t: 0, i: 527, }, D { l: 11, t: 0, i: 660, }, D { l: 11, t: 0, i: 669, }, D { l: 12, t: 0, i: 529, }, D { l: 13, t: 0, i: 305, }, D { l: 132, t: 10, i: 924, }, D { l: 133, t: 10, i: 665, }, D { l: 136, t: 0, i: 13, }, D { l: 6, t: 0, i: 791 }, D { l: 138, t: 11, i: 120, }, D { l: 7, t: 0, i: 642 }, D { l: 8, t: 0, i: 250 }, D { l: 11, t: 0, i: 123, }, D { l: 11, t: 0, i: 137, }, D { l: 13, t: 0, i: 48 }, D { l: 142, t: 0, i: 95, }, D { l: 4, t: 10, i: 265, }, D { l: 7, t: 10, i: 807, }, D { l: 135, t: 10, i: 950, }, D { l: 5, t: 10, i: 93 }, D { l: 140, t: 10, i: 267, }, D { l: 135, t: 0, i: 1429, }, D { l: 4, t: 0, i: 949 }, D { l: 10, t: 0, i: 885, }, D { l: 10, t: 0, i: 891, }, D { l: 10, t: 0, i: 900, }, D { l: 10, t: 0, i: 939, }, D { l: 12, t: 0, i: 760, }, D { l: 142, t: 0, i: 449, }, D { l: 139, t: 11, i: 366, }, D { l: 132, t: 0, i: 818, }, D { l: 134, t: 11, i: 85, }, D { l: 135, t: 10, i: 994, }, D { l: 7, t: 0, i: 330 }, D { l: 5, t: 10, i: 233, }, D { l: 5, t: 10, i: 320, }, D { l: 6, t: 10, i: 140, }, D { l: 136, t: 10, i: 295, }, D { l: 4, t: 0, i: 1004, }, D { l: 8, t: 0, i: 982 }, D { l: 136, t: 0, i: 993, }, D { l: 133, t: 10, i: 978, }, D { l: 4, t: 10, i: 905, }, D { l: 6, t: 10, i: 1701, }, D { l: 137, t: 10, i: 843, }, D { l: 10, t: 0, i: 545, }, D { l: 140, t: 0, i: 301, }, D { l: 6, t: 0, i: 947 }, D { l: 134, t: 0, i: 1062, }, D { l: 134, t: 0, i: 1188, }, D { l: 4, t: 0, i: 904 }, D { l: 5, t: 0, i: 794 }, D { l: 152, t: 10, i: 6, }, D { l: 134, t: 0, i: 1372, }, D { l: 135, t: 11, i: 608, }, D { l: 5, t: 11, i: 279, }, D { l: 6, t: 11, i: 235, }, D { l: 7, t: 11, i: 468, }, D { l: 8, t: 11, i: 446, }, D { l: 9, t: 11, i: 637, }, D { l: 10, t: 11, i: 717, }, D { l: 11, t: 11, i: 738, }, D { l: 140, t: 11, i: 514, }, D { l: 132, t: 10, i: 509, }, D { l: 5, t: 11, i: 17 }, D { l: 6, t: 11, i: 371, }, D { l: 137, t: 11, i: 528, }, D { l: 132, t: 0, i: 693, }, D { l: 4, t: 11, i: 115, }, D { l: 5, t: 11, i: 669, }, D { l: 6, t: 11, i: 407, }, D { l: 8, t: 11, i: 311, }, D { l: 11, t: 11, i: 10, }, D { l: 141, t: 11, i: 5, }, D { l: 11, t: 0, i: 377, }, D { l: 7, t: 10, i: 273, }, D { l: 137, t: 11, i: 381, }, D { l: 135, t: 0, i: 695, }, D { l: 7, t: 0, i: 386 }, D { l: 138, t: 0, i: 713, }, D { l: 135, t: 10, i: 1041, }, D { l: 134, t: 0, i: 1291, }, D { l: 6, t: 0, i: 7 }, D { l: 6, t: 0, i: 35 }, D { l: 7, t: 0, i: 147 }, D { l: 7, t: 0, i: 1069, }, D { l: 7, t: 0, i: 1568, }, D { l: 7, t: 0, i: 1575, }, D { l: 7, t: 0, i: 1917, }, D { l: 8, t: 0, i: 43 }, D { l: 8, t: 0, i: 208 }, D { l: 9, t: 0, i: 128 }, D { l: 9, t: 0, i: 866 }, D { l: 10, t: 0, i: 20 }, D { l: 11, t: 0, i: 981, }, D { l: 147, t: 0, i: 33, }, D { l: 7, t: 0, i: 893 }, D { l: 141, t: 0, i: 424, }, D { l: 139, t: 10, i: 234, }, D { l: 150, t: 11, i: 56, }, D { l: 5, t: 11, i: 779, }, D { l: 5, t: 11, i: 807, }, D { l: 6, t: 11, i: 1655, }, D { l: 134, t: 11, i: 1676, }, D { l: 5, t: 10, i: 802, }, D { l: 7, t: 10, i: 2021, }, D { l: 136, t: 10, i: 805, }, D { l: 4, t: 11, i: 196, }, D { l: 5, t: 10, i: 167, }, D { l: 5, t: 11, i: 558, }, D { l: 5, t: 10, i: 899, }, D { l: 5, t: 11, i: 949, }, D { l: 6, t: 10, i: 410, }, D { l: 137, t: 10, i: 777, }, D { l: 137, t: 10, i: 789, }, D { l: 134, t: 10, i: 1705, }, D { l: 8, t: 0, i: 904 }, D { l: 140, t: 0, i: 787, }, D { l: 6, t: 0, i: 322 }, D { l: 9, t: 0, i: 552 }, D { l: 11, t: 0, i: 274, }, D { l: 13, t: 0, i: 209, }, D { l: 13, t: 0, i: 499, }, D { l: 14, t: 0, i: 85 }, D { l: 15, t: 0, i: 126, }, D { l: 145, t: 0, i: 70, }, D { l: 135, t: 10, i: 10, }, D { l: 5, t: 10, i: 11 }, D { l: 6, t: 10, i: 117, }, D { l: 6, t: 10, i: 485, }, D { l: 7, t: 10, i: 1133, }, D { l: 9, t: 10, i: 582, }, D { l: 9, t: 10, i: 594, }, D { l: 11, t: 10, i: 21, }, D { l: 11, t: 10, i: 818, }, D { l: 12, t: 10, i: 535, }, D { l: 141, t: 10, i: 86, }, D { l: 4, t: 10, i: 264, }, D { l: 7, t: 10, i: 1067, }, D { l: 8, t: 10, i: 204, }, D { l: 8, t: 10, i: 385, }, D { l: 139, t: 10, i: 953, }, D { l: 132, t: 11, i: 752, }, D { l: 138, t: 10, i: 56, }, D { l: 133, t: 10, i: 470, }, D { l: 6, t: 0, i: 1808, }, D { l: 8, t: 0, i: 83 }, D { l: 8, t: 0, i: 742 }, D { l: 8, t: 0, i: 817 }, D { l: 9, t: 0, i: 28 }, D { l: 9, t: 0, i: 29 }, D { l: 9, t: 0, i: 885 }, D { l: 10, t: 0, i: 387, }, D { l: 11, t: 0, i: 633, }, D { l: 11, t: 0, i: 740, }, D { l: 13, t: 0, i: 235, }, D { l: 13, t: 0, i: 254, }, D { l: 15, t: 0, i: 143, }, D { l: 143, t: 0, i: 146, }, D { l: 140, t: 0, i: 49, }, D { l: 134, t: 0, i: 1832, }, D { l: 4, t: 11, i: 227, }, D { l: 5, t: 11, i: 159, }, D { l: 5, t: 11, i: 409, }, D { l: 7, t: 11, i: 80 }, D { l: 10, t: 11, i: 294, }, D { l: 10, t: 11, i: 479, }, D { l: 12, t: 11, i: 418, }, D { l: 14, t: 11, i: 50, }, D { l: 14, t: 11, i: 249, }, D { l: 142, t: 11, i: 295, }, D { l: 7, t: 11, i: 1470, }, D { l: 8, t: 11, i: 66 }, D { l: 8, t: 11, i: 137, }, D { l: 8, t: 11, i: 761, }, D { l: 9, t: 11, i: 638, }, D { l: 11, t: 11, i: 80, }, D { l: 11, t: 11, i: 212, }, D { l: 11, t: 11, i: 368, }, D { l: 11, t: 11, i: 418, }, D { l: 12, t: 11, i: 8 }, D { l: 13, t: 11, i: 15, }, D { l: 16, t: 11, i: 61, }, D { l: 17, t: 11, i: 59, }, D { l: 19, t: 11, i: 28, }, D { l: 148, t: 11, i: 84, }, D { l: 139, t: 10, i: 1015, }, D { l: 138, t: 11, i: 468, }, D { l: 135, t: 0, i: 421, }, D { l: 6, t: 0, i: 415 }, D { l: 7, t: 0, i: 1049, }, D { l: 137, t: 0, i: 442, }, D { l: 6, t: 11, i: 38 }, D { l: 7, t: 11, i: 1220, }, D { l: 8, t: 11, i: 185, }, D { l: 8, t: 11, i: 256, }, D { l: 9, t: 11, i: 22 }, D { l: 9, t: 11, i: 331, }, D { l: 10, t: 11, i: 738, }, D { l: 11, t: 11, i: 205, }, D { l: 11, t: 11, i: 540, }, D { l: 11, t: 11, i: 746, }, D { l: 13, t: 11, i: 399, }, D { l: 13, t: 11, i: 465, }, D { l: 14, t: 11, i: 88, }, D { l: 142, t: 11, i: 194, }, D { l: 139, t: 0, i: 289, }, D { l: 133, t: 10, i: 715, }, D { l: 4, t: 0, i: 110 }, D { l: 10, t: 0, i: 415, }, D { l: 10, t: 0, i: 597, }, D { l: 142, t: 0, i: 206, }, D { l: 4, t: 11, i: 159, }, D { l: 6, t: 11, i: 115, }, D { l: 7, t: 11, i: 252, }, D { l: 7, t: 11, i: 257, }, D { l: 7, t: 11, i: 1928, }, D { l: 8, t: 11, i: 69 }, D { l: 9, t: 11, i: 384, }, D { l: 10, t: 11, i: 91, }, D { l: 10, t: 11, i: 615, }, D { l: 12, t: 11, i: 375, }, D { l: 14, t: 11, i: 235, }, D { l: 18, t: 11, i: 117, }, D { l: 147, t: 11, i: 123, }, D { l: 5, t: 11, i: 911, }, D { l: 136, t: 11, i: 278, }, D { l: 7, t: 0, i: 205 }, D { l: 7, t: 0, i: 2000, }, D { l: 8, t: 10, i: 794, }, D { l: 9, t: 10, i: 400, }, D { l: 10, t: 10, i: 298, }, D { l: 142, t: 10, i: 228, }, D { l: 135, t: 11, i: 1774, }, D { l: 4, t: 11, i: 151, }, D { l: 7, t: 11, i: 1567, }, D { l: 8, t: 11, i: 351, }, D { l: 137, t: 11, i: 322, }, D { l: 136, t: 10, i: 724, }, D { l: 133, t: 11, i: 990, }, D { l: 7, t: 0, i: 1539, }, D { l: 11, t: 0, i: 512, }, D { l: 13, t: 0, i: 205, }, D { l: 19, t: 0, i: 30 }, D { l: 22, t: 0, i: 36 }, D { l: 23, t: 0, i: 19 }, D { l: 135, t: 11, i: 1539, }, D { l: 5, t: 11, i: 194, }, D { l: 7, t: 11, i: 1662, }, D { l: 9, t: 11, i: 90 }, D { l: 140, t: 11, i: 180, }, D { l: 6, t: 10, i: 190, }, D { l: 7, t: 10, i: 768, }, D { l: 135, t: 10, i: 1170, }, D { l: 134, t: 0, i: 1340, }, D { l: 4, t: 0, i: 283 }, D { l: 135, t: 0, i: 1194, }, D { l: 133, t: 11, i: 425, }, D { l: 133, t: 11, i: 971, }, D { l: 12, t: 0, i: 549, }, D { l: 14, t: 10, i: 67, }, D { l: 147, t: 10, i: 60, }, D { l: 135, t: 10, i: 1023, }, D { l: 134, t: 0, i: 1720, }, D { l: 138, t: 11, i: 587, }, D { l: 5, t: 11, i: 72 }, D { l: 6, t: 11, i: 264, }, D { l: 7, t: 11, i: 21 }, D { l: 7, t: 11, i: 46 }, D { l: 7, t: 11, i: 2013, }, D { l: 8, t: 11, i: 215, }, D { l: 8, t: 11, i: 513, }, D { l: 10, t: 11, i: 266, }, D { l: 139, t: 11, i: 22, }, D { l: 5, t: 0, i: 319 }, D { l: 135, t: 0, i: 534, }, D { l: 6, t: 10, i: 137, }, D { l: 9, t: 10, i: 75 }, D { l: 9, t: 10, i: 253, }, D { l: 10, t: 10, i: 194, }, D { l: 138, t: 10, i: 444, }, D { l: 7, t: 0, i: 1180, }, D { l: 20, t: 0, i: 112, }, D { l: 6, t: 11, i: 239, }, D { l: 7, t: 11, i: 118, }, D { l: 10, t: 11, i: 95, }, D { l: 11, t: 11, i: 603, }, D { l: 13, t: 11, i: 443, }, D { l: 14, t: 11, i: 160, }, D { l: 143, t: 11, i: 4, }, D { l: 134, t: 11, i: 431, }, D { l: 5, t: 11, i: 874, }, D { l: 6, t: 11, i: 1677, }, D { l: 11, t: 10, i: 643, }, D { l: 12, t: 10, i: 115, }, D { l: 143, t: 11, i: 0, }, D { l: 134, t: 0, i: 967, }, D { l: 6, t: 11, i: 65 }, D { l: 7, t: 11, i: 939, }, D { l: 7, t: 11, i: 1172, }, D { l: 7, t: 11, i: 1671, }, D { l: 9, t: 11, i: 540, }, D { l: 10, t: 11, i: 696, }, D { l: 11, t: 11, i: 265, }, D { l: 11, t: 11, i: 732, }, D { l: 11, t: 11, i: 928, }, D { l: 11, t: 11, i: 937, }, D { l: 12, t: 11, i: 399, }, D { l: 13, t: 11, i: 438, }, D { l: 149, t: 11, i: 19, }, D { l: 137, t: 11, i: 200, }, D { l: 135, t: 0, i: 1940, }, D { l: 5, t: 10, i: 760, }, D { l: 7, t: 10, i: 542, }, D { l: 8, t: 10, i: 135, }, D { l: 136, t: 10, i: 496, }, D { l: 140, t: 11, i: 44, }, D { l: 7, t: 11, i: 1655, }, D { l: 136, t: 11, i: 305, }, D { l: 7, t: 10, i: 319, }, D { l: 7, t: 10, i: 355, }, D { l: 7, t: 10, i: 763, }, D { l: 10, t: 10, i: 389, }, D { l: 145, t: 10, i: 43, }, D { l: 136, t: 0, i: 735, }, D { l: 138, t: 10, i: 786, }, D { l: 137, t: 11, i: 19, }, D { l: 132, t: 11, i: 696, }, D { l: 5, t: 0, i: 132 }, D { l: 9, t: 0, i: 486 }, D { l: 9, t: 0, i: 715 }, D { l: 10, t: 0, i: 458, }, D { l: 11, t: 0, i: 373, }, D { l: 11, t: 0, i: 668, }, D { l: 11, t: 0, i: 795, }, D { l: 11, t: 0, i: 897, }, D { l: 12, t: 0, i: 272, }, D { l: 12, t: 0, i: 424, }, D { l: 12, t: 0, i: 539, }, D { l: 12, t: 0, i: 558, }, D { l: 14, t: 0, i: 245, }, D { l: 14, t: 0, i: 263, }, D { l: 14, t: 0, i: 264, }, D { l: 14, t: 0, i: 393, }, D { l: 142, t: 0, i: 403, }, D { l: 10, t: 0, i: 38 }, D { l: 139, t: 0, i: 784, }, D { l: 132, t: 0, i: 838, }, D { l: 4, t: 11, i: 302, }, D { l: 135, t: 11, i: 1766, }, D { l: 133, t: 0, i: 379, }, D { l: 5, t: 0, i: 8 }, D { l: 6, t: 0, i: 89 }, D { l: 6, t: 0, i: 400 }, D { l: 7, t: 0, i: 1569, }, D { l: 7, t: 0, i: 1623, }, D { l: 7, t: 0, i: 1850, }, D { l: 8, t: 0, i: 218 }, D { l: 8, t: 0, i: 422 }, D { l: 9, t: 0, i: 570 }, D { l: 10, t: 0, i: 626, }, D { l: 4, t: 11, i: 726, }, D { l: 133, t: 11, i: 630, }, D { l: 4, t: 0, i: 1017, }, D { l: 138, t: 0, i: 660, }, D { l: 6, t: 0, i: 387 }, D { l: 7, t: 0, i: 882 }, D { l: 141, t: 0, i: 111, }, D { l: 6, t: 0, i: 224 }, D { l: 7, t: 0, i: 877 }, D { l: 137, t: 0, i: 647, }, D { l: 4, t: 10, i: 58 }, D { l: 5, t: 10, i: 286, }, D { l: 6, t: 10, i: 319, }, D { l: 7, t: 10, i: 402, }, D { l: 7, t: 10, i: 1254, }, D { l: 7, t: 10, i: 1903, }, D { l: 8, t: 10, i: 356, }, D { l: 140, t: 10, i: 408, }, D { l: 135, t: 0, i: 790, }, D { l: 9, t: 0, i: 510 }, D { l: 10, t: 0, i: 53 }, D { l: 4, t: 10, i: 389, }, D { l: 9, t: 10, i: 181, }, D { l: 10, t: 10, i: 29, }, D { l: 10, t: 10, i: 816, }, D { l: 11, t: 10, i: 311, }, D { l: 11, t: 10, i: 561, }, D { l: 12, t: 10, i: 67, }, D { l: 141, t: 10, i: 181, }, D { l: 142, t: 0, i: 458, }, D { l: 6, t: 11, i: 118, }, D { l: 7, t: 11, i: 215, }, D { l: 7, t: 11, i: 1521, }, D { l: 140, t: 11, i: 11, }, D { l: 134, t: 0, i: 954, }, D { l: 135, t: 0, i: 394, }, D { l: 134, t: 0, i: 1367, }, D { l: 5, t: 11, i: 225, }, D { l: 133, t: 10, i: 373, }, D { l: 132, t: 0, i: 882, }, D { l: 7, t: 0, i: 1409, }, D { l: 135, t: 10, i: 1972, }, D { l: 135, t: 10, i: 1793, }, D { l: 4, t: 11, i: 370, }, D { l: 5, t: 11, i: 756, }, D { l: 135, t: 11, i: 1326, }, D { l: 150, t: 11, i: 13, }, D { l: 7, t: 11, i: 354, }, D { l: 10, t: 11, i: 410, }, D { l: 139, t: 11, i: 815, }, D { l: 6, t: 11, i: 1662, }, D { l: 7, t: 11, i: 48 }, D { l: 8, t: 11, i: 771, }, D { l: 10, t: 11, i: 116, }, D { l: 13, t: 11, i: 104, }, D { l: 14, t: 11, i: 105, }, D { l: 14, t: 11, i: 184, }, D { l: 15, t: 11, i: 168, }, D { l: 19, t: 11, i: 92, }, D { l: 148, t: 11, i: 68, }, D { l: 7, t: 0, i: 124 }, D { l: 136, t: 0, i: 38, }, D { l: 5, t: 0, i: 261 }, D { l: 7, t: 0, i: 78 }, D { l: 7, t: 0, i: 199 }, D { l: 8, t: 0, i: 815 }, D { l: 9, t: 0, i: 126 }, D { l: 10, t: 0, i: 342, }, D { l: 140, t: 0, i: 647, }, D { l: 4, t: 0, i: 628 }, D { l: 140, t: 0, i: 724, }, D { l: 7, t: 0, i: 266 }, D { l: 8, t: 0, i: 804 }, D { l: 7, t: 10, i: 1651, }, D { l: 145, t: 10, i: 89, }, D { l: 135, t: 0, i: 208, }, D { l: 134, t: 0, i: 1178, }, D { l: 6, t: 0, i: 79 }, D { l: 135, t: 0, i: 1519, }, D { l: 132, t: 10, i: 672, }, D { l: 133, t: 10, i: 737, }, D { l: 136, t: 0, i: 741, }, D { l: 132, t: 11, i: 120, }, D { l: 4, t: 0, i: 710 }, D { l: 6, t: 0, i: 376 }, D { l: 134, t: 0, i: 606, }, D { l: 134, t: 0, i: 1347, }, D { l: 134, t: 0, i: 1494, }, D { l: 6, t: 0, i: 850 }, D { l: 6, t: 0, i: 1553, }, D { l: 137, t: 0, i: 821, }, D { l: 5, t: 10, i: 145, }, D { l: 134, t: 11, i: 593, }, D { l: 7, t: 0, i: 1311, }, D { l: 140, t: 0, i: 135, }, D { l: 4, t: 0, i: 467 }, D { l: 5, t: 0, i: 405 }, D { l: 134, t: 0, i: 544, }, D { l: 5, t: 11, i: 820, }, D { l: 135, t: 11, i: 931, }, D { l: 6, t: 0, i: 100 }, D { l: 7, t: 0, i: 244 }, D { l: 7, t: 0, i: 632 }, D { l: 7, t: 0, i: 1609, }, D { l: 8, t: 0, i: 178 }, D { l: 8, t: 0, i: 638 }, D { l: 141, t: 0, i: 58, }, D { l: 4, t: 10, i: 387, }, D { l: 135, t: 10, i: 1288, }, D { l: 6, t: 11, i: 151, }, D { l: 6, t: 11, i: 1675, }, D { l: 7, t: 11, i: 383, }, D { l: 151, t: 11, i: 10, }, D { l: 132, t: 0, i: 481, }, D { l: 135, t: 10, i: 550, }, D { l: 134, t: 0, i: 1378, }, D { l: 6, t: 11, i: 1624, }, D { l: 11, t: 11, i: 11, }, D { l: 12, t: 11, i: 422, }, D { l: 13, t: 11, i: 262, }, D { l: 142, t: 11, i: 360, }, D { l: 133, t: 0, i: 791, }, D { l: 4, t: 11, i: 43 }, D { l: 5, t: 11, i: 344, }, D { l: 133, t: 11, i: 357, }, D { l: 7, t: 0, i: 1227, }, D { l: 140, t: 0, i: 978, }, D { l: 7, t: 0, i: 686 }, D { l: 8, t: 0, i: 33 }, D { l: 8, t: 0, i: 238 }, D { l: 10, t: 0, i: 616, }, D { l: 11, t: 0, i: 467, }, D { l: 11, t: 0, i: 881, }, D { l: 13, t: 0, i: 217, }, D { l: 13, t: 0, i: 253, }, D { l: 142, t: 0, i: 268, }, D { l: 137, t: 0, i: 857, }, D { l: 8, t: 0, i: 467 }, D { l: 8, t: 0, i: 1006, }, D { l: 7, t: 11, i: 148, }, D { l: 8, t: 11, i: 284, }, D { l: 141, t: 11, i: 63, }, D { l: 4, t: 10, i: 576, }, D { l: 135, t: 10, i: 1263, }, D { l: 133, t: 11, i: 888, }, D { l: 5, t: 10, i: 919, }, D { l: 134, t: 10, i: 1673, }, D { l: 20, t: 10, i: 37, }, D { l: 148, t: 11, i: 37, }, D { l: 132, t: 0, i: 447, }, D { l: 132, t: 11, i: 711, }, D { l: 4, t: 0, i: 128 }, D { l: 5, t: 0, i: 415 }, D { l: 6, t: 0, i: 462 }, D { l: 7, t: 0, i: 294 }, D { l: 7, t: 0, i: 578 }, D { l: 10, t: 0, i: 710, }, D { l: 139, t: 0, i: 86, }, D { l: 4, t: 10, i: 82 }, D { l: 5, t: 10, i: 333, }, D { l: 5, t: 10, i: 904, }, D { l: 6, t: 10, i: 207, }, D { l: 7, t: 10, i: 325, }, D { l: 7, t: 10, i: 1726, }, D { l: 8, t: 10, i: 101, }, D { l: 10, t: 10, i: 778, }, D { l: 139, t: 10, i: 220, }, D { l: 136, t: 0, i: 587, }, D { l: 137, t: 11, i: 440, }, D { l: 133, t: 10, i: 903, }, D { l: 6, t: 0, i: 427 }, D { l: 7, t: 0, i: 1018, }, D { l: 138, t: 0, i: 692, }, D { l: 4, t: 0, i: 195 }, D { l: 135, t: 0, i: 802, }, D { l: 140, t: 10, i: 147, }, D { l: 134, t: 0, i: 1546, }, D { l: 134, t: 0, i: 684, }, D { l: 132, t: 10, i: 705, }, D { l: 136, t: 0, i: 345, }, D { l: 11, t: 11, i: 678, }, D { l: 140, t: 11, i: 307, }, D { l: 133, t: 0, i: 365, }, D { l: 134, t: 0, i: 1683, }, D { l: 4, t: 11, i: 65 }, D { l: 5, t: 11, i: 479, }, D { l: 5, t: 11, i: 1004, }, D { l: 7, t: 11, i: 1913, }, D { l: 8, t: 11, i: 317, }, D { l: 9, t: 11, i: 302, }, D { l: 10, t: 11, i: 612, }, D { l: 141, t: 11, i: 22, }, D { l: 138, t: 0, i: 472, }, D { l: 4, t: 11, i: 261, }, D { l: 135, t: 11, i: 510, }, D { l: 134, t: 10, i: 90, }, D { l: 142, t: 0, i: 433, }, D { l: 151, t: 0, i: 28, }, D { l: 4, t: 11, i: 291, }, D { l: 7, t: 11, i: 101, }, D { l: 9, t: 11, i: 515, }, D { l: 12, t: 11, i: 152, }, D { l: 12, t: 11, i: 443, }, D { l: 13, t: 11, i: 392, }, D { l: 142, t: 11, i: 357, }, D { l: 140, t: 0, i: 997, }, D { l: 5, t: 0, i: 3 }, D { l: 8, t: 0, i: 578 }, D { l: 9, t: 0, i: 118 }, D { l: 10, t: 0, i: 705, }, D { l: 141, t: 0, i: 279, }, D { l: 135, t: 11, i: 1266, }, D { l: 7, t: 10, i: 813, }, D { l: 12, t: 10, i: 497, }, D { l: 141, t: 10, i: 56, }, D { l: 133, t: 0, i: 229, }, D { l: 6, t: 10, i: 125, }, D { l: 135, t: 10, i: 1277, }, D { l: 8, t: 0, i: 102 }, D { l: 10, t: 0, i: 578, }, D { l: 10, t: 0, i: 672, }, D { l: 12, t: 0, i: 496, }, D { l: 13, t: 0, i: 408, }, D { l: 14, t: 0, i: 121, }, D { l: 17, t: 0, i: 106, }, D { l: 151, t: 10, i: 12, }, D { l: 6, t: 0, i: 866 }, D { l: 134, t: 0, i: 1080, }, D { l: 136, t: 0, i: 1022, }, D { l: 4, t: 11, i: 130, }, D { l: 135, t: 11, i: 843, }, D { l: 5, t: 11, i: 42 }, D { l: 5, t: 11, i: 879, }, D { l: 7, t: 11, i: 245, }, D { l: 7, t: 11, i: 324, }, D { l: 7, t: 11, i: 1532, }, D { l: 11, t: 11, i: 463, }, D { l: 11, t: 11, i: 472, }, D { l: 13, t: 11, i: 363, }, D { l: 144, t: 11, i: 52, }, D { l: 150, t: 0, i: 55, }, D { l: 8, t: 0, i: 115 }, D { l: 8, t: 0, i: 350 }, D { l: 9, t: 0, i: 489 }, D { l: 10, t: 0, i: 128, }, D { l: 11, t: 0, i: 306, }, D { l: 12, t: 0, i: 373, }, D { l: 14, t: 0, i: 30 }, D { l: 17, t: 0, i: 79 }, D { l: 19, t: 0, i: 80 }, D { l: 4, t: 11, i: 134, }, D { l: 133, t: 11, i: 372, }, D { l: 134, t: 0, i: 657, }, D { l: 134, t: 0, i: 933, }, D { l: 135, t: 11, i: 1147, }, D { l: 4, t: 0, i: 230 }, D { l: 133, t: 0, i: 702, }, D { l: 134, t: 0, i: 1728, }, D { l: 4, t: 0, i: 484 }, D { l: 18, t: 0, i: 26 }, D { l: 19, t: 0, i: 42 }, D { l: 20, t: 0, i: 43 }, D { l: 21, t: 0, i: 0 }, D { l: 23, t: 0, i: 27 }, D { l: 152, t: 0, i: 14, }, D { l: 7, t: 0, i: 185 }, D { l: 135, t: 0, i: 703, }, D { l: 6, t: 0, i: 417 }, D { l: 10, t: 0, i: 618, }, D { l: 7, t: 10, i: 1106, }, D { l: 9, t: 10, i: 770, }, D { l: 11, t: 10, i: 112, }, D { l: 140, t: 10, i: 413, }, D { l: 134, t: 0, i: 803, }, D { l: 132, t: 11, i: 644, }, D { l: 134, t: 0, i: 1262, }, D { l: 7, t: 11, i: 540, }, D { l: 12, t: 10, i: 271, }, D { l: 145, t: 10, i: 109, }, D { l: 135, t: 11, i: 123, }, D { l: 132, t: 0, i: 633, }, D { l: 134, t: 11, i: 623, }, D { l: 4, t: 11, i: 908, }, D { l: 5, t: 11, i: 359, }, D { l: 5, t: 11, i: 508, }, D { l: 6, t: 11, i: 1723, }, D { l: 7, t: 11, i: 343, }, D { l: 7, t: 11, i: 1996, }, D { l: 135, t: 11, i: 2026, }, D { l: 135, t: 0, i: 479, }, D { l: 10, t: 0, i: 262, }, D { l: 7, t: 10, i: 304, }, D { l: 9, t: 10, i: 646, }, D { l: 9, t: 10, i: 862, }, D { l: 11, t: 10, i: 696, }, D { l: 12, t: 10, i: 208, }, D { l: 15, t: 10, i: 79, }, D { l: 147, t: 10, i: 108, }, D { l: 4, t: 11, i: 341, }, D { l: 135, t: 11, i: 480, }, D { l: 134, t: 0, i: 830, }, D { l: 5, t: 0, i: 70 }, D { l: 5, t: 0, i: 622 }, D { l: 6, t: 0, i: 334 }, D { l: 7, t: 0, i: 1032, }, D { l: 9, t: 0, i: 171 }, D { l: 11, t: 0, i: 26 }, D { l: 11, t: 0, i: 213, }, D { l: 11, t: 0, i: 637, }, D { l: 11, t: 0, i: 707, }, D { l: 12, t: 0, i: 202, }, D { l: 12, t: 0, i: 380, }, D { l: 13, t: 0, i: 226, }, D { l: 13, t: 0, i: 355, }, D { l: 14, t: 0, i: 222, }, D { l: 145, t: 0, i: 42, }, D { l: 135, t: 10, i: 981, }, D { l: 143, t: 0, i: 217, }, D { l: 137, t: 11, i: 114, }, D { l: 4, t: 0, i: 23 }, D { l: 4, t: 0, i: 141 }, D { l: 5, t: 0, i: 313 }, D { l: 5, t: 0, i: 1014, }, D { l: 6, t: 0, i: 50 }, D { l: 6, t: 0, i: 51 }, D { l: 7, t: 0, i: 142 }, D { l: 7, t: 0, i: 384 }, D { l: 7, t: 0, i: 559 }, D { l: 8, t: 0, i: 640 }, D { l: 9, t: 0, i: 460 }, D { l: 9, t: 0, i: 783 }, D { l: 11, t: 0, i: 741, }, D { l: 12, t: 0, i: 183, }, D { l: 141, t: 0, i: 488, }, D { l: 141, t: 0, i: 360, }, D { l: 7, t: 0, i: 1586, }, D { l: 7, t: 11, i: 1995, }, D { l: 8, t: 11, i: 299, }, D { l: 11, t: 11, i: 890, }, D { l: 140, t: 11, i: 674, }, D { l: 132, t: 10, i: 434, }, D { l: 7, t: 0, i: 652 }, D { l: 134, t: 10, i: 550, }, D { l: 7, t: 0, i: 766 }, D { l: 5, t: 10, i: 553, }, D { l: 138, t: 10, i: 824, }, D { l: 7, t: 0, i: 737 }, D { l: 8, t: 0, i: 298 }, D { l: 136, t: 10, i: 452, }, D { l: 4, t: 11, i: 238, }, D { l: 5, t: 11, i: 503, }, D { l: 6, t: 11, i: 179, }, D { l: 7, t: 11, i: 2003, }, D { l: 8, t: 11, i: 381, }, D { l: 8, t: 11, i: 473, }, D { l: 9, t: 11, i: 149, }, D { l: 10, t: 11, i: 183, }, D { l: 15, t: 11, i: 45, }, D { l: 143, t: 11, i: 86, }, D { l: 133, t: 10, i: 292, }, D { l: 5, t: 0, i: 222 }, D { l: 9, t: 0, i: 655 }, D { l: 138, t: 0, i: 534, }, D { l: 138, t: 10, i: 135, }, D { l: 4, t: 11, i: 121, }, D { l: 5, t: 11, i: 156, }, D { l: 5, t: 11, i: 349, }, D { l: 9, t: 11, i: 136, }, D { l: 10, t: 11, i: 605, }, D { l: 14, t: 11, i: 342, }, D { l: 147, t: 11, i: 107, }, D { l: 137, t: 0, i: 906, }, D { l: 6, t: 0, i: 1013, }, D { l: 134, t: 0, i: 1250, }, D { l: 6, t: 0, i: 1956, }, D { l: 6, t: 0, i: 2009, }, D { l: 8, t: 0, i: 991 }, D { l: 144, t: 0, i: 120, }, D { l: 135, t: 11, i: 1192, }, D { l: 138, t: 0, i: 503, }, D { l: 5, t: 0, i: 154 }, D { l: 7, t: 0, i: 1491, }, D { l: 10, t: 0, i: 379, }, D { l: 138, t: 0, i: 485, }, D { l: 6, t: 0, i: 1867, }, D { l: 6, t: 0, i: 1914, }, D { l: 6, t: 0, i: 1925, }, D { l: 9, t: 0, i: 917 }, D { l: 9, t: 0, i: 925 }, D { l: 9, t: 0, i: 932 }, D { l: 9, t: 0, i: 951 }, D { l: 9, t: 0, i: 1007, }, D { l: 9, t: 0, i: 1013, }, D { l: 12, t: 0, i: 806, }, D { l: 12, t: 0, i: 810, }, D { l: 12, t: 0, i: 814, }, D { l: 12, t: 0, i: 816, }, D { l: 12, t: 0, i: 824, }, D { l: 12, t: 0, i: 832, }, D { l: 12, t: 0, i: 837, }, D { l: 12, t: 0, i: 863, }, D { l: 12, t: 0, i: 868, }, D { l: 12, t: 0, i: 870, }, D { l: 12, t: 0, i: 889, }, D { l: 12, t: 0, i: 892, }, D { l: 12, t: 0, i: 900, }, D { l: 12, t: 0, i: 902, }, D { l: 12, t: 0, i: 908, }, D { l: 12, t: 0, i: 933, }, D { l: 12, t: 0, i: 942, }, D { l: 12, t: 0, i: 949, }, D { l: 12, t: 0, i: 954, }, D { l: 15, t: 0, i: 175, }, D { l: 15, t: 0, i: 203, }, D { l: 15, t: 0, i: 213, }, D { l: 15, t: 0, i: 218, }, D { l: 15, t: 0, i: 225, }, D { l: 15, t: 0, i: 231, }, D { l: 15, t: 0, i: 239, }, D { l: 15, t: 0, i: 248, }, D { l: 15, t: 0, i: 252, }, D { l: 18, t: 0, i: 190, }, D { l: 18, t: 0, i: 204, }, D { l: 18, t: 0, i: 215, }, D { l: 18, t: 0, i: 216, }, D { l: 18, t: 0, i: 222, }, D { l: 18, t: 0, i: 225, }, D { l: 18, t: 0, i: 230, }, D { l: 18, t: 0, i: 239, }, D { l: 18, t: 0, i: 241, }, D { l: 21, t: 0, i: 42 }, D { l: 21, t: 0, i: 43 }, D { l: 21, t: 0, i: 44 }, D { l: 21, t: 0, i: 45 }, D { l: 21, t: 0, i: 46 }, D { l: 21, t: 0, i: 53 }, D { l: 24, t: 0, i: 27 }, D { l: 152, t: 0, i: 31, }, D { l: 133, t: 0, i: 716, }, D { l: 135, t: 0, i: 844, }, D { l: 4, t: 0, i: 91 }, D { l: 5, t: 0, i: 388 }, D { l: 5, t: 0, i: 845 }, D { l: 6, t: 0, i: 206 }, D { l: 6, t: 0, i: 252 }, D { l: 6, t: 0, i: 365 }, D { l: 7, t: 0, i: 136 }, D { l: 7, t: 0, i: 531 }, D { l: 136, t: 0, i: 621, }, D { l: 7, t: 10, i: 393, }, D { l: 10, t: 10, i: 603, }, D { l: 139, t: 10, i: 206, }, D { l: 6, t: 11, i: 80 }, D { l: 6, t: 11, i: 1694, }, D { l: 7, t: 11, i: 173, }, D { l: 7, t: 11, i: 1974, }, D { l: 9, t: 11, i: 547, }, D { l: 10, t: 11, i: 730, }, D { l: 14, t: 11, i: 18, }, D { l: 150, t: 11, i: 39, }, D { l: 137, t: 0, i: 748, }, D { l: 4, t: 11, i: 923, }, D { l: 134, t: 11, i: 1711, }, D { l: 4, t: 10, i: 912, }, D { l: 137, t: 10, i: 232, }, D { l: 7, t: 10, i: 98 }, D { l: 7, t: 10, i: 1973, }, D { l: 136, t: 10, i: 716, }, D { l: 14, t: 0, i: 103, }, D { l: 133, t: 10, i: 733, }, D { l: 132, t: 11, i: 595, }, D { l: 12, t: 0, i: 158, }, D { l: 18, t: 0, i: 8 }, D { l: 19, t: 0, i: 62 }, D { l: 20, t: 0, i: 6 }, D { l: 22, t: 0, i: 4 }, D { l: 23, t: 0, i: 2 }, D { l: 23, t: 0, i: 9 }, D { l: 5, t: 11, i: 240, }, D { l: 6, t: 11, i: 459, }, D { l: 7, t: 11, i: 12 }, D { l: 7, t: 11, i: 114, }, D { l: 7, t: 11, i: 502, }, D { l: 7, t: 11, i: 1751, }, D { l: 7, t: 11, i: 1753, }, D { l: 7, t: 11, i: 1805, }, D { l: 8, t: 11, i: 658, }, D { l: 9, t: 11, i: 1 }, D { l: 11, t: 11, i: 959, }, D { l: 13, t: 11, i: 446, }, D { l: 142, t: 11, i: 211, }, D { l: 135, t: 0, i: 576, }, D { l: 5, t: 0, i: 771 }, D { l: 5, t: 0, i: 863 }, D { l: 5, t: 0, i: 898 }, D { l: 6, t: 0, i: 648 }, D { l: 6, t: 0, i: 1632, }, D { l: 6, t: 0, i: 1644, }, D { l: 134, t: 0, i: 1780, }, D { l: 133, t: 0, i: 331, }, D { l: 7, t: 11, i: 633, }, D { l: 7, t: 11, i: 905, }, D { l: 7, t: 11, i: 909, }, D { l: 7, t: 11, i: 1538, }, D { l: 9, t: 11, i: 767, }, D { l: 140, t: 11, i: 636, }, D { l: 140, t: 0, i: 632, }, D { l: 5, t: 0, i: 107 }, D { l: 7, t: 0, i: 201 }, D { l: 136, t: 0, i: 518, }, D { l: 6, t: 0, i: 446 }, D { l: 7, t: 0, i: 1817, }, D { l: 134, t: 11, i: 490, }, D { l: 9, t: 0, i: 851 }, D { l: 141, t: 0, i: 510, }, D { l: 7, t: 11, i: 250, }, D { l: 8, t: 11, i: 506, }, D { l: 136, t: 11, i: 507, }, D { l: 4, t: 0, i: 504 }, D { l: 137, t: 10, i: 72, }, D { l: 132, t: 11, i: 158, }, D { l: 4, t: 11, i: 140, }, D { l: 7, t: 11, i: 362, }, D { l: 8, t: 11, i: 209, }, D { l: 9, t: 11, i: 10 }, D { l: 9, t: 11, i: 160, }, D { l: 9, t: 11, i: 503, }, D { l: 10, t: 11, i: 689, }, D { l: 11, t: 11, i: 350, }, D { l: 11, t: 11, i: 553, }, D { l: 11, t: 11, i: 725, }, D { l: 12, t: 11, i: 252, }, D { l: 12, t: 11, i: 583, }, D { l: 13, t: 11, i: 192, }, D { l: 13, t: 11, i: 352, }, D { l: 14, t: 11, i: 269, }, D { l: 14, t: 11, i: 356, }, D { l: 148, t: 11, i: 50, }, D { l: 6, t: 11, i: 597, }, D { l: 135, t: 11, i: 1318, }, D { l: 135, t: 10, i: 1454, }, D { l: 5, t: 0, i: 883 }, D { l: 5, t: 0, i: 975 }, D { l: 8, t: 0, i: 392 }, D { l: 148, t: 0, i: 7 }, D { l: 6, t: 11, i: 228, }, D { l: 7, t: 11, i: 1341, }, D { l: 9, t: 11, i: 408, }, D { l: 138, t: 11, i: 343, }, D { l: 11, t: 11, i: 348, }, D { l: 11, t: 10, i: 600, }, D { l: 12, t: 11, i: 99, }, D { l: 13, t: 10, i: 245, }, D { l: 18, t: 11, i: 1 }, D { l: 18, t: 11, i: 11, }, D { l: 147, t: 11, i: 4, }, D { l: 134, t: 11, i: 296, }, D { l: 5, t: 0, i: 922 }, D { l: 134, t: 0, i: 1707, }, D { l: 132, t: 11, i: 557, }, D { l: 4, t: 11, i: 548, }, D { l: 7, t: 10, i: 164, }, D { l: 7, t: 10, i: 1571, }, D { l: 9, t: 10, i: 107, }, D { l: 140, t: 10, i: 225, }, D { l: 7, t: 11, i: 197, }, D { l: 8, t: 11, i: 142, }, D { l: 8, t: 11, i: 325, }, D { l: 9, t: 11, i: 150, }, D { l: 9, t: 11, i: 596, }, D { l: 10, t: 11, i: 350, }, D { l: 10, t: 11, i: 353, }, D { l: 11, t: 11, i: 74, }, D { l: 11, t: 11, i: 315, }, D { l: 14, t: 11, i: 423, }, D { l: 143, t: 11, i: 141, }, D { l: 5, t: 0, i: 993 }, D { l: 7, t: 0, i: 515 }, D { l: 137, t: 0, i: 91, }, D { l: 4, t: 0, i: 131 }, D { l: 8, t: 0, i: 200 }, D { l: 5, t: 10, i: 484, }, D { l: 5, t: 10, i: 510, }, D { l: 6, t: 10, i: 434, }, D { l: 7, t: 10, i: 1000, }, D { l: 7, t: 10, i: 1098, }, D { l: 136, t: 10, i: 2, }, D { l: 152, t: 0, i: 10, }, D { l: 4, t: 11, i: 62 }, D { l: 5, t: 11, i: 83 }, D { l: 6, t: 11, i: 399, }, D { l: 6, t: 11, i: 579, }, D { l: 7, t: 11, i: 692, }, D { l: 7, t: 11, i: 846, }, D { l: 7, t: 11, i: 1015, }, D { l: 7, t: 11, i: 1799, }, D { l: 8, t: 11, i: 403, }, D { l: 9, t: 11, i: 394, }, D { l: 10, t: 11, i: 133, }, D { l: 12, t: 11, i: 4 }, D { l: 12, t: 11, i: 297, }, D { l: 12, t: 11, i: 452, }, D { l: 16, t: 11, i: 81, }, D { l: 18, t: 11, i: 19, }, D { l: 18, t: 11, i: 25, }, D { l: 21, t: 11, i: 14, }, D { l: 22, t: 11, i: 12, }, D { l: 151, t: 11, i: 18, }, D { l: 140, t: 11, i: 459, }, D { l: 132, t: 11, i: 177, }, D { l: 7, t: 0, i: 1433, }, D { l: 9, t: 0, i: 365 }, D { l: 137, t: 11, i: 365, }, D { l: 132, t: 10, i: 460, }, D { l: 5, t: 0, i: 103 }, D { l: 6, t: 0, i: 2004, }, D { l: 7, t: 0, i: 921 }, D { l: 8, t: 0, i: 580 }, D { l: 8, t: 0, i: 593 }, D { l: 8, t: 0, i: 630 }, D { l: 10, t: 0, i: 28 }, D { l: 5, t: 11, i: 411, }, D { l: 135, t: 11, i: 653, }, D { l: 4, t: 10, i: 932, }, D { l: 133, t: 10, i: 891, }, D { l: 4, t: 0, i: 911 }, D { l: 5, t: 0, i: 867 }, D { l: 5, t: 0, i: 1013, }, D { l: 7, t: 0, i: 2034, }, D { l: 8, t: 0, i: 798 }, D { l: 136, t: 0, i: 813, }, D { l: 7, t: 11, i: 439, }, D { l: 10, t: 11, i: 727, }, D { l: 11, t: 11, i: 260, }, D { l: 139, t: 11, i: 684, }, D { l: 136, t: 10, i: 625, }, D { l: 5, t: 11, i: 208, }, D { l: 7, t: 11, i: 753, }, D { l: 135, t: 11, i: 1528, }, D { l: 5, t: 0, i: 461 }, D { l: 7, t: 0, i: 1925, }, D { l: 12, t: 0, i: 39 }, D { l: 13, t: 0, i: 265, }, D { l: 13, t: 0, i: 439, }, D { l: 134, t: 10, i: 76, }, D { l: 6, t: 0, i: 853 }, D { l: 8, t: 10, i: 92 }, D { l: 137, t: 10, i: 221, }, D { l: 5, t: 0, i: 135 }, D { l: 6, t: 0, i: 519 }, D { l: 7, t: 0, i: 1722, }, D { l: 10, t: 0, i: 271, }, D { l: 11, t: 0, i: 261, }, D { l: 145, t: 0, i: 54, }, D { l: 139, t: 11, i: 814, }, D { l: 14, t: 0, i: 338, }, D { l: 148, t: 0, i: 81, }, D { l: 4, t: 0, i: 300 }, D { l: 133, t: 0, i: 436, }, D { l: 5, t: 0, i: 419 }, D { l: 5, t: 0, i: 687 }, D { l: 7, t: 0, i: 864 }, D { l: 9, t: 0, i: 470 }, D { l: 135, t: 11, i: 864, }, D { l: 9, t: 0, i: 836 }, D { l: 133, t: 11, i: 242, }, D { l: 134, t: 0, i: 1937, }, D { l: 4, t: 10, i: 763, }, D { l: 133, t: 11, i: 953, }, D { l: 132, t: 10, i: 622, }, D { l: 132, t: 0, i: 393, }, D { l: 133, t: 10, i: 253, }, D { l: 8, t: 0, i: 357 }, D { l: 10, t: 0, i: 745, }, D { l: 14, t: 0, i: 426, }, D { l: 17, t: 0, i: 94 }, D { l: 19, t: 0, i: 57 }, D { l: 135, t: 10, i: 546, }, D { l: 5, t: 11, i: 615, }, D { l: 146, t: 11, i: 37, }, D { l: 9, t: 10, i: 73 }, D { l: 10, t: 10, i: 110, }, D { l: 14, t: 10, i: 185, }, D { l: 145, t: 10, i: 119, }, D { l: 11, t: 0, i: 703, }, D { l: 7, t: 10, i: 624, }, D { l: 7, t: 10, i: 916, }, D { l: 10, t: 10, i: 256, }, D { l: 139, t: 10, i: 87, }, D { l: 133, t: 11, i: 290, }, D { l: 5, t: 10, i: 212, }, D { l: 12, t: 10, i: 35, }, D { l: 141, t: 10, i: 382, }, D { l: 132, t: 11, i: 380, }, D { l: 5, t: 11, i: 52 }, D { l: 7, t: 11, i: 277, }, D { l: 9, t: 11, i: 368, }, D { l: 139, t: 11, i: 791, }, D { l: 133, t: 0, i: 387, }, D { l: 10, t: 11, i: 138, }, D { l: 139, t: 11, i: 476, }, D { l: 4, t: 0, i: 6 }, D { l: 5, t: 0, i: 708 }, D { l: 136, t: 0, i: 75, }, D { l: 7, t: 0, i: 1351, }, D { l: 9, t: 0, i: 581 }, D { l: 10, t: 0, i: 639, }, D { l: 11, t: 0, i: 453, }, D { l: 140, t: 0, i: 584, }, D { l: 132, t: 0, i: 303, }, D { l: 138, t: 0, i: 772, }, D { l: 135, t: 10, i: 1175, }, D { l: 4, t: 0, i: 749 }, D { l: 5, t: 10, i: 816, }, D { l: 6, t: 11, i: 256, }, D { l: 7, t: 11, i: 307, }, D { l: 7, t: 11, i: 999, }, D { l: 7, t: 11, i: 1481, }, D { l: 7, t: 11, i: 1732, }, D { l: 7, t: 11, i: 1738, }, D { l: 8, t: 11, i: 265, }, D { l: 9, t: 11, i: 414, }, D { l: 11, t: 11, i: 316, }, D { l: 12, t: 11, i: 52, }, D { l: 13, t: 11, i: 420, }, D { l: 147, t: 11, i: 100, }, D { l: 135, t: 11, i: 1296, }, D { l: 6, t: 0, i: 1065, }, D { l: 5, t: 10, i: 869, }, D { l: 5, t: 10, i: 968, }, D { l: 6, t: 10, i: 1626, }, D { l: 8, t: 10, i: 734, }, D { l: 136, t: 10, i: 784, }, D { l: 4, t: 10, i: 542, }, D { l: 6, t: 10, i: 1716, }, D { l: 6, t: 10, i: 1727, }, D { l: 7, t: 10, i: 1082, }, D { l: 7, t: 10, i: 1545, }, D { l: 8, t: 10, i: 56 }, D { l: 8, t: 10, i: 118, }, D { l: 8, t: 10, i: 412, }, D { l: 8, t: 10, i: 564, }, D { l: 9, t: 10, i: 888, }, D { l: 9, t: 10, i: 908, }, D { l: 10, t: 10, i: 50, }, D { l: 10, t: 10, i: 423, }, D { l: 11, t: 10, i: 685, }, D { l: 11, t: 10, i: 697, }, D { l: 11, t: 10, i: 933, }, D { l: 12, t: 10, i: 299, }, D { l: 13, t: 10, i: 126, }, D { l: 13, t: 10, i: 136, }, D { l: 13, t: 10, i: 170, }, D { l: 141, t: 10, i: 190, }, D { l: 134, t: 0, i: 226, }, D { l: 4, t: 0, i: 106 }, D { l: 7, t: 0, i: 310 }, D { l: 11, t: 0, i: 717, }, D { l: 133, t: 11, i: 723, }, D { l: 5, t: 0, i: 890 }, D { l: 5, t: 0, i: 988 }, D { l: 4, t: 10, i: 232, }, D { l: 9, t: 10, i: 202, }, D { l: 10, t: 10, i: 474, }, D { l: 140, t: 10, i: 433, }, D { l: 6, t: 0, i: 626 }, D { l: 142, t: 0, i: 431, }, D { l: 10, t: 0, i: 706, }, D { l: 150, t: 0, i: 44, }, D { l: 13, t: 0, i: 51 }, D { l: 6, t: 10, i: 108, }, D { l: 7, t: 10, i: 1003, }, D { l: 7, t: 10, i: 1181, }, D { l: 8, t: 10, i: 111, }, D { l: 136, t: 10, i: 343, }, D { l: 132, t: 0, i: 698, }, D { l: 5, t: 11, i: 109, }, D { l: 6, t: 11, i: 1784, }, D { l: 7, t: 11, i: 1895, }, D { l: 12, t: 11, i: 296, }, D { l: 140, t: 11, i: 302, }, D { l: 134, t: 0, i: 828, }, D { l: 134, t: 10, i: 1712, }, D { l: 138, t: 0, i: 17, }, D { l: 7, t: 0, i: 1929, }, D { l: 4, t: 10, i: 133, }, D { l: 5, t: 11, i: 216, }, D { l: 7, t: 10, i: 711, }, D { l: 7, t: 10, i: 1298, }, D { l: 7, t: 10, i: 1585, }, D { l: 7, t: 11, i: 1879, }, D { l: 9, t: 11, i: 141, }, D { l: 9, t: 11, i: 270, }, D { l: 9, t: 11, i: 679, }, D { l: 10, t: 11, i: 159, }, D { l: 10, t: 11, i: 553, }, D { l: 11, t: 11, i: 197, }, D { l: 11, t: 11, i: 438, }, D { l: 12, t: 11, i: 538, }, D { l: 12, t: 11, i: 559, }, D { l: 13, t: 11, i: 193, }, D { l: 13, t: 11, i: 423, }, D { l: 14, t: 11, i: 144, }, D { l: 14, t: 11, i: 166, }, D { l: 14, t: 11, i: 167, }, D { l: 15, t: 11, i: 67, }, D { l: 147, t: 11, i: 84, }, D { l: 141, t: 11, i: 127, }, D { l: 7, t: 11, i: 1872, }, D { l: 137, t: 11, i: 81, }, D { l: 6, t: 10, i: 99 }, D { l: 7, t: 10, i: 1808, }, D { l: 145, t: 10, i: 57, }, D { l: 134, t: 11, i: 391, }, D { l: 5, t: 0, i: 689 }, D { l: 6, t: 0, i: 84 }, D { l: 7, t: 0, i: 1250, }, D { l: 6, t: 10, i: 574, }, D { l: 7, t: 10, i: 428, }, D { l: 10, t: 10, i: 669, }, D { l: 11, t: 10, i: 485, }, D { l: 11, t: 10, i: 840, }, D { l: 12, t: 10, i: 300, }, D { l: 142, t: 10, i: 250, }, D { l: 7, t: 11, i: 322, }, D { l: 136, t: 11, i: 249, }, D { l: 7, t: 11, i: 432, }, D { l: 135, t: 11, i: 1649, }, D { l: 135, t: 10, i: 1871, }, D { l: 137, t: 10, i: 252, }, D { l: 6, t: 11, i: 155, }, D { l: 140, t: 11, i: 234, }, D { l: 7, t: 0, i: 871 }, D { l: 19, t: 0, i: 27 }, D { l: 147, t: 11, i: 27, }, D { l: 140, t: 0, i: 498, }, D { l: 5, t: 0, i: 986 }, D { l: 6, t: 0, i: 130 }, D { l: 138, t: 0, i: 823, }, D { l: 6, t: 0, i: 1793, }, D { l: 7, t: 0, i: 1582, }, D { l: 8, t: 0, i: 458 }, D { l: 10, t: 0, i: 101, }, D { l: 10, t: 0, i: 318, }, D { l: 10, t: 0, i: 945, }, D { l: 12, t: 0, i: 734, }, D { l: 16, t: 0, i: 104, }, D { l: 18, t: 0, i: 177, }, D { l: 6, t: 10, i: 323, }, D { l: 135, t: 10, i: 1564, }, D { l: 5, t: 11, i: 632, }, D { l: 138, t: 11, i: 526, }, D { l: 10, t: 0, i: 435, }, D { l: 7, t: 10, i: 461, }, D { l: 136, t: 10, i: 775, }, D { l: 6, t: 11, i: 144, }, D { l: 7, t: 11, i: 948, }, D { l: 7, t: 11, i: 1042, }, D { l: 7, t: 11, i: 1857, }, D { l: 8, t: 11, i: 235, }, D { l: 8, t: 11, i: 461, }, D { l: 9, t: 11, i: 453, }, D { l: 9, t: 11, i: 530, }, D { l: 10, t: 11, i: 354, }, D { l: 17, t: 11, i: 77, }, D { l: 19, t: 11, i: 99, }, D { l: 148, t: 11, i: 79, }, D { l: 138, t: 0, i: 966, }, D { l: 7, t: 0, i: 1644, }, D { l: 137, t: 0, i: 129, }, D { l: 135, t: 0, i: 997, }, D { l: 136, t: 0, i: 502, }, D { l: 5, t: 11, i: 196, }, D { l: 6, t: 11, i: 486, }, D { l: 7, t: 11, i: 212, }, D { l: 8, t: 11, i: 309, }, D { l: 136, t: 11, i: 346, }, D { l: 7, t: 10, i: 727, }, D { l: 146, t: 10, i: 73, }, D { l: 132, t: 0, i: 823, }, D { l: 132, t: 11, i: 686, }, D { l: 135, t: 0, i: 1927, }, D { l: 4, t: 0, i: 762 }, D { l: 7, t: 0, i: 1756, }, D { l: 137, t: 0, i: 98, }, D { l: 136, t: 10, i: 577, }, D { l: 24, t: 0, i: 8 }, D { l: 4, t: 11, i: 30 }, D { l: 5, t: 11, i: 43 }, D { l: 152, t: 11, i: 8, }, D { l: 7, t: 0, i: 1046, }, D { l: 139, t: 0, i: 160, }, D { l: 7, t: 0, i: 492 }, D { l: 4, t: 10, i: 413, }, D { l: 5, t: 10, i: 677, }, D { l: 7, t: 11, i: 492, }, D { l: 8, t: 10, i: 432, }, D { l: 140, t: 10, i: 280, }, D { l: 6, t: 0, i: 45 }, D { l: 7, t: 0, i: 433 }, D { l: 8, t: 0, i: 129 }, D { l: 9, t: 0, i: 21 }, D { l: 10, t: 0, i: 392, }, D { l: 11, t: 0, i: 79 }, D { l: 12, t: 0, i: 499, }, D { l: 13, t: 0, i: 199, }, D { l: 141, t: 0, i: 451, }, D { l: 7, t: 0, i: 558 }, D { l: 136, t: 0, i: 353, }, D { l: 4, t: 11, i: 220, }, D { l: 7, t: 11, i: 1535, }, D { l: 9, t: 11, i: 93 }, D { l: 139, t: 11, i: 474, }, D { l: 7, t: 10, i: 646, }, D { l: 7, t: 10, i: 1730, }, D { l: 11, t: 10, i: 446, }, D { l: 141, t: 10, i: 178, }, D { l: 133, t: 0, i: 785, }, D { l: 134, t: 0, i: 1145, }, D { l: 8, t: 0, i: 81 }, D { l: 9, t: 0, i: 189 }, D { l: 9, t: 0, i: 201 }, D { l: 11, t: 0, i: 478, }, D { l: 11, t: 0, i: 712, }, D { l: 141, t: 0, i: 338, }, D { l: 5, t: 0, i: 353 }, D { l: 151, t: 0, i: 26, }, D { l: 11, t: 0, i: 762, }, D { l: 132, t: 10, i: 395, }, D { l: 134, t: 0, i: 2024, }, D { l: 4, t: 0, i: 611 }, D { l: 133, t: 0, i: 606, }, D { l: 9, t: 10, i: 174, }, D { l: 10, t: 10, i: 164, }, D { l: 11, t: 10, i: 440, }, D { l: 11, t: 10, i: 841, }, D { l: 143, t: 10, i: 98, }, D { l: 134, t: 10, i: 426, }, D { l: 10, t: 10, i: 608, }, D { l: 139, t: 10, i: 1002, }, D { l: 138, t: 10, i: 250, }, D { l: 6, t: 0, i: 25 }, D { l: 7, t: 0, i: 855 }, D { l: 7, t: 0, i: 1258, }, D { l: 144, t: 0, i: 32, }, D { l: 7, t: 11, i: 1725, }, D { l: 138, t: 11, i: 393, }, D { l: 5, t: 11, i: 263, }, D { l: 134, t: 11, i: 414, }, D { l: 6, t: 0, i: 2011, }, D { l: 133, t: 10, i: 476, }, D { l: 4, t: 0, i: 4 }, D { l: 7, t: 0, i: 1118, }, D { l: 7, t: 0, i: 1320, }, D { l: 7, t: 0, i: 1706, }, D { l: 8, t: 0, i: 277 }, D { l: 9, t: 0, i: 622 }, D { l: 10, t: 0, i: 9 }, D { l: 11, t: 0, i: 724, }, D { l: 12, t: 0, i: 350, }, D { l: 12, t: 0, i: 397, }, D { l: 13, t: 0, i: 28 }, D { l: 13, t: 0, i: 159, }, D { l: 15, t: 0, i: 89 }, D { l: 18, t: 0, i: 5 }, D { l: 19, t: 0, i: 9 }, D { l: 20, t: 0, i: 34 }, D { l: 22, t: 0, i: 47 }, D { l: 6, t: 11, i: 178, }, D { l: 6, t: 11, i: 1750, }, D { l: 8, t: 11, i: 251, }, D { l: 9, t: 11, i: 690, }, D { l: 10, t: 11, i: 155, }, D { l: 10, t: 11, i: 196, }, D { l: 10, t: 11, i: 373, }, D { l: 11, t: 11, i: 698, }, D { l: 13, t: 11, i: 155, }, D { l: 148, t: 11, i: 93, }, D { l: 5, t: 11, i: 97 }, D { l: 137, t: 11, i: 393, }, D { l: 7, t: 0, i: 764 }, D { l: 11, t: 0, i: 461, }, D { l: 12, t: 0, i: 172, }, D { l: 5, t: 10, i: 76 }, D { l: 6, t: 10, i: 458, }, D { l: 6, t: 10, i: 497, }, D { l: 7, t: 10, i: 868, }, D { l: 9, t: 10, i: 658, }, D { l: 10, t: 10, i: 594, }, D { l: 11, t: 10, i: 566, }, D { l: 12, t: 10, i: 338, }, D { l: 141, t: 10, i: 200, }, D { l: 134, t: 0, i: 1449, }, D { l: 138, t: 11, i: 40, }, D { l: 134, t: 11, i: 1639, }, D { l: 134, t: 0, i: 1445, }, D { l: 6, t: 0, i: 1168, }, D { l: 4, t: 10, i: 526, }, D { l: 7, t: 10, i: 1029, }, D { l: 135, t: 10, i: 1054, }, D { l: 4, t: 11, i: 191, }, D { l: 7, t: 11, i: 934, }, D { l: 8, t: 11, i: 647, }, D { l: 145, t: 11, i: 97, }, D { l: 132, t: 10, i: 636, }, D { l: 6, t: 0, i: 233 }, D { l: 7, t: 10, i: 660, }, D { l: 7, t: 10, i: 1124, }, D { l: 17, t: 10, i: 31, }, D { l: 19, t: 10, i: 22, }, D { l: 151, t: 10, i: 14, }, D { l: 6, t: 10, i: 1699, }, D { l: 136, t: 11, i: 110, }, D { l: 12, t: 11, i: 246, }, D { l: 15, t: 11, i: 162, }, D { l: 19, t: 11, i: 64, }, D { l: 20, t: 11, i: 8 }, D { l: 20, t: 11, i: 95, }, D { l: 22, t: 11, i: 24, }, D { l: 152, t: 11, i: 17, }, D { l: 5, t: 11, i: 165, }, D { l: 9, t: 11, i: 346, }, D { l: 138, t: 11, i: 655, }, D { l: 5, t: 11, i: 319, }, D { l: 135, t: 11, i: 534, }, D { l: 134, t: 0, i: 255, }, D { l: 9, t: 0, i: 216 }, D { l: 8, t: 11, i: 128, }, D { l: 139, t: 11, i: 179, }, D { l: 9, t: 0, i: 183 }, D { l: 139, t: 0, i: 286, }, D { l: 11, t: 0, i: 956, }, D { l: 151, t: 0, i: 3 }, D { l: 4, t: 0, i: 536 }, D { l: 7, t: 0, i: 1141, }, D { l: 10, t: 0, i: 723, }, D { l: 139, t: 0, i: 371, }, D { l: 4, t: 10, i: 279, }, D { l: 7, t: 10, i: 301, }, D { l: 137, t: 10, i: 362, }, D { l: 7, t: 0, i: 285 }, D { l: 5, t: 11, i: 57 }, D { l: 6, t: 11, i: 101, }, D { l: 6, t: 11, i: 1663, }, D { l: 7, t: 11, i: 132, }, D { l: 7, t: 11, i: 1048, }, D { l: 7, t: 11, i: 1154, }, D { l: 7, t: 11, i: 1415, }, D { l: 7, t: 11, i: 1507, }, D { l: 12, t: 11, i: 493, }, D { l: 15, t: 11, i: 105, }, D { l: 151, t: 11, i: 15, }, D { l: 5, t: 11, i: 459, }, D { l: 7, t: 11, i: 1073, }, D { l: 7, t: 10, i: 1743, }, D { l: 8, t: 11, i: 241, }, D { l: 136, t: 11, i: 334, }, D { l: 4, t: 10, i: 178, }, D { l: 133, t: 10, i: 399, }, D { l: 135, t: 0, i: 560, }, D { l: 132, t: 0, i: 690, }, D { l: 135, t: 0, i: 1246, }, D { l: 18, t: 0, i: 157, }, D { l: 147, t: 0, i: 63, }, D { l: 10, t: 0, i: 599, }, D { l: 11, t: 0, i: 33 }, D { l: 12, t: 0, i: 571, }, D { l: 149, t: 0, i: 1 }, D { l: 6, t: 11, i: 324, }, D { l: 6, t: 11, i: 520, }, D { l: 7, t: 11, i: 338, }, D { l: 7, t: 11, i: 1616, }, D { l: 7, t: 11, i: 1729, }, D { l: 8, t: 11, i: 228, }, D { l: 9, t: 11, i: 69 }, D { l: 139, t: 11, i: 750, }, D { l: 7, t: 0, i: 1862, }, D { l: 12, t: 0, i: 491, }, D { l: 12, t: 0, i: 520, }, D { l: 13, t: 0, i: 383, }, D { l: 142, t: 0, i: 244, }, D { l: 135, t: 11, i: 734, }, D { l: 134, t: 10, i: 1692, }, D { l: 10, t: 0, i: 448, }, D { l: 11, t: 0, i: 630, }, D { l: 17, t: 0, i: 117, }, D { l: 6, t: 10, i: 202, }, D { l: 7, t: 11, i: 705, }, D { l: 12, t: 10, i: 360, }, D { l: 17, t: 10, i: 118, }, D { l: 18, t: 10, i: 27, }, D { l: 148, t: 10, i: 67, }, D { l: 4, t: 11, i: 73 }, D { l: 6, t: 11, i: 612, }, D { l: 7, t: 11, i: 927, }, D { l: 7, t: 11, i: 1822, }, D { l: 8, t: 11, i: 217, }, D { l: 9, t: 11, i: 472, }, D { l: 9, t: 11, i: 765, }, D { l: 9, t: 11, i: 766, }, D { l: 10, t: 11, i: 408, }, D { l: 11, t: 11, i: 51, }, D { l: 11, t: 11, i: 793, }, D { l: 12, t: 11, i: 266, }, D { l: 15, t: 11, i: 158, }, D { l: 20, t: 11, i: 89, }, D { l: 150, t: 11, i: 32, }, D { l: 4, t: 0, i: 190 }, D { l: 133, t: 0, i: 554, }, D { l: 133, t: 0, i: 1001, }, D { l: 5, t: 11, i: 389, }, D { l: 8, t: 11, i: 636, }, D { l: 137, t: 11, i: 229, }, D { l: 5, t: 0, i: 446 }, D { l: 7, t: 10, i: 872, }, D { l: 10, t: 10, i: 516, }, D { l: 139, t: 10, i: 167, }, D { l: 137, t: 10, i: 313, }, D { l: 132, t: 10, i: 224, }, D { l: 134, t: 0, i: 1313, }, D { l: 5, t: 10, i: 546, }, D { l: 7, t: 10, i: 35 }, D { l: 8, t: 10, i: 11 }, D { l: 8, t: 10, i: 12 }, D { l: 9, t: 10, i: 315, }, D { l: 9, t: 10, i: 533, }, D { l: 10, t: 10, i: 802, }, D { l: 11, t: 10, i: 166, }, D { l: 12, t: 10, i: 525, }, D { l: 142, t: 10, i: 243, }, D { l: 6, t: 0, i: 636 }, D { l: 137, t: 0, i: 837, }, D { l: 5, t: 10, i: 241, }, D { l: 8, t: 10, i: 242, }, D { l: 9, t: 10, i: 451, }, D { l: 10, t: 10, i: 667, }, D { l: 11, t: 10, i: 598, }, D { l: 140, t: 10, i: 429, }, D { l: 22, t: 10, i: 46, }, D { l: 150, t: 11, i: 46, }, D { l: 136, t: 11, i: 472, }, D { l: 11, t: 0, i: 278, }, D { l: 142, t: 0, i: 73, }, D { l: 141, t: 11, i: 185, }, D { l: 132, t: 0, i: 868, }, D { l: 134, t: 0, i: 972, }, D { l: 4, t: 10, i: 366, }, D { l: 137, t: 10, i: 516, }, D { l: 138, t: 0, i: 1010, }, D { l: 5, t: 11, i: 189, }, D { l: 6, t: 10, i: 1736, }, D { l: 7, t: 11, i: 442, }, D { l: 7, t: 11, i: 443, }, D { l: 8, t: 11, i: 281, }, D { l: 12, t: 11, i: 174, }, D { l: 13, t: 11, i: 83, }, D { l: 141, t: 11, i: 261, }, D { l: 139, t: 11, i: 384, }, D { l: 6, t: 11, i: 2 }, D { l: 7, t: 11, i: 191, }, D { l: 7, t: 11, i: 446, }, D { l: 7, t: 11, i: 758, }, D { l: 7, t: 11, i: 1262, }, D { l: 7, t: 11, i: 1737, }, D { l: 8, t: 11, i: 22 }, D { l: 8, t: 11, i: 270, }, D { l: 8, t: 11, i: 612, }, D { l: 9, t: 11, i: 4 }, D { l: 9, t: 11, i: 167, }, D { l: 9, t: 11, i: 312, }, D { l: 9, t: 11, i: 436, }, D { l: 10, t: 11, i: 156, }, D { l: 10, t: 11, i: 216, }, D { l: 10, t: 11, i: 311, }, D { l: 10, t: 11, i: 623, }, D { l: 11, t: 11, i: 72, }, D { l: 11, t: 11, i: 330, }, D { l: 11, t: 11, i: 455, }, D { l: 12, t: 11, i: 101, }, D { l: 12, t: 11, i: 321, }, D { l: 12, t: 11, i: 504, }, D { l: 12, t: 11, i: 530, }, D { l: 12, t: 11, i: 543, }, D { l: 13, t: 11, i: 17, }, D { l: 13, t: 11, i: 156, }, D { l: 13, t: 11, i: 334, }, D { l: 14, t: 11, i: 48, }, D { l: 15, t: 11, i: 70, }, D { l: 17, t: 11, i: 60, }, D { l: 148, t: 11, i: 64, }, D { l: 6, t: 10, i: 331, }, D { l: 136, t: 10, i: 623, }, D { l: 135, t: 0, i: 1231, }, D { l: 132, t: 0, i: 304, }, D { l: 6, t: 11, i: 60 }, D { l: 7, t: 11, i: 670, }, D { l: 7, t: 11, i: 1327, }, D { l: 8, t: 11, i: 411, }, D { l: 8, t: 11, i: 435, }, D { l: 9, t: 11, i: 653, }, D { l: 9, t: 11, i: 740, }, D { l: 10, t: 11, i: 385, }, D { l: 11, t: 11, i: 222, }, D { l: 11, t: 11, i: 324, }, D { l: 11, t: 11, i: 829, }, D { l: 140, t: 11, i: 611, }, D { l: 7, t: 0, i: 506 }, D { l: 6, t: 11, i: 166, }, D { l: 7, t: 11, i: 374, }, D { l: 135, t: 11, i: 1174, }, D { l: 14, t: 11, i: 43, }, D { l: 146, t: 11, i: 21, }, D { l: 135, t: 11, i: 1694, }, D { l: 135, t: 10, i: 1888, }, D { l: 5, t: 11, i: 206, }, D { l: 134, t: 11, i: 398, }, D { l: 135, t: 11, i: 50, }, D { l: 150, t: 0, i: 26, }, D { l: 6, t: 0, i: 53 }, D { l: 6, t: 0, i: 199 }, D { l: 7, t: 0, i: 1408, }, D { l: 8, t: 0, i: 32 }, D { l: 8, t: 0, i: 93 }, D { l: 10, t: 0, i: 397, }, D { l: 10, t: 0, i: 629, }, D { l: 11, t: 0, i: 593, }, D { l: 11, t: 0, i: 763, }, D { l: 13, t: 0, i: 326, }, D { l: 145, t: 0, i: 35, }, D { l: 134, t: 0, i: 105, }, D { l: 132, t: 10, i: 394, }, D { l: 4, t: 0, i: 843 }, D { l: 138, t: 0, i: 794, }, D { l: 11, t: 0, i: 704, }, D { l: 141, t: 0, i: 396, }, D { l: 5, t: 0, i: 114 }, D { l: 5, t: 0, i: 255 }, D { l: 141, t: 0, i: 285, }, D { l: 6, t: 0, i: 619 }, D { l: 7, t: 0, i: 898 }, D { l: 7, t: 0, i: 1092, }, D { l: 8, t: 0, i: 485 }, D { l: 18, t: 0, i: 28 }, D { l: 19, t: 0, i: 116, }, D { l: 135, t: 10, i: 1931, }, D { l: 9, t: 0, i: 145 }, D { l: 7, t: 10, i: 574, }, D { l: 135, t: 10, i: 1719, }, D { l: 7, t: 0, i: 2035, }, D { l: 8, t: 0, i: 19 }, D { l: 9, t: 0, i: 89 }, D { l: 138, t: 0, i: 831, }, D { l: 132, t: 10, i: 658, }, D { l: 6, t: 11, i: 517, }, D { l: 7, t: 11, i: 1159, }, D { l: 10, t: 11, i: 621, }, D { l: 139, t: 11, i: 192, }, D { l: 7, t: 0, i: 1933, }, D { l: 7, t: 11, i: 1933, }, D { l: 9, t: 10, i: 781, }, D { l: 10, t: 10, i: 144, }, D { l: 11, t: 10, i: 385, }, D { l: 13, t: 10, i: 161, }, D { l: 13, t: 10, i: 228, }, D { l: 13, t: 10, i: 268, }, D { l: 148, t: 10, i: 107, }, D { l: 136, t: 10, i: 374, }, D { l: 10, t: 11, i: 223, }, D { l: 139, t: 11, i: 645, }, D { l: 135, t: 0, i: 1728, }, D { l: 7, t: 11, i: 64 }, D { l: 7, t: 11, i: 289, }, D { l: 136, t: 11, i: 245, }, D { l: 4, t: 10, i: 344, }, D { l: 6, t: 10, i: 498, }, D { l: 139, t: 10, i: 323, }, D { l: 136, t: 0, i: 746, }, D { l: 135, t: 10, i: 1063, }, D { l: 137, t: 10, i: 155, }, D { l: 4, t: 0, i: 987 }, D { l: 6, t: 0, i: 1964, }, D { l: 6, t: 0, i: 1974, }, D { l: 6, t: 0, i: 1990, }, D { l: 136, t: 0, i: 995, }, D { l: 133, t: 11, i: 609, }, D { l: 133, t: 10, i: 906, }, D { l: 134, t: 0, i: 1550, }, D { l: 134, t: 0, i: 874, }, D { l: 5, t: 11, i: 129, }, D { l: 6, t: 11, i: 61 }, D { l: 135, t: 11, i: 947, }, D { l: 4, t: 0, i: 1018, }, D { l: 6, t: 0, i: 1938, }, D { l: 6, t: 0, i: 2021, }, D { l: 134, t: 0, i: 2039, }, D { l: 132, t: 0, i: 814, }, D { l: 11, t: 0, i: 126, }, D { l: 139, t: 0, i: 287, }, D { l: 134, t: 0, i: 1264, }, D { l: 5, t: 0, i: 955 }, D { l: 136, t: 0, i: 814, }, D { l: 141, t: 11, i: 506, }, D { l: 132, t: 11, i: 314, }, D { l: 6, t: 0, i: 981 }, D { l: 139, t: 11, i: 1000, }, D { l: 5, t: 0, i: 56 }, D { l: 8, t: 0, i: 892 }, D { l: 8, t: 0, i: 915 }, D { l: 140, t: 0, i: 776, }, D { l: 148, t: 0, i: 100, }, D { l: 10, t: 0, i: 4 }, D { l: 10, t: 0, i: 13 }, D { l: 11, t: 0, i: 638, }, D { l: 148, t: 0, i: 57, }, D { l: 148, t: 11, i: 74, }, D { l: 5, t: 0, i: 738 }, D { l: 132, t: 10, i: 616, }, D { l: 133, t: 11, i: 637, }, D { l: 136, t: 10, i: 692, }, D { l: 133, t: 0, i: 758, }, D { l: 132, t: 10, i: 305, }, D { l: 137, t: 11, i: 590, }, D { l: 5, t: 11, i: 280, }, D { l: 135, t: 11, i: 1226, }, D { l: 134, t: 11, i: 494, }, D { l: 135, t: 0, i: 1112, }, D { l: 133, t: 11, i: 281, }, D { l: 13, t: 0, i: 44 }, D { l: 14, t: 0, i: 214, }, D { l: 5, t: 10, i: 214, }, D { l: 7, t: 10, i: 603, }, D { l: 8, t: 10, i: 611, }, D { l: 9, t: 10, i: 686, }, D { l: 10, t: 10, i: 88, }, D { l: 11, t: 10, i: 459, }, D { l: 11, t: 10, i: 496, }, D { l: 12, t: 10, i: 463, }, D { l: 140, t: 10, i: 590, }, D { l: 139, t: 0, i: 328, }, D { l: 135, t: 11, i: 1064, }, D { l: 137, t: 0, i: 133, }, D { l: 7, t: 0, i: 168 }, D { l: 13, t: 0, i: 196, }, D { l: 141, t: 0, i: 237, }, D { l: 134, t: 10, i: 1703, }, D { l: 134, t: 0, i: 1152, }, D { l: 135, t: 0, i: 1245, }, D { l: 5, t: 0, i: 110 }, D { l: 6, t: 0, i: 169 }, D { l: 6, t: 0, i: 1702, }, D { l: 7, t: 0, i: 400 }, D { l: 8, t: 0, i: 538 }, D { l: 9, t: 0, i: 184 }, D { l: 9, t: 0, i: 524 }, D { l: 140, t: 0, i: 218, }, D { l: 6, t: 0, i: 1816, }, D { l: 10, t: 0, i: 871, }, D { l: 12, t: 0, i: 769, }, D { l: 140, t: 0, i: 785, }, D { l: 132, t: 11, i: 630, }, D { l: 7, t: 11, i: 33 }, D { l: 7, t: 11, i: 120, }, D { l: 8, t: 11, i: 489, }, D { l: 9, t: 11, i: 319, }, D { l: 10, t: 11, i: 820, }, D { l: 11, t: 11, i: 1004, }, D { l: 12, t: 11, i: 379, }, D { l: 13, t: 11, i: 117, }, D { l: 13, t: 11, i: 412, }, D { l: 14, t: 11, i: 25, }, D { l: 15, t: 11, i: 52, }, D { l: 15, t: 11, i: 161, }, D { l: 16, t: 11, i: 47, }, D { l: 149, t: 11, i: 2, }, D { l: 6, t: 0, i: 133 }, D { l: 8, t: 0, i: 413 }, D { l: 9, t: 0, i: 353 }, D { l: 139, t: 0, i: 993, }, D { l: 145, t: 10, i: 19, }, D { l: 4, t: 11, i: 937, }, D { l: 133, t: 11, i: 801, }, D { l: 134, t: 0, i: 978, }, D { l: 6, t: 0, i: 93 }, D { l: 6, t: 0, i: 1508, }, D { l: 7, t: 0, i: 1422, }, D { l: 7, t: 0, i: 1851, }, D { l: 8, t: 0, i: 673 }, D { l: 9, t: 0, i: 529 }, D { l: 140, t: 0, i: 43, }, D { l: 6, t: 0, i: 317 }, D { l: 10, t: 0, i: 512, }, D { l: 4, t: 10, i: 737, }, D { l: 11, t: 10, i: 294, }, D { l: 12, t: 10, i: 60, }, D { l: 12, t: 10, i: 437, }, D { l: 13, t: 10, i: 64, }, D { l: 13, t: 10, i: 380, }, D { l: 142, t: 10, i: 430, }, D { l: 9, t: 0, i: 371 }, D { l: 7, t: 11, i: 1591, }, D { l: 144, t: 11, i: 43, }, D { l: 6, t: 10, i: 1758, }, D { l: 8, t: 10, i: 520, }, D { l: 9, t: 10, i: 345, }, D { l: 9, t: 10, i: 403, }, D { l: 142, t: 10, i: 350, }, D { l: 5, t: 0, i: 526 }, D { l: 10, t: 10, i: 242, }, D { l: 138, t: 10, i: 579, }, D { l: 9, t: 0, i: 25 }, D { l: 10, t: 0, i: 467, }, D { l: 138, t: 0, i: 559, }, D { l: 5, t: 10, i: 139, }, D { l: 7, t: 10, i: 1168, }, D { l: 138, t: 10, i: 539, }, D { l: 4, t: 0, i: 335 }, D { l: 135, t: 0, i: 942, }, D { l: 140, t: 0, i: 754, }, D { l: 132, t: 11, i: 365, }, D { l: 11, t: 0, i: 182, }, D { l: 142, t: 0, i: 195, }, D { l: 142, t: 11, i: 29, }, D { l: 5, t: 11, i: 7 }, D { l: 139, t: 11, i: 774, }, D { l: 4, t: 11, i: 746, }, D { l: 135, t: 11, i: 1090, }, D { l: 8, t: 0, i: 39 }, D { l: 10, t: 0, i: 773, }, D { l: 11, t: 0, i: 84 }, D { l: 12, t: 0, i: 205, }, D { l: 142, t: 0, i: 1 }, D { l: 5, t: 0, i: 601 }, D { l: 5, t: 0, i: 870 }, D { l: 5, t: 11, i: 360, }, D { l: 136, t: 11, i: 237, }, D { l: 132, t: 0, i: 181, }, D { l: 136, t: 0, i: 370, }, D { l: 134, t: 0, i: 1652, }, D { l: 8, t: 0, i: 358 }, D { l: 4, t: 10, i: 107, }, D { l: 7, t: 10, i: 613, }, D { l: 8, t: 10, i: 439, }, D { l: 8, t: 10, i: 504, }, D { l: 9, t: 10, i: 501, }, D { l: 10, t: 10, i: 383, }, D { l: 139, t: 10, i: 477, }, D { l: 132, t: 10, i: 229, }, D { l: 137, t: 11, i: 785, }, D { l: 4, t: 0, i: 97 }, D { l: 5, t: 0, i: 147 }, D { l: 6, t: 0, i: 286 }, D { l: 7, t: 0, i: 1362, }, D { l: 141, t: 0, i: 176, }, D { l: 6, t: 0, i: 537 }, D { l: 7, t: 0, i: 788 }, D { l: 7, t: 0, i: 1816, }, D { l: 132, t: 10, i: 903, }, D { l: 140, t: 10, i: 71, }, D { l: 6, t: 0, i: 743 }, D { l: 134, t: 0, i: 1223, }, D { l: 6, t: 0, i: 375 }, D { l: 7, t: 0, i: 169 }, D { l: 7, t: 0, i: 254 }, D { l: 8, t: 0, i: 780 }, D { l: 135, t: 11, i: 1493, }, D { l: 7, t: 0, i: 1714, }, D { l: 4, t: 10, i: 47 }, D { l: 6, t: 10, i: 373, }, D { l: 7, t: 10, i: 452, }, D { l: 7, t: 10, i: 543, }, D { l: 7, t: 10, i: 1856, }, D { l: 9, t: 10, i: 6 }, D { l: 11, t: 10, i: 257, }, D { l: 139, t: 10, i: 391, }, D { l: 6, t: 0, i: 896 }, D { l: 136, t: 0, i: 1003, }, D { l: 135, t: 0, i: 1447, }, D { l: 137, t: 11, i: 341, }, D { l: 5, t: 10, i: 980, }, D { l: 134, t: 10, i: 1754, }, D { l: 145, t: 11, i: 22, }, D { l: 4, t: 11, i: 277, }, D { l: 5, t: 11, i: 608, }, D { l: 6, t: 11, i: 493, }, D { l: 7, t: 11, i: 457, }, D { l: 140, t: 11, i: 384, }, D { l: 7, t: 10, i: 536, }, D { l: 7, t: 10, i: 1331, }, D { l: 136, t: 10, i: 143, }, D { l: 140, t: 0, i: 744, }, D { l: 7, t: 11, i: 27 }, D { l: 135, t: 11, i: 316, }, D { l: 18, t: 0, i: 126, }, D { l: 5, t: 10, i: 19 }, D { l: 134, t: 10, i: 533, }, D { l: 4, t: 0, i: 788 }, D { l: 11, t: 0, i: 41 }, D { l: 5, t: 11, i: 552, }, D { l: 5, t: 11, i: 586, }, D { l: 5, t: 11, i: 676, }, D { l: 6, t: 11, i: 448, }, D { l: 8, t: 11, i: 244, }, D { l: 11, t: 11, i: 1 }, D { l: 11, t: 11, i: 41, }, D { l: 13, t: 11, i: 3 }, D { l: 16, t: 11, i: 54, }, D { l: 17, t: 11, i: 4 }, D { l: 146, t: 11, i: 13, }, D { l: 4, t: 0, i: 985 }, D { l: 6, t: 0, i: 1801, }, D { l: 4, t: 11, i: 401, }, D { l: 137, t: 11, i: 264, }, D { l: 5, t: 10, i: 395, }, D { l: 5, t: 10, i: 951, }, D { l: 134, t: 10, i: 1776, }, D { l: 5, t: 0, i: 629 }, D { l: 135, t: 0, i: 1549, }, D { l: 11, t: 10, i: 663, }, D { l: 12, t: 10, i: 210, }, D { l: 13, t: 10, i: 166, }, D { l: 13, t: 10, i: 310, }, D { l: 14, t: 10, i: 373, }, D { l: 147, t: 10, i: 43, }, D { l: 9, t: 11, i: 543, }, D { l: 10, t: 11, i: 524, }, D { l: 11, t: 11, i: 30, }, D { l: 12, t: 11, i: 524, }, D { l: 14, t: 11, i: 315, }, D { l: 16, t: 11, i: 18, }, D { l: 20, t: 11, i: 26, }, D { l: 148, t: 11, i: 65, }, D { l: 4, t: 11, i: 205, }, D { l: 5, t: 11, i: 623, }, D { l: 7, t: 11, i: 104, }, D { l: 136, t: 11, i: 519, }, D { l: 5, t: 0, i: 293 }, D { l: 134, t: 0, i: 601, }, D { l: 7, t: 11, i: 579, }, D { l: 9, t: 11, i: 41 }, D { l: 9, t: 11, i: 244, }, D { l: 9, t: 11, i: 669, }, D { l: 10, t: 11, i: 5 }, D { l: 11, t: 11, i: 861, }, D { l: 11, t: 11, i: 951, }, D { l: 139, t: 11, i: 980, }, D { l: 132, t: 11, i: 717, }, D { l: 132, t: 10, i: 695, }, D { l: 7, t: 10, i: 497, }, D { l: 9, t: 10, i: 387, }, D { l: 147, t: 10, i: 81, }, D { l: 132, t: 0, i: 420, }, D { l: 142, t: 0, i: 37, }, D { l: 6, t: 0, i: 1134, }, D { l: 6, t: 0, i: 1900, }, D { l: 12, t: 0, i: 830, }, D { l: 12, t: 0, i: 878, }, D { l: 12, t: 0, i: 894, }, D { l: 15, t: 0, i: 221, }, D { l: 143, t: 0, i: 245, }, D { l: 132, t: 11, i: 489, }, D { l: 7, t: 0, i: 1570, }, D { l: 140, t: 0, i: 542, }, D { l: 8, t: 0, i: 933 }, D { l: 136, t: 0, i: 957, }, D { l: 6, t: 0, i: 1371, }, D { l: 7, t: 0, i: 31 }, D { l: 8, t: 0, i: 373 }, D { l: 5, t: 10, i: 284, }, D { l: 6, t: 10, i: 49 }, D { l: 6, t: 10, i: 350, }, D { l: 7, t: 10, i: 377, }, D { l: 7, t: 10, i: 1693, }, D { l: 8, t: 10, i: 678, }, D { l: 9, t: 10, i: 161, }, D { l: 9, t: 10, i: 585, }, D { l: 9, t: 10, i: 671, }, D { l: 9, t: 10, i: 839, }, D { l: 11, t: 10, i: 912, }, D { l: 141, t: 10, i: 427, }, D { l: 135, t: 11, i: 892, }, D { l: 4, t: 0, i: 325 }, D { l: 138, t: 0, i: 125, }, D { l: 139, t: 11, i: 47, }, D { l: 132, t: 10, i: 597, }, D { l: 138, t: 0, i: 323, }, D { l: 6, t: 0, i: 1547, }, D { l: 7, t: 11, i: 1605, }, D { l: 9, t: 11, i: 473, }, D { l: 11, t: 11, i: 962, }, D { l: 146, t: 11, i: 139, }, D { l: 139, t: 10, i: 908, }, D { l: 7, t: 11, i: 819, }, D { l: 9, t: 11, i: 26 }, D { l: 9, t: 11, i: 392, }, D { l: 10, t: 11, i: 152, }, D { l: 10, t: 11, i: 226, }, D { l: 11, t: 11, i: 19, }, D { l: 12, t: 11, i: 276, }, D { l: 12, t: 11, i: 426, }, D { l: 12, t: 11, i: 589, }, D { l: 13, t: 11, i: 460, }, D { l: 15, t: 11, i: 97, }, D { l: 19, t: 11, i: 48, }, D { l: 148, t: 11, i: 104, }, D { l: 135, t: 11, i: 51, }, D { l: 4, t: 0, i: 718 }, D { l: 135, t: 0, i: 1216, }, D { l: 6, t: 0, i: 1896, }, D { l: 6, t: 0, i: 1905, }, D { l: 6, t: 0, i: 1912, }, D { l: 9, t: 0, i: 947 }, D { l: 9, t: 0, i: 974 }, D { l: 12, t: 0, i: 809, }, D { l: 12, t: 0, i: 850, }, D { l: 12, t: 0, i: 858, }, D { l: 12, t: 0, i: 874, }, D { l: 12, t: 0, i: 887, }, D { l: 12, t: 0, i: 904, }, D { l: 12, t: 0, i: 929, }, D { l: 12, t: 0, i: 948, }, D { l: 12, t: 0, i: 952, }, D { l: 15, t: 0, i: 198, }, D { l: 15, t: 0, i: 206, }, D { l: 15, t: 0, i: 220, }, D { l: 15, t: 0, i: 227, }, D { l: 15, t: 0, i: 247, }, D { l: 18, t: 0, i: 188, }, D { l: 21, t: 0, i: 48 }, D { l: 21, t: 0, i: 50 }, D { l: 24, t: 0, i: 25 }, D { l: 24, t: 0, i: 29 }, D { l: 7, t: 11, i: 761, }, D { l: 7, t: 11, i: 1051, }, D { l: 137, t: 11, i: 545, }, D { l: 5, t: 0, i: 124 }, D { l: 5, t: 0, i: 144 }, D { l: 6, t: 0, i: 548 }, D { l: 7, t: 0, i: 15 }, D { l: 7, t: 0, i: 153 }, D { l: 137, t: 0, i: 629, }, D { l: 135, t: 11, i: 606, }, D { l: 135, t: 10, i: 2014, }, D { l: 7, t: 10, i: 2007, }, D { l: 9, t: 11, i: 46 }, D { l: 9, t: 10, i: 101, }, D { l: 9, t: 10, i: 450, }, D { l: 10, t: 10, i: 66, }, D { l: 10, t: 10, i: 842, }, D { l: 11, t: 10, i: 536, }, D { l: 140, t: 10, i: 587, }, D { l: 6, t: 0, i: 75 }, D { l: 7, t: 0, i: 1531, }, D { l: 8, t: 0, i: 416 }, D { l: 9, t: 0, i: 240 }, D { l: 9, t: 0, i: 275 }, D { l: 10, t: 0, i: 100, }, D { l: 11, t: 0, i: 658, }, D { l: 11, t: 0, i: 979, }, D { l: 12, t: 0, i: 86 }, D { l: 14, t: 0, i: 207, }, D { l: 15, t: 0, i: 20 }, D { l: 143, t: 0, i: 25, }, D { l: 5, t: 0, i: 141 }, D { l: 5, t: 0, i: 915 }, D { l: 6, t: 0, i: 1783, }, D { l: 7, t: 0, i: 211 }, D { l: 7, t: 0, i: 698 }, D { l: 7, t: 0, i: 1353, }, D { l: 9, t: 0, i: 83 }, D { l: 9, t: 0, i: 281 }, D { l: 10, t: 0, i: 376, }, D { l: 10, t: 0, i: 431, }, D { l: 11, t: 0, i: 543, }, D { l: 12, t: 0, i: 664, }, D { l: 13, t: 0, i: 280, }, D { l: 13, t: 0, i: 428, }, D { l: 14, t: 0, i: 61 }, D { l: 14, t: 0, i: 128, }, D { l: 17, t: 0, i: 52 }, D { l: 145, t: 0, i: 81, }, D { l: 132, t: 11, i: 674, }, D { l: 135, t: 0, i: 533, }, D { l: 149, t: 0, i: 6 }, D { l: 132, t: 11, i: 770, }, D { l: 133, t: 0, i: 538, }, D { l: 5, t: 11, i: 79 }, D { l: 7, t: 11, i: 1027, }, D { l: 7, t: 11, i: 1477, }, D { l: 139, t: 11, i: 52, }, D { l: 139, t: 10, i: 62, }, D { l: 4, t: 0, i: 338 }, D { l: 133, t: 0, i: 400, }, D { l: 5, t: 11, i: 789, }, D { l: 134, t: 11, i: 195, }, D { l: 4, t: 11, i: 251, }, D { l: 4, t: 11, i: 688, }, D { l: 7, t: 11, i: 513, }, D { l: 7, t: 11, i: 1284, }, D { l: 9, t: 11, i: 87 }, D { l: 138, t: 11, i: 365, }, D { l: 134, t: 10, i: 1766, }, D { l: 6, t: 0, i: 0 }, D { l: 7, t: 0, i: 84 }, D { l: 11, t: 0, i: 895, }, D { l: 145, t: 0, i: 11, }, D { l: 139, t: 0, i: 892, }, D { l: 4, t: 0, i: 221 }, D { l: 5, t: 0, i: 659 }, D { l: 7, t: 0, i: 697 }, D { l: 7, t: 0, i: 1211, }, D { l: 138, t: 0, i: 284, }, D { l: 133, t: 0, i: 989, }, D { l: 133, t: 11, i: 889, }, D { l: 4, t: 11, i: 160, }, D { l: 5, t: 11, i: 330, }, D { l: 7, t: 11, i: 1434, }, D { l: 136, t: 11, i: 174, }, D { l: 6, t: 10, i: 1665, }, D { l: 7, t: 10, i: 256, }, D { l: 7, t: 10, i: 1388, }, D { l: 10, t: 10, i: 499, }, D { l: 139, t: 10, i: 670, }, D { l: 7, t: 0, i: 848 }, D { l: 4, t: 10, i: 22 }, D { l: 5, t: 10, i: 10 }, D { l: 136, t: 10, i: 97, }, D { l: 138, t: 0, i: 507, }, D { l: 133, t: 10, i: 481, }, D { l: 4, t: 0, i: 188 }, D { l: 135, t: 0, i: 805, }, D { l: 5, t: 0, i: 884 }, D { l: 6, t: 0, i: 732 }, D { l: 139, t: 0, i: 991, }, D { l: 135, t: 11, i: 968, }, D { l: 11, t: 11, i: 636, }, D { l: 15, t: 11, i: 145, }, D { l: 17, t: 11, i: 34, }, D { l: 19, t: 11, i: 50, }, D { l: 151, t: 11, i: 20, }, D { l: 7, t: 0, i: 959 }, D { l: 16, t: 0, i: 60 }, D { l: 6, t: 10, i: 134, }, D { l: 7, t: 10, i: 437, }, D { l: 9, t: 10, i: 37 }, D { l: 14, t: 10, i: 285, }, D { l: 142, t: 10, i: 371, }, D { l: 7, t: 10, i: 486, }, D { l: 8, t: 10, i: 155, }, D { l: 11, t: 10, i: 93, }, D { l: 140, t: 10, i: 164, }, D { l: 134, t: 0, i: 1653, }, D { l: 7, t: 0, i: 337 }, D { l: 133, t: 10, i: 591, }, D { l: 6, t: 0, i: 1989, }, D { l: 8, t: 0, i: 922 }, D { l: 8, t: 0, i: 978 }, D { l: 133, t: 11, i: 374, }, D { l: 132, t: 0, i: 638, }, D { l: 138, t: 0, i: 500, }, D { l: 133, t: 11, i: 731, }, D { l: 5, t: 10, i: 380, }, D { l: 5, t: 10, i: 650, }, D { l: 136, t: 10, i: 310, }, D { l: 138, t: 11, i: 381, }, D { l: 4, t: 10, i: 364, }, D { l: 7, t: 10, i: 1156, }, D { l: 7, t: 10, i: 1187, }, D { l: 137, t: 10, i: 409, }, D { l: 137, t: 11, i: 224, }, D { l: 140, t: 0, i: 166, }, D { l: 134, t: 10, i: 482, }, D { l: 4, t: 11, i: 626, }, D { l: 5, t: 11, i: 642, }, D { l: 6, t: 11, i: 425, }, D { l: 10, t: 11, i: 202, }, D { l: 139, t: 11, i: 141, }, D { l: 4, t: 10, i: 781, }, D { l: 6, t: 10, i: 487, }, D { l: 7, t: 10, i: 926, }, D { l: 8, t: 10, i: 263, }, D { l: 139, t: 10, i: 500, }, D { l: 135, t: 0, i: 418, }, D { l: 4, t: 10, i: 94 }, D { l: 135, t: 10, i: 1265, }, D { l: 136, t: 0, i: 760, }, D { l: 132, t: 10, i: 417, }, D { l: 136, t: 11, i: 835, }, D { l: 5, t: 10, i: 348, }, D { l: 134, t: 10, i: 522, }, D { l: 6, t: 0, i: 1277, }, D { l: 134, t: 0, i: 1538, }, D { l: 139, t: 11, i: 541, }, D { l: 135, t: 11, i: 1597, }, D { l: 5, t: 11, i: 384, }, D { l: 8, t: 11, i: 455, }, D { l: 140, t: 11, i: 48, }, D { l: 136, t: 0, i: 770, }, D { l: 5, t: 11, i: 264, }, D { l: 134, t: 11, i: 184, }, D { l: 4, t: 0, i: 89 }, D { l: 5, t: 0, i: 489 }, D { l: 6, t: 0, i: 315 }, D { l: 7, t: 0, i: 553 }, D { l: 7, t: 0, i: 1745, }, D { l: 138, t: 0, i: 243, }, D { l: 4, t: 10, i: 408, }, D { l: 4, t: 10, i: 741, }, D { l: 135, t: 10, i: 500, }, D { l: 134, t: 0, i: 1396, }, D { l: 133, t: 0, i: 560, }, D { l: 6, t: 0, i: 1658, }, D { l: 9, t: 0, i: 3 }, D { l: 10, t: 0, i: 154, }, D { l: 11, t: 0, i: 641, }, D { l: 13, t: 0, i: 85 }, D { l: 13, t: 0, i: 201, }, D { l: 141, t: 0, i: 346, }, D { l: 135, t: 11, i: 1595, }, D { l: 5, t: 11, i: 633, }, D { l: 6, t: 11, i: 28 }, D { l: 7, t: 11, i: 219, }, D { l: 135, t: 11, i: 1323, }, D { l: 9, t: 11, i: 769, }, D { l: 140, t: 11, i: 185, }, D { l: 135, t: 11, i: 785, }, D { l: 7, t: 11, i: 359, }, D { l: 8, t: 11, i: 243, }, D { l: 140, t: 11, i: 175, }, D { l: 138, t: 0, i: 586, }, D { l: 7, t: 0, i: 1271, }, D { l: 134, t: 10, i: 73, }, D { l: 132, t: 11, i: 105, }, D { l: 4, t: 0, i: 166 }, D { l: 5, t: 0, i: 505 }, D { l: 134, t: 0, i: 1670, }, D { l: 133, t: 10, i: 576, }, D { l: 4, t: 11, i: 324, }, D { l: 138, t: 11, i: 104, }, D { l: 142, t: 10, i: 231, }, D { l: 6, t: 0, i: 637 }, D { l: 7, t: 10, i: 1264, }, D { l: 7, t: 10, i: 1678, }, D { l: 11, t: 10, i: 945, }, D { l: 12, t: 10, i: 341, }, D { l: 12, t: 10, i: 471, }, D { l: 12, t: 10, i: 569, }, D { l: 23, t: 11, i: 21, }, D { l: 151, t: 11, i: 23, }, D { l: 8, t: 11, i: 559, }, D { l: 141, t: 11, i: 109, }, D { l: 134, t: 0, i: 1947, }, D { l: 7, t: 0, i: 445 }, D { l: 8, t: 0, i: 307 }, D { l: 8, t: 0, i: 704 }, D { l: 10, t: 0, i: 41 }, D { l: 10, t: 0, i: 439, }, D { l: 11, t: 0, i: 237, }, D { l: 11, t: 0, i: 622, }, D { l: 140, t: 0, i: 201, }, D { l: 135, t: 11, i: 963, }, D { l: 135, t: 0, i: 1977, }, D { l: 4, t: 0, i: 189 }, D { l: 5, t: 0, i: 713 }, D { l: 136, t: 0, i: 57, }, D { l: 138, t: 0, i: 371, }, D { l: 135, t: 10, i: 538, }, D { l: 132, t: 0, i: 552, }, D { l: 6, t: 0, i: 883 }, D { l: 133, t: 10, i: 413, }, D { l: 6, t: 0, i: 923 }, D { l: 132, t: 11, i: 758, }, D { l: 138, t: 11, i: 215, }, D { l: 136, t: 10, i: 495, }, D { l: 7, t: 10, i: 54 }, D { l: 8, t: 10, i: 312, }, D { l: 10, t: 10, i: 191, }, D { l: 10, t: 10, i: 614, }, D { l: 140, t: 10, i: 567, }, D { l: 7, t: 11, i: 351, }, D { l: 139, t: 11, i: 128, }, D { l: 7, t: 0, i: 875 }, D { l: 6, t: 10, i: 468, }, D { l: 7, t: 10, i: 1478, }, D { l: 8, t: 10, i: 530, }, D { l: 142, t: 10, i: 290, }, D { l: 135, t: 0, i: 1788, }, D { l: 17, t: 0, i: 49 }, D { l: 133, t: 11, i: 918, }, D { l: 12, t: 11, i: 398, }, D { l: 20, t: 11, i: 39, }, D { l: 21, t: 11, i: 11, }, D { l: 150, t: 11, i: 41, }, D { l: 10, t: 0, i: 661, }, D { l: 6, t: 10, i: 484, }, D { l: 135, t: 10, i: 822, }, D { l: 135, t: 0, i: 1945, }, D { l: 134, t: 0, i: 794, }, D { l: 137, t: 10, i: 900, }, D { l: 135, t: 10, i: 1335, }, D { l: 6, t: 10, i: 1724, }, D { l: 135, t: 10, i: 2022, }, D { l: 132, t: 11, i: 340, }, D { l: 134, t: 0, i: 1135, }, D { l: 4, t: 0, i: 784 }, D { l: 133, t: 0, i: 745, }, D { l: 5, t: 0, i: 84 }, D { l: 134, t: 0, i: 163, }, D { l: 133, t: 0, i: 410, }, D { l: 4, t: 0, i: 976 }, D { l: 5, t: 11, i: 985, }, D { l: 7, t: 11, i: 509, }, D { l: 7, t: 11, i: 529, }, D { l: 145, t: 11, i: 96, }, D { l: 132, t: 10, i: 474, }, D { l: 134, t: 0, i: 703, }, D { l: 135, t: 11, i: 1919, }, D { l: 5, t: 0, i: 322 }, D { l: 8, t: 0, i: 186 }, D { l: 9, t: 0, i: 262 }, D { l: 10, t: 0, i: 187, }, D { l: 142, t: 0, i: 208, }, D { l: 135, t: 10, i: 1504, }, D { l: 133, t: 0, i: 227, }, D { l: 9, t: 0, i: 560 }, D { l: 13, t: 0, i: 208, }, D { l: 133, t: 10, i: 305, }, D { l: 132, t: 11, i: 247, }, D { l: 7, t: 0, i: 1395, }, D { l: 8, t: 0, i: 486 }, D { l: 9, t: 0, i: 236 }, D { l: 9, t: 0, i: 878 }, D { l: 10, t: 0, i: 218, }, D { l: 11, t: 0, i: 95 }, D { l: 19, t: 0, i: 17 }, D { l: 147, t: 0, i: 31, }, D { l: 7, t: 0, i: 2043, }, D { l: 8, t: 0, i: 672 }, D { l: 141, t: 0, i: 448, }, D { l: 4, t: 11, i: 184, }, D { l: 5, t: 11, i: 390, }, D { l: 6, t: 11, i: 337, }, D { l: 7, t: 11, i: 23 }, D { l: 7, t: 11, i: 494, }, D { l: 7, t: 11, i: 618, }, D { l: 7, t: 11, i: 1456, }, D { l: 8, t: 11, i: 27 }, D { l: 8, t: 11, i: 599, }, D { l: 10, t: 11, i: 153, }, D { l: 139, t: 11, i: 710, }, D { l: 135, t: 0, i: 466, }, D { l: 135, t: 10, i: 1236, }, D { l: 6, t: 0, i: 167 }, D { l: 7, t: 0, i: 186 }, D { l: 7, t: 0, i: 656 }, D { l: 10, t: 0, i: 643, }, D { l: 4, t: 10, i: 480, }, D { l: 6, t: 10, i: 302, }, D { l: 6, t: 10, i: 1642, }, D { l: 7, t: 10, i: 837, }, D { l: 7, t: 10, i: 1547, }, D { l: 7, t: 10, i: 1657, }, D { l: 8, t: 10, i: 429, }, D { l: 9, t: 10, i: 228, }, D { l: 13, t: 10, i: 289, }, D { l: 13, t: 10, i: 343, }, D { l: 147, t: 10, i: 101, }, D { l: 134, t: 0, i: 1428, }, D { l: 134, t: 0, i: 1440, }, D { l: 5, t: 0, i: 412 }, D { l: 7, t: 10, i: 278, }, D { l: 10, t: 10, i: 739, }, D { l: 11, t: 10, i: 708, }, D { l: 141, t: 10, i: 348, }, D { l: 134, t: 0, i: 1118, }, D { l: 136, t: 0, i: 562, }, D { l: 148, t: 11, i: 46, }, D { l: 9, t: 0, i: 316 }, D { l: 139, t: 0, i: 256, }, D { l: 134, t: 0, i: 1771, }, D { l: 135, t: 0, i: 1190, }, D { l: 137, t: 0, i: 132, }, D { l: 10, t: 11, i: 227, }, D { l: 11, t: 11, i: 497, }, D { l: 11, t: 11, i: 709, }, D { l: 140, t: 11, i: 415, }, D { l: 143, t: 0, i: 66, }, D { l: 6, t: 11, i: 360, }, D { l: 7, t: 11, i: 1664, }, D { l: 136, t: 11, i: 478, }, D { l: 144, t: 10, i: 28, }, D { l: 4, t: 0, i: 317 }, D { l: 135, t: 0, i: 1279, }, D { l: 5, t: 0, i: 63 }, D { l: 133, t: 0, i: 509, }, D { l: 136, t: 11, i: 699, }, D { l: 145, t: 10, i: 36, }, D { l: 134, t: 0, i: 1475, }, D { l: 11, t: 11, i: 343, }, D { l: 142, t: 11, i: 127, }, D { l: 132, t: 11, i: 739, }, D { l: 132, t: 0, i: 288, }, D { l: 135, t: 11, i: 1757, }, D { l: 8, t: 0, i: 89 }, D { l: 8, t: 0, i: 620 }, D { l: 9, t: 0, i: 608 }, D { l: 11, t: 0, i: 628, }, D { l: 12, t: 0, i: 322, }, D { l: 143, t: 0, i: 124, }, D { l: 134, t: 0, i: 1225, }, D { l: 7, t: 0, i: 1189, }, D { l: 4, t: 11, i: 67 }, D { l: 5, t: 11, i: 422, }, D { l: 6, t: 10, i: 363, }, D { l: 7, t: 11, i: 1037, }, D { l: 7, t: 11, i: 1289, }, D { l: 7, t: 11, i: 1555, }, D { l: 7, t: 10, i: 1955, }, D { l: 8, t: 10, i: 725, }, D { l: 9, t: 11, i: 741, }, D { l: 145, t: 11, i: 108, }, D { l: 134, t: 0, i: 1468, }, D { l: 6, t: 0, i: 689 }, D { l: 134, t: 0, i: 1451, }, D { l: 138, t: 0, i: 120, }, D { l: 151, t: 0, i: 1 }, D { l: 137, t: 10, i: 805, }, D { l: 142, t: 0, i: 329, }, D { l: 5, t: 10, i: 813, }, D { l: 135, t: 10, i: 2046, }, D { l: 135, t: 0, i: 226, }, D { l: 138, t: 11, i: 96, }, D { l: 7, t: 0, i: 1855, }, D { l: 5, t: 10, i: 712, }, D { l: 11, t: 10, i: 17, }, D { l: 13, t: 10, i: 321, }, D { l: 144, t: 10, i: 67, }, D { l: 9, t: 0, i: 461 }, D { l: 6, t: 10, i: 320, }, D { l: 7, t: 10, i: 781, }, D { l: 7, t: 10, i: 1921, }, D { l: 9, t: 10, i: 55 }, D { l: 10, t: 10, i: 186, }, D { l: 10, t: 10, i: 273, }, D { l: 10, t: 10, i: 664, }, D { l: 10, t: 10, i: 801, }, D { l: 11, t: 10, i: 996, }, D { l: 11, t: 10, i: 997, }, D { l: 13, t: 10, i: 157, }, D { l: 142, t: 10, i: 170, }, D { l: 8, t: 11, i: 203, }, D { l: 8, t: 10, i: 271, }, D { l: 11, t: 11, i: 823, }, D { l: 11, t: 11, i: 846, }, D { l: 12, t: 11, i: 482, }, D { l: 13, t: 11, i: 133, }, D { l: 13, t: 11, i: 277, }, D { l: 13, t: 11, i: 302, }, D { l: 13, t: 11, i: 464, }, D { l: 14, t: 11, i: 205, }, D { l: 142, t: 11, i: 221, }, D { l: 135, t: 0, i: 1346, }, D { l: 4, t: 11, i: 449, }, D { l: 133, t: 11, i: 718, }, D { l: 134, t: 0, i: 85, }, D { l: 14, t: 0, i: 299, }, D { l: 7, t: 10, i: 103, }, D { l: 7, t: 10, i: 863, }, D { l: 11, t: 10, i: 184, }, D { l: 145, t: 10, i: 62, }, D { l: 4, t: 11, i: 355, }, D { l: 6, t: 11, i: 311, }, D { l: 9, t: 11, i: 256, }, D { l: 138, t: 11, i: 404, }, D { l: 137, t: 10, i: 659, }, D { l: 138, t: 11, i: 758, }, D { l: 133, t: 11, i: 827, }, D { l: 5, t: 11, i: 64 }, D { l: 140, t: 11, i: 581, }, D { l: 134, t: 0, i: 1171, }, D { l: 4, t: 11, i: 442, }, D { l: 7, t: 11, i: 1047, }, D { l: 7, t: 11, i: 1352, }, D { l: 135, t: 11, i: 1643, }, D { l: 132, t: 0, i: 980, }, D { l: 5, t: 11, i: 977, }, D { l: 6, t: 11, i: 288, }, D { l: 7, t: 11, i: 528, }, D { l: 135, t: 11, i: 1065, }, D { l: 5, t: 0, i: 279 }, D { l: 6, t: 0, i: 235 }, D { l: 7, t: 0, i: 468 }, D { l: 8, t: 0, i: 446 }, D { l: 9, t: 0, i: 637 }, D { l: 10, t: 0, i: 717, }, D { l: 11, t: 0, i: 738, }, D { l: 140, t: 0, i: 514, }, D { l: 132, t: 0, i: 293, }, D { l: 11, t: 10, i: 337, }, D { l: 142, t: 10, i: 303, }, D { l: 136, t: 11, i: 285, }, D { l: 5, t: 0, i: 17 }, D { l: 6, t: 0, i: 371 }, D { l: 9, t: 0, i: 528 }, D { l: 12, t: 0, i: 364, }, D { l: 132, t: 11, i: 254, }, D { l: 5, t: 10, i: 77 }, D { l: 7, t: 10, i: 1455, }, D { l: 10, t: 10, i: 843, }, D { l: 147, t: 10, i: 73, }, D { l: 150, t: 0, i: 5 }, D { l: 132, t: 10, i: 458, }, D { l: 6, t: 11, i: 12 }, D { l: 7, t: 11, i: 1219, }, D { l: 145, t: 11, i: 73, }, D { l: 135, t: 10, i: 1420, }, D { l: 6, t: 10, i: 109, }, D { l: 138, t: 10, i: 382, }, D { l: 135, t: 11, i: 125, }, D { l: 6, t: 10, i: 330, }, D { l: 7, t: 10, i: 1084, }, D { l: 139, t: 10, i: 142, }, D { l: 6, t: 11, i: 369, }, D { l: 6, t: 11, i: 502, }, D { l: 7, t: 11, i: 1036, }, D { l: 8, t: 11, i: 348, }, D { l: 9, t: 11, i: 452, }, D { l: 10, t: 11, i: 26, }, D { l: 11, t: 11, i: 224, }, D { l: 11, t: 11, i: 387, }, D { l: 11, t: 11, i: 772, }, D { l: 12, t: 11, i: 95, }, D { l: 12, t: 11, i: 629, }, D { l: 13, t: 11, i: 195, }, D { l: 13, t: 11, i: 207, }, D { l: 13, t: 11, i: 241, }, D { l: 14, t: 11, i: 260, }, D { l: 14, t: 11, i: 270, }, D { l: 143, t: 11, i: 140, }, D { l: 132, t: 11, i: 269, }, D { l: 5, t: 11, i: 480, }, D { l: 7, t: 11, i: 532, }, D { l: 7, t: 11, i: 1197, }, D { l: 7, t: 11, i: 1358, }, D { l: 8, t: 11, i: 291, }, D { l: 11, t: 11, i: 349, }, D { l: 142, t: 11, i: 396, }, D { l: 150, t: 0, i: 48, }, D { l: 10, t: 0, i: 601, }, D { l: 13, t: 0, i: 353, }, D { l: 141, t: 0, i: 376, }, D { l: 5, t: 0, i: 779 }, D { l: 5, t: 0, i: 807 }, D { l: 6, t: 0, i: 1655, }, D { l: 134, t: 0, i: 1676, }, D { l: 142, t: 11, i: 223, }, D { l: 4, t: 0, i: 196 }, D { l: 5, t: 0, i: 558 }, D { l: 133, t: 0, i: 949, }, D { l: 148, t: 11, i: 15, }, D { l: 135, t: 11, i: 1764, }, D { l: 134, t: 0, i: 1322, }, D { l: 132, t: 0, i: 752, }, D { l: 139, t: 0, i: 737, }, D { l: 135, t: 11, i: 657, }, D { l: 136, t: 11, i: 533, }, D { l: 135, t: 0, i: 412, }, D { l: 4, t: 0, i: 227 }, D { l: 5, t: 0, i: 159 }, D { l: 5, t: 0, i: 409 }, D { l: 7, t: 0, i: 80 }, D { l: 8, t: 0, i: 556 }, D { l: 10, t: 0, i: 479, }, D { l: 12, t: 0, i: 418, }, D { l: 14, t: 0, i: 50 }, D { l: 14, t: 0, i: 123, }, D { l: 14, t: 0, i: 192, }, D { l: 14, t: 0, i: 249, }, D { l: 14, t: 0, i: 295, }, D { l: 143, t: 0, i: 27, }, D { l: 7, t: 0, i: 1470, }, D { l: 8, t: 0, i: 66 }, D { l: 8, t: 0, i: 137 }, D { l: 8, t: 0, i: 761 }, D { l: 9, t: 0, i: 638 }, D { l: 11, t: 0, i: 80 }, D { l: 11, t: 0, i: 212, }, D { l: 11, t: 0, i: 368, }, D { l: 11, t: 0, i: 418, }, D { l: 12, t: 0, i: 8 }, D { l: 13, t: 0, i: 15 }, D { l: 16, t: 0, i: 61 }, D { l: 17, t: 0, i: 59 }, D { l: 19, t: 0, i: 28 }, D { l: 148, t: 0, i: 84, }, D { l: 135, t: 10, i: 1985, }, D { l: 4, t: 11, i: 211, }, D { l: 4, t: 11, i: 332, }, D { l: 5, t: 11, i: 335, }, D { l: 6, t: 11, i: 238, }, D { l: 7, t: 11, i: 269, }, D { l: 7, t: 11, i: 811, }, D { l: 7, t: 11, i: 1797, }, D { l: 8, t: 10, i: 122, }, D { l: 8, t: 11, i: 836, }, D { l: 9, t: 11, i: 507, }, D { l: 141, t: 11, i: 242, }, D { l: 6, t: 0, i: 683 }, D { l: 134, t: 0, i: 1252, }, D { l: 4, t: 0, i: 873 }, D { l: 132, t: 10, i: 234, }, D { l: 134, t: 0, i: 835, }, D { l: 6, t: 0, i: 38 }, D { l: 7, t: 0, i: 1220, }, D { l: 8, t: 0, i: 185 }, D { l: 8, t: 0, i: 256 }, D { l: 9, t: 0, i: 22 }, D { l: 9, t: 0, i: 331 }, D { l: 10, t: 0, i: 738, }, D { l: 11, t: 0, i: 205, }, D { l: 11, t: 0, i: 540, }, D { l: 11, t: 0, i: 746, }, D { l: 13, t: 0, i: 465, }, D { l: 14, t: 0, i: 88 }, D { l: 142, t: 0, i: 194, }, D { l: 138, t: 0, i: 986, }, D { l: 5, t: 11, i: 1009, }, D { l: 12, t: 11, i: 582, }, D { l: 146, t: 11, i: 131, }, D { l: 4, t: 0, i: 159 }, D { l: 6, t: 0, i: 115 }, D { l: 7, t: 0, i: 252 }, D { l: 7, t: 0, i: 257 }, D { l: 7, t: 0, i: 1928, }, D { l: 8, t: 0, i: 69 }, D { l: 9, t: 0, i: 384 }, D { l: 10, t: 0, i: 91 }, D { l: 10, t: 0, i: 615, }, D { l: 12, t: 0, i: 375, }, D { l: 14, t: 0, i: 235, }, D { l: 18, t: 0, i: 117, }, D { l: 147, t: 0, i: 123, }, D { l: 133, t: 0, i: 911, }, D { l: 136, t: 0, i: 278, }, D { l: 5, t: 10, i: 430, }, D { l: 5, t: 10, i: 932, }, D { l: 6, t: 10, i: 131, }, D { l: 7, t: 10, i: 417, }, D { l: 9, t: 10, i: 522, }, D { l: 11, t: 10, i: 314, }, D { l: 141, t: 10, i: 390, }, D { l: 14, t: 10, i: 149, }, D { l: 14, t: 10, i: 399, }, D { l: 143, t: 10, i: 57, }, D { l: 4, t: 0, i: 151 }, D { l: 7, t: 0, i: 1567, }, D { l: 136, t: 0, i: 749, }, D { l: 5, t: 11, i: 228, }, D { l: 6, t: 11, i: 203, }, D { l: 7, t: 11, i: 156, }, D { l: 8, t: 11, i: 347, }, D { l: 137, t: 11, i: 265, }, D { l: 132, t: 10, i: 507, }, D { l: 10, t: 0, i: 989, }, D { l: 140, t: 0, i: 956, }, D { l: 133, t: 0, i: 990, }, D { l: 5, t: 0, i: 194 }, D { l: 6, t: 0, i: 927 }, D { l: 7, t: 0, i: 1662, }, D { l: 9, t: 0, i: 90 }, D { l: 140, t: 0, i: 564, }, D { l: 4, t: 10, i: 343, }, D { l: 133, t: 10, i: 511, }, D { l: 133, t: 0, i: 425, }, D { l: 7, t: 10, i: 455, }, D { l: 138, t: 10, i: 591, }, D { l: 4, t: 0, i: 774 }, D { l: 7, t: 11, i: 476, }, D { l: 7, t: 11, i: 1592, }, D { l: 138, t: 11, i: 87, }, D { l: 5, t: 0, i: 971 }, D { l: 135, t: 10, i: 1381, }, D { l: 5, t: 11, i: 318, }, D { l: 147, t: 11, i: 121, }, D { l: 5, t: 11, i: 291, }, D { l: 7, t: 11, i: 765, }, D { l: 9, t: 11, i: 389, }, D { l: 140, t: 11, i: 548, }, D { l: 134, t: 10, i: 575, }, D { l: 4, t: 0, i: 827 }, D { l: 12, t: 0, i: 646, }, D { l: 12, t: 0, i: 705, }, D { l: 12, t: 0, i: 712, }, D { l: 140, t: 0, i: 714, }, D { l: 139, t: 0, i: 752, }, D { l: 137, t: 0, i: 662, }, D { l: 5, t: 0, i: 72 }, D { l: 6, t: 0, i: 264 }, D { l: 7, t: 0, i: 21 }, D { l: 7, t: 0, i: 46 }, D { l: 7, t: 0, i: 2013, }, D { l: 8, t: 0, i: 215 }, D { l: 8, t: 0, i: 513 }, D { l: 10, t: 0, i: 266, }, D { l: 139, t: 0, i: 22, }, D { l: 139, t: 11, i: 522, }, D { l: 6, t: 0, i: 239 }, D { l: 7, t: 0, i: 118 }, D { l: 10, t: 0, i: 95 }, D { l: 11, t: 0, i: 603, }, D { l: 13, t: 0, i: 443, }, D { l: 14, t: 0, i: 160, }, D { l: 143, t: 0, i: 4 }, D { l: 6, t: 0, i: 431 }, D { l: 134, t: 0, i: 669, }, D { l: 7, t: 10, i: 1127, }, D { l: 7, t: 10, i: 1572, }, D { l: 10, t: 10, i: 297, }, D { l: 10, t: 10, i: 422, }, D { l: 11, t: 10, i: 764, }, D { l: 11, t: 10, i: 810, }, D { l: 12, t: 10, i: 264, }, D { l: 13, t: 10, i: 102, }, D { l: 13, t: 10, i: 300, }, D { l: 13, t: 10, i: 484, }, D { l: 14, t: 10, i: 147, }, D { l: 14, t: 10, i: 229, }, D { l: 17, t: 10, i: 71, }, D { l: 18, t: 10, i: 118, }, D { l: 147, t: 10, i: 120, }, D { l: 5, t: 0, i: 874 }, D { l: 6, t: 0, i: 1677, }, D { l: 15, t: 0, i: 0 }, D { l: 10, t: 11, i: 525, }, D { l: 139, t: 11, i: 82, }, D { l: 6, t: 0, i: 65 }, D { l: 7, t: 0, i: 939 }, D { l: 7, t: 0, i: 1172, }, D { l: 7, t: 0, i: 1671, }, D { l: 9, t: 0, i: 540 }, D { l: 10, t: 0, i: 696, }, D { l: 11, t: 0, i: 265, }, D { l: 11, t: 0, i: 732, }, D { l: 11, t: 0, i: 928, }, D { l: 11, t: 0, i: 937, }, D { l: 141, t: 0, i: 438, }, D { l: 134, t: 0, i: 1350, }, D { l: 136, t: 11, i: 547, }, D { l: 132, t: 11, i: 422, }, D { l: 5, t: 11, i: 355, }, D { l: 145, t: 11, i: 0, }, D { l: 137, t: 11, i: 905, }, D { l: 5, t: 0, i: 682 }, D { l: 135, t: 0, i: 1887, }, D { l: 132, t: 0, i: 809, }, D { l: 4, t: 0, i: 696 }, D { l: 133, t: 11, i: 865, }, D { l: 6, t: 0, i: 1074, }, D { l: 6, t: 0, i: 1472, }, D { l: 14, t: 10, i: 35, }, D { l: 142, t: 10, i: 191, }, D { l: 5, t: 11, i: 914, }, D { l: 134, t: 11, i: 1625, }, D { l: 133, t: 11, i: 234, }, D { l: 135, t: 11, i: 1383, }, D { l: 137, t: 11, i: 780, }, D { l: 132, t: 10, i: 125, }, D { l: 4, t: 0, i: 726 }, D { l: 133, t: 0, i: 630, }, D { l: 8, t: 0, i: 802 }, D { l: 136, t: 0, i: 838, }, D { l: 132, t: 10, i: 721, }, D { l: 6, t: 0, i: 1337, }, D { l: 7, t: 0, i: 776 }, D { l: 19, t: 0, i: 56 }, D { l: 136, t: 10, i: 145, }, D { l: 132, t: 0, i: 970, }, D { l: 7, t: 10, i: 792, }, D { l: 8, t: 10, i: 147, }, D { l: 10, t: 10, i: 821, }, D { l: 139, t: 10, i: 1021, }, D { l: 139, t: 10, i: 970, }, D { l: 8, t: 0, i: 940 }, D { l: 137, t: 0, i: 797, }, D { l: 135, t: 11, i: 1312, }, D { l: 9, t: 0, i: 248 }, D { l: 10, t: 0, i: 400, }, D { l: 7, t: 11, i: 816, }, D { l: 7, t: 11, i: 1241, }, D { l: 7, t: 10, i: 1999, }, D { l: 9, t: 11, i: 283, }, D { l: 9, t: 11, i: 520, }, D { l: 10, t: 11, i: 213, }, D { l: 10, t: 11, i: 307, }, D { l: 10, t: 11, i: 463, }, D { l: 10, t: 11, i: 671, }, D { l: 10, t: 11, i: 746, }, D { l: 11, t: 11, i: 401, }, D { l: 11, t: 11, i: 794, }, D { l: 12, t: 11, i: 517, }, D { l: 18, t: 11, i: 107, }, D { l: 147, t: 11, i: 115, }, D { l: 6, t: 0, i: 1951, }, D { l: 134, t: 0, i: 2040, }, D { l: 135, t: 11, i: 339, }, D { l: 13, t: 0, i: 41 }, D { l: 15, t: 0, i: 93 }, D { l: 5, t: 10, i: 168, }, D { l: 5, t: 10, i: 930, }, D { l: 8, t: 10, i: 74 }, D { l: 9, t: 10, i: 623, }, D { l: 12, t: 10, i: 500, }, D { l: 140, t: 10, i: 579, }, D { l: 6, t: 0, i: 118 }, D { l: 7, t: 0, i: 215 }, D { l: 7, t: 0, i: 1521, }, D { l: 140, t: 0, i: 11, }, D { l: 6, t: 10, i: 220, }, D { l: 7, t: 10, i: 1101, }, D { l: 141, t: 10, i: 105, }, D { l: 6, t: 11, i: 421, }, D { l: 7, t: 11, i: 61 }, D { l: 7, t: 11, i: 1540, }, D { l: 10, t: 11, i: 11, }, D { l: 138, t: 11, i: 501, }, D { l: 7, t: 0, i: 615 }, D { l: 138, t: 0, i: 251, }, D { l: 140, t: 11, i: 631, }, D { l: 135, t: 0, i: 1044, }, D { l: 6, t: 10, i: 19 }, D { l: 7, t: 10, i: 1413, }, D { l: 139, t: 10, i: 428, }, D { l: 133, t: 0, i: 225, }, D { l: 7, t: 10, i: 96 }, D { l: 8, t: 10, i: 401, }, D { l: 8, t: 10, i: 703, }, D { l: 137, t: 10, i: 896, }, D { l: 145, t: 10, i: 116, }, D { l: 6, t: 11, i: 102, }, D { l: 7, t: 11, i: 72 }, D { l: 15, t: 11, i: 142, }, D { l: 147, t: 11, i: 67, }, D { l: 7, t: 10, i: 1961, }, D { l: 7, t: 10, i: 1965, }, D { l: 8, t: 10, i: 702, }, D { l: 136, t: 10, i: 750, }, D { l: 7, t: 10, i: 2030, }, D { l: 8, t: 10, i: 150, }, D { l: 8, t: 10, i: 737, }, D { l: 12, t: 10, i: 366, }, D { l: 151, t: 11, i: 30, }, D { l: 4, t: 0, i: 370 }, D { l: 5, t: 0, i: 756 }, D { l: 7, t: 0, i: 1326, }, D { l: 135, t: 11, i: 823, }, D { l: 8, t: 10, i: 800, }, D { l: 9, t: 10, i: 148, }, D { l: 9, t: 10, i: 872, }, D { l: 9, t: 10, i: 890, }, D { l: 11, t: 10, i: 309, }, D { l: 11, t: 10, i: 1001, }, D { l: 13, t: 10, i: 267, }, D { l: 141, t: 10, i: 323, }, D { l: 6, t: 0, i: 1662, }, D { l: 7, t: 0, i: 48 }, D { l: 8, t: 0, i: 771 }, D { l: 10, t: 0, i: 116, }, D { l: 13, t: 0, i: 104, }, D { l: 14, t: 0, i: 105, }, D { l: 14, t: 0, i: 184, }, D { l: 15, t: 0, i: 168, }, D { l: 19, t: 0, i: 92 }, D { l: 148, t: 0, i: 68, }, D { l: 10, t: 0, i: 209, }, D { l: 135, t: 11, i: 1870, }, D { l: 7, t: 11, i: 68 }, D { l: 8, t: 11, i: 48 }, D { l: 8, t: 11, i: 88 }, D { l: 8, t: 11, i: 582, }, D { l: 8, t: 11, i: 681, }, D { l: 9, t: 11, i: 373, }, D { l: 9, t: 11, i: 864, }, D { l: 11, t: 11, i: 157, }, D { l: 11, t: 11, i: 336, }, D { l: 11, t: 11, i: 843, }, D { l: 148, t: 11, i: 27, }, D { l: 134, t: 0, i: 930, }, D { l: 4, t: 11, i: 88 }, D { l: 5, t: 11, i: 137, }, D { l: 5, t: 11, i: 174, }, D { l: 5, t: 11, i: 777, }, D { l: 6, t: 11, i: 1664, }, D { l: 6, t: 11, i: 1725, }, D { l: 7, t: 11, i: 77 }, D { l: 7, t: 11, i: 426, }, D { l: 7, t: 11, i: 1317, }, D { l: 7, t: 11, i: 1355, }, D { l: 8, t: 11, i: 126, }, D { l: 8, t: 11, i: 563, }, D { l: 9, t: 11, i: 523, }, D { l: 9, t: 11, i: 750, }, D { l: 10, t: 11, i: 310, }, D { l: 10, t: 11, i: 836, }, D { l: 11, t: 11, i: 42, }, D { l: 11, t: 11, i: 318, }, D { l: 11, t: 11, i: 731, }, D { l: 12, t: 11, i: 68, }, D { l: 12, t: 11, i: 92, }, D { l: 12, t: 11, i: 507, }, D { l: 12, t: 11, i: 692, }, D { l: 13, t: 11, i: 81, }, D { l: 13, t: 11, i: 238, }, D { l: 13, t: 11, i: 374, }, D { l: 18, t: 11, i: 138, }, D { l: 19, t: 11, i: 78, }, D { l: 19, t: 11, i: 111, }, D { l: 20, t: 11, i: 55, }, D { l: 20, t: 11, i: 77, }, D { l: 148, t: 11, i: 92, }, D { l: 4, t: 11, i: 938, }, D { l: 135, t: 11, i: 1831, }, D { l: 5, t: 10, i: 547, }, D { l: 7, t: 10, i: 424, }, D { l: 8, t: 11, i: 617, }, D { l: 138, t: 11, i: 351, }, D { l: 6, t: 0, i: 1286, }, D { l: 6, t: 11, i: 1668, }, D { l: 7, t: 11, i: 1499, }, D { l: 8, t: 11, i: 117, }, D { l: 9, t: 11, i: 314, }, D { l: 138, t: 11, i: 174, }, D { l: 6, t: 0, i: 759 }, D { l: 6, t: 0, i: 894 }, D { l: 7, t: 11, i: 707, }, D { l: 139, t: 11, i: 563, }, D { l: 4, t: 0, i: 120 }, D { l: 135, t: 0, i: 1894, }, D { l: 9, t: 0, i: 385 }, D { l: 149, t: 0, i: 17, }, D { l: 138, t: 0, i: 429, }, D { l: 133, t: 11, i: 403, }, D { l: 5, t: 0, i: 820 }, D { l: 135, t: 0, i: 931, }, D { l: 10, t: 0, i: 199, }, D { l: 133, t: 10, i: 133, }, D { l: 6, t: 0, i: 151 }, D { l: 6, t: 0, i: 1675, }, D { l: 7, t: 0, i: 383 }, D { l: 151, t: 0, i: 10, }, D { l: 6, t: 0, i: 761 }, D { l: 136, t: 10, i: 187, }, D { l: 8, t: 0, i: 365 }, D { l: 10, t: 10, i: 0 }, D { l: 10, t: 10, i: 818, }, D { l: 139, t: 10, i: 988, }, D { l: 4, t: 11, i: 44 }, D { l: 5, t: 11, i: 311, }, D { l: 6, t: 11, i: 156, }, D { l: 7, t: 11, i: 639, }, D { l: 7, t: 11, i: 762, }, D { l: 7, t: 11, i: 1827, }, D { l: 9, t: 11, i: 8 }, D { l: 9, t: 11, i: 462, }, D { l: 148, t: 11, i: 83, }, D { l: 4, t: 11, i: 346, }, D { l: 7, t: 11, i: 115, }, D { l: 9, t: 11, i: 180, }, D { l: 9, t: 11, i: 456, }, D { l: 138, t: 11, i: 363, }, D { l: 136, t: 10, i: 685, }, D { l: 7, t: 0, i: 1086, }, D { l: 145, t: 0, i: 46, }, D { l: 6, t: 0, i: 1624, }, D { l: 11, t: 0, i: 11 }, D { l: 12, t: 0, i: 422, }, D { l: 13, t: 0, i: 444, }, D { l: 142, t: 0, i: 360, }, D { l: 6, t: 0, i: 1020, }, D { l: 6, t: 0, i: 1260, }, D { l: 134, t: 0, i: 1589, }, D { l: 4, t: 0, i: 43 }, D { l: 5, t: 0, i: 344 }, D { l: 5, t: 0, i: 357 }, D { l: 14, t: 0, i: 472, }, D { l: 150, t: 0, i: 58, }, D { l: 6, t: 0, i: 1864, }, D { l: 6, t: 0, i: 1866, }, D { l: 6, t: 0, i: 1868, }, D { l: 6, t: 0, i: 1869, }, D { l: 6, t: 0, i: 1874, }, D { l: 6, t: 0, i: 1877, }, D { l: 6, t: 0, i: 1903, }, D { l: 6, t: 0, i: 1911, }, D { l: 9, t: 0, i: 920 }, D { l: 9, t: 0, i: 921 }, D { l: 9, t: 0, i: 924 }, D { l: 9, t: 0, i: 946 }, D { l: 9, t: 0, i: 959 }, D { l: 9, t: 0, i: 963 }, D { l: 9, t: 0, i: 970 }, D { l: 9, t: 0, i: 997 }, D { l: 9, t: 0, i: 1008, }, D { l: 9, t: 0, i: 1017, }, D { l: 12, t: 0, i: 795, }, D { l: 12, t: 0, i: 797, }, D { l: 12, t: 0, i: 798, }, D { l: 12, t: 0, i: 800, }, D { l: 12, t: 0, i: 803, }, D { l: 12, t: 0, i: 811, }, D { l: 12, t: 0, i: 820, }, D { l: 12, t: 0, i: 821, }, D { l: 12, t: 0, i: 839, }, D { l: 12, t: 0, i: 841, }, D { l: 12, t: 0, i: 848, }, D { l: 12, t: 0, i: 911, }, D { l: 12, t: 0, i: 921, }, D { l: 12, t: 0, i: 922, }, D { l: 12, t: 0, i: 925, }, D { l: 12, t: 0, i: 937, }, D { l: 12, t: 0, i: 944, }, D { l: 12, t: 0, i: 945, }, D { l: 12, t: 0, i: 953, }, D { l: 15, t: 0, i: 184, }, D { l: 15, t: 0, i: 191, }, D { l: 15, t: 0, i: 199, }, D { l: 15, t: 0, i: 237, }, D { l: 15, t: 0, i: 240, }, D { l: 15, t: 0, i: 243, }, D { l: 15, t: 0, i: 246, }, D { l: 18, t: 0, i: 203, }, D { l: 21, t: 0, i: 40 }, D { l: 21, t: 0, i: 52 }, D { l: 21, t: 0, i: 57 }, D { l: 24, t: 0, i: 23 }, D { l: 24, t: 0, i: 28 }, D { l: 152, t: 0, i: 30, }, D { l: 134, t: 0, i: 725, }, D { l: 145, t: 11, i: 58, }, D { l: 133, t: 0, i: 888, }, D { l: 137, t: 10, i: 874, }, D { l: 4, t: 0, i: 711 }, D { l: 8, t: 10, i: 774, }, D { l: 10, t: 10, i: 670, }, D { l: 140, t: 10, i: 51, }, D { l: 144, t: 11, i: 40, }, D { l: 6, t: 11, i: 185, }, D { l: 7, t: 11, i: 1899, }, D { l: 139, t: 11, i: 673, }, D { l: 137, t: 10, i: 701, }, D { l: 137, t: 0, i: 440, }, D { l: 4, t: 11, i: 327, }, D { l: 5, t: 11, i: 478, }, D { l: 7, t: 11, i: 1332, }, D { l: 8, t: 11, i: 753, }, D { l: 140, t: 11, i: 227, }, D { l: 4, t: 10, i: 127, }, D { l: 5, t: 10, i: 350, }, D { l: 6, t: 10, i: 356, }, D { l: 8, t: 10, i: 426, }, D { l: 9, t: 10, i: 572, }, D { l: 10, t: 10, i: 247, }, D { l: 139, t: 10, i: 312, }, D { l: 5, t: 11, i: 1020, }, D { l: 133, t: 11, i: 1022, }, D { l: 4, t: 11, i: 103, }, D { l: 133, t: 11, i: 401, }, D { l: 6, t: 0, i: 1913, }, D { l: 6, t: 0, i: 1926, }, D { l: 6, t: 0, i: 1959, }, D { l: 9, t: 0, i: 914 }, D { l: 9, t: 0, i: 939 }, D { l: 9, t: 0, i: 952 }, D { l: 9, t: 0, i: 979 }, D { l: 9, t: 0, i: 990 }, D { l: 9, t: 0, i: 998 }, D { l: 9, t: 0, i: 1003, }, D { l: 9, t: 0, i: 1023, }, D { l: 12, t: 0, i: 827, }, D { l: 12, t: 0, i: 834, }, D { l: 12, t: 0, i: 845, }, D { l: 12, t: 0, i: 912, }, D { l: 12, t: 0, i: 935, }, D { l: 12, t: 0, i: 951, }, D { l: 15, t: 0, i: 172, }, D { l: 15, t: 0, i: 174, }, D { l: 18, t: 0, i: 198, }, D { l: 149, t: 0, i: 63, }, D { l: 5, t: 0, i: 958 }, D { l: 5, t: 0, i: 987 }, D { l: 4, t: 11, i: 499, }, D { l: 135, t: 11, i: 1421, }, D { l: 7, t: 0, i: 885 }, D { l: 6, t: 10, i: 59 }, D { l: 6, t: 10, i: 1762, }, D { l: 9, t: 10, i: 603, }, D { l: 141, t: 10, i: 397, }, D { l: 10, t: 11, i: 62, }, D { l: 141, t: 11, i: 164, }, D { l: 4, t: 0, i: 847 }, D { l: 135, t: 0, i: 326, }, D { l: 11, t: 0, i: 276, }, D { l: 142, t: 0, i: 293, }, D { l: 4, t: 0, i: 65 }, D { l: 5, t: 0, i: 479 }, D { l: 5, t: 0, i: 1004, }, D { l: 7, t: 0, i: 1913, }, D { l: 8, t: 0, i: 317 }, D { l: 9, t: 0, i: 302 }, D { l: 10, t: 0, i: 612, }, D { l: 13, t: 0, i: 22 }, D { l: 132, t: 11, i: 96, }, D { l: 4, t: 0, i: 261 }, D { l: 135, t: 0, i: 510, }, D { l: 135, t: 0, i: 1514, }, D { l: 6, t: 10, i: 111, }, D { l: 7, t: 10, i: 4 }, D { l: 8, t: 10, i: 163, }, D { l: 8, t: 10, i: 776, }, D { l: 138, t: 10, i: 566, }, D { l: 4, t: 0, i: 291 }, D { l: 9, t: 0, i: 515 }, D { l: 12, t: 0, i: 152, }, D { l: 12, t: 0, i: 443, }, D { l: 13, t: 0, i: 392, }, D { l: 142, t: 0, i: 357, }, D { l: 7, t: 11, i: 399, }, D { l: 135, t: 11, i: 1492, }, D { l: 4, t: 0, i: 589 }, D { l: 139, t: 0, i: 282, }, D { l: 6, t: 11, i: 563, }, D { l: 135, t: 10, i: 1994, }, D { l: 5, t: 10, i: 297, }, D { l: 135, t: 10, i: 1038, }, D { l: 4, t: 0, i: 130 }, D { l: 7, t: 0, i: 843 }, D { l: 135, t: 0, i: 1562, }, D { l: 5, t: 0, i: 42 }, D { l: 5, t: 0, i: 879 }, D { l: 7, t: 0, i: 245 }, D { l: 7, t: 0, i: 324 }, D { l: 7, t: 0, i: 1532, }, D { l: 11, t: 0, i: 463, }, D { l: 11, t: 0, i: 472, }, D { l: 13, t: 0, i: 363, }, D { l: 144, t: 0, i: 52, }, D { l: 4, t: 0, i: 134 }, D { l: 133, t: 0, i: 372, }, D { l: 133, t: 0, i: 680, }, D { l: 136, t: 10, i: 363, }, D { l: 6, t: 0, i: 1997, }, D { l: 8, t: 0, i: 935 }, D { l: 136, t: 0, i: 977, }, D { l: 4, t: 0, i: 810 }, D { l: 135, t: 0, i: 1634, }, D { l: 135, t: 10, i: 1675, }, D { l: 7, t: 0, i: 1390, }, D { l: 4, t: 11, i: 910, }, D { l: 133, t: 11, i: 832, }, D { l: 7, t: 10, i: 808, }, D { l: 8, t: 11, i: 266, }, D { l: 139, t: 11, i: 578, }, D { l: 132, t: 0, i: 644, }, D { l: 4, t: 0, i: 982 }, D { l: 138, t: 0, i: 867, }, D { l: 132, t: 10, i: 280, }, D { l: 135, t: 0, i: 540, }, D { l: 140, t: 10, i: 54, }, D { l: 135, t: 0, i: 123, }, D { l: 134, t: 0, i: 1978, }, D { l: 4, t: 10, i: 421, }, D { l: 133, t: 10, i: 548, }, D { l: 6, t: 0, i: 623 }, D { l: 136, t: 0, i: 789, }, D { l: 4, t: 0, i: 908 }, D { l: 5, t: 0, i: 359 }, D { l: 5, t: 0, i: 508 }, D { l: 6, t: 0, i: 1723, }, D { l: 7, t: 0, i: 343 }, D { l: 7, t: 0, i: 1996, }, D { l: 135, t: 0, i: 2026, }, D { l: 134, t: 0, i: 1220, }, D { l: 4, t: 0, i: 341 }, D { l: 135, t: 0, i: 480, }, D { l: 6, t: 10, i: 254, }, D { l: 9, t: 10, i: 109, }, D { l: 138, t: 10, i: 103, }, D { l: 134, t: 0, i: 888, }, D { l: 8, t: 11, i: 528, }, D { l: 137, t: 11, i: 348, }, D { l: 7, t: 0, i: 1995, }, D { l: 8, t: 0, i: 299 }, D { l: 11, t: 0, i: 890, }, D { l: 12, t: 0, i: 674, }, D { l: 4, t: 11, i: 20 }, D { l: 133, t: 11, i: 616, }, D { l: 135, t: 11, i: 1094, }, D { l: 134, t: 10, i: 1630, }, D { l: 4, t: 0, i: 238 }, D { l: 5, t: 0, i: 503 }, D { l: 6, t: 0, i: 179 }, D { l: 7, t: 0, i: 2003, }, D { l: 8, t: 0, i: 381 }, D { l: 8, t: 0, i: 473 }, D { l: 9, t: 0, i: 149 }, D { l: 10, t: 0, i: 788, }, D { l: 15, t: 0, i: 45 }, D { l: 15, t: 0, i: 86 }, D { l: 20, t: 0, i: 110, }, D { l: 150, t: 0, i: 57, }, D { l: 133, t: 10, i: 671, }, D { l: 4, t: 11, i: 26 }, D { l: 5, t: 11, i: 429, }, D { l: 6, t: 11, i: 245, }, D { l: 7, t: 11, i: 704, }, D { l: 7, t: 11, i: 1379, }, D { l: 135, t: 11, i: 1474, }, D { l: 4, t: 0, i: 121 }, D { l: 5, t: 0, i: 156 }, D { l: 5, t: 0, i: 349 }, D { l: 9, t: 0, i: 431 }, D { l: 10, t: 0, i: 605, }, D { l: 142, t: 0, i: 342, }, D { l: 7, t: 11, i: 943, }, D { l: 139, t: 11, i: 614, }, D { l: 132, t: 10, i: 889, }, D { l: 132, t: 11, i: 621, }, D { l: 7, t: 10, i: 1382, }, D { l: 7, t: 11, i: 1382, }, D { l: 135, t: 10, i: 1910, }, D { l: 132, t: 10, i: 627, }, D { l: 133, t: 10, i: 775, }, D { l: 133, t: 11, i: 542, }, D { l: 133, t: 11, i: 868, }, D { l: 136, t: 11, i: 433, }, D { l: 6, t: 0, i: 1373, }, D { l: 7, t: 0, i: 1011, }, D { l: 11, t: 10, i: 362, }, D { l: 11, t: 10, i: 948, }, D { l: 140, t: 10, i: 388, }, D { l: 6, t: 0, i: 80 }, D { l: 7, t: 0, i: 173 }, D { l: 9, t: 0, i: 547 }, D { l: 10, t: 0, i: 730, }, D { l: 14, t: 0, i: 18 }, D { l: 22, t: 0, i: 39 }, D { l: 135, t: 11, i: 1495, }, D { l: 6, t: 0, i: 1694, }, D { l: 135, t: 0, i: 1974, }, D { l: 140, t: 0, i: 196, }, D { l: 4, t: 0, i: 923 }, D { l: 6, t: 0, i: 507 }, D { l: 6, t: 0, i: 1711, }, D { l: 7, t: 10, i: 451, }, D { l: 8, t: 10, i: 389, }, D { l: 12, t: 10, i: 490, }, D { l: 13, t: 10, i: 16, }, D { l: 13, t: 10, i: 215, }, D { l: 13, t: 10, i: 351, }, D { l: 18, t: 10, i: 132, }, D { l: 147, t: 10, i: 125, }, D { l: 6, t: 0, i: 646 }, D { l: 134, t: 0, i: 1047, }, D { l: 135, t: 10, i: 841, }, D { l: 136, t: 10, i: 566, }, D { l: 6, t: 0, i: 1611, }, D { l: 135, t: 0, i: 1214, }, D { l: 139, t: 0, i: 926, }, D { l: 132, t: 11, i: 525, }, D { l: 132, t: 0, i: 595, }, D { l: 5, t: 0, i: 240 }, D { l: 6, t: 0, i: 459 }, D { l: 7, t: 0, i: 12 }, D { l: 7, t: 0, i: 114 }, D { l: 7, t: 0, i: 949 }, D { l: 7, t: 0, i: 1753, }, D { l: 7, t: 0, i: 1805, }, D { l: 8, t: 0, i: 658 }, D { l: 9, t: 0, i: 1 }, D { l: 11, t: 0, i: 959, }, D { l: 141, t: 0, i: 446, }, D { l: 5, t: 10, i: 912, }, D { l: 134, t: 10, i: 1695, }, D { l: 132, t: 0, i: 446, }, D { l: 7, t: 11, i: 62 }, D { l: 12, t: 11, i: 45, }, D { l: 147, t: 11, i: 112, }, D { l: 5, t: 10, i: 236, }, D { l: 6, t: 10, i: 572, }, D { l: 8, t: 10, i: 492, }, D { l: 11, t: 10, i: 618, }, D { l: 144, t: 10, i: 56, }, D { l: 5, t: 10, i: 190, }, D { l: 136, t: 10, i: 318, }, D { l: 135, t: 10, i: 1376, }, D { l: 4, t: 11, i: 223, }, D { l: 6, t: 11, i: 359, }, D { l: 11, t: 11, i: 3 }, D { l: 13, t: 11, i: 108, }, D { l: 14, t: 11, i: 89, }, D { l: 144, t: 11, i: 22, }, D { l: 132, t: 11, i: 647, }, D { l: 134, t: 0, i: 490, }, D { l: 134, t: 0, i: 491, }, D { l: 134, t: 0, i: 1584, }, D { l: 135, t: 11, i: 685, }, D { l: 138, t: 11, i: 220, }, D { l: 7, t: 0, i: 250 }, D { l: 136, t: 0, i: 507, }, D { l: 132, t: 0, i: 158, }, D { l: 4, t: 0, i: 140 }, D { l: 7, t: 0, i: 362 }, D { l: 8, t: 0, i: 209 }, D { l: 9, t: 0, i: 10 }, D { l: 9, t: 0, i: 160 }, D { l: 9, t: 0, i: 503 }, D { l: 9, t: 0, i: 614 }, D { l: 10, t: 0, i: 689, }, D { l: 11, t: 0, i: 327, }, D { l: 11, t: 0, i: 553, }, D { l: 11, t: 0, i: 725, }, D { l: 11, t: 0, i: 767, }, D { l: 12, t: 0, i: 252, }, D { l: 12, t: 0, i: 583, }, D { l: 13, t: 0, i: 192, }, D { l: 14, t: 0, i: 269, }, D { l: 14, t: 0, i: 356, }, D { l: 148, t: 0, i: 50, }, D { l: 19, t: 0, i: 1 }, D { l: 19, t: 0, i: 26 }, D { l: 150, t: 0, i: 9 }, D { l: 132, t: 11, i: 109, }, D { l: 6, t: 0, i: 228 }, D { l: 7, t: 0, i: 1341, }, D { l: 9, t: 0, i: 408 }, D { l: 138, t: 0, i: 343, }, D { l: 4, t: 0, i: 373 }, D { l: 5, t: 0, i: 283 }, D { l: 6, t: 0, i: 480 }, D { l: 7, t: 0, i: 609 }, D { l: 10, t: 0, i: 860, }, D { l: 138, t: 0, i: 878, }, D { l: 6, t: 0, i: 779 }, D { l: 134, t: 0, i: 1209, }, D { l: 4, t: 0, i: 557 }, D { l: 7, t: 11, i: 263, }, D { l: 7, t: 11, i: 628, }, D { l: 136, t: 11, i: 349, }, D { l: 132, t: 0, i: 548, }, D { l: 7, t: 0, i: 197 }, D { l: 8, t: 0, i: 142 }, D { l: 8, t: 0, i: 325 }, D { l: 9, t: 0, i: 150 }, D { l: 9, t: 0, i: 596 }, D { l: 10, t: 0, i: 350, }, D { l: 10, t: 0, i: 353, }, D { l: 11, t: 0, i: 74 }, D { l: 11, t: 0, i: 315, }, D { l: 12, t: 0, i: 662, }, D { l: 12, t: 0, i: 681, }, D { l: 14, t: 0, i: 423, }, D { l: 143, t: 0, i: 141, }, D { l: 4, t: 11, i: 40 }, D { l: 10, t: 11, i: 67, }, D { l: 11, t: 11, i: 117, }, D { l: 11, t: 11, i: 768, }, D { l: 139, t: 11, i: 935, }, D { l: 7, t: 11, i: 992, }, D { l: 8, t: 11, i: 301, }, D { l: 9, t: 11, i: 722, }, D { l: 12, t: 11, i: 63, }, D { l: 13, t: 11, i: 29, }, D { l: 14, t: 11, i: 161, }, D { l: 143, t: 11, i: 18, }, D { l: 6, t: 0, i: 1490, }, D { l: 138, t: 11, i: 532, }, D { l: 5, t: 0, i: 580 }, D { l: 7, t: 0, i: 378 }, D { l: 7, t: 0, i: 674 }, D { l: 7, t: 0, i: 1424, }, D { l: 15, t: 0, i: 83 }, D { l: 16, t: 0, i: 11 }, D { l: 15, t: 11, i: 83, }, D { l: 144, t: 11, i: 11, }, D { l: 6, t: 0, i: 1057, }, D { l: 6, t: 0, i: 1335, }, D { l: 10, t: 0, i: 316, }, D { l: 7, t: 10, i: 85 }, D { l: 7, t: 10, i: 247, }, D { l: 8, t: 10, i: 585, }, D { l: 138, t: 10, i: 163, }, D { l: 4, t: 0, i: 169 }, D { l: 5, t: 0, i: 83 }, D { l: 6, t: 0, i: 399 }, D { l: 6, t: 0, i: 579 }, D { l: 6, t: 0, i: 1513, }, D { l: 7, t: 0, i: 692 }, D { l: 7, t: 0, i: 846 }, D { l: 7, t: 0, i: 1015, }, D { l: 7, t: 0, i: 1799, }, D { l: 8, t: 0, i: 403 }, D { l: 9, t: 0, i: 394 }, D { l: 10, t: 0, i: 133, }, D { l: 12, t: 0, i: 4 }, D { l: 12, t: 0, i: 297, }, D { l: 12, t: 0, i: 452, }, D { l: 16, t: 0, i: 81 }, D { l: 18, t: 0, i: 25 }, D { l: 21, t: 0, i: 14 }, D { l: 22, t: 0, i: 12 }, D { l: 151, t: 0, i: 18, }, D { l: 134, t: 0, i: 1106, }, D { l: 7, t: 0, i: 1546, }, D { l: 11, t: 0, i: 299, }, D { l: 142, t: 0, i: 407, }, D { l: 134, t: 0, i: 1192, }, D { l: 132, t: 0, i: 177, }, D { l: 5, t: 0, i: 411 }, D { l: 135, t: 0, i: 653, }, D { l: 7, t: 0, i: 439 }, D { l: 10, t: 0, i: 727, }, D { l: 11, t: 0, i: 260, }, D { l: 139, t: 0, i: 684, }, D { l: 138, t: 10, i: 145, }, D { l: 147, t: 10, i: 83, }, D { l: 5, t: 0, i: 208 }, D { l: 7, t: 0, i: 753 }, D { l: 135, t: 0, i: 1528, }, D { l: 137, t: 11, i: 617, }, D { l: 135, t: 10, i: 1922, }, D { l: 135, t: 11, i: 825, }, D { l: 11, t: 0, i: 422, }, D { l: 13, t: 0, i: 389, }, D { l: 4, t: 10, i: 124, }, D { l: 10, t: 10, i: 457, }, D { l: 11, t: 10, i: 121, }, D { l: 11, t: 10, i: 169, }, D { l: 11, t: 10, i: 870, }, D { l: 12, t: 10, i: 214, }, D { l: 14, t: 10, i: 187, }, D { l: 143, t: 10, i: 77, }, D { l: 11, t: 0, i: 615, }, D { l: 15, t: 0, i: 58 }, D { l: 11, t: 11, i: 615, }, D { l: 143, t: 11, i: 58, }, D { l: 9, t: 0, i: 618 }, D { l: 138, t: 0, i: 482, }, D { l: 6, t: 0, i: 1952, }, D { l: 6, t: 0, i: 1970, }, D { l: 142, t: 0, i: 505, }, D { l: 7, t: 10, i: 1193, }, D { l: 135, t: 11, i: 1838, }, D { l: 133, t: 0, i: 242, }, D { l: 135, t: 10, i: 1333, }, D { l: 6, t: 10, i: 107, }, D { l: 7, t: 10, i: 638, }, D { l: 7, t: 10, i: 1632, }, D { l: 137, t: 10, i: 396, }, D { l: 133, t: 0, i: 953, }, D { l: 5, t: 10, i: 370, }, D { l: 134, t: 10, i: 1756, }, D { l: 5, t: 11, i: 28 }, D { l: 6, t: 11, i: 204, }, D { l: 10, t: 11, i: 320, }, D { l: 10, t: 11, i: 583, }, D { l: 13, t: 11, i: 502, }, D { l: 14, t: 11, i: 72, }, D { l: 14, t: 11, i: 274, }, D { l: 14, t: 11, i: 312, }, D { l: 14, t: 11, i: 344, }, D { l: 15, t: 11, i: 159, }, D { l: 16, t: 11, i: 62, }, D { l: 16, t: 11, i: 69, }, D { l: 17, t: 11, i: 30, }, D { l: 18, t: 11, i: 42, }, D { l: 18, t: 11, i: 53, }, D { l: 18, t: 11, i: 84, }, D { l: 18, t: 11, i: 140, }, D { l: 19, t: 11, i: 68, }, D { l: 19, t: 11, i: 85, }, D { l: 20, t: 11, i: 5 }, D { l: 20, t: 11, i: 45, }, D { l: 20, t: 11, i: 101, }, D { l: 22, t: 11, i: 7 }, D { l: 150, t: 11, i: 20, }, D { l: 4, t: 11, i: 558, }, D { l: 6, t: 11, i: 390, }, D { l: 7, t: 11, i: 162, }, D { l: 7, t: 11, i: 689, }, D { l: 9, t: 11, i: 360, }, D { l: 138, t: 11, i: 653, }, D { l: 11, t: 0, i: 802, }, D { l: 141, t: 0, i: 67, }, D { l: 133, t: 10, i: 204, }, D { l: 133, t: 0, i: 290, }, D { l: 5, t: 10, i: 970, }, D { l: 134, t: 10, i: 1706, }, D { l: 132, t: 0, i: 380, }, D { l: 5, t: 0, i: 52 }, D { l: 7, t: 0, i: 277 }, D { l: 9, t: 0, i: 368 }, D { l: 139, t: 0, i: 791, }, D { l: 5, t: 11, i: 856, }, D { l: 6, t: 11, i: 1672, }, D { l: 6, t: 11, i: 1757, }, D { l: 6, t: 11, i: 1781, }, D { l: 7, t: 11, i: 1150, }, D { l: 7, t: 11, i: 1425, }, D { l: 7, t: 11, i: 1453, }, D { l: 140, t: 11, i: 513, }, D { l: 5, t: 11, i: 92 }, D { l: 7, t: 10, i: 3 }, D { l: 10, t: 11, i: 736, }, D { l: 140, t: 11, i: 102, }, D { l: 4, t: 0, i: 112 }, D { l: 5, t: 0, i: 653 }, D { l: 5, t: 10, i: 483, }, D { l: 5, t: 10, i: 685, }, D { l: 6, t: 10, i: 489, }, D { l: 7, t: 10, i: 1204, }, D { l: 136, t: 10, i: 394, }, D { l: 132, t: 10, i: 921, }, D { l: 6, t: 0, i: 1028, }, D { l: 133, t: 10, i: 1007, }, D { l: 5, t: 11, i: 590, }, D { l: 9, t: 11, i: 213, }, D { l: 145, t: 11, i: 91, }, D { l: 135, t: 10, i: 1696, }, D { l: 10, t: 0, i: 138, }, D { l: 139, t: 0, i: 476, }, D { l: 5, t: 0, i: 725 }, D { l: 5, t: 0, i: 727 }, D { l: 135, t: 0, i: 1811, }, D { l: 4, t: 0, i: 979 }, D { l: 6, t: 0, i: 1821, }, D { l: 6, t: 0, i: 1838, }, D { l: 8, t: 0, i: 876 }, D { l: 8, t: 0, i: 883 }, D { l: 8, t: 0, i: 889 }, D { l: 8, t: 0, i: 893 }, D { l: 8, t: 0, i: 895 }, D { l: 10, t: 0, i: 934, }, D { l: 12, t: 0, i: 720, }, D { l: 14, t: 0, i: 459, }, D { l: 148, t: 0, i: 123, }, D { l: 135, t: 11, i: 551, }, D { l: 4, t: 0, i: 38 }, D { l: 6, t: 0, i: 435 }, D { l: 7, t: 0, i: 307 }, D { l: 7, t: 0, i: 999 }, D { l: 7, t: 0, i: 1481, }, D { l: 7, t: 0, i: 1732, }, D { l: 7, t: 0, i: 1738, }, D { l: 8, t: 0, i: 371 }, D { l: 9, t: 0, i: 414 }, D { l: 11, t: 0, i: 316, }, D { l: 12, t: 0, i: 52 }, D { l: 13, t: 0, i: 420, }, D { l: 147, t: 0, i: 100, }, D { l: 135, t: 0, i: 1296, }, D { l: 132, t: 10, i: 712, }, D { l: 134, t: 10, i: 1629, }, D { l: 133, t: 0, i: 723, }, D { l: 134, t: 0, i: 651, }, D { l: 136, t: 11, i: 191, }, D { l: 9, t: 11, i: 791, }, D { l: 10, t: 11, i: 93, }, D { l: 11, t: 11, i: 301, }, D { l: 16, t: 11, i: 13, }, D { l: 17, t: 11, i: 23, }, D { l: 18, t: 11, i: 135, }, D { l: 19, t: 11, i: 12, }, D { l: 20, t: 11, i: 1 }, D { l: 20, t: 11, i: 12, }, D { l: 148, t: 11, i: 14, }, D { l: 136, t: 11, i: 503, }, D { l: 6, t: 11, i: 466, }, D { l: 135, t: 11, i: 671, }, D { l: 6, t: 0, i: 1200, }, D { l: 134, t: 0, i: 1330, }, D { l: 135, t: 0, i: 1255, }, D { l: 134, t: 0, i: 986, }, D { l: 5, t: 0, i: 109 }, D { l: 6, t: 0, i: 1784, }, D { l: 7, t: 0, i: 1895, }, D { l: 12, t: 0, i: 296, }, D { l: 140, t: 0, i: 302, }, D { l: 135, t: 11, i: 983, }, D { l: 133, t: 10, i: 485, }, D { l: 134, t: 0, i: 660, }, D { l: 134, t: 0, i: 800, }, D { l: 5, t: 0, i: 216 }, D { l: 5, t: 0, i: 294 }, D { l: 6, t: 0, i: 591 }, D { l: 7, t: 0, i: 1879, }, D { l: 9, t: 0, i: 141 }, D { l: 9, t: 0, i: 270 }, D { l: 9, t: 0, i: 679 }, D { l: 10, t: 0, i: 159, }, D { l: 11, t: 0, i: 197, }, D { l: 11, t: 0, i: 438, }, D { l: 12, t: 0, i: 538, }, D { l: 12, t: 0, i: 559, }, D { l: 14, t: 0, i: 144, }, D { l: 14, t: 0, i: 167, }, D { l: 15, t: 0, i: 67 }, D { l: 4, t: 10, i: 285, }, D { l: 5, t: 10, i: 317, }, D { l: 6, t: 10, i: 301, }, D { l: 7, t: 10, i: 7 }, D { l: 8, t: 10, i: 153, }, D { l: 10, t: 10, i: 766, }, D { l: 11, t: 10, i: 468, }, D { l: 12, t: 10, i: 467, }, D { l: 141, t: 10, i: 143, }, D { l: 136, t: 0, i: 945, }, D { l: 134, t: 0, i: 1090, }, D { l: 137, t: 0, i: 81, }, D { l: 12, t: 11, i: 468, }, D { l: 19, t: 11, i: 96, }, D { l: 148, t: 11, i: 24, }, D { l: 134, t: 0, i: 391, }, D { l: 138, t: 11, i: 241, }, D { l: 7, t: 0, i: 322 }, D { l: 136, t: 0, i: 249, }, D { l: 134, t: 0, i: 1412, }, D { l: 135, t: 11, i: 795, }, D { l: 5, t: 0, i: 632 }, D { l: 138, t: 0, i: 526, }, D { l: 136, t: 10, i: 819, }, D { l: 6, t: 0, i: 144 }, D { l: 7, t: 0, i: 948 }, D { l: 7, t: 0, i: 1042, }, D { l: 8, t: 0, i: 235 }, D { l: 8, t: 0, i: 461 }, D { l: 9, t: 0, i: 453 }, D { l: 9, t: 0, i: 796 }, D { l: 10, t: 0, i: 354, }, D { l: 17, t: 0, i: 77 }, D { l: 135, t: 11, i: 954, }, D { l: 139, t: 10, i: 917, }, D { l: 6, t: 0, i: 940 }, D { l: 134, t: 0, i: 1228, }, D { l: 4, t: 0, i: 362 }, D { l: 7, t: 0, i: 52 }, D { l: 135, t: 0, i: 303, }, D { l: 6, t: 11, i: 549, }, D { l: 8, t: 11, i: 34 }, D { l: 8, t: 11, i: 283, }, D { l: 9, t: 11, i: 165, }, D { l: 138, t: 11, i: 475, }, D { l: 7, t: 11, i: 370, }, D { l: 7, t: 11, i: 1007, }, D { l: 7, t: 11, i: 1177, }, D { l: 135, t: 11, i: 1565, }, D { l: 5, t: 11, i: 652, }, D { l: 5, t: 11, i: 701, }, D { l: 135, t: 11, i: 449, }, D { l: 5, t: 0, i: 196 }, D { l: 6, t: 0, i: 486 }, D { l: 7, t: 0, i: 212 }, D { l: 8, t: 0, i: 309 }, D { l: 136, t: 0, i: 346, }, D { l: 6, t: 10, i: 1719, }, D { l: 6, t: 10, i: 1735, }, D { l: 7, t: 10, i: 2016, }, D { l: 7, t: 10, i: 2020, }, D { l: 8, t: 10, i: 837, }, D { l: 137, t: 10, i: 852, }, D { l: 6, t: 11, i: 159, }, D { l: 6, t: 11, i: 364, }, D { l: 7, t: 11, i: 516, }, D { l: 7, t: 11, i: 1439, }, D { l: 137, t: 11, i: 518, }, D { l: 135, t: 0, i: 1912, }, D { l: 135, t: 0, i: 1290, }, D { l: 132, t: 0, i: 686, }, D { l: 141, t: 11, i: 151, }, D { l: 138, t: 0, i: 625, }, D { l: 136, t: 0, i: 706, }, D { l: 138, t: 10, i: 568, }, D { l: 139, t: 0, i: 412, }, D { l: 4, t: 0, i: 30 }, D { l: 133, t: 0, i: 43, }, D { l: 8, t: 10, i: 67 }, D { l: 138, t: 10, i: 419, }, D { l: 7, t: 0, i: 967 }, D { l: 141, t: 0, i: 11, }, D { l: 12, t: 0, i: 758, }, D { l: 14, t: 0, i: 441, }, D { l: 142, t: 0, i: 462, }, D { l: 10, t: 10, i: 657, }, D { l: 14, t: 10, i: 297, }, D { l: 142, t: 10, i: 361, }, D { l: 139, t: 10, i: 729, }, D { l: 4, t: 0, i: 220 }, D { l: 135, t: 0, i: 1535, }, D { l: 7, t: 11, i: 501, }, D { l: 9, t: 11, i: 111, }, D { l: 10, t: 11, i: 141, }, D { l: 11, t: 11, i: 332, }, D { l: 13, t: 11, i: 43, }, D { l: 13, t: 11, i: 429, }, D { l: 14, t: 11, i: 130, }, D { l: 14, t: 11, i: 415, }, D { l: 145, t: 11, i: 102, }, D { l: 4, t: 0, i: 950 }, D { l: 6, t: 0, i: 1859, }, D { l: 7, t: 0, i: 11 }, D { l: 8, t: 0, i: 873 }, D { l: 12, t: 0, i: 710, }, D { l: 12, t: 0, i: 718, }, D { l: 12, t: 0, i: 748, }, D { l: 12, t: 0, i: 765, }, D { l: 148, t: 0, i: 124, }, D { l: 5, t: 11, i: 149, }, D { l: 5, t: 11, i: 935, }, D { l: 136, t: 11, i: 233, }, D { l: 142, t: 11, i: 291, }, D { l: 134, t: 0, i: 1579, }, D { l: 7, t: 0, i: 890 }, D { l: 8, t: 10, i: 51 }, D { l: 9, t: 10, i: 868, }, D { l: 10, t: 10, i: 833, }, D { l: 12, t: 10, i: 481, }, D { l: 12, t: 10, i: 570, }, D { l: 148, t: 10, i: 106, }, D { l: 141, t: 0, i: 2 }, D { l: 132, t: 10, i: 445, }, D { l: 136, t: 11, i: 801, }, D { l: 135, t: 0, i: 1774, }, D { l: 7, t: 0, i: 1725, }, D { l: 138, t: 0, i: 393, }, D { l: 5, t: 0, i: 263 }, D { l: 134, t: 0, i: 414, }, D { l: 132, t: 11, i: 322, }, D { l: 133, t: 10, i: 239, }, D { l: 7, t: 0, i: 456 }, D { l: 7, t: 10, i: 1990, }, D { l: 8, t: 10, i: 130, }, D { l: 139, t: 10, i: 720, }, D { l: 137, t: 0, i: 818, }, D { l: 5, t: 10, i: 123, }, D { l: 6, t: 10, i: 530, }, D { l: 7, t: 10, i: 348, }, D { l: 135, t: 10, i: 1419, }, D { l: 135, t: 10, i: 2024, }, D { l: 6, t: 0, i: 178 }, D { l: 6, t: 0, i: 1750, }, D { l: 8, t: 0, i: 251 }, D { l: 9, t: 0, i: 690 }, D { l: 10, t: 0, i: 155, }, D { l: 10, t: 0, i: 196, }, D { l: 10, t: 0, i: 373, }, D { l: 11, t: 0, i: 698, }, D { l: 13, t: 0, i: 155, }, D { l: 148, t: 0, i: 93, }, D { l: 5, t: 0, i: 97 }, D { l: 137, t: 0, i: 393, }, D { l: 134, t: 0, i: 674, }, D { l: 11, t: 0, i: 223, }, D { l: 140, t: 0, i: 168, }, D { l: 132, t: 10, i: 210, }, D { l: 139, t: 11, i: 464, }, D { l: 6, t: 0, i: 1639, }, D { l: 146, t: 0, i: 159, }, D { l: 139, t: 11, i: 2, }, D { l: 7, t: 0, i: 934 }, D { l: 8, t: 0, i: 647 }, D { l: 17, t: 0, i: 97 }, D { l: 19, t: 0, i: 59 }, D { l: 150, t: 0, i: 2 }, D { l: 132, t: 0, i: 191, }, D { l: 5, t: 0, i: 165 }, D { l: 9, t: 0, i: 346 }, D { l: 10, t: 0, i: 655, }, D { l: 11, t: 0, i: 885, }, D { l: 4, t: 10, i: 430, }, D { l: 135, t: 11, i: 357, }, D { l: 133, t: 0, i: 877, }, D { l: 5, t: 10, i: 213, }, D { l: 133, t: 11, i: 406, }, D { l: 8, t: 0, i: 128 }, D { l: 139, t: 0, i: 179, }, D { l: 6, t: 11, i: 69 }, D { l: 135, t: 11, i: 117, }, D { l: 135, t: 0, i: 1297, }, D { l: 11, t: 11, i: 43, }, D { l: 13, t: 11, i: 72, }, D { l: 141, t: 11, i: 142, }, D { l: 135, t: 11, i: 1830, }, D { l: 142, t: 0, i: 164, }, D { l: 5, t: 0, i: 57 }, D { l: 6, t: 0, i: 101 }, D { l: 6, t: 0, i: 586 }, D { l: 6, t: 0, i: 1663, }, D { l: 7, t: 0, i: 132 }, D { l: 7, t: 0, i: 1154, }, D { l: 7, t: 0, i: 1415, }, D { l: 7, t: 0, i: 1507, }, D { l: 12, t: 0, i: 493, }, D { l: 15, t: 0, i: 105, }, D { l: 151, t: 0, i: 15, }, D { l: 5, t: 0, i: 459 }, D { l: 7, t: 0, i: 1073, }, D { l: 8, t: 0, i: 241 }, D { l: 136, t: 0, i: 334, }, D { l: 133, t: 11, i: 826, }, D { l: 133, t: 10, i: 108, }, D { l: 5, t: 10, i: 219, }, D { l: 10, t: 11, i: 132, }, D { l: 11, t: 11, i: 191, }, D { l: 11, t: 11, i: 358, }, D { l: 139, t: 11, i: 460, }, D { l: 6, t: 0, i: 324 }, D { l: 6, t: 0, i: 520 }, D { l: 7, t: 0, i: 338 }, D { l: 7, t: 0, i: 1729, }, D { l: 8, t: 0, i: 228 }, D { l: 139, t: 0, i: 750, }, D { l: 21, t: 0, i: 30 }, D { l: 22, t: 0, i: 53 }, D { l: 4, t: 10, i: 193, }, D { l: 5, t: 10, i: 916, }, D { l: 7, t: 10, i: 364, }, D { l: 10, t: 10, i: 398, }, D { l: 10, t: 10, i: 726, }, D { l: 11, t: 10, i: 317, }, D { l: 11, t: 10, i: 626, }, D { l: 12, t: 10, i: 142, }, D { l: 12, t: 10, i: 288, }, D { l: 12, t: 10, i: 678, }, D { l: 13, t: 10, i: 313, }, D { l: 15, t: 10, i: 113, }, D { l: 146, t: 10, i: 114, }, D { l: 6, t: 11, i: 110, }, D { l: 135, t: 11, i: 1681, }, D { l: 135, t: 0, i: 910, }, D { l: 6, t: 10, i: 241, }, D { l: 7, t: 10, i: 907, }, D { l: 8, t: 10, i: 832, }, D { l: 9, t: 10, i: 342, }, D { l: 10, t: 10, i: 729, }, D { l: 11, t: 10, i: 284, }, D { l: 11, t: 10, i: 445, }, D { l: 11, t: 10, i: 651, }, D { l: 11, t: 10, i: 863, }, D { l: 13, t: 10, i: 398, }, D { l: 146, t: 10, i: 99, }, D { l: 7, t: 0, i: 705 }, D { l: 9, t: 0, i: 734 }, D { l: 5, t: 11, i: 1000, }, D { l: 7, t: 11, i: 733, }, D { l: 137, t: 11, i: 583, }, D { l: 4, t: 0, i: 73 }, D { l: 6, t: 0, i: 612 }, D { l: 7, t: 0, i: 927 }, D { l: 7, t: 0, i: 1822, }, D { l: 8, t: 0, i: 217 }, D { l: 9, t: 0, i: 765 }, D { l: 9, t: 0, i: 766 }, D { l: 10, t: 0, i: 408, }, D { l: 11, t: 0, i: 51 }, D { l: 11, t: 0, i: 793, }, D { l: 12, t: 0, i: 266, }, D { l: 15, t: 0, i: 158, }, D { l: 20, t: 0, i: 89 }, D { l: 150, t: 0, i: 32, }, D { l: 7, t: 0, i: 1330, }, D { l: 4, t: 11, i: 297, }, D { l: 6, t: 11, i: 529, }, D { l: 7, t: 11, i: 152, }, D { l: 7, t: 11, i: 713, }, D { l: 7, t: 11, i: 1845, }, D { l: 8, t: 11, i: 710, }, D { l: 8, t: 11, i: 717, }, D { l: 140, t: 11, i: 639, }, D { l: 5, t: 0, i: 389 }, D { l: 136, t: 0, i: 636, }, D { l: 134, t: 0, i: 1409, }, D { l: 4, t: 10, i: 562, }, D { l: 9, t: 10, i: 254, }, D { l: 139, t: 10, i: 879, }, D { l: 134, t: 0, i: 893, }, D { l: 132, t: 10, i: 786, }, D { l: 4, t: 11, i: 520, }, D { l: 135, t: 11, i: 575, }, D { l: 136, t: 0, i: 21, }, D { l: 140, t: 0, i: 721, }, D { l: 136, t: 0, i: 959, }, D { l: 7, t: 11, i: 1428, }, D { l: 7, t: 11, i: 1640, }, D { l: 9, t: 11, i: 169, }, D { l: 9, t: 11, i: 182, }, D { l: 9, t: 11, i: 367, }, D { l: 9, t: 11, i: 478, }, D { l: 9, t: 11, i: 506, }, D { l: 9, t: 11, i: 551, }, D { l: 9, t: 11, i: 648, }, D { l: 9, t: 11, i: 651, }, D { l: 9, t: 11, i: 697, }, D { l: 9, t: 11, i: 705, }, D { l: 9, t: 11, i: 725, }, D { l: 9, t: 11, i: 787, }, D { l: 9, t: 11, i: 794, }, D { l: 10, t: 11, i: 198, }, D { l: 10, t: 11, i: 214, }, D { l: 10, t: 11, i: 267, }, D { l: 10, t: 11, i: 275, }, D { l: 10, t: 11, i: 456, }, D { l: 10, t: 11, i: 551, }, D { l: 10, t: 11, i: 561, }, D { l: 10, t: 11, i: 613, }, D { l: 10, t: 11, i: 627, }, D { l: 10, t: 11, i: 668, }, D { l: 10, t: 11, i: 675, }, D { l: 10, t: 11, i: 691, }, D { l: 10, t: 11, i: 695, }, D { l: 10, t: 11, i: 707, }, D { l: 10, t: 11, i: 715, }, D { l: 11, t: 11, i: 183, }, D { l: 11, t: 11, i: 201, }, D { l: 11, t: 11, i: 244, }, D { l: 11, t: 11, i: 262, }, D { l: 11, t: 11, i: 352, }, D { l: 11, t: 11, i: 439, }, D { l: 11, t: 11, i: 493, }, D { l: 11, t: 11, i: 572, }, D { l: 11, t: 11, i: 591, }, D { l: 11, t: 11, i: 608, }, D { l: 11, t: 11, i: 611, }, D { l: 11, t: 11, i: 646, }, D { l: 11, t: 11, i: 674, }, D { l: 11, t: 11, i: 711, }, D { l: 11, t: 11, i: 751, }, D { l: 11, t: 11, i: 761, }, D { l: 11, t: 11, i: 776, }, D { l: 11, t: 11, i: 785, }, D { l: 11, t: 11, i: 850, }, D { l: 11, t: 11, i: 853, }, D { l: 11, t: 11, i: 862, }, D { l: 11, t: 11, i: 865, }, D { l: 11, t: 11, i: 868, }, D { l: 11, t: 11, i: 898, }, D { l: 11, t: 11, i: 902, }, D { l: 11, t: 11, i: 903, }, D { l: 11, t: 11, i: 910, }, D { l: 11, t: 11, i: 932, }, D { l: 11, t: 11, i: 942, }, D { l: 11, t: 11, i: 957, }, D { l: 11, t: 11, i: 967, }, D { l: 11, t: 11, i: 972, }, D { l: 12, t: 11, i: 148, }, D { l: 12, t: 11, i: 195, }, D { l: 12, t: 11, i: 220, }, D { l: 12, t: 11, i: 237, }, D { l: 12, t: 11, i: 318, }, D { l: 12, t: 11, i: 339, }, D { l: 12, t: 11, i: 393, }, D { l: 12, t: 11, i: 445, }, D { l: 12, t: 11, i: 450, }, D { l: 12, t: 11, i: 474, }, D { l: 12, t: 11, i: 509, }, D { l: 12, t: 11, i: 533, }, D { l: 12, t: 11, i: 591, }, D { l: 12, t: 11, i: 594, }, D { l: 12, t: 11, i: 597, }, D { l: 12, t: 11, i: 621, }, D { l: 12, t: 11, i: 633, }, D { l: 12, t: 11, i: 642, }, D { l: 13, t: 11, i: 59, }, D { l: 13, t: 11, i: 60, }, D { l: 13, t: 11, i: 145, }, D { l: 13, t: 11, i: 239, }, D { l: 13, t: 11, i: 250, }, D { l: 13, t: 11, i: 273, }, D { l: 13, t: 11, i: 329, }, D { l: 13, t: 11, i: 344, }, D { l: 13, t: 11, i: 365, }, D { l: 13, t: 11, i: 372, }, D { l: 13, t: 11, i: 387, }, D { l: 13, t: 11, i: 403, }, D { l: 13, t: 11, i: 414, }, D { l: 13, t: 11, i: 456, }, D { l: 13, t: 11, i: 478, }, D { l: 13, t: 11, i: 483, }, D { l: 13, t: 11, i: 489, }, D { l: 14, t: 11, i: 55, }, D { l: 14, t: 11, i: 57, }, D { l: 14, t: 11, i: 81, }, D { l: 14, t: 11, i: 90, }, D { l: 14, t: 11, i: 148, }, D { l: 14, t: 11, i: 239, }, D { l: 14, t: 11, i: 266, }, D { l: 14, t: 11, i: 321, }, D { l: 14, t: 11, i: 326, }, D { l: 14, t: 11, i: 327, }, D { l: 14, t: 11, i: 330, }, D { l: 14, t: 11, i: 347, }, D { l: 14, t: 11, i: 355, }, D { l: 14, t: 11, i: 401, }, D { l: 14, t: 11, i: 411, }, D { l: 14, t: 11, i: 414, }, D { l: 14, t: 11, i: 416, }, D { l: 14, t: 11, i: 420, }, D { l: 15, t: 11, i: 61, }, D { l: 15, t: 11, i: 74, }, D { l: 15, t: 11, i: 87, }, D { l: 15, t: 11, i: 88, }, D { l: 15, t: 11, i: 94, }, D { l: 15, t: 11, i: 96, }, D { l: 15, t: 11, i: 116, }, D { l: 15, t: 11, i: 149, }, D { l: 15, t: 11, i: 154, }, D { l: 16, t: 11, i: 50, }, D { l: 16, t: 11, i: 63, }, D { l: 16, t: 11, i: 73, }, D { l: 17, t: 11, i: 2 }, D { l: 17, t: 11, i: 66, }, D { l: 17, t: 11, i: 92, }, D { l: 17, t: 11, i: 103, }, D { l: 17, t: 11, i: 112, }, D { l: 18, t: 11, i: 50, }, D { l: 18, t: 11, i: 54, }, D { l: 18, t: 11, i: 82, }, D { l: 18, t: 11, i: 86, }, D { l: 18, t: 11, i: 90, }, D { l: 18, t: 11, i: 111, }, D { l: 18, t: 11, i: 115, }, D { l: 18, t: 11, i: 156, }, D { l: 19, t: 11, i: 40, }, D { l: 19, t: 11, i: 79, }, D { l: 20, t: 11, i: 78, }, D { l: 149, t: 11, i: 22, }, D { l: 137, t: 11, i: 170, }, D { l: 134, t: 0, i: 1433, }, D { l: 135, t: 11, i: 1307, }, D { l: 139, t: 11, i: 411, }, D { l: 5, t: 0, i: 189 }, D { l: 7, t: 0, i: 442 }, D { l: 7, t: 0, i: 443 }, D { l: 8, t: 0, i: 281 }, D { l: 12, t: 0, i: 174, }, D { l: 141, t: 0, i: 261, }, D { l: 6, t: 10, i: 216, }, D { l: 7, t: 10, i: 901, }, D { l: 7, t: 10, i: 1343, }, D { l: 136, t: 10, i: 493, }, D { l: 5, t: 11, i: 397, }, D { l: 6, t: 11, i: 154, }, D { l: 7, t: 10, i: 341, }, D { l: 7, t: 11, i: 676, }, D { l: 8, t: 11, i: 443, }, D { l: 8, t: 11, i: 609, }, D { l: 9, t: 11, i: 24 }, D { l: 9, t: 11, i: 325, }, D { l: 10, t: 11, i: 35, }, D { l: 11, t: 10, i: 219, }, D { l: 11, t: 11, i: 535, }, D { l: 11, t: 11, i: 672, }, D { l: 11, t: 11, i: 1018, }, D { l: 12, t: 11, i: 637, }, D { l: 144, t: 11, i: 30, }, D { l: 6, t: 0, i: 2 }, D { l: 7, t: 0, i: 191 }, D { l: 7, t: 0, i: 446 }, D { l: 7, t: 0, i: 1262, }, D { l: 7, t: 0, i: 1737, }, D { l: 8, t: 0, i: 22 }, D { l: 8, t: 0, i: 270 }, D { l: 8, t: 0, i: 612 }, D { l: 9, t: 0, i: 4 }, D { l: 9, t: 0, i: 312 }, D { l: 9, t: 0, i: 436 }, D { l: 9, t: 0, i: 626 }, D { l: 10, t: 0, i: 216, }, D { l: 10, t: 0, i: 311, }, D { l: 10, t: 0, i: 521, }, D { l: 10, t: 0, i: 623, }, D { l: 11, t: 0, i: 72 }, D { l: 11, t: 0, i: 330, }, D { l: 11, t: 0, i: 455, }, D { l: 12, t: 0, i: 321, }, D { l: 12, t: 0, i: 504, }, D { l: 12, t: 0, i: 530, }, D { l: 12, t: 0, i: 543, }, D { l: 13, t: 0, i: 17 }, D { l: 13, t: 0, i: 156, }, D { l: 13, t: 0, i: 334, }, D { l: 14, t: 0, i: 131, }, D { l: 17, t: 0, i: 60 }, D { l: 148, t: 0, i: 64, }, D { l: 7, t: 0, i: 354 }, D { l: 10, t: 0, i: 410, }, D { l: 139, t: 0, i: 815, }, D { l: 139, t: 10, i: 130, }, D { l: 7, t: 10, i: 1734, }, D { l: 137, t: 11, i: 631, }, D { l: 12, t: 0, i: 425, }, D { l: 15, t: 0, i: 112, }, D { l: 10, t: 10, i: 115, }, D { l: 11, t: 10, i: 420, }, D { l: 13, t: 10, i: 404, }, D { l: 14, t: 10, i: 346, }, D { l: 143, t: 10, i: 54, }, D { l: 6, t: 0, i: 60 }, D { l: 6, t: 0, i: 166 }, D { l: 7, t: 0, i: 374 }, D { l: 7, t: 0, i: 670 }, D { l: 7, t: 0, i: 1327, }, D { l: 8, t: 0, i: 411 }, D { l: 8, t: 0, i: 435 }, D { l: 9, t: 0, i: 653 }, D { l: 9, t: 0, i: 740 }, D { l: 10, t: 0, i: 385, }, D { l: 11, t: 0, i: 222, }, D { l: 11, t: 0, i: 324, }, D { l: 11, t: 0, i: 829, }, D { l: 140, t: 0, i: 611, }, D { l: 7, t: 0, i: 1611, }, D { l: 13, t: 0, i: 14 }, D { l: 15, t: 0, i: 44 }, D { l: 19, t: 0, i: 13 }, D { l: 148, t: 0, i: 76, }, D { l: 133, t: 11, i: 981, }, D { l: 4, t: 11, i: 56 }, D { l: 7, t: 11, i: 1791, }, D { l: 8, t: 11, i: 607, }, D { l: 8, t: 11, i: 651, }, D { l: 11, t: 11, i: 465, }, D { l: 11, t: 11, i: 835, }, D { l: 12, t: 11, i: 337, }, D { l: 141, t: 11, i: 480, }, D { l: 6, t: 0, i: 1478, }, D { l: 5, t: 10, i: 1011, }, D { l: 136, t: 10, i: 701, }, D { l: 139, t: 0, i: 596, }, D { l: 5, t: 0, i: 206 }, D { l: 134, t: 0, i: 398, }, D { l: 4, t: 10, i: 54 }, D { l: 5, t: 10, i: 666, }, D { l: 7, t: 10, i: 1039, }, D { l: 7, t: 10, i: 1130, }, D { l: 9, t: 10, i: 195, }, D { l: 138, t: 10, i: 302, }, D { l: 7, t: 0, i: 50 }, D { l: 9, t: 11, i: 158, }, D { l: 138, t: 11, i: 411, }, D { l: 135, t: 11, i: 1120, }, D { l: 6, t: 0, i: 517 }, D { l: 7, t: 0, i: 1159, }, D { l: 10, t: 0, i: 621, }, D { l: 11, t: 0, i: 192, }, D { l: 134, t: 10, i: 1669, }, D { l: 4, t: 0, i: 592 }, D { l: 6, t: 0, i: 600 }, D { l: 135, t: 0, i: 1653, }, D { l: 10, t: 0, i: 223, }, D { l: 139, t: 0, i: 645, }, D { l: 136, t: 11, i: 139, }, D { l: 7, t: 0, i: 64 }, D { l: 136, t: 0, i: 245, }, D { l: 142, t: 0, i: 278, }, D { l: 6, t: 11, i: 622, }, D { l: 135, t: 11, i: 1030, }, D { l: 136, t: 0, i: 604, }, D { l: 134, t: 0, i: 1502, }, D { l: 138, t: 0, i: 265, }, D { l: 141, t: 11, i: 168, }, D { l: 7, t: 0, i: 1763, }, D { l: 140, t: 0, i: 310, }, D { l: 7, t: 10, i: 798, }, D { l: 139, t: 11, i: 719, }, D { l: 7, t: 11, i: 160, }, D { l: 10, t: 11, i: 624, }, D { l: 142, t: 11, i: 279, }, D { l: 132, t: 11, i: 363, }, D { l: 7, t: 10, i: 122, }, D { l: 9, t: 10, i: 259, }, D { l: 10, t: 10, i: 84, }, D { l: 11, t: 10, i: 470, }, D { l: 12, t: 10, i: 541, }, D { l: 141, t: 10, i: 379, }, D { l: 5, t: 0, i: 129 }, D { l: 6, t: 0, i: 61 }, D { l: 135, t: 0, i: 947, }, D { l: 134, t: 0, i: 1356, }, D { l: 135, t: 11, i: 1191, }, D { l: 13, t: 0, i: 505, }, D { l: 141, t: 0, i: 506, }, D { l: 11, t: 0, i: 1000, }, D { l: 5, t: 10, i: 82 }, D { l: 5, t: 10, i: 131, }, D { l: 7, t: 10, i: 1755, }, D { l: 8, t: 10, i: 31 }, D { l: 9, t: 10, i: 168, }, D { l: 9, t: 10, i: 764, }, D { l: 139, t: 10, i: 869, }, D { l: 134, t: 0, i: 966, }, D { l: 134, t: 10, i: 605, }, D { l: 134, t: 11, i: 292, }, D { l: 5, t: 11, i: 177, }, D { l: 6, t: 11, i: 616, }, D { l: 7, t: 11, i: 827, }, D { l: 9, t: 11, i: 525, }, D { l: 138, t: 11, i: 656, }, D { l: 135, t: 11, i: 1486, }, D { l: 138, t: 11, i: 31, }, D { l: 5, t: 10, i: 278, }, D { l: 137, t: 10, i: 68, }, D { l: 4, t: 10, i: 163, }, D { l: 5, t: 10, i: 201, }, D { l: 5, t: 10, i: 307, }, D { l: 5, t: 10, i: 310, }, D { l: 6, t: 10, i: 335, }, D { l: 7, t: 10, i: 284, }, D { l: 136, t: 10, i: 165, }, D { l: 6, t: 0, i: 839 }, D { l: 135, t: 10, i: 1660, }, D { l: 136, t: 10, i: 781, }, D { l: 6, t: 10, i: 33 }, D { l: 135, t: 10, i: 1244, }, D { l: 133, t: 0, i: 637, }, D { l: 4, t: 11, i: 161, }, D { l: 133, t: 11, i: 631, }, D { l: 137, t: 0, i: 590, }, D { l: 7, t: 10, i: 1953, }, D { l: 136, t: 10, i: 720, }, D { l: 5, t: 0, i: 280 }, D { l: 7, t: 0, i: 1226, }, D { l: 138, t: 10, i: 203, }, D { l: 134, t: 0, i: 1386, }, D { l: 5, t: 0, i: 281 }, D { l: 6, t: 0, i: 1026, }, D { l: 6, t: 10, i: 326, }, D { l: 7, t: 10, i: 677, }, D { l: 137, t: 10, i: 425, }, D { l: 7, t: 11, i: 1557, }, D { l: 135, t: 11, i: 1684, }, D { l: 135, t: 0, i: 1064, }, D { l: 9, t: 11, i: 469, }, D { l: 9, t: 11, i: 709, }, D { l: 12, t: 11, i: 512, }, D { l: 14, t: 11, i: 65, }, D { l: 145, t: 11, i: 12, }, D { l: 134, t: 0, i: 917, }, D { l: 10, t: 11, i: 229, }, D { l: 11, t: 11, i: 73, }, D { l: 11, t: 11, i: 376, }, D { l: 139, t: 11, i: 433, }, D { l: 7, t: 0, i: 555 }, D { l: 9, t: 0, i: 192 }, D { l: 13, t: 0, i: 30 }, D { l: 13, t: 0, i: 49 }, D { l: 15, t: 0, i: 150, }, D { l: 16, t: 0, i: 76 }, D { l: 20, t: 0, i: 52 }, D { l: 7, t: 10, i: 1316, }, D { l: 7, t: 10, i: 1412, }, D { l: 7, t: 10, i: 1839, }, D { l: 9, t: 10, i: 589, }, D { l: 11, t: 10, i: 241, }, D { l: 11, t: 10, i: 676, }, D { l: 11, t: 10, i: 811, }, D { l: 11, t: 10, i: 891, }, D { l: 12, t: 10, i: 140, }, D { l: 12, t: 10, i: 346, }, D { l: 12, t: 10, i: 479, }, D { l: 13, t: 10, i: 381, }, D { l: 14, t: 10, i: 188, }, D { l: 146, t: 10, i: 30, }, D { l: 149, t: 0, i: 15, }, D { l: 6, t: 0, i: 1882, }, D { l: 6, t: 0, i: 1883, }, D { l: 6, t: 0, i: 1897, }, D { l: 9, t: 0, i: 945 }, D { l: 9, t: 0, i: 1014, }, D { l: 9, t: 0, i: 1020, }, D { l: 12, t: 0, i: 823, }, D { l: 12, t: 0, i: 842, }, D { l: 12, t: 0, i: 866, }, D { l: 12, t: 0, i: 934, }, D { l: 15, t: 0, i: 242, }, D { l: 146, t: 0, i: 208, }, D { l: 6, t: 0, i: 965 }, D { l: 134, t: 0, i: 1499, }, D { l: 7, t: 0, i: 33 }, D { l: 7, t: 0, i: 120 }, D { l: 8, t: 0, i: 489 }, D { l: 9, t: 0, i: 319 }, D { l: 10, t: 0, i: 820, }, D { l: 11, t: 0, i: 1004, }, D { l: 12, t: 0, i: 379, }, D { l: 12, t: 0, i: 679, }, D { l: 13, t: 0, i: 117, }, D { l: 13, t: 0, i: 412, }, D { l: 14, t: 0, i: 25 }, D { l: 15, t: 0, i: 52 }, D { l: 15, t: 0, i: 161, }, D { l: 16, t: 0, i: 47 }, D { l: 149, t: 0, i: 2 }, D { l: 6, t: 11, i: 558, }, D { l: 7, t: 11, i: 651, }, D { l: 8, t: 11, i: 421, }, D { l: 9, t: 11, i: 0 }, D { l: 138, t: 11, i: 34, }, D { l: 4, t: 0, i: 937 }, D { l: 5, t: 0, i: 801 }, D { l: 7, t: 0, i: 473 }, D { l: 5, t: 10, i: 358, }, D { l: 7, t: 10, i: 1184, }, D { l: 10, t: 10, i: 662, }, D { l: 13, t: 10, i: 212, }, D { l: 13, t: 10, i: 304, }, D { l: 13, t: 10, i: 333, }, D { l: 145, t: 10, i: 98, }, D { l: 132, t: 0, i: 877, }, D { l: 6, t: 0, i: 693 }, D { l: 134, t: 0, i: 824, }, D { l: 132, t: 0, i: 365, }, D { l: 7, t: 11, i: 1832, }, D { l: 138, t: 11, i: 374, }, D { l: 5, t: 0, i: 7 }, D { l: 139, t: 0, i: 774, }, D { l: 4, t: 0, i: 734 }, D { l: 5, t: 0, i: 662 }, D { l: 134, t: 0, i: 430, }, D { l: 4, t: 0, i: 746 }, D { l: 135, t: 0, i: 1090, }, D { l: 5, t: 0, i: 360 }, D { l: 8, t: 0, i: 237 }, D { l: 10, t: 0, i: 231, }, D { l: 147, t: 0, i: 124, }, D { l: 138, t: 11, i: 348, }, D { l: 6, t: 11, i: 6 }, D { l: 7, t: 11, i: 81 }, D { l: 7, t: 11, i: 771, }, D { l: 7, t: 11, i: 1731, }, D { l: 9, t: 11, i: 405, }, D { l: 138, t: 11, i: 421, }, D { l: 6, t: 0, i: 740 }, D { l: 137, t: 0, i: 822, }, D { l: 133, t: 10, i: 946, }, D { l: 7, t: 0, i: 1485, }, D { l: 136, t: 0, i: 929, }, D { l: 7, t: 10, i: 411, }, D { l: 8, t: 10, i: 631, }, D { l: 9, t: 10, i: 323, }, D { l: 10, t: 10, i: 355, }, D { l: 11, t: 10, i: 491, }, D { l: 12, t: 10, i: 143, }, D { l: 12, t: 10, i: 402, }, D { l: 13, t: 10, i: 73, }, D { l: 14, t: 10, i: 408, }, D { l: 15, t: 10, i: 107, }, D { l: 146, t: 10, i: 71, }, D { l: 135, t: 10, i: 590, }, D { l: 5, t: 11, i: 881, }, D { l: 133, t: 11, i: 885, }, D { l: 150, t: 11, i: 25, }, D { l: 4, t: 0, i: 852 }, D { l: 5, t: 11, i: 142, }, D { l: 134, t: 11, i: 546, }, D { l: 7, t: 10, i: 1467, }, D { l: 8, t: 10, i: 328, }, D { l: 10, t: 10, i: 544, }, D { l: 11, t: 10, i: 955, }, D { l: 13, t: 10, i: 320, }, D { l: 145, t: 10, i: 83, }, D { l: 9, t: 0, i: 17 }, D { l: 10, t: 0, i: 291, }, D { l: 11, t: 10, i: 511, }, D { l: 13, t: 10, i: 394, }, D { l: 14, t: 10, i: 298, }, D { l: 14, t: 10, i: 318, }, D { l: 146, t: 10, i: 103, }, D { l: 5, t: 11, i: 466, }, D { l: 11, t: 11, i: 571, }, D { l: 12, t: 11, i: 198, }, D { l: 13, t: 11, i: 283, }, D { l: 14, t: 11, i: 186, }, D { l: 15, t: 11, i: 21, }, D { l: 143, t: 11, i: 103, }, D { l: 134, t: 0, i: 1001, }, D { l: 4, t: 11, i: 185, }, D { l: 5, t: 11, i: 257, }, D { l: 5, t: 11, i: 839, }, D { l: 5, t: 11, i: 936, }, D { l: 7, t: 11, i: 171, }, D { l: 9, t: 11, i: 399, }, D { l: 10, t: 11, i: 258, }, D { l: 10, t: 11, i: 395, }, D { l: 10, t: 11, i: 734, }, D { l: 11, t: 11, i: 1014, }, D { l: 12, t: 11, i: 23, }, D { l: 13, t: 11, i: 350, }, D { l: 14, t: 11, i: 150, }, D { l: 147, t: 11, i: 6, }, D { l: 143, t: 0, i: 35, }, D { l: 132, t: 0, i: 831, }, D { l: 5, t: 10, i: 835, }, D { l: 134, t: 10, i: 483, }, D { l: 4, t: 0, i: 277 }, D { l: 5, t: 0, i: 608 }, D { l: 6, t: 0, i: 493 }, D { l: 7, t: 0, i: 457 }, D { l: 12, t: 0, i: 384, }, D { l: 7, t: 11, i: 404, }, D { l: 7, t: 11, i: 1377, }, D { l: 7, t: 11, i: 1430, }, D { l: 7, t: 11, i: 2017, }, D { l: 8, t: 11, i: 149, }, D { l: 8, t: 11, i: 239, }, D { l: 8, t: 11, i: 512, }, D { l: 8, t: 11, i: 793, }, D { l: 8, t: 11, i: 818, }, D { l: 9, t: 11, i: 474, }, D { l: 9, t: 11, i: 595, }, D { l: 10, t: 11, i: 122, }, D { l: 10, t: 11, i: 565, }, D { l: 10, t: 11, i: 649, }, D { l: 10, t: 11, i: 783, }, D { l: 11, t: 11, i: 239, }, D { l: 11, t: 11, i: 295, }, D { l: 11, t: 11, i: 447, }, D { l: 11, t: 11, i: 528, }, D { l: 11, t: 11, i: 639, }, D { l: 11, t: 11, i: 800, }, D { l: 11, t: 11, i: 936, }, D { l: 12, t: 11, i: 25, }, D { l: 12, t: 11, i: 73, }, D { l: 12, t: 11, i: 77, }, D { l: 12, t: 11, i: 157, }, D { l: 12, t: 11, i: 316, }, D { l: 12, t: 11, i: 390, }, D { l: 12, t: 11, i: 391, }, D { l: 12, t: 11, i: 394, }, D { l: 12, t: 11, i: 395, }, D { l: 12, t: 11, i: 478, }, D { l: 12, t: 11, i: 503, }, D { l: 12, t: 11, i: 592, }, D { l: 12, t: 11, i: 680, }, D { l: 13, t: 11, i: 50, }, D { l: 13, t: 11, i: 53, }, D { l: 13, t: 11, i: 132, }, D { l: 13, t: 11, i: 198, }, D { l: 13, t: 11, i: 275, }, D { l: 13, t: 11, i: 322, }, D { l: 13, t: 11, i: 415, }, D { l: 14, t: 11, i: 71, }, D { l: 14, t: 11, i: 257, }, D { l: 14, t: 11, i: 395, }, D { l: 15, t: 11, i: 71, }, D { l: 15, t: 11, i: 136, }, D { l: 17, t: 11, i: 123, }, D { l: 18, t: 11, i: 93, }, D { l: 147, t: 11, i: 58, }, D { l: 134, t: 0, i: 1351, }, D { l: 7, t: 0, i: 27 }, D { l: 135, t: 0, i: 316, }, D { l: 136, t: 11, i: 712, }, D { l: 136, t: 0, i: 984, }, D { l: 133, t: 0, i: 552, }, D { l: 137, t: 0, i: 264, }, D { l: 132, t: 0, i: 401, }, D { l: 6, t: 0, i: 710 }, D { l: 6, t: 0, i: 1111, }, D { l: 134, t: 0, i: 1343, }, D { l: 134, t: 0, i: 1211, }, D { l: 9, t: 0, i: 543 }, D { l: 10, t: 0, i: 524, }, D { l: 11, t: 0, i: 108, }, D { l: 11, t: 0, i: 653, }, D { l: 12, t: 0, i: 524, }, D { l: 13, t: 0, i: 123, }, D { l: 14, t: 0, i: 252, }, D { l: 16, t: 0, i: 18 }, D { l: 19, t: 0, i: 38 }, D { l: 20, t: 0, i: 26 }, D { l: 20, t: 0, i: 65 }, D { l: 21, t: 0, i: 3 }, D { l: 151, t: 0, i: 11, }, D { l: 4, t: 0, i: 205 }, D { l: 5, t: 0, i: 623 }, D { l: 7, t: 0, i: 104 }, D { l: 8, t: 0, i: 519 }, D { l: 137, t: 0, i: 716, }, D { l: 132, t: 10, i: 677, }, D { l: 4, t: 11, i: 377, }, D { l: 152, t: 11, i: 13, }, D { l: 135, t: 11, i: 1673, }, D { l: 7, t: 0, i: 579 }, D { l: 9, t: 0, i: 41 }, D { l: 9, t: 0, i: 244 }, D { l: 9, t: 0, i: 669 }, D { l: 10, t: 0, i: 5 }, D { l: 11, t: 0, i: 861, }, D { l: 11, t: 0, i: 951, }, D { l: 139, t: 0, i: 980, }, D { l: 132, t: 0, i: 717, }, D { l: 136, t: 0, i: 1011, }, D { l: 132, t: 0, i: 805, }, D { l: 4, t: 11, i: 180, }, D { l: 135, t: 11, i: 1906, }, D { l: 132, t: 10, i: 777, }, D { l: 132, t: 10, i: 331, }, D { l: 132, t: 0, i: 489, }, D { l: 6, t: 0, i: 1024, }, D { l: 4, t: 11, i: 491, }, D { l: 133, t: 10, i: 747, }, D { l: 135, t: 11, i: 1182, }, D { l: 4, t: 11, i: 171, }, D { l: 138, t: 11, i: 234, }, D { l: 4, t: 11, i: 586, }, D { l: 7, t: 11, i: 1186, }, D { l: 138, t: 11, i: 631, }, D { l: 135, t: 0, i: 892, }, D { l: 135, t: 11, i: 336, }, D { l: 9, t: 11, i: 931, }, D { l: 10, t: 11, i: 334, }, D { l: 148, t: 11, i: 71, }, D { l: 137, t: 0, i: 473, }, D { l: 6, t: 0, i: 864 }, D { l: 12, t: 0, i: 659, }, D { l: 139, t: 11, i: 926, }, D { l: 7, t: 0, i: 819 }, D { l: 9, t: 0, i: 26 }, D { l: 9, t: 0, i: 392 }, D { l: 10, t: 0, i: 152, }, D { l: 10, t: 0, i: 226, }, D { l: 11, t: 0, i: 19 }, D { l: 12, t: 0, i: 276, }, D { l: 12, t: 0, i: 426, }, D { l: 12, t: 0, i: 589, }, D { l: 13, t: 0, i: 460, }, D { l: 15, t: 0, i: 97 }, D { l: 19, t: 0, i: 48 }, D { l: 148, t: 0, i: 104, }, D { l: 135, t: 0, i: 51, }, D { l: 133, t: 10, i: 326, }, D { l: 4, t: 10, i: 691, }, D { l: 146, t: 10, i: 16, }, D { l: 9, t: 0, i: 130 }, D { l: 11, t: 0, i: 765, }, D { l: 10, t: 10, i: 680, }, D { l: 10, t: 10, i: 793, }, D { l: 141, t: 10, i: 357, }, D { l: 133, t: 11, i: 765, }, D { l: 8, t: 0, i: 229 }, D { l: 6, t: 10, i: 32 }, D { l: 7, t: 10, i: 385, }, D { l: 7, t: 10, i: 757, }, D { l: 7, t: 10, i: 1916, }, D { l: 8, t: 10, i: 94 }, D { l: 8, t: 10, i: 711, }, D { l: 9, t: 10, i: 541, }, D { l: 10, t: 10, i: 162, }, D { l: 10, t: 10, i: 795, }, D { l: 11, t: 10, i: 989, }, D { l: 11, t: 10, i: 1010, }, D { l: 12, t: 10, i: 14, }, D { l: 142, t: 10, i: 308, }, D { l: 7, t: 11, i: 474, }, D { l: 137, t: 11, i: 578, }, D { l: 132, t: 0, i: 674, }, D { l: 132, t: 0, i: 770, }, D { l: 5, t: 0, i: 79 }, D { l: 7, t: 0, i: 1027, }, D { l: 7, t: 0, i: 1477, }, D { l: 139, t: 0, i: 52, }, D { l: 133, t: 11, i: 424, }, D { l: 134, t: 0, i: 1666, }, D { l: 6, t: 0, i: 409 }, D { l: 6, t: 10, i: 349, }, D { l: 6, t: 10, i: 1682, }, D { l: 7, t: 10, i: 1252, }, D { l: 8, t: 10, i: 112, }, D { l: 8, t: 11, i: 714, }, D { l: 9, t: 10, i: 435, }, D { l: 9, t: 10, i: 668, }, D { l: 10, t: 10, i: 290, }, D { l: 10, t: 10, i: 319, }, D { l: 10, t: 10, i: 815, }, D { l: 11, t: 10, i: 180, }, D { l: 11, t: 10, i: 837, }, D { l: 12, t: 10, i: 240, }, D { l: 13, t: 10, i: 152, }, D { l: 13, t: 10, i: 219, }, D { l: 142, t: 10, i: 158, }, D { l: 5, t: 0, i: 789 }, D { l: 134, t: 0, i: 195, }, D { l: 4, t: 0, i: 251 }, D { l: 4, t: 0, i: 688 }, D { l: 7, t: 0, i: 513 }, D { l: 135, t: 0, i: 1284, }, D { l: 132, t: 10, i: 581, }, D { l: 9, t: 11, i: 420, }, D { l: 10, t: 11, i: 269, }, D { l: 10, t: 11, i: 285, }, D { l: 10, t: 11, i: 576, }, D { l: 11, t: 11, i: 397, }, D { l: 13, t: 11, i: 175, }, D { l: 145, t: 11, i: 90, }, D { l: 6, t: 10, i: 126, }, D { l: 7, t: 10, i: 573, }, D { l: 8, t: 10, i: 397, }, D { l: 142, t: 10, i: 44, }, D { l: 132, t: 11, i: 429, }, D { l: 133, t: 0, i: 889, }, D { l: 4, t: 0, i: 160 }, D { l: 5, t: 0, i: 330 }, D { l: 7, t: 0, i: 1434, }, D { l: 136, t: 0, i: 174, }, D { l: 7, t: 11, i: 18 }, D { l: 7, t: 11, i: 699, }, D { l: 7, t: 11, i: 1966, }, D { l: 8, t: 11, i: 752, }, D { l: 9, t: 11, i: 273, }, D { l: 9, t: 11, i: 412, }, D { l: 9, t: 11, i: 703, }, D { l: 10, t: 11, i: 71, }, D { l: 10, t: 11, i: 427, }, D { l: 10, t: 11, i: 508, }, D { l: 146, t: 11, i: 97, }, D { l: 6, t: 0, i: 872 }, D { l: 134, t: 0, i: 899, }, D { l: 133, t: 10, i: 926, }, D { l: 134, t: 0, i: 1126, }, D { l: 134, t: 0, i: 918, }, D { l: 4, t: 11, i: 53 }, D { l: 5, t: 11, i: 186, }, D { l: 135, t: 11, i: 752, }, D { l: 7, t: 0, i: 268 }, D { l: 136, t: 0, i: 569, }, D { l: 134, t: 0, i: 1224, }, D { l: 6, t: 0, i: 1361, }, D { l: 7, t: 10, i: 1232, }, D { l: 137, t: 10, i: 531, }, D { l: 8, t: 11, i: 575, }, D { l: 10, t: 11, i: 289, }, D { l: 139, t: 11, i: 319, }, D { l: 133, t: 10, i: 670, }, D { l: 132, t: 11, i: 675, }, D { l: 133, t: 0, i: 374, }, D { l: 135, t: 10, i: 1957, }, D { l: 133, t: 0, i: 731, }, D { l: 11, t: 0, i: 190, }, D { l: 15, t: 0, i: 49 }, D { l: 11, t: 11, i: 190, }, D { l: 143, t: 11, i: 49, }, D { l: 4, t: 0, i: 626 }, D { l: 5, t: 0, i: 506 }, D { l: 5, t: 0, i: 642 }, D { l: 6, t: 0, i: 425 }, D { l: 10, t: 0, i: 202, }, D { l: 139, t: 0, i: 141, }, D { l: 137, t: 0, i: 444, }, D { l: 7, t: 10, i: 242, }, D { l: 135, t: 10, i: 1942, }, D { l: 6, t: 11, i: 209, }, D { l: 8, t: 11, i: 468, }, D { l: 9, t: 11, i: 210, }, D { l: 11, t: 11, i: 36, }, D { l: 12, t: 11, i: 28, }, D { l: 12, t: 11, i: 630, }, D { l: 13, t: 11, i: 21, }, D { l: 13, t: 11, i: 349, }, D { l: 14, t: 11, i: 7 }, D { l: 145, t: 11, i: 13, }, D { l: 4, t: 11, i: 342, }, D { l: 135, t: 11, i: 1179, }, D { l: 5, t: 10, i: 834, }, D { l: 7, t: 10, i: 1202, }, D { l: 8, t: 10, i: 14 }, D { l: 9, t: 10, i: 481, }, D { l: 137, t: 10, i: 880, }, D { l: 4, t: 11, i: 928, }, D { l: 133, t: 11, i: 910, }, D { l: 4, t: 11, i: 318, }, D { l: 4, t: 11, i: 496, }, D { l: 7, t: 11, i: 856, }, D { l: 139, t: 11, i: 654, }, D { l: 136, t: 0, i: 835, }, D { l: 7, t: 0, i: 1526, }, D { l: 138, t: 10, i: 465, }, D { l: 151, t: 0, i: 17, }, D { l: 135, t: 0, i: 477, }, D { l: 4, t: 10, i: 357, }, D { l: 6, t: 10, i: 172, }, D { l: 7, t: 10, i: 143, }, D { l: 137, t: 10, i: 413, }, D { l: 6, t: 0, i: 1374, }, D { l: 138, t: 0, i: 994, }, D { l: 18, t: 0, i: 76 }, D { l: 132, t: 10, i: 590, }, D { l: 7, t: 0, i: 287 }, D { l: 8, t: 0, i: 355 }, D { l: 9, t: 0, i: 293 }, D { l: 137, t: 0, i: 743, }, D { l: 134, t: 0, i: 1389, }, D { l: 7, t: 11, i: 915, }, D { l: 8, t: 11, i: 247, }, D { l: 147, t: 11, i: 0, }, D { l: 4, t: 11, i: 202, }, D { l: 5, t: 11, i: 382, }, D { l: 6, t: 11, i: 454, }, D { l: 7, t: 11, i: 936, }, D { l: 7, t: 11, i: 1803, }, D { l: 8, t: 11, i: 758, }, D { l: 9, t: 11, i: 375, }, D { l: 9, t: 11, i: 895, }, D { l: 10, t: 11, i: 743, }, D { l: 10, t: 11, i: 792, }, D { l: 11, t: 11, i: 978, }, D { l: 11, t: 11, i: 1012, }, D { l: 142, t: 11, i: 109, }, D { l: 5, t: 0, i: 384 }, D { l: 8, t: 0, i: 455 }, D { l: 140, t: 0, i: 48, }, D { l: 132, t: 11, i: 390, }, D { l: 5, t: 10, i: 169, }, D { l: 7, t: 10, i: 333, }, D { l: 136, t: 10, i: 45, }, D { l: 5, t: 0, i: 264 }, D { l: 134, t: 0, i: 184, }, D { l: 138, t: 11, i: 791, }, D { l: 133, t: 11, i: 717, }, D { l: 132, t: 10, i: 198, }, D { l: 6, t: 11, i: 445, }, D { l: 7, t: 11, i: 332, }, D { l: 137, t: 11, i: 909, }, D { l: 136, t: 0, i: 1001, }, D { l: 4, t: 10, i: 24 }, D { l: 5, t: 10, i: 140, }, D { l: 5, t: 10, i: 185, }, D { l: 7, t: 10, i: 1500, }, D { l: 11, t: 10, i: 565, }, D { l: 139, t: 10, i: 838, }, D { l: 134, t: 11, i: 578, }, D { l: 5, t: 0, i: 633 }, D { l: 6, t: 0, i: 28 }, D { l: 135, t: 0, i: 1323, }, D { l: 132, t: 0, i: 851, }, D { l: 136, t: 11, i: 267, }, D { l: 7, t: 0, i: 359 }, D { l: 8, t: 0, i: 243 }, D { l: 140, t: 0, i: 175, }, D { l: 4, t: 10, i: 334, }, D { l: 133, t: 10, i: 593, }, D { l: 141, t: 11, i: 87, }, D { l: 136, t: 11, i: 766, }, D { l: 10, t: 0, i: 287, }, D { l: 12, t: 0, i: 138, }, D { l: 10, t: 11, i: 287, }, D { l: 140, t: 11, i: 138, }, D { l: 4, t: 0, i: 105 }, D { l: 132, t: 0, i: 740, }, D { l: 140, t: 10, i: 116, }, D { l: 134, t: 0, i: 857, }, D { l: 135, t: 11, i: 1841, }, D { l: 6, t: 0, i: 1402, }, D { l: 137, t: 0, i: 819, }, D { l: 132, t: 11, i: 584, }, D { l: 132, t: 10, i: 709, }, D { l: 133, t: 10, i: 897, }, D { l: 5, t: 0, i: 224 }, D { l: 13, t: 0, i: 174, }, D { l: 146, t: 0, i: 52, }, D { l: 135, t: 10, i: 1840, }, D { l: 4, t: 10, i: 608, }, D { l: 133, t: 10, i: 497, }, D { l: 139, t: 11, i: 60, }, D { l: 4, t: 0, i: 758 }, D { l: 135, t: 0, i: 1649, }, D { l: 4, t: 11, i: 226, }, D { l: 4, t: 11, i: 326, }, D { l: 135, t: 11, i: 1770, }, D { l: 5, t: 11, i: 426, }, D { l: 8, t: 11, i: 30 }, D { l: 9, t: 11, i: 2 }, D { l: 11, t: 11, i: 549, }, D { l: 147, t: 11, i: 122, }, D { l: 135, t: 10, i: 2039, }, D { l: 6, t: 10, i: 540, }, D { l: 136, t: 10, i: 136, }, D { l: 4, t: 0, i: 573 }, D { l: 8, t: 0, i: 655 }, D { l: 4, t: 10, i: 897, }, D { l: 133, t: 10, i: 786, }, D { l: 7, t: 0, i: 351 }, D { l: 139, t: 0, i: 128, }, D { l: 133, t: 10, i: 999, }, D { l: 4, t: 10, i: 299, }, D { l: 135, t: 10, i: 1004, }, D { l: 133, t: 0, i: 918, }, D { l: 132, t: 11, i: 345, }, D { l: 4, t: 11, i: 385, }, D { l: 7, t: 11, i: 265, }, D { l: 135, t: 11, i: 587, }, D { l: 133, t: 10, i: 456, }, D { l: 136, t: 10, i: 180, }, D { l: 6, t: 0, i: 687 }, D { l: 134, t: 0, i: 1537, }, D { l: 4, t: 11, i: 347, }, D { l: 5, t: 11, i: 423, }, D { l: 5, t: 11, i: 996, }, D { l: 135, t: 11, i: 1329, }, D { l: 132, t: 10, i: 755, }, D { l: 7, t: 11, i: 1259, }, D { l: 9, t: 11, i: 125, }, D { l: 11, t: 11, i: 65, }, D { l: 140, t: 11, i: 285, }, D { l: 5, t: 11, i: 136, }, D { l: 6, t: 11, i: 136, }, D { l: 136, t: 11, i: 644, }, D { l: 134, t: 0, i: 1525, }, D { l: 4, t: 0, i: 1009, }, D { l: 135, t: 0, i: 1139, }, D { l: 139, t: 10, i: 338, }, D { l: 132, t: 0, i: 340, }, D { l: 135, t: 10, i: 1464, }, D { l: 8, t: 0, i: 847 }, D { l: 10, t: 0, i: 861, }, D { l: 10, t: 0, i: 876, }, D { l: 10, t: 0, i: 889, }, D { l: 10, t: 0, i: 922, }, D { l: 10, t: 0, i: 929, }, D { l: 10, t: 0, i: 933, }, D { l: 12, t: 0, i: 784, }, D { l: 140, t: 0, i: 791, }, D { l: 139, t: 0, i: 176, }, D { l: 9, t: 11, i: 134, }, D { l: 10, t: 11, i: 2 }, D { l: 10, t: 11, i: 27, }, D { l: 10, t: 11, i: 333, }, D { l: 11, t: 11, i: 722, }, D { l: 143, t: 11, i: 1, }, D { l: 4, t: 11, i: 433, }, D { l: 133, t: 11, i: 719, }, D { l: 5, t: 0, i: 985 }, D { l: 7, t: 0, i: 509 }, D { l: 7, t: 0, i: 529 }, D { l: 145, t: 0, i: 96, }, D { l: 132, t: 0, i: 615, }, D { l: 4, t: 10, i: 890, }, D { l: 5, t: 10, i: 805, }, D { l: 5, t: 10, i: 819, }, D { l: 5, t: 10, i: 961, }, D { l: 6, t: 10, i: 396, }, D { l: 6, t: 10, i: 1631, }, D { l: 6, t: 10, i: 1678, }, D { l: 7, t: 10, i: 1967, }, D { l: 7, t: 10, i: 2041, }, D { l: 9, t: 10, i: 630, }, D { l: 11, t: 10, i: 8 }, D { l: 11, t: 10, i: 1019, }, D { l: 12, t: 10, i: 176, }, D { l: 13, t: 10, i: 225, }, D { l: 14, t: 10, i: 292, }, D { l: 149, t: 10, i: 24, }, D { l: 135, t: 0, i: 1919, }, D { l: 134, t: 0, i: 1131, }, D { l: 144, t: 11, i: 21, }, D { l: 144, t: 11, i: 51, }, D { l: 135, t: 10, i: 1815, }, D { l: 4, t: 0, i: 247 }, D { l: 7, t: 10, i: 1505, }, D { l: 10, t: 10, i: 190, }, D { l: 10, t: 10, i: 634, }, D { l: 11, t: 10, i: 792, }, D { l: 12, t: 10, i: 358, }, D { l: 140, t: 10, i: 447, }, D { l: 5, t: 10, i: 0 }, D { l: 6, t: 10, i: 536, }, D { l: 7, t: 10, i: 604, }, D { l: 13, t: 10, i: 445, }, D { l: 145, t: 10, i: 126, }, D { l: 4, t: 0, i: 184 }, D { l: 5, t: 0, i: 390 }, D { l: 6, t: 0, i: 337 }, D { l: 7, t: 0, i: 23 }, D { l: 7, t: 0, i: 494 }, D { l: 7, t: 0, i: 618 }, D { l: 7, t: 0, i: 1456, }, D { l: 8, t: 0, i: 27 }, D { l: 8, t: 0, i: 599 }, D { l: 10, t: 0, i: 153, }, D { l: 139, t: 0, i: 710, }, D { l: 6, t: 10, i: 232, }, D { l: 6, t: 10, i: 412, }, D { l: 7, t: 10, i: 1074, }, D { l: 8, t: 10, i: 9 }, D { l: 8, t: 10, i: 157, }, D { l: 8, t: 10, i: 786, }, D { l: 9, t: 10, i: 196, }, D { l: 9, t: 10, i: 352, }, D { l: 9, t: 10, i: 457, }, D { l: 10, t: 10, i: 337, }, D { l: 11, t: 10, i: 232, }, D { l: 11, t: 10, i: 877, }, D { l: 12, t: 10, i: 480, }, D { l: 140, t: 10, i: 546, }, D { l: 13, t: 0, i: 38 }, D { l: 135, t: 10, i: 958, }, D { l: 4, t: 10, i: 382, }, D { l: 136, t: 10, i: 579, }, D { l: 4, t: 10, i: 212, }, D { l: 135, t: 10, i: 1206, }, D { l: 4, t: 11, i: 555, }, D { l: 8, t: 11, i: 536, }, D { l: 138, t: 11, i: 288, }, D { l: 11, t: 11, i: 139, }, D { l: 139, t: 11, i: 171, }, D { l: 9, t: 11, i: 370, }, D { l: 138, t: 11, i: 90, }, D { l: 132, t: 0, i: 1015, }, D { l: 134, t: 0, i: 1088, }, D { l: 5, t: 10, i: 655, }, D { l: 135, t: 11, i: 977, }, D { l: 134, t: 0, i: 1585, }, D { l: 17, t: 10, i: 67, }, D { l: 147, t: 10, i: 74, }, D { l: 10, t: 0, i: 227, }, D { l: 11, t: 0, i: 497, }, D { l: 11, t: 0, i: 709, }, D { l: 140, t: 0, i: 415, }, D { l: 6, t: 0, i: 360 }, D { l: 7, t: 0, i: 1664, }, D { l: 136, t: 0, i: 478, }, D { l: 7, t: 0, i: 95 }, D { l: 6, t: 10, i: 231, }, D { l: 136, t: 10, i: 423, }, D { l: 140, t: 11, i: 65, }, D { l: 4, t: 11, i: 257, }, D { l: 135, t: 11, i: 2031, }, D { l: 135, t: 11, i: 1768, }, D { l: 133, t: 10, i: 300, }, D { l: 139, t: 11, i: 211, }, D { l: 136, t: 0, i: 699, }, D { l: 6, t: 10, i: 237, }, D { l: 7, t: 10, i: 611, }, D { l: 8, t: 10, i: 100, }, D { l: 9, t: 10, i: 416, }, D { l: 11, t: 10, i: 335, }, D { l: 12, t: 10, i: 173, }, D { l: 146, t: 10, i: 101, }, D { l: 14, t: 0, i: 26 }, D { l: 146, t: 0, i: 150, }, D { l: 6, t: 0, i: 581 }, D { l: 135, t: 0, i: 1119, }, D { l: 135, t: 10, i: 1208, }, D { l: 132, t: 0, i: 739, }, D { l: 6, t: 11, i: 83 }, D { l: 6, t: 11, i: 1733, }, D { l: 135, t: 11, i: 1389, }, D { l: 137, t: 0, i: 869, }, D { l: 4, t: 0, i: 67 }, D { l: 5, t: 0, i: 422 }, D { l: 7, t: 0, i: 1037, }, D { l: 7, t: 0, i: 1289, }, D { l: 7, t: 0, i: 1555, }, D { l: 9, t: 0, i: 741 }, D { l: 145, t: 0, i: 108, }, D { l: 133, t: 10, i: 199, }, D { l: 12, t: 10, i: 427, }, D { l: 146, t: 10, i: 38, }, D { l: 136, t: 0, i: 464, }, D { l: 142, t: 0, i: 42, }, D { l: 10, t: 0, i: 96 }, D { l: 8, t: 11, i: 501, }, D { l: 137, t: 11, i: 696, }, D { l: 134, t: 11, i: 592, }, D { l: 4, t: 0, i: 512 }, D { l: 4, t: 0, i: 966 }, D { l: 5, t: 0, i: 342 }, D { l: 6, t: 0, i: 1855, }, D { l: 8, t: 0, i: 869 }, D { l: 8, t: 0, i: 875 }, D { l: 8, t: 0, i: 901 }, D { l: 144, t: 0, i: 26, }, D { l: 8, t: 0, i: 203 }, D { l: 11, t: 0, i: 823, }, D { l: 11, t: 0, i: 846, }, D { l: 12, t: 0, i: 482, }, D { l: 13, t: 0, i: 277, }, D { l: 13, t: 0, i: 302, }, D { l: 13, t: 0, i: 464, }, D { l: 14, t: 0, i: 205, }, D { l: 142, t: 0, i: 221, }, D { l: 4, t: 0, i: 449 }, D { l: 133, t: 0, i: 718, }, D { l: 7, t: 11, i: 1718, }, D { l: 9, t: 11, i: 95 }, D { l: 9, t: 11, i: 274, }, D { l: 10, t: 11, i: 279, }, D { l: 10, t: 11, i: 317, }, D { l: 10, t: 11, i: 420, }, D { l: 11, t: 11, i: 303, }, D { l: 11, t: 11, i: 808, }, D { l: 12, t: 11, i: 134, }, D { l: 12, t: 11, i: 367, }, D { l: 13, t: 11, i: 149, }, D { l: 13, t: 11, i: 347, }, D { l: 14, t: 11, i: 349, }, D { l: 14, t: 11, i: 406, }, D { l: 18, t: 11, i: 22, }, D { l: 18, t: 11, i: 89, }, D { l: 18, t: 11, i: 122, }, D { l: 147, t: 11, i: 47, }, D { l: 133, t: 11, i: 26, }, D { l: 4, t: 0, i: 355 }, D { l: 6, t: 0, i: 311 }, D { l: 9, t: 0, i: 256 }, D { l: 138, t: 0, i: 404, }, D { l: 132, t: 11, i: 550, }, D { l: 10, t: 0, i: 758, }, D { l: 6, t: 10, i: 312, }, D { l: 6, t: 10, i: 1715, }, D { l: 10, t: 10, i: 584, }, D { l: 11, t: 10, i: 546, }, D { l: 11, t: 10, i: 692, }, D { l: 12, t: 10, i: 259, }, D { l: 12, t: 10, i: 295, }, D { l: 13, t: 10, i: 46, }, D { l: 141, t: 10, i: 154, }, D { l: 136, t: 11, i: 822, }, D { l: 5, t: 0, i: 827 }, D { l: 4, t: 11, i: 902, }, D { l: 5, t: 11, i: 809, }, D { l: 6, t: 11, i: 122, }, D { l: 135, t: 11, i: 896, }, D { l: 5, t: 0, i: 64 }, D { l: 140, t: 0, i: 581, }, D { l: 4, t: 0, i: 442 }, D { l: 6, t: 0, i: 739 }, D { l: 7, t: 0, i: 1047, }, D { l: 7, t: 0, i: 1352, }, D { l: 7, t: 0, i: 1643, }, D { l: 7, t: 11, i: 1911, }, D { l: 9, t: 11, i: 449, }, D { l: 10, t: 11, i: 192, }, D { l: 138, t: 11, i: 740, }, D { l: 135, t: 11, i: 262, }, D { l: 132, t: 10, i: 588, }, D { l: 133, t: 11, i: 620, }, D { l: 5, t: 0, i: 977 }, D { l: 6, t: 0, i: 288 }, D { l: 7, t: 0, i: 528 }, D { l: 4, t: 11, i: 34 }, D { l: 5, t: 11, i: 574, }, D { l: 7, t: 11, i: 279, }, D { l: 7, t: 11, i: 1624, }, D { l: 136, t: 11, i: 601, }, D { l: 6, t: 0, i: 1375, }, D { l: 4, t: 10, i: 231, }, D { l: 5, t: 10, i: 61 }, D { l: 6, t: 10, i: 104, }, D { l: 7, t: 10, i: 729, }, D { l: 7, t: 10, i: 964, }, D { l: 7, t: 10, i: 1658, }, D { l: 140, t: 10, i: 414, }, D { l: 6, t: 10, i: 263, }, D { l: 138, t: 10, i: 757, }, D { l: 132, t: 10, i: 320, }, D { l: 4, t: 0, i: 254 }, D { l: 7, t: 0, i: 1309, }, D { l: 5, t: 11, i: 332, }, D { l: 135, t: 11, i: 1309, }, D { l: 6, t: 11, i: 261, }, D { l: 8, t: 11, i: 182, }, D { l: 139, t: 11, i: 943, }, D { l: 132, t: 10, i: 225, }, D { l: 6, t: 0, i: 12 }, D { l: 135, t: 0, i: 1219, }, D { l: 4, t: 0, i: 275 }, D { l: 12, t: 0, i: 376, }, D { l: 6, t: 11, i: 1721, }, D { l: 141, t: 11, i: 490, }, D { l: 4, t: 11, i: 933, }, D { l: 133, t: 11, i: 880, }, D { l: 6, t: 0, i: 951 }, D { l: 6, t: 0, i: 1109, }, D { l: 6, t: 0, i: 1181, }, D { l: 7, t: 0, i: 154 }, D { l: 4, t: 10, i: 405, }, D { l: 7, t: 10, i: 817, }, D { l: 14, t: 10, i: 58, }, D { l: 17, t: 10, i: 37, }, D { l: 146, t: 10, i: 124, }, D { l: 6, t: 0, i: 1520, }, D { l: 133, t: 10, i: 974, }, D { l: 134, t: 0, i: 1753, }, D { l: 6, t: 0, i: 369 }, D { l: 6, t: 0, i: 502 }, D { l: 7, t: 0, i: 1036, }, D { l: 8, t: 0, i: 348 }, D { l: 9, t: 0, i: 452 }, D { l: 10, t: 0, i: 26 }, D { l: 11, t: 0, i: 224, }, D { l: 11, t: 0, i: 387, }, D { l: 11, t: 0, i: 772, }, D { l: 12, t: 0, i: 95 }, D { l: 12, t: 0, i: 629, }, D { l: 13, t: 0, i: 195, }, D { l: 13, t: 0, i: 207, }, D { l: 13, t: 0, i: 241, }, D { l: 14, t: 0, i: 260, }, D { l: 14, t: 0, i: 270, }, D { l: 143, t: 0, i: 140, }, D { l: 132, t: 0, i: 269, }, D { l: 5, t: 0, i: 480 }, D { l: 7, t: 0, i: 532 }, D { l: 7, t: 0, i: 1197, }, D { l: 7, t: 0, i: 1358, }, D { l: 8, t: 0, i: 291 }, D { l: 11, t: 0, i: 349, }, D { l: 142, t: 0, i: 396, }, D { l: 5, t: 10, i: 235, }, D { l: 7, t: 10, i: 1239, }, D { l: 11, t: 10, i: 131, }, D { l: 140, t: 10, i: 370, }, D { l: 7, t: 10, i: 956, }, D { l: 7, t: 10, i: 1157, }, D { l: 7, t: 10, i: 1506, }, D { l: 7, t: 10, i: 1606, }, D { l: 7, t: 10, i: 1615, }, D { l: 7, t: 10, i: 1619, }, D { l: 7, t: 10, i: 1736, }, D { l: 7, t: 10, i: 1775, }, D { l: 8, t: 10, i: 590, }, D { l: 9, t: 10, i: 324, }, D { l: 9, t: 10, i: 736, }, D { l: 9, t: 10, i: 774, }, D { l: 9, t: 10, i: 776, }, D { l: 9, t: 10, i: 784, }, D { l: 10, t: 10, i: 567, }, D { l: 10, t: 10, i: 708, }, D { l: 11, t: 10, i: 518, }, D { l: 11, t: 10, i: 613, }, D { l: 11, t: 10, i: 695, }, D { l: 11, t: 10, i: 716, }, D { l: 11, t: 10, i: 739, }, D { l: 11, t: 10, i: 770, }, D { l: 11, t: 10, i: 771, }, D { l: 11, t: 10, i: 848, }, D { l: 11, t: 10, i: 857, }, D { l: 11, t: 10, i: 931, }, D { l: 11, t: 10, i: 947, }, D { l: 12, t: 10, i: 326, }, D { l: 12, t: 10, i: 387, }, D { l: 12, t: 10, i: 484, }, D { l: 12, t: 10, i: 528, }, D { l: 12, t: 10, i: 552, }, D { l: 12, t: 10, i: 613, }, D { l: 13, t: 10, i: 189, }, D { l: 13, t: 10, i: 256, }, D { l: 13, t: 10, i: 340, }, D { l: 13, t: 10, i: 432, }, D { l: 13, t: 10, i: 436, }, D { l: 13, t: 10, i: 440, }, D { l: 13, t: 10, i: 454, }, D { l: 14, t: 10, i: 174, }, D { l: 14, t: 10, i: 220, }, D { l: 14, t: 10, i: 284, }, D { l: 14, t: 10, i: 390, }, D { l: 145, t: 10, i: 121, }, D { l: 8, t: 11, i: 598, }, D { l: 9, t: 11, i: 664, }, D { l: 138, t: 11, i: 441, }, D { l: 9, t: 10, i: 137, }, D { l: 138, t: 10, i: 221, }, D { l: 133, t: 11, i: 812, }, D { l: 148, t: 0, i: 15, }, D { l: 134, t: 0, i: 1341, }, D { l: 6, t: 0, i: 1017, }, D { l: 4, t: 11, i: 137, }, D { l: 7, t: 11, i: 1178, }, D { l: 135, t: 11, i: 1520, }, D { l: 7, t: 10, i: 390, }, D { l: 138, t: 10, i: 140, }, D { l: 7, t: 11, i: 1260, }, D { l: 135, t: 11, i: 1790, }, D { l: 137, t: 11, i: 191, }, D { l: 135, t: 10, i: 1144, }, D { l: 6, t: 0, i: 1810, }, D { l: 7, t: 0, i: 657 }, D { l: 8, t: 0, i: 886 }, D { l: 10, t: 0, i: 857, }, D { l: 14, t: 0, i: 440, }, D { l: 144, t: 0, i: 96, }, D { l: 8, t: 0, i: 533 }, D { l: 6, t: 11, i: 1661, }, D { l: 7, t: 11, i: 1975, }, D { l: 7, t: 11, i: 2009, }, D { l: 135, t: 11, i: 2011, }, D { l: 6, t: 0, i: 1453, }, D { l: 134, t: 10, i: 464, }, D { l: 132, t: 11, i: 715, }, D { l: 5, t: 10, i: 407, }, D { l: 11, t: 10, i: 204, }, D { l: 11, t: 10, i: 243, }, D { l: 11, t: 10, i: 489, }, D { l: 12, t: 10, i: 293, }, D { l: 19, t: 10, i: 37, }, D { l: 20, t: 10, i: 73, }, D { l: 150, t: 10, i: 38, }, D { l: 133, t: 11, i: 703, }, D { l: 4, t: 0, i: 211 }, D { l: 7, t: 0, i: 1483, }, D { l: 5, t: 10, i: 325, }, D { l: 8, t: 10, i: 5 }, D { l: 8, t: 10, i: 227, }, D { l: 9, t: 10, i: 105, }, D { l: 10, t: 10, i: 585, }, D { l: 140, t: 10, i: 614, }, D { l: 4, t: 0, i: 332 }, D { l: 5, t: 0, i: 335 }, D { l: 6, t: 0, i: 238 }, D { l: 7, t: 0, i: 269 }, D { l: 7, t: 0, i: 811 }, D { l: 7, t: 0, i: 1797, }, D { l: 8, t: 0, i: 836 }, D { l: 9, t: 0, i: 507 }, D { l: 141, t: 0, i: 242, }, D { l: 5, t: 11, i: 89 }, D { l: 7, t: 11, i: 1915, }, D { l: 9, t: 11, i: 185, }, D { l: 9, t: 11, i: 235, }, D { l: 9, t: 11, i: 496, }, D { l: 10, t: 11, i: 64, }, D { l: 10, t: 11, i: 270, }, D { l: 10, t: 11, i: 403, }, D { l: 10, t: 11, i: 469, }, D { l: 10, t: 11, i: 529, }, D { l: 10, t: 11, i: 590, }, D { l: 11, t: 11, i: 140, }, D { l: 11, t: 11, i: 860, }, D { l: 13, t: 11, i: 1 }, D { l: 13, t: 11, i: 422, }, D { l: 14, t: 11, i: 341, }, D { l: 14, t: 11, i: 364, }, D { l: 17, t: 11, i: 93, }, D { l: 18, t: 11, i: 113, }, D { l: 19, t: 11, i: 97, }, D { l: 147, t: 11, i: 113, }, D { l: 133, t: 11, i: 695, }, D { l: 16, t: 0, i: 19 }, D { l: 5, t: 11, i: 6 }, D { l: 6, t: 11, i: 183, }, D { l: 6, t: 10, i: 621, }, D { l: 7, t: 11, i: 680, }, D { l: 7, t: 11, i: 978, }, D { l: 7, t: 11, i: 1013, }, D { l: 7, t: 11, i: 1055, }, D { l: 12, t: 11, i: 230, }, D { l: 13, t: 11, i: 172, }, D { l: 13, t: 10, i: 504, }, D { l: 146, t: 11, i: 29, }, D { l: 136, t: 0, i: 156, }, D { l: 133, t: 0, i: 1009, }, D { l: 6, t: 11, i: 29 }, D { l: 139, t: 11, i: 63, }, D { l: 134, t: 0, i: 820, }, D { l: 134, t: 10, i: 218, }, D { l: 7, t: 10, i: 454, }, D { l: 7, t: 10, i: 782, }, D { l: 8, t: 10, i: 768, }, D { l: 140, t: 10, i: 686, }, D { l: 5, t: 0, i: 228 }, D { l: 6, t: 0, i: 203 }, D { l: 7, t: 0, i: 156 }, D { l: 8, t: 0, i: 347 }, D { l: 9, t: 0, i: 265 }, D { l: 18, t: 0, i: 39 }, D { l: 20, t: 0, i: 54 }, D { l: 21, t: 0, i: 31 }, D { l: 22, t: 0, i: 3 }, D { l: 23, t: 0, i: 0 }, D { l: 15, t: 11, i: 8 }, D { l: 18, t: 11, i: 39, }, D { l: 20, t: 11, i: 54, }, D { l: 21, t: 11, i: 31, }, D { l: 22, t: 11, i: 3 }, D { l: 151, t: 11, i: 0, }, D { l: 7, t: 0, i: 1131, }, D { l: 135, t: 0, i: 1468, }, D { l: 144, t: 10, i: 0, }, D { l: 134, t: 0, i: 1276, }, D { l: 10, t: 10, i: 676, }, D { l: 140, t: 10, i: 462, }, D { l: 132, t: 11, i: 311, }, D { l: 134, t: 11, i: 1740, }, D { l: 7, t: 11, i: 170, }, D { l: 8, t: 11, i: 90 }, D { l: 8, t: 11, i: 177, }, D { l: 8, t: 11, i: 415, }, D { l: 11, t: 11, i: 714, }, D { l: 142, t: 11, i: 281, }, D { l: 134, t: 10, i: 164, }, D { l: 6, t: 0, i: 1792, }, D { l: 138, t: 0, i: 849, }, D { l: 150, t: 10, i: 50, }, D { l: 5, t: 0, i: 291 }, D { l: 5, t: 0, i: 318 }, D { l: 7, t: 0, i: 765 }, D { l: 9, t: 0, i: 389 }, D { l: 12, t: 0, i: 548, }, D { l: 8, t: 11, i: 522, }, D { l: 142, t: 11, i: 328, }, D { l: 11, t: 11, i: 91, }, D { l: 13, t: 11, i: 129, }, D { l: 15, t: 11, i: 101, }, D { l: 145, t: 11, i: 125, }, D { l: 4, t: 11, i: 494, }, D { l: 6, t: 11, i: 74 }, D { l: 7, t: 11, i: 44 }, D { l: 7, t: 11, i: 407, }, D { l: 8, t: 11, i: 551, }, D { l: 12, t: 11, i: 17, }, D { l: 15, t: 11, i: 5 }, D { l: 148, t: 11, i: 11, }, D { l: 4, t: 11, i: 276, }, D { l: 133, t: 11, i: 296, }, D { l: 6, t: 10, i: 343, }, D { l: 7, t: 10, i: 195, }, D { l: 7, t: 11, i: 1777, }, D { l: 9, t: 10, i: 226, }, D { l: 10, t: 10, i: 197, }, D { l: 10, t: 10, i: 575, }, D { l: 11, t: 10, i: 502, }, D { l: 139, t: 10, i: 899, }, D { l: 10, t: 0, i: 525, }, D { l: 139, t: 0, i: 82, }, D { l: 14, t: 0, i: 453, }, D { l: 4, t: 11, i: 7 }, D { l: 5, t: 11, i: 90 }, D { l: 5, t: 11, i: 158, }, D { l: 6, t: 11, i: 542, }, D { l: 7, t: 11, i: 221, }, D { l: 7, t: 11, i: 1574, }, D { l: 9, t: 11, i: 490, }, D { l: 10, t: 11, i: 540, }, D { l: 11, t: 11, i: 443, }, D { l: 139, t: 11, i: 757, }, D { l: 135, t: 0, i: 666, }, D { l: 22, t: 10, i: 29, }, D { l: 150, t: 11, i: 29, }, D { l: 4, t: 0, i: 422 }, D { l: 147, t: 10, i: 8, }, D { l: 5, t: 0, i: 355 }, D { l: 145, t: 0, i: 0 }, D { l: 6, t: 0, i: 1873, }, D { l: 9, t: 0, i: 918 }, D { l: 7, t: 11, i: 588, }, D { l: 9, t: 11, i: 175, }, D { l: 138, t: 11, i: 530, }, D { l: 143, t: 11, i: 31, }, D { l: 11, t: 0, i: 165, }, D { l: 7, t: 10, i: 1125, }, D { l: 9, t: 10, i: 143, }, D { l: 14, t: 10, i: 405, }, D { l: 150, t: 10, i: 21, }, D { l: 9, t: 0, i: 260 }, D { l: 137, t: 0, i: 905, }, D { l: 5, t: 11, i: 872, }, D { l: 6, t: 11, i: 57 }, D { l: 6, t: 11, i: 479, }, D { l: 6, t: 11, i: 562, }, D { l: 7, t: 11, i: 471, }, D { l: 7, t: 11, i: 1060, }, D { l: 9, t: 11, i: 447, }, D { l: 9, t: 11, i: 454, }, D { l: 141, t: 11, i: 6, }, D { l: 138, t: 11, i: 704, }, D { l: 133, t: 0, i: 865, }, D { l: 5, t: 0, i: 914 }, D { l: 134, t: 0, i: 1625, }, D { l: 133, t: 0, i: 234, }, D { l: 7, t: 0, i: 1383, }, D { l: 5, t: 11, i: 31 }, D { l: 6, t: 11, i: 614, }, D { l: 145, t: 11, i: 61, }, D { l: 7, t: 11, i: 1200, }, D { l: 138, t: 11, i: 460, }, D { l: 6, t: 11, i: 424, }, D { l: 135, t: 11, i: 1866, }, D { l: 136, t: 0, i: 306, }, D { l: 5, t: 10, i: 959, }, D { l: 12, t: 11, i: 30, }, D { l: 13, t: 11, i: 148, }, D { l: 14, t: 11, i: 87, }, D { l: 14, t: 11, i: 182, }, D { l: 16, t: 11, i: 42, }, D { l: 18, t: 11, i: 92, }, D { l: 148, t: 11, i: 70, }, D { l: 6, t: 0, i: 1919, }, D { l: 6, t: 0, i: 1921, }, D { l: 9, t: 0, i: 923 }, D { l: 9, t: 0, i: 930 }, D { l: 9, t: 0, i: 941 }, D { l: 9, t: 0, i: 949 }, D { l: 9, t: 0, i: 987 }, D { l: 9, t: 0, i: 988 }, D { l: 9, t: 0, i: 992 }, D { l: 12, t: 0, i: 802, }, D { l: 12, t: 0, i: 815, }, D { l: 12, t: 0, i: 856, }, D { l: 12, t: 0, i: 885, }, D { l: 12, t: 0, i: 893, }, D { l: 12, t: 0, i: 898, }, D { l: 12, t: 0, i: 919, }, D { l: 12, t: 0, i: 920, }, D { l: 12, t: 0, i: 941, }, D { l: 12, t: 0, i: 947, }, D { l: 15, t: 0, i: 183, }, D { l: 15, t: 0, i: 185, }, D { l: 15, t: 0, i: 189, }, D { l: 15, t: 0, i: 197, }, D { l: 15, t: 0, i: 202, }, D { l: 15, t: 0, i: 233, }, D { l: 18, t: 0, i: 218, }, D { l: 18, t: 0, i: 219, }, D { l: 18, t: 0, i: 233, }, D { l: 143, t: 11, i: 156, }, D { l: 135, t: 10, i: 1759, }, D { l: 136, t: 10, i: 173, }, D { l: 13, t: 0, i: 163, }, D { l: 13, t: 0, i: 180, }, D { l: 18, t: 0, i: 78 }, D { l: 20, t: 0, i: 35 }, D { l: 5, t: 11, i: 13 }, D { l: 134, t: 11, i: 142, }, D { l: 134, t: 10, i: 266, }, D { l: 6, t: 11, i: 97 }, D { l: 7, t: 11, i: 116, }, D { l: 8, t: 11, i: 322, }, D { l: 8, t: 11, i: 755, }, D { l: 9, t: 11, i: 548, }, D { l: 10, t: 11, i: 714, }, D { l: 11, t: 11, i: 884, }, D { l: 141, t: 11, i: 324, }, D { l: 135, t: 0, i: 1312, }, D { l: 9, t: 0, i: 814 }, D { l: 137, t: 11, i: 676, }, D { l: 133, t: 0, i: 707, }, D { l: 135, t: 0, i: 1493, }, D { l: 6, t: 0, i: 421 }, D { l: 7, t: 0, i: 61 }, D { l: 7, t: 0, i: 1540, }, D { l: 10, t: 0, i: 11 }, D { l: 138, t: 0, i: 501, }, D { l: 12, t: 0, i: 733, }, D { l: 12, t: 0, i: 766, }, D { l: 7, t: 11, i: 866, }, D { l: 135, t: 11, i: 1163, }, D { l: 137, t: 0, i: 341, }, D { l: 142, t: 0, i: 98, }, D { l: 145, t: 11, i: 115, }, D { l: 135, t: 11, i: 1111, }, D { l: 136, t: 10, i: 300, }, D { l: 136, t: 0, i: 1014, }, D { l: 8, t: 11, i: 1 }, D { l: 9, t: 11, i: 112, }, D { l: 138, t: 11, i: 326, }, D { l: 132, t: 11, i: 730, }, D { l: 5, t: 11, i: 488, }, D { l: 6, t: 11, i: 527, }, D { l: 7, t: 11, i: 489, }, D { l: 7, t: 11, i: 1636, }, D { l: 8, t: 11, i: 121, }, D { l: 8, t: 11, i: 144, }, D { l: 8, t: 11, i: 359, }, D { l: 9, t: 11, i: 193, }, D { l: 9, t: 11, i: 241, }, D { l: 9, t: 11, i: 336, }, D { l: 9, t: 11, i: 882, }, D { l: 11, t: 11, i: 266, }, D { l: 11, t: 11, i: 372, }, D { l: 11, t: 11, i: 944, }, D { l: 12, t: 11, i: 401, }, D { l: 140, t: 11, i: 641, }, D { l: 6, t: 0, i: 971 }, D { l: 134, t: 0, i: 1121, }, D { l: 6, t: 0, i: 102 }, D { l: 7, t: 0, i: 72 }, D { l: 15, t: 0, i: 142, }, D { l: 147, t: 0, i: 67, }, D { l: 151, t: 0, i: 30, }, D { l: 135, t: 0, i: 823, }, D { l: 134, t: 0, i: 1045, }, D { l: 5, t: 10, i: 427, }, D { l: 5, t: 10, i: 734, }, D { l: 7, t: 10, i: 478, }, D { l: 136, t: 10, i: 52, }, D { l: 7, t: 0, i: 1930, }, D { l: 11, t: 10, i: 217, }, D { l: 142, t: 10, i: 165, }, D { l: 6, t: 0, i: 1512, }, D { l: 135, t: 0, i: 1870, }, D { l: 9, t: 11, i: 31 }, D { l: 10, t: 11, i: 244, }, D { l: 10, t: 11, i: 699, }, D { l: 12, t: 11, i: 149, }, D { l: 141, t: 11, i: 497, }, D { l: 133, t: 11, i: 377, }, D { l: 145, t: 11, i: 101, }, D { l: 10, t: 11, i: 158, }, D { l: 13, t: 11, i: 13, }, D { l: 13, t: 11, i: 137, }, D { l: 13, t: 11, i: 258, }, D { l: 14, t: 11, i: 111, }, D { l: 14, t: 11, i: 225, }, D { l: 14, t: 11, i: 253, }, D { l: 14, t: 11, i: 304, }, D { l: 14, t: 11, i: 339, }, D { l: 14, t: 11, i: 417, }, D { l: 146, t: 11, i: 33, }, D { l: 6, t: 0, i: 87 }, D { l: 6, t: 10, i: 1734, }, D { l: 7, t: 10, i: 20 }, D { l: 7, t: 10, i: 1056, }, D { l: 8, t: 10, i: 732, }, D { l: 9, t: 10, i: 406, }, D { l: 9, t: 10, i: 911, }, D { l: 138, t: 10, i: 694, }, D { l: 134, t: 0, i: 1243, }, D { l: 137, t: 0, i: 245, }, D { l: 7, t: 0, i: 68 }, D { l: 8, t: 0, i: 48 }, D { l: 8, t: 0, i: 88 }, D { l: 8, t: 0, i: 582 }, D { l: 8, t: 0, i: 681 }, D { l: 9, t: 0, i: 373 }, D { l: 9, t: 0, i: 864 }, D { l: 11, t: 0, i: 157, }, D { l: 11, t: 0, i: 336, }, D { l: 11, t: 0, i: 843, }, D { l: 148, t: 0, i: 27, }, D { l: 8, t: 11, i: 663, }, D { l: 144, t: 11, i: 8, }, D { l: 133, t: 10, i: 613, }, D { l: 4, t: 0, i: 88 }, D { l: 5, t: 0, i: 137 }, D { l: 5, t: 0, i: 174 }, D { l: 5, t: 0, i: 777 }, D { l: 6, t: 0, i: 1664, }, D { l: 6, t: 0, i: 1725, }, D { l: 7, t: 0, i: 77 }, D { l: 7, t: 0, i: 426 }, D { l: 7, t: 0, i: 1317, }, D { l: 7, t: 0, i: 1355, }, D { l: 8, t: 0, i: 126 }, D { l: 8, t: 0, i: 563 }, D { l: 9, t: 0, i: 523 }, D { l: 9, t: 0, i: 750 }, D { l: 10, t: 0, i: 310, }, D { l: 10, t: 0, i: 836, }, D { l: 11, t: 0, i: 42 }, D { l: 11, t: 0, i: 318, }, D { l: 11, t: 0, i: 731, }, D { l: 12, t: 0, i: 68 }, D { l: 12, t: 0, i: 92 }, D { l: 12, t: 0, i: 507, }, D { l: 12, t: 0, i: 692, }, D { l: 13, t: 0, i: 81 }, D { l: 13, t: 0, i: 238, }, D { l: 13, t: 0, i: 374, }, D { l: 14, t: 0, i: 436, }, D { l: 18, t: 0, i: 138, }, D { l: 19, t: 0, i: 78 }, D { l: 19, t: 0, i: 111, }, D { l: 20, t: 0, i: 55 }, D { l: 20, t: 0, i: 77 }, D { l: 148, t: 0, i: 92, }, D { l: 141, t: 0, i: 418, }, D { l: 4, t: 0, i: 938 }, D { l: 137, t: 0, i: 625, }, D { l: 138, t: 0, i: 351, }, D { l: 5, t: 11, i: 843, }, D { l: 7, t: 10, i: 32 }, D { l: 7, t: 10, i: 984, }, D { l: 8, t: 10, i: 85 }, D { l: 8, t: 10, i: 709, }, D { l: 9, t: 10, i: 579, }, D { l: 9, t: 10, i: 847, }, D { l: 9, t: 10, i: 856, }, D { l: 10, t: 10, i: 799, }, D { l: 11, t: 10, i: 258, }, D { l: 11, t: 10, i: 1007, }, D { l: 12, t: 10, i: 331, }, D { l: 12, t: 10, i: 615, }, D { l: 13, t: 10, i: 188, }, D { l: 13, t: 10, i: 435, }, D { l: 14, t: 10, i: 8 }, D { l: 15, t: 10, i: 165, }, D { l: 16, t: 10, i: 27, }, D { l: 148, t: 10, i: 40, }, D { l: 6, t: 0, i: 1668, }, D { l: 7, t: 0, i: 1499, }, D { l: 8, t: 0, i: 117 }, D { l: 9, t: 0, i: 314 }, D { l: 138, t: 0, i: 174, }, D { l: 135, t: 0, i: 707, }, D { l: 132, t: 11, i: 554, }, D { l: 133, t: 11, i: 536, }, D { l: 5, t: 0, i: 403 }, D { l: 5, t: 11, i: 207, }, D { l: 9, t: 11, i: 79 }, D { l: 11, t: 11, i: 625, }, D { l: 145, t: 11, i: 7, }, D { l: 132, t: 11, i: 424, }, D { l: 136, t: 11, i: 785, }, D { l: 4, t: 10, i: 167, }, D { l: 135, t: 10, i: 82, }, D { l: 9, t: 0, i: 7 }, D { l: 23, t: 0, i: 6 }, D { l: 9, t: 11, i: 7 }, D { l: 151, t: 11, i: 6, }, D { l: 6, t: 0, i: 282 }, D { l: 5, t: 10, i: 62 }, D { l: 6, t: 10, i: 534, }, D { l: 7, t: 10, i: 74 }, D { l: 7, t: 10, i: 678, }, D { l: 7, t: 10, i: 684, }, D { l: 7, t: 10, i: 1043, }, D { l: 7, t: 10, i: 1072, }, D { l: 8, t: 10, i: 280, }, D { l: 8, t: 10, i: 541, }, D { l: 8, t: 10, i: 686, }, D { l: 9, t: 10, i: 258, }, D { l: 10, t: 10, i: 519, }, D { l: 11, t: 10, i: 252, }, D { l: 140, t: 10, i: 282, }, D { l: 138, t: 10, i: 33, }, D { l: 132, t: 10, i: 359, }, D { l: 4, t: 0, i: 44 }, D { l: 5, t: 0, i: 311 }, D { l: 6, t: 0, i: 156 }, D { l: 7, t: 0, i: 639 }, D { l: 7, t: 0, i: 762 }, D { l: 7, t: 0, i: 1827, }, D { l: 9, t: 0, i: 8 }, D { l: 9, t: 0, i: 462 }, D { l: 148, t: 0, i: 83, }, D { l: 7, t: 11, i: 769, }, D { l: 9, t: 11, i: 18 }, D { l: 138, t: 11, i: 358, }, D { l: 4, t: 0, i: 346 }, D { l: 7, t: 0, i: 115 }, D { l: 9, t: 0, i: 180 }, D { l: 9, t: 0, i: 456 }, D { l: 10, t: 0, i: 363, }, D { l: 4, t: 11, i: 896, }, D { l: 134, t: 11, i: 1777, }, D { l: 133, t: 10, i: 211, }, D { l: 7, t: 0, i: 761 }, D { l: 7, t: 0, i: 1051, }, D { l: 137, t: 0, i: 545, }, D { l: 6, t: 10, i: 145, }, D { l: 141, t: 10, i: 336, }, D { l: 7, t: 11, i: 750, }, D { l: 9, t: 11, i: 223, }, D { l: 11, t: 11, i: 27, }, D { l: 11, t: 11, i: 466, }, D { l: 12, t: 11, i: 624, }, D { l: 14, t: 11, i: 265, }, D { l: 146, t: 11, i: 61, }, D { l: 6, t: 0, i: 752 }, D { l: 6, t: 0, i: 768 }, D { l: 6, t: 0, i: 1195, }, D { l: 6, t: 0, i: 1254, }, D { l: 6, t: 0, i: 1619, }, D { l: 137, t: 0, i: 835, }, D { l: 6, t: 0, i: 1936, }, D { l: 8, t: 0, i: 930 }, D { l: 136, t: 0, i: 960, }, D { l: 132, t: 10, i: 263, }, D { l: 132, t: 11, i: 249, }, D { l: 12, t: 0, i: 653, }, D { l: 132, t: 10, i: 916, }, D { l: 4, t: 11, i: 603, }, D { l: 133, t: 11, i: 661, }, D { l: 8, t: 0, i: 344 }, D { l: 4, t: 11, i: 11 }, D { l: 6, t: 11, i: 128, }, D { l: 7, t: 11, i: 231, }, D { l: 7, t: 11, i: 1533, }, D { l: 138, t: 11, i: 725, }, D { l: 134, t: 0, i: 1483, }, D { l: 134, t: 0, i: 875, }, D { l: 6, t: 0, i: 185 }, D { l: 7, t: 0, i: 1899, }, D { l: 9, t: 0, i: 875 }, D { l: 139, t: 0, i: 673, }, D { l: 15, t: 10, i: 155, }, D { l: 144, t: 10, i: 79, }, D { l: 7, t: 0, i: 93 }, D { l: 7, t: 0, i: 210 }, D { l: 7, t: 0, i: 1223, }, D { l: 8, t: 0, i: 451 }, D { l: 8, t: 0, i: 460 }, D { l: 11, t: 0, i: 353, }, D { l: 11, t: 0, i: 475, }, D { l: 4, t: 10, i: 599, }, D { l: 6, t: 10, i: 1634, }, D { l: 7, t: 10, i: 67 }, D { l: 7, t: 10, i: 691, }, D { l: 7, t: 10, i: 979, }, D { l: 7, t: 10, i: 1697, }, D { l: 8, t: 10, i: 207, }, D { l: 8, t: 10, i: 214, }, D { l: 8, t: 10, i: 231, }, D { l: 8, t: 10, i: 294, }, D { l: 8, t: 10, i: 336, }, D { l: 8, t: 10, i: 428, }, D { l: 8, t: 10, i: 471, }, D { l: 8, t: 10, i: 622, }, D { l: 8, t: 10, i: 626, }, D { l: 8, t: 10, i: 679, }, D { l: 8, t: 10, i: 759, }, D { l: 8, t: 10, i: 829, }, D { l: 9, t: 10, i: 11 }, D { l: 9, t: 10, i: 246, }, D { l: 9, t: 10, i: 484, }, D { l: 9, t: 10, i: 573, }, D { l: 9, t: 10, i: 706, }, D { l: 9, t: 10, i: 762, }, D { l: 9, t: 10, i: 798, }, D { l: 9, t: 10, i: 855, }, D { l: 9, t: 10, i: 870, }, D { l: 9, t: 10, i: 912, }, D { l: 10, t: 10, i: 303, }, D { l: 10, t: 10, i: 335, }, D { l: 10, t: 10, i: 424, }, D { l: 10, t: 10, i: 461, }, D { l: 10, t: 10, i: 543, }, D { l: 10, t: 10, i: 759, }, D { l: 10, t: 10, i: 814, }, D { l: 11, t: 10, i: 59, }, D { l: 11, t: 10, i: 235, }, D { l: 11, t: 10, i: 590, }, D { l: 11, t: 10, i: 929, }, D { l: 11, t: 10, i: 963, }, D { l: 11, t: 10, i: 987, }, D { l: 12, t: 10, i: 114, }, D { l: 12, t: 10, i: 182, }, D { l: 12, t: 10, i: 226, }, D { l: 12, t: 10, i: 332, }, D { l: 12, t: 10, i: 439, }, D { l: 12, t: 10, i: 575, }, D { l: 12, t: 10, i: 598, }, D { l: 12, t: 10, i: 675, }, D { l: 13, t: 10, i: 8 }, D { l: 13, t: 10, i: 125, }, D { l: 13, t: 10, i: 194, }, D { l: 13, t: 10, i: 287, }, D { l: 14, t: 10, i: 197, }, D { l: 14, t: 10, i: 383, }, D { l: 15, t: 10, i: 53, }, D { l: 17, t: 10, i: 63, }, D { l: 19, t: 10, i: 46, }, D { l: 19, t: 10, i: 98, }, D { l: 19, t: 10, i: 106, }, D { l: 148, t: 10, i: 85, }, D { l: 132, t: 11, i: 476, }, D { l: 4, t: 0, i: 327 }, D { l: 5, t: 0, i: 478 }, D { l: 7, t: 0, i: 1332, }, D { l: 136, t: 0, i: 753, }, D { l: 5, t: 0, i: 1020, }, D { l: 133, t: 0, i: 1022, }, D { l: 135, t: 11, i: 1807, }, D { l: 4, t: 0, i: 103 }, D { l: 133, t: 0, i: 401, }, D { l: 4, t: 0, i: 499 }, D { l: 135, t: 0, i: 1421, }, D { l: 10, t: 0, i: 207, }, D { l: 13, t: 0, i: 164, }, D { l: 147, t: 10, i: 126, }, D { l: 9, t: 11, i: 20 }, D { l: 10, t: 11, i: 324, }, D { l: 139, t: 11, i: 488, }, D { l: 132, t: 0, i: 96, }, D { l: 9, t: 11, i: 280, }, D { l: 138, t: 11, i: 134, }, D { l: 135, t: 0, i: 968, }, D { l: 133, t: 10, i: 187, }, D { l: 135, t: 10, i: 1286, }, D { l: 5, t: 11, i: 112, }, D { l: 6, t: 11, i: 103, }, D { l: 134, t: 11, i: 150, }, D { l: 8, t: 0, i: 914 }, D { l: 10, t: 0, i: 3 }, D { l: 4, t: 10, i: 215, }, D { l: 9, t: 10, i: 38 }, D { l: 11, t: 10, i: 23, }, D { l: 11, t: 10, i: 127, }, D { l: 139, t: 10, i: 796, }, D { l: 135, t: 0, i: 399, }, D { l: 6, t: 0, i: 563 }, D { l: 137, t: 0, i: 224, }, D { l: 6, t: 0, i: 704 }, D { l: 134, t: 0, i: 1214, }, D { l: 4, t: 11, i: 708, }, D { l: 8, t: 11, i: 15 }, D { l: 9, t: 11, i: 50 }, D { l: 9, t: 11, i: 386, }, D { l: 11, t: 11, i: 18, }, D { l: 11, t: 11, i: 529, }, D { l: 140, t: 11, i: 228, }, D { l: 4, t: 11, i: 563, }, D { l: 7, t: 11, i: 109, }, D { l: 7, t: 11, i: 592, }, D { l: 7, t: 11, i: 637, }, D { l: 7, t: 11, i: 770, }, D { l: 7, t: 11, i: 1701, }, D { l: 8, t: 11, i: 436, }, D { l: 8, t: 11, i: 463, }, D { l: 9, t: 11, i: 60 }, D { l: 9, t: 11, i: 335, }, D { l: 9, t: 11, i: 904, }, D { l: 10, t: 11, i: 73, }, D { l: 11, t: 11, i: 434, }, D { l: 12, t: 11, i: 585, }, D { l: 13, t: 11, i: 331, }, D { l: 18, t: 11, i: 110, }, D { l: 148, t: 11, i: 60, }, D { l: 134, t: 0, i: 1559, }, D { l: 132, t: 11, i: 502, }, D { l: 6, t: 11, i: 347, }, D { l: 138, t: 11, i: 161, }, D { l: 4, t: 11, i: 33 }, D { l: 5, t: 11, i: 102, }, D { l: 5, t: 11, i: 500, }, D { l: 6, t: 11, i: 284, }, D { l: 7, t: 11, i: 1079, }, D { l: 7, t: 11, i: 1423, }, D { l: 7, t: 11, i: 1702, }, D { l: 8, t: 11, i: 470, }, D { l: 9, t: 11, i: 554, }, D { l: 9, t: 11, i: 723, }, D { l: 139, t: 11, i: 333, }, D { l: 7, t: 11, i: 246, }, D { l: 135, t: 11, i: 840, }, D { l: 6, t: 11, i: 10 }, D { l: 8, t: 11, i: 571, }, D { l: 9, t: 11, i: 739, }, D { l: 143, t: 11, i: 91, }, D { l: 8, t: 0, i: 861 }, D { l: 10, t: 0, i: 905, }, D { l: 12, t: 0, i: 730, }, D { l: 12, t: 0, i: 789, }, D { l: 133, t: 11, i: 626, }, D { l: 134, t: 0, i: 946, }, D { l: 5, t: 0, i: 746 }, D { l: 12, t: 0, i: 333, }, D { l: 14, t: 0, i: 332, }, D { l: 12, t: 11, i: 333, }, D { l: 142, t: 11, i: 332, }, D { l: 5, t: 11, i: 18 }, D { l: 6, t: 11, i: 526, }, D { l: 13, t: 11, i: 24, }, D { l: 13, t: 11, i: 110, }, D { l: 19, t: 11, i: 5 }, D { l: 147, t: 11, i: 44, }, D { l: 4, t: 0, i: 910 }, D { l: 5, t: 0, i: 832 }, D { l: 135, t: 10, i: 2002, }, D { l: 10, t: 11, i: 768, }, D { l: 139, t: 11, i: 787, }, D { l: 4, t: 11, i: 309, }, D { l: 5, t: 11, i: 462, }, D { l: 7, t: 11, i: 970, }, D { l: 135, t: 11, i: 1097, }, D { l: 4, t: 10, i: 28 }, D { l: 5, t: 10, i: 440, }, D { l: 7, t: 10, i: 248, }, D { l: 11, t: 10, i: 833, }, D { l: 140, t: 10, i: 344, }, D { l: 134, t: 10, i: 1654, }, D { l: 6, t: 0, i: 632 }, D { l: 6, t: 0, i: 652 }, D { l: 6, t: 0, i: 1272, }, D { l: 6, t: 0, i: 1384, }, D { l: 134, t: 0, i: 1560, }, D { l: 134, t: 11, i: 1704, }, D { l: 6, t: 0, i: 1393, }, D { l: 133, t: 10, i: 853, }, D { l: 6, t: 10, i: 249, }, D { l: 7, t: 10, i: 1234, }, D { l: 139, t: 10, i: 573, }, D { l: 5, t: 11, i: 86 }, D { l: 7, t: 11, i: 743, }, D { l: 9, t: 11, i: 85 }, D { l: 10, t: 11, i: 281, }, D { l: 10, t: 11, i: 432, }, D { l: 11, t: 11, i: 490, }, D { l: 12, t: 11, i: 251, }, D { l: 13, t: 11, i: 118, }, D { l: 14, t: 11, i: 378, }, D { l: 146, t: 11, i: 143, }, D { l: 5, t: 11, i: 524, }, D { l: 133, t: 11, i: 744, }, D { l: 134, t: 0, i: 1514, }, D { l: 10, t: 0, i: 201, }, D { l: 142, t: 0, i: 319, }, D { l: 7, t: 0, i: 717 }, D { l: 10, t: 0, i: 510, }, D { l: 7, t: 10, i: 392, }, D { l: 8, t: 10, i: 20 }, D { l: 8, t: 10, i: 172, }, D { l: 8, t: 10, i: 690, }, D { l: 9, t: 10, i: 383, }, D { l: 9, t: 10, i: 845, }, D { l: 11, t: 10, i: 293, }, D { l: 11, t: 10, i: 832, }, D { l: 11, t: 10, i: 920, }, D { l: 11, t: 10, i: 984, }, D { l: 141, t: 10, i: 221, }, D { l: 134, t: 0, i: 1381, }, D { l: 5, t: 10, i: 858, }, D { l: 133, t: 10, i: 992, }, D { l: 8, t: 0, i: 528 }, D { l: 137, t: 0, i: 348, }, D { l: 10, t: 11, i: 107, }, D { l: 140, t: 11, i: 436, }, D { l: 4, t: 0, i: 20 }, D { l: 133, t: 0, i: 616, }, D { l: 134, t: 0, i: 1251, }, D { l: 132, t: 11, i: 927, }, D { l: 10, t: 11, i: 123, }, D { l: 12, t: 11, i: 670, }, D { l: 13, t: 11, i: 371, }, D { l: 14, t: 11, i: 142, }, D { l: 146, t: 11, i: 94, }, D { l: 134, t: 0, i: 1163, }, D { l: 7, t: 11, i: 1149, }, D { l: 137, t: 11, i: 156, }, D { l: 134, t: 0, i: 307, }, D { l: 133, t: 11, i: 778, }, D { l: 7, t: 0, i: 1091, }, D { l: 135, t: 0, i: 1765, }, D { l: 5, t: 11, i: 502, }, D { l: 6, t: 10, i: 268, }, D { l: 137, t: 10, i: 62, }, D { l: 8, t: 11, i: 196, }, D { l: 10, t: 11, i: 283, }, D { l: 139, t: 11, i: 406, }, D { l: 4, t: 0, i: 26 }, D { l: 5, t: 0, i: 429 }, D { l: 6, t: 0, i: 245 }, D { l: 7, t: 0, i: 704 }, D { l: 7, t: 0, i: 1379, }, D { l: 135, t: 0, i: 1474, }, D { l: 133, t: 11, i: 855, }, D { l: 132, t: 0, i: 881, }, D { l: 4, t: 0, i: 621 }, D { l: 135, t: 11, i: 1596, }, D { l: 7, t: 11, i: 1400, }, D { l: 9, t: 11, i: 446, }, D { l: 138, t: 11, i: 45, }, D { l: 6, t: 0, i: 736 }, D { l: 138, t: 10, i: 106, }, D { l: 133, t: 0, i: 542, }, D { l: 134, t: 0, i: 348, }, D { l: 133, t: 0, i: 868, }, D { l: 136, t: 0, i: 433, }, D { l: 135, t: 0, i: 1495, }, D { l: 138, t: 0, i: 771, }, D { l: 6, t: 10, i: 613, }, D { l: 136, t: 10, i: 223, }, D { l: 138, t: 0, i: 215, }, D { l: 141, t: 0, i: 124, }, D { l: 136, t: 11, i: 391, }, D { l: 135, t: 11, i: 172, }, D { l: 132, t: 10, i: 670, }, D { l: 140, t: 0, i: 55, }, D { l: 9, t: 10, i: 40 }, D { l: 139, t: 10, i: 136, }, D { l: 7, t: 0, i: 62 }, D { l: 147, t: 0, i: 112, }, D { l: 132, t: 0, i: 856, }, D { l: 132, t: 11, i: 568, }, D { l: 12, t: 0, i: 270, }, D { l: 139, t: 10, i: 259, }, D { l: 8, t: 0, i: 572 }, D { l: 137, t: 0, i: 698, }, D { l: 4, t: 11, i: 732, }, D { l: 9, t: 10, i: 310, }, D { l: 137, t: 10, i: 682, }, D { l: 142, t: 10, i: 296, }, D { l: 134, t: 0, i: 939, }, D { l: 136, t: 11, i: 733, }, D { l: 135, t: 11, i: 1435, }, D { l: 7, t: 10, i: 1401, }, D { l: 135, t: 10, i: 1476, }, D { l: 6, t: 0, i: 352 }, D { l: 4, t: 10, i: 296, }, D { l: 7, t: 10, i: 401, }, D { l: 7, t: 10, i: 1410, }, D { l: 7, t: 10, i: 1594, }, D { l: 7, t: 10, i: 1674, }, D { l: 8, t: 10, i: 63 }, D { l: 8, t: 10, i: 660, }, D { l: 137, t: 10, i: 74, }, D { l: 4, t: 11, i: 428, }, D { l: 133, t: 11, i: 668, }, D { l: 4, t: 10, i: 139, }, D { l: 4, t: 10, i: 388, }, D { l: 140, t: 10, i: 188, }, D { l: 7, t: 11, i: 2015, }, D { l: 140, t: 11, i: 665, }, D { l: 132, t: 0, i: 647, }, D { l: 146, t: 0, i: 10, }, D { l: 138, t: 0, i: 220, }, D { l: 142, t: 0, i: 464, }, D { l: 132, t: 0, i: 109, }, D { l: 134, t: 0, i: 1746, }, D { l: 6, t: 0, i: 515 }, D { l: 4, t: 10, i: 747, }, D { l: 6, t: 11, i: 1623, }, D { l: 6, t: 11, i: 1681, }, D { l: 7, t: 10, i: 649, }, D { l: 7, t: 10, i: 1479, }, D { l: 135, t: 10, i: 1583, }, D { l: 133, t: 10, i: 232, }, D { l: 135, t: 0, i: 566, }, D { l: 137, t: 10, i: 887, }, D { l: 4, t: 0, i: 40 }, D { l: 10, t: 0, i: 67 }, D { l: 11, t: 0, i: 117, }, D { l: 11, t: 0, i: 768, }, D { l: 139, t: 0, i: 935, }, D { l: 132, t: 0, i: 801, }, D { l: 7, t: 0, i: 992 }, D { l: 8, t: 0, i: 301 }, D { l: 9, t: 0, i: 722 }, D { l: 12, t: 0, i: 63 }, D { l: 13, t: 0, i: 29 }, D { l: 14, t: 0, i: 161, }, D { l: 143, t: 0, i: 18, }, D { l: 139, t: 0, i: 923, }, D { l: 6, t: 11, i: 1748, }, D { l: 8, t: 11, i: 715, }, D { l: 9, t: 11, i: 802, }, D { l: 10, t: 11, i: 46, }, D { l: 10, t: 11, i: 819, }, D { l: 13, t: 11, i: 308, }, D { l: 14, t: 11, i: 351, }, D { l: 14, t: 11, i: 363, }, D { l: 146, t: 11, i: 67, }, D { l: 137, t: 11, i: 745, }, D { l: 7, t: 0, i: 1145, }, D { l: 4, t: 10, i: 14 }, D { l: 7, t: 10, i: 1801, }, D { l: 10, t: 10, i: 748, }, D { l: 141, t: 10, i: 458, }, D { l: 4, t: 11, i: 63 }, D { l: 5, t: 11, i: 347, }, D { l: 134, t: 11, i: 474, }, D { l: 135, t: 0, i: 568, }, D { l: 4, t: 10, i: 425, }, D { l: 7, t: 11, i: 577, }, D { l: 7, t: 11, i: 1432, }, D { l: 9, t: 11, i: 475, }, D { l: 9, t: 11, i: 505, }, D { l: 9, t: 11, i: 526, }, D { l: 9, t: 11, i: 609, }, D { l: 9, t: 11, i: 689, }, D { l: 9, t: 11, i: 726, }, D { l: 9, t: 11, i: 735, }, D { l: 9, t: 11, i: 738, }, D { l: 10, t: 11, i: 556, }, D { l: 10, t: 11, i: 674, }, D { l: 10, t: 11, i: 684, }, D { l: 11, t: 11, i: 89, }, D { l: 11, t: 11, i: 202, }, D { l: 11, t: 11, i: 272, }, D { l: 11, t: 11, i: 380, }, D { l: 11, t: 11, i: 415, }, D { l: 11, t: 11, i: 505, }, D { l: 11, t: 11, i: 537, }, D { l: 11, t: 11, i: 550, }, D { l: 11, t: 11, i: 562, }, D { l: 11, t: 11, i: 640, }, D { l: 11, t: 11, i: 667, }, D { l: 11, t: 11, i: 688, }, D { l: 11, t: 11, i: 847, }, D { l: 11, t: 11, i: 927, }, D { l: 11, t: 11, i: 930, }, D { l: 11, t: 11, i: 940, }, D { l: 12, t: 11, i: 144, }, D { l: 12, t: 11, i: 325, }, D { l: 12, t: 11, i: 329, }, D { l: 12, t: 11, i: 389, }, D { l: 12, t: 11, i: 403, }, D { l: 12, t: 11, i: 451, }, D { l: 12, t: 11, i: 515, }, D { l: 12, t: 11, i: 604, }, D { l: 12, t: 11, i: 616, }, D { l: 12, t: 11, i: 626, }, D { l: 13, t: 11, i: 66, }, D { l: 13, t: 11, i: 131, }, D { l: 13, t: 11, i: 167, }, D { l: 13, t: 11, i: 236, }, D { l: 13, t: 11, i: 368, }, D { l: 13, t: 11, i: 411, }, D { l: 13, t: 11, i: 434, }, D { l: 13, t: 11, i: 453, }, D { l: 13, t: 11, i: 461, }, D { l: 13, t: 11, i: 474, }, D { l: 14, t: 11, i: 59, }, D { l: 14, t: 11, i: 60, }, D { l: 14, t: 11, i: 139, }, D { l: 14, t: 11, i: 152, }, D { l: 14, t: 11, i: 276, }, D { l: 14, t: 11, i: 353, }, D { l: 14, t: 11, i: 402, }, D { l: 15, t: 11, i: 28, }, D { l: 15, t: 11, i: 81, }, D { l: 15, t: 11, i: 123, }, D { l: 15, t: 11, i: 152, }, D { l: 18, t: 11, i: 136, }, D { l: 148, t: 11, i: 88, }, D { l: 137, t: 0, i: 247, }, D { l: 135, t: 11, i: 1622, }, D { l: 9, t: 11, i: 544, }, D { l: 11, t: 11, i: 413, }, D { l: 144, t: 11, i: 25, }, D { l: 4, t: 0, i: 645 }, D { l: 7, t: 0, i: 825 }, D { l: 6, t: 10, i: 1768, }, D { l: 135, t: 11, i: 89, }, D { l: 140, t: 0, i: 328, }, D { l: 5, t: 10, i: 943, }, D { l: 134, t: 10, i: 1779, }, D { l: 134, t: 0, i: 1363, }, D { l: 5, t: 10, i: 245, }, D { l: 6, t: 10, i: 576, }, D { l: 7, t: 10, i: 582, }, D { l: 136, t: 10, i: 225, }, D { l: 134, t: 0, i: 1280, }, D { l: 5, t: 11, i: 824, }, D { l: 133, t: 11, i: 941, }, D { l: 7, t: 11, i: 440, }, D { l: 8, t: 11, i: 230, }, D { l: 139, t: 11, i: 106, }, D { l: 5, t: 0, i: 28 }, D { l: 6, t: 0, i: 204 }, D { l: 10, t: 0, i: 320, }, D { l: 10, t: 0, i: 583, }, D { l: 13, t: 0, i: 502, }, D { l: 14, t: 0, i: 72 }, D { l: 14, t: 0, i: 274, }, D { l: 14, t: 0, i: 312, }, D { l: 14, t: 0, i: 344, }, D { l: 15, t: 0, i: 159, }, D { l: 16, t: 0, i: 62 }, D { l: 16, t: 0, i: 69 }, D { l: 17, t: 0, i: 30 }, D { l: 18, t: 0, i: 42 }, D { l: 18, t: 0, i: 53 }, D { l: 18, t: 0, i: 84 }, D { l: 18, t: 0, i: 140, }, D { l: 19, t: 0, i: 68 }, D { l: 19, t: 0, i: 85 }, D { l: 20, t: 0, i: 5 }, D { l: 20, t: 0, i: 45 }, D { l: 20, t: 0, i: 101, }, D { l: 22, t: 0, i: 7 }, D { l: 150, t: 0, i: 20, }, D { l: 4, t: 0, i: 558 }, D { l: 6, t: 0, i: 390 }, D { l: 7, t: 0, i: 162 }, D { l: 7, t: 0, i: 689 }, D { l: 9, t: 0, i: 360 }, D { l: 138, t: 0, i: 653, }, D { l: 134, t: 0, i: 764, }, D { l: 6, t: 0, i: 862 }, D { l: 137, t: 0, i: 833, }, D { l: 5, t: 0, i: 856 }, D { l: 6, t: 0, i: 1672, }, D { l: 6, t: 0, i: 1757, }, D { l: 134, t: 0, i: 1781, }, D { l: 5, t: 0, i: 92 }, D { l: 10, t: 0, i: 736, }, D { l: 140, t: 0, i: 102, }, D { l: 6, t: 0, i: 1927, }, D { l: 6, t: 0, i: 1944, }, D { l: 8, t: 0, i: 924 }, D { l: 8, t: 0, i: 948 }, D { l: 10, t: 0, i: 967, }, D { l: 138, t: 0, i: 978, }, D { l: 134, t: 0, i: 1479, }, D { l: 5, t: 0, i: 590 }, D { l: 8, t: 0, i: 360 }, D { l: 9, t: 0, i: 213 }, D { l: 138, t: 0, i: 63, }, D { l: 134, t: 0, i: 1521, }, D { l: 6, t: 0, i: 709 }, D { l: 134, t: 0, i: 891, }, D { l: 132, t: 10, i: 443, }, D { l: 13, t: 0, i: 477, }, D { l: 14, t: 0, i: 120, }, D { l: 148, t: 0, i: 61, }, D { l: 4, t: 11, i: 914, }, D { l: 5, t: 11, i: 800, }, D { l: 133, t: 11, i: 852, }, D { l: 10, t: 11, i: 54, }, D { l: 141, t: 11, i: 115, }, D { l: 4, t: 11, i: 918, }, D { l: 133, t: 11, i: 876, }, D { l: 139, t: 11, i: 152, }, D { l: 4, t: 11, i: 92 }, D { l: 133, t: 11, i: 274, }, D { l: 135, t: 11, i: 1901, }, D { l: 9, t: 11, i: 800, }, D { l: 10, t: 11, i: 693, }, D { l: 11, t: 11, i: 482, }, D { l: 11, t: 11, i: 734, }, D { l: 139, t: 11, i: 789, }, D { l: 9, t: 0, i: 483 }, D { l: 132, t: 10, i: 298, }, D { l: 6, t: 0, i: 1213, }, D { l: 141, t: 11, i: 498, }, D { l: 135, t: 11, i: 1451, }, D { l: 133, t: 11, i: 743, }, D { l: 4, t: 0, i: 1022, }, D { l: 10, t: 0, i: 1000, }, D { l: 12, t: 0, i: 957, }, D { l: 12, t: 0, i: 980, }, D { l: 12, t: 0, i: 1013, }, D { l: 14, t: 0, i: 481, }, D { l: 144, t: 0, i: 116, }, D { l: 8, t: 0, i: 503 }, D { l: 17, t: 0, i: 29 }, D { l: 4, t: 11, i: 49 }, D { l: 7, t: 11, i: 280, }, D { l: 135, t: 11, i: 1633, }, D { l: 135, t: 0, i: 1712, }, D { l: 134, t: 0, i: 466, }, D { l: 136, t: 11, i: 47, }, D { l: 5, t: 10, i: 164, }, D { l: 7, t: 10, i: 121, }, D { l: 142, t: 10, i: 189, }, D { l: 7, t: 10, i: 812, }, D { l: 7, t: 10, i: 1261, }, D { l: 7, t: 10, i: 1360, }, D { l: 9, t: 10, i: 632, }, D { l: 140, t: 10, i: 352, }, D { l: 139, t: 10, i: 556, }, D { l: 132, t: 0, i: 731, }, D { l: 5, t: 11, i: 272, }, D { l: 5, t: 11, i: 908, }, D { l: 5, t: 11, i: 942, }, D { l: 7, t: 11, i: 1008, }, D { l: 7, t: 11, i: 1560, }, D { l: 8, t: 11, i: 197, }, D { l: 9, t: 11, i: 47 }, D { l: 11, t: 11, i: 538, }, D { l: 139, t: 11, i: 742, }, D { l: 4, t: 10, i: 172, }, D { l: 9, t: 10, i: 611, }, D { l: 10, t: 10, i: 436, }, D { l: 12, t: 10, i: 673, }, D { l: 141, t: 10, i: 255, }, D { l: 133, t: 10, i: 844, }, D { l: 10, t: 0, i: 484, }, D { l: 11, t: 0, i: 754, }, D { l: 12, t: 0, i: 457, }, D { l: 14, t: 0, i: 171, }, D { l: 14, t: 0, i: 389, }, D { l: 146, t: 0, i: 153, }, D { l: 9, t: 10, i: 263, }, D { l: 10, t: 10, i: 147, }, D { l: 138, t: 10, i: 492, }, D { l: 137, t: 11, i: 891, }, D { l: 138, t: 0, i: 241, }, D { l: 133, t: 10, i: 537, }, D { l: 6, t: 0, i: 2005, }, D { l: 136, t: 0, i: 964, }, D { l: 137, t: 10, i: 842, }, D { l: 151, t: 11, i: 8, }, D { l: 4, t: 11, i: 407, }, D { l: 132, t: 11, i: 560, }, D { l: 135, t: 11, i: 1884, }, D { l: 6, t: 0, i: 1100, }, D { l: 134, t: 0, i: 1242, }, D { l: 135, t: 0, i: 954, }, D { l: 5, t: 10, i: 230, }, D { l: 5, t: 10, i: 392, }, D { l: 6, t: 10, i: 420, }, D { l: 9, t: 10, i: 568, }, D { l: 140, t: 10, i: 612, }, D { l: 4, t: 11, i: 475, }, D { l: 11, t: 11, i: 35, }, D { l: 11, t: 11, i: 90, }, D { l: 13, t: 11, i: 7 }, D { l: 13, t: 11, i: 71, }, D { l: 13, t: 11, i: 177, }, D { l: 142, t: 11, i: 422, }, D { l: 136, t: 11, i: 332, }, D { l: 135, t: 0, i: 1958, }, D { l: 6, t: 0, i: 549 }, D { l: 8, t: 0, i: 34 }, D { l: 8, t: 0, i: 283 }, D { l: 9, t: 0, i: 165 }, D { l: 138, t: 0, i: 475, }, D { l: 10, t: 0, i: 952, }, D { l: 12, t: 0, i: 966, }, D { l: 140, t: 0, i: 994, }, D { l: 5, t: 0, i: 652 }, D { l: 5, t: 0, i: 701 }, D { l: 135, t: 0, i: 449, }, D { l: 4, t: 0, i: 655 }, D { l: 7, t: 0, i: 850 }, D { l: 17, t: 0, i: 75 }, D { l: 146, t: 0, i: 137, }, D { l: 4, t: 0, i: 146 }, D { l: 7, t: 0, i: 1618, }, D { l: 8, t: 0, i: 670 }, D { l: 5, t: 10, i: 41 }, D { l: 7, t: 10, i: 1459, }, D { l: 7, t: 10, i: 1469, }, D { l: 7, t: 10, i: 1859, }, D { l: 9, t: 10, i: 549, }, D { l: 139, t: 10, i: 905, }, D { l: 133, t: 10, i: 696, }, D { l: 6, t: 0, i: 159 }, D { l: 6, t: 0, i: 364 }, D { l: 7, t: 0, i: 516 }, D { l: 137, t: 0, i: 518, }, D { l: 135, t: 0, i: 1439, }, D { l: 6, t: 11, i: 222, }, D { l: 7, t: 11, i: 636, }, D { l: 7, t: 11, i: 1620, }, D { l: 8, t: 11, i: 409, }, D { l: 9, t: 11, i: 693, }, D { l: 139, t: 11, i: 77, }, D { l: 13, t: 0, i: 151, }, D { l: 141, t: 11, i: 45, }, D { l: 6, t: 0, i: 1027, }, D { l: 4, t: 11, i: 336, }, D { l: 132, t: 10, i: 771, }, D { l: 139, t: 11, i: 392, }, D { l: 10, t: 11, i: 121, }, D { l: 11, t: 11, i: 175, }, D { l: 149, t: 11, i: 16, }, D { l: 8, t: 0, i: 950 }, D { l: 138, t: 0, i: 983, }, D { l: 133, t: 10, i: 921, }, D { l: 135, t: 0, i: 993, }, D { l: 6, t: 10, i: 180, }, D { l: 7, t: 10, i: 1137, }, D { l: 8, t: 10, i: 751, }, D { l: 139, t: 10, i: 805, }, D { l: 7, t: 0, i: 501 }, D { l: 9, t: 0, i: 111 }, D { l: 10, t: 0, i: 141, }, D { l: 11, t: 0, i: 332, }, D { l: 13, t: 0, i: 43 }, D { l: 13, t: 0, i: 429, }, D { l: 14, t: 0, i: 130, }, D { l: 14, t: 0, i: 415, }, D { l: 145, t: 0, i: 102, }, D { l: 4, t: 10, i: 183, }, D { l: 5, t: 11, i: 882, }, D { l: 7, t: 10, i: 271, }, D { l: 11, t: 10, i: 824, }, D { l: 11, t: 10, i: 952, }, D { l: 13, t: 10, i: 278, }, D { l: 13, t: 10, i: 339, }, D { l: 13, t: 10, i: 482, }, D { l: 14, t: 10, i: 424, }, D { l: 148, t: 10, i: 99, }, D { l: 4, t: 10, i: 19 }, D { l: 5, t: 10, i: 477, }, D { l: 5, t: 10, i: 596, }, D { l: 6, t: 10, i: 505, }, D { l: 7, t: 10, i: 1221, }, D { l: 11, t: 10, i: 907, }, D { l: 12, t: 10, i: 209, }, D { l: 141, t: 10, i: 214, }, D { l: 135, t: 10, i: 1215, }, D { l: 133, t: 0, i: 452, }, D { l: 132, t: 11, i: 426, }, D { l: 5, t: 0, i: 149 }, D { l: 136, t: 0, i: 233, }, D { l: 133, t: 0, i: 935, }, D { l: 6, t: 11, i: 58 }, D { l: 7, t: 11, i: 654, }, D { l: 7, t: 11, i: 745, }, D { l: 7, t: 11, i: 1969, }, D { l: 8, t: 11, i: 240, }, D { l: 8, t: 11, i: 675, }, D { l: 9, t: 11, i: 479, }, D { l: 9, t: 11, i: 731, }, D { l: 10, t: 11, i: 330, }, D { l: 10, t: 11, i: 593, }, D { l: 10, t: 11, i: 817, }, D { l: 11, t: 11, i: 32, }, D { l: 11, t: 11, i: 133, }, D { l: 11, t: 11, i: 221, }, D { l: 145, t: 11, i: 68, }, D { l: 12, t: 0, i: 582, }, D { l: 18, t: 0, i: 131, }, D { l: 7, t: 11, i: 102, }, D { l: 137, t: 11, i: 538, }, D { l: 136, t: 0, i: 801, }, D { l: 134, t: 10, i: 1645, }, D { l: 132, t: 0, i: 70, }, D { l: 6, t: 10, i: 92 }, D { l: 6, t: 10, i: 188, }, D { l: 7, t: 10, i: 1269, }, D { l: 7, t: 10, i: 1524, }, D { l: 7, t: 10, i: 1876, }, D { l: 10, t: 10, i: 228, }, D { l: 139, t: 10, i: 1020, }, D { l: 4, t: 10, i: 459, }, D { l: 133, t: 10, i: 966, }, D { l: 138, t: 0, i: 369, }, D { l: 16, t: 0, i: 36 }, D { l: 140, t: 10, i: 330, }, D { l: 141, t: 11, i: 366, }, D { l: 7, t: 0, i: 721 }, D { l: 10, t: 0, i: 236, }, D { l: 12, t: 0, i: 204, }, D { l: 6, t: 10, i: 18 }, D { l: 7, t: 10, i: 932, }, D { l: 8, t: 10, i: 757, }, D { l: 9, t: 10, i: 54 }, D { l: 9, t: 10, i: 65 }, D { l: 9, t: 10, i: 844, }, D { l: 10, t: 10, i: 113, }, D { l: 10, t: 10, i: 315, }, D { l: 10, t: 10, i: 798, }, D { l: 11, t: 10, i: 153, }, D { l: 12, t: 10, i: 151, }, D { l: 12, t: 10, i: 392, }, D { l: 12, t: 10, i: 666, }, D { l: 142, t: 10, i: 248, }, D { l: 7, t: 0, i: 241 }, D { l: 10, t: 0, i: 430, }, D { l: 8, t: 10, i: 548, }, D { l: 9, t: 10, i: 532, }, D { l: 10, t: 10, i: 117, }, D { l: 11, t: 10, i: 351, }, D { l: 11, t: 10, i: 375, }, D { l: 143, t: 10, i: 23, }, D { l: 134, t: 10, i: 1742, }, D { l: 133, t: 10, i: 965, }, D { l: 133, t: 11, i: 566, }, D { l: 6, t: 11, i: 48 }, D { l: 135, t: 11, i: 63, }, D { l: 134, t: 10, i: 182, }, D { l: 10, t: 10, i: 65, }, D { l: 10, t: 10, i: 488, }, D { l: 138, t: 10, i: 497, }, D { l: 6, t: 11, i: 114, }, D { l: 7, t: 11, i: 1224, }, D { l: 7, t: 11, i: 1556, }, D { l: 136, t: 11, i: 3, }, D { l: 134, t: 0, i: 1817, }, D { l: 8, t: 11, i: 576, }, D { l: 137, t: 11, i: 267, }, D { l: 6, t: 0, i: 1078, }, D { l: 144, t: 0, i: 16, }, D { l: 9, t: 10, i: 588, }, D { l: 138, t: 10, i: 260, }, D { l: 138, t: 0, i: 1021, }, D { l: 5, t: 0, i: 406 }, D { l: 134, t: 0, i: 2022, }, D { l: 133, t: 11, i: 933, }, D { l: 6, t: 0, i: 69 }, D { l: 135, t: 0, i: 117, }, D { l: 7, t: 0, i: 1830, }, D { l: 136, t: 11, i: 427, }, D { l: 4, t: 0, i: 432 }, D { l: 135, t: 0, i: 824, }, D { l: 134, t: 10, i: 1786, }, D { l: 133, t: 0, i: 826, }, D { l: 139, t: 11, i: 67, }, D { l: 133, t: 11, i: 759, }, D { l: 135, t: 10, i: 308, }, D { l: 137, t: 0, i: 816, }, D { l: 133, t: 0, i: 1000, }, D { l: 4, t: 0, i: 297 }, D { l: 6, t: 0, i: 529 }, D { l: 7, t: 0, i: 152 }, D { l: 7, t: 0, i: 713 }, D { l: 7, t: 0, i: 1845, }, D { l: 8, t: 0, i: 710 }, D { l: 8, t: 0, i: 717 }, D { l: 12, t: 0, i: 639, }, D { l: 140, t: 0, i: 685, }, D { l: 7, t: 0, i: 423 }, D { l: 136, t: 10, i: 588, }, D { l: 136, t: 10, i: 287, }, D { l: 136, t: 0, i: 510, }, D { l: 134, t: 0, i: 1048, }, D { l: 6, t: 0, i: 618 }, D { l: 7, t: 11, i: 56 }, D { l: 7, t: 11, i: 1989, }, D { l: 8, t: 11, i: 337, }, D { l: 8, t: 11, i: 738, }, D { l: 9, t: 11, i: 600, }, D { l: 10, t: 11, i: 483, }, D { l: 12, t: 11, i: 37, }, D { l: 13, t: 11, i: 447, }, D { l: 142, t: 11, i: 92, }, D { l: 4, t: 0, i: 520 }, D { l: 135, t: 0, i: 575, }, D { l: 8, t: 0, i: 990 }, D { l: 138, t: 0, i: 977, }, D { l: 135, t: 11, i: 774, }, D { l: 9, t: 11, i: 347, }, D { l: 11, t: 11, i: 24, }, D { l: 140, t: 11, i: 170, }, D { l: 136, t: 11, i: 379, }, D { l: 140, t: 10, i: 290, }, D { l: 132, t: 11, i: 328, }, D { l: 4, t: 0, i: 321 }, D { l: 134, t: 0, i: 569, }, D { l: 4, t: 11, i: 101, }, D { l: 135, t: 11, i: 1171, }, D { l: 7, t: 0, i: 723 }, D { l: 7, t: 0, i: 1135, }, D { l: 5, t: 11, i: 833, }, D { l: 136, t: 11, i: 744, }, D { l: 7, t: 10, i: 719, }, D { l: 8, t: 10, i: 809, }, D { l: 136, t: 10, i: 834, }, D { l: 8, t: 0, i: 921 }, D { l: 136, t: 10, i: 796, }, D { l: 5, t: 10, i: 210, }, D { l: 6, t: 10, i: 213, }, D { l: 7, t: 10, i: 60 }, D { l: 10, t: 10, i: 364, }, D { l: 139, t: 10, i: 135, }, D { l: 5, t: 0, i: 397 }, D { l: 6, t: 0, i: 154 }, D { l: 7, t: 0, i: 676 }, D { l: 8, t: 0, i: 443 }, D { l: 8, t: 0, i: 609 }, D { l: 9, t: 0, i: 24 }, D { l: 9, t: 0, i: 325 }, D { l: 10, t: 0, i: 35 }, D { l: 11, t: 0, i: 535, }, D { l: 11, t: 0, i: 672, }, D { l: 11, t: 0, i: 1018, }, D { l: 12, t: 0, i: 637, }, D { l: 16, t: 0, i: 30 }, D { l: 5, t: 10, i: 607, }, D { l: 8, t: 10, i: 326, }, D { l: 136, t: 10, i: 490, }, D { l: 4, t: 10, i: 701, }, D { l: 5, t: 10, i: 472, }, D { l: 6, t: 11, i: 9 }, D { l: 6, t: 11, i: 397, }, D { l: 7, t: 11, i: 53 }, D { l: 7, t: 11, i: 1742, }, D { l: 9, t: 10, i: 758, }, D { l: 10, t: 11, i: 632, }, D { l: 11, t: 11, i: 828, }, D { l: 140, t: 11, i: 146, }, D { l: 135, t: 10, i: 380, }, D { l: 135, t: 10, i: 1947, }, D { l: 148, t: 11, i: 109, }, D { l: 10, t: 10, i: 278, }, D { l: 138, t: 11, i: 278, }, D { l: 134, t: 0, i: 856, }, D { l: 7, t: 0, i: 139 }, D { l: 4, t: 10, i: 386, }, D { l: 8, t: 10, i: 405, }, D { l: 8, t: 10, i: 728, }, D { l: 9, t: 10, i: 497, }, D { l: 11, t: 10, i: 110, }, D { l: 11, t: 10, i: 360, }, D { l: 15, t: 10, i: 37, }, D { l: 144, t: 10, i: 84, }, D { l: 141, t: 0, i: 282, }, D { l: 133, t: 0, i: 981, }, D { l: 5, t: 0, i: 288 }, D { l: 7, t: 10, i: 1452, }, D { l: 7, t: 10, i: 1480, }, D { l: 8, t: 10, i: 634, }, D { l: 140, t: 10, i: 472, }, D { l: 7, t: 0, i: 1890, }, D { l: 8, t: 11, i: 367, }, D { l: 10, t: 11, i: 760, }, D { l: 14, t: 11, i: 79, }, D { l: 20, t: 11, i: 17, }, D { l: 152, t: 11, i: 0, }, D { l: 4, t: 10, i: 524, }, D { l: 136, t: 10, i: 810, }, D { l: 4, t: 0, i: 56 }, D { l: 7, t: 0, i: 1791, }, D { l: 8, t: 0, i: 607 }, D { l: 8, t: 0, i: 651 }, D { l: 11, t: 0, i: 465, }, D { l: 11, t: 0, i: 835, }, D { l: 12, t: 0, i: 337, }, D { l: 141, t: 0, i: 480, }, D { l: 10, t: 10, i: 238, }, D { l: 141, t: 10, i: 33, }, D { l: 11, t: 11, i: 417, }, D { l: 12, t: 11, i: 223, }, D { l: 140, t: 11, i: 265, }, D { l: 9, t: 0, i: 158 }, D { l: 10, t: 0, i: 411, }, D { l: 140, t: 0, i: 261, }, D { l: 133, t: 10, i: 532, }, D { l: 133, t: 10, i: 997, }, D { l: 12, t: 11, i: 186, }, D { l: 12, t: 11, i: 292, }, D { l: 14, t: 11, i: 100, }, D { l: 146, t: 11, i: 70, }, D { l: 6, t: 0, i: 1403, }, D { l: 136, t: 0, i: 617, }, D { l: 134, t: 0, i: 1205, }, D { l: 139, t: 0, i: 563, }, D { l: 4, t: 0, i: 242 }, D { l: 134, t: 0, i: 333, }, D { l: 4, t: 11, i: 186, }, D { l: 5, t: 11, i: 157, }, D { l: 8, t: 11, i: 168, }, D { l: 138, t: 11, i: 6, }, D { l: 132, t: 0, i: 369, }, D { l: 133, t: 11, i: 875, }, D { l: 5, t: 10, i: 782, }, D { l: 5, t: 10, i: 829, }, D { l: 134, t: 10, i: 1738, }, D { l: 134, t: 0, i: 622, }, D { l: 135, t: 11, i: 1272, }, D { l: 6, t: 0, i: 1407, }, D { l: 7, t: 11, i: 111, }, D { l: 136, t: 11, i: 581, }, D { l: 7, t: 10, i: 1823, }, D { l: 139, t: 10, i: 693, }, D { l: 7, t: 0, i: 160 }, D { l: 10, t: 0, i: 624, }, D { l: 142, t: 0, i: 279, }, D { l: 132, t: 0, i: 363, }, D { l: 10, t: 11, i: 589, }, D { l: 12, t: 11, i: 111, }, D { l: 13, t: 11, i: 260, }, D { l: 14, t: 11, i: 82, }, D { l: 18, t: 11, i: 63, }, D { l: 147, t: 11, i: 45, }, D { l: 7, t: 11, i: 1364, }, D { l: 7, t: 11, i: 1907, }, D { l: 141, t: 11, i: 158, }, D { l: 4, t: 11, i: 404, }, D { l: 4, t: 11, i: 659, }, D { l: 135, t: 11, i: 675, }, D { l: 13, t: 11, i: 211, }, D { l: 14, t: 11, i: 133, }, D { l: 14, t: 11, i: 204, }, D { l: 15, t: 11, i: 64, }, D { l: 15, t: 11, i: 69, }, D { l: 15, t: 11, i: 114, }, D { l: 16, t: 11, i: 10, }, D { l: 19, t: 11, i: 23, }, D { l: 19, t: 11, i: 35, }, D { l: 19, t: 11, i: 39, }, D { l: 19, t: 11, i: 51, }, D { l: 19, t: 11, i: 71, }, D { l: 19, t: 11, i: 75, }, D { l: 152, t: 11, i: 15, }, D { l: 4, t: 10, i: 78 }, D { l: 5, t: 10, i: 96 }, D { l: 5, t: 10, i: 182, }, D { l: 7, t: 10, i: 1724, }, D { l: 7, t: 10, i: 1825, }, D { l: 10, t: 10, i: 394, }, D { l: 10, t: 10, i: 471, }, D { l: 11, t: 10, i: 532, }, D { l: 14, t: 10, i: 340, }, D { l: 145, t: 10, i: 88, }, D { l: 135, t: 10, i: 1964, }, D { l: 133, t: 11, i: 391, }, D { l: 11, t: 11, i: 887, }, D { l: 14, t: 11, i: 365, }, D { l: 142, t: 11, i: 375, }, D { l: 5, t: 11, i: 540, }, D { l: 6, t: 11, i: 1697, }, D { l: 7, t: 11, i: 222, }, D { l: 136, t: 11, i: 341, }, D { l: 134, t: 11, i: 78, }, D { l: 9, t: 0, i: 601 }, D { l: 9, t: 0, i: 619 }, D { l: 10, t: 0, i: 505, }, D { l: 10, t: 0, i: 732, }, D { l: 11, t: 0, i: 355, }, D { l: 140, t: 0, i: 139, }, D { l: 134, t: 0, i: 292, }, D { l: 139, t: 0, i: 174, }, D { l: 5, t: 0, i: 177 }, D { l: 6, t: 0, i: 616 }, D { l: 7, t: 0, i: 827 }, D { l: 9, t: 0, i: 525 }, D { l: 138, t: 0, i: 656, }, D { l: 10, t: 0, i: 31 }, D { l: 6, t: 10, i: 215, }, D { l: 7, t: 10, i: 1028, }, D { l: 7, t: 10, i: 1473, }, D { l: 7, t: 10, i: 1721, }, D { l: 9, t: 10, i: 424, }, D { l: 138, t: 10, i: 779, }, D { l: 135, t: 10, i: 584, }, D { l: 136, t: 11, i: 293, }, D { l: 134, t: 0, i: 685, }, D { l: 135, t: 11, i: 1868, }, D { l: 133, t: 11, i: 460, }, D { l: 7, t: 0, i: 647 }, D { l: 6, t: 10, i: 67 }, D { l: 7, t: 10, i: 1630, }, D { l: 9, t: 10, i: 354, }, D { l: 9, t: 10, i: 675, }, D { l: 10, t: 10, i: 830, }, D { l: 14, t: 10, i: 80, }, D { l: 145, t: 10, i: 80, }, D { l: 4, t: 0, i: 161 }, D { l: 133, t: 0, i: 631, }, D { l: 6, t: 10, i: 141, }, D { l: 7, t: 10, i: 225, }, D { l: 9, t: 10, i: 59 }, D { l: 9, t: 10, i: 607, }, D { l: 10, t: 10, i: 312, }, D { l: 11, t: 10, i: 687, }, D { l: 12, t: 10, i: 555, }, D { l: 13, t: 10, i: 373, }, D { l: 13, t: 10, i: 494, }, D { l: 148, t: 10, i: 58, }, D { l: 7, t: 11, i: 965, }, D { l: 7, t: 11, i: 1460, }, D { l: 135, t: 11, i: 1604, }, D { l: 136, t: 10, i: 783, }, D { l: 134, t: 11, i: 388, }, D { l: 6, t: 0, i: 722 }, D { l: 6, t: 0, i: 1267, }, D { l: 4, t: 11, i: 511, }, D { l: 9, t: 11, i: 333, }, D { l: 9, t: 11, i: 379, }, D { l: 10, t: 11, i: 602, }, D { l: 11, t: 11, i: 441, }, D { l: 11, t: 11, i: 723, }, D { l: 11, t: 11, i: 976, }, D { l: 140, t: 11, i: 357, }, D { l: 134, t: 0, i: 1797, }, D { l: 135, t: 0, i: 1684, }, D { l: 9, t: 0, i: 469 }, D { l: 9, t: 0, i: 709 }, D { l: 12, t: 0, i: 512, }, D { l: 14, t: 0, i: 65 }, D { l: 17, t: 0, i: 12 }, D { l: 5, t: 11, i: 938, }, D { l: 136, t: 11, i: 707, }, D { l: 7, t: 0, i: 1230, }, D { l: 136, t: 0, i: 531, }, D { l: 10, t: 0, i: 229, }, D { l: 11, t: 0, i: 73 }, D { l: 11, t: 0, i: 376, }, D { l: 139, t: 0, i: 433, }, D { l: 12, t: 0, i: 268, }, D { l: 12, t: 0, i: 640, }, D { l: 142, t: 0, i: 119, }, D { l: 7, t: 10, i: 430, }, D { l: 139, t: 10, i: 46, }, D { l: 6, t: 0, i: 558 }, D { l: 7, t: 0, i: 651 }, D { l: 8, t: 0, i: 421 }, D { l: 9, t: 0, i: 0 }, D { l: 10, t: 0, i: 34 }, D { l: 139, t: 0, i: 1008, }, D { l: 6, t: 0, i: 106 }, D { l: 7, t: 0, i: 1786, }, D { l: 7, t: 0, i: 1821, }, D { l: 9, t: 0, i: 102 }, D { l: 9, t: 0, i: 763 }, D { l: 5, t: 10, i: 602, }, D { l: 7, t: 10, i: 2018, }, D { l: 137, t: 10, i: 418, }, D { l: 5, t: 0, i: 65 }, D { l: 6, t: 0, i: 416 }, D { l: 7, t: 0, i: 1720, }, D { l: 7, t: 0, i: 1924, }, D { l: 10, t: 0, i: 109, }, D { l: 11, t: 0, i: 14 }, D { l: 11, t: 0, i: 70 }, D { l: 11, t: 0, i: 569, }, D { l: 11, t: 0, i: 735, }, D { l: 15, t: 0, i: 153, }, D { l: 20, t: 0, i: 80 }, D { l: 136, t: 10, i: 677, }, D { l: 135, t: 11, i: 1625, }, D { l: 137, t: 11, i: 772, }, D { l: 136, t: 0, i: 595, }, D { l: 6, t: 11, i: 469, }, D { l: 7, t: 11, i: 1709, }, D { l: 138, t: 11, i: 515, }, D { l: 7, t: 0, i: 1832, }, D { l: 138, t: 0, i: 374, }, D { l: 9, t: 0, i: 106 }, D { l: 9, t: 0, i: 163 }, D { l: 9, t: 0, i: 296 }, D { l: 10, t: 0, i: 167, }, D { l: 10, t: 0, i: 172, }, D { l: 10, t: 0, i: 777, }, D { l: 139, t: 0, i: 16, }, D { l: 6, t: 0, i: 6 }, D { l: 7, t: 0, i: 81 }, D { l: 7, t: 0, i: 771 }, D { l: 7, t: 0, i: 1731, }, D { l: 9, t: 0, i: 405 }, D { l: 138, t: 0, i: 421, }, D { l: 4, t: 11, i: 500, }, D { l: 135, t: 11, i: 938, }, D { l: 5, t: 11, i: 68 }, D { l: 134, t: 11, i: 383, }, D { l: 5, t: 0, i: 881 }, D { l: 133, t: 0, i: 885, }, D { l: 6, t: 0, i: 854 }, D { l: 6, t: 0, i: 1132, }, D { l: 6, t: 0, i: 1495, }, D { l: 6, t: 0, i: 1526, }, D { l: 6, t: 0, i: 1533, }, D { l: 134, t: 0, i: 1577, }, D { l: 4, t: 11, i: 337, }, D { l: 6, t: 11, i: 353, }, D { l: 7, t: 11, i: 1934, }, D { l: 8, t: 11, i: 488, }, D { l: 137, t: 11, i: 429, }, D { l: 7, t: 11, i: 236, }, D { l: 7, t: 11, i: 1795, }, D { l: 8, t: 11, i: 259, }, D { l: 9, t: 11, i: 135, }, D { l: 9, t: 11, i: 177, }, D { l: 10, t: 11, i: 825, }, D { l: 11, t: 11, i: 115, }, D { l: 11, t: 11, i: 370, }, D { l: 11, t: 11, i: 405, }, D { l: 11, t: 11, i: 604, }, D { l: 12, t: 11, i: 10, }, D { l: 12, t: 11, i: 667, }, D { l: 12, t: 11, i: 669, }, D { l: 13, t: 11, i: 76, }, D { l: 14, t: 11, i: 310, }, D { l: 15, t: 11, i: 76, }, D { l: 15, t: 11, i: 147, }, D { l: 148, t: 11, i: 23, }, D { l: 5, t: 0, i: 142 }, D { l: 134, t: 0, i: 546, }, D { l: 4, t: 11, i: 15 }, D { l: 5, t: 11, i: 22 }, D { l: 6, t: 11, i: 244, }, D { l: 7, t: 11, i: 40 }, D { l: 7, t: 11, i: 200, }, D { l: 7, t: 11, i: 906, }, D { l: 7, t: 11, i: 1199, }, D { l: 9, t: 11, i: 616, }, D { l: 10, t: 11, i: 716, }, D { l: 11, t: 11, i: 635, }, D { l: 11, t: 11, i: 801, }, D { l: 140, t: 11, i: 458, }, D { l: 5, t: 0, i: 466 }, D { l: 11, t: 0, i: 571, }, D { l: 12, t: 0, i: 198, }, D { l: 13, t: 0, i: 283, }, D { l: 14, t: 0, i: 186, }, D { l: 15, t: 0, i: 21 }, D { l: 15, t: 0, i: 103, }, D { l: 135, t: 10, i: 329, }, D { l: 4, t: 0, i: 185 }, D { l: 5, t: 0, i: 257 }, D { l: 5, t: 0, i: 839 }, D { l: 5, t: 0, i: 936 }, D { l: 9, t: 0, i: 399 }, D { l: 10, t: 0, i: 258, }, D { l: 10, t: 0, i: 395, }, D { l: 10, t: 0, i: 734, }, D { l: 11, t: 0, i: 1014, }, D { l: 12, t: 0, i: 23 }, D { l: 13, t: 0, i: 350, }, D { l: 14, t: 0, i: 150, }, D { l: 19, t: 0, i: 6 }, D { l: 135, t: 11, i: 1735, }, D { l: 12, t: 11, i: 36, }, D { l: 141, t: 11, i: 337, }, D { l: 5, t: 11, i: 598, }, D { l: 7, t: 11, i: 791, }, D { l: 8, t: 11, i: 108, }, D { l: 137, t: 11, i: 123, }, D { l: 132, t: 10, i: 469, }, D { l: 7, t: 0, i: 404 }, D { l: 7, t: 0, i: 1377, }, D { l: 7, t: 0, i: 1430, }, D { l: 7, t: 0, i: 2017, }, D { l: 8, t: 0, i: 149 }, D { l: 8, t: 0, i: 239 }, D { l: 8, t: 0, i: 512 }, D { l: 8, t: 0, i: 793 }, D { l: 8, t: 0, i: 818 }, D { l: 9, t: 0, i: 474 }, D { l: 9, t: 0, i: 595 }, D { l: 10, t: 0, i: 122, }, D { l: 10, t: 0, i: 565, }, D { l: 10, t: 0, i: 649, }, D { l: 10, t: 0, i: 783, }, D { l: 11, t: 0, i: 239, }, D { l: 11, t: 0, i: 295, }, D { l: 11, t: 0, i: 447, }, D { l: 11, t: 0, i: 528, }, D { l: 11, t: 0, i: 639, }, D { l: 11, t: 0, i: 800, }, D { l: 12, t: 0, i: 25 }, D { l: 12, t: 0, i: 77 }, D { l: 12, t: 0, i: 157, }, D { l: 12, t: 0, i: 256, }, D { l: 12, t: 0, i: 316, }, D { l: 12, t: 0, i: 390, }, D { l: 12, t: 0, i: 391, }, D { l: 12, t: 0, i: 395, }, D { l: 12, t: 0, i: 478, }, D { l: 12, t: 0, i: 503, }, D { l: 12, t: 0, i: 592, }, D { l: 12, t: 0, i: 680, }, D { l: 13, t: 0, i: 50 }, D { l: 13, t: 0, i: 53 }, D { l: 13, t: 0, i: 132, }, D { l: 13, t: 0, i: 198, }, D { l: 13, t: 0, i: 322, }, D { l: 13, t: 0, i: 415, }, D { l: 13, t: 0, i: 511, }, D { l: 14, t: 0, i: 71 }, D { l: 14, t: 0, i: 395, }, D { l: 15, t: 0, i: 71 }, D { l: 15, t: 0, i: 136, }, D { l: 17, t: 0, i: 123, }, D { l: 18, t: 0, i: 93 }, D { l: 147, t: 0, i: 58, }, D { l: 136, t: 0, i: 712, }, D { l: 134, t: 10, i: 1743, }, D { l: 5, t: 10, i: 929, }, D { l: 6, t: 10, i: 340, }, D { l: 8, t: 10, i: 376, }, D { l: 136, t: 10, i: 807, }, D { l: 6, t: 0, i: 1848, }, D { l: 8, t: 0, i: 860 }, D { l: 10, t: 0, i: 856, }, D { l: 10, t: 0, i: 859, }, D { l: 10, t: 0, i: 925, }, D { l: 10, t: 0, i: 941, }, D { l: 140, t: 0, i: 762, }, D { l: 6, t: 0, i: 629 }, D { l: 6, t: 0, i: 906 }, D { l: 9, t: 0, i: 810 }, D { l: 140, t: 0, i: 652, }, D { l: 5, t: 10, i: 218, }, D { l: 7, t: 10, i: 1610, }, D { l: 138, t: 10, i: 83, }, D { l: 7, t: 10, i: 1512, }, D { l: 135, t: 10, i: 1794, }, D { l: 4, t: 0, i: 377 }, D { l: 24, t: 0, i: 13 }, D { l: 4, t: 11, i: 155, }, D { l: 7, t: 11, i: 1689, }, D { l: 11, t: 10, i: 0 }, D { l: 144, t: 10, i: 78, }, D { l: 4, t: 11, i: 164, }, D { l: 5, t: 11, i: 151, }, D { l: 5, t: 11, i: 730, }, D { l: 5, t: 11, i: 741, }, D { l: 7, t: 11, i: 498, }, D { l: 7, t: 11, i: 870, }, D { l: 7, t: 11, i: 1542, }, D { l: 12, t: 11, i: 213, }, D { l: 14, t: 11, i: 36, }, D { l: 14, t: 11, i: 391, }, D { l: 17, t: 11, i: 111, }, D { l: 18, t: 11, i: 6 }, D { l: 18, t: 11, i: 46, }, D { l: 18, t: 11, i: 151, }, D { l: 19, t: 11, i: 36, }, D { l: 20, t: 11, i: 32, }, D { l: 20, t: 11, i: 56, }, D { l: 20, t: 11, i: 69, }, D { l: 20, t: 11, i: 102, }, D { l: 21, t: 11, i: 4 }, D { l: 22, t: 11, i: 8 }, D { l: 22, t: 11, i: 10, }, D { l: 22, t: 11, i: 14, }, D { l: 150, t: 11, i: 31, }, D { l: 7, t: 0, i: 1842, }, D { l: 133, t: 10, i: 571, }, D { l: 4, t: 10, i: 455, }, D { l: 4, t: 11, i: 624, }, D { l: 135, t: 11, i: 1752, }, D { l: 134, t: 0, i: 1501, }, D { l: 4, t: 11, i: 492, }, D { l: 5, t: 11, i: 451, }, D { l: 6, t: 10, i: 161, }, D { l: 7, t: 10, i: 372, }, D { l: 137, t: 10, i: 597, }, D { l: 132, t: 10, i: 349, }, D { l: 4, t: 0, i: 180 }, D { l: 135, t: 0, i: 1906, }, D { l: 135, t: 11, i: 835, }, D { l: 141, t: 11, i: 70, }, D { l: 132, t: 0, i: 491, }, D { l: 137, t: 10, i: 751, }, D { l: 6, t: 10, i: 432, }, D { l: 139, t: 10, i: 322, }, D { l: 4, t: 0, i: 171 }, D { l: 138, t: 0, i: 234, }, D { l: 6, t: 11, i: 113, }, D { l: 135, t: 11, i: 436, }, D { l: 4, t: 0, i: 586 }, D { l: 7, t: 0, i: 1186, }, D { l: 138, t: 0, i: 631, }, D { l: 5, t: 10, i: 468, }, D { l: 10, t: 10, i: 325, }, D { l: 11, t: 10, i: 856, }, D { l: 12, t: 10, i: 345, }, D { l: 143, t: 10, i: 104, }, D { l: 5, t: 10, i: 223, }, D { l: 10, t: 11, i: 592, }, D { l: 10, t: 11, i: 753, }, D { l: 12, t: 11, i: 317, }, D { l: 12, t: 11, i: 355, }, D { l: 12, t: 11, i: 465, }, D { l: 12, t: 11, i: 469, }, D { l: 12, t: 11, i: 560, }, D { l: 12, t: 11, i: 578, }, D { l: 141, t: 11, i: 243, }, D { l: 132, t: 10, i: 566, }, D { l: 135, t: 11, i: 520, }, D { l: 4, t: 10, i: 59 }, D { l: 135, t: 10, i: 1394, }, D { l: 6, t: 10, i: 436, }, D { l: 139, t: 10, i: 481, }, D { l: 9, t: 0, i: 931 }, D { l: 10, t: 0, i: 334, }, D { l: 20, t: 0, i: 71 }, D { l: 4, t: 10, i: 48 }, D { l: 5, t: 10, i: 271, }, D { l: 7, t: 10, i: 953, }, D { l: 135, t: 11, i: 1878, }, D { l: 11, t: 0, i: 170, }, D { l: 5, t: 10, i: 610, }, D { l: 136, t: 10, i: 457, }, D { l: 133, t: 10, i: 755, }, D { l: 6, t: 0, i: 1587, }, D { l: 135, t: 10, i: 1217, }, D { l: 4, t: 10, i: 197, }, D { l: 149, t: 11, i: 26, }, D { l: 133, t: 11, i: 585, }, D { l: 137, t: 11, i: 521, }, D { l: 133, t: 0, i: 765, }, D { l: 133, t: 10, i: 217, }, D { l: 139, t: 11, i: 586, }, D { l: 133, t: 0, i: 424, }, D { l: 9, t: 11, i: 752, }, D { l: 12, t: 11, i: 610, }, D { l: 13, t: 11, i: 431, }, D { l: 16, t: 11, i: 59, }, D { l: 146, t: 11, i: 109, }, D { l: 136, t: 0, i: 714, }, D { l: 7, t: 0, i: 685 }, D { l: 132, t: 11, i: 307, }, D { l: 9, t: 0, i: 420 }, D { l: 10, t: 0, i: 269, }, D { l: 10, t: 0, i: 285, }, D { l: 10, t: 0, i: 576, }, D { l: 11, t: 0, i: 397, }, D { l: 13, t: 0, i: 175, }, D { l: 145, t: 0, i: 90, }, D { l: 132, t: 0, i: 429, }, D { l: 133, t: 11, i: 964, }, D { l: 9, t: 11, i: 463, }, D { l: 138, t: 11, i: 595, }, D { l: 7, t: 0, i: 18 }, D { l: 7, t: 0, i: 699 }, D { l: 7, t: 0, i: 1966, }, D { l: 8, t: 0, i: 752 }, D { l: 9, t: 0, i: 273 }, D { l: 9, t: 0, i: 412 }, D { l: 9, t: 0, i: 703 }, D { l: 10, t: 0, i: 71 }, D { l: 10, t: 0, i: 427, }, D { l: 138, t: 0, i: 508, }, D { l: 4, t: 10, i: 165, }, D { l: 7, t: 10, i: 1398, }, D { l: 135, t: 10, i: 1829, }, D { l: 4, t: 0, i: 53 }, D { l: 5, t: 0, i: 186 }, D { l: 7, t: 0, i: 752 }, D { l: 7, t: 0, i: 828 }, D { l: 142, t: 0, i: 116, }, D { l: 8, t: 0, i: 575 }, D { l: 10, t: 0, i: 289, }, D { l: 139, t: 0, i: 319, }, D { l: 132, t: 0, i: 675, }, D { l: 134, t: 0, i: 1424, }, D { l: 4, t: 11, i: 75 }, D { l: 5, t: 11, i: 180, }, D { l: 6, t: 11, i: 500, }, D { l: 7, t: 11, i: 58 }, D { l: 7, t: 11, i: 710, }, D { l: 138, t: 11, i: 645, }, D { l: 133, t: 11, i: 649, }, D { l: 6, t: 11, i: 276, }, D { l: 7, t: 11, i: 282, }, D { l: 7, t: 11, i: 879, }, D { l: 7, t: 11, i: 924, }, D { l: 8, t: 11, i: 459, }, D { l: 9, t: 11, i: 599, }, D { l: 9, t: 11, i: 754, }, D { l: 11, t: 11, i: 574, }, D { l: 12, t: 11, i: 128, }, D { l: 12, t: 11, i: 494, }, D { l: 13, t: 11, i: 52, }, D { l: 13, t: 11, i: 301, }, D { l: 15, t: 11, i: 30, }, D { l: 143, t: 11, i: 132, }, D { l: 6, t: 0, i: 647 }, D { l: 134, t: 0, i: 1095, }, D { l: 5, t: 10, i: 9 }, D { l: 7, t: 10, i: 297, }, D { l: 7, t: 10, i: 966, }, D { l: 140, t: 10, i: 306, }, D { l: 132, t: 11, i: 200, }, D { l: 134, t: 0, i: 1334, }, D { l: 5, t: 10, i: 146, }, D { l: 6, t: 10, i: 411, }, D { l: 138, t: 10, i: 721, }, D { l: 6, t: 0, i: 209 }, D { l: 6, t: 0, i: 1141, }, D { l: 6, t: 0, i: 1288, }, D { l: 8, t: 0, i: 468 }, D { l: 9, t: 0, i: 210 }, D { l: 11, t: 0, i: 36 }, D { l: 12, t: 0, i: 28 }, D { l: 12, t: 0, i: 630, }, D { l: 13, t: 0, i: 21 }, D { l: 13, t: 0, i: 349, }, D { l: 14, t: 0, i: 7 }, D { l: 145, t: 0, i: 13, }, D { l: 6, t: 10, i: 177, }, D { l: 135, t: 10, i: 467, }, D { l: 4, t: 0, i: 342 }, D { l: 135, t: 0, i: 1179, }, D { l: 10, t: 11, i: 454, }, D { l: 140, t: 11, i: 324, }, D { l: 4, t: 0, i: 928 }, D { l: 133, t: 0, i: 910, }, D { l: 7, t: 0, i: 1838, }, D { l: 6, t: 11, i: 225, }, D { l: 137, t: 11, i: 211, }, D { l: 16, t: 0, i: 101, }, D { l: 20, t: 0, i: 115, }, D { l: 20, t: 0, i: 118, }, D { l: 148, t: 0, i: 122, }, D { l: 4, t: 0, i: 496 }, D { l: 135, t: 0, i: 856, }, D { l: 4, t: 0, i: 318 }, D { l: 11, t: 0, i: 654, }, D { l: 7, t: 11, i: 718, }, D { l: 139, t: 11, i: 102, }, D { l: 8, t: 11, i: 58 }, D { l: 9, t: 11, i: 724, }, D { l: 11, t: 11, i: 809, }, D { l: 13, t: 11, i: 113, }, D { l: 145, t: 11, i: 72, }, D { l: 5, t: 10, i: 200, }, D { l: 6, t: 11, i: 345, }, D { l: 135, t: 11, i: 1247, }, D { l: 8, t: 11, i: 767, }, D { l: 8, t: 11, i: 803, }, D { l: 9, t: 11, i: 301, }, D { l: 137, t: 11, i: 903, }, D { l: 7, t: 0, i: 915 }, D { l: 8, t: 0, i: 247 }, D { l: 19, t: 0, i: 0 }, D { l: 7, t: 11, i: 1949, }, D { l: 136, t: 11, i: 674, }, D { l: 4, t: 0, i: 202 }, D { l: 5, t: 0, i: 382 }, D { l: 6, t: 0, i: 454 }, D { l: 7, t: 0, i: 936 }, D { l: 7, t: 0, i: 1803, }, D { l: 8, t: 0, i: 758 }, D { l: 9, t: 0, i: 375 }, D { l: 9, t: 0, i: 895 }, D { l: 10, t: 0, i: 743, }, D { l: 10, t: 0, i: 792, }, D { l: 11, t: 0, i: 978, }, D { l: 11, t: 0, i: 1012, }, D { l: 142, t: 0, i: 109, }, D { l: 7, t: 0, i: 1150, }, D { l: 7, t: 0, i: 1425, }, D { l: 7, t: 0, i: 1453, }, D { l: 140, t: 0, i: 513, }, D { l: 134, t: 11, i: 259, }, D { l: 138, t: 0, i: 791, }, D { l: 11, t: 0, i: 821, }, D { l: 12, t: 0, i: 110, }, D { l: 12, t: 0, i: 153, }, D { l: 18, t: 0, i: 41 }, D { l: 150, t: 0, i: 19, }, D { l: 134, t: 10, i: 481, }, D { l: 132, t: 0, i: 796, }, D { l: 6, t: 0, i: 445 }, D { l: 9, t: 0, i: 909 }, D { l: 136, t: 11, i: 254, }, D { l: 10, t: 0, i: 776, }, D { l: 13, t: 0, i: 345, }, D { l: 142, t: 0, i: 425, }, D { l: 4, t: 10, i: 84 }, D { l: 7, t: 10, i: 1482, }, D { l: 10, t: 10, i: 76, }, D { l: 138, t: 10, i: 142, }, D { l: 135, t: 11, i: 742, }, D { l: 6, t: 0, i: 578 }, D { l: 133, t: 10, i: 1015, }, D { l: 6, t: 0, i: 1387, }, D { l: 4, t: 10, i: 315, }, D { l: 5, t: 10, i: 507, }, D { l: 135, t: 10, i: 1370, }, D { l: 4, t: 0, i: 438 }, D { l: 133, t: 0, i: 555, }, D { l: 136, t: 0, i: 766, }, D { l: 133, t: 11, i: 248, }, D { l: 134, t: 10, i: 1722, }, D { l: 4, t: 11, i: 116, }, D { l: 5, t: 11, i: 95 }, D { l: 5, t: 11, i: 445, }, D { l: 7, t: 11, i: 1688, }, D { l: 8, t: 11, i: 29 }, D { l: 9, t: 11, i: 272, }, D { l: 11, t: 11, i: 509, }, D { l: 139, t: 11, i: 915, }, D { l: 135, t: 0, i: 541, }, D { l: 133, t: 11, i: 543, }, D { l: 8, t: 10, i: 222, }, D { l: 8, t: 10, i: 476, }, D { l: 9, t: 10, i: 238, }, D { l: 11, t: 10, i: 516, }, D { l: 11, t: 10, i: 575, }, D { l: 15, t: 10, i: 109, }, D { l: 146, t: 10, i: 100, }, D { l: 6, t: 0, i: 880 }, D { l: 134, t: 0, i: 1191, }, D { l: 5, t: 11, i: 181, }, D { l: 136, t: 11, i: 41, }, D { l: 134, t: 0, i: 1506, }, D { l: 132, t: 11, i: 681, }, D { l: 7, t: 11, i: 25 }, D { l: 8, t: 11, i: 202, }, D { l: 138, t: 11, i: 536, }, D { l: 139, t: 0, i: 983, }, D { l: 137, t: 0, i: 768, }, D { l: 132, t: 0, i: 584, }, D { l: 9, t: 11, i: 423, }, D { l: 140, t: 11, i: 89, }, D { l: 8, t: 11, i: 113, }, D { l: 9, t: 11, i: 877, }, D { l: 10, t: 11, i: 554, }, D { l: 11, t: 11, i: 83, }, D { l: 12, t: 11, i: 136, }, D { l: 147, t: 11, i: 109, }, D { l: 7, t: 10, i: 706, }, D { l: 7, t: 10, i: 1058, }, D { l: 138, t: 10, i: 538, }, D { l: 133, t: 11, i: 976, }, D { l: 4, t: 11, i: 206, }, D { l: 135, t: 11, i: 746, }, D { l: 136, t: 11, i: 526, }, D { l: 140, t: 0, i: 737, }, D { l: 11, t: 10, i: 92, }, D { l: 11, t: 10, i: 196, }, D { l: 11, t: 10, i: 409, }, D { l: 11, t: 10, i: 450, }, D { l: 11, t: 10, i: 666, }, D { l: 11, t: 10, i: 777, }, D { l: 12, t: 10, i: 262, }, D { l: 13, t: 10, i: 385, }, D { l: 13, t: 10, i: 393, }, D { l: 15, t: 10, i: 115, }, D { l: 16, t: 10, i: 45, }, D { l: 145, t: 10, i: 82, }, D { l: 4, t: 0, i: 226 }, D { l: 4, t: 0, i: 326 }, D { l: 7, t: 0, i: 1770, }, D { l: 4, t: 11, i: 319, }, D { l: 5, t: 11, i: 699, }, D { l: 138, t: 11, i: 673, }, D { l: 6, t: 10, i: 40 }, D { l: 135, t: 10, i: 1781, }, D { l: 5, t: 0, i: 426 }, D { l: 8, t: 0, i: 30 }, D { l: 9, t: 0, i: 2 }, D { l: 11, t: 0, i: 549, }, D { l: 147, t: 0, i: 122, }, D { l: 6, t: 0, i: 1161, }, D { l: 134, t: 0, i: 1329, }, D { l: 138, t: 10, i: 97, }, D { l: 6, t: 10, i: 423, }, D { l: 7, t: 10, i: 665, }, D { l: 135, t: 10, i: 1210, }, D { l: 7, t: 11, i: 13 }, D { l: 8, t: 11, i: 226, }, D { l: 10, t: 11, i: 537, }, D { l: 11, t: 11, i: 570, }, D { l: 11, t: 11, i: 605, }, D { l: 11, t: 11, i: 799, }, D { l: 11, t: 11, i: 804, }, D { l: 12, t: 11, i: 85, }, D { l: 12, t: 11, i: 516, }, D { l: 12, t: 11, i: 623, }, D { l: 13, t: 11, i: 112, }, D { l: 13, t: 11, i: 361, }, D { l: 14, t: 11, i: 77, }, D { l: 14, t: 11, i: 78, }, D { l: 17, t: 11, i: 28, }, D { l: 147, t: 11, i: 110, }, D { l: 132, t: 11, i: 769, }, D { l: 132, t: 11, i: 551, }, D { l: 132, t: 11, i: 728, }, D { l: 147, t: 0, i: 117, }, D { l: 9, t: 11, i: 57 }, D { l: 9, t: 11, i: 459, }, D { l: 10, t: 11, i: 425, }, D { l: 11, t: 11, i: 119, }, D { l: 12, t: 11, i: 184, }, D { l: 12, t: 11, i: 371, }, D { l: 13, t: 11, i: 358, }, D { l: 145, t: 11, i: 51, }, D { l: 5, t: 11, i: 188, }, D { l: 5, t: 11, i: 814, }, D { l: 8, t: 11, i: 10 }, D { l: 9, t: 11, i: 421, }, D { l: 9, t: 11, i: 729, }, D { l: 10, t: 11, i: 609, }, D { l: 139, t: 11, i: 689, }, D { l: 134, t: 11, i: 624, }, D { l: 135, t: 11, i: 298, }, D { l: 135, t: 0, i: 462, }, D { l: 4, t: 0, i: 345 }, D { l: 139, t: 10, i: 624, }, D { l: 136, t: 10, i: 574, }, D { l: 4, t: 0, i: 385 }, D { l: 7, t: 0, i: 265 }, D { l: 135, t: 0, i: 587, }, D { l: 6, t: 0, i: 808 }, D { l: 132, t: 11, i: 528, }, D { l: 133, t: 0, i: 398, }, D { l: 132, t: 10, i: 354, }, D { l: 4, t: 0, i: 347 }, D { l: 5, t: 0, i: 423 }, D { l: 5, t: 0, i: 996 }, D { l: 135, t: 0, i: 1329, }, D { l: 135, t: 10, i: 1558, }, D { l: 7, t: 0, i: 1259, }, D { l: 9, t: 0, i: 125 }, D { l: 139, t: 0, i: 65, }, D { l: 5, t: 0, i: 136 }, D { l: 6, t: 0, i: 136 }, D { l: 136, t: 0, i: 644, }, D { l: 5, t: 11, i: 104, }, D { l: 6, t: 11, i: 173, }, D { l: 135, t: 11, i: 1631, }, D { l: 135, t: 0, i: 469, }, D { l: 133, t: 10, i: 830, }, D { l: 4, t: 0, i: 278 }, D { l: 5, t: 0, i: 465 }, D { l: 135, t: 0, i: 1367, }, D { l: 7, t: 11, i: 810, }, D { l: 8, t: 11, i: 138, }, D { l: 8, t: 11, i: 342, }, D { l: 9, t: 11, i: 84 }, D { l: 10, t: 11, i: 193, }, D { l: 11, t: 11, i: 883, }, D { l: 140, t: 11, i: 359, }, D { l: 5, t: 10, i: 496, }, D { l: 135, t: 10, i: 203, }, D { l: 4, t: 0, i: 433 }, D { l: 133, t: 0, i: 719, }, D { l: 6, t: 11, i: 95 }, D { l: 134, t: 10, i: 547, }, D { l: 5, t: 10, i: 88 }, D { l: 137, t: 10, i: 239, }, D { l: 6, t: 11, i: 406, }, D { l: 10, t: 11, i: 409, }, D { l: 10, t: 11, i: 447, }, D { l: 11, t: 11, i: 44, }, D { l: 140, t: 11, i: 100, }, D { l: 134, t: 0, i: 1423, }, D { l: 7, t: 10, i: 650, }, D { l: 135, t: 10, i: 1310, }, D { l: 134, t: 0, i: 749, }, D { l: 135, t: 11, i: 1243, }, D { l: 135, t: 0, i: 1363, }, D { l: 6, t: 0, i: 381 }, D { l: 7, t: 0, i: 645 }, D { l: 7, t: 0, i: 694 }, D { l: 8, t: 0, i: 546 }, D { l: 7, t: 10, i: 1076, }, D { l: 9, t: 10, i: 80 }, D { l: 11, t: 10, i: 78, }, D { l: 11, t: 10, i: 421, }, D { l: 11, t: 10, i: 534, }, D { l: 140, t: 10, i: 545, }, D { l: 134, t: 11, i: 1636, }, D { l: 135, t: 11, i: 1344, }, D { l: 12, t: 0, i: 277, }, D { l: 7, t: 10, i: 274, }, D { l: 11, t: 10, i: 479, }, D { l: 139, t: 10, i: 507, }, D { l: 6, t: 0, i: 705 }, D { l: 6, t: 0, i: 783 }, D { l: 6, t: 0, i: 1275, }, D { l: 6, t: 0, i: 1481, }, D { l: 4, t: 11, i: 282, }, D { l: 7, t: 11, i: 1034, }, D { l: 11, t: 11, i: 398, }, D { l: 11, t: 11, i: 634, }, D { l: 12, t: 11, i: 1 }, D { l: 12, t: 11, i: 79, }, D { l: 12, t: 11, i: 544, }, D { l: 14, t: 11, i: 237, }, D { l: 17, t: 11, i: 10, }, D { l: 146, t: 11, i: 20, }, D { l: 134, t: 0, i: 453, }, D { l: 4, t: 0, i: 555 }, D { l: 8, t: 0, i: 536 }, D { l: 10, t: 0, i: 288, }, D { l: 11, t: 0, i: 1005, }, D { l: 4, t: 10, i: 497, }, D { l: 135, t: 10, i: 1584, }, D { l: 5, t: 11, i: 118, }, D { l: 5, t: 11, i: 499, }, D { l: 6, t: 11, i: 476, }, D { l: 7, t: 11, i: 600, }, D { l: 7, t: 11, i: 888, }, D { l: 135, t: 11, i: 1096, }, D { l: 138, t: 0, i: 987, }, D { l: 7, t: 0, i: 1107, }, D { l: 7, t: 10, i: 261, }, D { l: 7, t: 10, i: 1115, }, D { l: 7, t: 10, i: 1354, }, D { l: 7, t: 10, i: 1588, }, D { l: 7, t: 10, i: 1705, }, D { l: 7, t: 10, i: 1902, }, D { l: 9, t: 10, i: 465, }, D { l: 10, t: 10, i: 248, }, D { l: 10, t: 10, i: 349, }, D { l: 10, t: 10, i: 647, }, D { l: 11, t: 10, i: 527, }, D { l: 11, t: 10, i: 660, }, D { l: 11, t: 10, i: 669, }, D { l: 12, t: 10, i: 529, }, D { l: 141, t: 10, i: 305, }, D { l: 7, t: 11, i: 296, }, D { l: 7, t: 11, i: 596, }, D { l: 8, t: 11, i: 560, }, D { l: 8, t: 11, i: 586, }, D { l: 9, t: 11, i: 612, }, D { l: 11, t: 11, i: 100, }, D { l: 11, t: 11, i: 304, }, D { l: 12, t: 11, i: 46, }, D { l: 13, t: 11, i: 89, }, D { l: 14, t: 11, i: 112, }, D { l: 145, t: 11, i: 122, }, D { l: 9, t: 0, i: 370 }, D { l: 138, t: 0, i: 90, }, D { l: 136, t: 10, i: 13, }, D { l: 132, t: 0, i: 860, }, D { l: 7, t: 10, i: 642, }, D { l: 8, t: 10, i: 250, }, D { l: 11, t: 10, i: 123, }, D { l: 11, t: 10, i: 137, }, D { l: 13, t: 10, i: 48, }, D { l: 142, t: 10, i: 95, }, D { l: 135, t: 10, i: 1429, }, D { l: 137, t: 11, i: 321, }, D { l: 132, t: 0, i: 257, }, D { l: 135, t: 0, i: 2031, }, D { l: 7, t: 0, i: 1768, }, D { l: 7, t: 11, i: 1599, }, D { l: 7, t: 11, i: 1723, }, D { l: 8, t: 11, i: 79 }, D { l: 8, t: 11, i: 106, }, D { l: 8, t: 11, i: 190, }, D { l: 8, t: 11, i: 302, }, D { l: 8, t: 11, i: 383, }, D { l: 9, t: 11, i: 119, }, D { l: 9, t: 11, i: 233, }, D { l: 9, t: 11, i: 298, }, D { l: 9, t: 11, i: 419, }, D { l: 9, t: 11, i: 471, }, D { l: 10, t: 11, i: 181, }, D { l: 10, t: 11, i: 406, }, D { l: 11, t: 11, i: 57, }, D { l: 11, t: 11, i: 85, }, D { l: 11, t: 11, i: 120, }, D { l: 11, t: 11, i: 177, }, D { l: 11, t: 11, i: 296, }, D { l: 11, t: 11, i: 382, }, D { l: 11, t: 11, i: 454, }, D { l: 11, t: 11, i: 758, }, D { l: 11, t: 11, i: 999, }, D { l: 12, t: 11, i: 27, }, D { l: 12, t: 11, i: 98, }, D { l: 12, t: 11, i: 131, }, D { l: 12, t: 11, i: 245, }, D { l: 12, t: 11, i: 312, }, D { l: 12, t: 11, i: 446, }, D { l: 12, t: 11, i: 454, }, D { l: 13, t: 11, i: 25, }, D { l: 13, t: 11, i: 98, }, D { l: 13, t: 11, i: 426, }, D { l: 13, t: 11, i: 508, }, D { l: 14, t: 11, i: 6 }, D { l: 14, t: 11, i: 163, }, D { l: 14, t: 11, i: 272, }, D { l: 14, t: 11, i: 277, }, D { l: 14, t: 11, i: 370, }, D { l: 15, t: 11, i: 95, }, D { l: 15, t: 11, i: 138, }, D { l: 15, t: 11, i: 167, }, D { l: 17, t: 11, i: 18, }, D { l: 17, t: 11, i: 38, }, D { l: 20, t: 11, i: 96, }, D { l: 149, t: 11, i: 32, }, D { l: 5, t: 11, i: 722, }, D { l: 134, t: 11, i: 1759, }, D { l: 145, t: 11, i: 16, }, D { l: 6, t: 0, i: 1071, }, D { l: 134, t: 0, i: 1561, }, D { l: 10, t: 10, i: 545, }, D { l: 140, t: 10, i: 301, }, D { l: 6, t: 0, i: 83 }, D { l: 6, t: 0, i: 1733, }, D { l: 135, t: 0, i: 1389, }, D { l: 4, t: 0, i: 835 }, D { l: 135, t: 0, i: 1818, }, D { l: 133, t: 11, i: 258, }, D { l: 4, t: 10, i: 904, }, D { l: 133, t: 10, i: 794, }, D { l: 134, t: 0, i: 2006, }, D { l: 5, t: 11, i: 30 }, D { l: 7, t: 11, i: 495, }, D { l: 8, t: 11, i: 134, }, D { l: 9, t: 11, i: 788, }, D { l: 140, t: 11, i: 438, }, D { l: 135, t: 11, i: 2004, }, D { l: 137, t: 0, i: 696, }, D { l: 5, t: 11, i: 50 }, D { l: 6, t: 11, i: 439, }, D { l: 7, t: 11, i: 780, }, D { l: 135, t: 11, i: 1040, }, D { l: 7, t: 11, i: 772, }, D { l: 7, t: 11, i: 1104, }, D { l: 7, t: 11, i: 1647, }, D { l: 11, t: 11, i: 269, }, D { l: 11, t: 11, i: 539, }, D { l: 11, t: 11, i: 607, }, D { l: 11, t: 11, i: 627, }, D { l: 11, t: 11, i: 706, }, D { l: 11, t: 11, i: 975, }, D { l: 12, t: 11, i: 248, }, D { l: 12, t: 11, i: 311, }, D { l: 12, t: 11, i: 434, }, D { l: 12, t: 11, i: 600, }, D { l: 12, t: 11, i: 622, }, D { l: 13, t: 11, i: 297, }, D { l: 13, t: 11, i: 367, }, D { l: 13, t: 11, i: 485, }, D { l: 14, t: 11, i: 69, }, D { l: 14, t: 11, i: 409, }, D { l: 143, t: 11, i: 108, }, D { l: 5, t: 11, i: 1 }, D { l: 6, t: 11, i: 81 }, D { l: 138, t: 11, i: 520, }, D { l: 7, t: 0, i: 1718, }, D { l: 9, t: 0, i: 95 }, D { l: 9, t: 0, i: 274 }, D { l: 10, t: 0, i: 279, }, D { l: 10, t: 0, i: 317, }, D { l: 10, t: 0, i: 420, }, D { l: 11, t: 0, i: 303, }, D { l: 11, t: 0, i: 808, }, D { l: 12, t: 0, i: 134, }, D { l: 12, t: 0, i: 367, }, D { l: 13, t: 0, i: 149, }, D { l: 13, t: 0, i: 347, }, D { l: 14, t: 0, i: 349, }, D { l: 14, t: 0, i: 406, }, D { l: 18, t: 0, i: 22 }, D { l: 18, t: 0, i: 89 }, D { l: 18, t: 0, i: 122, }, D { l: 147, t: 0, i: 47, }, D { l: 5, t: 11, i: 482, }, D { l: 8, t: 11, i: 98 }, D { l: 9, t: 11, i: 172, }, D { l: 10, t: 11, i: 222, }, D { l: 10, t: 11, i: 700, }, D { l: 10, t: 11, i: 822, }, D { l: 11, t: 11, i: 302, }, D { l: 11, t: 11, i: 778, }, D { l: 12, t: 11, i: 50, }, D { l: 12, t: 11, i: 127, }, D { l: 12, t: 11, i: 396, }, D { l: 13, t: 11, i: 62, }, D { l: 13, t: 11, i: 328, }, D { l: 14, t: 11, i: 122, }, D { l: 147, t: 11, i: 72, }, D { l: 7, t: 10, i: 386, }, D { l: 138, t: 10, i: 713, }, D { l: 6, t: 10, i: 7 }, D { l: 6, t: 10, i: 35 }, D { l: 7, t: 10, i: 147, }, D { l: 7, t: 10, i: 1069, }, D { l: 7, t: 10, i: 1568, }, D { l: 7, t: 10, i: 1575, }, D { l: 7, t: 10, i: 1917, }, D { l: 8, t: 10, i: 43 }, D { l: 8, t: 10, i: 208, }, D { l: 9, t: 10, i: 128, }, D { l: 9, t: 10, i: 866, }, D { l: 10, t: 10, i: 20, }, D { l: 11, t: 10, i: 981, }, D { l: 147, t: 10, i: 33, }, D { l: 133, t: 0, i: 26, }, D { l: 132, t: 0, i: 550, }, D { l: 5, t: 11, i: 2 }, D { l: 7, t: 11, i: 1494, }, D { l: 136, t: 11, i: 589, }, D { l: 6, t: 11, i: 512, }, D { l: 7, t: 11, i: 797, }, D { l: 8, t: 11, i: 253, }, D { l: 9, t: 11, i: 77 }, D { l: 10, t: 11, i: 1 }, D { l: 10, t: 11, i: 129, }, D { l: 10, t: 11, i: 225, }, D { l: 11, t: 11, i: 118, }, D { l: 11, t: 11, i: 226, }, D { l: 11, t: 11, i: 251, }, D { l: 11, t: 11, i: 430, }, D { l: 11, t: 11, i: 701, }, D { l: 11, t: 11, i: 974, }, D { l: 11, t: 11, i: 982, }, D { l: 12, t: 11, i: 64, }, D { l: 12, t: 11, i: 260, }, D { l: 12, t: 11, i: 488, }, D { l: 140, t: 11, i: 690, }, D { l: 7, t: 10, i: 893, }, D { l: 141, t: 10, i: 424, }, D { l: 134, t: 0, i: 901, }, D { l: 136, t: 0, i: 822, }, D { l: 4, t: 0, i: 902 }, D { l: 5, t: 0, i: 809 }, D { l: 134, t: 0, i: 122, }, D { l: 6, t: 0, i: 807 }, D { l: 134, t: 0, i: 1366, }, D { l: 7, t: 0, i: 262 }, D { l: 5, t: 11, i: 748, }, D { l: 134, t: 11, i: 553, }, D { l: 133, t: 0, i: 620, }, D { l: 4, t: 0, i: 34 }, D { l: 5, t: 0, i: 574 }, D { l: 7, t: 0, i: 279 }, D { l: 7, t: 0, i: 1624, }, D { l: 136, t: 0, i: 601, }, D { l: 9, t: 0, i: 170 }, D { l: 6, t: 10, i: 322, }, D { l: 9, t: 10, i: 552, }, D { l: 11, t: 10, i: 274, }, D { l: 13, t: 10, i: 209, }, D { l: 13, t: 10, i: 499, }, D { l: 14, t: 10, i: 85, }, D { l: 15, t: 10, i: 126, }, D { l: 145, t: 10, i: 70, }, D { l: 132, t: 0, i: 537, }, D { l: 4, t: 11, i: 12 }, D { l: 7, t: 11, i: 420, }, D { l: 7, t: 11, i: 522, }, D { l: 7, t: 11, i: 809, }, D { l: 8, t: 11, i: 797, }, D { l: 141, t: 11, i: 88, }, D { l: 133, t: 0, i: 332, }, D { l: 8, t: 10, i: 83 }, D { l: 8, t: 10, i: 742, }, D { l: 8, t: 10, i: 817, }, D { l: 9, t: 10, i: 28 }, D { l: 9, t: 10, i: 29 }, D { l: 9, t: 10, i: 885, }, D { l: 10, t: 10, i: 387, }, D { l: 11, t: 10, i: 633, }, D { l: 11, t: 10, i: 740, }, D { l: 13, t: 10, i: 235, }, D { l: 13, t: 10, i: 254, }, D { l: 15, t: 10, i: 143, }, D { l: 143, t: 10, i: 146, }, D { l: 6, t: 0, i: 1909, }, D { l: 9, t: 0, i: 964 }, D { l: 12, t: 0, i: 822, }, D { l: 12, t: 0, i: 854, }, D { l: 12, t: 0, i: 865, }, D { l: 12, t: 0, i: 910, }, D { l: 12, t: 0, i: 938, }, D { l: 15, t: 0, i: 169, }, D { l: 15, t: 0, i: 208, }, D { l: 15, t: 0, i: 211, }, D { l: 18, t: 0, i: 205, }, D { l: 18, t: 0, i: 206, }, D { l: 18, t: 0, i: 220, }, D { l: 18, t: 0, i: 223, }, D { l: 152, t: 0, i: 24, }, D { l: 140, t: 10, i: 49, }, D { l: 5, t: 11, i: 528, }, D { l: 135, t: 11, i: 1580, }, D { l: 6, t: 0, i: 261 }, D { l: 8, t: 0, i: 182 }, D { l: 139, t: 0, i: 943, }, D { l: 134, t: 0, i: 1721, }, D { l: 4, t: 0, i: 933 }, D { l: 133, t: 0, i: 880, }, D { l: 136, t: 11, i: 321, }, D { l: 5, t: 11, i: 266, }, D { l: 9, t: 11, i: 290, }, D { l: 9, t: 11, i: 364, }, D { l: 10, t: 11, i: 293, }, D { l: 11, t: 11, i: 606, }, D { l: 142, t: 11, i: 45, }, D { l: 6, t: 0, i: 1609, }, D { l: 4, t: 11, i: 50 }, D { l: 6, t: 11, i: 510, }, D { l: 6, t: 11, i: 594, }, D { l: 9, t: 11, i: 121, }, D { l: 10, t: 11, i: 49, }, D { l: 10, t: 11, i: 412, }, D { l: 139, t: 11, i: 834, }, D { l: 7, t: 0, i: 895 }, D { l: 136, t: 11, i: 748, }, D { l: 132, t: 11, i: 466, }, D { l: 4, t: 10, i: 110, }, D { l: 10, t: 10, i: 415, }, D { l: 10, t: 10, i: 597, }, D { l: 142, t: 10, i: 206, }, D { l: 133, t: 0, i: 812, }, D { l: 135, t: 11, i: 281, }, D { l: 6, t: 0, i: 1890, }, D { l: 6, t: 0, i: 1902, }, D { l: 6, t: 0, i: 1916, }, D { l: 9, t: 0, i: 929 }, D { l: 9, t: 0, i: 942 }, D { l: 9, t: 0, i: 975 }, D { l: 9, t: 0, i: 984 }, D { l: 9, t: 0, i: 986 }, D { l: 9, t: 0, i: 1011, }, D { l: 9, t: 0, i: 1019, }, D { l: 12, t: 0, i: 804, }, D { l: 12, t: 0, i: 851, }, D { l: 12, t: 0, i: 867, }, D { l: 12, t: 0, i: 916, }, D { l: 12, t: 0, i: 923, }, D { l: 15, t: 0, i: 194, }, D { l: 15, t: 0, i: 204, }, D { l: 15, t: 0, i: 210, }, D { l: 15, t: 0, i: 222, }, D { l: 15, t: 0, i: 223, }, D { l: 15, t: 0, i: 229, }, D { l: 15, t: 0, i: 250, }, D { l: 18, t: 0, i: 179, }, D { l: 18, t: 0, i: 186, }, D { l: 18, t: 0, i: 192, }, D { l: 7, t: 10, i: 205, }, D { l: 135, t: 10, i: 2000, }, D { l: 132, t: 11, i: 667, }, D { l: 135, t: 0, i: 778, }, D { l: 4, t: 0, i: 137 }, D { l: 7, t: 0, i: 1178, }, D { l: 135, t: 0, i: 1520, }, D { l: 134, t: 0, i: 1314, }, D { l: 4, t: 11, i: 242, }, D { l: 134, t: 11, i: 333, }, D { l: 6, t: 0, i: 1661, }, D { l: 7, t: 0, i: 1975, }, D { l: 7, t: 0, i: 2009, }, D { l: 135, t: 0, i: 2011, }, D { l: 134, t: 0, i: 1591, }, D { l: 4, t: 10, i: 283, }, D { l: 135, t: 10, i: 1194, }, D { l: 11, t: 0, i: 820, }, D { l: 150, t: 0, i: 51, }, D { l: 4, t: 11, i: 39 }, D { l: 5, t: 11, i: 36 }, D { l: 7, t: 11, i: 1843, }, D { l: 8, t: 11, i: 407, }, D { l: 11, t: 11, i: 144, }, D { l: 140, t: 11, i: 523, }, D { l: 134, t: 10, i: 1720, }, D { l: 4, t: 11, i: 510, }, D { l: 7, t: 11, i: 29 }, D { l: 7, t: 11, i: 66 }, D { l: 7, t: 11, i: 1980, }, D { l: 10, t: 11, i: 487, }, D { l: 10, t: 11, i: 809, }, D { l: 146, t: 11, i: 9, }, D { l: 5, t: 0, i: 89 }, D { l: 7, t: 0, i: 1915, }, D { l: 9, t: 0, i: 185 }, D { l: 9, t: 0, i: 235 }, D { l: 10, t: 0, i: 64 }, D { l: 10, t: 0, i: 270, }, D { l: 10, t: 0, i: 403, }, D { l: 10, t: 0, i: 469, }, D { l: 10, t: 0, i: 529, }, D { l: 10, t: 0, i: 590, }, D { l: 11, t: 0, i: 140, }, D { l: 11, t: 0, i: 860, }, D { l: 13, t: 0, i: 1 }, D { l: 13, t: 0, i: 422, }, D { l: 14, t: 0, i: 341, }, D { l: 14, t: 0, i: 364, }, D { l: 17, t: 0, i: 93 }, D { l: 18, t: 0, i: 113, }, D { l: 19, t: 0, i: 97 }, D { l: 147, t: 0, i: 113, }, D { l: 133, t: 0, i: 695, }, D { l: 6, t: 0, i: 987 }, D { l: 134, t: 0, i: 1160, }, D { l: 5, t: 0, i: 6 }, D { l: 6, t: 0, i: 183 }, D { l: 7, t: 0, i: 680 }, D { l: 7, t: 0, i: 978 }, D { l: 7, t: 0, i: 1013, }, D { l: 7, t: 0, i: 1055, }, D { l: 12, t: 0, i: 230, }, D { l: 13, t: 0, i: 172, }, D { l: 146, t: 0, i: 29, }, D { l: 134, t: 11, i: 570, }, D { l: 132, t: 11, i: 787, }, D { l: 134, t: 11, i: 518, }, D { l: 6, t: 0, i: 29 }, D { l: 139, t: 0, i: 63, }, D { l: 132, t: 11, i: 516, }, D { l: 136, t: 11, i: 821, }, D { l: 132, t: 0, i: 311, }, D { l: 134, t: 0, i: 1740, }, D { l: 7, t: 0, i: 170 }, D { l: 8, t: 0, i: 90 }, D { l: 8, t: 0, i: 177 }, D { l: 8, t: 0, i: 415 }, D { l: 11, t: 0, i: 714, }, D { l: 14, t: 0, i: 281, }, D { l: 136, t: 10, i: 735, }, D { l: 134, t: 0, i: 1961, }, D { l: 135, t: 11, i: 1405, }, D { l: 4, t: 11, i: 10 }, D { l: 7, t: 11, i: 917, }, D { l: 139, t: 11, i: 786, }, D { l: 5, t: 10, i: 132, }, D { l: 9, t: 10, i: 486, }, D { l: 9, t: 10, i: 715, }, D { l: 10, t: 10, i: 458, }, D { l: 11, t: 10, i: 373, }, D { l: 11, t: 10, i: 668, }, D { l: 11, t: 10, i: 795, }, D { l: 11, t: 10, i: 897, }, D { l: 12, t: 10, i: 272, }, D { l: 12, t: 10, i: 424, }, D { l: 12, t: 10, i: 539, }, D { l: 12, t: 10, i: 558, }, D { l: 14, t: 10, i: 245, }, D { l: 14, t: 10, i: 263, }, D { l: 14, t: 10, i: 264, }, D { l: 14, t: 10, i: 393, }, D { l: 142, t: 10, i: 403, }, D { l: 11, t: 0, i: 91 }, D { l: 13, t: 0, i: 129, }, D { l: 15, t: 0, i: 101, }, D { l: 145, t: 0, i: 125, }, D { l: 135, t: 0, i: 1132, }, D { l: 4, t: 0, i: 494 }, D { l: 6, t: 0, i: 74 }, D { l: 7, t: 0, i: 44 }, D { l: 7, t: 0, i: 407 }, D { l: 12, t: 0, i: 17 }, D { l: 15, t: 0, i: 5 }, D { l: 148, t: 0, i: 11, }, D { l: 133, t: 10, i: 379, }, D { l: 5, t: 0, i: 270 }, D { l: 5, t: 11, i: 684, }, D { l: 6, t: 10, i: 89 }, D { l: 6, t: 10, i: 400, }, D { l: 7, t: 10, i: 1569, }, D { l: 7, t: 10, i: 1623, }, D { l: 7, t: 10, i: 1850, }, D { l: 8, t: 10, i: 218, }, D { l: 8, t: 10, i: 422, }, D { l: 9, t: 10, i: 570, }, D { l: 138, t: 10, i: 626, }, D { l: 4, t: 0, i: 276 }, D { l: 133, t: 0, i: 296, }, D { l: 6, t: 0, i: 1523, }, D { l: 134, t: 11, i: 27, }, D { l: 6, t: 10, i: 387, }, D { l: 7, t: 10, i: 882, }, D { l: 141, t: 10, i: 111, }, D { l: 6, t: 10, i: 224, }, D { l: 7, t: 10, i: 877, }, D { l: 137, t: 10, i: 647, }, D { l: 135, t: 10, i: 790, }, D { l: 4, t: 0, i: 7 }, D { l: 5, t: 0, i: 90 }, D { l: 5, t: 0, i: 158 }, D { l: 6, t: 0, i: 542 }, D { l: 7, t: 0, i: 221 }, D { l: 7, t: 0, i: 1574, }, D { l: 9, t: 0, i: 490 }, D { l: 10, t: 0, i: 540, }, D { l: 11, t: 0, i: 443, }, D { l: 139, t: 0, i: 757, }, D { l: 7, t: 0, i: 588 }, D { l: 9, t: 0, i: 175 }, D { l: 138, t: 0, i: 530, }, D { l: 135, t: 10, i: 394, }, D { l: 142, t: 11, i: 23, }, D { l: 134, t: 0, i: 786, }, D { l: 135, t: 0, i: 580, }, D { l: 7, t: 0, i: 88 }, D { l: 136, t: 0, i: 627, }, D { l: 5, t: 0, i: 872 }, D { l: 6, t: 0, i: 57 }, D { l: 7, t: 0, i: 471 }, D { l: 9, t: 0, i: 447 }, D { l: 137, t: 0, i: 454, }, D { l: 6, t: 11, i: 342, }, D { l: 6, t: 11, i: 496, }, D { l: 8, t: 11, i: 275, }, D { l: 137, t: 11, i: 206, }, D { l: 4, t: 11, i: 909, }, D { l: 133, t: 11, i: 940, }, D { l: 6, t: 0, i: 735 }, D { l: 132, t: 11, i: 891, }, D { l: 8, t: 0, i: 845 }, D { l: 8, t: 0, i: 916 }, D { l: 135, t: 10, i: 1409, }, D { l: 5, t: 0, i: 31 }, D { l: 134, t: 0, i: 614, }, D { l: 11, t: 0, i: 458, }, D { l: 12, t: 0, i: 15 }, D { l: 140, t: 0, i: 432, }, D { l: 8, t: 0, i: 330 }, D { l: 140, t: 0, i: 477, }, D { l: 4, t: 0, i: 530 }, D { l: 5, t: 0, i: 521 }, D { l: 7, t: 0, i: 1200, }, D { l: 10, t: 0, i: 460, }, D { l: 132, t: 11, i: 687, }, D { l: 6, t: 0, i: 424 }, D { l: 135, t: 0, i: 1866, }, D { l: 9, t: 0, i: 569 }, D { l: 12, t: 0, i: 12 }, D { l: 12, t: 0, i: 81 }, D { l: 12, t: 0, i: 319, }, D { l: 13, t: 0, i: 69 }, D { l: 14, t: 0, i: 259, }, D { l: 16, t: 0, i: 87 }, D { l: 17, t: 0, i: 1 }, D { l: 17, t: 0, i: 21 }, D { l: 17, t: 0, i: 24 }, D { l: 18, t: 0, i: 15 }, D { l: 18, t: 0, i: 56 }, D { l: 18, t: 0, i: 59 }, D { l: 18, t: 0, i: 127, }, D { l: 18, t: 0, i: 154, }, D { l: 19, t: 0, i: 19 }, D { l: 148, t: 0, i: 31, }, D { l: 7, t: 0, i: 1302, }, D { l: 136, t: 10, i: 38, }, D { l: 134, t: 11, i: 253, }, D { l: 5, t: 10, i: 261, }, D { l: 7, t: 10, i: 78 }, D { l: 7, t: 10, i: 199, }, D { l: 8, t: 10, i: 815, }, D { l: 9, t: 10, i: 126, }, D { l: 138, t: 10, i: 342, }, D { l: 5, t: 0, i: 595 }, D { l: 135, t: 0, i: 1863, }, D { l: 6, t: 11, i: 41 }, D { l: 141, t: 11, i: 160, }, D { l: 5, t: 0, i: 13 }, D { l: 134, t: 0, i: 142, }, D { l: 6, t: 0, i: 97 }, D { l: 7, t: 0, i: 116 }, D { l: 8, t: 0, i: 322 }, D { l: 8, t: 0, i: 755 }, D { l: 9, t: 0, i: 548 }, D { l: 10, t: 0, i: 714, }, D { l: 11, t: 0, i: 884, }, D { l: 13, t: 0, i: 324, }, D { l: 7, t: 11, i: 1304, }, D { l: 138, t: 11, i: 477, }, D { l: 132, t: 10, i: 628, }, D { l: 134, t: 11, i: 1718, }, D { l: 7, t: 10, i: 266, }, D { l: 136, t: 10, i: 804, }, D { l: 135, t: 10, i: 208, }, D { l: 7, t: 0, i: 1021, }, D { l: 6, t: 10, i: 79 }, D { l: 135, t: 10, i: 1519, }, D { l: 7, t: 0, i: 1472, }, D { l: 135, t: 0, i: 1554, }, D { l: 6, t: 11, i: 362, }, D { l: 146, t: 11, i: 51, }, D { l: 7, t: 0, i: 1071, }, D { l: 7, t: 0, i: 1541, }, D { l: 7, t: 0, i: 1767, }, D { l: 7, t: 0, i: 1806, }, D { l: 11, t: 0, i: 162, }, D { l: 11, t: 0, i: 242, }, D { l: 11, t: 0, i: 452, }, D { l: 12, t: 0, i: 605, }, D { l: 15, t: 0, i: 26 }, D { l: 144, t: 0, i: 44, }, D { l: 136, t: 10, i: 741, }, D { l: 133, t: 11, i: 115, }, D { l: 145, t: 0, i: 115, }, D { l: 134, t: 10, i: 376, }, D { l: 6, t: 0, i: 1406, }, D { l: 134, t: 0, i: 1543, }, D { l: 5, t: 11, i: 193, }, D { l: 12, t: 11, i: 178, }, D { l: 13, t: 11, i: 130, }, D { l: 145, t: 11, i: 84, }, D { l: 135, t: 0, i: 1111, }, D { l: 8, t: 0, i: 1 }, D { l: 9, t: 0, i: 650 }, D { l: 10, t: 0, i: 326, }, D { l: 5, t: 11, i: 705, }, D { l: 137, t: 11, i: 606, }, D { l: 5, t: 0, i: 488 }, D { l: 6, t: 0, i: 527 }, D { l: 7, t: 0, i: 489 }, D { l: 7, t: 0, i: 1636, }, D { l: 8, t: 0, i: 121 }, D { l: 8, t: 0, i: 144 }, D { l: 8, t: 0, i: 359 }, D { l: 9, t: 0, i: 193 }, D { l: 9, t: 0, i: 241 }, D { l: 9, t: 0, i: 336 }, D { l: 9, t: 0, i: 882 }, D { l: 11, t: 0, i: 266, }, D { l: 11, t: 0, i: 372, }, D { l: 11, t: 0, i: 944, }, D { l: 12, t: 0, i: 401, }, D { l: 140, t: 0, i: 641, }, D { l: 135, t: 11, i: 174, }, D { l: 6, t: 0, i: 267 }, D { l: 7, t: 10, i: 244, }, D { l: 7, t: 10, i: 632, }, D { l: 7, t: 10, i: 1609, }, D { l: 8, t: 10, i: 178, }, D { l: 8, t: 10, i: 638, }, D { l: 141, t: 10, i: 58, }, D { l: 134, t: 0, i: 1983, }, D { l: 134, t: 0, i: 1155, }, D { l: 134, t: 0, i: 1575, }, D { l: 134, t: 0, i: 1438, }, D { l: 9, t: 0, i: 31 }, D { l: 10, t: 0, i: 244, }, D { l: 10, t: 0, i: 699, }, D { l: 12, t: 0, i: 149, }, D { l: 141, t: 0, i: 497, }, D { l: 133, t: 0, i: 377, }, D { l: 4, t: 11, i: 122, }, D { l: 5, t: 11, i: 796, }, D { l: 5, t: 11, i: 952, }, D { l: 6, t: 11, i: 1660, }, D { l: 6, t: 11, i: 1671, }, D { l: 8, t: 11, i: 567, }, D { l: 9, t: 11, i: 687, }, D { l: 9, t: 11, i: 742, }, D { l: 10, t: 11, i: 686, }, D { l: 11, t: 11, i: 356, }, D { l: 11, t: 11, i: 682, }, D { l: 140, t: 11, i: 281, }, D { l: 145, t: 0, i: 101, }, D { l: 11, t: 11, i: 0 }, D { l: 144, t: 11, i: 78, }, D { l: 5, t: 11, i: 179, }, D { l: 5, t: 10, i: 791, }, D { l: 7, t: 11, i: 1095, }, D { l: 135, t: 11, i: 1213, }, D { l: 8, t: 11, i: 372, }, D { l: 9, t: 11, i: 122, }, D { l: 138, t: 11, i: 175, }, D { l: 7, t: 10, i: 686, }, D { l: 8, t: 10, i: 33 }, D { l: 8, t: 10, i: 238, }, D { l: 10, t: 10, i: 616, }, D { l: 11, t: 10, i: 467, }, D { l: 11, t: 10, i: 881, }, D { l: 13, t: 10, i: 217, }, D { l: 13, t: 10, i: 253, }, D { l: 142, t: 10, i: 268, }, D { l: 9, t: 0, i: 476 }, D { l: 4, t: 11, i: 66 }, D { l: 7, t: 11, i: 722, }, D { l: 135, t: 11, i: 904, }, D { l: 7, t: 11, i: 352, }, D { l: 137, t: 11, i: 684, }, D { l: 135, t: 0, i: 2023, }, D { l: 135, t: 0, i: 1836, }, D { l: 132, t: 10, i: 447, }, D { l: 5, t: 0, i: 843 }, D { l: 144, t: 0, i: 35, }, D { l: 137, t: 11, i: 779, }, D { l: 141, t: 11, i: 35, }, D { l: 4, t: 10, i: 128, }, D { l: 5, t: 10, i: 415, }, D { l: 6, t: 10, i: 462, }, D { l: 7, t: 10, i: 294, }, D { l: 7, t: 10, i: 578, }, D { l: 10, t: 10, i: 710, }, D { l: 139, t: 10, i: 86, }, D { l: 132, t: 0, i: 554, }, D { l: 133, t: 0, i: 536, }, D { l: 136, t: 10, i: 587, }, D { l: 5, t: 0, i: 207 }, D { l: 9, t: 0, i: 79 }, D { l: 11, t: 0, i: 625, }, D { l: 145, t: 0, i: 7 }, D { l: 7, t: 0, i: 1371, }, D { l: 6, t: 10, i: 427, }, D { l: 138, t: 10, i: 692, }, D { l: 4, t: 0, i: 424 }, D { l: 4, t: 10, i: 195, }, D { l: 135, t: 10, i: 802, }, D { l: 8, t: 0, i: 785 }, D { l: 133, t: 11, i: 564, }, D { l: 135, t: 0, i: 336, }, D { l: 4, t: 0, i: 896 }, D { l: 6, t: 0, i: 1777, }, D { l: 134, t: 11, i: 556, }, D { l: 137, t: 11, i: 103, }, D { l: 134, t: 10, i: 1683, }, D { l: 7, t: 11, i: 544, }, D { l: 8, t: 11, i: 719, }, D { l: 138, t: 11, i: 61, }, D { l: 138, t: 10, i: 472, }, D { l: 4, t: 11, i: 5 }, D { l: 5, t: 11, i: 498, }, D { l: 136, t: 11, i: 637, }, D { l: 7, t: 0, i: 750 }, D { l: 9, t: 0, i: 223 }, D { l: 11, t: 0, i: 27 }, D { l: 11, t: 0, i: 466, }, D { l: 12, t: 0, i: 624, }, D { l: 14, t: 0, i: 265, }, D { l: 146, t: 0, i: 61, }, D { l: 12, t: 0, i: 238, }, D { l: 18, t: 0, i: 155, }, D { l: 12, t: 11, i: 238, }, D { l: 146, t: 11, i: 155, }, D { l: 151, t: 10, i: 28, }, D { l: 133, t: 11, i: 927, }, D { l: 12, t: 0, i: 383, }, D { l: 5, t: 10, i: 3 }, D { l: 8, t: 10, i: 578, }, D { l: 9, t: 10, i: 118, }, D { l: 10, t: 10, i: 705, }, D { l: 141, t: 10, i: 279, }, D { l: 4, t: 11, i: 893, }, D { l: 5, t: 11, i: 780, }, D { l: 133, t: 11, i: 893, }, D { l: 4, t: 0, i: 603 }, D { l: 133, t: 0, i: 661, }, D { l: 4, t: 0, i: 11 }, D { l: 6, t: 0, i: 128 }, D { l: 7, t: 0, i: 231 }, D { l: 7, t: 0, i: 1533, }, D { l: 10, t: 0, i: 725, }, D { l: 5, t: 10, i: 229, }, D { l: 5, t: 11, i: 238, }, D { l: 135, t: 11, i: 1350, }, D { l: 8, t: 10, i: 102, }, D { l: 10, t: 10, i: 578, }, D { l: 10, t: 10, i: 672, }, D { l: 12, t: 10, i: 496, }, D { l: 13, t: 10, i: 408, }, D { l: 14, t: 10, i: 121, }, D { l: 145, t: 10, i: 106, }, D { l: 132, t: 0, i: 476, }, D { l: 134, t: 0, i: 1552, }, D { l: 134, t: 11, i: 1729, }, D { l: 8, t: 10, i: 115, }, D { l: 8, t: 10, i: 350, }, D { l: 9, t: 10, i: 489, }, D { l: 10, t: 10, i: 128, }, D { l: 11, t: 10, i: 306, }, D { l: 12, t: 10, i: 373, }, D { l: 14, t: 10, i: 30, }, D { l: 17, t: 10, i: 79, }, D { l: 19, t: 10, i: 80, }, D { l: 150, t: 10, i: 55, }, D { l: 135, t: 0, i: 1807, }, D { l: 4, t: 0, i: 680 }, D { l: 4, t: 11, i: 60 }, D { l: 7, t: 11, i: 760, }, D { l: 7, t: 11, i: 1800, }, D { l: 8, t: 11, i: 314, }, D { l: 9, t: 11, i: 700, }, D { l: 139, t: 11, i: 487, }, D { l: 4, t: 10, i: 230, }, D { l: 5, t: 10, i: 702, }, D { l: 148, t: 11, i: 94, }, D { l: 132, t: 11, i: 228, }, D { l: 139, t: 0, i: 435, }, D { l: 9, t: 0, i: 20 }, D { l: 10, t: 0, i: 324, }, D { l: 10, t: 0, i: 807, }, D { l: 139, t: 0, i: 488, }, D { l: 6, t: 10, i: 1728, }, D { l: 136, t: 11, i: 419, }, D { l: 4, t: 10, i: 484, }, D { l: 18, t: 10, i: 26, }, D { l: 19, t: 10, i: 42, }, D { l: 20, t: 10, i: 43, }, D { l: 21, t: 10, i: 0 }, D { l: 23, t: 10, i: 27, }, D { l: 152, t: 10, i: 14, }, D { l: 135, t: 0, i: 1431, }, D { l: 133, t: 11, i: 828, }, D { l: 5, t: 0, i: 112 }, D { l: 6, t: 0, i: 103 }, D { l: 6, t: 0, i: 150 }, D { l: 7, t: 0, i: 1303, }, D { l: 9, t: 0, i: 292 }, D { l: 10, t: 0, i: 481, }, D { l: 20, t: 0, i: 13 }, D { l: 7, t: 11, i: 176, }, D { l: 7, t: 11, i: 178, }, D { l: 7, t: 11, i: 1110, }, D { l: 10, t: 11, i: 481, }, D { l: 148, t: 11, i: 13, }, D { l: 138, t: 0, i: 356, }, D { l: 4, t: 11, i: 51 }, D { l: 5, t: 11, i: 39 }, D { l: 6, t: 11, i: 4 }, D { l: 7, t: 11, i: 591, }, D { l: 7, t: 11, i: 849, }, D { l: 7, t: 11, i: 951, }, D { l: 7, t: 11, i: 1129, }, D { l: 7, t: 11, i: 1613, }, D { l: 7, t: 11, i: 1760, }, D { l: 7, t: 11, i: 1988, }, D { l: 9, t: 11, i: 434, }, D { l: 10, t: 11, i: 754, }, D { l: 11, t: 11, i: 25, }, D { l: 11, t: 11, i: 37, }, D { l: 139, t: 11, i: 414, }, D { l: 6, t: 0, i: 1963, }, D { l: 134, t: 0, i: 2000, }, D { l: 132, t: 10, i: 633, }, D { l: 6, t: 0, i: 1244, }, D { l: 133, t: 11, i: 902, }, D { l: 135, t: 11, i: 928, }, D { l: 140, t: 0, i: 18, }, D { l: 138, t: 0, i: 204, }, D { l: 135, t: 11, i: 1173, }, D { l: 134, t: 0, i: 867, }, D { l: 4, t: 0, i: 708 }, D { l: 8, t: 0, i: 15 }, D { l: 9, t: 0, i: 50 }, D { l: 9, t: 0, i: 386 }, D { l: 11, t: 0, i: 18 }, D { l: 11, t: 0, i: 529, }, D { l: 140, t: 0, i: 228, }, D { l: 134, t: 11, i: 270, }, D { l: 4, t: 0, i: 563 }, D { l: 7, t: 0, i: 109 }, D { l: 7, t: 0, i: 592 }, D { l: 7, t: 0, i: 637 }, D { l: 7, t: 0, i: 770 }, D { l: 8, t: 0, i: 463 }, D { l: 9, t: 0, i: 60 }, D { l: 9, t: 0, i: 335 }, D { l: 9, t: 0, i: 904 }, D { l: 10, t: 0, i: 73 }, D { l: 11, t: 0, i: 434, }, D { l: 12, t: 0, i: 585, }, D { l: 13, t: 0, i: 331, }, D { l: 18, t: 0, i: 110, }, D { l: 148, t: 0, i: 60, }, D { l: 132, t: 0, i: 502, }, D { l: 14, t: 11, i: 359, }, D { l: 19, t: 11, i: 52, }, D { l: 148, t: 11, i: 47, }, D { l: 6, t: 11, i: 377, }, D { l: 7, t: 11, i: 1025, }, D { l: 9, t: 11, i: 613, }, D { l: 145, t: 11, i: 104, }, D { l: 6, t: 0, i: 347 }, D { l: 10, t: 0, i: 161, }, D { l: 5, t: 10, i: 70 }, D { l: 5, t: 10, i: 622, }, D { l: 6, t: 10, i: 334, }, D { l: 7, t: 10, i: 1032, }, D { l: 9, t: 10, i: 171, }, D { l: 11, t: 10, i: 26, }, D { l: 11, t: 10, i: 213, }, D { l: 11, t: 10, i: 637, }, D { l: 11, t: 10, i: 707, }, D { l: 12, t: 10, i: 202, }, D { l: 12, t: 10, i: 380, }, D { l: 13, t: 10, i: 226, }, D { l: 13, t: 10, i: 355, }, D { l: 14, t: 10, i: 222, }, D { l: 145, t: 10, i: 42, }, D { l: 132, t: 11, i: 416, }, D { l: 4, t: 0, i: 33 }, D { l: 5, t: 0, i: 102 }, D { l: 6, t: 0, i: 284 }, D { l: 7, t: 0, i: 1079, }, D { l: 7, t: 0, i: 1423, }, D { l: 7, t: 0, i: 1702, }, D { l: 8, t: 0, i: 470 }, D { l: 9, t: 0, i: 554 }, D { l: 9, t: 0, i: 723 }, D { l: 11, t: 0, i: 333, }, D { l: 142, t: 11, i: 372, }, D { l: 5, t: 11, i: 152, }, D { l: 5, t: 11, i: 197, }, D { l: 7, t: 11, i: 340, }, D { l: 7, t: 11, i: 867, }, D { l: 10, t: 11, i: 548, }, D { l: 10, t: 11, i: 581, }, D { l: 11, t: 11, i: 6 }, D { l: 12, t: 11, i: 3 }, D { l: 12, t: 11, i: 19, }, D { l: 14, t: 11, i: 110, }, D { l: 142, t: 11, i: 289, }, D { l: 7, t: 0, i: 246 }, D { l: 135, t: 0, i: 840, }, D { l: 6, t: 0, i: 10 }, D { l: 8, t: 0, i: 571 }, D { l: 9, t: 0, i: 739 }, D { l: 143, t: 0, i: 91, }, D { l: 6, t: 0, i: 465 }, D { l: 7, t: 0, i: 1465, }, D { l: 4, t: 10, i: 23 }, D { l: 4, t: 10, i: 141, }, D { l: 5, t: 10, i: 313, }, D { l: 5, t: 10, i: 1014, }, D { l: 6, t: 10, i: 50 }, D { l: 7, t: 10, i: 142, }, D { l: 7, t: 10, i: 559, }, D { l: 8, t: 10, i: 640, }, D { l: 9, t: 10, i: 460, }, D { l: 9, t: 10, i: 783, }, D { l: 11, t: 10, i: 741, }, D { l: 12, t: 10, i: 183, }, D { l: 141, t: 10, i: 488, }, D { l: 133, t: 0, i: 626, }, D { l: 136, t: 0, i: 614, }, D { l: 138, t: 0, i: 237, }, D { l: 7, t: 11, i: 34 }, D { l: 7, t: 11, i: 190, }, D { l: 8, t: 11, i: 28 }, D { l: 8, t: 11, i: 141, }, D { l: 8, t: 11, i: 444, }, D { l: 8, t: 11, i: 811, }, D { l: 9, t: 11, i: 468, }, D { l: 11, t: 11, i: 334, }, D { l: 12, t: 11, i: 24, }, D { l: 12, t: 11, i: 386, }, D { l: 140, t: 11, i: 576, }, D { l: 133, t: 11, i: 757, }, D { l: 5, t: 0, i: 18 }, D { l: 6, t: 0, i: 526 }, D { l: 13, t: 0, i: 24 }, D { l: 13, t: 0, i: 110, }, D { l: 19, t: 0, i: 5 }, D { l: 147, t: 0, i: 44, }, D { l: 6, t: 0, i: 506 }, D { l: 134, t: 11, i: 506, }, D { l: 135, t: 11, i: 1553, }, D { l: 4, t: 0, i: 309 }, D { l: 5, t: 0, i: 462 }, D { l: 7, t: 0, i: 970 }, D { l: 7, t: 0, i: 1097, }, D { l: 22, t: 0, i: 30 }, D { l: 22, t: 0, i: 33 }, D { l: 7, t: 11, i: 1385, }, D { l: 11, t: 11, i: 582, }, D { l: 11, t: 11, i: 650, }, D { l: 11, t: 11, i: 901, }, D { l: 11, t: 11, i: 949, }, D { l: 12, t: 11, i: 232, }, D { l: 12, t: 11, i: 236, }, D { l: 13, t: 11, i: 413, }, D { l: 13, t: 11, i: 501, }, D { l: 146, t: 11, i: 116, }, D { l: 9, t: 0, i: 140 }, D { l: 5, t: 10, i: 222, }, D { l: 138, t: 10, i: 534, }, D { l: 6, t: 0, i: 1056, }, D { l: 137, t: 10, i: 906, }, D { l: 134, t: 0, i: 1704, }, D { l: 138, t: 10, i: 503, }, D { l: 134, t: 0, i: 1036, }, D { l: 5, t: 10, i: 154, }, D { l: 7, t: 10, i: 1491, }, D { l: 10, t: 10, i: 379, }, D { l: 138, t: 10, i: 485, }, D { l: 4, t: 11, i: 383, }, D { l: 133, t: 10, i: 716, }, D { l: 134, t: 0, i: 1315, }, D { l: 5, t: 0, i: 86 }, D { l: 7, t: 0, i: 743 }, D { l: 9, t: 0, i: 85 }, D { l: 10, t: 0, i: 281, }, D { l: 10, t: 0, i: 432, }, D { l: 11, t: 0, i: 825, }, D { l: 12, t: 0, i: 251, }, D { l: 13, t: 0, i: 118, }, D { l: 142, t: 0, i: 378, }, D { l: 8, t: 0, i: 264 }, D { l: 4, t: 10, i: 91 }, D { l: 5, t: 10, i: 388, }, D { l: 5, t: 10, i: 845, }, D { l: 6, t: 10, i: 206, }, D { l: 6, t: 10, i: 252, }, D { l: 6, t: 10, i: 365, }, D { l: 7, t: 10, i: 136, }, D { l: 7, t: 10, i: 531, }, D { l: 136, t: 10, i: 621, }, D { l: 5, t: 0, i: 524 }, D { l: 133, t: 0, i: 744, }, D { l: 5, t: 11, i: 277, }, D { l: 141, t: 11, i: 247, }, D { l: 132, t: 11, i: 435, }, D { l: 10, t: 0, i: 107, }, D { l: 140, t: 0, i: 436, }, D { l: 132, t: 0, i: 927, }, D { l: 10, t: 0, i: 123, }, D { l: 12, t: 0, i: 670, }, D { l: 146, t: 0, i: 94, }, D { l: 7, t: 0, i: 1149, }, D { l: 9, t: 0, i: 156 }, D { l: 138, t: 0, i: 957, }, D { l: 5, t: 11, i: 265, }, D { l: 6, t: 11, i: 212, }, D { l: 135, t: 11, i: 28, }, D { l: 133, t: 0, i: 778, }, D { l: 133, t: 0, i: 502, }, D { l: 8, t: 0, i: 196 }, D { l: 10, t: 0, i: 283, }, D { l: 139, t: 0, i: 406, }, D { l: 135, t: 10, i: 576, }, D { l: 136, t: 11, i: 535, }, D { l: 134, t: 0, i: 1312, }, D { l: 5, t: 10, i: 771, }, D { l: 5, t: 10, i: 863, }, D { l: 5, t: 10, i: 898, }, D { l: 6, t: 10, i: 1632, }, D { l: 6, t: 10, i: 1644, }, D { l: 134, t: 10, i: 1780, }, D { l: 5, t: 0, i: 855 }, D { l: 5, t: 10, i: 331, }, D { l: 135, t: 11, i: 1487, }, D { l: 132, t: 11, i: 702, }, D { l: 5, t: 11, i: 808, }, D { l: 135, t: 11, i: 2045, }, D { l: 7, t: 0, i: 1400, }, D { l: 9, t: 0, i: 446 }, D { l: 138, t: 0, i: 45, }, D { l: 140, t: 10, i: 632, }, D { l: 132, t: 0, i: 1003, }, D { l: 5, t: 11, i: 166, }, D { l: 8, t: 11, i: 739, }, D { l: 140, t: 11, i: 511, }, D { l: 5, t: 10, i: 107, }, D { l: 7, t: 10, i: 201, }, D { l: 136, t: 10, i: 518, }, D { l: 6, t: 10, i: 446, }, D { l: 135, t: 10, i: 1817, }, D { l: 134, t: 0, i: 1532, }, D { l: 134, t: 0, i: 1097, }, D { l: 4, t: 11, i: 119, }, D { l: 5, t: 11, i: 170, }, D { l: 5, t: 11, i: 447, }, D { l: 7, t: 11, i: 1708, }, D { l: 7, t: 11, i: 1889, }, D { l: 9, t: 11, i: 357, }, D { l: 9, t: 11, i: 719, }, D { l: 12, t: 11, i: 486, }, D { l: 140, t: 11, i: 596, }, D { l: 9, t: 10, i: 851, }, D { l: 141, t: 10, i: 510, }, D { l: 7, t: 0, i: 612 }, D { l: 8, t: 0, i: 545 }, D { l: 8, t: 0, i: 568 }, D { l: 8, t: 0, i: 642 }, D { l: 9, t: 0, i: 717 }, D { l: 10, t: 0, i: 541, }, D { l: 10, t: 0, i: 763, }, D { l: 11, t: 0, i: 449, }, D { l: 12, t: 0, i: 489, }, D { l: 13, t: 0, i: 153, }, D { l: 13, t: 0, i: 296, }, D { l: 14, t: 0, i: 138, }, D { l: 14, t: 0, i: 392, }, D { l: 15, t: 0, i: 50 }, D { l: 16, t: 0, i: 6 }, D { l: 16, t: 0, i: 12 }, D { l: 20, t: 0, i: 9 }, D { l: 132, t: 10, i: 504, }, D { l: 4, t: 11, i: 450, }, D { l: 135, t: 11, i: 1158, }, D { l: 11, t: 0, i: 54 }, D { l: 13, t: 0, i: 173, }, D { l: 13, t: 0, i: 294, }, D { l: 5, t: 10, i: 883, }, D { l: 5, t: 10, i: 975, }, D { l: 8, t: 10, i: 392, }, D { l: 148, t: 10, i: 7, }, D { l: 13, t: 0, i: 455, }, D { l: 15, t: 0, i: 99 }, D { l: 15, t: 0, i: 129, }, D { l: 144, t: 0, i: 68, }, D { l: 135, t: 0, i: 172, }, D { l: 132, t: 11, i: 754, }, D { l: 5, t: 10, i: 922, }, D { l: 134, t: 10, i: 1707, }, D { l: 134, t: 0, i: 1029, }, D { l: 17, t: 11, i: 39, }, D { l: 148, t: 11, i: 36, }, D { l: 4, t: 0, i: 568 }, D { l: 5, t: 10, i: 993, }, D { l: 7, t: 10, i: 515, }, D { l: 137, t: 10, i: 91, }, D { l: 132, t: 0, i: 732, }, D { l: 10, t: 0, i: 617, }, D { l: 138, t: 11, i: 617, }, D { l: 134, t: 0, i: 974, }, D { l: 7, t: 0, i: 989 }, D { l: 10, t: 0, i: 377, }, D { l: 12, t: 0, i: 363, }, D { l: 13, t: 0, i: 68 }, D { l: 13, t: 0, i: 94 }, D { l: 14, t: 0, i: 108, }, D { l: 142, t: 0, i: 306, }, D { l: 136, t: 0, i: 733, }, D { l: 132, t: 0, i: 428, }, D { l: 7, t: 0, i: 1789, }, D { l: 135, t: 11, i: 1062, }, D { l: 7, t: 0, i: 2015, }, D { l: 140, t: 0, i: 665, }, D { l: 135, t: 10, i: 1433, }, D { l: 5, t: 0, i: 287 }, D { l: 7, t: 10, i: 921, }, D { l: 8, t: 10, i: 580, }, D { l: 8, t: 10, i: 593, }, D { l: 8, t: 10, i: 630, }, D { l: 138, t: 10, i: 28, }, D { l: 138, t: 0, i: 806, }, D { l: 4, t: 10, i: 911, }, D { l: 5, t: 10, i: 867, }, D { l: 5, t: 10, i: 1013, }, D { l: 7, t: 10, i: 2034, }, D { l: 8, t: 10, i: 798, }, D { l: 136, t: 10, i: 813, }, D { l: 134, t: 0, i: 1539, }, D { l: 8, t: 11, i: 523, }, D { l: 150, t: 11, i: 34, }, D { l: 135, t: 11, i: 740, }, D { l: 7, t: 11, i: 238, }, D { l: 7, t: 11, i: 2033, }, D { l: 8, t: 11, i: 120, }, D { l: 8, t: 11, i: 188, }, D { l: 8, t: 11, i: 659, }, D { l: 9, t: 11, i: 598, }, D { l: 10, t: 11, i: 466, }, D { l: 12, t: 11, i: 342, }, D { l: 12, t: 11, i: 588, }, D { l: 13, t: 11, i: 503, }, D { l: 14, t: 11, i: 246, }, D { l: 143, t: 11, i: 92, }, D { l: 7, t: 0, i: 1563, }, D { l: 141, t: 0, i: 182, }, D { l: 5, t: 10, i: 135, }, D { l: 6, t: 10, i: 519, }, D { l: 7, t: 10, i: 1722, }, D { l: 10, t: 10, i: 271, }, D { l: 11, t: 10, i: 261, }, D { l: 145, t: 10, i: 54, }, D { l: 14, t: 10, i: 338, }, D { l: 148, t: 10, i: 81, }, D { l: 7, t: 0, i: 484 }, D { l: 4, t: 10, i: 300, }, D { l: 133, t: 10, i: 436, }, D { l: 145, t: 11, i: 114, }, D { l: 6, t: 0, i: 1623, }, D { l: 134, t: 0, i: 1681, }, D { l: 133, t: 11, i: 640, }, D { l: 4, t: 11, i: 201, }, D { l: 7, t: 11, i: 1744, }, D { l: 8, t: 11, i: 602, }, D { l: 11, t: 11, i: 247, }, D { l: 11, t: 11, i: 826, }, D { l: 145, t: 11, i: 65, }, D { l: 8, t: 11, i: 164, }, D { l: 146, t: 11, i: 62, }, D { l: 6, t: 0, i: 1833, }, D { l: 6, t: 0, i: 1861, }, D { l: 136, t: 0, i: 878, }, D { l: 134, t: 0, i: 1569, }, D { l: 8, t: 10, i: 357, }, D { l: 10, t: 10, i: 745, }, D { l: 14, t: 10, i: 426, }, D { l: 17, t: 10, i: 94, }, D { l: 147, t: 10, i: 57, }, D { l: 12, t: 0, i: 93 }, D { l: 12, t: 0, i: 501, }, D { l: 13, t: 0, i: 362, }, D { l: 14, t: 0, i: 151, }, D { l: 15, t: 0, i: 40 }, D { l: 15, t: 0, i: 59 }, D { l: 16, t: 0, i: 46 }, D { l: 17, t: 0, i: 25 }, D { l: 18, t: 0, i: 14 }, D { l: 18, t: 0, i: 134, }, D { l: 19, t: 0, i: 25 }, D { l: 19, t: 0, i: 69 }, D { l: 20, t: 0, i: 16 }, D { l: 20, t: 0, i: 19 }, D { l: 20, t: 0, i: 66 }, D { l: 21, t: 0, i: 23 }, D { l: 21, t: 0, i: 25 }, D { l: 150, t: 0, i: 42, }, D { l: 6, t: 0, i: 1748, }, D { l: 8, t: 0, i: 715 }, D { l: 9, t: 0, i: 802 }, D { l: 10, t: 0, i: 46 }, D { l: 10, t: 0, i: 819, }, D { l: 13, t: 0, i: 308, }, D { l: 14, t: 0, i: 351, }, D { l: 14, t: 0, i: 363, }, D { l: 146, t: 0, i: 67, }, D { l: 132, t: 0, i: 994, }, D { l: 4, t: 0, i: 63 }, D { l: 133, t: 0, i: 347, }, D { l: 132, t: 0, i: 591, }, D { l: 133, t: 0, i: 749, }, D { l: 7, t: 11, i: 1577, }, D { l: 10, t: 11, i: 304, }, D { l: 10, t: 11, i: 549, }, D { l: 11, t: 11, i: 424, }, D { l: 12, t: 11, i: 365, }, D { l: 13, t: 11, i: 220, }, D { l: 13, t: 11, i: 240, }, D { l: 142, t: 11, i: 33, }, D { l: 133, t: 0, i: 366, }, D { l: 7, t: 0, i: 557 }, D { l: 12, t: 0, i: 547, }, D { l: 14, t: 0, i: 86 }, D { l: 133, t: 10, i: 387, }, D { l: 135, t: 0, i: 1747, }, D { l: 132, t: 11, i: 907, }, D { l: 5, t: 11, i: 100, }, D { l: 10, t: 11, i: 329, }, D { l: 12, t: 11, i: 416, }, D { l: 149, t: 11, i: 29, }, D { l: 4, t: 10, i: 6 }, D { l: 5, t: 10, i: 708, }, D { l: 136, t: 10, i: 75, }, D { l: 7, t: 10, i: 1351, }, D { l: 9, t: 10, i: 581, }, D { l: 10, t: 10, i: 639, }, D { l: 11, t: 10, i: 453, }, D { l: 140, t: 10, i: 584, }, D { l: 7, t: 0, i: 89 }, D { l: 132, t: 10, i: 303, }, D { l: 138, t: 10, i: 772, }, D { l: 132, t: 11, i: 176, }, D { l: 5, t: 11, i: 636, }, D { l: 5, t: 11, i: 998, }, D { l: 8, t: 11, i: 26 }, D { l: 137, t: 11, i: 358, }, D { l: 7, t: 11, i: 9 }, D { l: 7, t: 11, i: 1508, }, D { l: 9, t: 11, i: 317, }, D { l: 10, t: 11, i: 210, }, D { l: 10, t: 11, i: 292, }, D { l: 10, t: 11, i: 533, }, D { l: 11, t: 11, i: 555, }, D { l: 12, t: 11, i: 526, }, D { l: 12, t: 11, i: 607, }, D { l: 13, t: 11, i: 263, }, D { l: 13, t: 11, i: 459, }, D { l: 142, t: 11, i: 271, }, D { l: 134, t: 0, i: 1463, }, D { l: 6, t: 0, i: 772 }, D { l: 6, t: 0, i: 1137, }, D { l: 139, t: 11, i: 595, }, D { l: 7, t: 0, i: 977 }, D { l: 139, t: 11, i: 66, }, D { l: 138, t: 0, i: 893, }, D { l: 20, t: 0, i: 48 }, D { l: 148, t: 11, i: 48, }, D { l: 5, t: 0, i: 824 }, D { l: 133, t: 0, i: 941, }, D { l: 134, t: 11, i: 295, }, D { l: 7, t: 0, i: 1543, }, D { l: 7, t: 0, i: 1785, }, D { l: 10, t: 0, i: 690, }, D { l: 4, t: 10, i: 106, }, D { l: 139, t: 10, i: 717, }, D { l: 7, t: 0, i: 440 }, D { l: 8, t: 0, i: 230 }, D { l: 139, t: 0, i: 106, }, D { l: 5, t: 10, i: 890, }, D { l: 133, t: 10, i: 988, }, D { l: 6, t: 10, i: 626, }, D { l: 142, t: 10, i: 431, }, D { l: 10, t: 11, i: 127, }, D { l: 141, t: 11, i: 27, }, D { l: 17, t: 0, i: 32 }, D { l: 10, t: 10, i: 706, }, D { l: 150, t: 10, i: 44, }, D { l: 132, t: 0, i: 216, }, D { l: 137, t: 0, i: 332, }, D { l: 4, t: 10, i: 698, }, D { l: 136, t: 11, i: 119, }, D { l: 139, t: 11, i: 267, }, D { l: 138, t: 10, i: 17, }, D { l: 11, t: 11, i: 526, }, D { l: 11, t: 11, i: 939, }, D { l: 141, t: 11, i: 290, }, D { l: 7, t: 11, i: 1167, }, D { l: 11, t: 11, i: 934, }, D { l: 13, t: 11, i: 391, }, D { l: 145, t: 11, i: 76, }, D { l: 139, t: 11, i: 39, }, D { l: 134, t: 10, i: 84, }, D { l: 4, t: 0, i: 914 }, D { l: 5, t: 0, i: 800 }, D { l: 133, t: 0, i: 852, }, D { l: 10, t: 0, i: 416, }, D { l: 141, t: 0, i: 115, }, D { l: 7, t: 0, i: 564 }, D { l: 142, t: 0, i: 168, }, D { l: 4, t: 0, i: 918 }, D { l: 133, t: 0, i: 876, }, D { l: 134, t: 0, i: 1764, }, D { l: 152, t: 0, i: 3 }, D { l: 4, t: 0, i: 92 }, D { l: 5, t: 0, i: 274 }, D { l: 7, t: 11, i: 126, }, D { l: 136, t: 11, i: 84, }, D { l: 140, t: 10, i: 498, }, D { l: 136, t: 11, i: 790, }, D { l: 8, t: 0, i: 501 }, D { l: 5, t: 10, i: 986, }, D { l: 6, t: 10, i: 130, }, D { l: 7, t: 10, i: 1582, }, D { l: 8, t: 10, i: 458, }, D { l: 10, t: 10, i: 101, }, D { l: 10, t: 10, i: 318, }, D { l: 138, t: 10, i: 823, }, D { l: 6, t: 11, i: 64 }, D { l: 12, t: 11, i: 377, }, D { l: 141, t: 11, i: 309, }, D { l: 5, t: 0, i: 743 }, D { l: 138, t: 0, i: 851, }, D { l: 4, t: 0, i: 49 }, D { l: 7, t: 0, i: 280 }, D { l: 135, t: 0, i: 1633, }, D { l: 134, t: 0, i: 879, }, D { l: 136, t: 0, i: 47, }, D { l: 7, t: 10, i: 1644, }, D { l: 137, t: 10, i: 129, }, D { l: 132, t: 0, i: 865, }, D { l: 134, t: 0, i: 1202, }, D { l: 9, t: 11, i: 34 }, D { l: 139, t: 11, i: 484, }, D { l: 135, t: 10, i: 997, }, D { l: 5, t: 0, i: 272 }, D { l: 5, t: 0, i: 908 }, D { l: 5, t: 0, i: 942 }, D { l: 8, t: 0, i: 197 }, D { l: 9, t: 0, i: 47 }, D { l: 11, t: 0, i: 538, }, D { l: 139, t: 0, i: 742, }, D { l: 6, t: 11, i: 1700, }, D { l: 7, t: 11, i: 26 }, D { l: 7, t: 11, i: 293, }, D { l: 7, t: 11, i: 382, }, D { l: 7, t: 11, i: 1026, }, D { l: 7, t: 11, i: 1087, }, D { l: 7, t: 11, i: 2027, }, D { l: 8, t: 11, i: 24 }, D { l: 8, t: 11, i: 114, }, D { l: 8, t: 11, i: 252, }, D { l: 8, t: 11, i: 727, }, D { l: 8, t: 11, i: 729, }, D { l: 9, t: 11, i: 30 }, D { l: 9, t: 11, i: 199, }, D { l: 9, t: 11, i: 231, }, D { l: 9, t: 11, i: 251, }, D { l: 9, t: 11, i: 334, }, D { l: 9, t: 11, i: 361, }, D { l: 9, t: 11, i: 488, }, D { l: 9, t: 11, i: 712, }, D { l: 10, t: 11, i: 55, }, D { l: 10, t: 11, i: 60, }, D { l: 10, t: 11, i: 232, }, D { l: 10, t: 11, i: 332, }, D { l: 10, t: 11, i: 384, }, D { l: 10, t: 11, i: 396, }, D { l: 10, t: 11, i: 504, }, D { l: 10, t: 11, i: 542, }, D { l: 10, t: 11, i: 652, }, D { l: 11, t: 11, i: 20, }, D { l: 11, t: 11, i: 48, }, D { l: 11, t: 11, i: 207, }, D { l: 11, t: 11, i: 291, }, D { l: 11, t: 11, i: 298, }, D { l: 11, t: 11, i: 342, }, D { l: 11, t: 11, i: 365, }, D { l: 11, t: 11, i: 394, }, D { l: 11, t: 11, i: 620, }, D { l: 11, t: 11, i: 705, }, D { l: 11, t: 11, i: 1017, }, D { l: 12, t: 11, i: 123, }, D { l: 12, t: 11, i: 340, }, D { l: 12, t: 11, i: 406, }, D { l: 12, t: 11, i: 643, }, D { l: 13, t: 11, i: 61, }, D { l: 13, t: 11, i: 269, }, D { l: 13, t: 11, i: 311, }, D { l: 13, t: 11, i: 319, }, D { l: 13, t: 11, i: 486, }, D { l: 14, t: 11, i: 234, }, D { l: 15, t: 11, i: 62, }, D { l: 15, t: 11, i: 85, }, D { l: 16, t: 11, i: 71, }, D { l: 18, t: 11, i: 119, }, D { l: 148, t: 11, i: 105, }, D { l: 6, t: 0, i: 1455, }, D { l: 150, t: 11, i: 37, }, D { l: 135, t: 10, i: 1927, }, D { l: 135, t: 0, i: 1911, }, D { l: 137, t: 0, i: 891, }, D { l: 7, t: 10, i: 1756, }, D { l: 137, t: 10, i: 98, }, D { l: 7, t: 10, i: 1046, }, D { l: 139, t: 10, i: 160, }, D { l: 132, t: 0, i: 761, }, D { l: 6, t: 11, i: 379, }, D { l: 7, t: 11, i: 270, }, D { l: 7, t: 11, i: 1116, }, D { l: 8, t: 11, i: 176, }, D { l: 8, t: 11, i: 183, }, D { l: 9, t: 11, i: 432, }, D { l: 9, t: 11, i: 661, }, D { l: 12, t: 11, i: 247, }, D { l: 12, t: 11, i: 617, }, D { l: 146, t: 11, i: 125, }, D { l: 6, t: 10, i: 45 }, D { l: 7, t: 10, i: 433, }, D { l: 8, t: 10, i: 129, }, D { l: 9, t: 10, i: 21 }, D { l: 10, t: 10, i: 392, }, D { l: 11, t: 10, i: 79, }, D { l: 12, t: 10, i: 499, }, D { l: 13, t: 10, i: 199, }, D { l: 141, t: 10, i: 451, }, D { l: 4, t: 0, i: 407 }, D { l: 5, t: 11, i: 792, }, D { l: 133, t: 11, i: 900, }, D { l: 132, t: 0, i: 560, }, D { l: 135, t: 0, i: 183, }, D { l: 13, t: 0, i: 490, }, D { l: 7, t: 10, i: 558, }, D { l: 136, t: 10, i: 353, }, D { l: 4, t: 0, i: 475 }, D { l: 6, t: 0, i: 731 }, D { l: 11, t: 0, i: 35 }, D { l: 13, t: 0, i: 71 }, D { l: 13, t: 0, i: 177, }, D { l: 14, t: 0, i: 422, }, D { l: 133, t: 10, i: 785, }, D { l: 8, t: 10, i: 81 }, D { l: 9, t: 10, i: 189, }, D { l: 9, t: 10, i: 201, }, D { l: 11, t: 10, i: 478, }, D { l: 11, t: 10, i: 712, }, D { l: 141, t: 10, i: 338, }, D { l: 4, t: 0, i: 418 }, D { l: 4, t: 0, i: 819 }, D { l: 133, t: 10, i: 353, }, D { l: 151, t: 10, i: 26, }, D { l: 4, t: 11, i: 901, }, D { l: 133, t: 11, i: 776, }, D { l: 132, t: 0, i: 575, }, D { l: 7, t: 0, i: 818 }, D { l: 16, t: 0, i: 92 }, D { l: 17, t: 0, i: 14 }, D { l: 17, t: 0, i: 45 }, D { l: 18, t: 0, i: 75 }, D { l: 148, t: 0, i: 18, }, D { l: 6, t: 0, i: 222 }, D { l: 7, t: 0, i: 636 }, D { l: 7, t: 0, i: 1620, }, D { l: 8, t: 0, i: 409 }, D { l: 9, t: 0, i: 693 }, D { l: 139, t: 0, i: 77, }, D { l: 6, t: 10, i: 25 }, D { l: 7, t: 10, i: 855, }, D { l: 7, t: 10, i: 1258, }, D { l: 144, t: 10, i: 32, }, D { l: 6, t: 0, i: 1880, }, D { l: 6, t: 0, i: 1887, }, D { l: 6, t: 0, i: 1918, }, D { l: 6, t: 0, i: 1924, }, D { l: 9, t: 0, i: 967 }, D { l: 9, t: 0, i: 995 }, D { l: 9, t: 0, i: 1015, }, D { l: 12, t: 0, i: 826, }, D { l: 12, t: 0, i: 849, }, D { l: 12, t: 0, i: 857, }, D { l: 12, t: 0, i: 860, }, D { l: 12, t: 0, i: 886, }, D { l: 12, t: 0, i: 932, }, D { l: 18, t: 0, i: 228, }, D { l: 18, t: 0, i: 231, }, D { l: 146, t: 0, i: 240, }, D { l: 134, t: 0, i: 633, }, D { l: 134, t: 0, i: 1308, }, D { l: 4, t: 11, i: 37 }, D { l: 5, t: 11, i: 334, }, D { l: 135, t: 11, i: 1253, }, D { l: 10, t: 0, i: 86 }, D { l: 4, t: 10, i: 4 }, D { l: 7, t: 10, i: 1118, }, D { l: 7, t: 10, i: 1320, }, D { l: 7, t: 10, i: 1706, }, D { l: 8, t: 10, i: 277, }, D { l: 9, t: 10, i: 622, }, D { l: 11, t: 10, i: 724, }, D { l: 12, t: 10, i: 350, }, D { l: 12, t: 10, i: 397, }, D { l: 13, t: 10, i: 28, }, D { l: 13, t: 10, i: 159, }, D { l: 15, t: 10, i: 89, }, D { l: 18, t: 10, i: 5 }, D { l: 19, t: 10, i: 9 }, D { l: 20, t: 10, i: 34, }, D { l: 150, t: 10, i: 47, }, D { l: 132, t: 11, i: 508, }, D { l: 137, t: 11, i: 448, }, D { l: 12, t: 11, i: 107, }, D { l: 146, t: 11, i: 31, }, D { l: 132, t: 0, i: 817, }, D { l: 134, t: 0, i: 663, }, D { l: 133, t: 0, i: 882, }, D { l: 134, t: 0, i: 914, }, D { l: 132, t: 11, i: 540, }, D { l: 132, t: 11, i: 533, }, D { l: 136, t: 11, i: 608, }, D { l: 8, t: 0, i: 885 }, D { l: 138, t: 0, i: 865, }, D { l: 132, t: 0, i: 426, }, D { l: 6, t: 0, i: 58 }, D { l: 7, t: 0, i: 745 }, D { l: 7, t: 0, i: 1969, }, D { l: 8, t: 0, i: 399 }, D { l: 8, t: 0, i: 675 }, D { l: 9, t: 0, i: 479 }, D { l: 9, t: 0, i: 731 }, D { l: 10, t: 0, i: 330, }, D { l: 10, t: 0, i: 593, }, D { l: 10, t: 0, i: 817, }, D { l: 11, t: 0, i: 32 }, D { l: 11, t: 0, i: 133, }, D { l: 11, t: 0, i: 221, }, D { l: 145, t: 0, i: 68, }, D { l: 134, t: 10, i: 255, }, D { l: 7, t: 0, i: 102 }, D { l: 137, t: 0, i: 538, }, D { l: 137, t: 10, i: 216, }, D { l: 7, t: 11, i: 253, }, D { l: 136, t: 11, i: 549, }, D { l: 135, t: 11, i: 912, }, D { l: 9, t: 10, i: 183, }, D { l: 139, t: 10, i: 286, }, D { l: 11, t: 10, i: 956, }, D { l: 151, t: 10, i: 3, }, D { l: 8, t: 11, i: 527, }, D { l: 18, t: 11, i: 60, }, D { l: 147, t: 11, i: 24, }, D { l: 4, t: 10, i: 536, }, D { l: 7, t: 10, i: 1141, }, D { l: 10, t: 10, i: 723, }, D { l: 139, t: 10, i: 371, }, D { l: 133, t: 11, i: 920, }, D { l: 7, t: 0, i: 876 }, D { l: 135, t: 10, i: 285, }, D { l: 135, t: 10, i: 560, }, D { l: 132, t: 10, i: 690, }, D { l: 142, t: 11, i: 126, }, D { l: 11, t: 10, i: 33, }, D { l: 12, t: 10, i: 571, }, D { l: 149, t: 10, i: 1, }, D { l: 133, t: 0, i: 566, }, D { l: 9, t: 0, i: 139 }, D { l: 10, t: 0, i: 399, }, D { l: 11, t: 0, i: 469, }, D { l: 12, t: 0, i: 634, }, D { l: 13, t: 0, i: 223, }, D { l: 132, t: 11, i: 483, }, D { l: 6, t: 0, i: 48 }, D { l: 135, t: 0, i: 63, }, D { l: 18, t: 0, i: 12 }, D { l: 7, t: 10, i: 1862, }, D { l: 12, t: 10, i: 491, }, D { l: 12, t: 10, i: 520, }, D { l: 13, t: 10, i: 383, }, D { l: 142, t: 10, i: 244, }, D { l: 135, t: 11, i: 1665, }, D { l: 132, t: 11, i: 448, }, D { l: 9, t: 11, i: 495, }, D { l: 146, t: 11, i: 104, }, D { l: 6, t: 0, i: 114 }, D { l: 7, t: 0, i: 1224, }, D { l: 7, t: 0, i: 1556, }, D { l: 136, t: 0, i: 3 }, D { l: 4, t: 10, i: 190, }, D { l: 133, t: 10, i: 554, }, D { l: 8, t: 0, i: 576 }, D { l: 9, t: 0, i: 267 }, D { l: 133, t: 10, i: 1001, }, D { l: 133, t: 10, i: 446, }, D { l: 133, t: 0, i: 933, }, D { l: 139, t: 11, i: 1009, }, D { l: 8, t: 11, i: 653, }, D { l: 13, t: 11, i: 93, }, D { l: 147, t: 11, i: 14, }, D { l: 6, t: 0, i: 692 }, D { l: 6, t: 0, i: 821 }, D { l: 134, t: 0, i: 1077, }, D { l: 5, t: 11, i: 172, }, D { l: 135, t: 11, i: 801, }, D { l: 138, t: 0, i: 752, }, D { l: 4, t: 0, i: 375 }, D { l: 134, t: 0, i: 638, }, D { l: 134, t: 0, i: 1011, }, D { l: 140, t: 11, i: 540, }, D { l: 9, t: 0, i: 96 }, D { l: 133, t: 11, i: 260, }, D { l: 139, t: 11, i: 587, }, D { l: 135, t: 10, i: 1231, }, D { l: 12, t: 0, i: 30 }, D { l: 13, t: 0, i: 148, }, D { l: 14, t: 0, i: 87 }, D { l: 14, t: 0, i: 182, }, D { l: 16, t: 0, i: 42 }, D { l: 20, t: 0, i: 70 }, D { l: 132, t: 10, i: 304, }, D { l: 6, t: 0, i: 1398, }, D { l: 7, t: 0, i: 56 }, D { l: 7, t: 0, i: 1989, }, D { l: 8, t: 0, i: 337 }, D { l: 8, t: 0, i: 738 }, D { l: 9, t: 0, i: 600 }, D { l: 12, t: 0, i: 37 }, D { l: 13, t: 0, i: 447, }, D { l: 142, t: 0, i: 92, }, D { l: 138, t: 0, i: 666, }, D { l: 5, t: 0, i: 394 }, D { l: 7, t: 0, i: 487 }, D { l: 136, t: 0, i: 246, }, D { l: 9, t: 0, i: 437 }, D { l: 6, t: 10, i: 53 }, D { l: 6, t: 10, i: 199, }, D { l: 7, t: 10, i: 1408, }, D { l: 8, t: 10, i: 32 }, D { l: 8, t: 10, i: 93 }, D { l: 10, t: 10, i: 397, }, D { l: 10, t: 10, i: 629, }, D { l: 11, t: 10, i: 593, }, D { l: 11, t: 10, i: 763, }, D { l: 13, t: 10, i: 326, }, D { l: 145, t: 10, i: 35, }, D { l: 134, t: 10, i: 105, }, D { l: 9, t: 0, i: 320 }, D { l: 10, t: 0, i: 506, }, D { l: 138, t: 10, i: 794, }, D { l: 7, t: 11, i: 57 }, D { l: 8, t: 11, i: 167, }, D { l: 8, t: 11, i: 375, }, D { l: 9, t: 11, i: 82 }, D { l: 9, t: 11, i: 561, }, D { l: 10, t: 11, i: 620, }, D { l: 10, t: 11, i: 770, }, D { l: 11, t: 10, i: 704, }, D { l: 141, t: 10, i: 396, }, D { l: 6, t: 0, i: 1003, }, D { l: 5, t: 10, i: 114, }, D { l: 5, t: 10, i: 255, }, D { l: 141, t: 10, i: 285, }, D { l: 7, t: 0, i: 866 }, D { l: 135, t: 0, i: 1163, }, D { l: 133, t: 11, i: 531, }, D { l: 132, t: 0, i: 328, }, D { l: 7, t: 10, i: 2035, }, D { l: 8, t: 10, i: 19 }, D { l: 9, t: 10, i: 89 }, D { l: 138, t: 10, i: 831, }, D { l: 8, t: 11, i: 194, }, D { l: 136, t: 11, i: 756, }, D { l: 136, t: 0, i: 1000, }, D { l: 5, t: 11, i: 453, }, D { l: 134, t: 11, i: 441, }, D { l: 4, t: 0, i: 101 }, D { l: 5, t: 0, i: 833 }, D { l: 7, t: 0, i: 1171, }, D { l: 136, t: 0, i: 744, }, D { l: 133, t: 0, i: 726, }, D { l: 136, t: 10, i: 746, }, D { l: 138, t: 0, i: 176, }, D { l: 6, t: 0, i: 9 }, D { l: 6, t: 0, i: 397 }, D { l: 7, t: 0, i: 53 }, D { l: 7, t: 0, i: 1742, }, D { l: 10, t: 0, i: 632, }, D { l: 11, t: 0, i: 828, }, D { l: 140, t: 0, i: 146, }, D { l: 135, t: 11, i: 22, }, D { l: 145, t: 11, i: 64, }, D { l: 132, t: 0, i: 839, }, D { l: 11, t: 0, i: 417, }, D { l: 12, t: 0, i: 223, }, D { l: 140, t: 0, i: 265, }, D { l: 4, t: 11, i: 102, }, D { l: 7, t: 11, i: 815, }, D { l: 7, t: 11, i: 1699, }, D { l: 139, t: 11, i: 964, }, D { l: 5, t: 10, i: 955, }, D { l: 136, t: 10, i: 814, }, D { l: 6, t: 0, i: 1931, }, D { l: 6, t: 0, i: 2007, }, D { l: 18, t: 0, i: 246, }, D { l: 146, t: 0, i: 247, }, D { l: 8, t: 0, i: 198 }, D { l: 11, t: 0, i: 29 }, D { l: 140, t: 0, i: 534, }, D { l: 135, t: 0, i: 1771, }, D { l: 6, t: 0, i: 846 }, D { l: 7, t: 11, i: 1010, }, D { l: 11, t: 11, i: 733, }, D { l: 11, t: 11, i: 759, }, D { l: 12, t: 11, i: 563, }, D { l: 13, t: 11, i: 34, }, D { l: 14, t: 11, i: 101, }, D { l: 18, t: 11, i: 45, }, D { l: 146, t: 11, i: 129, }, D { l: 4, t: 0, i: 186 }, D { l: 5, t: 0, i: 157 }, D { l: 8, t: 0, i: 168 }, D { l: 138, t: 0, i: 6 }, D { l: 132, t: 11, i: 899, }, D { l: 133, t: 10, i: 56, }, D { l: 148, t: 10, i: 100, }, D { l: 133, t: 0, i: 875, }, D { l: 5, t: 0, i: 773 }, D { l: 5, t: 0, i: 991 }, D { l: 6, t: 0, i: 1635, }, D { l: 134, t: 0, i: 1788, }, D { l: 6, t: 0, i: 1274, }, D { l: 9, t: 0, i: 477 }, D { l: 141, t: 0, i: 78, }, D { l: 4, t: 0, i: 639 }, D { l: 7, t: 0, i: 111 }, D { l: 8, t: 0, i: 581 }, D { l: 12, t: 0, i: 177, }, D { l: 6, t: 11, i: 52 }, D { l: 9, t: 11, i: 104, }, D { l: 9, t: 11, i: 559, }, D { l: 10, t: 10, i: 4 }, D { l: 10, t: 10, i: 13, }, D { l: 11, t: 10, i: 638, }, D { l: 12, t: 11, i: 308, }, D { l: 19, t: 11, i: 87, }, D { l: 148, t: 10, i: 57, }, D { l: 132, t: 11, i: 604, }, D { l: 4, t: 11, i: 301, }, D { l: 133, t: 10, i: 738, }, D { l: 133, t: 10, i: 758, }, D { l: 134, t: 0, i: 1747, }, D { l: 7, t: 11, i: 1440, }, D { l: 11, t: 11, i: 854, }, D { l: 11, t: 11, i: 872, }, D { l: 11, t: 11, i: 921, }, D { l: 12, t: 11, i: 551, }, D { l: 13, t: 11, i: 472, }, D { l: 142, t: 11, i: 367, }, D { l: 7, t: 0, i: 1364, }, D { l: 7, t: 0, i: 1907, }, D { l: 141, t: 0, i: 158, }, D { l: 134, t: 0, i: 873, }, D { l: 4, t: 0, i: 404 }, D { l: 4, t: 0, i: 659 }, D { l: 7, t: 0, i: 552 }, D { l: 135, t: 0, i: 675, }, D { l: 135, t: 10, i: 1112, }, D { l: 139, t: 10, i: 328, }, D { l: 7, t: 11, i: 508, }, D { l: 137, t: 10, i: 133, }, D { l: 133, t: 0, i: 391, }, D { l: 5, t: 10, i: 110, }, D { l: 6, t: 10, i: 169, }, D { l: 6, t: 10, i: 1702, }, D { l: 7, t: 10, i: 400, }, D { l: 8, t: 10, i: 538, }, D { l: 9, t: 10, i: 184, }, D { l: 9, t: 10, i: 524, }, D { l: 140, t: 10, i: 218, }, D { l: 6, t: 11, i: 310, }, D { l: 7, t: 11, i: 1849, }, D { l: 8, t: 11, i: 72 }, D { l: 8, t: 11, i: 272, }, D { l: 8, t: 11, i: 431, }, D { l: 9, t: 11, i: 12 }, D { l: 9, t: 11, i: 351, }, D { l: 10, t: 11, i: 563, }, D { l: 10, t: 11, i: 630, }, D { l: 10, t: 11, i: 810, }, D { l: 11, t: 11, i: 367, }, D { l: 11, t: 11, i: 599, }, D { l: 11, t: 11, i: 686, }, D { l: 140, t: 11, i: 672, }, D { l: 5, t: 0, i: 540 }, D { l: 6, t: 0, i: 1697, }, D { l: 136, t: 0, i: 668, }, D { l: 132, t: 0, i: 883, }, D { l: 134, t: 0, i: 78, }, D { l: 12, t: 0, i: 628, }, D { l: 18, t: 0, i: 79 }, D { l: 6, t: 10, i: 133, }, D { l: 9, t: 10, i: 353, }, D { l: 139, t: 10, i: 993, }, D { l: 6, t: 11, i: 181, }, D { l: 7, t: 11, i: 537, }, D { l: 8, t: 11, i: 64 }, D { l: 9, t: 11, i: 127, }, D { l: 10, t: 11, i: 496, }, D { l: 12, t: 11, i: 510, }, D { l: 141, t: 11, i: 384, }, D { l: 6, t: 10, i: 93 }, D { l: 7, t: 10, i: 1422, }, D { l: 7, t: 10, i: 1851, }, D { l: 8, t: 10, i: 673, }, D { l: 9, t: 10, i: 529, }, D { l: 140, t: 10, i: 43, }, D { l: 137, t: 10, i: 371, }, D { l: 134, t: 0, i: 1460, }, D { l: 134, t: 0, i: 962, }, D { l: 4, t: 11, i: 244, }, D { l: 135, t: 11, i: 233, }, D { l: 9, t: 10, i: 25 }, D { l: 10, t: 10, i: 467, }, D { l: 138, t: 10, i: 559, }, D { l: 4, t: 10, i: 335, }, D { l: 135, t: 10, i: 942, }, D { l: 133, t: 0, i: 460, }, D { l: 135, t: 11, i: 334, }, D { l: 134, t: 11, i: 1650, }, D { l: 4, t: 0, i: 199 }, D { l: 139, t: 0, i: 34, }, D { l: 5, t: 10, i: 601, }, D { l: 8, t: 10, i: 39 }, D { l: 10, t: 10, i: 773, }, D { l: 11, t: 10, i: 84, }, D { l: 12, t: 10, i: 205, }, D { l: 142, t: 10, i: 1, }, D { l: 133, t: 10, i: 870, }, D { l: 134, t: 0, i: 388, }, D { l: 14, t: 0, i: 474, }, D { l: 148, t: 0, i: 120, }, D { l: 133, t: 11, i: 369, }, D { l: 139, t: 0, i: 271, }, D { l: 4, t: 0, i: 511 }, D { l: 9, t: 0, i: 333 }, D { l: 9, t: 0, i: 379 }, D { l: 10, t: 0, i: 602, }, D { l: 11, t: 0, i: 441, }, D { l: 11, t: 0, i: 723, }, D { l: 11, t: 0, i: 976, }, D { l: 12, t: 0, i: 357, }, D { l: 132, t: 10, i: 181, }, D { l: 134, t: 0, i: 608, }, D { l: 134, t: 10, i: 1652, }, D { l: 22, t: 0, i: 49 }, D { l: 137, t: 11, i: 338, }, D { l: 140, t: 0, i: 988, }, D { l: 134, t: 0, i: 617, }, D { l: 5, t: 0, i: 938 }, D { l: 136, t: 0, i: 707, }, D { l: 132, t: 10, i: 97, }, D { l: 5, t: 10, i: 147, }, D { l: 6, t: 10, i: 286, }, D { l: 7, t: 10, i: 1362, }, D { l: 141, t: 10, i: 176, }, D { l: 6, t: 0, i: 756 }, D { l: 134, t: 0, i: 1149, }, D { l: 133, t: 11, i: 896, }, D { l: 6, t: 10, i: 375, }, D { l: 7, t: 10, i: 169, }, D { l: 7, t: 10, i: 254, }, D { l: 136, t: 10, i: 780, }, D { l: 134, t: 0, i: 1583, }, D { l: 135, t: 10, i: 1447, }, D { l: 139, t: 0, i: 285, }, D { l: 7, t: 11, i: 1117, }, D { l: 8, t: 11, i: 393, }, D { l: 136, t: 11, i: 539, }, D { l: 135, t: 0, i: 344, }, D { l: 6, t: 0, i: 469 }, D { l: 7, t: 0, i: 1709, }, D { l: 138, t: 0, i: 515, }, D { l: 5, t: 10, i: 629, }, D { l: 135, t: 10, i: 1549, }, D { l: 5, t: 11, i: 4 }, D { l: 5, t: 11, i: 810, }, D { l: 6, t: 11, i: 13 }, D { l: 6, t: 11, i: 538, }, D { l: 6, t: 11, i: 1690, }, D { l: 6, t: 11, i: 1726, }, D { l: 7, t: 11, i: 499, }, D { l: 7, t: 11, i: 1819, }, D { l: 8, t: 11, i: 148, }, D { l: 8, t: 11, i: 696, }, D { l: 8, t: 11, i: 791, }, D { l: 12, t: 11, i: 125, }, D { l: 13, t: 11, i: 54, }, D { l: 143, t: 11, i: 9, }, D { l: 135, t: 11, i: 1268, }, D { l: 137, t: 0, i: 404, }, D { l: 132, t: 0, i: 500, }, D { l: 5, t: 0, i: 68 }, D { l: 134, t: 0, i: 383, }, D { l: 11, t: 0, i: 216, }, D { l: 139, t: 0, i: 340, }, D { l: 4, t: 11, i: 925, }, D { l: 5, t: 11, i: 803, }, D { l: 8, t: 11, i: 698, }, D { l: 138, t: 11, i: 828, }, D { l: 4, t: 0, i: 337 }, D { l: 6, t: 0, i: 353 }, D { l: 7, t: 0, i: 1934, }, D { l: 8, t: 0, i: 488 }, D { l: 137, t: 0, i: 429, }, D { l: 7, t: 0, i: 236 }, D { l: 7, t: 0, i: 1795, }, D { l: 8, t: 0, i: 259 }, D { l: 9, t: 0, i: 135 }, D { l: 9, t: 0, i: 177 }, D { l: 9, t: 0, i: 860 }, D { l: 10, t: 0, i: 825, }, D { l: 11, t: 0, i: 115, }, D { l: 11, t: 0, i: 370, }, D { l: 11, t: 0, i: 405, }, D { l: 11, t: 0, i: 604, }, D { l: 12, t: 0, i: 10 }, D { l: 12, t: 0, i: 667, }, D { l: 12, t: 0, i: 669, }, D { l: 13, t: 0, i: 76 }, D { l: 14, t: 0, i: 310, }, D { l: 15, t: 0, i: 76 }, D { l: 15, t: 0, i: 147, }, D { l: 148, t: 0, i: 23, }, D { l: 4, t: 0, i: 15 }, D { l: 4, t: 0, i: 490 }, D { l: 5, t: 0, i: 22 }, D { l: 6, t: 0, i: 244 }, D { l: 7, t: 0, i: 40 }, D { l: 7, t: 0, i: 200 }, D { l: 7, t: 0, i: 906 }, D { l: 7, t: 0, i: 1199, }, D { l: 9, t: 0, i: 616 }, D { l: 10, t: 0, i: 716, }, D { l: 11, t: 0, i: 635, }, D { l: 11, t: 0, i: 801, }, D { l: 140, t: 0, i: 458, }, D { l: 12, t: 0, i: 756, }, D { l: 132, t: 10, i: 420, }, D { l: 134, t: 0, i: 1504, }, D { l: 6, t: 0, i: 757 }, D { l: 133, t: 11, i: 383, }, D { l: 6, t: 0, i: 1266, }, D { l: 135, t: 0, i: 1735, }, D { l: 5, t: 0, i: 598 }, D { l: 7, t: 0, i: 791 }, D { l: 8, t: 0, i: 108 }, D { l: 9, t: 0, i: 123 }, D { l: 7, t: 10, i: 1570, }, D { l: 140, t: 10, i: 542, }, D { l: 142, t: 11, i: 410, }, D { l: 9, t: 11, i: 660, }, D { l: 138, t: 11, i: 347, }, ]; brotli-8.0.2/src/enc/stride_eval.rs000064400000000000000000000261401046102023000153340ustar 00000000000000use core; use super::super::alloc; use super::super::alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use super::backward_references::BrotliEncoderParams; use super::input_pair::{InputPair, InputReference, InputReferenceMut}; use super::interface; use super::ir_interpret::{push_base, IRInterpreter}; use super::prior_eval::DEFAULT_SPEED; use super::util::{floatX, FastLog2u16}; use crate::enc::combined_alloc::{alloc_default, allocate}; const NIBBLE_PRIOR_SIZE: usize = 16; pub const STRIDE_PRIOR_SIZE: usize = 256 * 256 * NIBBLE_PRIOR_SIZE * 2; pub fn local_init_cdfs(cdfs: &mut [u16]) { for (index, item) in cdfs.iter_mut().enumerate() { *item = 4 + 4 * (index as u16 & 0x0f); } } #[allow(unused_variables)] fn stride_lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { if let Some(nibble) = high_nibble { 1 + 2 * (actual_context | ((stride_byte as usize & 0xf) << 8) | ((nibble as usize) << 12)) } else { 2 * (actual_context | ((stride_byte as usize) << 8)) } } struct CDF<'a> { cdf: &'a mut [u16], } struct Stride1Prior {} impl Stride1Prior { fn lookup_lin( stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> usize { stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) } fn lookup_mut( data: &mut [u16], stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option, ) -> CDF { let index = Self::lookup_lin(stride_byte, selected_context, actual_context, high_nibble) * NIBBLE_PRIOR_SIZE; CDF::from(data.split_at_mut(index).1.split_at_mut(16).0) } } impl<'a> CDF<'a> { pub fn cost(&self, nibble_u8: u8) -> floatX { assert_eq!(self.cdf.len(), 16); let nibble = nibble_u8 as usize & 0xf; let mut pdf = self.cdf[nibble]; if nibble_u8 != 0 { pdf -= self.cdf[nibble - 1]; } FastLog2u16(self.cdf[15]) - FastLog2u16(pdf) } pub fn update(&mut self, nibble_u8: u8, speed: (u16, u16)) { assert_eq!(self.cdf.len(), 16); for nib_range in (nibble_u8 as usize & 0xf)..16 { self.cdf[nib_range] += speed.0; } if self.cdf[15] >= speed.1 { const CDF_BIAS: [u16; 16] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; for nibble_index in 0..16 { let tmp = &mut self.cdf[nibble_index]; *tmp = (tmp.wrapping_add(CDF_BIAS[nibble_index])) .wrapping_sub(tmp.wrapping_add(CDF_BIAS[nibble_index]) >> 2); } } } } impl<'a> From<&'a mut [u16]> for CDF<'a> { fn from(cdf: &'a mut [u16]) -> CDF<'a> { assert_eq!(cdf.len(), 16); CDF { cdf } } } pub struct StrideEval< 'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + 'a, > { input: InputPair<'a>, alloc: &'a mut Alloc, context_map: &'a interface::PredictionModeContextMap>, block_type: u8, local_byte_offset: usize, stride_priors: [>::AllocatedMemory; 8], score: >::AllocatedMemory, cur_score_epoch: usize, stride_speed: [(u16, u16); 2], cur_stride: u8, } impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator + 'a> StrideEval<'a, Alloc> { pub fn new( alloc: &'a mut Alloc, input: InputPair<'a>, prediction_mode: &'a interface::PredictionModeContextMap>, params: &BrotliEncoderParams, ) -> Self { let do_alloc = true; let mut stride_speed = prediction_mode.stride_context_speed(); if stride_speed[0] == (0, 0) { stride_speed[0] = params.literal_adaptation[0] } if stride_speed[0] == (0, 0) { stride_speed[0] = DEFAULT_SPEED; } if stride_speed[1] == (0, 0) { stride_speed[1] = params.literal_adaptation[1] } if stride_speed[1] == (0, 0) { stride_speed[1] = stride_speed[0]; } let score = if do_alloc { allocate::(alloc, 8 * 4) // FIXME make this bigger than just 4 } else { alloc_default::() }; let stride_priors = if do_alloc { [ allocate::(alloc, STRIDE_PRIOR_SIZE), allocate::(alloc, STRIDE_PRIOR_SIZE), allocate::(alloc, STRIDE_PRIOR_SIZE), allocate::(alloc, STRIDE_PRIOR_SIZE), allocate::(alloc, STRIDE_PRIOR_SIZE), allocate::(alloc, STRIDE_PRIOR_SIZE), allocate::(alloc, STRIDE_PRIOR_SIZE), allocate::(alloc, STRIDE_PRIOR_SIZE), ] } else { [ alloc_default::(), alloc_default::(), alloc_default::(), alloc_default::(), alloc_default::(), alloc_default::(), alloc_default::(), alloc_default::(), ] }; let mut ret = StrideEval:: { input, context_map: prediction_mode, block_type: 0, alloc, cur_stride: 1, cur_score_epoch: 0, local_byte_offset: 0, stride_priors, score, stride_speed, }; for stride_prior in ret.stride_priors.iter_mut() { local_init_cdfs(stride_prior.slice_mut()); } ret } pub fn alloc(&mut self) -> &mut Alloc { self.alloc } pub fn choose_stride(&self, stride_data: &mut [u8]) { assert_eq!(stride_data.len(), self.cur_score_epoch); assert!(self.score.slice().len() > stride_data.len()); assert!(self.score.slice().len() > (stride_data.len() << 3) + 7 + 8); for (index, choice) in stride_data.iter_mut().enumerate() { let choices = self .score .slice() .split_at((1 + index) << 3) .1 .split_at(8) .0; let mut best_choice: u8 = 0; let mut best_score = choices[0]; for (cur_index, cur_score) in choices.iter().enumerate() { if *cur_score + 2.0 < best_score { // needs to be 2 bits better to be worth the type switch best_score = *cur_score; best_choice = cur_index as u8; } } *choice = best_choice; } } pub fn num_types(&self) -> usize { self.cur_score_epoch } fn update_cost_base( &mut self, stride_prior: [u8; 8], selected_bits: u8, cm_prior: usize, literal: u8, ) { type CurPrior = Stride1Prior; { for i in 0..8 { let mut cdf = CurPrior::lookup_mut( self.stride_priors[i].slice_mut(), stride_prior[i], selected_bits, cm_prior, None, ); self.score.slice_mut()[self.cur_score_epoch * 8 + i] += cdf.cost(literal >> 4); cdf.update(literal >> 4, self.stride_speed[1]); } } { for i in 0..8 { let mut cdf = CurPrior::lookup_mut( self.stride_priors[i].slice_mut(), stride_prior[i], selected_bits, cm_prior, Some(literal >> 4), ); self.score.slice_mut()[self.cur_score_epoch * 8 + i] += cdf.cost(literal & 0xf); cdf.update(literal & 0xf, self.stride_speed[0]); } } } } impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> Drop for StrideEval<'a, Alloc> { fn drop(&mut self) { >::free_cell(self.alloc, core::mem::take(&mut self.score)); for i in 0..8 { >::free_cell( self.alloc, core::mem::take(&mut self.stride_priors[i]), ); } } } impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> IRInterpreter for StrideEval<'a, Alloc> { fn inc_local_byte_offset(&mut self, inc: usize) { self.local_byte_offset += inc; } fn local_byte_offset(&self) -> usize { self.local_byte_offset } fn update_block_type(&mut self, new_type: u8, stride: u8) { self.block_type = new_type; self.cur_stride = stride; self.cur_score_epoch += 1; if self.cur_score_epoch * 8 + 7 >= self.score.slice().len() { let new_len = self.score.slice().len() * 2; let mut new_score = allocate::(self.alloc, new_len); for (src, dst) in self.score.slice().iter().zip( new_score .slice_mut() .split_at_mut(self.score.slice().len()) .0 .iter_mut(), ) { *dst = *src; } >::free_cell( self.alloc, core::mem::replace(&mut self.score, new_score), ); } } fn block_type(&self) -> u8 { self.block_type } fn literal_data_at_offset(&self, index: usize) -> u8 { self.input[index] } fn literal_context_map(&self) -> &[u8] { self.context_map.literal_context_map.slice() } fn prediction_mode(&self) -> crate::interface::LiteralPredictionModeNibble { self.context_map.literal_prediction_mode() } fn update_cost( &mut self, stride_prior: [u8; 8], stride_prior_offset: usize, selected_bits: u8, cm_prior: usize, literal: u8, ) { let reversed_stride_priors = [ stride_prior[stride_prior_offset & 7], stride_prior[stride_prior_offset.wrapping_sub(1) & 7], stride_prior[stride_prior_offset.wrapping_sub(2) & 7], stride_prior[stride_prior_offset.wrapping_sub(3) & 7], stride_prior[stride_prior_offset.wrapping_sub(4) & 7], stride_prior[stride_prior_offset.wrapping_sub(5) & 7], stride_prior[stride_prior_offset.wrapping_sub(6) & 7], stride_prior[stride_prior_offset.wrapping_sub(7) & 7], ]; self.update_cost_base(reversed_stride_priors, selected_bits, cm_prior, literal) } } impl<'a, 'b, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> interface::CommandProcessor<'b> for StrideEval<'a, Alloc> { fn push(&mut self, val: interface::Command>) { push_base(self, val) } } brotli-8.0.2/src/enc/test.rs000064400000000000000000000457721046102023000140260ustar 00000000000000#![cfg(test)] extern crate alloc_no_stdlib; extern crate brotli_decompressor; extern "C" { fn calloc(n_elem: usize, el_size: usize) -> *mut u8; } extern "C" { fn free(ptr: *mut u8); } // FIXME: Remove this after https://github.com/dropbox/rust-alloc-no-stdlib/issues/19 is fixed use alloc::{ declare_stack_allocator_struct, define_allocator_memory_pool, define_stack_allocator_traits, static_array, }; use core; use core::cmp::min; use core::ops; use brotli_decompressor::HuffmanCode; use super::super::alloc::{ bzero, AllocatedStackMemory, Allocator, SliceWrapper, SliceWrapperMut, StackAllocator, }; pub use super::super::{BrotliDecompressStream, BrotliResult, BrotliState}; use super::cluster::HistogramPair; use super::combined_alloc::CombiningAllocator; use super::command::Command; use super::encode::{BrotliEncoderOperation, BrotliEncoderParameter}; use super::entropy_encode::HuffmanTree; use super::histogram::{ContextType, HistogramCommand, HistogramDistance, HistogramLiteral}; use super::pdf::PDF; use super::{interface, s16, v8, StaticCommand, ZopfliNode}; use crate::enc::encode::BrotliEncoderStateStruct; declare_stack_allocator_struct!(MemPool, 128, stack); declare_stack_allocator_struct!(CallocatedFreelist4096, 128, calloc); declare_stack_allocator_struct!(CallocatedFreelist2048, 64, calloc); declare_stack_allocator_struct!(CallocatedFreelist1024, 32, calloc); declare_stack_allocator_struct!(StackAllocatedFreelist64, 64, stack); fn oneshot_compress( input: &[u8], output: &mut [u8], quality: u32, lgwin: u32, magic: bool, in_batch_size: usize, out_batch_size: usize, ) -> (bool, usize) { let stack_u8_buffer = unsafe { define_allocator_memory_pool!(96, u8, [0; 24 * 1024 * 1024], calloc) }; let stack_u16_buffer = unsafe { define_allocator_memory_pool!(96, u16, [0; 128 * 1024], calloc) }; let stack_i32_buffer = unsafe { define_allocator_memory_pool!(96, i32, [0; 128 * 1024], calloc) }; let stack_u32_buffer = unsafe { define_allocator_memory_pool!(96, u32, [0; 32 * 1024 * 1024], calloc) }; let stack_u64_buffer = unsafe { define_allocator_memory_pool!(96, u64, [0; 32 * 1024], calloc) }; let stack_f64_buffer = unsafe { define_allocator_memory_pool!(48, super::util::floatX, [0; 128 * 1024], calloc) }; let mut stack_global_buffer_v8 = define_allocator_memory_pool!(64, v8, [v8::default(); 1024 * 16], stack); let mf8 = StackAllocatedFreelist64::::new_allocator(&mut stack_global_buffer_v8, bzero); let mut stack_16x16_buffer = define_allocator_memory_pool!(64, s16, [s16::default(); 1024 * 16], stack); let m16x16 = StackAllocatedFreelist64::::new_allocator(&mut stack_16x16_buffer, bzero); let stack_hl_buffer = unsafe { define_allocator_memory_pool!(48, HistogramLiteral, [0; 128 * 1024], calloc) }; let stack_hc_buffer = unsafe { define_allocator_memory_pool!(48, HistogramCommand, [0; 128 * 1024], calloc) }; let stack_hd_buffer = unsafe { define_allocator_memory_pool!(48, HistogramDistance, [0; 128 * 1024], calloc) }; let stack_hp_buffer = unsafe { define_allocator_memory_pool!(48, HistogramPair, [0; 128 * 1024], calloc) }; let stack_ct_buffer = unsafe { define_allocator_memory_pool!(48, ContextType, [0; 128 * 1024], calloc) }; let stack_ht_buffer = unsafe { define_allocator_memory_pool!(48, HuffmanTree, [0; 128 * 1024], calloc) }; let stack_zn_buffer = unsafe { define_allocator_memory_pool!(48, ZopfliNode, [0; 1024], calloc) }; let stack_mc_buffer = unsafe { define_allocator_memory_pool!(48, Command, [0; 128 * 1024], calloc) }; let stack_pdf_buffer = unsafe { define_allocator_memory_pool!(48, PDF, [0; 1], calloc) }; let stack_sc_buffer = unsafe { define_allocator_memory_pool!(48, StaticCommand, [0; 100], calloc) }; let stack_u8_allocator = CallocatedFreelist4096::::new_allocator(stack_u8_buffer.data, bzero); let stack_u16_allocator = CallocatedFreelist4096::::new_allocator(stack_u16_buffer.data, bzero); let stack_i32_allocator = CallocatedFreelist1024::::new_allocator(stack_i32_buffer.data, bzero); let stack_u32_allocator = CallocatedFreelist4096::::new_allocator(stack_u32_buffer.data, bzero); let stack_u64_allocator = CallocatedFreelist1024::::new_allocator(stack_u64_buffer.data, bzero); let stack_zn_allocator = CallocatedFreelist1024::::new_allocator(stack_zn_buffer.data, bzero); let mf64 = CallocatedFreelist2048::::new_allocator(stack_f64_buffer.data, bzero); let mpdf = CallocatedFreelist2048::::new_allocator(stack_pdf_buffer.data, bzero); let msc = CallocatedFreelist2048::::new_allocator(stack_sc_buffer.data, bzero); let stack_mc_allocator = CallocatedFreelist2048::::new_allocator(stack_mc_buffer.data, bzero); let mhl = CallocatedFreelist2048::::new_allocator(stack_hl_buffer.data, bzero); let mhc = CallocatedFreelist2048::::new_allocator(stack_hc_buffer.data, bzero); let mhd = CallocatedFreelist2048::::new_allocator(stack_hd_buffer.data, bzero); let mhp = CallocatedFreelist2048::::new_allocator(stack_hp_buffer.data, bzero); let mct = CallocatedFreelist2048::::new_allocator(stack_ct_buffer.data, bzero); let mht = CallocatedFreelist2048::::new_allocator(stack_ht_buffer.data, bzero); let mut s_orig = BrotliEncoderStateStruct::new(CombiningAllocator::new( stack_u8_allocator, stack_u16_allocator, stack_i32_allocator, stack_u32_allocator, stack_u64_allocator, stack_mc_allocator, mf64, mf8, m16x16, mpdf, msc, mhl, mhc, mhd, mhp, mct, mht, stack_zn_allocator, )); let mut next_in_offset: usize = 0; let mut next_out_offset: usize = 0; { let s = &mut s_orig; s.set_parameter(BrotliEncoderParameter::BROTLI_PARAM_QUALITY, quality); if magic { s.set_parameter( BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, magic as u32, ); } if quality >= 10 { s.set_parameter(BrotliEncoderParameter::BROTLI_PARAM_Q9_5, 1); } s.set_parameter(BrotliEncoderParameter::BROTLI_PARAM_LGWIN, lgwin); s.set_parameter(BrotliEncoderParameter::BROTLI_PARAM_MODE, 0); // gen, text, font s.set_parameter( BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, input.len() as u32, ); loop { let mut available_in: usize = min(input.len() - next_in_offset, in_batch_size); let mut available_out: usize = min(output.len() - next_out_offset, out_batch_size); if available_out == 0 { panic!("No output buffer space"); } let mut total_out = Some(0); let op: BrotliEncoderOperation; if available_in == input.len() - next_in_offset { op = BrotliEncoderOperation::BROTLI_OPERATION_FINISH; } else { op = BrotliEncoderOperation::BROTLI_OPERATION_PROCESS; } let mut nop_callback = |_data: &mut interface::PredictionModeContextMap, _cmds: &mut [interface::StaticCommand], _mb: interface::InputPair, _mfv: &mut CombiningAllocator< _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, >| (); let result = s.compress_stream( op, &mut available_in, input, &mut next_in_offset, &mut available_out, output, &mut next_out_offset, &mut total_out, &mut nop_callback, ); if !result { return (result, next_out_offset); } if s.is_finished() { break; } } } (true, next_out_offset) } #[cfg(target_pointer_width = "32")] static lock32: core::sync::atomic::AtomicU32 = core::sync::atomic::AtomicU32::new(0); /// 32bit systems do not have sufficient memory to compress multiple items /// at the same time with the current limits and defaults. So we instead spin /// until a process has completed compression. We cannot use proper locks /// in nostd, so we fall back to this simple spin lock. #[cfg(target_pointer_width = "32")] fn lock_if_32bit(){ use core::sync::atomic::Ordering; loop { let cur = lock32.fetch_add(1, Ordering::SeqCst); if cur == 0 { return; } lock32.fetch_sub(1, Ordering::SeqCst); } } #[cfg(target_pointer_width = "32")] fn unlock_if_32bit(){ use core::sync::atomic::Ordering; lock32.fetch_sub(1, Ordering::SeqCst); } #[cfg(not(target_pointer_width = "32"))] fn lock_if_32bit(){ } #[cfg(not(target_pointer_width = "32"))] fn unlock_if_32bit(){ } pub(crate) fn oneshot_decompress(compressed: &[u8], output: &mut [u8]) -> (BrotliResult, usize, usize) { let mut available_in: usize = compressed.len(); let mut available_out: usize = output.len(); let mut stack_u8_buffer = define_allocator_memory_pool!(128, u8, [0; 100 * 1024], stack); let mut stack_u32_buffer = define_allocator_memory_pool!(128, u32, [0; 36 * 1024], stack); let mut stack_hc_buffer = define_allocator_memory_pool!( 128, HuffmanCode, [HuffmanCode::default(); 116 * 1024], stack ); let stack_u8_allocator = MemPool::::new_allocator(&mut stack_u8_buffer, bzero); let stack_u32_allocator = MemPool::::new_allocator(&mut stack_u32_buffer, bzero); let stack_hc_allocator = MemPool::::new_allocator(&mut stack_hc_buffer, bzero); let mut input_offset: usize = 0; let mut output_offset: usize = 0; let mut written: usize = 0; let mut brotli_state = BrotliState::new(stack_u8_allocator, stack_u32_allocator, stack_hc_allocator); let result = BrotliDecompressStream( &mut available_in, &mut input_offset, compressed, &mut available_out, &mut output_offset, output, &mut written, &mut brotli_state, ); (result, input_offset, output_offset) } fn oneshot( input: &[u8], compressed: &mut [u8], output: &mut [u8], q: u32, lg: u32, magic: bool, in_buffer_size: usize, out_buffer_size: usize, ) -> (BrotliResult, usize, usize) { lock_if_32bit(); let (success, mut available_in) = oneshot_compress( input, compressed, q, lg, magic, in_buffer_size, out_buffer_size, ); if !success { //return (BrotliResult::ResultFailure, 0, 0); available_in = compressed.len(); } let ret = oneshot_decompress(&mut compressed[..available_in], output); unlock_if_32bit(); ret } #[test] fn test_roundtrip_10x10y() { const BUFFER_SIZE: usize = 128; let mut compressed: [u8; 13] = [0; 13]; let mut output = [0u8; BUFFER_SIZE]; let mut input = [ 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, ]; let (result, compressed_offset, output_offset) = oneshot( &mut input[..], &mut compressed, &mut output[..], 9, 10, false, 1, 1, ); match result { BrotliResult::ResultSuccess => {} _ => assert!(false), } let mut i: usize = 0; while i < 10 { assert_eq!(output[i], 'x' as u8); assert_eq!(output[i + 10], 'y' as u8); i += 1; } assert_eq!(output_offset, 20); assert_eq!(compressed_offset, compressed.len()); } macro_rules! test_roundtrip_file { ($filedata : expr, $bufsize: expr, $quality: expr, $lgwin: expr, $magic: expr, $in_buf:expr, $out_buf:expr) => {{ let stack_u8_buffer = unsafe { alloc::define_allocator_memory_pool!(4096, u8, [0; 18 * 1024 * 1024], calloc) }; let mut stack_u8_allocator = CallocatedFreelist4096::::new_allocator(stack_u8_buffer.data, bzero); let mut compressed = stack_u8_allocator.alloc_cell($bufsize); let inp = $filedata; let mut output = stack_u8_allocator.alloc_cell(inp.len() + 16); let (result, compressed_offset, output_offset) = oneshot( &inp[..], compressed.slice_mut(), output.slice_mut(), $quality, $lgwin, $magic, $in_buf, $out_buf, ); match result { BrotliResult::ResultSuccess => {} _ => assert!(false), } for i in 0..inp.len() { if inp[i] != output[i] { assert_eq!((i, inp[i]), (i, output[i])); } assert_eq!(inp[i], output[i]); } assert!(compressed_offset <= compressed.slice().len()); assert_eq!(output_offset, inp.len()); stack_u8_allocator.free_cell(output); stack_u8_allocator.free_cell(compressed); }}; } #[test] fn test_roundtrip_64x() { test_roundtrip_file!(include_bytes!("../../testdata/64x"), 72, 9, 10, false, 3, 2); } #[test] fn test_roundtrip_ukkonooa() { test_roundtrip_file!( include_bytes!("../../testdata/ukkonooa"), 82, 9, 10, true, 3, 2 ); } #[test] fn test_roundtrip_backward65536() { test_roundtrip_file!( include_bytes!("../../testdata/backward65536"), 72000, 9, 10, false, 3, 2 ); } #[test] fn test_roundtrip_aaabaaaa() { test_roundtrip_file!( include_bytes!("../../testdata/aaabaaaa"), 72000, 9, 10, true, 3, 2 ); } #[test] fn test_roundtrip_monkey() { test_roundtrip_file!( include_bytes!("../../testdata/monkey"), 72000, 9, 10, false, 16, 15 ); } #[test] fn test_roundtrip_quickfox_repeated() { test_roundtrip_file!( include_bytes!("../../testdata/quickfox_repeated"), 16384, 9, 10, true, 257, 255 ); } #[test] fn test_roundtrip_asyoulik() { test_roundtrip_file!( include_bytes!("../../testdata/asyoulik.txt"), 64384, 9, 15, false, 513, 511 ); } #[test] fn test_roundtrip_asyoulik9_5() { test_roundtrip_file!( include_bytes!("../../testdata/asyoulik.txt"), 62384, 10, 15, true, 513, 511 ); } #[test] fn test_roundtrip_compressed() { test_roundtrip_file!( include_bytes!("../../testdata/compressed_file"), 50400, 9, 10, false, 1025, 1024 ); } #[test] fn test_roundtrip_compressed_repeated() { test_roundtrip_file!( include_bytes!("../../testdata/compressed_repeated"), 120000, 9, 16, false, 2049, 2047 ); } #[test] fn test_roundtrip_first_58_bytes_alice() { test_roundtrip_file!( &include_bytes!("../../testdata/alice29.txt")[..58], 50400, 2, 10, true, 1, 2 ); } #[test] fn test_roundtrip_first_2_bytes_alice() { test_roundtrip_file!( &include_bytes!("../../testdata/alice29.txt")[..2], 50400, 2, 10, true, 1, 2 ); } #[test] fn test_roundtrip_quickfox() { test_roundtrip_file!( include_bytes!("../../testdata/quickfox"), 256, 9, 10, false, 1, 2 ); } #[test] fn test_roundtrip_x() { const BUFFER_SIZE: usize = 16384; let mut compressed: [u8; 6] = [0x0b, 0x00, 0x80, 0x58, 0x03, 0]; let mut output = [0u8; BUFFER_SIZE]; let mut input = ['X' as u8]; let (result, compressed_offset, output_offset) = oneshot( &mut input[..], &mut compressed[..], &mut output[..], 9, 10, false, 1, 2, ); match result { BrotliResult::ResultSuccess => {} _ => assert!(false), } assert_eq!(output[0], 'X' as u8); assert_eq!(output_offset, 1); assert_eq!(compressed_offset, compressed.len()); } #[test] fn test_roundtrip_empty() { let mut compressed: [u8; 2] = [0x06, 0]; let mut output = [0u8; 1]; let (result, compressed_offset, output_offset) = oneshot( &mut [], &mut compressed[..], &mut output[..], 9, 10, false, 2, 3, ); match result { BrotliResult::ResultSuccess => {} _ => assert!(false), } assert_eq!(output_offset, 0); assert_eq!(compressed_offset, compressed.len()); } #[cfg(feature="std")] #[test] fn test_compress_into_short_buffer() { use std::io::{Cursor, Write, ErrorKind}; // this plaintext should compress to 11 bytes let plaintext = [0u8; 2048]; // but we only provide space for 10 let mut output_buffer = [0u8; 10]; let mut output_cursor = Cursor::new(&mut output_buffer[..]); let mut w = crate::CompressorWriter::new(&mut output_cursor, 4096, 4, 22); assert_eq!(w.write(&plaintext).unwrap(), 2048); assert_eq!(w.flush().unwrap_err().kind(), ErrorKind::WriteZero); w.into_inner(); println!("{output_buffer:?}"); } /* #[cfg(feature="std")] struct Buffer { data: Vec, read_offset: usize, } #[cfg(feature="std")] impl Buffer { pub fn new(buf: &[u8]) -> Buffer { let mut ret = Buffer { data: Vec::::new(), read_offset: 0, }; ret.data.extend(buf); return ret; } } #[cfg(feature="std")] impl io::Read for Buffer { fn read(self: &mut Self, buf: &mut [u8]) -> io::Result { let bytes_to_read = min(buf.len(), self.data.len() - self.read_offset); if bytes_to_read > 0 { buf[0..bytes_to_read] .clone_from_slice(&self.data[self.read_offset..self.read_offset + bytes_to_read]); } self.read_offset += bytes_to_read; return Ok(bytes_to_read); } } #[cfg(feature="std")] impl io::Write for Buffer { fn write(self: &mut Self, buf: &[u8]) -> io::Result { self.data.extend(buf); return Ok(buf.len()); } fn flush(self: &mut Self) -> io::Result<()> { return Ok(()); } } */ brotli-8.0.2/src/enc/threading.rs000064400000000000000000000522201046102023000147760ustar 00000000000000use alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use core::marker::PhantomData; use core::ops::Range; use core::{any, mem}; #[cfg(feature = "std")] use std; use super::backward_references::{AnyHasher, BrotliEncoderParams, CloneWithAlloc, UnionHasher}; use super::encode::{ hasher_setup, BrotliEncoderDestroyInstance, BrotliEncoderMaxCompressedSize, BrotliEncoderOperation, SanitizeParams, }; use super::BrotliAlloc; use crate::concat::{BroCatli, BroCatliResult}; use crate::enc::combined_alloc::{alloc_default, allocate}; use crate::enc::encode::BrotliEncoderStateStruct; pub type PoisonedThreadError = (); #[cfg(feature = "std")] pub type LowLevelThreadError = std::boxed::Box; #[cfg(not(feature = "std"))] pub type LowLevelThreadError = (); pub trait AnyBoxConstructor { fn new(data: LowLevelThreadError) -> Self; } pub trait Joinable: Sized { fn join(self) -> Result; } #[derive(Debug)] pub enum BrotliEncoderThreadError { InsufficientOutputSpace, ConcatenationDidNotProcessFullFile, ConcatenationError(BroCatliResult), ConcatenationFinalizationError(BroCatliResult), OtherThreadPanic, ThreadExecError(LowLevelThreadError), } impl AnyBoxConstructor for BrotliEncoderThreadError { fn new(data: LowLevelThreadError) -> Self { BrotliEncoderThreadError::ThreadExecError(data) } } pub struct CompressedFileChunk where >::AllocatedMemory: Send, { data_backing: >::AllocatedMemory, data_size: usize, } pub struct CompressionThreadResult where >::AllocatedMemory: Send, { compressed: Result, BrotliEncoderThreadError>, alloc: Alloc, } pub enum InternalSendAlloc< ReturnVal: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, Join: Joinable, > where >::AllocatedMemory: Send, { A(Alloc, ExtraInput), Join(Join), SpawningOrJoining(PhantomData), } impl< ReturnVal: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, Join: Joinable, > InternalSendAlloc where >::AllocatedMemory: Send, { fn unwrap_input(&mut self) -> (&mut Alloc, &mut ExtraInput) { match *self { InternalSendAlloc::A(ref mut alloc, ref mut extra) => (alloc, extra), _ => panic!("Bad state for allocator"), } } } pub struct SendAlloc< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, Join: Joinable, >(pub InternalSendAlloc) //FIXME pub where >::AllocatedMemory: Send; impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, Join: Joinable, > SendAlloc where >::AllocatedMemory: Send, { pub fn new(alloc: Alloc, extra_input: ExtraInput) -> Self { SendAlloc::(InternalSendAlloc::A(alloc, extra_input)) } pub fn unwrap_or(self, other: Alloc, other_extra: ExtraInput) -> (Alloc, ExtraInput) { match self.0 { InternalSendAlloc::A(alloc, extra_input) => (alloc, extra_input), InternalSendAlloc::SpawningOrJoining(_) | InternalSendAlloc::Join(_) => { (other, other_extra) } } } fn unwrap_view_mut(&mut self) -> (&mut Alloc, &mut ExtraInput) { match self.0 { InternalSendAlloc::A(ref mut alloc, ref mut extra_input) => (alloc, extra_input), InternalSendAlloc::SpawningOrJoining(_) | InternalSendAlloc::Join(_) => { panic!("Item permanently borrowed/leaked") } } } pub fn unwrap(self) -> (Alloc, ExtraInput) { match self.0 { InternalSendAlloc::A(alloc, extra_input) => (alloc, extra_input), InternalSendAlloc::SpawningOrJoining(_) | InternalSendAlloc::Join(_) => { panic!("Item permanently borrowed/leaked") } } } pub fn replace_with_default(&mut self) -> (Alloc, ExtraInput) { match mem::replace( &mut self.0, InternalSendAlloc::SpawningOrJoining(PhantomData), ) { InternalSendAlloc::A(alloc, extra_input) => (alloc, extra_input), InternalSendAlloc::SpawningOrJoining(_) | InternalSendAlloc::Join(_) => { panic!("Item permanently borrowed/leaked") } } } } pub enum InternalOwned { // FIXME pub Item(T), Borrowed, } pub struct Owned(pub InternalOwned); // FIXME pub impl Owned { pub fn new(data: T) -> Self { Owned::(InternalOwned::Item(data)) } pub fn unwrap_or(self, other: T) -> T { if let InternalOwned::Item(x) = self.0 { x } else { other } } pub fn unwrap(self) -> T { if let InternalOwned::Item(x) = self.0 { x } else { panic!("Item permanently borrowed") } } pub fn view(&self) -> &T { if let InternalOwned::Item(ref x) = self.0 { x } else { panic!("Item permanently borrowed") } } } pub trait OwnedRetriever { fn view T>(&self, f: F) -> Result; fn unwrap(self) -> Result; } #[cfg(feature = "std")] impl OwnedRetriever for std::sync::Arc> { fn view T>(&self, f: F) -> Result { match self.read() { Ok(ref u) => Ok(f(u)), Err(_) => Err(PoisonedThreadError::default()), } } fn unwrap(self) -> Result { match std::sync::Arc::try_unwrap(self) { Ok(rwlock) => match rwlock.into_inner() { Ok(u) => Ok(u), Err(_) => Err(PoisonedThreadError::default()), }, Err(_) => Err(PoisonedThreadError::default()), } } } pub trait BatchSpawnable< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > where >::AllocatedMemory: Send + 'static, { type JoinHandle: Joinable; type FinalJoinHandle: OwnedRetriever; // this function takes in an input slice // a SendAlloc per thread and converts them all into JoinHandle // the input is borrowed until the joins complete // owned is set to borrowed // the final join handle is a r/w lock which will return the SliceW to the owner // the FinalJoinHandle is only to be called when each individual JoinHandle has been examined // the function is called with the thread_index, the num_threads, a reference to the slice under a read lock, // and an allocator from the alloc_per_thread fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle; fn spawn ReturnValue + Send + 'static + Copy>( &mut self, handle: &mut Self::FinalJoinHandle, alloc: &mut SendAlloc, index: usize, num_threads: usize, f: F, ); } pub trait BatchSpawnableLite< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > where >::AllocatedMemory: Send + 'static, { type JoinHandle: Joinable; type FinalJoinHandle: OwnedRetriever; fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle; fn spawn( &mut self, handle: &mut Self::FinalJoinHandle, alloc_per_thread: &mut SendAlloc, index: usize, num_threads: usize, f: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, ); } /* impl BatchSpawnableLite for BatchSpawnable { type JoinHandle = >::JoinHandle; type FinalJoinHandle = >::FinalJoinHandle; fn batch_spawn( &mut self, input: &mut Owned, alloc_per_thread:&mut [SendAlloc], f: fn(usize, usize, &U, Alloc) -> T, ) -> Self::FinalJoinHandle { >::batch_spawn(self, input, alloc_per_thread, f) } }*/ pub fn CompressMultiSlice< Alloc: BrotliAlloc + Send + 'static, Spawner: BatchSpawnableLite< CompressionThreadResult, UnionHasher, Alloc, ( >::AllocatedMemory, BrotliEncoderParams, ), >, >( params: &BrotliEncoderParams, input_slice: &[u8], output: &mut [u8], alloc_per_thread: &mut [SendAlloc< CompressionThreadResult, UnionHasher, Alloc, Spawner::JoinHandle, >], thread_spawner: &mut Spawner, ) -> Result where >::AllocatedMemory: Send + Sync, >::AllocatedMemory: Send + Sync, >::AllocatedMemory: Send + Sync, { let input = if let InternalSendAlloc::A(ref mut alloc, ref _extra) = alloc_per_thread[0].0 { let mut input = allocate::(alloc, input_slice.len()); input.slice_mut().clone_from_slice(input_slice); input } else { alloc_default::() }; let mut owned_input = Owned::new(input); let ret = CompressMulti( params, &mut owned_input, output, alloc_per_thread, thread_spawner, ); if let InternalSendAlloc::A(ref mut alloc, ref _extra) = alloc_per_thread[0].0 { >::free_cell(alloc, owned_input.unwrap()); } ret } fn get_range(thread_index: usize, num_threads: usize, file_size: usize) -> Range { ((thread_index * file_size) / num_threads)..(((thread_index + 1) * file_size) / num_threads) } fn compress_part>( hasher: UnionHasher, thread_index: usize, num_threads: usize, input_and_params: &(SliceW, BrotliEncoderParams), mut alloc: Alloc, ) -> CompressionThreadResult where >::AllocatedMemory: Send + 'static, { let mut range = get_range(thread_index, num_threads, input_and_params.0.len()); let mut mem = allocate::( &mut alloc, BrotliEncoderMaxCompressedSize(range.end - range.start), ); let mut state = BrotliEncoderStateStruct::new(alloc); state.params = input_and_params.1.clone(); if thread_index != 0 { state.params.catable = true; // make sure we can concatenate this to the other work results state.params.magic_number = false; // no reason to pepper this around } state.params.appendable = true; // make sure we are at least appendable, so that future items can be catted in if thread_index != 0 { state.set_custom_dictionary_with_optional_precomputed_hasher( range.start, &input_and_params.0.slice()[..range.start], hasher, true, ); } let mut out_offset = 0usize; let compression_result; let mut available_out = mem.len(); loop { let mut next_in_offset = 0usize; let mut available_in = range.end - range.start; let result = state.compress_stream( BrotliEncoderOperation::BROTLI_OPERATION_FINISH, &mut available_in, &input_and_params.0.slice()[range.clone()], &mut next_in_offset, &mut available_out, mem.slice_mut(), &mut out_offset, &mut None, &mut |_a, _b, _c, _d| (), ); let new_range = range.start + next_in_offset..range.end; range = new_range; if result { compression_result = Ok(out_offset); break; } else if available_out == 0 { compression_result = Err(BrotliEncoderThreadError::InsufficientOutputSpace); // mark no space?? break; } } BrotliEncoderDestroyInstance(&mut state); match compression_result { Ok(size) => CompressionThreadResult:: { compressed: Ok(CompressedFileChunk { data_backing: mem, data_size: size, }), alloc: state.m8, }, Err(e) => { >::free_cell(&mut state.m8, mem); CompressionThreadResult:: { compressed: Err(e), alloc: state.m8, } } } } pub fn CompressMulti< Alloc: BrotliAlloc + Send + 'static, SliceW: SliceWrapper + Send + 'static + Sync, Spawner: BatchSpawnableLite< CompressionThreadResult, UnionHasher, Alloc, (SliceW, BrotliEncoderParams), >, >( params: &BrotliEncoderParams, owned_input: &mut Owned, output: &mut [u8], alloc_per_thread: &mut [SendAlloc< CompressionThreadResult, UnionHasher, Alloc, Spawner::JoinHandle, >], thread_spawner: &mut Spawner, ) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send, >::AllocatedMemory: Send, { let num_threads = alloc_per_thread.len(); let actually_owned_mem = mem::replace(owned_input, Owned(InternalOwned::Borrowed)); let mut owned_input_pair = Owned::new((actually_owned_mem.unwrap(), params.clone())); // start thread spawner let mut spawner_and_input = thread_spawner.make_spawner(&mut owned_input_pair); if num_threads > 1 { // spawn first thread without "custom dictionary" while we compute the custom dictionary for other work items thread_spawner.spawn( &mut spawner_and_input, &mut alloc_per_thread[0], 0, num_threads, compress_part, ); } // populate all hashers at once, cloning them one by one let mut compression_last_thread_result; if num_threads > 1 && params.favor_cpu_efficiency { let mut local_params = params.clone(); SanitizeParams(&mut local_params); let mut hasher = UnionHasher::Uninit; hasher_setup( alloc_per_thread[num_threads - 1].0.unwrap_input().0, &mut hasher, &mut local_params, None, // No unwrappable custom dict used here. &[], 0, 0, false, ); for thread_index in 1..num_threads { let res = spawner_and_input.view(|input_and_params: &(SliceW, BrotliEncoderParams)| { let range = get_range(thread_index - 1, num_threads, input_and_params.0.len()); let overlap = hasher.StoreLookahead().wrapping_sub(1); if range.end - range.start > overlap { hasher.BulkStoreRange( input_and_params.0.slice(), usize::MAX, if range.start > overlap { range.start - overlap } else { 0 }, range.end - overlap, ); } }); if let Err(_e) = res { return Err(BrotliEncoderThreadError::OtherThreadPanic); } if thread_index + 1 != num_threads { { let (alloc, out_hasher) = alloc_per_thread[thread_index].unwrap_view_mut(); *out_hasher = hasher.clone_with_alloc(alloc); } thread_spawner.spawn( &mut spawner_and_input, &mut alloc_per_thread[thread_index], thread_index, num_threads, compress_part, ); } } let (alloc, _extra) = alloc_per_thread[num_threads - 1].replace_with_default(); compression_last_thread_result = spawner_and_input.view(move |input_and_params:&(SliceW, BrotliEncoderParams)| -> CompressionThreadResult { compress_part(hasher, num_threads - 1, num_threads, input_and_params, alloc, ) }); } else { if num_threads > 1 { for thread_index in 1..num_threads - 1 { thread_spawner.spawn( &mut spawner_and_input, &mut alloc_per_thread[thread_index], thread_index, num_threads, compress_part, ); } } let (alloc, _extra) = alloc_per_thread[num_threads - 1].replace_with_default(); compression_last_thread_result = spawner_and_input.view(move |input_and_params:&(SliceW, BrotliEncoderParams)| -> CompressionThreadResult { compress_part(UnionHasher::Uninit, num_threads - 1, num_threads, input_and_params, alloc, ) }); } let mut compression_result = Err(BrotliEncoderThreadError::InsufficientOutputSpace); let mut out_file_size = 0usize; let mut bro_cat_li = BroCatli::new(); for (index, thread) in alloc_per_thread.iter_mut().enumerate() { let mut cur_result = if index + 1 == num_threads { match mem::replace(&mut compression_last_thread_result, Err(())) { Ok(result) => result, Err(_err) => return Err(BrotliEncoderThreadError::OtherThreadPanic), } } else { match mem::replace( &mut thread.0, InternalSendAlloc::SpawningOrJoining(PhantomData), ) { InternalSendAlloc::A(_, _) | InternalSendAlloc::SpawningOrJoining(_) => { panic!("Thread not properly spawned") } InternalSendAlloc::Join(join) => match join.join() { Ok(result) => result, Err(err) => { return Err(err); } }, } }; match cur_result.compressed { Ok(compressed_out) => { bro_cat_li.new_brotli_file(); let mut in_offset = 0usize; let cat_result = bro_cat_li.stream( &compressed_out.data_backing.slice()[..compressed_out.data_size], &mut in_offset, output, &mut out_file_size, ); match cat_result { BroCatliResult::Success | BroCatliResult::NeedsMoreInput => { compression_result = Ok(out_file_size); } BroCatliResult::NeedsMoreOutput => { compression_result = Err(BrotliEncoderThreadError::InsufficientOutputSpace); // not enough space } err => { compression_result = Err(BrotliEncoderThreadError::ConcatenationError(err)); // misc error } } >::free_cell( &mut cur_result.alloc, compressed_out.data_backing, ); } Err(e) => { compression_result = Err(e); } } thread.0 = InternalSendAlloc::A(cur_result.alloc, UnionHasher::Uninit); } compression_result?; match bro_cat_li.finish(output, &mut out_file_size) { BroCatliResult::Success => compression_result = Ok(out_file_size), err => { compression_result = Err(BrotliEncoderThreadError::ConcatenationFinalizationError( err, )) } } if let Ok(retrieved_owned_input) = spawner_and_input.unwrap() { *owned_input = Owned::new(retrieved_owned_input.0); // return the input to its rightful owner before returning } else if compression_result.is_ok() { compression_result = Err(BrotliEncoderThreadError::OtherThreadPanic); } compression_result } brotli-8.0.2/src/enc/utf8_util.rs000064400000000000000000000034441046102023000147600ustar 00000000000000use crate::enc::floatX; fn parse_as_utf8(input: &[u8], size: usize) -> (usize, i32) { if (input[0] & 0x80) == 0 { if input[0] > 0 { return (1, i32::from(input[0])); } } if size > 1 && (input[0] & 0xe0) == 0xc0 && (input[1] & 0xc0) == 0x80 { let symbol = (input[0] as i32 & 0x1f) << 6 | input[1] as i32 & 0x3f; if symbol > 0x7f { return (2, symbol); } } if size > 2 && (input[0] & 0xf0) == 0xe0 && (input[1] & 0xc0) == 0x80 && (input[2] & 0xc0) == 0x80 { let symbol = (i32::from(input[0]) & 0x0f) << 12 | (i32::from(input[1]) & 0x3f) << 6 | i32::from(input[2]) & 0x3f; if symbol > 0x7ff { return (3, symbol); } } if size > 3 && (input[0] & 0xf8) == 0xf0 && (input[1] & 0xc0) == 0x80 && (input[2] & 0xc0) == 0x80 && (input[3] & 0xc0) == 0x80 { let symbol = (i32::from(input[0]) & 0x07) << 18 | (i32::from(input[1]) & 0x3f) << 12 | (i32::from(input[2]) & 0x3f) << 6 | i32::from(input[3]) & 0x3f; if symbol > 0xffff && symbol <= 0x10_ffff { return (4, symbol); } } (1, 0x11_0000 | i32::from(input[0])) } pub(crate) fn is_mostly_utf8( data: &[u8], pos: usize, mask: usize, length: usize, min_fraction: floatX, ) -> bool { let mut size_utf8: usize = 0; let mut i: usize = 0; while i < length { let (bytes_read, symbol) = parse_as_utf8(&data[(pos.wrapping_add(i) & mask)..], length - i); i = i.wrapping_add(bytes_read); if symbol < 0x11_0000 { size_utf8 = size_utf8.wrapping_add(bytes_read); } } size_utf8 as floatX > min_fraction * length as floatX } brotli-8.0.2/src/enc/util.rs000064400000000000000000000110211046102023000140000ustar 00000000000000#![allow(clippy::excessive_precision)] use crate::enc::log_table_16::logs_16; use crate::enc::log_table_8::logs_8; #[cfg(feature = "float64")] pub type floatX = f64; #[cfg(not(feature = "float64"))] pub type floatX = f32; #[inline(always)] pub fn FastLog2u16(v: u16) -> floatX { logs_16[v as usize] } #[cfg(feature = "std")] #[inline(always)] pub fn FastLog2(v: u64) -> floatX { if v < 256 { logs_8[v as usize] } else { (v as f32).log2() as floatX } } #[cfg(not(feature = "std"))] #[inline(always)] pub fn FastLog2(v: u64) -> floatX { if v < 256 { logs_8[v as usize] } else { FastLog2u64(v) } } #[cfg(feature = "std")] #[inline(always)] pub fn FastLog2f64(v: u64) -> floatX { if v < 256 { logs_8[v as usize] } else { (v as floatX).log2() } } #[cfg(not(feature = "std"))] #[inline(always)] pub fn FastLog2f64(v: u64) -> floatX { FastLog2(v) as floatX } #[inline] pub fn FastLog2u64(v: u64) -> floatX { let bsr_8 = 56i8 - v.leading_zeros() as i8; let offset = bsr_8 & -((bsr_8 >= 0) as i8); (offset as floatX) + logs_8[(v >> offset) as usize] } #[inline(always)] pub fn FastLog2u32(v: i32) -> floatX { let bsr_8 = 24i8 - v.leading_zeros() as i8; let offset = bsr_8 & -((bsr_8 >= 0) as i8); (offset as floatX) + logs_8[(v >> offset) as usize] } #[inline(always)] pub fn xFastLog2u16(v: u16) -> floatX { let bsr_8 = 8i8 - v.leading_zeros() as i8; let offset = (bsr_8 & -((bsr_8 >= 0) as i8)); (offset as floatX) + logs_8[(v >> offset) as usize] } #[cfg(feature = "std")] #[inline(always)] pub fn FastPow2(v: floatX) -> floatX { (2 as floatX).powf(v) } #[cfg(not(feature = "std"))] #[inline(always)] pub fn FastPow2(v: floatX) -> floatX { assert!(v >= 0 as floatX); let round_down = v as i32; let remainder = v - round_down as floatX; let mut x = 1 as floatX; // (1 + (x/n) * ln2) ^ n // let n = 8 x += remainder * (0.693147180559945309417232121458 / 256.0) as floatX; x *= x; x *= x; x *= x; x *= x; x *= x; x *= x; x *= x; x *= x; (1 << round_down) as floatX * x } #[inline(always)] pub fn Log2FloorNonZero(v: u64) -> u32 { 63u32 ^ v.leading_zeros() } #[cfg(test)] mod test { fn baseline_log2_floor_non_zero(mut n: u64) -> u32 { let mut result: u32 = 0; while { n >>= 1i32; n } != 0 { result = result.wrapping_add(1); } result } #[test] fn log2floor_non_zero_works() { let examples = [ 4u64, 254, 256, 1428, 25412509, 21350891256, 65536, 1258912591, 60968101, 1, 12589125190825, 105912059215091, 0, ]; for example in examples.iter() { let fast_version = super::Log2FloorNonZero(*example); let baseline_version = baseline_log2_floor_non_zero(*example); if *example != 0 { // make sure we don't panic when computing...but don't care about result assert_eq!(fast_version, baseline_version); } } } pub fn approx_eq(a: f64, b: f64, tol: f64) { let mut t0 = a - b; let mut t1 = b - a; if t0 < 0.0 { t0 = -t0; } if t1 < 0.0 { t1 = -t1; } if (!(t1 < tol)) { assert_eq!(a, b); } if (!(t0 < tol)) { assert_eq!(a, b); } } #[test] fn fast_log2_works() { let examples = [ 4u64, 254, 256, 1428, 25412509, 21350891256, 65536, 1258912591, 60968101, 1, 12589125190825, 105912059215091, 0, ]; let tol = [ 0.00001, 0.0001, 0.0001, 0.005, 0.007, 0.008, 0.01, 0.01, 0.01, 0.000001, 0.01, 0.01, 0.0001, ]; for (index, example) in examples.iter().enumerate() { let fast_version = super::FastLog2(*example); if *example != 0 { // make sure we don't panic when computing...but don't care about result let baseline_version = (*example as f64).log2(); approx_eq(fast_version as f64, baseline_version, tol[index]); } else { //assert_eq!(fast_version as f64, 0.0 as f64); } } } } brotli-8.0.2/src/enc/vectorization.rs000064400000000000000000000024231046102023000157310ustar 00000000000000#![allow(unknown_lints)] #![allow(unused_macros)] use crate::enc::util::FastLog2; use crate::enc::{s8, v8}; pub type Mem256f = v8; pub type Mem256i = s8; pub type v256 = v8; pub type v256i = s8; pub fn sum8(x: v256) -> f32 { x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] } pub fn sum8i(x: v256i) -> i32 { x[0].wrapping_add(x[1]) .wrapping_add(x[2]) .wrapping_add(x[3]) .wrapping_add(x[4]) .wrapping_add(x[5]) .wrapping_add(x[6]) .wrapping_add(x[7]) } pub fn log2i(x: v256i) -> v256 { [ FastLog2(x[0] as u64), FastLog2(x[1] as u64), FastLog2(x[2] as u64), FastLog2(x[3] as u64), FastLog2(x[4] as u64), FastLog2(x[5] as u64), FastLog2(x[6] as u64), FastLog2(x[7] as u64), ] .into() } pub fn cast_i32_to_f32(x: v256i) -> v256 { [ x[0] as f32, x[1] as f32, x[2] as f32, x[3] as f32, x[4] as f32, x[5] as f32, x[6] as f32, x[7] as f32, ] .into() } pub fn cast_f32_to_i32(x: v256) -> v256i { [ x[0] as i32, x[1] as i32, x[2] as i32, x[3] as i32, x[4] as i32, x[5] as i32, x[6] as i32, x[7] as i32, ] .into() } brotli-8.0.2/src/enc/weights.rs000064400000000000000000000116571046102023000145140ustar 00000000000000use core::cmp::{max, min}; pub type Prob = u16; pub const BLEND_FIXED_POINT_PRECISION: i8 = 15; #[allow(dead_code)] pub const LOG2_SCALE: i32 = 15; #[derive(Debug, Copy, Clone)] pub struct Weights { model_weights: [i32; 2], mixing_param: u8, normalized_weight: Prob, } impl Default for Weights { fn default() -> Self { Self::new() } } impl Weights { pub fn new() -> Self { Weights { model_weights: [1; 2], mixing_param: 1, normalized_weight: 1 << (BLEND_FIXED_POINT_PRECISION - 1), } } #[allow(unused)] #[inline(always)] pub fn update(&mut self, model_probs: [Prob; 2], weighted_prob: Prob) { debug_assert!(self.mixing_param != 0); normalize_weights(&mut self.model_weights); let w0new = compute_new_weight( model_probs, weighted_prob, self.model_weights, false, self.mixing_param - 1, ); let w1new = compute_new_weight( model_probs, weighted_prob, self.model_weights, true, self.mixing_param - 1, ); self.model_weights = [w0new, w1new]; self.normalized_weight = compute_normalized_weight(self.model_weights); } #[allow(dead_code)] #[inline(always)] pub fn norm_weight(&self) -> Prob { self.normalized_weight } } #[allow(dead_code)] #[inline(always)] fn compute_normalized_weight(model_weights: [i32; 2]) -> Prob { let total = i64::from(model_weights[0]) + i64::from(model_weights[1]); let leading_zeros = total.leading_zeros(); let shift = max(56 - (leading_zeros as i8), 0); let total_8bit = total >> shift; /*::probability::numeric::fast_divide_16bit_by_8bit( ((model_weights[0] >> shift) as u16)<< 8, ::probability::numeric::lookup_divisor8(total_8bit as u8)) << (BLEND_FIXED_POINT_PRECISION - 8) */ ((((model_weights[0] >> shift) as u16) << 8) / total_8bit as u16/*fixme??*/) << (BLEND_FIXED_POINT_PRECISION - 8) } #[allow(dead_code)] #[cold] fn fix_weights(weights: &mut [i32; 2]) { let ilog = 32 - min(weights[0].leading_zeros(), weights[1].leading_zeros()); let max_log = 24; if ilog >= max_log { weights[0] >>= ilog - max_log; weights[1] >>= ilog - max_log; } } #[allow(dead_code)] #[inline(always)] fn normalize_weights(weights: &mut [i32; 2]) { if ((weights[0] | weights[1]) & 0x7f00_0000) != 0 { fix_weights(weights); } } #[allow(dead_code)] #[cfg(feature = "floating_point_context_mixing")] fn compute_new_weight( probs: [Prob; 2], weighted_prob: Prob, weights: [i32; 2], index_equal_1: bool, _speed: u8, ) -> i32 { // speed ranges from 1 to 14 inclusive let index = index_equal_1 as usize; let n1i = probs[index] as f64 / ((1i64 << LOG2_SCALE) as f64); //let n0i = 1.0f64 - n1i; let ni = 1.0f64; let s1 = weighted_prob as f64 / ((1i64 << LOG2_SCALE) as f64); let s0 = 1.0f64 - s1; let s = 1.0f64; //let p0 = s0; let p1 = s1; let wi = weights[index] as f64 / ((1i64 << LOG2_SCALE) as f64); let mut wi_new = wi + (1.0 - p1) * (s * n1i - s1 * ni) / (s0 * s1); let eps = 0.00001f64; if !(wi_new > eps) { wi_new = eps; } (wi_new * ((1i64 << LOG2_SCALE) as f64)) as i32 } #[allow(dead_code)] #[cfg(not(feature = "floating_point_context_mixing"))] #[inline(always)] fn compute_new_weight( probs: [Prob; 2], weighted_prob: Prob, weights: [i32; 2], index_equal_1: bool, _speed: u8, ) -> i32 { // speed ranges from 1 to 14 inclusive let index = index_equal_1 as usize; let full_model_sum_p1 = i64::from(weighted_prob); let full_model_total = 1i64 << LOG2_SCALE; let full_model_sum_p0 = full_model_total.wrapping_sub(i64::from(weighted_prob)); let n1i = i64::from(probs[index]); let ni = 1i64 << LOG2_SCALE; let error = full_model_total.wrapping_sub(full_model_sum_p1); let wi = i64::from(weights[index]); let efficacy = full_model_total.wrapping_mul(n1i) - full_model_sum_p1.wrapping_mul(ni); //let geometric_probabilities = full_model_sum_p1 * full_model_sum_p0; let log_geometric_probabilities = 64 - (full_model_sum_p1.wrapping_mul(full_model_sum_p0)).leading_zeros(); //let scaled_geometric_probabilities = geometric_probabilities * S; //let new_weight_adj = (error * efficacy) >> log_geometric_probabilities;// / geometric_probabilities; //let new_weight_adj = (error * efficacy)/(full_model_sum_p1 * full_model_sum_p0); let new_weight_adj = (error.wrapping_mul(efficacy)) >> log_geometric_probabilities; // assert!(wi + new_weight_adj < (1i64 << 31)); //print!("{} -> {} due to {:?} vs {}\n", wi as f64 / (weights[0] + weights[1]) as f64, (wi + new_weight_adj) as f64 /(weights[0] as i64 + new_weight_adj as i64 + weights[1] as i64) as f64, probs[index], weighted_prob); max(1, wi.wrapping_add(new_weight_adj) as i32) } brotli-8.0.2/src/enc/worker_pool.rs000064400000000000000000000343541046102023000154030ustar 00000000000000#![cfg(feature = "std")] use alloc::{Allocator, SliceWrapper}; use core::mem; use std; // in-place thread create use std::sync::RwLock; use std::sync::{Arc, Condvar, Mutex}; use crate::enc::backward_references::UnionHasher; use crate::enc::fixed_queue::{FixedQueue, MAX_THREADS}; use crate::enc::threading::{ BatchSpawnableLite, BrotliEncoderThreadError, CompressMulti, CompressionThreadResult, InternalOwned, InternalSendAlloc, Joinable, Owned, SendAlloc, }; use crate::enc::{BrotliAlloc, BrotliEncoderParams}; struct JobReply { result: T, work_id: u64, } struct JobRequest< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > { func: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, extra_input: ExtraInput, index: usize, thread_size: usize, data: Arc>, alloc: Alloc, work_id: u64, } struct WorkQueue< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > { jobs: FixedQueue>, results: FixedQueue>, shutdown: bool, immediate_shutdown: bool, num_in_progress: usize, cur_work_id: u64, } impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > Default for WorkQueue { fn default() -> Self { WorkQueue { jobs: FixedQueue::default(), results: FixedQueue::default(), num_in_progress: 0, immediate_shutdown: false, shutdown: false, cur_work_id: 0, } } } pub struct GuardedQueue< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, >(Arc<(Mutex>, Condvar)>); pub struct WorkerPool< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > { queue: GuardedQueue, join: [Option>; MAX_THREADS], } impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > Drop for WorkerPool { fn drop(&mut self) { { let (lock, cvar) = &*self.queue.0; let mut local_queue = lock.lock().unwrap(); local_queue.immediate_shutdown = true; cvar.notify_all(); } for thread_handle in self.join.iter_mut() { if let Some(th) = thread_handle.take() { th.join().unwrap(); } } } } impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > WorkerPool { fn do_work(queue: Arc<(Mutex>, Condvar)>) { loop { let ret; { // need to drop possible job before the final lock is taken, // so refcount of possible_job Arc is 0 by the time the job is delivered // to the caller. We basically need a barrier (the lock) to happen // after the destructor that decrefs possible_job let possible_job; { let (lock, cvar) = &*queue; let mut local_queue = lock.lock().unwrap(); if local_queue.immediate_shutdown { break; } possible_job = if let Some(res) = local_queue.jobs.pop() { cvar.notify_all(); local_queue.num_in_progress += 1; res } else if local_queue.shutdown { break; } else { let _lock = cvar.wait(local_queue); // unlock immediately, unfortunately continue; }; } ret = if let Ok(job_data) = possible_job.data.read() { JobReply { result: (possible_job.func)( possible_job.extra_input, possible_job.index, possible_job.thread_size, &*job_data, possible_job.alloc, ), work_id: possible_job.work_id, } } else { break; // poisoned lock }; } { let (lock, cvar) = &*queue; let mut local_queue = lock.lock().unwrap(); local_queue.num_in_progress -= 1; local_queue.results.push(ret).unwrap(); cvar.notify_all(); } } } fn _push_job(&mut self, job: JobRequest) { let (lock, cvar) = &*self.queue.0; let mut local_queue = lock.lock().unwrap(); loop { if local_queue.jobs.size() + local_queue.num_in_progress + local_queue.results.size() < MAX_THREADS { local_queue.jobs.push(job).unwrap(); cvar.notify_all(); break; } local_queue = cvar.wait(local_queue).unwrap(); } } fn _try_push_job( &mut self, job: JobRequest, ) -> Result<(), JobRequest> { let (lock, cvar) = &*self.queue.0; let mut local_queue = lock.lock().unwrap(); if local_queue.jobs.size() + local_queue.num_in_progress + local_queue.results.size() < MAX_THREADS { local_queue.jobs.push(job).unwrap(); cvar.notify_all(); Ok(()) } else { Err(job) } } fn start( queue: Arc<(Mutex>, Condvar)>, ) -> std::thread::JoinHandle<()> { std::thread::spawn(move || Self::do_work(queue)) } pub fn new(num_threads: usize) -> Self { let queue = Arc::new((Mutex::new(WorkQueue::default()), Condvar::new())); WorkerPool { queue: GuardedQueue(queue.clone()), join: [ Some(Self::start(queue.clone())), if 1 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 2 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 3 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 4 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 5 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 6 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 7 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 8 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 9 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 10 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 11 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 12 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 13 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 14 < num_threads { Some(Self::start(queue.clone())) } else { None }, if 15 < num_threads { Some(Self::start(queue.clone())) } else { None }, ], } } } pub fn new_work_pool< Alloc: BrotliAlloc + Send + 'static, SliceW: SliceWrapper + Send + 'static + Sync, >( num_threads: usize, ) -> WorkerPool< CompressionThreadResult, UnionHasher, Alloc, (SliceW, BrotliEncoderParams), > where >::AllocatedMemory: Send + 'static, >::AllocatedMemory: Send + Sync, >::AllocatedMemory: Send + Sync, { WorkerPool::new(num_threads) } pub struct WorkerJoinable< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > { queue: GuardedQueue, work_id: u64, } impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > Joinable for WorkerJoinable { fn join(self) -> Result { let (lock, cvar) = &*self.queue.0; let mut local_queue = lock.lock().unwrap(); loop { match local_queue .results .remove(|data: &Option>| { if let Some(ref item) = *data { item.work_id == self.work_id } else { false } }) { Some(matched) => return Ok(matched.result), None => local_queue = cvar.wait(local_queue).unwrap(), }; } } } impl< ReturnValue: Send + 'static, ExtraInput: Send + 'static, Alloc: BrotliAlloc + Send + 'static, U: Send + 'static + Sync, > BatchSpawnableLite for WorkerPool where >::AllocatedMemory: Send + 'static, >::AllocatedMemory: Send + Sync, >::AllocatedMemory: Send + Sync, { type FinalJoinHandle = Arc>; type JoinHandle = WorkerJoinable; fn make_spawner(&mut self, input: &mut Owned) -> Self::FinalJoinHandle { std::sync::Arc::>::new(RwLock::new( mem::replace(input, Owned(InternalOwned::Borrowed)).unwrap(), )) } fn spawn( &mut self, locked_input: &mut Self::FinalJoinHandle, work: &mut SendAlloc, index: usize, num_threads: usize, f: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, ) { assert!(num_threads <= MAX_THREADS); let (lock, cvar) = &*self.queue.0; let mut local_queue = lock.lock().unwrap(); loop { if local_queue.jobs.size() + local_queue.num_in_progress + local_queue.results.size() <= MAX_THREADS { let work_id = local_queue.cur_work_id; local_queue.cur_work_id += 1; let (local_alloc, local_extra) = work.replace_with_default(); local_queue .jobs .push(JobRequest { func: f, extra_input: local_extra, index, thread_size: num_threads, data: locked_input.clone(), alloc: local_alloc, work_id, }) .unwrap(); *work = SendAlloc(InternalSendAlloc::Join(WorkerJoinable { queue: GuardedQueue(self.queue.0.clone()), work_id, })); cvar.notify_all(); break; } else { local_queue = cvar.wait(local_queue).unwrap(); // hope room frees up } } } } pub fn compress_worker_pool< Alloc: BrotliAlloc + Send + 'static, SliceW: SliceWrapper + Send + 'static + Sync, >( params: &BrotliEncoderParams, owned_input: &mut Owned, output: &mut [u8], alloc_per_thread: &mut [SendAlloc< CompressionThreadResult, UnionHasher, Alloc, , UnionHasher, Alloc, (SliceW, BrotliEncoderParams), > as BatchSpawnableLite< CompressionThreadResult, UnionHasher, Alloc, (SliceW, BrotliEncoderParams), >>::JoinHandle, >], work_pool: &mut WorkerPool< CompressionThreadResult, UnionHasher, Alloc, (SliceW, BrotliEncoderParams), >, ) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send + Sync, >::AllocatedMemory: Send + Sync, { CompressMulti(params, owned_input, output, alloc_per_thread, work_pool) } // out of place thread create brotli-8.0.2/src/enc/writer.rs000064400000000000000000000244071046102023000143530ustar 00000000000000use alloc::{Allocator, SliceWrapperMut}; #[cfg(feature = "std")] use std::io; #[cfg(feature = "std")] use std::io::{Error, ErrorKind, Write}; #[cfg(feature = "std")] pub use alloc_stdlib::StandardAlloc; use brotli_decompressor::CustomWrite; #[cfg(feature = "std")] pub use brotli_decompressor::{IntoIoWriter, IoWriterWrapper}; use super::backward_references::BrotliEncoderParams; use super::combined_alloc::BrotliAlloc; use super::encode::{ BrotliEncoderDestroyInstance, BrotliEncoderOperation, BrotliEncoderParameter, BrotliEncoderStateStruct, }; use super::interface; use crate::enc::combined_alloc::allocate; #[cfg(feature = "std")] pub struct CompressorWriterCustomAlloc< W: Write, BufferType: SliceWrapperMut, Alloc: BrotliAlloc, >(CompressorWriterCustomIo, BufferType, Alloc>); #[cfg(feature = "std")] impl, Alloc: BrotliAlloc> CompressorWriterCustomAlloc { pub fn new(w: W, buffer: BufferType, alloc: Alloc, q: u32, lgwin: u32) -> Self { CompressorWriterCustomAlloc::(CompressorWriterCustomIo::< Error, IntoIoWriter, BufferType, Alloc, >::new( IntoIoWriter::(w), buffer, alloc, Error::new(ErrorKind::InvalidData, "Invalid Data"), Error::new(ErrorKind::WriteZero, "No room in output."), q, lgwin, )) } pub fn get_ref(&self) -> &W { &self.0.get_ref().0 } pub fn get_mut(&mut self) -> &mut W { &mut self.0.get_mut().0 } pub fn into_inner(self) -> W { self.0.into_inner().0 } } #[cfg(feature = "std")] impl, Alloc: BrotliAlloc> Write for CompressorWriterCustomAlloc { fn write(&mut self, buf: &[u8]) -> Result { self.0.write(buf) } fn flush(&mut self) -> Result<(), Error> { self.0.flush() } } #[cfg(feature = "std")] pub struct CompressorWriter( CompressorWriterCustomAlloc< W, >::AllocatedMemory, StandardAlloc, >, ); #[cfg(feature = "std")] impl CompressorWriter { pub fn new(w: W, buffer_size: usize, q: u32, lgwin: u32) -> Self { let mut alloc = StandardAlloc::default(); let buffer = allocate::( &mut alloc, if buffer_size == 0 { 4096 } else { buffer_size }, ); CompressorWriter::(CompressorWriterCustomAlloc::new(w, buffer, alloc, q, lgwin)) } pub fn with_params(w: W, buffer_size: usize, params: &BrotliEncoderParams) -> Self { let mut writer = Self::new(w, buffer_size, params.quality as u32, params.lgwin as u32); (writer.0).0.state.params = params.clone(); writer } pub fn get_ref(&self) -> &W { self.0.get_ref() } pub fn get_mut(&mut self) -> &mut W { self.0.get_mut() } pub fn into_inner(self) -> W { self.0.into_inner() } } #[cfg(feature = "std")] impl Write for CompressorWriter { fn write(&mut self, buf: &[u8]) -> Result { self.0.write(buf) } fn flush(&mut self) -> Result<(), Error> { self.0.flush() } } pub struct CompressorWriterCustomIo< ErrType, W: CustomWrite, BufferType: SliceWrapperMut, Alloc: BrotliAlloc, > { output_buffer: BufferType, total_out: Option, output: Option, error_if_invalid_data: Option, state: BrotliEncoderStateStruct, error_if_zero_bytes_written: Option, } pub fn write_all, ErrMaker: FnMut() -> Option>( writer: &mut W, mut buf: &[u8], mut error_to_return_if_zero_bytes_written: ErrMaker, ) -> Result<(), ErrType> { while !buf.is_empty() { match writer.write(buf) { Ok(bytes_written) => if bytes_written != 0 { buf = &buf[bytes_written..] } else { if let Some(err) = error_to_return_if_zero_bytes_written() { return Err(err); } else { return Ok(()); } }, Err(e) => return Err(e), } } Ok(()) } impl, BufferType: SliceWrapperMut, Alloc: BrotliAlloc> CompressorWriterCustomIo { pub fn new( w: W, buffer: BufferType, alloc: Alloc, invalid_data_error_type: ErrType, error_if_zero_bytes_written: ErrType, q: u32, lgwin: u32, ) -> Self { let mut ret = CompressorWriterCustomIo { output_buffer: buffer, total_out: Some(0), output: Some(w), state: BrotliEncoderStateStruct::new(alloc), error_if_invalid_data: Some(invalid_data_error_type), error_if_zero_bytes_written: Some(error_if_zero_bytes_written), }; ret.state .set_parameter(BrotliEncoderParameter::BROTLI_PARAM_QUALITY, q); ret.state .set_parameter(BrotliEncoderParameter::BROTLI_PARAM_LGWIN, lgwin); ret } fn flush_or_close(&mut self, op: BrotliEncoderOperation) -> Result<(), ErrType> { let mut nop_callback = |_data: &mut interface::PredictionModeContextMap, _cmds: &mut [interface::StaticCommand], _mb: interface::InputPair, _mfv: &mut Alloc| (); loop { let mut avail_in: usize = 0; let mut input_offset: usize = 0; let mut avail_out: usize = self.output_buffer.slice_mut().len(); let mut output_offset: usize = 0; let ret = self.state.compress_stream( op, &mut avail_in, &[], &mut input_offset, &mut avail_out, self.output_buffer.slice_mut(), &mut output_offset, &mut self.total_out, &mut nop_callback, ); if output_offset > 0 { let zero_err = &mut self.error_if_zero_bytes_written; let fallback = &mut self.error_if_invalid_data; match write_all( self.output.as_mut().unwrap(), &self.output_buffer.slice_mut()[..output_offset], || { if let Some(err) = zero_err.take() { return Some(err); } fallback.take() }, ) { Ok(_) => {} Err(e) => return Err(e), } } if !ret { return Err(self.error_if_invalid_data.take().unwrap()); } if let BrotliEncoderOperation::BROTLI_OPERATION_FLUSH = op { if self.state.has_more_output() { continue; } return Ok(()); } if self.state.is_finished() { return Ok(()); } } } pub fn get_ref(&self) -> &W { self.output.as_ref().unwrap() } pub fn get_mut(&mut self) -> &mut W { self.output.as_mut().unwrap() } pub fn into_inner(mut self) -> W { match self.flush_or_close(BrotliEncoderOperation::BROTLI_OPERATION_FINISH) { Ok(_) => {} Err(_) => {} } self.output.take().unwrap() } } impl, BufferType: SliceWrapperMut, Alloc: BrotliAlloc> Drop for CompressorWriterCustomIo { fn drop(&mut self) { if self.output.is_some() { match self.flush_or_close(BrotliEncoderOperation::BROTLI_OPERATION_FINISH) { Ok(_) => {} Err(_) => {} } } BrotliEncoderDestroyInstance(&mut self.state); } } impl, BufferType: SliceWrapperMut, Alloc: BrotliAlloc> CustomWrite for CompressorWriterCustomIo { fn write(&mut self, buf: &[u8]) -> Result { let mut nop_callback = |_data: &mut interface::PredictionModeContextMap, _cmds: &mut [interface::StaticCommand], _mb: interface::InputPair, _mfv: &mut Alloc| (); let mut avail_in = buf.len(); let mut input_offset: usize = 0; while avail_in != 0 { let mut output_offset = 0; let mut avail_out = self.output_buffer.slice_mut().len(); let ret = self.state.compress_stream( BrotliEncoderOperation::BROTLI_OPERATION_PROCESS, &mut avail_in, buf, &mut input_offset, &mut avail_out, self.output_buffer.slice_mut(), &mut output_offset, &mut self.total_out, &mut nop_callback, ); if output_offset > 0 { let zero_err = &mut self.error_if_zero_bytes_written; let fallback = &mut self.error_if_invalid_data; match write_all( self.output.as_mut().unwrap(), &self.output_buffer.slice_mut()[..output_offset], || { if let Some(err) = zero_err.take() { return Some(err); } fallback.take() }, ) { Ok(_) => {} Err(e) => { return Err(e) }, } } if !ret { return Err(self.error_if_invalid_data.take().unwrap()); } } Ok(buf.len()) } fn flush(&mut self) -> Result<(), ErrType> { match self.flush_or_close(BrotliEncoderOperation::BROTLI_OPERATION_FLUSH) { Ok(_) => {} Err(e) => return Err(e), } self.output.as_mut().unwrap().flush() } } brotli-8.0.2/src/ffi/alloc_util.rs000064400000000000000000000032021046102023000151530ustar 00000000000000use alloc::{Allocator, SliceWrapper, SliceWrapperMut}; use brotli_decompressor::ffi::alloc_util::SubclassableAllocator; use crate::enc::BrotliAlloc; pub struct BrotliSubclassableAllocator(SubclassableAllocator); impl BrotliSubclassableAllocator { pub fn new(s: SubclassableAllocator) -> BrotliSubclassableAllocator { BrotliSubclassableAllocator(s) } } #[derive(Default)] pub struct SendableMemoryBlock( >::AllocatedMemory, ); impl SliceWrapperMut for SendableMemoryBlock { fn slice_mut(&mut self) -> &mut [T] { self.0.slice_mut() } } impl SliceWrapper for SendableMemoryBlock { fn slice(&self) -> &[T] { self.0.slice() } } impl Allocator for BrotliSubclassableAllocator { type AllocatedMemory = SendableMemoryBlock; fn alloc_cell(&mut self, s: usize) -> Self::AllocatedMemory { SendableMemoryBlock(self.0.alloc_cell(s)) } fn free_cell(&mut self, data: Self::AllocatedMemory) { self.0.free_cell(data.0) } } impl BrotliAlloc for BrotliSubclassableAllocator {} #[cfg(not(feature = "safe"))] unsafe impl Send for BrotliSubclassableAllocator {} #[cfg(not(feature = "safe"))] unsafe impl Send for SendableMemoryBlock {} #[cfg(not(feature = "std"))] #[cfg(feature = "no-stdlib-ffi-binding")] #[panic_handler] extern "C" fn panic_impl(_: &::core::panic::PanicInfo) -> ! { loop {} } #[cfg(not(feature = "std"))] #[cfg(feature = "no-stdlib-ffi-binding")] #[lang = "eh_personality"] extern "C" fn eh_personality() {} brotli-8.0.2/src/ffi/broccoli.rs000064400000000000000000000076261046102023000146360ustar 00000000000000use core; pub use brotli_decompressor::ffi::interface::c_void; use brotli_decompressor::ffi::{slice_from_raw_parts_or_nil, slice_from_raw_parts_or_nil_mut}; use crate::concat::BroCatli; pub use crate::concat::BroCatliResult; pub type BroccoliResult = BroCatliResult; // a tool to concatenate brotli files together #[repr(C)] pub struct BroccoliState { more_data: *mut c_void, current_data: [u8; 120], } impl Clone for BroccoliState { fn clone(&self) -> BroccoliState { let mut cd = [0u8; 120]; cd.clone_from_slice(&self.current_data[..]); BroccoliState { more_data: self.more_data, current_data: cd, } } } impl Copy for BroccoliState {} impl Default for BroccoliState { fn default() -> BroccoliState { BroCatli::new().into() } } impl From for BroccoliState { fn from(data: BroCatli) -> BroccoliState { let mut buffer = [0u8; 120]; data.serialize_to_buffer(&mut buffer[..]).unwrap(); BroccoliState { more_data: core::ptr::null_mut(), current_data: buffer, } } } impl From for BroCatli { fn from(val: BroccoliState) -> Self { BroCatli::deserialize_from_buffer(&val.current_data[..]).unwrap() } } #[no_mangle] pub extern "C" fn BroccoliCreateInstance() -> BroccoliState { BroCatli::new().into() } #[no_mangle] pub extern "C" fn BroccoliCreateInstanceWithWindowSize(window_size: u8) -> BroccoliState { BroCatli::new_with_window_size(window_size).into() } #[no_mangle] pub extern "C" fn BroccoliDestroyInstance(_state: BroccoliState) {} #[no_mangle] pub unsafe extern "C" fn BroccoliNewBrotliFile(state: *mut BroccoliState) { let mut bro_catli: BroCatli = (*state).into(); bro_catli.new_brotli_file(); *state = BroccoliState::from(bro_catli); } #[no_mangle] pub unsafe extern "C" fn BroccoliConcatStream( state: *mut BroccoliState, available_in: *mut usize, input_buf_ptr: *mut *const u8, available_out: *mut usize, output_buf_ptr: *mut *mut u8, ) -> BroccoliResult { let input_buf = slice_from_raw_parts_or_nil(*input_buf_ptr, *available_in); let output_buf = slice_from_raw_parts_or_nil_mut(*output_buf_ptr, *available_out); let mut input_offset = 0usize; let mut output_offset = 0usize; let mut bro_catli: BroCatli = (*state).into(); let ret = bro_catli.stream(input_buf, &mut input_offset, output_buf, &mut output_offset); *input_buf_ptr = (*input_buf_ptr).add(input_offset); *output_buf_ptr = (*output_buf_ptr).add(output_offset); *available_in -= input_offset; *available_out -= output_offset; *state = BroccoliState::from(bro_catli); ret } #[no_mangle] pub unsafe extern "C" fn BroccoliConcatStreaming( state: *mut BroccoliState, available_in: *mut usize, mut input_buf: *const u8, available_out: *mut usize, mut output_buf: *mut u8, ) -> BroccoliResult { BroccoliConcatStream( state, available_in, &mut input_buf, available_out, &mut output_buf, ) } #[no_mangle] pub unsafe extern "C" fn BroccoliConcatFinish( state: *mut BroccoliState, available_out: *mut usize, output_buf_ptr: *mut *mut u8, ) -> BroCatliResult { let output_buf = slice_from_raw_parts_or_nil_mut(*output_buf_ptr, *available_out); let mut output_offset = 0usize; let mut bro_catli: BroCatli = (*state).into(); let ret = bro_catli.finish(output_buf, &mut output_offset); *output_buf_ptr = (*output_buf_ptr).add(output_offset); *available_out -= output_offset; *state = BroccoliState::from(bro_catli); ret } // exactly the same as BrotliConcatFinish but without the indirect #[no_mangle] pub unsafe extern "C" fn BroccoliConcatFinished( state: *mut BroccoliState, available_out: *mut usize, mut output_buf: *mut u8, ) -> BroCatliResult { BroccoliConcatFinish(state, available_out, &mut output_buf) } brotli-8.0.2/src/ffi/compressor.rs000064400000000000000000000332501046102023000152260ustar 00000000000000#![cfg(not(feature = "safe"))] use core; #[cfg(feature = "std")] use std::io::Write; #[cfg(feature = "std")] use std::{io, panic, thread}; use brotli_decompressor::ffi::alloc_util::SubclassableAllocator; use brotli_decompressor::ffi::interface::{ brotli_alloc_func, brotli_free_func, c_void, CAllocator, }; use brotli_decompressor::ffi::{ alloc_util, slice_from_raw_parts_or_nil, slice_from_raw_parts_or_nil_mut, }; use super::alloc_util::BrotliSubclassableAllocator; use crate::enc::encode::BrotliEncoderDestroyInstance as InternalBrotliEncoderDestroyInstance; use crate::enc::encode::BrotliEncoderStateStruct; #[repr(C)] pub enum BrotliEncoderOperation { BROTLI_OPERATION_PROCESS = 0, BROTLI_OPERATION_FLUSH = 1, BROTLI_OPERATION_FINISH = 2, BROTLI_OPERATION_EMIT_METADATA = 3, } #[repr(C)] pub enum BrotliEncoderMode { BROTLI_MODE_GENERIC = 0, BROTLI_MODE_TEXT = 1, BROTLI_MODE_FONT = 2, BROTLI_MODE_FORCE_LSB_PRIOR = 3, BROTLI_MODE_FORCE_MSB_PRIOR = 4, BROTLI_MODE_FORCE_UTF8_PRIOR = 5, BROTLI_MODE_FORCE_SIGNED_PRIOR = 6, } #[repr(C)] pub struct BrotliEncoderState { pub custom_allocator: CAllocator, pub compressor: BrotliEncoderStateStruct, } #[cfg(not(feature = "std"))] fn brotli_new_compressor_without_custom_alloc( _to_box: BrotliEncoderState, ) -> *mut BrotliEncoderState { panic!("Must supply allocators if calling divans when compiled without features=std"); } #[cfg(feature = "std")] fn brotli_new_compressor_without_custom_alloc( to_box: BrotliEncoderState, ) -> *mut BrotliEncoderState { alloc_util::Box::::into_raw(alloc_util::Box::::new( to_box, )) } #[cfg(feature = "std")] unsafe fn free_compressor_no_custom_alloc(state_ptr: *mut BrotliEncoderState) { let _state = alloc_util::Box::from_raw(state_ptr); } #[cfg(not(feature = "std"))] unsafe fn free_compressor_no_custom_alloc(_state_ptr: *mut BrotliEncoderState) { unreachable!(); } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderCreateInstance( alloc_func: brotli_alloc_func, free_func: brotli_free_func, opaque: *mut c_void, ) -> *mut BrotliEncoderState { catch_panic_cstate(|| { let allocators = CAllocator { alloc_func, free_func, opaque, }; let to_box = BrotliEncoderState { custom_allocator: allocators.clone(), compressor: BrotliEncoderStateStruct::new(BrotliSubclassableAllocator::new( SubclassableAllocator::new(allocators.clone()), )), }; if let Some(alloc) = alloc_func { if free_func.is_none() { panic!("either both alloc and free must exist or neither"); } let ptr = alloc( allocators.opaque, core::mem::size_of::(), ); let brotli_decoder_state_ptr = core::mem::transmute::<*mut c_void, *mut BrotliEncoderState>(ptr); core::ptr::write(brotli_decoder_state_ptr, to_box); brotli_decoder_state_ptr } else { brotli_new_compressor_without_custom_alloc(to_box) } }) .unwrap_or_else(|err| { error_print(err); core::ptr::null_mut() }) } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderSetParameter( state_ptr: *mut BrotliEncoderState, param: ::enc::encode::BrotliEncoderParameter, value: u32, ) -> i32 { if (*state_ptr).compressor.set_parameter(param, value) { 1 } else { 0 } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderDestroyInstance(state_ptr: *mut BrotliEncoderState) { if state_ptr.is_null() { return; } InternalBrotliEncoderDestroyInstance(&mut (*state_ptr).compressor); if (*state_ptr).custom_allocator.alloc_func.is_some() { if let Some(free_fn) = (*state_ptr).custom_allocator.free_func { let _to_free = core::ptr::read(state_ptr); let ptr = core::mem::transmute::<*mut BrotliEncoderState, *mut c_void>(state_ptr); free_fn((*state_ptr).custom_allocator.opaque, ptr); } } else { free_compressor_no_custom_alloc(state_ptr); } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderIsFinished(state_ptr: *mut BrotliEncoderState) -> i32 { if (*state_ptr).compressor.is_finished() { 1 } else { 0 } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderHasMoreOutput(state_ptr: *mut BrotliEncoderState) -> i32 { if (*state_ptr).compressor.has_more_output() { 1 } else { 0 } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderSetCustomDictionary( state_ptr: *mut BrotliEncoderState, size: usize, dict: *const u8, ) { if let Err(panic_err) = catch_panic(|| { let dict_slice = slice_from_raw_parts_or_nil(dict, size); (*state_ptr) .compressor .set_custom_dictionary(size, dict_slice); 0 }) { error_print(panic_err); } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderTakeOutput( state_ptr: *mut BrotliEncoderState, size: *mut usize, ) -> *const u8 { (*state_ptr).compressor.take_output(&mut *size).as_ptr() } #[no_mangle] pub extern "C" fn BrotliEncoderVersion() -> u32 { ::enc::encode::BrotliEncoderVersion() } #[no_mangle] pub extern "C" fn BrotliEncoderMaxCompressedSize(input_size: usize) -> usize { ::enc::encode::BrotliEncoderMaxCompressedSize(input_size) } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderCompress( quality: i32, lgwin: i32, mode: BrotliEncoderMode, input_size: usize, input_buffer: *const u8, encoded_size: *mut usize, encoded_buffer: *mut u8, ) -> i32 { catch_panic(|| { let input_buf = slice_from_raw_parts_or_nil(input_buffer, input_size); let encoded_buf = slice_from_raw_parts_or_nil_mut(encoded_buffer, *encoded_size); let allocators = CAllocator { alloc_func: None, free_func: None, opaque: core::ptr::null_mut(), }; let translated_mode = match mode { BrotliEncoderMode::BROTLI_MODE_GENERIC => { ::enc::backward_references::BrotliEncoderMode::BROTLI_MODE_GENERIC } BrotliEncoderMode::BROTLI_MODE_TEXT => { ::enc::backward_references::BrotliEncoderMode::BROTLI_MODE_TEXT } BrotliEncoderMode::BROTLI_MODE_FONT => { ::enc::backward_references::BrotliEncoderMode::BROTLI_MODE_FONT } BrotliEncoderMode::BROTLI_MODE_FORCE_LSB_PRIOR => { ::enc::backward_references::BrotliEncoderMode::BROTLI_FORCE_LSB_PRIOR } BrotliEncoderMode::BROTLI_MODE_FORCE_MSB_PRIOR => { ::enc::backward_references::BrotliEncoderMode::BROTLI_FORCE_MSB_PRIOR } BrotliEncoderMode::BROTLI_MODE_FORCE_UTF8_PRIOR => { ::enc::backward_references::BrotliEncoderMode::BROTLI_FORCE_UTF8_PRIOR } BrotliEncoderMode::BROTLI_MODE_FORCE_SIGNED_PRIOR => { ::enc::backward_references::BrotliEncoderMode::BROTLI_FORCE_SIGNED_PRIOR } }; let mut m8 = BrotliSubclassableAllocator::new(SubclassableAllocator::new(allocators.clone())); let empty_m8 = BrotliSubclassableAllocator::new(SubclassableAllocator::new(allocators.clone())); crate::enc::encode::encoder_compress( empty_m8, &mut m8, quality, lgwin, translated_mode, input_size, input_buf, &mut *encoded_size, encoded_buf, &mut |_a, _b, _c, _d| (), ) .into() }) .unwrap_or_else(|panic_err| { error_print(panic_err); 0 }) } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderCompressStreaming( state_ptr: *mut BrotliEncoderState, op: BrotliEncoderOperation, available_in: *mut usize, mut input_buf: *const u8, available_out: *mut usize, mut output_buf: *mut u8, ) -> i32 { BrotliEncoderCompressStream( state_ptr, op, available_in, &mut input_buf, available_out, &mut output_buf, core::ptr::null_mut(), ) } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderCompressStream( state_ptr: *mut BrotliEncoderState, op: BrotliEncoderOperation, available_in: *mut usize, input_buf_ptr: *mut *const u8, available_out: *mut usize, output_buf_ptr: *mut *mut u8, total_out: *mut usize, ) -> i32 { catch_panic(|| { let mut input_offset = 0usize; let mut output_offset = 0usize; let result; let translated_op = match op { BrotliEncoderOperation::BROTLI_OPERATION_PROCESS => { ::enc::encode::BrotliEncoderOperation::BROTLI_OPERATION_PROCESS } BrotliEncoderOperation::BROTLI_OPERATION_FLUSH => { ::enc::encode::BrotliEncoderOperation::BROTLI_OPERATION_FLUSH } BrotliEncoderOperation::BROTLI_OPERATION_FINISH => { ::enc::encode::BrotliEncoderOperation::BROTLI_OPERATION_FINISH } BrotliEncoderOperation::BROTLI_OPERATION_EMIT_METADATA => { ::enc::encode::BrotliEncoderOperation::BROTLI_OPERATION_EMIT_METADATA } }; { let (input_buf, input_any): (&[u8], bool) = if *available_in != 0 { ( slice_from_raw_parts_or_nil(*input_buf_ptr, *available_in), true, ) } else { (&[], false) }; let (output_buf, output_any): (&mut [u8], bool) = if *available_out != 0 { ( slice_from_raw_parts_or_nil_mut(*output_buf_ptr, *available_out), true, ) } else { (&mut [], false) }; let mut to = Some(0); result = (*state_ptr).compressor.compress_stream( translated_op, &mut *available_in, input_buf, &mut input_offset, &mut *available_out, output_buf, &mut output_offset, &mut to, &mut |_a, _b, _c, _d| (), ); if !total_out.is_null() { *total_out = to.unwrap_or(0); } if input_any { *input_buf_ptr = (*input_buf_ptr).add(input_offset); } if output_any { *output_buf_ptr = (*output_buf_ptr).add(output_offset); } } if result { 1 } else { 0 } }) .unwrap_or_else(|panic_err| { error_print(panic_err); 0 }) } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderMallocU8( state_ptr: *mut BrotliEncoderState, size: usize, ) -> *mut u8 { if let Some(alloc_fn) = (*state_ptr).custom_allocator.alloc_func { core::mem::transmute::<*mut c_void, *mut u8>(alloc_fn( (*state_ptr).custom_allocator.opaque, size, )) } else { alloc_util::alloc_stdlib(size) } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderFreeU8( state_ptr: *mut BrotliEncoderState, data: *mut u8, size: usize, ) { if let Some(free_fn) = (*state_ptr).custom_allocator.free_func { free_fn( (*state_ptr).custom_allocator.opaque, core::mem::transmute::<*mut u8, *mut c_void>(data), ); } else { alloc_util::free_stdlib(data, size); } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderMallocUsize( state_ptr: *mut BrotliEncoderState, size: usize, ) -> *mut usize { if let Some(alloc_fn) = (*state_ptr).custom_allocator.alloc_func { core::mem::transmute::<*mut c_void, *mut usize>(alloc_fn( (*state_ptr).custom_allocator.opaque, size * core::mem::size_of::(), )) } else { alloc_util::alloc_stdlib(size) } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderFreeUsize( state_ptr: *mut BrotliEncoderState, data: *mut usize, size: usize, ) { if let Some(free_fn) = (*state_ptr).custom_allocator.free_func { free_fn( (*state_ptr).custom_allocator.opaque, core::mem::transmute::<*mut usize, *mut c_void>(data), ); } else { alloc_util::free_stdlib(data, size); } } #[cfg(all(feature = "std", not(feature = "pass-through-ffi-panics")))] pub fn catch_panic i32 + panic::UnwindSafe>(f: F) -> thread::Result { panic::catch_unwind(f) } #[cfg(all(feature = "std", not(feature = "pass-through-ffi-panics")))] fn catch_panic_cstate *mut BrotliEncoderState + panic::UnwindSafe>( f: F, ) -> thread::Result<*mut BrotliEncoderState> { panic::catch_unwind(f) } #[cfg(all(feature = "std", not(feature = "pass-through-ffi-panics")))] fn error_print(err: Err) { let _ign = writeln!(&mut io::stderr(), "Internal Error {:?}", err); } // can't catch panics in a reliable way without std:: configure with panic=abort. These shouldn't happen #[cfg(any(not(feature = "std"), feature = "pass-through-ffi-panics"))] pub fn catch_panic i32>(f: F) -> Result { Ok(f()) } #[cfg(any(not(feature = "std"), feature = "pass-through-ffi-panics"))] fn catch_panic_cstate *mut BrotliEncoderState>( f: F, ) -> Result<*mut BrotliEncoderState, ()> { Ok(f()) } #[cfg(any(not(feature = "std"), feature = "pass-through-ffi-panics"))] fn error_print(_err: Err) {} brotli-8.0.2/src/ffi/decompressor.rs000064400000000000000000000120271046102023000155360ustar 00000000000000pub use brotli_decompressor::ffi::interface::{brotli_alloc_func, brotli_free_func, c_void}; pub use brotli_decompressor::{ffi, BrotliDecoderReturnInfo, HuffmanCode}; pub unsafe extern "C" fn CBrotliDecoderCreateInstance( alloc_func: brotli_alloc_func, free_func: brotli_free_func, opaque: *mut c_void, ) -> *mut ffi::BrotliDecoderState { ffi::BrotliDecoderCreateInstance(alloc_func, free_func, opaque) } pub unsafe extern "C" fn CBrotliDecoderSetParameter( state_ptr: *mut ffi::BrotliDecoderState, selector: ffi::interface::BrotliDecoderParameter, value: u32, ) { ffi::BrotliDecoderSetParameter(state_ptr, selector, value) } #[cfg(feature = "std")] // this requires a default allocator pub unsafe extern "C" fn CBrotliDecoderDecompress( encoded_size: usize, encoded_buffer: *const u8, decoded_size: *mut usize, decoded_buffer: *mut u8, ) -> ffi::interface::BrotliDecoderResult { ffi::BrotliDecoderDecompress(encoded_size, encoded_buffer, decoded_size, decoded_buffer) } pub unsafe extern "C" fn CBrotliDecoderDecompressStream( state_ptr: *mut ffi::BrotliDecoderState, available_in: *mut usize, input_buf_ptr: *mut *const u8, available_out: *mut usize, output_buf_ptr: *mut *mut u8, total_out: *mut usize, ) -> ffi::interface::BrotliDecoderResult { ffi::BrotliDecoderDecompressStream( state_ptr, available_in, input_buf_ptr, available_out, output_buf_ptr, total_out, ) } pub unsafe extern "C" fn CBrotliDecoderDecompressStreaming( state_ptr: *mut ffi::BrotliDecoderState, available_in: *mut usize, input_buf_ptr: *const u8, available_out: *mut usize, output_buf_ptr: *mut u8, ) -> ffi::interface::BrotliDecoderResult { ffi::BrotliDecoderDecompressStreaming( state_ptr, available_in, input_buf_ptr, available_out, output_buf_ptr, ) } pub unsafe extern "C" fn CBrotliDecoderDecompressWithReturnInfo( available_in: usize, input_buf_ptr: *const u8, available_out_and_scratch: usize, output_buf_and_scratch: *mut u8, ) -> BrotliDecoderReturnInfo { ffi::BrotliDecoderDecompressWithReturnInfo( available_in, input_buf_ptr, available_out_and_scratch, output_buf_and_scratch, ) } pub unsafe extern "C" fn CBrotliDecoderDecompressPrealloc( available_in: usize, input_buf_ptr: *const u8, available_out: usize, output_buf_ptr: *mut u8, available_u8: usize, u8_ptr: *mut u8, available_u32: usize, u32_ptr: *mut u32, available_hc: usize, hc_ptr: *mut HuffmanCode, ) -> BrotliDecoderReturnInfo { ffi::BrotliDecoderDecompressPrealloc( available_in, input_buf_ptr, available_out, output_buf_ptr, available_u8, u8_ptr, available_u32, u32_ptr, available_hc, hc_ptr, ) } pub unsafe extern "C" fn CBrotliDecoderMallocU8( state_ptr: *mut ffi::BrotliDecoderState, size: usize, ) -> *mut u8 { ffi::BrotliDecoderMallocU8(state_ptr, size) } pub unsafe extern "C" fn CBrotliDecoderFreeU8( state_ptr: *mut ffi::BrotliDecoderState, data: *mut u8, size: usize, ) { ffi::BrotliDecoderFreeU8(state_ptr, data, size) } pub unsafe extern "C" fn CBrotliDecoderMallocUsize( state_ptr: *mut ffi::BrotliDecoderState, size: usize, ) -> *mut usize { ffi::BrotliDecoderMallocUsize(state_ptr, size) } pub unsafe extern "C" fn CBrotliDecoderFreeUsize( state_ptr: *mut ffi::BrotliDecoderState, data: *mut usize, size: usize, ) { ffi::BrotliDecoderFreeUsize(state_ptr, data, size) } pub unsafe extern "C" fn CBrotliDecoderDestroyInstance(state_ptr: *mut ffi::BrotliDecoderState) { ffi::BrotliDecoderDestroyInstance(state_ptr) } pub extern "C" fn CBrotliDecoderVersion() -> u32 { ffi::BrotliDecoderVersion() } #[no_mangle] pub extern "C" fn CBrotliDecoderErrorString(c: ffi::BrotliDecoderErrorCode) -> *const u8 { ffi::BrotliDecoderErrorString(c) } #[no_mangle] pub unsafe extern "C" fn CBrotliDecoderHasMoreOutput( state_ptr: *const ffi::BrotliDecoderState, ) -> i32 { ffi::BrotliDecoderHasMoreOutput(state_ptr) } #[no_mangle] pub unsafe extern "C" fn CBrotliDecoderTakeOutput( state_ptr: *mut ffi::BrotliDecoderState, size: *mut usize, ) -> *const u8 { ffi::BrotliDecoderTakeOutput(state_ptr, size) } #[no_mangle] pub unsafe extern "C" fn CBrotliDecoderIsUsed(state_ptr: *const ffi::BrotliDecoderState) -> i32 { ffi::BrotliDecoderIsUsed(state_ptr) } #[no_mangle] pub unsafe extern "C" fn CBrotliDecoderIsFinished( state_ptr: *const ffi::BrotliDecoderState, ) -> i32 { ffi::BrotliDecoderIsFinished(state_ptr) } #[no_mangle] pub unsafe extern "C" fn CBrotliDecoderGetErrorCode( state_ptr: *const ffi::BrotliDecoderState, ) -> ffi::BrotliDecoderErrorCode { ffi::BrotliDecoderGetErrorCode(state_ptr) } #[no_mangle] pub unsafe extern "C" fn CBrotliDecoderGetErrorString( state_ptr: *const ffi::BrotliDecoderState, ) -> *const u8 { ffi::BrotliDecoderGetErrorString(state_ptr) } brotli-8.0.2/src/ffi/mod.rs000064400000000000000000000001471046102023000136100ustar 00000000000000pub mod alloc_util; pub mod broccoli; pub mod compressor; pub mod decompressor; pub mod multicompress; brotli-8.0.2/src/ffi/multicompress/mod.rs000064400000000000000000000365271046102023000165310ustar 00000000000000#![cfg(not(feature = "safe"))] mod test; use alloc::SliceWrapper; use core::cmp::min; #[cfg(feature = "std")] use std::io::Write; #[cfg(feature = "std")] use std::panic; use brotli_decompressor::ffi::alloc_util::SubclassableAllocator; use brotli_decompressor::ffi::interface::{ brotli_alloc_func, brotli_free_func, c_void, CAllocator, }; use brotli_decompressor::ffi::{slice_from_raw_parts_or_nil, slice_from_raw_parts_or_nil_mut}; use {brotli_decompressor, core, enc}; use super::alloc_util::BrotliSubclassableAllocator; use super::compressor; use crate::enc::backward_references::{BrotliEncoderParams, UnionHasher}; use crate::enc::encode::{ set_parameter, BrotliEncoderOperation, BrotliEncoderParameter, BrotliEncoderStateStruct, }; use crate::enc::threading::{Owned, SendAlloc}; pub const MAX_THREADS: usize = 16; struct SliceRef<'a>(&'a [u8]); impl<'a> SliceWrapper for SliceRef<'a> { fn slice(&self) -> &[u8] { self.0 } } macro_rules! make_send_alloc { ($alloc_func: expr, $free_func: expr, $opaque: expr) => { SendAlloc::new( BrotliSubclassableAllocator::new(SubclassableAllocator::new(CAllocator { alloc_func: $alloc_func, free_func: $free_func, opaque: $opaque, })), UnionHasher::Uninit, ) }; } #[no_mangle] pub extern "C" fn BrotliEncoderMaxCompressedSizeMulti( input_size: usize, num_threads: usize, ) -> usize { ::enc::encode::BrotliEncoderMaxCompressedSizeMulti(input_size, num_threads) } fn help_brotli_encoder_compress_single( param_keys: &[BrotliEncoderParameter], param_values: &[u32], input: &[u8], output: &mut [u8], encoded_size: &mut usize, m8: BrotliSubclassableAllocator, ) -> bool { let mut encoder = BrotliEncoderStateStruct::new(m8); for (p, v) in param_keys.iter().zip(param_values.iter()) { encoder.set_parameter(*p, *v); } let mut available_in = input.len(); let mut next_in_offset = 0usize; let mut available_out = output.len(); let mut next_out_offset = 0usize; let mut total_out = Some(0); let mut result = encoder.compress_stream( BrotliEncoderOperation::BROTLI_OPERATION_FINISH, &mut available_in, input, &mut next_in_offset, &mut available_out, output, &mut next_out_offset, &mut total_out, &mut |_a, _b, _c, _d| (), ); if !encoder.is_finished() { result = false; } *encoded_size = total_out.unwrap(); result } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderCompressMulti( num_params: usize, param_keys: *const BrotliEncoderParameter, param_values: *const u32, input_size: usize, input: *const u8, encoded_size: *mut usize, encoded: *mut u8, desired_num_threads: usize, alloc_func: brotli_alloc_func, free_func: brotli_free_func, alloc_opaque_per_thread: *mut *mut c_void, ) -> i32 { if desired_num_threads == 0 { return 0; } let num_threads = min(desired_num_threads, MAX_THREADS); compressor::catch_panic(|| { let param_keys_slice = slice_from_raw_parts_or_nil(param_keys, num_params); let param_values_slice = slice_from_raw_parts_or_nil(param_values, num_params); let input_slice = slice_from_raw_parts_or_nil(input, input_size); let output_slice = slice_from_raw_parts_or_nil_mut(encoded, *encoded_size); if num_threads == 1 { let allocators = CAllocator { alloc_func, free_func, opaque: if alloc_opaque_per_thread.is_null() { core::ptr::null_mut() } else { *alloc_opaque_per_thread }, }; let m8 = BrotliSubclassableAllocator::new(SubclassableAllocator::new(allocators.clone())); return help_brotli_encoder_compress_single( param_keys_slice, param_values_slice, input_slice, output_slice, &mut *encoded_size, m8, ) .into(); } let null_opaques = [core::ptr::null_mut::(); MAX_THREADS]; let alloc_opaque = if alloc_opaque_per_thread.is_null() { &null_opaques[..] } else { slice_from_raw_parts_or_nil(alloc_opaque_per_thread, desired_num_threads) }; let mut params = BrotliEncoderParams::default(); for (k, v) in param_keys_slice.iter().zip(param_values_slice.iter()) { if !set_parameter(&mut params, *k, *v) { return 0; } } let mut alloc_array: [_; MAX_THREADS] = [ make_send_alloc!(alloc_func, free_func, alloc_opaque[0]), make_send_alloc!(alloc_func, free_func, alloc_opaque[1 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[2 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[3 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[4 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[5 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[6 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[7 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[8 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[9 % desired_num_threads]), make_send_alloc!( alloc_func, free_func, alloc_opaque[10 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[11 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[12 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[13 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[14 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[15 % desired_num_threads] ), ]; let owned_input = &mut Owned::new(SliceRef(input_slice)); let res = enc::compress_multi_no_threadpool( ¶ms, owned_input, output_slice, &mut alloc_array[..num_threads], ); match res { Ok(size) => { *encoded_size = size; 1 } Err(_err) => 0, } }) .unwrap_or_else(|panic_err| { error_print(panic_err); 0 }) } #[repr(C)] pub struct BrotliEncoderWorkPool { custom_allocator: CAllocator, work_pool: enc::WorkerPool< enc::CompressionThreadResult, UnionHasher, BrotliSubclassableAllocator, (SliceRef<'static>, BrotliEncoderParams), >, } #[cfg(not(feature = "std"))] fn brotli_new_work_pool_without_custom_alloc( _to_box: BrotliEncoderWorkPool, ) -> *mut BrotliEncoderWorkPool { panic!("Must supply allocators if calling divans when compiled without features=std"); } #[cfg(feature = "std")] fn brotli_new_work_pool_without_custom_alloc( to_box: BrotliEncoderWorkPool, ) -> *mut BrotliEncoderWorkPool { brotli_decompressor::ffi::alloc_util::Box::::into_raw( brotli_decompressor::ffi::alloc_util::Box::::new(to_box), ) } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderCreateWorkPool( num_threads: usize, alloc_func: brotli_alloc_func, free_func: brotli_free_func, opaque: *mut c_void, ) -> *mut BrotliEncoderWorkPool { catch_panic_wstate(|| { let allocators = CAllocator { alloc_func, free_func, opaque, }; let to_box = BrotliEncoderWorkPool { custom_allocator: allocators.clone(), work_pool: enc::new_work_pool(min(num_threads, MAX_THREADS)), }; if let Some(alloc) = alloc_func { if free_func.is_none() { panic!("either both alloc and free must exist or neither"); } let ptr = alloc( allocators.opaque, core::mem::size_of::(), ); let brotli_work_pool_ptr = core::mem::transmute::<*mut c_void, *mut BrotliEncoderWorkPool>(ptr); core::ptr::write(brotli_work_pool_ptr, to_box); brotli_work_pool_ptr } else { brotli_new_work_pool_without_custom_alloc(to_box) } }) .unwrap_or_else(|err| { error_print(err); core::ptr::null_mut() }) } #[cfg(feature = "std")] unsafe fn free_work_pool_no_custom_alloc(_work_pool: *mut BrotliEncoderWorkPool) { let _state = brotli_decompressor::ffi::alloc_util::Box::from_raw(_work_pool); } #[cfg(not(feature = "std"))] unsafe fn free_work_pool_no_custom_alloc(_work_pool: *mut BrotliEncoderWorkPool) { unreachable!(); } struct UnsafeUnwindBox(*mut BrotliEncoderWorkPool); #[cfg(all(feature = "std", not(feature = "pass-through-ffi-panics")))] impl panic::RefUnwindSafe for UnsafeUnwindBox {} #[no_mangle] pub unsafe extern "C" fn BrotliEncoderDestroyWorkPool(work_pool_ptr: *mut BrotliEncoderWorkPool) { let wpp = UnsafeUnwindBox(work_pool_ptr); if let Err(panic_err) = compressor::catch_panic(|| { if (*wpp.0).custom_allocator.alloc_func.is_some() { if let Some(free_fn) = (*wpp.0).custom_allocator.free_func { let _to_free = core::ptr::read(wpp.0); let ptr = core::mem::transmute::<*mut BrotliEncoderWorkPool, *mut c_void>(wpp.0); free_fn((*wpp.0).custom_allocator.opaque, ptr); } } else { free_work_pool_no_custom_alloc(wpp.0); } 0 }) { error_print(panic_err); } } #[no_mangle] pub unsafe extern "C" fn BrotliEncoderCompressWorkPool( work_pool: *mut BrotliEncoderWorkPool, num_params: usize, param_keys: *const BrotliEncoderParameter, param_values: *const u32, input_size: usize, input: *const u8, encoded_size: *mut usize, encoded: *mut u8, desired_num_threads: usize, alloc_func: brotli_alloc_func, free_func: brotli_free_func, alloc_opaque_per_thread: *mut *mut c_void, ) -> i32 { if desired_num_threads == 0 { return 0; } if work_pool.is_null() { return compressor::catch_panic(|| { BrotliEncoderCompressMulti( num_params, param_keys, param_values, input_size, input, encoded_size, encoded, desired_num_threads, alloc_func, free_func, alloc_opaque_per_thread, ) }) .unwrap_or_else(|panic_err| { error_print(panic_err); // print panic 0 // fail }); } let work_pool_wrapper = UnsafeUnwindBox(work_pool); compressor::catch_panic(|| { let null_opaques = [core::ptr::null_mut::(); MAX_THREADS]; let alloc_opaque = if alloc_opaque_per_thread.is_null() { &null_opaques[..] } else { slice_from_raw_parts_or_nil(alloc_opaque_per_thread, desired_num_threads) }; let param_keys_slice = slice_from_raw_parts_or_nil(param_keys, num_params); let param_values_slice = slice_from_raw_parts_or_nil(param_values, num_params); let mut params = BrotliEncoderParams::default(); for (k, v) in param_keys_slice.iter().zip(param_values_slice.iter()) { if !set_parameter(&mut params, *k, *v) { return 0; } } let num_threads = min(desired_num_threads, MAX_THREADS); let mut alloc_array: [_; MAX_THREADS] = [ make_send_alloc!(alloc_func, free_func, alloc_opaque[0]), make_send_alloc!(alloc_func, free_func, alloc_opaque[1 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[2 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[3 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[4 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[5 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[6 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[7 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[8 % desired_num_threads]), make_send_alloc!(alloc_func, free_func, alloc_opaque[9 % desired_num_threads]), make_send_alloc!( alloc_func, free_func, alloc_opaque[10 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[11 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[12 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[13 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[14 % desired_num_threads] ), make_send_alloc!( alloc_func, free_func, alloc_opaque[15 % desired_num_threads] ), ]; let res = enc::compress_worker_pool( ¶ms, &mut Owned::new(SliceRef(slice_from_raw_parts_or_nil(input, input_size))), slice_from_raw_parts_or_nil_mut(encoded, *encoded_size), &mut alloc_array[..num_threads], &mut (*work_pool_wrapper.0).work_pool, ); match res { Ok(size) => { *encoded_size = size; 1 } Err(_err) => 0, } }) .unwrap_or_else(|panic_err| { error_print(panic_err); // print panic 0 // fail }) } #[cfg(all(feature = "std", not(feature = "pass-through-ffi-panics")))] fn catch_panic_wstate *mut BrotliEncoderWorkPool + panic::UnwindSafe>( f: F, ) -> std::thread::Result<*mut BrotliEncoderWorkPool> { panic::catch_unwind(f) } #[cfg(all(feature = "std", not(feature = "pass-through-ffi-panics")))] fn error_print(err: Err) { let _ign = writeln!(&mut std::io::stderr(), "Internal Error {:?}", err); } #[cfg(any(not(feature = "std"), feature = "pass-through-ffi-panics"))] fn catch_panic_wstate *mut BrotliEncoderWorkPool>( f: F, ) -> Result<*mut BrotliEncoderWorkPool, ()> { Ok(f()) } #[cfg(any(not(feature = "std"), feature = "pass-through-ffi-panics"))] fn error_print(_err: Err) {} brotli-8.0.2/src/ffi/multicompress/test.rs000064400000000000000000000243761046102023000167300ustar 00000000000000#![cfg(test)] #![cfg(feature = "std")] use core; use super::*; use crate::enc::encode::BrotliEncoderParameter; #[test] fn test_compress_workpool() { let input = [ 102, 114, 111, 109, 32, 99, 116, 121, 112, 101, 115, 32, 105, 109, 112, 111, 114, 116, 32, 42, 10, 10, 99, 108, 97, 115, 115, 32, 69, 110, 117, 109, 84, 121, 112, 101, 40, 116, 121, 112, 101, 40, 99, 95, 117, 105, 110, 116, 41, 41, 58, 10, 32, 32, 32, 32, 100, 101, 102, 32, 95, 95, 110, 101, 119, 95, 95, 40, 109, 101, 116, 97, 99, 108, 115, 41, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 112, 97, 115, 115, 10, ]; let params = [ BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5, ]; let values = [11u32, 16, 91, 0, 0, 0]; let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 4); let mut encoded_backing = [0u8; 145]; let encoded = &mut encoded_backing[..encoded_size]; let ret = unsafe { let wp = BrotliEncoderCreateWorkPool(8, None, None, core::ptr::null_mut()); let inner_ret = BrotliEncoderCompressWorkPool( wp, params.len(), params[..].as_ptr(), values[..].as_ptr(), input.len(), input[..].as_ptr(), &mut encoded_size, encoded.as_mut_ptr(), 4, None, None, core::ptr::null_mut(), ); BrotliEncoderDestroyWorkPool(wp); inner_ret }; assert_eq!(ret, 1); let mut rt_size = 256; let mut rt_buffer = [0u8; 256]; let ret2 = unsafe { super::super::decompressor::CBrotliDecoderDecompress( encoded_size, encoded.as_ptr(), &mut rt_size, rt_buffer.as_mut_ptr(), ) }; match ret2 { super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { }, _ => panic!("{}", ret2 as i32), } assert_eq!(rt_size, input.len()); assert_eq!(&rt_buffer[..rt_size], &input[..]); } #[test] fn test_compress_empty_workpool() { let input = []; let params = [ BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5, ]; let values = [3u32, 16, 91, 0, 0, 0]; let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 4); let mut encoded_backing = [0u8; 145]; let encoded = &mut encoded_backing[..encoded_size]; let ret = unsafe { let wp = BrotliEncoderCreateWorkPool(8, None, None, core::ptr::null_mut()); let inner_ret = BrotliEncoderCompressWorkPool( wp, params.len(), params[..].as_ptr(), values[..].as_ptr(), input.len(), input[..].as_ptr(), &mut encoded_size, encoded.as_mut_ptr(), 4, None, None, core::ptr::null_mut(), ); BrotliEncoderDestroyWorkPool(wp); inner_ret }; assert_eq!(ret, 1); let mut rt_size = 256; let mut rt_buffer = [0u8; 256]; assert_ne!(encoded_size, 0); let ret2 = unsafe { super::super::decompressor::CBrotliDecoderDecompress( encoded_size, encoded.as_ptr(), &mut rt_size, rt_buffer.as_mut_ptr(), ) }; match ret2 { super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { }, _ => panic!("{}", ret2 as i32), } assert_eq!(rt_size, input.len()); assert_eq!(&rt_buffer[..rt_size], &input[..]); } #[test] fn test_compress_empty_multi_raw() { let input = []; let params = [ BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5, ]; let values = [3u32, 16, 0, 0, 0, 0]; let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 4); let mut encoded_backing = [0u8; 145]; let encoded = &mut encoded_backing[..encoded_size]; let ret = unsafe { BrotliEncoderCompressMulti( params.len(), params[..].as_ptr(), values[..].as_ptr(), input.len(), input[..].as_ptr(), &mut encoded_size, encoded.as_mut_ptr(), 4, None, None, core::ptr::null_mut(), ) }; assert_eq!(ret, 1); let mut rt_size = 256; let mut rt_buffer = [0u8; 256]; assert_ne!(encoded_size, 0); let ret2 = unsafe { super::super::decompressor::CBrotliDecoderDecompress( encoded_size, encoded.as_ptr(), &mut rt_size, rt_buffer.as_mut_ptr(), ) }; match ret2 { super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { }, _ => panic!("{}", ret2 as i32), } assert_eq!(rt_size, input.len()); assert_eq!(&rt_buffer[..rt_size], &input[..]); } #[test] fn test_compress_null_multi_raw() { let params = [ BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5, ]; let values = [3u32, 16, 0, 0, 0, 0]; let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(0, 4); let mut encoded_backing = [0u8; 145]; let encoded = &mut encoded_backing[..encoded_size]; let ret = unsafe { BrotliEncoderCompressMulti( params.len(), params[..].as_ptr(), values[..].as_ptr(), 0, core::ptr::null(), &mut encoded_size, encoded.as_mut_ptr(), 4, None, None, core::ptr::null_mut(), ) }; assert_eq!(ret, 1); let mut rt_size = 256; let mut rt_buffer = [0u8; 256]; assert_ne!(encoded_size, 0); let ret2 = unsafe { super::super::decompressor::CBrotliDecoderDecompress( encoded_size, encoded.as_ptr(), &mut rt_size, rt_buffer.as_mut_ptr(), ) }; match ret2 { super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { }, _ => panic!("{}", ret2 as i32), } assert_eq!(rt_size, 0); } #[test] fn test_compress_empty_multi_raw_one_thread() { let input = []; let params = [ BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_Q9_5, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_APPENDABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, ]; let values = [10u32, 1, 1, 1, 1]; let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 1); let mut encoded_backing = [0u8; 25]; let encoded = &mut encoded_backing[..encoded_size]; assert_eq!(params.len(), 5); assert_eq!(encoded_size, 25); let ret = unsafe { BrotliEncoderCompressMulti( params.len(), params[..].as_ptr(), values[..].as_ptr(), input.len(), input[..].as_ptr(), &mut encoded_size, encoded.as_mut_ptr(), 1, None, None, core::ptr::null_mut(), ) }; assert_eq!(ret, 1); let mut rt_size = 256; let mut rt_buffer = [0u8; 256]; assert_ne!(encoded_size, 0); let ret2 = unsafe { super::super::decompressor::CBrotliDecoderDecompress( encoded_size, encoded.as_ptr(), &mut rt_size, rt_buffer.as_mut_ptr(), ) }; match ret2 { super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { }, _ => panic!("{}", ret2 as i32), } assert_eq!(rt_size, input.len()); assert_eq!(&rt_buffer[..rt_size], &input[..]); } #[test] fn test_compress_empty_multi_catable() { let input = []; let params = [ BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5, ]; let values = [3u32, 16, 0, 1, 1, 0]; let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 4); let mut encoded_backing = [0u8; 145]; let encoded = &mut encoded_backing[..encoded_size]; let ret = unsafe { BrotliEncoderCompressMulti( params.len(), params[..].as_ptr(), values[..].as_ptr(), input.len(), input[..].as_ptr(), &mut encoded_size, encoded.as_mut_ptr(), 4, None, None, core::ptr::null_mut(), ) }; assert_eq!(ret, 1); let mut rt_size = 256; let mut rt_buffer = [0u8; 256]; assert_ne!(encoded_size, 0); let ret2 = unsafe { super::super::decompressor::CBrotliDecoderDecompress( encoded_size, encoded.as_ptr(), &mut rt_size, rt_buffer.as_mut_ptr(), ) }; match ret2 { super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { }, _ => panic!("{:?}", ret2 as i32), } assert_eq!(rt_size, input.len()); assert_eq!(&rt_buffer[..rt_size], &input[..]); } brotli-8.0.2/src/lib.rs000064400000000000000000000057461046102023000130450ustar 00000000000000#![no_std] #![allow(non_snake_case)] #![allow(unused_parens)] #![allow(non_camel_case_types)] #![allow(non_snake_case)] #![allow(non_upper_case_globals)] #![cfg_attr(feature = "benchmark", feature(test))] #![cfg_attr(feature = "simd", feature(portable_simd))] #![cfg_attr( feature = "no-stdlib-ffi-binding", cfg_attr(not(feature = "std"), feature(lang_items)) )] #[macro_use] // <-- for debugging, remove xprintln from bit_reader and replace with println #[cfg(feature = "std")] extern crate std; extern crate alloc_no_stdlib as alloc; #[cfg(feature = "std")] extern crate alloc_stdlib; extern crate brotli_decompressor; pub mod concat; pub mod enc; #[cfg(feature = "ffi-api")] pub mod ffi; pub use alloc::{AllocatedStackMemory, Allocator, SliceWrapper, SliceWrapperMut, StackAllocator}; #[cfg(feature = "std")] pub use alloc_stdlib::HeapAlloc; #[cfg(feature = "std")] pub use brotli_decompressor::copy_from_to; pub use brotli_decompressor::io_wrappers::{CustomRead, CustomWrite}; #[cfg(feature = "std")] pub use brotli_decompressor::io_wrappers::{IntoIoReader, IoReaderWrapper, IoWriterWrapper}; #[cfg(feature = "std")] pub use brotli_decompressor::reader::Decompressor; pub use brotli_decompressor::reader::DecompressorCustomIo; pub use brotli_decompressor::transform::TransformDictionaryWord; #[cfg(feature = "std")] pub use brotli_decompressor::writer::DecompressorWriter; pub use brotli_decompressor::writer::DecompressorWriterCustomIo; #[cfg(feature = "std")] pub use brotli_decompressor::BrotliDecompress; #[cfg(feature = "std")] pub use brotli_decompressor::BrotliDecompressCustomAlloc; pub use brotli_decompressor::HuffmanCode; // so we can make custom allocator for decompression pub use brotli_decompressor::{ dictionary, reader, transform, writer, BrotliDecompressCustomIo, BrotliDecompressCustomIoCustomDict, BrotliDecompressStream, BrotliResult, BrotliState, }; pub use self::enc::combined_alloc::CombiningAllocator; pub use crate::enc::input_pair::{InputPair, InputReference, InputReferenceMut}; pub use crate::enc::interface::SliceOffset; #[cfg(feature = "std")] pub use crate::enc::reader::CompressorReader; pub use crate::enc::reader::CompressorReaderCustomIo; #[cfg(feature = "std")] pub use crate::enc::writer::CompressorWriter; pub use crate::enc::writer::CompressorWriterCustomIo; pub use crate::enc::{interface, BrotliCompressCustomIo, BrotliCompressCustomIoCustomDict}; #[cfg(feature = "std")] pub use crate::enc::{BrotliCompress, BrotliCompressCustomAlloc}; pub const VERSION: u8 = 1; // interface // pub fn BrotliDecompressStream(mut available_in: &mut usize, // input_offset: &mut usize, // input: &[u8], // mut available_out: &mut usize, // mut output_offset: &mut usize, // mut output: &mut [u8], // mut total_out: &mut usize, // mut s: &mut BrotliState);