diff --git a/.clang-format b/.clang-format index 992290471..24f605400 100644 --- a/.clang-format +++ b/.clang-format @@ -62,14 +62,14 @@ UseTab: Never --- Language: Cpp Standard: c++11 -ColumnLimit: 120 +ColumnLimit: 360 --- Language: ObjC -ColumnLimit: 120 +ColumnLimit: 360 --- Language: Java -ColumnLimit: 120 +ColumnLimit: 360 --- Language: CSharp -ColumnLimit: 120 +ColumnLimit: 360 ... diff --git a/aes-gmac-siv/Cargo.lock b/aes-gmac-siv/Cargo.lock new file mode 100644 index 000000000..bc27b21d2 --- /dev/null +++ b/aes-gmac-siv/Cargo.lock @@ -0,0 +1,132 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aes-gmac-siv" +version = "0.1.0" +dependencies = [ + "gcrypt", +] + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "cc" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cstr-argument" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20bd4e8067c20c7c3a4dea759ef91d4b18418ddb5bd8837ef6e2f2f93ca7ccbb" +dependencies = [ + "cfg-if", + "memchr", +] + +[[package]] +name = "gcrypt" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2ee79dcb8915fc0e9d8364e87d2215555076aa159d0a5d84ba9dba109b0d59" +dependencies = [ + "bitflags", + "cstr-argument", + "gpg-error", + "libc", + "libgcrypt-sys", + "once_cell", +] + +[[package]] +name = "gpg-error" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7073b9ac823434ae73608715086e944d694a7ce2677371b8c5253300d1f767f1" +dependencies = [ + "libgpg-error-sys", +] + +[[package]] +name = "libc" +version = "0.2.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" + +[[package]] +name = "libgcrypt-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62eb5d6d9cd6d8c8adf9641c95b223eb14f07a7a81c082e2d08f0bf3880214e4" +dependencies = [ + "cc", + "cfg-if", + "libc", + "libgpg-error-sys", +] + +[[package]] +name = "libgpg-error-sys" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1aedf0efc5d25fdd08eb52b0759c71d02ac77fd1879b96e95211239528897" +dependencies = [ + "libc", + "winreg", +] + +[[package]] +name = "memchr" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winreg" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +dependencies = [ + "winapi", +] diff --git a/aes-gmac-siv/Cargo.toml b/aes-gmac-siv/Cargo.toml new file mode 100644 index 000000000..adf59a5e6 --- /dev/null +++ b/aes-gmac-siv/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "aes-gmac-siv" +version = "0.1.0" +edition = "2018" + +[profile.test] +opt-level = 3 +lto = true +codegen-units = 1 + +[dependencies] +gcrypt = "^0" diff --git a/aes-gmac-siv/src/impl_gcrypt.rs b/aes-gmac-siv/src/impl_gcrypt.rs new file mode 100644 index 000000000..59247cb6f --- /dev/null +++ b/aes-gmac-siv/src/impl_gcrypt.rs @@ -0,0 +1,171 @@ +use std::io::Write; + +/// AES-GMAC-SIV encryptor/decryptor. +#[repr(align(8))] // allow tag and tmp to be accessed as u64 arrays as well +pub struct AesGmacSiv { + tag: [u8; 16], + tmp: [u8; 16], + ctr: gcrypt::cipher::Cipher, + ecb: gcrypt::cipher::Cipher, + gmac: gcrypt::mac::Mac, +} + +impl AesGmacSiv { + /// Create a new keyed instance of AES-GMAC-SIV + /// The key may be of size 16, 24, or 32 bytes (128, 192, or 256 bits). Any other size will panic. + #[inline(always)] + pub fn new(key: &[u8]) -> Self { + if key.len() != 32 && key.len() != 24 && key.len() != 16 { + panic!("AES supports 128, 192, or 256 bits keys"); + } + let mut c = AesGmacSiv { + tag: [0_u8; 16], + tmp: [0_u8; 16], + ctr: gcrypt::cipher::Cipher::new(gcrypt::cipher::Algorithm::Aes, gcrypt::cipher::Mode::Ctr).unwrap(), + ecb: gcrypt::cipher::Cipher::new(gcrypt::cipher::Algorithm::Aes, gcrypt::cipher::Mode::Ecb).unwrap(), + gmac: gcrypt::mac::Mac::new(gcrypt::mac::Algorithm::GmacAes).unwrap(), + }; + c.ctr.set_key(key).expect("AES-CTR init failed"); + c.ecb.set_key(key).expect("AES-ECB init failed"); + c.gmac.set_key(key).expect("AES-GMAC init failed"); + c + } + + /// Reset to prepare for another encrypt or decrypt operation. + #[inline(always)] + pub fn reset(&mut self) { + let _ = self.ctr.reset(); + // self.ecb is stateless + let _ = self.gmac.reset(); + } + + /// Initialize for encryption. + #[inline(always)] + pub fn encrypt_init(&mut self, iv: &[u8]) { + self.tag[0..8].copy_from_slice(iv); + self.tag[8..16].fill(0); + let _ = self.gmac.set_iv(&self.tag); + } + + /// Set additional authenticated data (data to be authenticated but not encrypted). + /// This can currently only be called once. Multiple calls will result in corrupt data. + #[inline(always)] + pub fn encrypt_set_aad(&mut self, data: &[u8]) { + let _ = self.gmac.update(data); + let pad = data.len() & 0xf; + if pad != 0 { + let _ = self.gmac.update(&crate::ZEROES[0..(16 - pad)]); + } + } + + /// Feed plaintext in for the first encryption pass. + /// This may be called more than once. + #[inline(always)] + pub fn encrypt_first_pass(&mut self, plaintext: &[u8]) { + let _ = self.gmac.update(plaintext); + } + + /// Finish first pass and begin second pass. + #[inline(always)] + pub fn encrypt_first_pass_finish(&mut self) { + let _ = self.gmac.flush(); + let _ = self.gmac.get_mac(&mut self.tmp); + unsafe { // tag[8..16] = tmp[0..8] ^ tmp[8..16] + let tmp = self.tmp.as_mut_ptr().cast::(); + *self.tag.as_mut_ptr().cast::().offset(1) = *tmp ^ *tmp.offset(1); + } + let _ = self.ecb.encrypt_inplace(&mut self.tag); + self.tmp.copy_from_slice(&self.tag); + self.tmp[12] &= 0x7f; + let _ = self.ctr.set_ctr(&self.tmp); + } + + /// Feed plaintext for second pass and write ciphertext to supplied buffer. + /// This may be called more than once. + #[inline(always)] + pub fn encrypt_second_pass(&mut self, plaintext: &[u8], ciphertext: &mut [u8]) { + let _ = self.ctr.encrypt(plaintext, ciphertext); + } + + /// Encrypt plaintext in place. + /// This may be called more than once. + #[inline(always)] + pub fn encrypt_second_pass_in_place(&mut self, plaintext_to_ciphertext: &mut [u8]) { + let _ = self.ctr.encrypt_inplace(plaintext_to_ciphertext); + } + + /// Finish second pass and return a reference to the tag for this message. + /// The tag returned remains valid until reset() is called. + #[inline(always)] + pub fn encrypt_second_pass_finish(&mut self) -> &[u8; 16] { + return &self.tag; + } + + #[inline(always)] + fn decrypt_init_internal(&mut self) { + self.tmp[12] &= 0x7f; + let _ = self.ctr.set_ctr(&self.tmp); + + let _ = self.ecb.decrypt_inplace(&mut self.tag); + unsafe { // tmp[0..8] = tag[0..8], tmp[8..16] = 0 + let tmp = self.tmp.as_mut_ptr().cast::(); + *tmp = *self.tag.as_mut_ptr().cast::(); + *tmp.offset(1) = 0; + } + let _ = self.gmac.set_iv(&self.tmp); + } + + /// Initialize this cipher for decryption. + /// The supplied tag must be 16 bytes in length. Any other length will panic. + #[inline(always)] + pub fn decrypt_init(&mut self, tag: &[u8]) { + self.tmp.copy_from_slice(tag); + self.tag.copy_from_slice(tag); + self.decrypt_init_internal(); + } + + /// Initialize this cipher for decryption from tag split into two 8-byte chunks (for ZeroTier use). + /// The supplied tag chunks must be 8 bytes in length. Any other length will panic. + #[inline(always)] + pub fn decrypt_init2(&mut self, tag_0_8: &[u8], tag_8_16: &[u8]) { + self.tmp[0..8].copy_from_slice(tag_0_8); + self.tmp[8..16].copy_from_slice(tag_8_16); + self.tag[0..8].copy_from_slice(tag_0_8); + self.tag[8..16].copy_from_slice(tag_8_16); + self.decrypt_init_internal(); + } + + /// Set additional authenticated data to be checked. + #[inline(always)] + pub fn decrypt_set_aad(&mut self, data: &[u8]) { + self.encrypt_set_aad(data); + } + + /// Decrypt ciphertext and write to plaintext. + /// This may be called more than once. + #[inline(always)] + pub fn decrypt(&mut self, ciphertext: &[u8], plaintext: &mut [u8]) { + let _ = self.ctr.decrypt(ciphertext, plaintext); + let _ = self.gmac.update(plaintext); + } + + /// Decrypt ciphertext in place. + /// This may be called more than once. + #[inline(always)] + pub fn decrypt_in_place(&mut self, ciphertext_to_plaintext: &mut [u8]) { + let _ = self.ctr.decrypt_inplace(ciphertext_to_plaintext); + let _ = self.gmac.update(ciphertext_to_plaintext); + } + + /// Finish decryption and return true if authentication appears valid. + /// If this returns false the message should be dropped. + #[inline(always)] + pub fn decrypt_finish(&mut self) -> bool { + let _ = self.gmac.flush(); + let _ = self.gmac.get_mac(&mut self.tmp); + unsafe { // tag[8..16] == tmp[0..8] ^ tmp[8..16] + let tmp = self.tmp.as_mut_ptr().cast::(); + *self.tag.as_mut_ptr().cast::().offset(1) == *tmp ^ *tmp.offset(1) + } + } +} diff --git a/aes-gmac-siv/src/impl_macos.rs b/aes-gmac-siv/src/impl_macos.rs new file mode 100644 index 000000000..d5bf9492e --- /dev/null +++ b/aes-gmac-siv/src/impl_macos.rs @@ -0,0 +1,258 @@ +use std::os::raw::{c_void, c_int}; +use std::ptr::{null_mut, null}; + +#[allow(non_upper_case_globals)] +const kCCModeECB: i32 = 1; +#[allow(non_upper_case_globals)] +const kCCModeCTR: i32 = 4; +#[allow(non_upper_case_globals)] +const kCCModeGCM: i32 = 11; +#[allow(non_upper_case_globals)] +const kCCEncrypt: i32 = 0; +#[allow(non_upper_case_globals)] +const kCCDecrypt: i32 = 1; +#[allow(non_upper_case_globals)] +const kCCAlgorithmAES: i32 = 0; +#[allow(non_upper_case_globals)] +const kCCOptionECBMode: i32 = 2; + +extern "C" { + fn CCCryptorCreateWithMode(op: i32, mode: i32, alg: i32, padding: i32, iv: *const c_void, key: *const c_void, key_len: usize, tweak: *const c_void, tweak_len: usize, num_rounds: c_int, options: i32, cryyptor_ref: *mut *mut c_void) -> i32; + fn CCCryptorUpdate(cryptor_ref: *mut c_void, data_in: *const c_void, data_in_len: usize, data_out: *mut c_void, data_out_len: usize, data_out_written: *mut usize) -> i32; + fn CCCryptorReset(cryptor_ref: *mut c_void, iv: *const c_void) -> i32; + fn CCCryptorRelease(cryptor_ref: *mut c_void) -> i32; + fn CCCryptorGCMSetIV(cryptor_ref: *mut c_void, iv: *const c_void, iv_len: usize) -> i32; + fn CCCryptorGCMAddAAD(cryptor_ref: *mut c_void, aad: *const c_void, len: usize) -> i32; + fn CCCryptorGCMFinalize(cryptor_ref: *mut c_void, tag: *mut c_void, tag_len: usize) -> i32; + fn CCCryptorGCMReset(cryptor_ref: *mut c_void) -> i32; +} + +#[repr(align(8))] +pub struct AesGmacSiv { + tag: [u8; 16], + tmp: [u8; 16], + ctr: *mut c_void, + ecb_enc: *mut c_void, + ecb_dec: *mut c_void, + gmac: *mut c_void, +} + +impl Drop for AesGmacSiv { + fn drop(&mut self) { + unsafe { + if !self.ctr.is_null() { + CCCryptorRelease(self.ctr); + } + if !self.ecb_enc.is_null() { + CCCryptorRelease(self.ecb_enc); + } + if !self.ecb_dec.is_null() { + CCCryptorRelease(self.ecb_dec); + } + if !self.gmac.is_null() { + CCCryptorRelease(self.gmac); + } + } + } +} + +impl AesGmacSiv { + /// Create a new keyed instance of AES-GMAC-SIV + /// The key may be of size 16, 24, or 32 bytes (128, 192, or 256 bits). Any other size will panic. + #[inline(always)] + pub fn new(key: &[u8]) -> Self { + if key.len() != 32 && key.len() != 24 && key.len() != 16 { + panic!("AES supports 128, 192, or 256 bits keys"); + } + let mut c: AesGmacSiv = AesGmacSiv { + tag: [0_u8; 16], + tmp: [0_u8; 16], + ctr: null_mut(), + ecb_enc: null_mut(), + ecb_dec: null_mut(), + gmac: null_mut(), + }; + unsafe { + let result = CCCryptorCreateWithMode(kCCEncrypt, kCCModeCTR, kCCAlgorithmAES, 0, crate::ZEROES.as_ptr().cast(), key.as_ptr().cast(), key.len(), null(), 0, 0, 0, &mut c.ctr); + if result != 0 { + panic!("CCCryptorCreateWithMode for ECB encrypt mode returned {}", result); + } + let result = CCCryptorCreateWithMode(kCCEncrypt, kCCModeECB, kCCAlgorithmAES, 0, crate::ZEROES.as_ptr().cast(), key.as_ptr().cast(), key.len(), null(), 0, 0, kCCOptionECBMode, &mut c.ecb_enc); + if result != 0 { + panic!("CCCryptorCreateWithMode for ECB encrypt mode returned {}", result); + } + let result = CCCryptorCreateWithMode(kCCDecrypt, kCCModeECB, kCCAlgorithmAES, 0, crate::ZEROES.as_ptr().cast(), key.as_ptr().cast(), key.len(), null(), 0, 0, kCCOptionECBMode, &mut c.ecb_dec); + if result != 0 { + panic!("CCCryptorCreateWithMode for ECB decrypt mode returned {}", result); + } + let result = CCCryptorCreateWithMode(kCCEncrypt, kCCModeGCM, kCCAlgorithmAES, 0, crate::ZEROES.as_ptr().cast(), key.as_ptr().cast(), key.len(), null(), 0, 0, 0, &mut c.gmac); + if result != 0 { + panic!("CCCryptorCreateWithMode for ECB decrypt mode returned {}", result); + } + } + c + } + + /// Reset to prepare for another encrypt or decrypt operation. + #[inline(always)] + pub fn reset(&mut self) { + unsafe { + CCCryptorGCMReset(self.gmac); + } + } + + /// Initialize for encryption. + #[inline(always)] + pub fn encrypt_init(&mut self, iv: &[u8]) { + self.tag[0..8].copy_from_slice(iv); + self.tag[8..16].fill(0); + unsafe { + CCCryptorGCMSetIV(self.gmac, self.tag.as_ptr().cast(), 16); + } + } + + /// Set additional authenticated data (data to be authenticated but not encrypted). + /// This can currently only be called once. Multiple calls will result in corrupt data. + #[inline(always)] + pub fn encrypt_set_aad(&mut self, data: &[u8]) { + unsafe { + CCCryptorGCMAddAAD(self.gmac, data.as_ptr().cast(), data.len()); + } + let pad = data.len() & 0xf; + if pad != 0 { + unsafe { + CCCryptorGCMAddAAD(self.gmac, crate::ZEROES.as_ptr().cast(), 16 - pad); + } + } + } + + /// Feed plaintext in for the first encryption pass. + /// This may be called more than once. + #[inline(always)] + pub fn encrypt_first_pass(&mut self, plaintext: &[u8]) { + unsafe { + CCCryptorGCMAddAAD(self.gmac, plaintext.as_ptr().cast(), plaintext.len()); + } + } + + /// Finish first pass and begin second pass. + #[inline(always)] + pub fn encrypt_first_pass_finish(&mut self) { + unsafe { + CCCryptorGCMFinalize(self.gmac, self.tmp.as_mut_ptr().cast(), 16); + let tmp = self.tmp.as_mut_ptr().cast::(); + *self.tag.as_mut_ptr().cast::().offset(1) = *tmp ^ *tmp.offset(1); + let mut data_out_written: usize = 0; + CCCryptorUpdate(self.ecb_enc, self.tag.as_ptr().cast(), 16, self.tag.as_mut_ptr().cast(), 16, &mut data_out_written); + } + self.tmp.copy_from_slice(&self.tag); + self.tmp[12] &= 0x7f; + unsafe { + if CCCryptorReset(self.ctr, self.tmp.as_ptr().cast()) != 0 { + panic!("CCryptorReset for CTR mode failed (old MacOS bug)"); + } + } + } + + /// Feed plaintext for second pass and write ciphertext to supplied buffer. + /// This may be called more than once. + #[inline(always)] + pub fn encrypt_second_pass(&mut self, plaintext: &[u8], ciphertext: &mut [u8]) { + unsafe { + let mut data_out_written: usize = 0; + CCCryptorUpdate(self.ctr, plaintext.as_ptr().cast(), plaintext.len(), ciphertext.as_mut_ptr().cast(), ciphertext.len(), &mut data_out_written); + } + } + + /// Encrypt plaintext in place. + /// This may be called more than once. + #[inline(always)] + pub fn encrypt_second_pass_in_place(&mut self, plaintext_to_ciphertext: &mut [u8]) { + unsafe { + let mut data_out_written: usize = 0; + CCCryptorUpdate(self.ctr, plaintext_to_ciphertext.as_ptr().cast(), plaintext_to_ciphertext.len(), plaintext_to_ciphertext.as_mut_ptr().cast(), plaintext_to_ciphertext.len(), &mut data_out_written); + } + } + + /// Finish second pass and return a reference to the tag for this message. + /// The tag returned remains valid until reset() is called. + #[inline(always)] + pub fn encrypt_second_pass_finish(&mut self) -> &[u8; 16] { + return &self.tag; + } + + #[inline(always)] + fn decrypt_init_internal(&mut self) { + self.tmp[12] &= 0x7f; + unsafe { + if CCCryptorReset(self.ctr, self.tmp.as_ptr().cast()) != 0 { + panic!("CCryptorReset for CTR mode failed (old MacOS bug)"); + } + let mut data_out_written: usize = 0; + CCCryptorUpdate(self.ecb_dec, self.tag.as_ptr().cast(), 16, self.tag.as_mut_ptr().cast(), 16, &mut data_out_written); + let tmp = self.tmp.as_mut_ptr().cast::(); + *tmp = *self.tag.as_mut_ptr().cast::(); + *tmp.offset(1) = 0; + CCCryptorGCMSetIV(self.gmac, self.tmp.as_ptr().cast(), 16); + } + } + + /// Initialize this cipher for decryption. + /// The supplied tag must be 16 bytes in length. Any other length will panic. + #[inline(always)] + pub fn decrypt_init(&mut self, tag: &[u8]) { + self.tmp.copy_from_slice(tag); + self.tag.copy_from_slice(tag); + self.decrypt_init_internal(); + } + + /// Initialize this cipher for decryption from tag split into two 8-byte chunks (for ZeroTier use). + /// The supplied tag chunks must be 8 bytes in length. Any other length will panic. + #[inline(always)] + pub fn decrypt_init2(&mut self, tag_0_8: &[u8], tag_8_16: &[u8]) { + self.tmp[0..8].copy_from_slice(tag_0_8); + self.tmp[8..16].copy_from_slice(tag_8_16); + self.tag[0..8].copy_from_slice(tag_0_8); + self.tag[8..16].copy_from_slice(tag_8_16); + self.decrypt_init_internal(); + } + + /// Set additional authenticated data to be checked. + #[inline(always)] + pub fn decrypt_set_aad(&mut self, data: &[u8]) { + self.encrypt_set_aad(data); + } + + /// Decrypt ciphertext and write to plaintext. + /// This may be called more than once. + #[inline(always)] + pub fn decrypt(&mut self, ciphertext: &[u8], plaintext: &mut [u8]) { + unsafe { + let mut data_out_written: usize = 0; + CCCryptorUpdate(self.ctr, ciphertext.as_ptr().cast(), ciphertext.len(), plaintext.as_mut_ptr().cast(), plaintext.len(), &mut data_out_written); + CCCryptorGCMAddAAD(self.gmac, plaintext.as_ptr().cast(), plaintext.len()); + } + } + + /// Decrypt ciphertext in place. + /// This may be called more than once. + #[inline(always)] + pub fn decrypt_in_place(&mut self, ciphertext_to_plaintext: &mut [u8]) { + unsafe { + let mut data_out_written: usize = 0; + CCCryptorUpdate(self.ctr, ciphertext_to_plaintext.as_ptr().cast(), ciphertext_to_plaintext.len(), ciphertext_to_plaintext.as_mut_ptr().cast(), ciphertext_to_plaintext.len(), &mut data_out_written); + CCCryptorGCMAddAAD(self.gmac, ciphertext_to_plaintext.as_ptr().cast(), ciphertext_to_plaintext.len()); + } + } + + /// Finish decryption and return true if authentication appears valid. + /// If this returns false the message should be dropped. + #[inline(always)] + pub fn decrypt_finish(&mut self) -> bool { + unsafe { + CCCryptorGCMFinalize(self.gmac, self.tmp.as_mut_ptr().cast(), 16); + let tmp = self.tmp.as_mut_ptr().cast::(); + *self.tag.as_mut_ptr().cast::().offset(1) == *tmp ^ *tmp.offset(1) + } + } +} diff --git a/aes-gmac-siv/src/lib.rs b/aes-gmac-siv/src/lib.rs new file mode 100644 index 000000000..3614a39b1 --- /dev/null +++ b/aes-gmac-siv/src/lib.rs @@ -0,0 +1,89 @@ +#[cfg(target_os = "macos")] +mod impl_macos; +#[cfg(not(target_os = "macos"))] +mod impl_gcrypt; + +#[cfg(target_os = "macos")] +pub use impl_macos::AesGmacSiv; +#[cfg(not(target_os = "macos"))] +pub use impl_gcrypt::AesGmacSiv; + +pub(crate) const ZEROES: [u8; 16] = [0_u8; 16]; + +#[cfg(test)] +mod tests { + use crate::AesGmacSiv; + use std::time::SystemTime; + + fn to_hex(b: &[u8]) -> String { + let mut s = String::new(); + for c in b.iter() { + s = format!("{}{:0>2x}", s, *c); + } + s + } + + #[test] + fn encrypt_decrypt() { + let aes_key: [u8; 32] = [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]; + let iv: [u8; 8] = [0,1,2,3,4,5,6,7]; + + let mut buf = [0_u8; 12345]; + for i in 1..12345 { + buf[i] = i as u8; + } + + let mut c = AesGmacSiv::new(&aes_key); + + for _ in 1..4 { + c.reset(); + c.encrypt_init(&iv); + c.encrypt_first_pass(&buf); + c.encrypt_first_pass_finish(); + c.encrypt_second_pass_in_place(&mut buf); + let tag = c.encrypt_second_pass_finish().clone(); + let mut sha = [0_u8; 48]; + gcrypt::digest::hash(gcrypt::digest::Algorithm::Sha384, &buf, &mut sha); + let sha = to_hex(&sha); + if sha != "f455fa8a1a6badaeccdefe573a10d5d79eb7f4009b84dff3d37f9f1e95ee2b0ba6149737c0701d5ef75f58f793174d3d" { + panic!("encrypt result hash check failed!"); + } + println!("Encrypt OK, tag: {}, hash: {}", to_hex(&tag), sha); + + c.reset(); + c.decrypt_init(&tag); + c.decrypt_in_place(&mut buf); + if !c.decrypt_finish() { + panic!("decrypt tag check failed!"); + } + for i in 1..12345 { + if buf[i] != (i & 0xff) as u8 { + panic!("decrypt data check failed!"); + } + } + println!("Decrypt OK"); + } + + let benchmark_iterations: usize = 100000; + let start = SystemTime::now(); + for _ in 0..benchmark_iterations { + c.reset(); + c.encrypt_init(&iv); + c.encrypt_first_pass(&buf); + c.encrypt_first_pass_finish(); + c.encrypt_second_pass_in_place(&mut buf); + let _ = c.encrypt_second_pass_finish(); + } + let duration = SystemTime::now().duration_since(start).unwrap(); + println!("Encrypt benchmark: {} MiB/sec", (((benchmark_iterations * buf.len()) as f64) / 1048576.0) / duration.as_secs_f64()); + let start = SystemTime::now(); + for _ in 0..benchmark_iterations { + c.reset(); + c.decrypt_init(&buf[0..16]); // we don't care if decryption is successful to benchmark, so anything will do + c.decrypt_in_place(&mut buf); + c.decrypt_finish(); + } + let duration = SystemTime::now().duration_since(start).unwrap(); + println!("Decrypt benchmark: {} MiB/sec", (((benchmark_iterations * buf.len()) as f64) / 1048576.0) / duration.as_secs_f64()); + } +} diff --git a/aes-gmac-siv/target/.rustc_info.json b/aes-gmac-siv/target/.rustc_info.json new file mode 100644 index 000000000..ddd0012a6 --- /dev/null +++ b/aes-gmac-siv/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":14118114167897737218,"outputs":{"17598535894874457435":{"success":true,"status":"","code":0,"stdout":"rustc 1.53.0 (53cb7b09b 2021-06-17)\nbinary: rustc\ncommit-hash: 53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b\ncommit-date: 2021-06-17\nhost: aarch64-apple-darwin\nrelease: 1.53.0\nLLVM version: 12.0.1\n","stderr":""},"14460901965178315333":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/api/.rustup/toolchains/stable-aarch64-apple-darwin\ndebug_assertions\nproc_macro\ntarget_arch=\"aarch64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"10196090686207889515":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/aes-gmac-siv/target/CACHEDIR.TAG b/aes-gmac-siv/target/CACHEDIR.TAG new file mode 100644 index 000000000..20d7c319c --- /dev/null +++ b/aes-gmac-siv/target/CACHEDIR.TAG @@ -0,0 +1,3 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by cargo. +# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/aes-gmac-siv/target/debug/.cargo-lock b/aes-gmac-siv/target/debug/.cargo-lock new file mode 100644 index 000000000..e69de29bb diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/dep-test-lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/dep-test-lib-aes-gmac-siv new file mode 100644 index 000000000..944e95ea1 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/dep-test-lib-aes-gmac-siv differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/test-lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/test-lib-aes-gmac-siv new file mode 100644 index 000000000..147b43e30 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/test-lib-aes-gmac-siv @@ -0,0 +1 @@ +84670a075a39b22b \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/test-lib-aes-gmac-siv.json b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/test-lib-aes-gmac-siv.json new file mode 100644 index 000000000..b3549620a --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/test-lib-aes-gmac-siv.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":16918549075539494504,"profile":16819898484982727116,"path":10872709659218687626,"deps":[[13682942004444382334,"gcrypt",false,9598029516378950314]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aes-gmac-siv-5b1abd81e5ce9de6/dep-test-lib-aes-gmac-siv"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":7797948686568424061,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/dep-lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/dep-lib-aes-gmac-siv new file mode 100644 index 000000000..944e95ea1 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/dep-lib-aes-gmac-siv differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/lib-aes-gmac-siv new file mode 100644 index 000000000..141f2bce0 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/lib-aes-gmac-siv @@ -0,0 +1 @@ +e1202c68d40e27ed \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/lib-aes-gmac-siv.json b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/lib-aes-gmac-siv.json new file mode 100644 index 000000000..0e60ed9d6 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/lib-aes-gmac-siv.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":16918549075539494504,"profile":15577515711213539963,"path":10872709659218687626,"deps":[[13682942004444382334,"gcrypt",false,9598029516378950314]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aes-gmac-siv-875e596b10f5485e/dep-lib-aes-gmac-siv"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":7797948686568424061,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/dep-lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/dep-lib-aes-gmac-siv new file mode 100644 index 000000000..fb1fbecba Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/dep-lib-aes-gmac-siv differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/lib-aes-gmac-siv new file mode 100644 index 000000000..fe7f2a96a --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/lib-aes-gmac-siv @@ -0,0 +1 @@ +4a424a22d33cfb05 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/lib-aes-gmac-siv.json b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/lib-aes-gmac-siv.json new file mode 100644 index 000000000..057caa8b3 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/lib-aes-gmac-siv.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":16918549075539494504,"profile":15407205952654432191,"path":10872709659218687626,"deps":[[13682942004444382334,"gcrypt",false,10580414839537911539]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aes-gmac-siv-b13b4d3e539005c7/dep-lib-aes-gmac-siv"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":7797948686568424061,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/dep-test-lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/dep-test-lib-aes-gmac-siv new file mode 100644 index 000000000..fb1fbecba Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/dep-test-lib-aes-gmac-siv differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/output-test-lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/output-test-lib-aes-gmac-siv new file mode 100644 index 000000000..669e43458 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/output-test-lib-aes-gmac-siv @@ -0,0 +1,2 @@ +{"message":"unused variable: `k`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/lib.rs","byte_start":8107,"byte_end":8108,"line_start":228,"line_end":228,"column_start":13,"column_end":14,"is_primary":true,"text":[{"text":" for k in 0..benchmark_iterations {","highlight_start":13,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/lib.rs","byte_start":8107,"byte_end":8108,"line_start":228,"line_end":228,"column_start":13,"column_end":14,"is_primary":true,"text":[{"text":" for k in 0..benchmark_iterations {","highlight_start":13,"highlight_end":14}],"label":null,"suggested_replacement":"_k","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `k`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:228:13\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m228\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m for k in 0..benchmark_iterations {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_k`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_variables)]` on by default\u001b[0m\n\n"} +{"message":"1 warning emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 1 warning emitted\u001b[0m\n\n"} diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/test-lib-aes-gmac-siv b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/test-lib-aes-gmac-siv new file mode 100644 index 000000000..0308660e2 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/test-lib-aes-gmac-siv @@ -0,0 +1 @@ +9ed6a6ad7190de3e \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/test-lib-aes-gmac-siv.json b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/test-lib-aes-gmac-siv.json new file mode 100644 index 000000000..4c10be424 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/test-lib-aes-gmac-siv.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":16918549075539494504,"profile":14850011074761641702,"path":10872709659218687626,"deps":[[13682942004444382334,"gcrypt",false,10580414839537911539]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aes-gmac-siv-bc95c1caa14365d2/dep-test-lib-aes-gmac-siv"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":7797948686568424061,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/build-script-build-script-build new file mode 100644 index 000000000..9a8620138 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/build-script-build-script-build @@ -0,0 +1 @@ +c4a478d20513e65c \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/build-script-build-script-build.json new file mode 100644 index 000000000..737b957d3 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"default\"]","target":10088282520713642473,"profile":15155709024791400979,"path":15258657618928579986,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-24eb957c84cdde52/dep-build-script-build-script-build"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":14564035643000669268,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/dep-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/dep-build-script-build-script-build new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/dep-build-script-build-script-build differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-24eb957c84cdde52/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/dep-lib-bitflags b/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/dep-lib-bitflags new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/dep-lib-bitflags differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/lib-bitflags b/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/lib-bitflags new file mode 100644 index 000000000..66bde7143 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/lib-bitflags @@ -0,0 +1 @@ +f90db12176e10867 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/lib-bitflags.json b/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/lib-bitflags.json new file mode 100644 index 000000000..75ae8b927 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-7e8c35729097e448/lib-bitflags.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"default\"]","target":14123478400658042508,"profile":15155709024791400979,"path":6280990280994885824,"deps":[[4117749705314174326,"build_script_build",false,14078376324211107649]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-7e8c35729097e448/dep-lib-bitflags"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":14564035643000669268,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/dep-lib-bitflags b/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/dep-lib-bitflags new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/dep-lib-bitflags differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/lib-bitflags b/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/lib-bitflags new file mode 100644 index 000000000..39e7864a9 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/lib-bitflags @@ -0,0 +1 @@ +4aefcb9940ee32ac \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/lib-bitflags.json b/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/lib-bitflags.json new file mode 100644 index 000000000..b1af80e4b --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-ce7067cc35224a19/lib-bitflags.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"default\"]","target":14123478400658042508,"profile":4393393052366255477,"path":6280990280994885824,"deps":[[4117749705314174326,"build_script_build",false,14078376324211107649]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-ce7067cc35224a19/dep-lib-bitflags"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":14564035643000669268,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-fb8276f0f53cf96f/run-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/bitflags-fb8276f0f53cf96f/run-build-script-build-script-build new file mode 100644 index 000000000..cd928679d --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-fb8276f0f53cf96f/run-build-script-build-script-build @@ -0,0 +1 @@ +4167df2aad7060c3 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/bitflags-fb8276f0f53cf96f/run-build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/bitflags-fb8276f0f53cf96f/run-build-script-build-script-build.json new file mode 100644 index 000000000..ee924c8e2 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/bitflags-fb8276f0f53cf96f/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"","target":0,"profile":0,"path":0,"deps":[[4117749705314174326,"build_script_build",false,6694058811859707076]],"local":[{"Precalculated":"1.2.1"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/dep-lib-cc b/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/dep-lib-cc new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/dep-lib-cc differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/lib-cc b/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/lib-cc new file mode 100644 index 000000000..feedbc924 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/lib-cc @@ -0,0 +1 @@ +603d9afa1e99fe04 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/lib-cc.json b/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/lib-cc.json new file mode 100644 index 000000000..3c4713ab9 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cc-6b5aa7e0383028dc/lib-cc.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":8289292967887089307,"profile":15155709024791400979,"path":17942303961296195309,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cc-6b5aa7e0383028dc/dep-lib-cc"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":16504835547841594983,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/dep-lib-cfg-if b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/dep-lib-cfg-if new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/dep-lib-cfg-if differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/lib-cfg-if b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/lib-cfg-if new file mode 100644 index 000000000..72df299f6 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/lib-cfg-if @@ -0,0 +1 @@ +d0d901035eeb4a8c \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/lib-cfg-if.json b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/lib-cfg-if.json new file mode 100644 index 000000000..f57e3f743 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-be66a79b7ab460da/lib-cfg-if.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":834697563557903354,"profile":15155709024791400979,"path":5505450662915570660,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-be66a79b7ab460da/dep-lib-cfg-if"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":8462187951337715540,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/dep-lib-cfg-if b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/dep-lib-cfg-if new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/dep-lib-cfg-if differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/lib-cfg-if b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/lib-cfg-if new file mode 100644 index 000000000..a75969486 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/lib-cfg-if @@ -0,0 +1 @@ +02439a6fc06dcff0 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/lib-cfg-if.json b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/lib-cfg-if.json new file mode 100644 index 000000000..6bee7e0e8 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cfg-if-e801ab34c04da5fd/lib-cfg-if.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":834697563557903354,"profile":14858020581876302926,"path":5505450662915570660,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-e801ab34c04da5fd/dep-lib-cfg-if"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":8462187951337715540,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/dep-lib-cstr-argument b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/dep-lib-cstr-argument new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/dep-lib-cstr-argument differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/lib-cstr-argument b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/lib-cstr-argument new file mode 100644 index 000000000..98089c735 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/lib-cstr-argument @@ -0,0 +1 @@ +fb0cd2734a05880d \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/lib-cstr-argument.json b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/lib-cstr-argument.json new file mode 100644 index 000000000..dfcf105b8 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-b3206ac6d2945a18/lib-cstr-argument.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":6360621662778849253,"profile":15155709024791400979,"path":3201647282673695137,"deps":[[13837234849270857574,"cfg_if",false,10109151102596405712],[13856633986524295345,"memchr",false,11169786365150926174]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cstr-argument-b3206ac6d2945a18/dep-lib-cstr-argument"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":9024000938744404432,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/dep-lib-cstr-argument b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/dep-lib-cstr-argument new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/dep-lib-cstr-argument differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/lib-cstr-argument b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/lib-cstr-argument new file mode 100644 index 000000000..aac2c48c0 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/lib-cstr-argument @@ -0,0 +1 @@ +eb945c58e005d34f \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/lib-cstr-argument.json b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/lib-cstr-argument.json new file mode 100644 index 000000000..8e185a18d --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/cstr-argument-e83a3bce6491455b/lib-cstr-argument.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":6360621662778849253,"profile":4393393052366255477,"path":3201647282673695137,"deps":[[13837234849270857574,"cfg_if",false,17352208562555339522],[13856633986524295345,"memchr",false,6597688199072254436]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cstr-argument-e83a3bce6491455b/dep-lib-cstr-argument"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":9024000938744404432,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/dep-lib-gcrypt b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/dep-lib-gcrypt new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/dep-lib-gcrypt differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/lib-gcrypt b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/lib-gcrypt new file mode 100644 index 000000000..e611319a9 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/lib-gcrypt @@ -0,0 +1 @@ +f3c6ed363d2fd592 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/lib-gcrypt.json b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/lib-gcrypt.json new file mode 100644 index 000000000..c7c6c5b73 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-205a0cd896b30512/lib-gcrypt.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":7410414245219738288,"profile":15155709024791400979,"path":3007036316954759984,"deps":[[2309034502573133381,"gpg_error",false,2169790023855475888],[4117749705314174326,"bitflags",false,7424431883207904761],[8575138685625640516,"cstr_argument",false,975035136654576891],[12253354796554471582,"libc",false,7945985838379286731],[17238172427721607708,"ffi",false,8086352383995432089],[18264861260725460857,"once_cell",false,10106597641972154232]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/gcrypt-205a0cd896b30512/dep-lib-gcrypt"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":6407965173056413679,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/dep-lib-gcrypt b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/dep-lib-gcrypt new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/dep-lib-gcrypt differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/lib-gcrypt b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/lib-gcrypt new file mode 100644 index 000000000..ac8e1f15f --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/lib-gcrypt @@ -0,0 +1 @@ +aa4a7b1bfe0c3385 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/lib-gcrypt.json b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/lib-gcrypt.json new file mode 100644 index 000000000..ea573f3e4 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gcrypt-ce56f0cd2515e604/lib-gcrypt.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":7410414245219738288,"profile":4393393052366255477,"path":3007036316954759984,"deps":[[2309034502573133381,"gpg_error",false,17817119011893576608],[4117749705314174326,"bitflags",false,12408241884584734538],[8575138685625640516,"cstr_argument",false,5751947610195530987],[12253354796554471582,"libc",false,8014141609551725673],[17238172427721607708,"ffi",false,3303682358718402196],[18264861260725460857,"once_cell",false,10307129930873104395]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/gcrypt-ce56f0cd2515e604/dep-lib-gcrypt"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":6407965173056413679,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-3f352f167bd685b9/run-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-3f352f167bd685b9/run-build-script-build-script-build new file mode 100644 index 000000000..51a669101 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-3f352f167bd685b9/run-build-script-build-script-build @@ -0,0 +1 @@ +afd85b8bfbf8c03b \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-3f352f167bd685b9/run-build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-3f352f167bd685b9/run-build-script-build-script-build.json new file mode 100644 index 000000000..4e1bb5385 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-3f352f167bd685b9/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"","target":0,"profile":0,"path":0,"deps":[[2309034502573133381,"build_script_build",false,7599940742217959225],[12061559290720406606,"build_script_build",false,4777124933550473066]],"local":[{"Precalculated":"0.5.2"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/build-script-build-script-build new file mode 100644 index 000000000..a41701ae7 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/build-script-build-script-build @@ -0,0 +1 @@ +3987ebbdd6697869 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/build-script-build-script-build.json new file mode 100644 index 000000000..71d0add8c --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":10429514197457385088,"profile":15155709024791400979,"path":9608983251023421157,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/gpg-error-714413deff4c1a86/dep-build-script-build-script-build"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":13537101048253785926,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/dep-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/dep-build-script-build-script-build new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/dep-build-script-build-script-build differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-714413deff4c1a86/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/dep-lib-gpg-error b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/dep-lib-gpg-error new file mode 100644 index 000000000..36bb9f923 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/dep-lib-gpg-error differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/lib-gpg-error b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/lib-gpg-error new file mode 100644 index 000000000..61569afb3 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/lib-gpg-error @@ -0,0 +1 @@ +b08c17d987a41c1e \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/lib-gpg-error.json b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/lib-gpg-error.json new file mode 100644 index 000000000..6baf47bf8 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-e5dd51e9febc3058/lib-gpg-error.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":12359890186536506945,"profile":15155709024791400979,"path":11139752562894905253,"deps":[[2309034502573133381,"build_script_build",false,4305715003024726191],[12061559290720406606,"ffi",false,17319779069114316303]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/gpg-error-e5dd51e9febc3058/dep-lib-gpg-error"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":13537101048253785926,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/dep-lib-gpg-error b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/dep-lib-gpg-error new file mode 100644 index 000000000..36bb9f923 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/dep-lib-gpg-error differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/lib-gpg-error b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/lib-gpg-error new file mode 100644 index 000000000..d270335b2 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/lib-gpg-error @@ -0,0 +1 @@ +a083c698571f43f7 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/lib-gpg-error.json b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/lib-gpg-error.json new file mode 100644 index 000000000..a73bcf53d --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/gpg-error-ed944ce3b7c456d9/lib-gpg-error.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":12359890186536506945,"profile":4393393052366255477,"path":11139752562894905253,"deps":[[2309034502573133381,"build_script_build",false,4305715003024726191],[12061559290720406606,"ffi",false,17669554582533873683]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/gpg-error-ed944ce3b7c456d9/dep-lib-gpg-error"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":13537101048253785926,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/dep-lib-libc b/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/dep-lib-libc new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/dep-lib-libc differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/lib-libc b/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/lib-libc new file mode 100644 index 000000000..5f5942da1 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/lib-libc @@ -0,0 +1 @@ +6904024955f3376f \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/lib-libc.json b/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/lib-libc.json new file mode 100644 index 000000000..49af5a67a --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-17b8aad1382124a9/lib-libc.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"default\", \"std\"]","target":1047533068072243941,"profile":4393393052366255477,"path":9907868679548414995,"deps":[[12253354796554471582,"build_script_build",false,17798610239902913246]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libc-17b8aad1382124a9/dep-lib-libc"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":14998826085014762512,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/dep-lib-libc b/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/dep-lib-libc new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/dep-lib-libc differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/lib-libc b/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/lib-libc new file mode 100644 index 000000000..b9985a9d7 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/lib-libc @@ -0,0 +1 @@ +cbc0e13605d0456e \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/lib-libc.json b/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/lib-libc.json new file mode 100644 index 000000000..709f6e357 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-53f181f7c0156696/lib-libc.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"default\", \"std\"]","target":1047533068072243941,"profile":15155709024791400979,"path":9907868679548414995,"deps":[[12253354796554471582,"build_script_build",false,17798610239902913246]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libc-53f181f7c0156696/dep-lib-libc"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":14998826085014762512,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-733b6b3a50ff152c/run-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libc-733b6b3a50ff152c/run-build-script-build-script-build new file mode 100644 index 000000000..3acc10ba9 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-733b6b3a50ff152c/run-build-script-build-script-build @@ -0,0 +1 @@ +de120b4db65d01f7 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-733b6b3a50ff152c/run-build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/libc-733b6b3a50ff152c/run-build-script-build-script-build.json new file mode 100644 index 000000000..de755f115 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-733b6b3a50ff152c/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"","target":0,"profile":0,"path":0,"deps":[[12253354796554471582,"build_script_build",false,11333389284193054594]],"local":[{"RerunIfChanged":{"output":"debug/build/libc-733b6b3a50ff152c/output","paths":["build.rs"]}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/build-script-build-script-build new file mode 100644 index 000000000..788cc1c3a --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/build-script-build-script-build @@ -0,0 +1 @@ +82af8bd18149489d \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/build-script-build-script-build.json new file mode 100644 index 000000000..e53968a0b --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"default\", \"std\"]","target":10088282520713642473,"profile":15155709024791400979,"path":5280289430304404351,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libc-fae2748cdf251f7e/dep-build-script-build-script-build"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":14998826085014762512,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/dep-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/dep-build-script-build-script-build new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/dep-build-script-build-script-build differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libc-fae2748cdf251f7e/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/dep-lib-libgcrypt_sys b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/dep-lib-libgcrypt_sys new file mode 100644 index 000000000..b10305c66 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/dep-lib-libgcrypt_sys differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/lib-libgcrypt_sys b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/lib-libgcrypt_sys new file mode 100644 index 000000000..12484c0dd --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/lib-libgcrypt_sys @@ -0,0 +1 @@ +948e22029a09d92d \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/lib-libgcrypt_sys.json b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/lib-libgcrypt_sys.json new file mode 100644 index 000000000..8976350a8 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-38778a1366bad380/lib-libgcrypt_sys.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"shim\"]","target":265191949276201996,"profile":4393393052366255477,"path":9751790911915974202,"deps":[[12061559290720406606,"libgpg_error_sys",false,17669554582533873683],[12253354796554471582,"libc",false,8014141609551725673],[17238172427721607708,"build_script_build",false,8140724450292777910]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libgcrypt-sys-38778a1366bad380/dep-lib-libgcrypt_sys"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":13891676770851331566,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-498746affc7462fa/run-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-498746affc7462fa/run-build-script-build-script-build new file mode 100644 index 000000000..a24a627e8 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-498746affc7462fa/run-build-script-build-script-build @@ -0,0 +1 @@ +aeb3bf7ee9ffce31 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-498746affc7462fa/run-build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-498746affc7462fa/run-build-script-build-script-build.json new file mode 100644 index 000000000..c5888d74e --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-498746affc7462fa/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"","target":0,"profile":0,"path":0,"deps":[[17238172427721607708,"build_script_build",false,9291174883327557838],[12061559290720406606,"build_script_build",false,4777124933550473066]],"local":[{"RerunIfEnvChanged":{"var":"LIBGCRYPT_PREFIX","val":null}},{"RerunIfEnvChanged":{"var":"LIBGCRYPT_INCLUDE","val":null}},{"RerunIfEnvChanged":{"var":"LIBGCRYPT_LIB_DIR","val":null}},{"RerunIfEnvChanged":{"var":"LIBGCRYPT_LIBS","val":null}},{"RerunIfEnvChanged":{"var":"LIBGCRYPT_CONFIG","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/build-script-build-script-build new file mode 100644 index 000000000..b2979b5e2 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/build-script-build-script-build @@ -0,0 +1 @@ +ce40c56254e2f080 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/build-script-build-script-build.json new file mode 100644 index 000000000..17151792f --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"shim\"]","target":10429514197457385088,"profile":15155709024791400979,"path":9532756669375793463,"deps":[[10249824727768962744,"cc",false,359893378568699232],[13837234849270857574,"cfg_if",false,10109151102596405712]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/dep-build-script-build-script-build"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":13891676770851331566,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/dep-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/dep-build-script-build-script-build new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/dep-build-script-build-script-build differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5273519c0c05ff3d/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5398eb00e9874fd8/run-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5398eb00e9874fd8/run-build-script-build-script-build new file mode 100644 index 000000000..b5068d680 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5398eb00e9874fd8/run-build-script-build-script-build @@ -0,0 +1 @@ +b6c30992c1a9f970 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5398eb00e9874fd8/run-build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5398eb00e9874fd8/run-build-script-build-script-build.json new file mode 100644 index 000000000..baa99c899 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-5398eb00e9874fd8/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"","target":0,"profile":0,"path":0,"deps":[[17238172427721607708,"build_script_build",false,3605857280145391613],[12061559290720406606,"build_script_build",false,4777124933550473066]],"local":[{"RerunIfEnvChanged":{"var":"LIBGCRYPT_PREFIX","val":null}},{"RerunIfEnvChanged":{"var":"LIBGCRYPT_INCLUDE","val":null}},{"RerunIfEnvChanged":{"var":"LIBGCRYPT_LIB_DIR","val":null}},{"RerunIfEnvChanged":{"var":"LIBGCRYPT_LIBS","val":null}},{"RerunIfEnvChanged":{"var":"LIBGCRYPT_CONFIG","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/dep-lib-libgcrypt_sys b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/dep-lib-libgcrypt_sys new file mode 100644 index 000000000..db315ec05 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/dep-lib-libgcrypt_sys differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/lib-libgcrypt_sys b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/lib-libgcrypt_sys new file mode 100644 index 000000000..750fc043e --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/lib-libgcrypt_sys @@ -0,0 +1 @@ +994cae60a67e3870 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/lib-libgcrypt_sys.json b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/lib-libgcrypt_sys.json new file mode 100644 index 000000000..af36d99b8 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/lib-libgcrypt_sys.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"shim\"]","target":265191949276201996,"profile":15155709024791400979,"path":9751790911915974202,"deps":[[12061559290720406606,"libgpg_error_sys",false,17319779069114316303],[12253354796554471582,"libc",false,7945985838379286731],[17238172427721607708,"build_script_build",false,3589087331379819438]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libgcrypt-sys-6e4e61e81f82addb/dep-lib-libgcrypt_sys"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":13891676770851331566,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build-script-build new file mode 100644 index 000000000..49210238c --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build-script-build @@ -0,0 +1 @@ +fd7fd27517940a32 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build-script-build.json new file mode 100644 index 000000000..b8d37ad04 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"shim\"]","target":10429514197457385088,"profile":15155709024791400979,"path":9532756669375793463,"deps":[[10249824727768962744,"cc",false,359893378568699232],[13837234849270857574,"cfg_if",false,17352208562555339522]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/dep-build-script-build-script-build"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":13891676770851331566,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/dep-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/dep-build-script-build-script-build new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/dep-build-script-build-script-build differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgcrypt-sys-cf3b7f8f36dd8843/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/build-script-build-script-build new file mode 100644 index 000000000..a87b96763 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/build-script-build-script-build @@ -0,0 +1 @@ +d5d50ccd2b30ef09 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/build-script-build-script-build.json new file mode 100644 index 000000000..ec1820880 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":10429514197457385088,"profile":15155709024791400979,"path":3548941659062562671,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/dep-build-script-build-script-build"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":4779252398732096498,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/dep-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/dep-build-script-build-script-build new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/dep-build-script-build-script-build differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-752c9de4f59bfe81/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/dep-lib-libgpg_error_sys b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/dep-lib-libgpg_error_sys new file mode 100644 index 000000000..9dab46cd5 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/dep-lib-libgpg_error_sys differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/lib-libgpg_error_sys b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/lib-libgpg_error_sys new file mode 100644 index 000000000..e22e3a9d2 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/lib-libgpg_error_sys @@ -0,0 +1 @@ +0ff6cd9a4c375cf0 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/lib-libgpg_error_sys.json b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/lib-libgpg_error_sys.json new file mode 100644 index 000000000..caecccaf6 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/lib-libgpg_error_sys.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":3134179400716955000,"profile":15155709024791400979,"path":12391525627561347929,"deps":[[12061559290720406606,"build_script_build",false,4777124933550473066],[12253354796554471582,"libc",false,7945985838379286731]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libgpg-error-sys-873fe832ba03ebbc/dep-lib-libgpg_error_sys"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":4779252398732096498,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/dep-lib-libgpg_error_sys b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/dep-lib-libgpg_error_sys new file mode 100644 index 000000000..9dab46cd5 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/dep-lib-libgpg_error_sys differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/lib-libgpg_error_sys b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/lib-libgpg_error_sys new file mode 100644 index 000000000..0a5f660df --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/lib-libgpg_error_sys @@ -0,0 +1 @@ +13a04e8746de36f5 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/lib-libgpg_error_sys.json b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/lib-libgpg_error_sys.json new file mode 100644 index 000000000..cc148d5ee --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/lib-libgpg_error_sys.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":3134179400716955000,"profile":4393393052366255477,"path":12391525627561347929,"deps":[[12061559290720406606,"build_script_build",false,4777124933550473066],[12253354796554471582,"libc",false,8014141609551725673]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libgpg-error-sys-9a61376458b669a2/dep-lib-libgpg_error_sys"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":4779252398732096498,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-e3a8693364d4f0a2/run-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-e3a8693364d4f0a2/run-build-script-build-script-build new file mode 100644 index 000000000..148c08e01 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-e3a8693364d4f0a2/run-build-script-build-script-build @@ -0,0 +1 @@ +6affef17d1c14b42 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-e3a8693364d4f0a2/run-build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-e3a8693364d4f0a2/run-build-script-build-script-build.json new file mode 100644 index 000000000..c5ffe0f4b --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/libgpg-error-sys-e3a8693364d4f0a2/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"","target":0,"profile":0,"path":0,"deps":[[12061559290720406606,"build_script_build",false,715843830457095637]],"local":[{"RerunIfEnvChanged":{"var":"LIBGPG_ERROR_PREFIX","val":null}},{"RerunIfEnvChanged":{"var":"LIBGPG_ERROR_INCLUDE","val":null}},{"RerunIfEnvChanged":{"var":"LIBGPG_ERROR_LIB_DIR","val":null}},{"RerunIfEnvChanged":{"var":"LIBGPG_ERROR_LIBS","val":null}},{"RerunIfEnvChanged":{"var":"LIBGPG_ERROR_CONFIG","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-06fbab55fcd00195/run-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/memchr-06fbab55fcd00195/run-build-script-build-script-build new file mode 100644 index 000000000..d80339260 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-06fbab55fcd00195/run-build-script-build-script-build @@ -0,0 +1 @@ +e5c3c5a532136cde \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-06fbab55fcd00195/run-build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/memchr-06fbab55fcd00195/run-build-script-build-script-build.json new file mode 100644 index 000000000..1af963060 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-06fbab55fcd00195/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"","target":0,"profile":0,"path":0,"deps":[[13856633986524295345,"build_script_build",false,3934709481027004778]],"local":[{"Precalculated":"2.4.0"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/build-script-build-script-build new file mode 100644 index 000000000..9ffa11a14 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/build-script-build-script-build @@ -0,0 +1 @@ +6ae9f90e6de59a36 \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/build-script-build-script-build.json b/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/build-script-build-script-build.json new file mode 100644 index 000000000..59f51813b --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":10429514197457385088,"profile":15155709024791400979,"path":4150003786824094395,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/memchr-2f8e2a2693131de8/dep-build-script-build-script-build"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":2920040441970090600,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/dep-build-script-build-script-build b/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/dep-build-script-build-script-build new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/dep-build-script-build-script-build differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-2f8e2a2693131de8/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/dep-lib-memchr b/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/dep-lib-memchr new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/dep-lib-memchr differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/lib-memchr b/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/lib-memchr new file mode 100644 index 000000000..fc53e3710 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/lib-memchr @@ -0,0 +1 @@ +e4097d0476b28f5b \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/lib-memchr.json b/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/lib-memchr.json new file mode 100644 index 000000000..38fa398c5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-4eca30fe91c0d131/lib-memchr.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":16587983065867728991,"profile":4393393052366255477,"path":1467825121620509799,"deps":[[13856633986524295345,"build_script_build",false,16027206282155246565]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/memchr-4eca30fe91c0d131/dep-lib-memchr"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":2920040441970090600,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/dep-lib-memchr b/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/dep-lib-memchr new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/dep-lib-memchr differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/lib-memchr b/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/lib-memchr new file mode 100644 index 000000000..bca45b4e9 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/lib-memchr @@ -0,0 +1 @@ +5e95d2df840d039b \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/lib-memchr.json b/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/lib-memchr.json new file mode 100644 index 000000000..ee0d278bb --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/memchr-526d9975d34f4d76/lib-memchr.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[]","target":16587983065867728991,"profile":15155709024791400979,"path":1467825121620509799,"deps":[[13856633986524295345,"build_script_build",false,16027206282155246565]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/memchr-526d9975d34f4d76/dep-lib-memchr"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":2920040441970090600,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/dep-lib-once_cell b/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/dep-lib-once_cell new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/dep-lib-once_cell differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/lib-once_cell b/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/lib-once_cell new file mode 100644 index 000000000..074a470d1 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/lib-once_cell @@ -0,0 +1 @@ +78ff8c2102d9418c \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/lib-once_cell.json b/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/lib-once_cell.json new file mode 100644 index 000000000..5f2925d54 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/once_cell-328239dfb04bd33f/lib-once_cell.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"alloc\", \"default\", \"race\", \"std\"]","target":4333757125291285824,"profile":15155709024791400979,"path":7887267295665536162,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/once_cell-328239dfb04bd33f/dep-lib-once_cell"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":14177539708254521827,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/dep-lib-once_cell b/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/dep-lib-once_cell new file mode 100644 index 000000000..1b1cb4d44 Binary files /dev/null and b/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/dep-lib-once_cell differ diff --git a/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/invoked.timestamp b/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/lib-once_cell b/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/lib-once_cell new file mode 100644 index 000000000..0b4ae0da7 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/lib-once_cell @@ -0,0 +1 @@ +0be87c0710480a8f \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/lib-once_cell.json b/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/lib-once_cell.json new file mode 100644 index 000000000..c0cb34255 --- /dev/null +++ b/aes-gmac-siv/target/debug/.fingerprint/once_cell-82d3a795abe465c0/lib-once_cell.json @@ -0,0 +1 @@ +{"rustc":522493025710894270,"features":"[\"alloc\", \"default\", \"race\", \"std\"]","target":4333757125291285824,"profile":4393393052366255477,"path":7887267295665536162,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/once_cell-82d3a795abe465c0/dep-lib-once_cell"}}],"rustflags":["-L","/opt/homebrew/lib"],"metadata":14177539708254521827,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build-script-build b/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build-script-build new file mode 100755 index 000000000..7a73dce67 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build-script-build differ diff --git a/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build_script_build-24eb957c84cdde52 b/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build_script_build-24eb957c84cdde52 new file mode 100755 index 000000000..7a73dce67 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build_script_build-24eb957c84cdde52 differ diff --git a/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build_script_build-24eb957c84cdde52.d b/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build_script_build-24eb957c84cdde52.d new file mode 100644 index 000000000..0f4920083 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build_script_build-24eb957c84cdde52.d @@ -0,0 +1,5 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build_script_build-24eb957c84cdde52: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/build.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/bitflags-24eb957c84cdde52/build_script_build-24eb957c84cdde52.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/build.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/build.rs: diff --git a/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/invoked.timestamp b/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/output b/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/output new file mode 100644 index 000000000..f9ccc6f3d --- /dev/null +++ b/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/output @@ -0,0 +1 @@ +cargo:rustc-cfg=bitflags_const_fn diff --git a/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/root-output b/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/root-output new file mode 100644 index 000000000..ee157dd9b --- /dev/null +++ b/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/root-output @@ -0,0 +1 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/out \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/stderr b/aes-gmac-siv/target/debug/build/bitflags-fb8276f0f53cf96f/stderr new file mode 100644 index 000000000..e69de29bb diff --git a/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/invoked.timestamp b/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs b/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs new file mode 100644 index 000000000..3352668ae --- /dev/null +++ b/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs @@ -0,0 +1,568 @@ +impl Error { +pub const SOURCE_UNKNOWN: ErrorSource = ffi::GPG_ERR_SOURCE_UNKNOWN; +pub const SOURCE_GCRYPT: ErrorSource = ffi::GPG_ERR_SOURCE_GCRYPT; +pub const SOURCE_GPG: ErrorSource = ffi::GPG_ERR_SOURCE_GPG; +pub const SOURCE_GPGSM: ErrorSource = ffi::GPG_ERR_SOURCE_GPGSM; +pub const SOURCE_GPGAGENT: ErrorSource = ffi::GPG_ERR_SOURCE_GPGAGENT; +pub const SOURCE_PINENTRY: ErrorSource = ffi::GPG_ERR_SOURCE_PINENTRY; +pub const SOURCE_SCD: ErrorSource = ffi::GPG_ERR_SOURCE_SCD; +pub const SOURCE_GPGME: ErrorSource = ffi::GPG_ERR_SOURCE_GPGME; +pub const SOURCE_KEYBOX: ErrorSource = ffi::GPG_ERR_SOURCE_KEYBOX; +pub const SOURCE_KSBA: ErrorSource = ffi::GPG_ERR_SOURCE_KSBA; +pub const SOURCE_DIRMNGR: ErrorSource = ffi::GPG_ERR_SOURCE_DIRMNGR; +pub const SOURCE_GSTI: ErrorSource = ffi::GPG_ERR_SOURCE_GSTI; +pub const SOURCE_GPA: ErrorSource = ffi::GPG_ERR_SOURCE_GPA; +pub const SOURCE_KLEO: ErrorSource = ffi::GPG_ERR_SOURCE_KLEO; +pub const SOURCE_G13: ErrorSource = ffi::GPG_ERR_SOURCE_G13; +pub const SOURCE_ASSUAN: ErrorSource = ffi::GPG_ERR_SOURCE_ASSUAN; +pub const SOURCE_TLS: ErrorSource = ffi::GPG_ERR_SOURCE_TLS; +pub const SOURCE_ANY: ErrorSource = ffi::GPG_ERR_SOURCE_ANY; +pub const SOURCE_USER_1: ErrorSource = ffi::GPG_ERR_SOURCE_USER_1; +pub const SOURCE_USER_2: ErrorSource = ffi::GPG_ERR_SOURCE_USER_2; +pub const SOURCE_USER_3: ErrorSource = ffi::GPG_ERR_SOURCE_USER_3; +pub const SOURCE_USER_4: ErrorSource = ffi::GPG_ERR_SOURCE_USER_4; +pub const NO_ERROR: Error = Error(ffi::GPG_ERR_NO_ERROR); +pub const GENERAL: Error = Error(ffi::GPG_ERR_GENERAL); +pub const UNKNOWN_PACKET: Error = Error(ffi::GPG_ERR_UNKNOWN_PACKET); +pub const UNKNOWN_VERSION: Error = Error(ffi::GPG_ERR_UNKNOWN_VERSION); +pub const PUBKEY_ALGO: Error = Error(ffi::GPG_ERR_PUBKEY_ALGO); +pub const DIGEST_ALGO: Error = Error(ffi::GPG_ERR_DIGEST_ALGO); +pub const BAD_PUBKEY: Error = Error(ffi::GPG_ERR_BAD_PUBKEY); +pub const BAD_SECKEY: Error = Error(ffi::GPG_ERR_BAD_SECKEY); +pub const BAD_SIGNATURE: Error = Error(ffi::GPG_ERR_BAD_SIGNATURE); +pub const NO_PUBKEY: Error = Error(ffi::GPG_ERR_NO_PUBKEY); +pub const CHECKSUM: Error = Error(ffi::GPG_ERR_CHECKSUM); +pub const BAD_PASSPHRASE: Error = Error(ffi::GPG_ERR_BAD_PASSPHRASE); +pub const CIPHER_ALGO: Error = Error(ffi::GPG_ERR_CIPHER_ALGO); +pub const KEYRING_OPEN: Error = Error(ffi::GPG_ERR_KEYRING_OPEN); +pub const INV_PACKET: Error = Error(ffi::GPG_ERR_INV_PACKET); +pub const INV_ARMOR: Error = Error(ffi::GPG_ERR_INV_ARMOR); +pub const NO_USER_ID: Error = Error(ffi::GPG_ERR_NO_USER_ID); +pub const NO_SECKEY: Error = Error(ffi::GPG_ERR_NO_SECKEY); +pub const WRONG_SECKEY: Error = Error(ffi::GPG_ERR_WRONG_SECKEY); +pub const BAD_KEY: Error = Error(ffi::GPG_ERR_BAD_KEY); +pub const COMPR_ALGO: Error = Error(ffi::GPG_ERR_COMPR_ALGO); +pub const NO_PRIME: Error = Error(ffi::GPG_ERR_NO_PRIME); +pub const NO_ENCODING_METHOD: Error = Error(ffi::GPG_ERR_NO_ENCODING_METHOD); +pub const NO_ENCRYPTION_SCHEME: Error = Error(ffi::GPG_ERR_NO_ENCRYPTION_SCHEME); +pub const NO_SIGNATURE_SCHEME: Error = Error(ffi::GPG_ERR_NO_SIGNATURE_SCHEME); +pub const INV_ATTR: Error = Error(ffi::GPG_ERR_INV_ATTR); +pub const NO_VALUE: Error = Error(ffi::GPG_ERR_NO_VALUE); +pub const NOT_FOUND: Error = Error(ffi::GPG_ERR_NOT_FOUND); +pub const VALUE_NOT_FOUND: Error = Error(ffi::GPG_ERR_VALUE_NOT_FOUND); +pub const SYNTAX: Error = Error(ffi::GPG_ERR_SYNTAX); +pub const BAD_MPI: Error = Error(ffi::GPG_ERR_BAD_MPI); +pub const INV_PASSPHRASE: Error = Error(ffi::GPG_ERR_INV_PASSPHRASE); +pub const SIG_CLASS: Error = Error(ffi::GPG_ERR_SIG_CLASS); +pub const RESOURCE_LIMIT: Error = Error(ffi::GPG_ERR_RESOURCE_LIMIT); +pub const INV_KEYRING: Error = Error(ffi::GPG_ERR_INV_KEYRING); +pub const TRUSTDB: Error = Error(ffi::GPG_ERR_TRUSTDB); +pub const BAD_CERT: Error = Error(ffi::GPG_ERR_BAD_CERT); +pub const INV_USER_ID: Error = Error(ffi::GPG_ERR_INV_USER_ID); +pub const UNEXPECTED: Error = Error(ffi::GPG_ERR_UNEXPECTED); +pub const TIME_CONFLICT: Error = Error(ffi::GPG_ERR_TIME_CONFLICT); +pub const KEYSERVER: Error = Error(ffi::GPG_ERR_KEYSERVER); +pub const WRONG_PUBKEY_ALGO: Error = Error(ffi::GPG_ERR_WRONG_PUBKEY_ALGO); +pub const TRIBUTE_TO_D_A: Error = Error(ffi::GPG_ERR_TRIBUTE_TO_D_A); +pub const WEAK_KEY: Error = Error(ffi::GPG_ERR_WEAK_KEY); +pub const INV_KEYLEN: Error = Error(ffi::GPG_ERR_INV_KEYLEN); +pub const INV_ARG: Error = Error(ffi::GPG_ERR_INV_ARG); +pub const BAD_URI: Error = Error(ffi::GPG_ERR_BAD_URI); +pub const INV_URI: Error = Error(ffi::GPG_ERR_INV_URI); +pub const NETWORK: Error = Error(ffi::GPG_ERR_NETWORK); +pub const UNKNOWN_HOST: Error = Error(ffi::GPG_ERR_UNKNOWN_HOST); +pub const SELFTEST_FAILED: Error = Error(ffi::GPG_ERR_SELFTEST_FAILED); +pub const NOT_ENCRYPTED: Error = Error(ffi::GPG_ERR_NOT_ENCRYPTED); +pub const NOT_PROCESSED: Error = Error(ffi::GPG_ERR_NOT_PROCESSED); +pub const UNUSABLE_PUBKEY: Error = Error(ffi::GPG_ERR_UNUSABLE_PUBKEY); +pub const UNUSABLE_SECKEY: Error = Error(ffi::GPG_ERR_UNUSABLE_SECKEY); +pub const INV_VALUE: Error = Error(ffi::GPG_ERR_INV_VALUE); +pub const BAD_CERT_CHAIN: Error = Error(ffi::GPG_ERR_BAD_CERT_CHAIN); +pub const MISSING_CERT: Error = Error(ffi::GPG_ERR_MISSING_CERT); +pub const NO_DATA: Error = Error(ffi::GPG_ERR_NO_DATA); +pub const BUG: Error = Error(ffi::GPG_ERR_BUG); +pub const NOT_SUPPORTED: Error = Error(ffi::GPG_ERR_NOT_SUPPORTED); +pub const INV_OP: Error = Error(ffi::GPG_ERR_INV_OP); +pub const TIMEOUT: Error = Error(ffi::GPG_ERR_TIMEOUT); +pub const INTERNAL: Error = Error(ffi::GPG_ERR_INTERNAL); +pub const EOF_GCRYPT: Error = Error(ffi::GPG_ERR_EOF_GCRYPT); +pub const INV_OBJ: Error = Error(ffi::GPG_ERR_INV_OBJ); +pub const TOO_SHORT: Error = Error(ffi::GPG_ERR_TOO_SHORT); +pub const TOO_LARGE: Error = Error(ffi::GPG_ERR_TOO_LARGE); +pub const NO_OBJ: Error = Error(ffi::GPG_ERR_NO_OBJ); +pub const NOT_IMPLEMENTED: Error = Error(ffi::GPG_ERR_NOT_IMPLEMENTED); +pub const CONFLICT: Error = Error(ffi::GPG_ERR_CONFLICT); +pub const INV_CIPHER_MODE: Error = Error(ffi::GPG_ERR_INV_CIPHER_MODE); +pub const INV_FLAG: Error = Error(ffi::GPG_ERR_INV_FLAG); +pub const INV_HANDLE: Error = Error(ffi::GPG_ERR_INV_HANDLE); +pub const TRUNCATED: Error = Error(ffi::GPG_ERR_TRUNCATED); +pub const INCOMPLETE_LINE: Error = Error(ffi::GPG_ERR_INCOMPLETE_LINE); +pub const INV_RESPONSE: Error = Error(ffi::GPG_ERR_INV_RESPONSE); +pub const NO_AGENT: Error = Error(ffi::GPG_ERR_NO_AGENT); +pub const AGENT: Error = Error(ffi::GPG_ERR_AGENT); +pub const INV_DATA: Error = Error(ffi::GPG_ERR_INV_DATA); +pub const ASSUAN_SERVER_FAULT: Error = Error(ffi::GPG_ERR_ASSUAN_SERVER_FAULT); +pub const ASSUAN: Error = Error(ffi::GPG_ERR_ASSUAN); +pub const INV_SESSION_KEY: Error = Error(ffi::GPG_ERR_INV_SESSION_KEY); +pub const INV_SEXP: Error = Error(ffi::GPG_ERR_INV_SEXP); +pub const UNSUPPORTED_ALGORITHM: Error = Error(ffi::GPG_ERR_UNSUPPORTED_ALGORITHM); +pub const NO_PIN_ENTRY: Error = Error(ffi::GPG_ERR_NO_PIN_ENTRY); +pub const PIN_ENTRY: Error = Error(ffi::GPG_ERR_PIN_ENTRY); +pub const BAD_PIN: Error = Error(ffi::GPG_ERR_BAD_PIN); +pub const INV_NAME: Error = Error(ffi::GPG_ERR_INV_NAME); +pub const BAD_DATA: Error = Error(ffi::GPG_ERR_BAD_DATA); +pub const INV_PARAMETER: Error = Error(ffi::GPG_ERR_INV_PARAMETER); +pub const WRONG_CARD: Error = Error(ffi::GPG_ERR_WRONG_CARD); +pub const NO_DIRMNGR: Error = Error(ffi::GPG_ERR_NO_DIRMNGR); +pub const DIRMNGR: Error = Error(ffi::GPG_ERR_DIRMNGR); +pub const CERT_REVOKED: Error = Error(ffi::GPG_ERR_CERT_REVOKED); +pub const NO_CRL_KNOWN: Error = Error(ffi::GPG_ERR_NO_CRL_KNOWN); +pub const CRL_TOO_OLD: Error = Error(ffi::GPG_ERR_CRL_TOO_OLD); +pub const LINE_TOO_LONG: Error = Error(ffi::GPG_ERR_LINE_TOO_LONG); +pub const NOT_TRUSTED: Error = Error(ffi::GPG_ERR_NOT_TRUSTED); +pub const CANCELED: Error = Error(ffi::GPG_ERR_CANCELED); +pub const BAD_CA_CERT: Error = Error(ffi::GPG_ERR_BAD_CA_CERT); +pub const CERT_EXPIRED: Error = Error(ffi::GPG_ERR_CERT_EXPIRED); +pub const CERT_TOO_YOUNG: Error = Error(ffi::GPG_ERR_CERT_TOO_YOUNG); +pub const UNSUPPORTED_CERT: Error = Error(ffi::GPG_ERR_UNSUPPORTED_CERT); +pub const UNKNOWN_SEXP: Error = Error(ffi::GPG_ERR_UNKNOWN_SEXP); +pub const UNSUPPORTED_PROTECTION: Error = Error(ffi::GPG_ERR_UNSUPPORTED_PROTECTION); +pub const CORRUPTED_PROTECTION: Error = Error(ffi::GPG_ERR_CORRUPTED_PROTECTION); +pub const AMBIGUOUS_NAME: Error = Error(ffi::GPG_ERR_AMBIGUOUS_NAME); +pub const CARD: Error = Error(ffi::GPG_ERR_CARD); +pub const CARD_RESET: Error = Error(ffi::GPG_ERR_CARD_RESET); +pub const CARD_REMOVED: Error = Error(ffi::GPG_ERR_CARD_REMOVED); +pub const INV_CARD: Error = Error(ffi::GPG_ERR_INV_CARD); +pub const CARD_NOT_PRESENT: Error = Error(ffi::GPG_ERR_CARD_NOT_PRESENT); +pub const NO_PKCS15_APP: Error = Error(ffi::GPG_ERR_NO_PKCS15_APP); +pub const NOT_CONFIRMED: Error = Error(ffi::GPG_ERR_NOT_CONFIRMED); +pub const CONFIGURATION: Error = Error(ffi::GPG_ERR_CONFIGURATION); +pub const NO_POLICY_MATCH: Error = Error(ffi::GPG_ERR_NO_POLICY_MATCH); +pub const INV_INDEX: Error = Error(ffi::GPG_ERR_INV_INDEX); +pub const INV_ID: Error = Error(ffi::GPG_ERR_INV_ID); +pub const NO_SCDAEMON: Error = Error(ffi::GPG_ERR_NO_SCDAEMON); +pub const SCDAEMON: Error = Error(ffi::GPG_ERR_SCDAEMON); +pub const UNSUPPORTED_PROTOCOL: Error = Error(ffi::GPG_ERR_UNSUPPORTED_PROTOCOL); +pub const BAD_PIN_METHOD: Error = Error(ffi::GPG_ERR_BAD_PIN_METHOD); +pub const CARD_NOT_INITIALIZED: Error = Error(ffi::GPG_ERR_CARD_NOT_INITIALIZED); +pub const UNSUPPORTED_OPERATION: Error = Error(ffi::GPG_ERR_UNSUPPORTED_OPERATION); +pub const WRONG_KEY_USAGE: Error = Error(ffi::GPG_ERR_WRONG_KEY_USAGE); +pub const NOTHING_FOUND: Error = Error(ffi::GPG_ERR_NOTHING_FOUND); +pub const WRONG_BLOB_TYPE: Error = Error(ffi::GPG_ERR_WRONG_BLOB_TYPE); +pub const MISSING_VALUE: Error = Error(ffi::GPG_ERR_MISSING_VALUE); +pub const HARDWARE: Error = Error(ffi::GPG_ERR_HARDWARE); +pub const PIN_BLOCKED: Error = Error(ffi::GPG_ERR_PIN_BLOCKED); +pub const USE_CONDITIONS: Error = Error(ffi::GPG_ERR_USE_CONDITIONS); +pub const PIN_NOT_SYNCED: Error = Error(ffi::GPG_ERR_PIN_NOT_SYNCED); +pub const INV_CRL: Error = Error(ffi::GPG_ERR_INV_CRL); +pub const BAD_BER: Error = Error(ffi::GPG_ERR_BAD_BER); +pub const INV_BER: Error = Error(ffi::GPG_ERR_INV_BER); +pub const ELEMENT_NOT_FOUND: Error = Error(ffi::GPG_ERR_ELEMENT_NOT_FOUND); +pub const IDENTIFIER_NOT_FOUND: Error = Error(ffi::GPG_ERR_IDENTIFIER_NOT_FOUND); +pub const INV_TAG: Error = Error(ffi::GPG_ERR_INV_TAG); +pub const INV_LENGTH: Error = Error(ffi::GPG_ERR_INV_LENGTH); +pub const INV_KEYINFO: Error = Error(ffi::GPG_ERR_INV_KEYINFO); +pub const UNEXPECTED_TAG: Error = Error(ffi::GPG_ERR_UNEXPECTED_TAG); +pub const NOT_DER_ENCODED: Error = Error(ffi::GPG_ERR_NOT_DER_ENCODED); +pub const NO_CMS_OBJ: Error = Error(ffi::GPG_ERR_NO_CMS_OBJ); +pub const INV_CMS_OBJ: Error = Error(ffi::GPG_ERR_INV_CMS_OBJ); +pub const UNKNOWN_CMS_OBJ: Error = Error(ffi::GPG_ERR_UNKNOWN_CMS_OBJ); +pub const UNSUPPORTED_CMS_OBJ: Error = Error(ffi::GPG_ERR_UNSUPPORTED_CMS_OBJ); +pub const UNSUPPORTED_ENCODING: Error = Error(ffi::GPG_ERR_UNSUPPORTED_ENCODING); +pub const UNSUPPORTED_CMS_VERSION: Error = Error(ffi::GPG_ERR_UNSUPPORTED_CMS_VERSION); +pub const UNKNOWN_ALGORITHM: Error = Error(ffi::GPG_ERR_UNKNOWN_ALGORITHM); +pub const INV_ENGINE: Error = Error(ffi::GPG_ERR_INV_ENGINE); +pub const PUBKEY_NOT_TRUSTED: Error = Error(ffi::GPG_ERR_PUBKEY_NOT_TRUSTED); +pub const DECRYPT_FAILED: Error = Error(ffi::GPG_ERR_DECRYPT_FAILED); +pub const KEY_EXPIRED: Error = Error(ffi::GPG_ERR_KEY_EXPIRED); +pub const SIG_EXPIRED: Error = Error(ffi::GPG_ERR_SIG_EXPIRED); +pub const ENCODING_PROBLEM: Error = Error(ffi::GPG_ERR_ENCODING_PROBLEM); +pub const INV_STATE: Error = Error(ffi::GPG_ERR_INV_STATE); +pub const DUP_VALUE: Error = Error(ffi::GPG_ERR_DUP_VALUE); +pub const MISSING_ACTION: Error = Error(ffi::GPG_ERR_MISSING_ACTION); +pub const MODULE_NOT_FOUND: Error = Error(ffi::GPG_ERR_MODULE_NOT_FOUND); +pub const INV_OID_STRING: Error = Error(ffi::GPG_ERR_INV_OID_STRING); +pub const INV_TIME: Error = Error(ffi::GPG_ERR_INV_TIME); +pub const INV_CRL_OBJ: Error = Error(ffi::GPG_ERR_INV_CRL_OBJ); +pub const UNSUPPORTED_CRL_VERSION: Error = Error(ffi::GPG_ERR_UNSUPPORTED_CRL_VERSION); +pub const INV_CERT_OBJ: Error = Error(ffi::GPG_ERR_INV_CERT_OBJ); +pub const UNKNOWN_NAME: Error = Error(ffi::GPG_ERR_UNKNOWN_NAME); +pub const LOCALE_PROBLEM: Error = Error(ffi::GPG_ERR_LOCALE_PROBLEM); +pub const NOT_LOCKED: Error = Error(ffi::GPG_ERR_NOT_LOCKED); +pub const PROTOCOL_VIOLATION: Error = Error(ffi::GPG_ERR_PROTOCOL_VIOLATION); +pub const INV_MAC: Error = Error(ffi::GPG_ERR_INV_MAC); +pub const INV_REQUEST: Error = Error(ffi::GPG_ERR_INV_REQUEST); +pub const UNKNOWN_EXTN: Error = Error(ffi::GPG_ERR_UNKNOWN_EXTN); +pub const UNKNOWN_CRIT_EXTN: Error = Error(ffi::GPG_ERR_UNKNOWN_CRIT_EXTN); +pub const LOCKED: Error = Error(ffi::GPG_ERR_LOCKED); +pub const UNKNOWN_OPTION: Error = Error(ffi::GPG_ERR_UNKNOWN_OPTION); +pub const UNKNOWN_COMMAND: Error = Error(ffi::GPG_ERR_UNKNOWN_COMMAND); +pub const NOT_OPERATIONAL: Error = Error(ffi::GPG_ERR_NOT_OPERATIONAL); +pub const NO_PASSPHRASE: Error = Error(ffi::GPG_ERR_NO_PASSPHRASE); +pub const NO_PIN: Error = Error(ffi::GPG_ERR_NO_PIN); +pub const NOT_ENABLED: Error = Error(ffi::GPG_ERR_NOT_ENABLED); +pub const NO_ENGINE: Error = Error(ffi::GPG_ERR_NO_ENGINE); +pub const MISSING_KEY: Error = Error(ffi::GPG_ERR_MISSING_KEY); +pub const TOO_MANY: Error = Error(ffi::GPG_ERR_TOO_MANY); +pub const LIMIT_REACHED: Error = Error(ffi::GPG_ERR_LIMIT_REACHED); +pub const NOT_INITIALIZED: Error = Error(ffi::GPG_ERR_NOT_INITIALIZED); +pub const MISSING_ISSUER_CERT: Error = Error(ffi::GPG_ERR_MISSING_ISSUER_CERT); +pub const NO_KEYSERVER: Error = Error(ffi::GPG_ERR_NO_KEYSERVER); +pub const INV_CURVE: Error = Error(ffi::GPG_ERR_INV_CURVE); +pub const UNKNOWN_CURVE: Error = Error(ffi::GPG_ERR_UNKNOWN_CURVE); +pub const DUP_KEY: Error = Error(ffi::GPG_ERR_DUP_KEY); +pub const AMBIGUOUS: Error = Error(ffi::GPG_ERR_AMBIGUOUS); +pub const NO_CRYPT_CTX: Error = Error(ffi::GPG_ERR_NO_CRYPT_CTX); +pub const WRONG_CRYPT_CTX: Error = Error(ffi::GPG_ERR_WRONG_CRYPT_CTX); +pub const BAD_CRYPT_CTX: Error = Error(ffi::GPG_ERR_BAD_CRYPT_CTX); +pub const CRYPT_CTX_CONFLICT: Error = Error(ffi::GPG_ERR_CRYPT_CTX_CONFLICT); +pub const BROKEN_PUBKEY: Error = Error(ffi::GPG_ERR_BROKEN_PUBKEY); +pub const BROKEN_SECKEY: Error = Error(ffi::GPG_ERR_BROKEN_SECKEY); +pub const MAC_ALGO: Error = Error(ffi::GPG_ERR_MAC_ALGO); +pub const FULLY_CANCELED: Error = Error(ffi::GPG_ERR_FULLY_CANCELED); +pub const UNFINISHED: Error = Error(ffi::GPG_ERR_UNFINISHED); +pub const BUFFER_TOO_SHORT: Error = Error(ffi::GPG_ERR_BUFFER_TOO_SHORT); +pub const SEXP_INV_LEN_SPEC: Error = Error(ffi::GPG_ERR_SEXP_INV_LEN_SPEC); +pub const SEXP_STRING_TOO_LONG: Error = Error(ffi::GPG_ERR_SEXP_STRING_TOO_LONG); +pub const SEXP_UNMATCHED_PAREN: Error = Error(ffi::GPG_ERR_SEXP_UNMATCHED_PAREN); +pub const SEXP_NOT_CANONICAL: Error = Error(ffi::GPG_ERR_SEXP_NOT_CANONICAL); +pub const SEXP_BAD_CHARACTER: Error = Error(ffi::GPG_ERR_SEXP_BAD_CHARACTER); +pub const SEXP_BAD_QUOTATION: Error = Error(ffi::GPG_ERR_SEXP_BAD_QUOTATION); +pub const SEXP_ZERO_PREFIX: Error = Error(ffi::GPG_ERR_SEXP_ZERO_PREFIX); +pub const SEXP_NESTED_DH: Error = Error(ffi::GPG_ERR_SEXP_NESTED_DH); +pub const SEXP_UNMATCHED_DH: Error = Error(ffi::GPG_ERR_SEXP_UNMATCHED_DH); +pub const SEXP_UNEXPECTED_PUNC: Error = Error(ffi::GPG_ERR_SEXP_UNEXPECTED_PUNC); +pub const SEXP_BAD_HEX_CHAR: Error = Error(ffi::GPG_ERR_SEXP_BAD_HEX_CHAR); +pub const SEXP_ODD_HEX_NUMBERS: Error = Error(ffi::GPG_ERR_SEXP_ODD_HEX_NUMBERS); +pub const SEXP_BAD_OCT_CHAR: Error = Error(ffi::GPG_ERR_SEXP_BAD_OCT_CHAR); +pub const SUBKEYS_EXP_OR_REV: Error = Error(ffi::GPG_ERR_SUBKEYS_EXP_OR_REV); +pub const DB_CORRUPTED: Error = Error(ffi::GPG_ERR_DB_CORRUPTED); +pub const SERVER_FAILED: Error = Error(ffi::GPG_ERR_SERVER_FAILED); +pub const NO_NAME: Error = Error(ffi::GPG_ERR_NO_NAME); +pub const NO_KEY: Error = Error(ffi::GPG_ERR_NO_KEY); +pub const LEGACY_KEY: Error = Error(ffi::GPG_ERR_LEGACY_KEY); +pub const REQUEST_TOO_SHORT: Error = Error(ffi::GPG_ERR_REQUEST_TOO_SHORT); +pub const REQUEST_TOO_LONG: Error = Error(ffi::GPG_ERR_REQUEST_TOO_LONG); +pub const OBJ_TERM_STATE: Error = Error(ffi::GPG_ERR_OBJ_TERM_STATE); +pub const NO_CERT_CHAIN: Error = Error(ffi::GPG_ERR_NO_CERT_CHAIN); +pub const CERT_TOO_LARGE: Error = Error(ffi::GPG_ERR_CERT_TOO_LARGE); +pub const INV_RECORD: Error = Error(ffi::GPG_ERR_INV_RECORD); +pub const BAD_MAC: Error = Error(ffi::GPG_ERR_BAD_MAC); +pub const UNEXPECTED_MSG: Error = Error(ffi::GPG_ERR_UNEXPECTED_MSG); +pub const COMPR_FAILED: Error = Error(ffi::GPG_ERR_COMPR_FAILED); +pub const WOULD_WRAP: Error = Error(ffi::GPG_ERR_WOULD_WRAP); +pub const FATAL_ALERT: Error = Error(ffi::GPG_ERR_FATAL_ALERT); +pub const NO_CIPHER: Error = Error(ffi::GPG_ERR_NO_CIPHER); +pub const MISSING_CLIENT_CERT: Error = Error(ffi::GPG_ERR_MISSING_CLIENT_CERT); +pub const CLOSE_NOTIFY: Error = Error(ffi::GPG_ERR_CLOSE_NOTIFY); +pub const TICKET_EXPIRED: Error = Error(ffi::GPG_ERR_TICKET_EXPIRED); +pub const BAD_TICKET: Error = Error(ffi::GPG_ERR_BAD_TICKET); +pub const UNKNOWN_IDENTITY: Error = Error(ffi::GPG_ERR_UNKNOWN_IDENTITY); +pub const BAD_HS_CERT: Error = Error(ffi::GPG_ERR_BAD_HS_CERT); +pub const BAD_HS_CERT_REQ: Error = Error(ffi::GPG_ERR_BAD_HS_CERT_REQ); +pub const BAD_HS_CERT_VER: Error = Error(ffi::GPG_ERR_BAD_HS_CERT_VER); +pub const BAD_HS_CHANGE_CIPHER: Error = Error(ffi::GPG_ERR_BAD_HS_CHANGE_CIPHER); +pub const BAD_HS_CLIENT_HELLO: Error = Error(ffi::GPG_ERR_BAD_HS_CLIENT_HELLO); +pub const BAD_HS_SERVER_HELLO: Error = Error(ffi::GPG_ERR_BAD_HS_SERVER_HELLO); +pub const BAD_HS_SERVER_HELLO_DONE: Error = Error(ffi::GPG_ERR_BAD_HS_SERVER_HELLO_DONE); +pub const BAD_HS_FINISHED: Error = Error(ffi::GPG_ERR_BAD_HS_FINISHED); +pub const BAD_HS_SERVER_KEX: Error = Error(ffi::GPG_ERR_BAD_HS_SERVER_KEX); +pub const BAD_HS_CLIENT_KEX: Error = Error(ffi::GPG_ERR_BAD_HS_CLIENT_KEX); +pub const BOGUS_STRING: Error = Error(ffi::GPG_ERR_BOGUS_STRING); +pub const FORBIDDEN: Error = Error(ffi::GPG_ERR_FORBIDDEN); +pub const KEY_DISABLED: Error = Error(ffi::GPG_ERR_KEY_DISABLED); +pub const KEY_ON_CARD: Error = Error(ffi::GPG_ERR_KEY_ON_CARD); +pub const INV_LOCK_OBJ: Error = Error(ffi::GPG_ERR_INV_LOCK_OBJ); +pub const TRUE: Error = Error(ffi::GPG_ERR_TRUE); +pub const FALSE: Error = Error(ffi::GPG_ERR_FALSE); +pub const ASS_GENERAL: Error = Error(ffi::GPG_ERR_ASS_GENERAL); +pub const ASS_ACCEPT_FAILED: Error = Error(ffi::GPG_ERR_ASS_ACCEPT_FAILED); +pub const ASS_CONNECT_FAILED: Error = Error(ffi::GPG_ERR_ASS_CONNECT_FAILED); +pub const ASS_INV_RESPONSE: Error = Error(ffi::GPG_ERR_ASS_INV_RESPONSE); +pub const ASS_INV_VALUE: Error = Error(ffi::GPG_ERR_ASS_INV_VALUE); +pub const ASS_INCOMPLETE_LINE: Error = Error(ffi::GPG_ERR_ASS_INCOMPLETE_LINE); +pub const ASS_LINE_TOO_LONG: Error = Error(ffi::GPG_ERR_ASS_LINE_TOO_LONG); +pub const ASS_NESTED_COMMANDS: Error = Error(ffi::GPG_ERR_ASS_NESTED_COMMANDS); +pub const ASS_NO_DATA_CB: Error = Error(ffi::GPG_ERR_ASS_NO_DATA_CB); +pub const ASS_NO_INQUIRE_CB: Error = Error(ffi::GPG_ERR_ASS_NO_INQUIRE_CB); +pub const ASS_NOT_A_SERVER: Error = Error(ffi::GPG_ERR_ASS_NOT_A_SERVER); +pub const ASS_NOT_A_CLIENT: Error = Error(ffi::GPG_ERR_ASS_NOT_A_CLIENT); +pub const ASS_SERVER_START: Error = Error(ffi::GPG_ERR_ASS_SERVER_START); +pub const ASS_READ_ERROR: Error = Error(ffi::GPG_ERR_ASS_READ_ERROR); +pub const ASS_WRITE_ERROR: Error = Error(ffi::GPG_ERR_ASS_WRITE_ERROR); +pub const ASS_TOO_MUCH_DATA: Error = Error(ffi::GPG_ERR_ASS_TOO_MUCH_DATA); +pub const ASS_UNEXPECTED_CMD: Error = Error(ffi::GPG_ERR_ASS_UNEXPECTED_CMD); +pub const ASS_UNKNOWN_CMD: Error = Error(ffi::GPG_ERR_ASS_UNKNOWN_CMD); +pub const ASS_SYNTAX: Error = Error(ffi::GPG_ERR_ASS_SYNTAX); +pub const ASS_CANCELED: Error = Error(ffi::GPG_ERR_ASS_CANCELED); +pub const ASS_NO_INPUT: Error = Error(ffi::GPG_ERR_ASS_NO_INPUT); +pub const ASS_NO_OUTPUT: Error = Error(ffi::GPG_ERR_ASS_NO_OUTPUT); +pub const ASS_PARAMETER: Error = Error(ffi::GPG_ERR_ASS_PARAMETER); +pub const ASS_UNKNOWN_INQUIRE: Error = Error(ffi::GPG_ERR_ASS_UNKNOWN_INQUIRE); +pub const ENGINE_TOO_OLD: Error = Error(ffi::GPG_ERR_ENGINE_TOO_OLD); +pub const WINDOW_TOO_SMALL: Error = Error(ffi::GPG_ERR_WINDOW_TOO_SMALL); +pub const WINDOW_TOO_LARGE: Error = Error(ffi::GPG_ERR_WINDOW_TOO_LARGE); +pub const MISSING_ENVVAR: Error = Error(ffi::GPG_ERR_MISSING_ENVVAR); +pub const USER_ID_EXISTS: Error = Error(ffi::GPG_ERR_USER_ID_EXISTS); +pub const NAME_EXISTS: Error = Error(ffi::GPG_ERR_NAME_EXISTS); +pub const DUP_NAME: Error = Error(ffi::GPG_ERR_DUP_NAME); +pub const TOO_YOUNG: Error = Error(ffi::GPG_ERR_TOO_YOUNG); +pub const TOO_OLD: Error = Error(ffi::GPG_ERR_TOO_OLD); +pub const UNKNOWN_FLAG: Error = Error(ffi::GPG_ERR_UNKNOWN_FLAG); +pub const INV_ORDER: Error = Error(ffi::GPG_ERR_INV_ORDER); +pub const ALREADY_FETCHED: Error = Error(ffi::GPG_ERR_ALREADY_FETCHED); +pub const TRY_LATER: Error = Error(ffi::GPG_ERR_TRY_LATER); +pub const WRONG_NAME: Error = Error(ffi::GPG_ERR_WRONG_NAME); +pub const NO_AUTH: Error = Error(ffi::GPG_ERR_NO_AUTH); +pub const BAD_AUTH: Error = Error(ffi::GPG_ERR_BAD_AUTH); +pub const SYSTEM_BUG: Error = Error(ffi::GPG_ERR_SYSTEM_BUG); +pub const DNS_UNKNOWN: Error = Error(ffi::GPG_ERR_DNS_UNKNOWN); +pub const DNS_SECTION: Error = Error(ffi::GPG_ERR_DNS_SECTION); +pub const DNS_ADDRESS: Error = Error(ffi::GPG_ERR_DNS_ADDRESS); +pub const DNS_NO_QUERY: Error = Error(ffi::GPG_ERR_DNS_NO_QUERY); +pub const DNS_NO_ANSWER: Error = Error(ffi::GPG_ERR_DNS_NO_ANSWER); +pub const DNS_CLOSED: Error = Error(ffi::GPG_ERR_DNS_CLOSED); +pub const DNS_VERIFY: Error = Error(ffi::GPG_ERR_DNS_VERIFY); +pub const DNS_TIMEOUT: Error = Error(ffi::GPG_ERR_DNS_TIMEOUT); +pub const LDAP_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_GENERAL); +pub const LDAP_ATTR_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_ATTR_GENERAL); +pub const LDAP_NAME_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_NAME_GENERAL); +pub const LDAP_SECURITY_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_SECURITY_GENERAL); +pub const LDAP_SERVICE_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_SERVICE_GENERAL); +pub const LDAP_UPDATE_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_UPDATE_GENERAL); +pub const LDAP_E_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_E_GENERAL); +pub const LDAP_X_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_X_GENERAL); +pub const LDAP_OTHER_GENERAL: Error = Error(ffi::GPG_ERR_LDAP_OTHER_GENERAL); +pub const LDAP_X_CONNECTING: Error = Error(ffi::GPG_ERR_LDAP_X_CONNECTING); +pub const LDAP_REFERRAL_LIMIT: Error = Error(ffi::GPG_ERR_LDAP_REFERRAL_LIMIT); +pub const LDAP_CLIENT_LOOP: Error = Error(ffi::GPG_ERR_LDAP_CLIENT_LOOP); +pub const LDAP_NO_RESULTS: Error = Error(ffi::GPG_ERR_LDAP_NO_RESULTS); +pub const LDAP_CONTROL_NOT_FOUND: Error = Error(ffi::GPG_ERR_LDAP_CONTROL_NOT_FOUND); +pub const LDAP_NOT_SUPPORTED: Error = Error(ffi::GPG_ERR_LDAP_NOT_SUPPORTED); +pub const LDAP_CONNECT: Error = Error(ffi::GPG_ERR_LDAP_CONNECT); +pub const LDAP_NO_MEMORY: Error = Error(ffi::GPG_ERR_LDAP_NO_MEMORY); +pub const LDAP_PARAM: Error = Error(ffi::GPG_ERR_LDAP_PARAM); +pub const LDAP_USER_CANCELLED: Error = Error(ffi::GPG_ERR_LDAP_USER_CANCELLED); +pub const LDAP_FILTER: Error = Error(ffi::GPG_ERR_LDAP_FILTER); +pub const LDAP_AUTH_UNKNOWN: Error = Error(ffi::GPG_ERR_LDAP_AUTH_UNKNOWN); +pub const LDAP_TIMEOUT: Error = Error(ffi::GPG_ERR_LDAP_TIMEOUT); +pub const LDAP_DECODING: Error = Error(ffi::GPG_ERR_LDAP_DECODING); +pub const LDAP_ENCODING: Error = Error(ffi::GPG_ERR_LDAP_ENCODING); +pub const LDAP_LOCAL: Error = Error(ffi::GPG_ERR_LDAP_LOCAL); +pub const LDAP_SERVER_DOWN: Error = Error(ffi::GPG_ERR_LDAP_SERVER_DOWN); +pub const LDAP_SUCCESS: Error = Error(ffi::GPG_ERR_LDAP_SUCCESS); +pub const LDAP_OPERATIONS: Error = Error(ffi::GPG_ERR_LDAP_OPERATIONS); +pub const LDAP_PROTOCOL: Error = Error(ffi::GPG_ERR_LDAP_PROTOCOL); +pub const LDAP_TIMELIMIT: Error = Error(ffi::GPG_ERR_LDAP_TIMELIMIT); +pub const LDAP_SIZELIMIT: Error = Error(ffi::GPG_ERR_LDAP_SIZELIMIT); +pub const LDAP_COMPARE_FALSE: Error = Error(ffi::GPG_ERR_LDAP_COMPARE_FALSE); +pub const LDAP_COMPARE_TRUE: Error = Error(ffi::GPG_ERR_LDAP_COMPARE_TRUE); +pub const LDAP_UNSUPPORTED_AUTH: Error = Error(ffi::GPG_ERR_LDAP_UNSUPPORTED_AUTH); +pub const LDAP_STRONG_AUTH_RQRD: Error = Error(ffi::GPG_ERR_LDAP_STRONG_AUTH_RQRD); +pub const LDAP_PARTIAL_RESULTS: Error = Error(ffi::GPG_ERR_LDAP_PARTIAL_RESULTS); +pub const LDAP_REFERRAL: Error = Error(ffi::GPG_ERR_LDAP_REFERRAL); +pub const LDAP_ADMINLIMIT: Error = Error(ffi::GPG_ERR_LDAP_ADMINLIMIT); +pub const LDAP_UNAVAIL_CRIT_EXTN: Error = Error(ffi::GPG_ERR_LDAP_UNAVAIL_CRIT_EXTN); +pub const LDAP_CONFIDENT_RQRD: Error = Error(ffi::GPG_ERR_LDAP_CONFIDENT_RQRD); +pub const LDAP_SASL_BIND_INPROG: Error = Error(ffi::GPG_ERR_LDAP_SASL_BIND_INPROG); +pub const LDAP_NO_SUCH_ATTRIBUTE: Error = Error(ffi::GPG_ERR_LDAP_NO_SUCH_ATTRIBUTE); +pub const LDAP_UNDEFINED_TYPE: Error = Error(ffi::GPG_ERR_LDAP_UNDEFINED_TYPE); +pub const LDAP_BAD_MATCHING: Error = Error(ffi::GPG_ERR_LDAP_BAD_MATCHING); +pub const LDAP_CONST_VIOLATION: Error = Error(ffi::GPG_ERR_LDAP_CONST_VIOLATION); +pub const LDAP_TYPE_VALUE_EXISTS: Error = Error(ffi::GPG_ERR_LDAP_TYPE_VALUE_EXISTS); +pub const LDAP_INV_SYNTAX: Error = Error(ffi::GPG_ERR_LDAP_INV_SYNTAX); +pub const LDAP_NO_SUCH_OBJ: Error = Error(ffi::GPG_ERR_LDAP_NO_SUCH_OBJ); +pub const LDAP_ALIAS_PROBLEM: Error = Error(ffi::GPG_ERR_LDAP_ALIAS_PROBLEM); +pub const LDAP_INV_DN_SYNTAX: Error = Error(ffi::GPG_ERR_LDAP_INV_DN_SYNTAX); +pub const LDAP_IS_LEAF: Error = Error(ffi::GPG_ERR_LDAP_IS_LEAF); +pub const LDAP_ALIAS_DEREF: Error = Error(ffi::GPG_ERR_LDAP_ALIAS_DEREF); +pub const LDAP_X_PROXY_AUTH_FAIL: Error = Error(ffi::GPG_ERR_LDAP_X_PROXY_AUTH_FAIL); +pub const LDAP_BAD_AUTH: Error = Error(ffi::GPG_ERR_LDAP_BAD_AUTH); +pub const LDAP_INV_CREDENTIALS: Error = Error(ffi::GPG_ERR_LDAP_INV_CREDENTIALS); +pub const LDAP_INSUFFICIENT_ACC: Error = Error(ffi::GPG_ERR_LDAP_INSUFFICIENT_ACC); +pub const LDAP_BUSY: Error = Error(ffi::GPG_ERR_LDAP_BUSY); +pub const LDAP_UNAVAILABLE: Error = Error(ffi::GPG_ERR_LDAP_UNAVAILABLE); +pub const LDAP_UNWILL_TO_PERFORM: Error = Error(ffi::GPG_ERR_LDAP_UNWILL_TO_PERFORM); +pub const LDAP_LOOP_DETECT: Error = Error(ffi::GPG_ERR_LDAP_LOOP_DETECT); +pub const LDAP_NAMING_VIOLATION: Error = Error(ffi::GPG_ERR_LDAP_NAMING_VIOLATION); +pub const LDAP_OBJ_CLS_VIOLATION: Error = Error(ffi::GPG_ERR_LDAP_OBJ_CLS_VIOLATION); +pub const LDAP_NOT_ALLOW_NONLEAF: Error = Error(ffi::GPG_ERR_LDAP_NOT_ALLOW_NONLEAF); +pub const LDAP_NOT_ALLOW_ON_RDN: Error = Error(ffi::GPG_ERR_LDAP_NOT_ALLOW_ON_RDN); +pub const LDAP_ALREADY_EXISTS: Error = Error(ffi::GPG_ERR_LDAP_ALREADY_EXISTS); +pub const LDAP_NO_OBJ_CLASS_MODS: Error = Error(ffi::GPG_ERR_LDAP_NO_OBJ_CLASS_MODS); +pub const LDAP_RESULTS_TOO_LARGE: Error = Error(ffi::GPG_ERR_LDAP_RESULTS_TOO_LARGE); +pub const LDAP_AFFECTS_MULT_DSAS: Error = Error(ffi::GPG_ERR_LDAP_AFFECTS_MULT_DSAS); +pub const LDAP_VLV: Error = Error(ffi::GPG_ERR_LDAP_VLV); +pub const LDAP_OTHER: Error = Error(ffi::GPG_ERR_LDAP_OTHER); +pub const LDAP_CUP_RESOURCE_LIMIT: Error = Error(ffi::GPG_ERR_LDAP_CUP_RESOURCE_LIMIT); +pub const LDAP_CUP_SEC_VIOLATION: Error = Error(ffi::GPG_ERR_LDAP_CUP_SEC_VIOLATION); +pub const LDAP_CUP_INV_DATA: Error = Error(ffi::GPG_ERR_LDAP_CUP_INV_DATA); +pub const LDAP_CUP_UNSUP_SCHEME: Error = Error(ffi::GPG_ERR_LDAP_CUP_UNSUP_SCHEME); +pub const LDAP_CUP_RELOAD: Error = Error(ffi::GPG_ERR_LDAP_CUP_RELOAD); +pub const LDAP_CANCELLED: Error = Error(ffi::GPG_ERR_LDAP_CANCELLED); +pub const LDAP_NO_SUCH_OPERATION: Error = Error(ffi::GPG_ERR_LDAP_NO_SUCH_OPERATION); +pub const LDAP_TOO_LATE: Error = Error(ffi::GPG_ERR_LDAP_TOO_LATE); +pub const LDAP_CANNOT_CANCEL: Error = Error(ffi::GPG_ERR_LDAP_CANNOT_CANCEL); +pub const LDAP_ASSERTION_FAILED: Error = Error(ffi::GPG_ERR_LDAP_ASSERTION_FAILED); +pub const LDAP_PROX_AUTH_DENIED: Error = Error(ffi::GPG_ERR_LDAP_PROX_AUTH_DENIED); +pub const USER_1: Error = Error(ffi::GPG_ERR_USER_1); +pub const USER_2: Error = Error(ffi::GPG_ERR_USER_2); +pub const USER_3: Error = Error(ffi::GPG_ERR_USER_3); +pub const USER_4: Error = Error(ffi::GPG_ERR_USER_4); +pub const USER_5: Error = Error(ffi::GPG_ERR_USER_5); +pub const USER_6: Error = Error(ffi::GPG_ERR_USER_6); +pub const USER_7: Error = Error(ffi::GPG_ERR_USER_7); +pub const USER_8: Error = Error(ffi::GPG_ERR_USER_8); +pub const USER_9: Error = Error(ffi::GPG_ERR_USER_9); +pub const USER_10: Error = Error(ffi::GPG_ERR_USER_10); +pub const USER_11: Error = Error(ffi::GPG_ERR_USER_11); +pub const USER_12: Error = Error(ffi::GPG_ERR_USER_12); +pub const USER_13: Error = Error(ffi::GPG_ERR_USER_13); +pub const USER_14: Error = Error(ffi::GPG_ERR_USER_14); +pub const USER_15: Error = Error(ffi::GPG_ERR_USER_15); +pub const USER_16: Error = Error(ffi::GPG_ERR_USER_16); +pub const MISSING_ERRNO: Error = Error(ffi::GPG_ERR_MISSING_ERRNO); +pub const UNKNOWN_ERRNO: Error = Error(ffi::GPG_ERR_UNKNOWN_ERRNO); +pub const EOF: Error = Error(ffi::GPG_ERR_EOF); +pub const E2BIG: Error = Error(ffi::GPG_ERR_E2BIG); +pub const EACCES: Error = Error(ffi::GPG_ERR_EACCES); +pub const EADDRINUSE: Error = Error(ffi::GPG_ERR_EADDRINUSE); +pub const EADDRNOTAVAIL: Error = Error(ffi::GPG_ERR_EADDRNOTAVAIL); +pub const EADV: Error = Error(ffi::GPG_ERR_EADV); +pub const EAFNOSUPPORT: Error = Error(ffi::GPG_ERR_EAFNOSUPPORT); +pub const EAGAIN: Error = Error(ffi::GPG_ERR_EAGAIN); +pub const EALREADY: Error = Error(ffi::GPG_ERR_EALREADY); +pub const EAUTH: Error = Error(ffi::GPG_ERR_EAUTH); +pub const EBACKGROUND: Error = Error(ffi::GPG_ERR_EBACKGROUND); +pub const EBADE: Error = Error(ffi::GPG_ERR_EBADE); +pub const EBADF: Error = Error(ffi::GPG_ERR_EBADF); +pub const EBADFD: Error = Error(ffi::GPG_ERR_EBADFD); +pub const EBADMSG: Error = Error(ffi::GPG_ERR_EBADMSG); +pub const EBADR: Error = Error(ffi::GPG_ERR_EBADR); +pub const EBADRPC: Error = Error(ffi::GPG_ERR_EBADRPC); +pub const EBADRQC: Error = Error(ffi::GPG_ERR_EBADRQC); +pub const EBADSLT: Error = Error(ffi::GPG_ERR_EBADSLT); +pub const EBFONT: Error = Error(ffi::GPG_ERR_EBFONT); +pub const EBUSY: Error = Error(ffi::GPG_ERR_EBUSY); +pub const ECANCELED: Error = Error(ffi::GPG_ERR_ECANCELED); +pub const ECHILD: Error = Error(ffi::GPG_ERR_ECHILD); +pub const ECHRNG: Error = Error(ffi::GPG_ERR_ECHRNG); +pub const ECOMM: Error = Error(ffi::GPG_ERR_ECOMM); +pub const ECONNABORTED: Error = Error(ffi::GPG_ERR_ECONNABORTED); +pub const ECONNREFUSED: Error = Error(ffi::GPG_ERR_ECONNREFUSED); +pub const ECONNRESET: Error = Error(ffi::GPG_ERR_ECONNRESET); +pub const ED: Error = Error(ffi::GPG_ERR_ED); +pub const EDEADLK: Error = Error(ffi::GPG_ERR_EDEADLK); +pub const EDEADLOCK: Error = Error(ffi::GPG_ERR_EDEADLOCK); +pub const EDESTADDRREQ: Error = Error(ffi::GPG_ERR_EDESTADDRREQ); +pub const EDIED: Error = Error(ffi::GPG_ERR_EDIED); +pub const EDOM: Error = Error(ffi::GPG_ERR_EDOM); +pub const EDOTDOT: Error = Error(ffi::GPG_ERR_EDOTDOT); +pub const EDQUOT: Error = Error(ffi::GPG_ERR_EDQUOT); +pub const EEXIST: Error = Error(ffi::GPG_ERR_EEXIST); +pub const EFAULT: Error = Error(ffi::GPG_ERR_EFAULT); +pub const EFBIG: Error = Error(ffi::GPG_ERR_EFBIG); +pub const EFTYPE: Error = Error(ffi::GPG_ERR_EFTYPE); +pub const EGRATUITOUS: Error = Error(ffi::GPG_ERR_EGRATUITOUS); +pub const EGREGIOUS: Error = Error(ffi::GPG_ERR_EGREGIOUS); +pub const EHOSTDOWN: Error = Error(ffi::GPG_ERR_EHOSTDOWN); +pub const EHOSTUNREACH: Error = Error(ffi::GPG_ERR_EHOSTUNREACH); +pub const EIDRM: Error = Error(ffi::GPG_ERR_EIDRM); +pub const EIEIO: Error = Error(ffi::GPG_ERR_EIEIO); +pub const EILSEQ: Error = Error(ffi::GPG_ERR_EILSEQ); +pub const EINPROGRESS: Error = Error(ffi::GPG_ERR_EINPROGRESS); +pub const EINTR: Error = Error(ffi::GPG_ERR_EINTR); +pub const EINVAL: Error = Error(ffi::GPG_ERR_EINVAL); +pub const EIO: Error = Error(ffi::GPG_ERR_EIO); +pub const EISCONN: Error = Error(ffi::GPG_ERR_EISCONN); +pub const EISDIR: Error = Error(ffi::GPG_ERR_EISDIR); +pub const EISNAM: Error = Error(ffi::GPG_ERR_EISNAM); +pub const EL2HLT: Error = Error(ffi::GPG_ERR_EL2HLT); +pub const EL2NSYNC: Error = Error(ffi::GPG_ERR_EL2NSYNC); +pub const EL3HLT: Error = Error(ffi::GPG_ERR_EL3HLT); +pub const EL3RST: Error = Error(ffi::GPG_ERR_EL3RST); +pub const ELIBACC: Error = Error(ffi::GPG_ERR_ELIBACC); +pub const ELIBBAD: Error = Error(ffi::GPG_ERR_ELIBBAD); +pub const ELIBEXEC: Error = Error(ffi::GPG_ERR_ELIBEXEC); +pub const ELIBMAX: Error = Error(ffi::GPG_ERR_ELIBMAX); +pub const ELIBSCN: Error = Error(ffi::GPG_ERR_ELIBSCN); +pub const ELNRNG: Error = Error(ffi::GPG_ERR_ELNRNG); +pub const ELOOP: Error = Error(ffi::GPG_ERR_ELOOP); +pub const EMEDIUMTYPE: Error = Error(ffi::GPG_ERR_EMEDIUMTYPE); +pub const EMFILE: Error = Error(ffi::GPG_ERR_EMFILE); +pub const EMLINK: Error = Error(ffi::GPG_ERR_EMLINK); +pub const EMSGSIZE: Error = Error(ffi::GPG_ERR_EMSGSIZE); +pub const EMULTIHOP: Error = Error(ffi::GPG_ERR_EMULTIHOP); +pub const ENAMETOOLONG: Error = Error(ffi::GPG_ERR_ENAMETOOLONG); +pub const ENAVAIL: Error = Error(ffi::GPG_ERR_ENAVAIL); +pub const ENEEDAUTH: Error = Error(ffi::GPG_ERR_ENEEDAUTH); +pub const ENETDOWN: Error = Error(ffi::GPG_ERR_ENETDOWN); +pub const ENETRESET: Error = Error(ffi::GPG_ERR_ENETRESET); +pub const ENETUNREACH: Error = Error(ffi::GPG_ERR_ENETUNREACH); +pub const ENFILE: Error = Error(ffi::GPG_ERR_ENFILE); +pub const ENOANO: Error = Error(ffi::GPG_ERR_ENOANO); +pub const ENOBUFS: Error = Error(ffi::GPG_ERR_ENOBUFS); +pub const ENOCSI: Error = Error(ffi::GPG_ERR_ENOCSI); +pub const ENODATA: Error = Error(ffi::GPG_ERR_ENODATA); +pub const ENODEV: Error = Error(ffi::GPG_ERR_ENODEV); +pub const ENOENT: Error = Error(ffi::GPG_ERR_ENOENT); +pub const ENOEXEC: Error = Error(ffi::GPG_ERR_ENOEXEC); +pub const ENOLCK: Error = Error(ffi::GPG_ERR_ENOLCK); +pub const ENOLINK: Error = Error(ffi::GPG_ERR_ENOLINK); +pub const ENOMEDIUM: Error = Error(ffi::GPG_ERR_ENOMEDIUM); +pub const ENOMEM: Error = Error(ffi::GPG_ERR_ENOMEM); +pub const ENOMSG: Error = Error(ffi::GPG_ERR_ENOMSG); +pub const ENONET: Error = Error(ffi::GPG_ERR_ENONET); +pub const ENOPKG: Error = Error(ffi::GPG_ERR_ENOPKG); +pub const ENOPROTOOPT: Error = Error(ffi::GPG_ERR_ENOPROTOOPT); +pub const ENOSPC: Error = Error(ffi::GPG_ERR_ENOSPC); +pub const ENOSR: Error = Error(ffi::GPG_ERR_ENOSR); +pub const ENOSTR: Error = Error(ffi::GPG_ERR_ENOSTR); +pub const ENOSYS: Error = Error(ffi::GPG_ERR_ENOSYS); +pub const ENOTBLK: Error = Error(ffi::GPG_ERR_ENOTBLK); +pub const ENOTCONN: Error = Error(ffi::GPG_ERR_ENOTCONN); +pub const ENOTDIR: Error = Error(ffi::GPG_ERR_ENOTDIR); +pub const ENOTEMPTY: Error = Error(ffi::GPG_ERR_ENOTEMPTY); +pub const ENOTNAM: Error = Error(ffi::GPG_ERR_ENOTNAM); +pub const ENOTSOCK: Error = Error(ffi::GPG_ERR_ENOTSOCK); +pub const ENOTSUP: Error = Error(ffi::GPG_ERR_ENOTSUP); +pub const ENOTTY: Error = Error(ffi::GPG_ERR_ENOTTY); +pub const ENOTUNIQ: Error = Error(ffi::GPG_ERR_ENOTUNIQ); +pub const ENXIO: Error = Error(ffi::GPG_ERR_ENXIO); +pub const EOPNOTSUPP: Error = Error(ffi::GPG_ERR_EOPNOTSUPP); +pub const EOVERFLOW: Error = Error(ffi::GPG_ERR_EOVERFLOW); +pub const EPERM: Error = Error(ffi::GPG_ERR_EPERM); +pub const EPFNOSUPPORT: Error = Error(ffi::GPG_ERR_EPFNOSUPPORT); +pub const EPIPE: Error = Error(ffi::GPG_ERR_EPIPE); +pub const EPROCLIM: Error = Error(ffi::GPG_ERR_EPROCLIM); +pub const EPROCUNAVAIL: Error = Error(ffi::GPG_ERR_EPROCUNAVAIL); +pub const EPROGMISMATCH: Error = Error(ffi::GPG_ERR_EPROGMISMATCH); +pub const EPROGUNAVAIL: Error = Error(ffi::GPG_ERR_EPROGUNAVAIL); +pub const EPROTO: Error = Error(ffi::GPG_ERR_EPROTO); +pub const EPROTONOSUPPORT: Error = Error(ffi::GPG_ERR_EPROTONOSUPPORT); +pub const EPROTOTYPE: Error = Error(ffi::GPG_ERR_EPROTOTYPE); +pub const ERANGE: Error = Error(ffi::GPG_ERR_ERANGE); +pub const EREMCHG: Error = Error(ffi::GPG_ERR_EREMCHG); +pub const EREMOTE: Error = Error(ffi::GPG_ERR_EREMOTE); +pub const EREMOTEIO: Error = Error(ffi::GPG_ERR_EREMOTEIO); +pub const ERESTART: Error = Error(ffi::GPG_ERR_ERESTART); +pub const EROFS: Error = Error(ffi::GPG_ERR_EROFS); +pub const ERPCMISMATCH: Error = Error(ffi::GPG_ERR_ERPCMISMATCH); +pub const ESHUTDOWN: Error = Error(ffi::GPG_ERR_ESHUTDOWN); +pub const ESOCKTNOSUPPORT: Error = Error(ffi::GPG_ERR_ESOCKTNOSUPPORT); +pub const ESPIPE: Error = Error(ffi::GPG_ERR_ESPIPE); +pub const ESRCH: Error = Error(ffi::GPG_ERR_ESRCH); +pub const ESRMNT: Error = Error(ffi::GPG_ERR_ESRMNT); +pub const ESTALE: Error = Error(ffi::GPG_ERR_ESTALE); +pub const ESTRPIPE: Error = Error(ffi::GPG_ERR_ESTRPIPE); +pub const ETIME: Error = Error(ffi::GPG_ERR_ETIME); +pub const ETIMEDOUT: Error = Error(ffi::GPG_ERR_ETIMEDOUT); +pub const ETOOMANYREFS: Error = Error(ffi::GPG_ERR_ETOOMANYREFS); +pub const ETXTBSY: Error = Error(ffi::GPG_ERR_ETXTBSY); +pub const EUCLEAN: Error = Error(ffi::GPG_ERR_EUCLEAN); +pub const EUNATCH: Error = Error(ffi::GPG_ERR_EUNATCH); +pub const EUSERS: Error = Error(ffi::GPG_ERR_EUSERS); +pub const EWOULDBLOCK: Error = Error(ffi::GPG_ERR_EWOULDBLOCK); +pub const EXDEV: Error = Error(ffi::GPG_ERR_EXDEV); +pub const EXFULL: Error = Error(ffi::GPG_ERR_EXFULL); +} diff --git a/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/output b/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/output new file mode 100644 index 000000000..e69de29bb diff --git a/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/root-output b/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/root-output new file mode 100644 index 000000000..5e60ad32d --- /dev/null +++ b/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/root-output @@ -0,0 +1 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/stderr b/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/stderr new file mode 100644 index 000000000..e69de29bb diff --git a/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build-script-build b/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build-script-build new file mode 100755 index 000000000..09b51df72 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build-script-build differ diff --git a/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build_script_build-714413deff4c1a86 b/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build_script_build-714413deff4c1a86 new file mode 100755 index 000000000..09b51df72 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build_script_build-714413deff4c1a86 differ diff --git a/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build_script_build-714413deff4c1a86.d b/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build_script_build-714413deff4c1a86.d new file mode 100644 index 000000000..ff0e976e0 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build_script_build-714413deff4c1a86.d @@ -0,0 +1,5 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build_script_build-714413deff4c1a86: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/build.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-714413deff4c1a86/build_script_build-714413deff4c1a86.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/build.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/build.rs: diff --git a/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/invoked.timestamp b/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/output b/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/output new file mode 100644 index 000000000..dbd8378ae --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/output @@ -0,0 +1,9 @@ +cargo:rerun-if-changed=build.rs +cargo:rustc-cfg=freebsd11 +cargo:rustc-cfg=libc_priv_mod_use +cargo:rustc-cfg=libc_union +cargo:rustc-cfg=libc_const_size_of +cargo:rustc-cfg=libc_align +cargo:rustc-cfg=libc_core_cvoid +cargo:rustc-cfg=libc_packedN +cargo:rustc-cfg=libc_cfg_target_vendor diff --git a/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/root-output b/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/root-output new file mode 100644 index 000000000..f8b3d750c --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/root-output @@ -0,0 +1 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/out \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/stderr b/aes-gmac-siv/target/debug/build/libc-733b6b3a50ff152c/stderr new file mode 100644 index 000000000..e69de29bb diff --git a/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build-script-build b/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build-script-build new file mode 100755 index 000000000..287412587 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build-script-build differ diff --git a/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build_script_build-fae2748cdf251f7e b/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build_script_build-fae2748cdf251f7e new file mode 100755 index 000000000..287412587 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build_script_build-fae2748cdf251f7e differ diff --git a/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build_script_build-fae2748cdf251f7e.d b/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build_script_build-fae2748cdf251f7e.d new file mode 100644 index 000000000..6bc1d998d --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build_script_build-fae2748cdf251f7e.d @@ -0,0 +1,5 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build_script_build-fae2748cdf251f7e: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/build.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libc-fae2748cdf251f7e/build_script_build-fae2748cdf251f7e.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/build.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/build.rs: diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/invoked.timestamp b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/flag_check b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/flag_check new file mode 100755 index 000000000..afceb5161 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/flag_check differ diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/flag_check.c b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/flag_check.c new file mode 100644 index 000000000..f1d95ed7e --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/flag_check.c @@ -0,0 +1 @@ +int main(void) { return 0; } \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/libgcrypt_shim.a b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/libgcrypt_shim.a new file mode 100644 index 000000000..458ef394e Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/libgcrypt_shim.a differ diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/version.rs b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/version.rs new file mode 100644 index 000000000..7fa24c6a9 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/version.rs @@ -0,0 +1,17 @@ +pub const MIN_GCRYPT_VERSION: &str = "1.9.0\0"; +#[macro_export] +macro_rules! require_gcrypt_ver { +($ver:tt => { $($t:tt)* }) => (require_gcrypt_ver! { $ver => { $($t)* } else {} }); +((1,0) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,1) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,2) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,3) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,4) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,5) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,6) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,7) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,8) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,9) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((0,$ver:tt) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +($ver:tt => { $($t:tt)* } else { $($u:tt)* }) => ($($u)*); +} diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/output b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/output new file mode 100644 index 000000000..058128eae --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/output @@ -0,0 +1,49 @@ +cargo:rerun-if-env-changed=LIBGCRYPT_PREFIX +cargo:rerun-if-env-changed=LIBGCRYPT_INCLUDE +cargo:rerun-if-env-changed=LIBGCRYPT_LIB_DIR +cargo:rerun-if-env-changed=LIBGCRYPT_LIBS +cargo:rerun-if-env-changed=LIBGCRYPT_CONFIG +TARGET = Some("aarch64-apple-darwin") +OPT_LEVEL = Some("0") +HOST = Some("aarch64-apple-darwin") +CC_aarch64-apple-darwin = None +CC_aarch64_apple_darwin = None +HOST_CC = None +CC = None +CFLAGS_aarch64-apple-darwin = None +CFLAGS_aarch64_apple_darwin = None +HOST_CFLAGS = None +CFLAGS = None +CRATE_CC_NO_DEFAULTS = None +DEBUG = Some("true") +CARGO_CFG_TARGET_FEATURE = None +CC_aarch64-apple-darwin = None +CC_aarch64_apple_darwin = None +HOST_CC = None +CC = None +CFLAGS_aarch64-apple-darwin = None +CFLAGS_aarch64_apple_darwin = None +HOST_CFLAGS = None +CFLAGS = None +CRATE_CC_NO_DEFAULTS = None +CARGO_CFG_TARGET_FEATURE = None +running: "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-fno-omit-frame-pointer" "-arch" "arm64" "-I" "/opt/homebrew/opt/libgcrypt/include" "-I" "/opt/homebrew/opt/libgpg-error/include" "-Wall" "-Wextra" "-Wno-deprecated-declarations" "-o" "/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/shim.o" "-c" "shim.c" +exit status: 0 +AR_aarch64-apple-darwin = None +AR_aarch64_apple_darwin = None +HOST_AR = None +AR = None +running: "ar" "cq" "/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/libgcrypt_shim.a" "/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/shim.o" +exit status: 0 +running: "ar" "s" "/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/libgcrypt_shim.a" +exit status: 0 +cargo:rustc-link-lib=static=gcrypt_shim +cargo:rustc-link-search=native=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out +cargo:version=1.9.3 +cargo:include=/opt/homebrew/opt/libgcrypt/include:/opt/homebrew/opt/libgpg-error/include +cargo:lib_dir=/opt/homebrew/opt/libgcrypt/lib:/opt/homebrew/opt/libgpg-error/lib +cargo:rustc-link-search=native=/opt/homebrew/opt/libgcrypt/lib +cargo:rustc-link-search=native=/opt/homebrew/opt/libgpg-error/lib +cargo:libs=gcrypt:gpg-error +cargo:rustc-link-lib=gcrypt +cargo:rustc-link-lib=gpg-error diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/root-output b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/root-output new file mode 100644 index 000000000..c909cadc8 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/root-output @@ -0,0 +1 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/stderr b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/stderr new file mode 100644 index 000000000..9b6c40165 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/stderr @@ -0,0 +1,2 @@ +running: "sh" "-c" "libgcrypt-config --version" +running: "sh" "-c" "libgcrypt-config --cflags --libs" diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build-script-build b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build-script-build new file mode 100755 index 000000000..408bcd4fd Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build-script-build differ diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build_script_build-5273519c0c05ff3d b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build_script_build-5273519c0c05ff3d new file mode 100755 index 000000000..408bcd4fd Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build_script_build-5273519c0c05ff3d differ diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build_script_build-5273519c0c05ff3d.d b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build_script_build-5273519c0c05ff3d.d new file mode 100644 index 000000000..76da8f264 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build_script_build-5273519c0c05ff3d.d @@ -0,0 +1,6 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build_script_build-5273519c0c05ff3d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build_helper/mod.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5273519c0c05ff3d/build_script_build-5273519c0c05ff3d.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build_helper/mod.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build_helper/mod.rs: diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/invoked.timestamp b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/flag_check b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/flag_check new file mode 100755 index 000000000..afceb5161 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/flag_check differ diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/flag_check.c b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/flag_check.c new file mode 100644 index 000000000..f1d95ed7e --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/flag_check.c @@ -0,0 +1 @@ +int main(void) { return 0; } \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/libgcrypt_shim.a b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/libgcrypt_shim.a new file mode 100644 index 000000000..e26b7e4c5 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/libgcrypt_shim.a differ diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/version.rs b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/version.rs new file mode 100644 index 000000000..7fa24c6a9 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/version.rs @@ -0,0 +1,17 @@ +pub const MIN_GCRYPT_VERSION: &str = "1.9.0\0"; +#[macro_export] +macro_rules! require_gcrypt_ver { +($ver:tt => { $($t:tt)* }) => (require_gcrypt_ver! { $ver => { $($t)* } else {} }); +((1,0) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,1) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,2) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,3) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,4) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,5) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,6) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,7) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,8) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,9) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((0,$ver:tt) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +($ver:tt => { $($t:tt)* } else { $($u:tt)* }) => ($($u)*); +} diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/output b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/output new file mode 100644 index 000000000..f1a2b09b1 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/output @@ -0,0 +1,49 @@ +cargo:rerun-if-env-changed=LIBGCRYPT_PREFIX +cargo:rerun-if-env-changed=LIBGCRYPT_INCLUDE +cargo:rerun-if-env-changed=LIBGCRYPT_LIB_DIR +cargo:rerun-if-env-changed=LIBGCRYPT_LIBS +cargo:rerun-if-env-changed=LIBGCRYPT_CONFIG +TARGET = Some("aarch64-apple-darwin") +OPT_LEVEL = Some("0") +HOST = Some("aarch64-apple-darwin") +CC_aarch64-apple-darwin = None +CC_aarch64_apple_darwin = None +HOST_CC = None +CC = None +CFLAGS_aarch64-apple-darwin = None +CFLAGS_aarch64_apple_darwin = None +HOST_CFLAGS = None +CFLAGS = None +CRATE_CC_NO_DEFAULTS = None +DEBUG = Some("true") +CARGO_CFG_TARGET_FEATURE = None +CC_aarch64-apple-darwin = None +CC_aarch64_apple_darwin = None +HOST_CC = None +CC = None +CFLAGS_aarch64-apple-darwin = None +CFLAGS_aarch64_apple_darwin = None +HOST_CFLAGS = None +CFLAGS = None +CRATE_CC_NO_DEFAULTS = None +CARGO_CFG_TARGET_FEATURE = None +running: "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-fno-omit-frame-pointer" "-arch" "arm64" "-I" "/opt/homebrew/opt/libgcrypt/include" "-I" "/opt/homebrew/opt/libgpg-error/include" "-Wall" "-Wextra" "-Wno-deprecated-declarations" "-o" "/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/shim.o" "-c" "shim.c" +exit status: 0 +AR_aarch64-apple-darwin = None +AR_aarch64_apple_darwin = None +HOST_AR = None +AR = None +running: "ar" "cq" "/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/libgcrypt_shim.a" "/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/shim.o" +exit status: 0 +running: "ar" "s" "/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/libgcrypt_shim.a" +exit status: 0 +cargo:rustc-link-lib=static=gcrypt_shim +cargo:rustc-link-search=native=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out +cargo:version=1.9.3 +cargo:include=/opt/homebrew/opt/libgcrypt/include:/opt/homebrew/opt/libgpg-error/include +cargo:lib_dir=/opt/homebrew/opt/libgcrypt/lib:/opt/homebrew/opt/libgpg-error/lib +cargo:rustc-link-search=native=/opt/homebrew/opt/libgcrypt/lib +cargo:rustc-link-search=native=/opt/homebrew/opt/libgpg-error/lib +cargo:libs=gpg-error:gcrypt +cargo:rustc-link-lib=gpg-error +cargo:rustc-link-lib=gcrypt diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/root-output b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/root-output new file mode 100644 index 000000000..ca9b70699 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/root-output @@ -0,0 +1 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/stderr b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/stderr new file mode 100644 index 000000000..9b6c40165 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/stderr @@ -0,0 +1,2 @@ +running: "sh" "-c" "libgcrypt-config --version" +running: "sh" "-c" "libgcrypt-config --cflags --libs" diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build b/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build new file mode 100755 index 000000000..3536147f2 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build-script-build differ diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build_script_build-cf3b7f8f36dd8843 b/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build_script_build-cf3b7f8f36dd8843 new file mode 100755 index 000000000..3536147f2 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build_script_build-cf3b7f8f36dd8843 differ diff --git a/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build_script_build-cf3b7f8f36dd8843.d b/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build_script_build-cf3b7f8f36dd8843.d new file mode 100644 index 000000000..b4035f425 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build_script_build-cf3b7f8f36dd8843.d @@ -0,0 +1,6 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build_script_build-cf3b7f8f36dd8843: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build_helper/mod.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-cf3b7f8f36dd8843/build_script_build-cf3b7f8f36dd8843.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build_helper/mod.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/build_helper/mod.rs: diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build-script-build b/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build-script-build new file mode 100755 index 000000000..f2b9cdd48 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build-script-build differ diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build_script_build-752c9de4f59bfe81 b/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build_script_build-752c9de4f59bfe81 new file mode 100755 index 000000000..f2b9cdd48 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build_script_build-752c9de4f59bfe81 differ diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build_script_build-752c9de4f59bfe81.d b/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build_script_build-752c9de4f59bfe81.d new file mode 100644 index 000000000..2227f6bf2 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build_script_build-752c9de4f59bfe81.d @@ -0,0 +1,6 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build_script_build-752c9de4f59bfe81: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/build.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/build_helper/mod.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-752c9de4f59bfe81/build_script_build-752c9de4f59bfe81.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/build.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/build_helper/mod.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/build.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/build_helper/mod.rs: diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/invoked.timestamp b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs new file mode 100644 index 000000000..8b85d7ae4 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs @@ -0,0 +1,566 @@ +pub const GPG_ERR_SOURCE_UNKNOWN: gpg_err_source_t = 0; +pub const GPG_ERR_SOURCE_GCRYPT: gpg_err_source_t = 1; +pub const GPG_ERR_SOURCE_GPG: gpg_err_source_t = 2; +pub const GPG_ERR_SOURCE_GPGSM: gpg_err_source_t = 3; +pub const GPG_ERR_SOURCE_GPGAGENT: gpg_err_source_t = 4; +pub const GPG_ERR_SOURCE_PINENTRY: gpg_err_source_t = 5; +pub const GPG_ERR_SOURCE_SCD: gpg_err_source_t = 6; +pub const GPG_ERR_SOURCE_GPGME: gpg_err_source_t = 7; +pub const GPG_ERR_SOURCE_KEYBOX: gpg_err_source_t = 8; +pub const GPG_ERR_SOURCE_KSBA: gpg_err_source_t = 9; +pub const GPG_ERR_SOURCE_DIRMNGR: gpg_err_source_t = 10; +pub const GPG_ERR_SOURCE_GSTI: gpg_err_source_t = 11; +pub const GPG_ERR_SOURCE_GPA: gpg_err_source_t = 12; +pub const GPG_ERR_SOURCE_KLEO: gpg_err_source_t = 13; +pub const GPG_ERR_SOURCE_G13: gpg_err_source_t = 14; +pub const GPG_ERR_SOURCE_ASSUAN: gpg_err_source_t = 15; +pub const GPG_ERR_SOURCE_TLS: gpg_err_source_t = 17; +pub const GPG_ERR_SOURCE_ANY: gpg_err_source_t = 31; +pub const GPG_ERR_SOURCE_USER_1: gpg_err_source_t = 32; +pub const GPG_ERR_SOURCE_USER_2: gpg_err_source_t = 33; +pub const GPG_ERR_SOURCE_USER_3: gpg_err_source_t = 34; +pub const GPG_ERR_SOURCE_USER_4: gpg_err_source_t = 35; +pub const GPG_ERR_NO_ERROR: gpg_err_code_t = 0; +pub const GPG_ERR_GENERAL: gpg_err_code_t = 1; +pub const GPG_ERR_UNKNOWN_PACKET: gpg_err_code_t = 2; +pub const GPG_ERR_UNKNOWN_VERSION: gpg_err_code_t = 3; +pub const GPG_ERR_PUBKEY_ALGO: gpg_err_code_t = 4; +pub const GPG_ERR_DIGEST_ALGO: gpg_err_code_t = 5; +pub const GPG_ERR_BAD_PUBKEY: gpg_err_code_t = 6; +pub const GPG_ERR_BAD_SECKEY: gpg_err_code_t = 7; +pub const GPG_ERR_BAD_SIGNATURE: gpg_err_code_t = 8; +pub const GPG_ERR_NO_PUBKEY: gpg_err_code_t = 9; +pub const GPG_ERR_CHECKSUM: gpg_err_code_t = 10; +pub const GPG_ERR_BAD_PASSPHRASE: gpg_err_code_t = 11; +pub const GPG_ERR_CIPHER_ALGO: gpg_err_code_t = 12; +pub const GPG_ERR_KEYRING_OPEN: gpg_err_code_t = 13; +pub const GPG_ERR_INV_PACKET: gpg_err_code_t = 14; +pub const GPG_ERR_INV_ARMOR: gpg_err_code_t = 15; +pub const GPG_ERR_NO_USER_ID: gpg_err_code_t = 16; +pub const GPG_ERR_NO_SECKEY: gpg_err_code_t = 17; +pub const GPG_ERR_WRONG_SECKEY: gpg_err_code_t = 18; +pub const GPG_ERR_BAD_KEY: gpg_err_code_t = 19; +pub const GPG_ERR_COMPR_ALGO: gpg_err_code_t = 20; +pub const GPG_ERR_NO_PRIME: gpg_err_code_t = 21; +pub const GPG_ERR_NO_ENCODING_METHOD: gpg_err_code_t = 22; +pub const GPG_ERR_NO_ENCRYPTION_SCHEME: gpg_err_code_t = 23; +pub const GPG_ERR_NO_SIGNATURE_SCHEME: gpg_err_code_t = 24; +pub const GPG_ERR_INV_ATTR: gpg_err_code_t = 25; +pub const GPG_ERR_NO_VALUE: gpg_err_code_t = 26; +pub const GPG_ERR_NOT_FOUND: gpg_err_code_t = 27; +pub const GPG_ERR_VALUE_NOT_FOUND: gpg_err_code_t = 28; +pub const GPG_ERR_SYNTAX: gpg_err_code_t = 29; +pub const GPG_ERR_BAD_MPI: gpg_err_code_t = 30; +pub const GPG_ERR_INV_PASSPHRASE: gpg_err_code_t = 31; +pub const GPG_ERR_SIG_CLASS: gpg_err_code_t = 32; +pub const GPG_ERR_RESOURCE_LIMIT: gpg_err_code_t = 33; +pub const GPG_ERR_INV_KEYRING: gpg_err_code_t = 34; +pub const GPG_ERR_TRUSTDB: gpg_err_code_t = 35; +pub const GPG_ERR_BAD_CERT: gpg_err_code_t = 36; +pub const GPG_ERR_INV_USER_ID: gpg_err_code_t = 37; +pub const GPG_ERR_UNEXPECTED: gpg_err_code_t = 38; +pub const GPG_ERR_TIME_CONFLICT: gpg_err_code_t = 39; +pub const GPG_ERR_KEYSERVER: gpg_err_code_t = 40; +pub const GPG_ERR_WRONG_PUBKEY_ALGO: gpg_err_code_t = 41; +pub const GPG_ERR_TRIBUTE_TO_D_A: gpg_err_code_t = 42; +pub const GPG_ERR_WEAK_KEY: gpg_err_code_t = 43; +pub const GPG_ERR_INV_KEYLEN: gpg_err_code_t = 44; +pub const GPG_ERR_INV_ARG: gpg_err_code_t = 45; +pub const GPG_ERR_BAD_URI: gpg_err_code_t = 46; +pub const GPG_ERR_INV_URI: gpg_err_code_t = 47; +pub const GPG_ERR_NETWORK: gpg_err_code_t = 48; +pub const GPG_ERR_UNKNOWN_HOST: gpg_err_code_t = 49; +pub const GPG_ERR_SELFTEST_FAILED: gpg_err_code_t = 50; +pub const GPG_ERR_NOT_ENCRYPTED: gpg_err_code_t = 51; +pub const GPG_ERR_NOT_PROCESSED: gpg_err_code_t = 52; +pub const GPG_ERR_UNUSABLE_PUBKEY: gpg_err_code_t = 53; +pub const GPG_ERR_UNUSABLE_SECKEY: gpg_err_code_t = 54; +pub const GPG_ERR_INV_VALUE: gpg_err_code_t = 55; +pub const GPG_ERR_BAD_CERT_CHAIN: gpg_err_code_t = 56; +pub const GPG_ERR_MISSING_CERT: gpg_err_code_t = 57; +pub const GPG_ERR_NO_DATA: gpg_err_code_t = 58; +pub const GPG_ERR_BUG: gpg_err_code_t = 59; +pub const GPG_ERR_NOT_SUPPORTED: gpg_err_code_t = 60; +pub const GPG_ERR_INV_OP: gpg_err_code_t = 61; +pub const GPG_ERR_TIMEOUT: gpg_err_code_t = 62; +pub const GPG_ERR_INTERNAL: gpg_err_code_t = 63; +pub const GPG_ERR_EOF_GCRYPT: gpg_err_code_t = 64; +pub const GPG_ERR_INV_OBJ: gpg_err_code_t = 65; +pub const GPG_ERR_TOO_SHORT: gpg_err_code_t = 66; +pub const GPG_ERR_TOO_LARGE: gpg_err_code_t = 67; +pub const GPG_ERR_NO_OBJ: gpg_err_code_t = 68; +pub const GPG_ERR_NOT_IMPLEMENTED: gpg_err_code_t = 69; +pub const GPG_ERR_CONFLICT: gpg_err_code_t = 70; +pub const GPG_ERR_INV_CIPHER_MODE: gpg_err_code_t = 71; +pub const GPG_ERR_INV_FLAG: gpg_err_code_t = 72; +pub const GPG_ERR_INV_HANDLE: gpg_err_code_t = 73; +pub const GPG_ERR_TRUNCATED: gpg_err_code_t = 74; +pub const GPG_ERR_INCOMPLETE_LINE: gpg_err_code_t = 75; +pub const GPG_ERR_INV_RESPONSE: gpg_err_code_t = 76; +pub const GPG_ERR_NO_AGENT: gpg_err_code_t = 77; +pub const GPG_ERR_AGENT: gpg_err_code_t = 78; +pub const GPG_ERR_INV_DATA: gpg_err_code_t = 79; +pub const GPG_ERR_ASSUAN_SERVER_FAULT: gpg_err_code_t = 80; +pub const GPG_ERR_ASSUAN: gpg_err_code_t = 81; +pub const GPG_ERR_INV_SESSION_KEY: gpg_err_code_t = 82; +pub const GPG_ERR_INV_SEXP: gpg_err_code_t = 83; +pub const GPG_ERR_UNSUPPORTED_ALGORITHM: gpg_err_code_t = 84; +pub const GPG_ERR_NO_PIN_ENTRY: gpg_err_code_t = 85; +pub const GPG_ERR_PIN_ENTRY: gpg_err_code_t = 86; +pub const GPG_ERR_BAD_PIN: gpg_err_code_t = 87; +pub const GPG_ERR_INV_NAME: gpg_err_code_t = 88; +pub const GPG_ERR_BAD_DATA: gpg_err_code_t = 89; +pub const GPG_ERR_INV_PARAMETER: gpg_err_code_t = 90; +pub const GPG_ERR_WRONG_CARD: gpg_err_code_t = 91; +pub const GPG_ERR_NO_DIRMNGR: gpg_err_code_t = 92; +pub const GPG_ERR_DIRMNGR: gpg_err_code_t = 93; +pub const GPG_ERR_CERT_REVOKED: gpg_err_code_t = 94; +pub const GPG_ERR_NO_CRL_KNOWN: gpg_err_code_t = 95; +pub const GPG_ERR_CRL_TOO_OLD: gpg_err_code_t = 96; +pub const GPG_ERR_LINE_TOO_LONG: gpg_err_code_t = 97; +pub const GPG_ERR_NOT_TRUSTED: gpg_err_code_t = 98; +pub const GPG_ERR_CANCELED: gpg_err_code_t = 99; +pub const GPG_ERR_BAD_CA_CERT: gpg_err_code_t = 100; +pub const GPG_ERR_CERT_EXPIRED: gpg_err_code_t = 101; +pub const GPG_ERR_CERT_TOO_YOUNG: gpg_err_code_t = 102; +pub const GPG_ERR_UNSUPPORTED_CERT: gpg_err_code_t = 103; +pub const GPG_ERR_UNKNOWN_SEXP: gpg_err_code_t = 104; +pub const GPG_ERR_UNSUPPORTED_PROTECTION: gpg_err_code_t = 105; +pub const GPG_ERR_CORRUPTED_PROTECTION: gpg_err_code_t = 106; +pub const GPG_ERR_AMBIGUOUS_NAME: gpg_err_code_t = 107; +pub const GPG_ERR_CARD: gpg_err_code_t = 108; +pub const GPG_ERR_CARD_RESET: gpg_err_code_t = 109; +pub const GPG_ERR_CARD_REMOVED: gpg_err_code_t = 110; +pub const GPG_ERR_INV_CARD: gpg_err_code_t = 111; +pub const GPG_ERR_CARD_NOT_PRESENT: gpg_err_code_t = 112; +pub const GPG_ERR_NO_PKCS15_APP: gpg_err_code_t = 113; +pub const GPG_ERR_NOT_CONFIRMED: gpg_err_code_t = 114; +pub const GPG_ERR_CONFIGURATION: gpg_err_code_t = 115; +pub const GPG_ERR_NO_POLICY_MATCH: gpg_err_code_t = 116; +pub const GPG_ERR_INV_INDEX: gpg_err_code_t = 117; +pub const GPG_ERR_INV_ID: gpg_err_code_t = 118; +pub const GPG_ERR_NO_SCDAEMON: gpg_err_code_t = 119; +pub const GPG_ERR_SCDAEMON: gpg_err_code_t = 120; +pub const GPG_ERR_UNSUPPORTED_PROTOCOL: gpg_err_code_t = 121; +pub const GPG_ERR_BAD_PIN_METHOD: gpg_err_code_t = 122; +pub const GPG_ERR_CARD_NOT_INITIALIZED: gpg_err_code_t = 123; +pub const GPG_ERR_UNSUPPORTED_OPERATION: gpg_err_code_t = 124; +pub const GPG_ERR_WRONG_KEY_USAGE: gpg_err_code_t = 125; +pub const GPG_ERR_NOTHING_FOUND: gpg_err_code_t = 126; +pub const GPG_ERR_WRONG_BLOB_TYPE: gpg_err_code_t = 127; +pub const GPG_ERR_MISSING_VALUE: gpg_err_code_t = 128; +pub const GPG_ERR_HARDWARE: gpg_err_code_t = 129; +pub const GPG_ERR_PIN_BLOCKED: gpg_err_code_t = 130; +pub const GPG_ERR_USE_CONDITIONS: gpg_err_code_t = 131; +pub const GPG_ERR_PIN_NOT_SYNCED: gpg_err_code_t = 132; +pub const GPG_ERR_INV_CRL: gpg_err_code_t = 133; +pub const GPG_ERR_BAD_BER: gpg_err_code_t = 134; +pub const GPG_ERR_INV_BER: gpg_err_code_t = 135; +pub const GPG_ERR_ELEMENT_NOT_FOUND: gpg_err_code_t = 136; +pub const GPG_ERR_IDENTIFIER_NOT_FOUND: gpg_err_code_t = 137; +pub const GPG_ERR_INV_TAG: gpg_err_code_t = 138; +pub const GPG_ERR_INV_LENGTH: gpg_err_code_t = 139; +pub const GPG_ERR_INV_KEYINFO: gpg_err_code_t = 140; +pub const GPG_ERR_UNEXPECTED_TAG: gpg_err_code_t = 141; +pub const GPG_ERR_NOT_DER_ENCODED: gpg_err_code_t = 142; +pub const GPG_ERR_NO_CMS_OBJ: gpg_err_code_t = 143; +pub const GPG_ERR_INV_CMS_OBJ: gpg_err_code_t = 144; +pub const GPG_ERR_UNKNOWN_CMS_OBJ: gpg_err_code_t = 145; +pub const GPG_ERR_UNSUPPORTED_CMS_OBJ: gpg_err_code_t = 146; +pub const GPG_ERR_UNSUPPORTED_ENCODING: gpg_err_code_t = 147; +pub const GPG_ERR_UNSUPPORTED_CMS_VERSION: gpg_err_code_t = 148; +pub const GPG_ERR_UNKNOWN_ALGORITHM: gpg_err_code_t = 149; +pub const GPG_ERR_INV_ENGINE: gpg_err_code_t = 150; +pub const GPG_ERR_PUBKEY_NOT_TRUSTED: gpg_err_code_t = 151; +pub const GPG_ERR_DECRYPT_FAILED: gpg_err_code_t = 152; +pub const GPG_ERR_KEY_EXPIRED: gpg_err_code_t = 153; +pub const GPG_ERR_SIG_EXPIRED: gpg_err_code_t = 154; +pub const GPG_ERR_ENCODING_PROBLEM: gpg_err_code_t = 155; +pub const GPG_ERR_INV_STATE: gpg_err_code_t = 156; +pub const GPG_ERR_DUP_VALUE: gpg_err_code_t = 157; +pub const GPG_ERR_MISSING_ACTION: gpg_err_code_t = 158; +pub const GPG_ERR_MODULE_NOT_FOUND: gpg_err_code_t = 159; +pub const GPG_ERR_INV_OID_STRING: gpg_err_code_t = 160; +pub const GPG_ERR_INV_TIME: gpg_err_code_t = 161; +pub const GPG_ERR_INV_CRL_OBJ: gpg_err_code_t = 162; +pub const GPG_ERR_UNSUPPORTED_CRL_VERSION: gpg_err_code_t = 163; +pub const GPG_ERR_INV_CERT_OBJ: gpg_err_code_t = 164; +pub const GPG_ERR_UNKNOWN_NAME: gpg_err_code_t = 165; +pub const GPG_ERR_LOCALE_PROBLEM: gpg_err_code_t = 166; +pub const GPG_ERR_NOT_LOCKED: gpg_err_code_t = 167; +pub const GPG_ERR_PROTOCOL_VIOLATION: gpg_err_code_t = 168; +pub const GPG_ERR_INV_MAC: gpg_err_code_t = 169; +pub const GPG_ERR_INV_REQUEST: gpg_err_code_t = 170; +pub const GPG_ERR_UNKNOWN_EXTN: gpg_err_code_t = 171; +pub const GPG_ERR_UNKNOWN_CRIT_EXTN: gpg_err_code_t = 172; +pub const GPG_ERR_LOCKED: gpg_err_code_t = 173; +pub const GPG_ERR_UNKNOWN_OPTION: gpg_err_code_t = 174; +pub const GPG_ERR_UNKNOWN_COMMAND: gpg_err_code_t = 175; +pub const GPG_ERR_NOT_OPERATIONAL: gpg_err_code_t = 176; +pub const GPG_ERR_NO_PASSPHRASE: gpg_err_code_t = 177; +pub const GPG_ERR_NO_PIN: gpg_err_code_t = 178; +pub const GPG_ERR_NOT_ENABLED: gpg_err_code_t = 179; +pub const GPG_ERR_NO_ENGINE: gpg_err_code_t = 180; +pub const GPG_ERR_MISSING_KEY: gpg_err_code_t = 181; +pub const GPG_ERR_TOO_MANY: gpg_err_code_t = 182; +pub const GPG_ERR_LIMIT_REACHED: gpg_err_code_t = 183; +pub const GPG_ERR_NOT_INITIALIZED: gpg_err_code_t = 184; +pub const GPG_ERR_MISSING_ISSUER_CERT: gpg_err_code_t = 185; +pub const GPG_ERR_NO_KEYSERVER: gpg_err_code_t = 186; +pub const GPG_ERR_INV_CURVE: gpg_err_code_t = 187; +pub const GPG_ERR_UNKNOWN_CURVE: gpg_err_code_t = 188; +pub const GPG_ERR_DUP_KEY: gpg_err_code_t = 189; +pub const GPG_ERR_AMBIGUOUS: gpg_err_code_t = 190; +pub const GPG_ERR_NO_CRYPT_CTX: gpg_err_code_t = 191; +pub const GPG_ERR_WRONG_CRYPT_CTX: gpg_err_code_t = 192; +pub const GPG_ERR_BAD_CRYPT_CTX: gpg_err_code_t = 193; +pub const GPG_ERR_CRYPT_CTX_CONFLICT: gpg_err_code_t = 194; +pub const GPG_ERR_BROKEN_PUBKEY: gpg_err_code_t = 195; +pub const GPG_ERR_BROKEN_SECKEY: gpg_err_code_t = 196; +pub const GPG_ERR_MAC_ALGO: gpg_err_code_t = 197; +pub const GPG_ERR_FULLY_CANCELED: gpg_err_code_t = 198; +pub const GPG_ERR_UNFINISHED: gpg_err_code_t = 199; +pub const GPG_ERR_BUFFER_TOO_SHORT: gpg_err_code_t = 200; +pub const GPG_ERR_SEXP_INV_LEN_SPEC: gpg_err_code_t = 201; +pub const GPG_ERR_SEXP_STRING_TOO_LONG: gpg_err_code_t = 202; +pub const GPG_ERR_SEXP_UNMATCHED_PAREN: gpg_err_code_t = 203; +pub const GPG_ERR_SEXP_NOT_CANONICAL: gpg_err_code_t = 204; +pub const GPG_ERR_SEXP_BAD_CHARACTER: gpg_err_code_t = 205; +pub const GPG_ERR_SEXP_BAD_QUOTATION: gpg_err_code_t = 206; +pub const GPG_ERR_SEXP_ZERO_PREFIX: gpg_err_code_t = 207; +pub const GPG_ERR_SEXP_NESTED_DH: gpg_err_code_t = 208; +pub const GPG_ERR_SEXP_UNMATCHED_DH: gpg_err_code_t = 209; +pub const GPG_ERR_SEXP_UNEXPECTED_PUNC: gpg_err_code_t = 210; +pub const GPG_ERR_SEXP_BAD_HEX_CHAR: gpg_err_code_t = 211; +pub const GPG_ERR_SEXP_ODD_HEX_NUMBERS: gpg_err_code_t = 212; +pub const GPG_ERR_SEXP_BAD_OCT_CHAR: gpg_err_code_t = 213; +pub const GPG_ERR_SUBKEYS_EXP_OR_REV: gpg_err_code_t = 217; +pub const GPG_ERR_DB_CORRUPTED: gpg_err_code_t = 218; +pub const GPG_ERR_SERVER_FAILED: gpg_err_code_t = 219; +pub const GPG_ERR_NO_NAME: gpg_err_code_t = 220; +pub const GPG_ERR_NO_KEY: gpg_err_code_t = 221; +pub const GPG_ERR_LEGACY_KEY: gpg_err_code_t = 222; +pub const GPG_ERR_REQUEST_TOO_SHORT: gpg_err_code_t = 223; +pub const GPG_ERR_REQUEST_TOO_LONG: gpg_err_code_t = 224; +pub const GPG_ERR_OBJ_TERM_STATE: gpg_err_code_t = 225; +pub const GPG_ERR_NO_CERT_CHAIN: gpg_err_code_t = 226; +pub const GPG_ERR_CERT_TOO_LARGE: gpg_err_code_t = 227; +pub const GPG_ERR_INV_RECORD: gpg_err_code_t = 228; +pub const GPG_ERR_BAD_MAC: gpg_err_code_t = 229; +pub const GPG_ERR_UNEXPECTED_MSG: gpg_err_code_t = 230; +pub const GPG_ERR_COMPR_FAILED: gpg_err_code_t = 231; +pub const GPG_ERR_WOULD_WRAP: gpg_err_code_t = 232; +pub const GPG_ERR_FATAL_ALERT: gpg_err_code_t = 233; +pub const GPG_ERR_NO_CIPHER: gpg_err_code_t = 234; +pub const GPG_ERR_MISSING_CLIENT_CERT: gpg_err_code_t = 235; +pub const GPG_ERR_CLOSE_NOTIFY: gpg_err_code_t = 236; +pub const GPG_ERR_TICKET_EXPIRED: gpg_err_code_t = 237; +pub const GPG_ERR_BAD_TICKET: gpg_err_code_t = 238; +pub const GPG_ERR_UNKNOWN_IDENTITY: gpg_err_code_t = 239; +pub const GPG_ERR_BAD_HS_CERT: gpg_err_code_t = 240; +pub const GPG_ERR_BAD_HS_CERT_REQ: gpg_err_code_t = 241; +pub const GPG_ERR_BAD_HS_CERT_VER: gpg_err_code_t = 242; +pub const GPG_ERR_BAD_HS_CHANGE_CIPHER: gpg_err_code_t = 243; +pub const GPG_ERR_BAD_HS_CLIENT_HELLO: gpg_err_code_t = 244; +pub const GPG_ERR_BAD_HS_SERVER_HELLO: gpg_err_code_t = 245; +pub const GPG_ERR_BAD_HS_SERVER_HELLO_DONE: gpg_err_code_t = 246; +pub const GPG_ERR_BAD_HS_FINISHED: gpg_err_code_t = 247; +pub const GPG_ERR_BAD_HS_SERVER_KEX: gpg_err_code_t = 248; +pub const GPG_ERR_BAD_HS_CLIENT_KEX: gpg_err_code_t = 249; +pub const GPG_ERR_BOGUS_STRING: gpg_err_code_t = 250; +pub const GPG_ERR_FORBIDDEN: gpg_err_code_t = 251; +pub const GPG_ERR_KEY_DISABLED: gpg_err_code_t = 252; +pub const GPG_ERR_KEY_ON_CARD: gpg_err_code_t = 253; +pub const GPG_ERR_INV_LOCK_OBJ: gpg_err_code_t = 254; +pub const GPG_ERR_TRUE: gpg_err_code_t = 255; +pub const GPG_ERR_FALSE: gpg_err_code_t = 256; +pub const GPG_ERR_ASS_GENERAL: gpg_err_code_t = 257; +pub const GPG_ERR_ASS_ACCEPT_FAILED: gpg_err_code_t = 258; +pub const GPG_ERR_ASS_CONNECT_FAILED: gpg_err_code_t = 259; +pub const GPG_ERR_ASS_INV_RESPONSE: gpg_err_code_t = 260; +pub const GPG_ERR_ASS_INV_VALUE: gpg_err_code_t = 261; +pub const GPG_ERR_ASS_INCOMPLETE_LINE: gpg_err_code_t = 262; +pub const GPG_ERR_ASS_LINE_TOO_LONG: gpg_err_code_t = 263; +pub const GPG_ERR_ASS_NESTED_COMMANDS: gpg_err_code_t = 264; +pub const GPG_ERR_ASS_NO_DATA_CB: gpg_err_code_t = 265; +pub const GPG_ERR_ASS_NO_INQUIRE_CB: gpg_err_code_t = 266; +pub const GPG_ERR_ASS_NOT_A_SERVER: gpg_err_code_t = 267; +pub const GPG_ERR_ASS_NOT_A_CLIENT: gpg_err_code_t = 268; +pub const GPG_ERR_ASS_SERVER_START: gpg_err_code_t = 269; +pub const GPG_ERR_ASS_READ_ERROR: gpg_err_code_t = 270; +pub const GPG_ERR_ASS_WRITE_ERROR: gpg_err_code_t = 271; +pub const GPG_ERR_ASS_TOO_MUCH_DATA: gpg_err_code_t = 273; +pub const GPG_ERR_ASS_UNEXPECTED_CMD: gpg_err_code_t = 274; +pub const GPG_ERR_ASS_UNKNOWN_CMD: gpg_err_code_t = 275; +pub const GPG_ERR_ASS_SYNTAX: gpg_err_code_t = 276; +pub const GPG_ERR_ASS_CANCELED: gpg_err_code_t = 277; +pub const GPG_ERR_ASS_NO_INPUT: gpg_err_code_t = 278; +pub const GPG_ERR_ASS_NO_OUTPUT: gpg_err_code_t = 279; +pub const GPG_ERR_ASS_PARAMETER: gpg_err_code_t = 280; +pub const GPG_ERR_ASS_UNKNOWN_INQUIRE: gpg_err_code_t = 281; +pub const GPG_ERR_ENGINE_TOO_OLD: gpg_err_code_t = 300; +pub const GPG_ERR_WINDOW_TOO_SMALL: gpg_err_code_t = 301; +pub const GPG_ERR_WINDOW_TOO_LARGE: gpg_err_code_t = 302; +pub const GPG_ERR_MISSING_ENVVAR: gpg_err_code_t = 303; +pub const GPG_ERR_USER_ID_EXISTS: gpg_err_code_t = 304; +pub const GPG_ERR_NAME_EXISTS: gpg_err_code_t = 305; +pub const GPG_ERR_DUP_NAME: gpg_err_code_t = 306; +pub const GPG_ERR_TOO_YOUNG: gpg_err_code_t = 307; +pub const GPG_ERR_TOO_OLD: gpg_err_code_t = 308; +pub const GPG_ERR_UNKNOWN_FLAG: gpg_err_code_t = 309; +pub const GPG_ERR_INV_ORDER: gpg_err_code_t = 310; +pub const GPG_ERR_ALREADY_FETCHED: gpg_err_code_t = 311; +pub const GPG_ERR_TRY_LATER: gpg_err_code_t = 312; +pub const GPG_ERR_WRONG_NAME: gpg_err_code_t = 313; +pub const GPG_ERR_NO_AUTH: gpg_err_code_t = 314; +pub const GPG_ERR_BAD_AUTH: gpg_err_code_t = 315; +pub const GPG_ERR_SYSTEM_BUG: gpg_err_code_t = 666; +pub const GPG_ERR_DNS_UNKNOWN: gpg_err_code_t = 711; +pub const GPG_ERR_DNS_SECTION: gpg_err_code_t = 712; +pub const GPG_ERR_DNS_ADDRESS: gpg_err_code_t = 713; +pub const GPG_ERR_DNS_NO_QUERY: gpg_err_code_t = 714; +pub const GPG_ERR_DNS_NO_ANSWER: gpg_err_code_t = 715; +pub const GPG_ERR_DNS_CLOSED: gpg_err_code_t = 716; +pub const GPG_ERR_DNS_VERIFY: gpg_err_code_t = 717; +pub const GPG_ERR_DNS_TIMEOUT: gpg_err_code_t = 718; +pub const GPG_ERR_LDAP_GENERAL: gpg_err_code_t = 721; +pub const GPG_ERR_LDAP_ATTR_GENERAL: gpg_err_code_t = 722; +pub const GPG_ERR_LDAP_NAME_GENERAL: gpg_err_code_t = 723; +pub const GPG_ERR_LDAP_SECURITY_GENERAL: gpg_err_code_t = 724; +pub const GPG_ERR_LDAP_SERVICE_GENERAL: gpg_err_code_t = 725; +pub const GPG_ERR_LDAP_UPDATE_GENERAL: gpg_err_code_t = 726; +pub const GPG_ERR_LDAP_E_GENERAL: gpg_err_code_t = 727; +pub const GPG_ERR_LDAP_X_GENERAL: gpg_err_code_t = 728; +pub const GPG_ERR_LDAP_OTHER_GENERAL: gpg_err_code_t = 729; +pub const GPG_ERR_LDAP_X_CONNECTING: gpg_err_code_t = 750; +pub const GPG_ERR_LDAP_REFERRAL_LIMIT: gpg_err_code_t = 751; +pub const GPG_ERR_LDAP_CLIENT_LOOP: gpg_err_code_t = 752; +pub const GPG_ERR_LDAP_NO_RESULTS: gpg_err_code_t = 754; +pub const GPG_ERR_LDAP_CONTROL_NOT_FOUND: gpg_err_code_t = 755; +pub const GPG_ERR_LDAP_NOT_SUPPORTED: gpg_err_code_t = 756; +pub const GPG_ERR_LDAP_CONNECT: gpg_err_code_t = 757; +pub const GPG_ERR_LDAP_NO_MEMORY: gpg_err_code_t = 758; +pub const GPG_ERR_LDAP_PARAM: gpg_err_code_t = 759; +pub const GPG_ERR_LDAP_USER_CANCELLED: gpg_err_code_t = 760; +pub const GPG_ERR_LDAP_FILTER: gpg_err_code_t = 761; +pub const GPG_ERR_LDAP_AUTH_UNKNOWN: gpg_err_code_t = 762; +pub const GPG_ERR_LDAP_TIMEOUT: gpg_err_code_t = 763; +pub const GPG_ERR_LDAP_DECODING: gpg_err_code_t = 764; +pub const GPG_ERR_LDAP_ENCODING: gpg_err_code_t = 765; +pub const GPG_ERR_LDAP_LOCAL: gpg_err_code_t = 766; +pub const GPG_ERR_LDAP_SERVER_DOWN: gpg_err_code_t = 767; +pub const GPG_ERR_LDAP_SUCCESS: gpg_err_code_t = 768; +pub const GPG_ERR_LDAP_OPERATIONS: gpg_err_code_t = 769; +pub const GPG_ERR_LDAP_PROTOCOL: gpg_err_code_t = 770; +pub const GPG_ERR_LDAP_TIMELIMIT: gpg_err_code_t = 771; +pub const GPG_ERR_LDAP_SIZELIMIT: gpg_err_code_t = 772; +pub const GPG_ERR_LDAP_COMPARE_FALSE: gpg_err_code_t = 773; +pub const GPG_ERR_LDAP_COMPARE_TRUE: gpg_err_code_t = 774; +pub const GPG_ERR_LDAP_UNSUPPORTED_AUTH: gpg_err_code_t = 775; +pub const GPG_ERR_LDAP_STRONG_AUTH_RQRD: gpg_err_code_t = 776; +pub const GPG_ERR_LDAP_PARTIAL_RESULTS: gpg_err_code_t = 777; +pub const GPG_ERR_LDAP_REFERRAL: gpg_err_code_t = 778; +pub const GPG_ERR_LDAP_ADMINLIMIT: gpg_err_code_t = 779; +pub const GPG_ERR_LDAP_UNAVAIL_CRIT_EXTN: gpg_err_code_t = 780; +pub const GPG_ERR_LDAP_CONFIDENT_RQRD: gpg_err_code_t = 781; +pub const GPG_ERR_LDAP_SASL_BIND_INPROG: gpg_err_code_t = 782; +pub const GPG_ERR_LDAP_NO_SUCH_ATTRIBUTE: gpg_err_code_t = 784; +pub const GPG_ERR_LDAP_UNDEFINED_TYPE: gpg_err_code_t = 785; +pub const GPG_ERR_LDAP_BAD_MATCHING: gpg_err_code_t = 786; +pub const GPG_ERR_LDAP_CONST_VIOLATION: gpg_err_code_t = 787; +pub const GPG_ERR_LDAP_TYPE_VALUE_EXISTS: gpg_err_code_t = 788; +pub const GPG_ERR_LDAP_INV_SYNTAX: gpg_err_code_t = 789; +pub const GPG_ERR_LDAP_NO_SUCH_OBJ: gpg_err_code_t = 800; +pub const GPG_ERR_LDAP_ALIAS_PROBLEM: gpg_err_code_t = 801; +pub const GPG_ERR_LDAP_INV_DN_SYNTAX: gpg_err_code_t = 802; +pub const GPG_ERR_LDAP_IS_LEAF: gpg_err_code_t = 803; +pub const GPG_ERR_LDAP_ALIAS_DEREF: gpg_err_code_t = 804; +pub const GPG_ERR_LDAP_X_PROXY_AUTH_FAIL: gpg_err_code_t = 815; +pub const GPG_ERR_LDAP_BAD_AUTH: gpg_err_code_t = 816; +pub const GPG_ERR_LDAP_INV_CREDENTIALS: gpg_err_code_t = 817; +pub const GPG_ERR_LDAP_INSUFFICIENT_ACC: gpg_err_code_t = 818; +pub const GPG_ERR_LDAP_BUSY: gpg_err_code_t = 819; +pub const GPG_ERR_LDAP_UNAVAILABLE: gpg_err_code_t = 820; +pub const GPG_ERR_LDAP_UNWILL_TO_PERFORM: gpg_err_code_t = 821; +pub const GPG_ERR_LDAP_LOOP_DETECT: gpg_err_code_t = 822; +pub const GPG_ERR_LDAP_NAMING_VIOLATION: gpg_err_code_t = 832; +pub const GPG_ERR_LDAP_OBJ_CLS_VIOLATION: gpg_err_code_t = 833; +pub const GPG_ERR_LDAP_NOT_ALLOW_NONLEAF: gpg_err_code_t = 834; +pub const GPG_ERR_LDAP_NOT_ALLOW_ON_RDN: gpg_err_code_t = 835; +pub const GPG_ERR_LDAP_ALREADY_EXISTS: gpg_err_code_t = 836; +pub const GPG_ERR_LDAP_NO_OBJ_CLASS_MODS: gpg_err_code_t = 837; +pub const GPG_ERR_LDAP_RESULTS_TOO_LARGE: gpg_err_code_t = 838; +pub const GPG_ERR_LDAP_AFFECTS_MULT_DSAS: gpg_err_code_t = 839; +pub const GPG_ERR_LDAP_VLV: gpg_err_code_t = 844; +pub const GPG_ERR_LDAP_OTHER: gpg_err_code_t = 848; +pub const GPG_ERR_LDAP_CUP_RESOURCE_LIMIT: gpg_err_code_t = 881; +pub const GPG_ERR_LDAP_CUP_SEC_VIOLATION: gpg_err_code_t = 882; +pub const GPG_ERR_LDAP_CUP_INV_DATA: gpg_err_code_t = 883; +pub const GPG_ERR_LDAP_CUP_UNSUP_SCHEME: gpg_err_code_t = 884; +pub const GPG_ERR_LDAP_CUP_RELOAD: gpg_err_code_t = 885; +pub const GPG_ERR_LDAP_CANCELLED: gpg_err_code_t = 886; +pub const GPG_ERR_LDAP_NO_SUCH_OPERATION: gpg_err_code_t = 887; +pub const GPG_ERR_LDAP_TOO_LATE: gpg_err_code_t = 888; +pub const GPG_ERR_LDAP_CANNOT_CANCEL: gpg_err_code_t = 889; +pub const GPG_ERR_LDAP_ASSERTION_FAILED: gpg_err_code_t = 890; +pub const GPG_ERR_LDAP_PROX_AUTH_DENIED: gpg_err_code_t = 891; +pub const GPG_ERR_USER_1: gpg_err_code_t = 1024; +pub const GPG_ERR_USER_2: gpg_err_code_t = 1025; +pub const GPG_ERR_USER_3: gpg_err_code_t = 1026; +pub const GPG_ERR_USER_4: gpg_err_code_t = 1027; +pub const GPG_ERR_USER_5: gpg_err_code_t = 1028; +pub const GPG_ERR_USER_6: gpg_err_code_t = 1029; +pub const GPG_ERR_USER_7: gpg_err_code_t = 1030; +pub const GPG_ERR_USER_8: gpg_err_code_t = 1031; +pub const GPG_ERR_USER_9: gpg_err_code_t = 1032; +pub const GPG_ERR_USER_10: gpg_err_code_t = 1033; +pub const GPG_ERR_USER_11: gpg_err_code_t = 1034; +pub const GPG_ERR_USER_12: gpg_err_code_t = 1035; +pub const GPG_ERR_USER_13: gpg_err_code_t = 1036; +pub const GPG_ERR_USER_14: gpg_err_code_t = 1037; +pub const GPG_ERR_USER_15: gpg_err_code_t = 1038; +pub const GPG_ERR_USER_16: gpg_err_code_t = 1039; +pub const GPG_ERR_MISSING_ERRNO: gpg_err_code_t = 16381; +pub const GPG_ERR_UNKNOWN_ERRNO: gpg_err_code_t = 16382; +pub const GPG_ERR_EOF: gpg_err_code_t = 16383; +pub const GPG_ERR_E2BIG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 0; +pub const GPG_ERR_EACCES: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 1; +pub const GPG_ERR_EADDRINUSE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 2; +pub const GPG_ERR_EADDRNOTAVAIL: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 3; +pub const GPG_ERR_EADV: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 4; +pub const GPG_ERR_EAFNOSUPPORT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 5; +pub const GPG_ERR_EAGAIN: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 6; +pub const GPG_ERR_EALREADY: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 7; +pub const GPG_ERR_EAUTH: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 8; +pub const GPG_ERR_EBACKGROUND: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 9; +pub const GPG_ERR_EBADE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 10; +pub const GPG_ERR_EBADF: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 11; +pub const GPG_ERR_EBADFD: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 12; +pub const GPG_ERR_EBADMSG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 13; +pub const GPG_ERR_EBADR: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 14; +pub const GPG_ERR_EBADRPC: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 15; +pub const GPG_ERR_EBADRQC: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 16; +pub const GPG_ERR_EBADSLT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 17; +pub const GPG_ERR_EBFONT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 18; +pub const GPG_ERR_EBUSY: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 19; +pub const GPG_ERR_ECANCELED: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 20; +pub const GPG_ERR_ECHILD: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 21; +pub const GPG_ERR_ECHRNG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 22; +pub const GPG_ERR_ECOMM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 23; +pub const GPG_ERR_ECONNABORTED: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 24; +pub const GPG_ERR_ECONNREFUSED: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 25; +pub const GPG_ERR_ECONNRESET: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 26; +pub const GPG_ERR_ED: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 27; +pub const GPG_ERR_EDEADLK: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 28; +pub const GPG_ERR_EDEADLOCK: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 29; +pub const GPG_ERR_EDESTADDRREQ: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 30; +pub const GPG_ERR_EDIED: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 31; +pub const GPG_ERR_EDOM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 32; +pub const GPG_ERR_EDOTDOT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 33; +pub const GPG_ERR_EDQUOT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 34; +pub const GPG_ERR_EEXIST: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 35; +pub const GPG_ERR_EFAULT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 36; +pub const GPG_ERR_EFBIG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 37; +pub const GPG_ERR_EFTYPE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 38; +pub const GPG_ERR_EGRATUITOUS: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 39; +pub const GPG_ERR_EGREGIOUS: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 40; +pub const GPG_ERR_EHOSTDOWN: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 41; +pub const GPG_ERR_EHOSTUNREACH: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 42; +pub const GPG_ERR_EIDRM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 43; +pub const GPG_ERR_EIEIO: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 44; +pub const GPG_ERR_EILSEQ: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 45; +pub const GPG_ERR_EINPROGRESS: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 46; +pub const GPG_ERR_EINTR: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 47; +pub const GPG_ERR_EINVAL: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 48; +pub const GPG_ERR_EIO: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 49; +pub const GPG_ERR_EISCONN: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 50; +pub const GPG_ERR_EISDIR: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 51; +pub const GPG_ERR_EISNAM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 52; +pub const GPG_ERR_EL2HLT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 53; +pub const GPG_ERR_EL2NSYNC: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 54; +pub const GPG_ERR_EL3HLT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 55; +pub const GPG_ERR_EL3RST: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 56; +pub const GPG_ERR_ELIBACC: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 57; +pub const GPG_ERR_ELIBBAD: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 58; +pub const GPG_ERR_ELIBEXEC: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 59; +pub const GPG_ERR_ELIBMAX: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 60; +pub const GPG_ERR_ELIBSCN: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 61; +pub const GPG_ERR_ELNRNG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 62; +pub const GPG_ERR_ELOOP: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 63; +pub const GPG_ERR_EMEDIUMTYPE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 64; +pub const GPG_ERR_EMFILE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 65; +pub const GPG_ERR_EMLINK: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 66; +pub const GPG_ERR_EMSGSIZE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 67; +pub const GPG_ERR_EMULTIHOP: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 68; +pub const GPG_ERR_ENAMETOOLONG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 69; +pub const GPG_ERR_ENAVAIL: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 70; +pub const GPG_ERR_ENEEDAUTH: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 71; +pub const GPG_ERR_ENETDOWN: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 72; +pub const GPG_ERR_ENETRESET: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 73; +pub const GPG_ERR_ENETUNREACH: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 74; +pub const GPG_ERR_ENFILE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 75; +pub const GPG_ERR_ENOANO: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 76; +pub const GPG_ERR_ENOBUFS: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 77; +pub const GPG_ERR_ENOCSI: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 78; +pub const GPG_ERR_ENODATA: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 79; +pub const GPG_ERR_ENODEV: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 80; +pub const GPG_ERR_ENOENT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 81; +pub const GPG_ERR_ENOEXEC: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 82; +pub const GPG_ERR_ENOLCK: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 83; +pub const GPG_ERR_ENOLINK: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 84; +pub const GPG_ERR_ENOMEDIUM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 85; +pub const GPG_ERR_ENOMEM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 86; +pub const GPG_ERR_ENOMSG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 87; +pub const GPG_ERR_ENONET: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 88; +pub const GPG_ERR_ENOPKG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 89; +pub const GPG_ERR_ENOPROTOOPT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 90; +pub const GPG_ERR_ENOSPC: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 91; +pub const GPG_ERR_ENOSR: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 92; +pub const GPG_ERR_ENOSTR: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 93; +pub const GPG_ERR_ENOSYS: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 94; +pub const GPG_ERR_ENOTBLK: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 95; +pub const GPG_ERR_ENOTCONN: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 96; +pub const GPG_ERR_ENOTDIR: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 97; +pub const GPG_ERR_ENOTEMPTY: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 98; +pub const GPG_ERR_ENOTNAM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 99; +pub const GPG_ERR_ENOTSOCK: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 100; +pub const GPG_ERR_ENOTSUP: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 101; +pub const GPG_ERR_ENOTTY: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 102; +pub const GPG_ERR_ENOTUNIQ: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 103; +pub const GPG_ERR_ENXIO: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 104; +pub const GPG_ERR_EOPNOTSUPP: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 105; +pub const GPG_ERR_EOVERFLOW: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 106; +pub const GPG_ERR_EPERM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 107; +pub const GPG_ERR_EPFNOSUPPORT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 108; +pub const GPG_ERR_EPIPE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 109; +pub const GPG_ERR_EPROCLIM: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 110; +pub const GPG_ERR_EPROCUNAVAIL: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 111; +pub const GPG_ERR_EPROGMISMATCH: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 112; +pub const GPG_ERR_EPROGUNAVAIL: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 113; +pub const GPG_ERR_EPROTO: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 114; +pub const GPG_ERR_EPROTONOSUPPORT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 115; +pub const GPG_ERR_EPROTOTYPE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 116; +pub const GPG_ERR_ERANGE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 117; +pub const GPG_ERR_EREMCHG: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 118; +pub const GPG_ERR_EREMOTE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 119; +pub const GPG_ERR_EREMOTEIO: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 120; +pub const GPG_ERR_ERESTART: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 121; +pub const GPG_ERR_EROFS: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 122; +pub const GPG_ERR_ERPCMISMATCH: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 123; +pub const GPG_ERR_ESHUTDOWN: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 124; +pub const GPG_ERR_ESOCKTNOSUPPORT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 125; +pub const GPG_ERR_ESPIPE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 126; +pub const GPG_ERR_ESRCH: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 127; +pub const GPG_ERR_ESRMNT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 128; +pub const GPG_ERR_ESTALE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 129; +pub const GPG_ERR_ESTRPIPE: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 130; +pub const GPG_ERR_ETIME: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 131; +pub const GPG_ERR_ETIMEDOUT: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 132; +pub const GPG_ERR_ETOOMANYREFS: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 133; +pub const GPG_ERR_ETXTBSY: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 134; +pub const GPG_ERR_EUCLEAN: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 135; +pub const GPG_ERR_EUNATCH: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 136; +pub const GPG_ERR_EUSERS: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 137; +pub const GPG_ERR_EWOULDBLOCK: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 138; +pub const GPG_ERR_EXDEV: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 139; +pub const GPG_ERR_EXFULL: gpg_err_code_t = GPG_ERR_SYSTEM_ERROR | 140; diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/err-codes.h.in b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/err-codes.h.in new file mode 100644 index 000000000..33e79da25 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/err-codes.h.in @@ -0,0 +1,483 @@ +# err-codes.h.in - List of error codes and their description input file. +/* err-codes.h - List of error codes and their description. + Copyright (C) 2003, 2004 g10 Code GmbH + + This file is part of libgpg-error. + + libgpg-error is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + libgpg-error is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with libgpg-error; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +# Everything up to the first line that starts with a number in the +# first column is copied into the output verbatim. Then, empty lines +# are ignored. Other lines must have an error code number, followed +# by one or more characters, followed by the error code symbol, +# followed by one or more characters, followed by the error +# message. Trailing whitespace is removed. The error codes should be +# sorted. The last line should not have a number, but only a , +# followed by a dummy field, followed by a , followed by a +# description for error codes that are not in the list. + +0 GPG_ERR_NO_ERROR Success +1 GPG_ERR_GENERAL General error +2 GPG_ERR_UNKNOWN_PACKET Unknown packet +3 GPG_ERR_UNKNOWN_VERSION Unknown version in packet +4 GPG_ERR_PUBKEY_ALGO Invalid public key algorithm +5 GPG_ERR_DIGEST_ALGO Invalid digest algorithm +6 GPG_ERR_BAD_PUBKEY Bad public key +7 GPG_ERR_BAD_SECKEY Bad secret key +8 GPG_ERR_BAD_SIGNATURE Bad signature +9 GPG_ERR_NO_PUBKEY No public key +10 GPG_ERR_CHECKSUM Checksum error +11 GPG_ERR_BAD_PASSPHRASE Bad passphrase +12 GPG_ERR_CIPHER_ALGO Invalid cipher algorithm +13 GPG_ERR_KEYRING_OPEN Cannot open keyring +14 GPG_ERR_INV_PACKET Invalid packet +15 GPG_ERR_INV_ARMOR Invalid armor +16 GPG_ERR_NO_USER_ID No user ID +17 GPG_ERR_NO_SECKEY No secret key +18 GPG_ERR_WRONG_SECKEY Wrong secret key used +19 GPG_ERR_BAD_KEY Bad session key +20 GPG_ERR_COMPR_ALGO Unknown compression algorithm +21 GPG_ERR_NO_PRIME Number is not prime +22 GPG_ERR_NO_ENCODING_METHOD Invalid encoding method +23 GPG_ERR_NO_ENCRYPTION_SCHEME Invalid encryption scheme +24 GPG_ERR_NO_SIGNATURE_SCHEME Invalid signature scheme +25 GPG_ERR_INV_ATTR Invalid attribute +26 GPG_ERR_NO_VALUE No value +27 GPG_ERR_NOT_FOUND Not found +28 GPG_ERR_VALUE_NOT_FOUND Value not found +29 GPG_ERR_SYNTAX Syntax error +30 GPG_ERR_BAD_MPI Bad MPI value +31 GPG_ERR_INV_PASSPHRASE Invalid passphrase +32 GPG_ERR_SIG_CLASS Invalid signature class +33 GPG_ERR_RESOURCE_LIMIT Resources exhausted +34 GPG_ERR_INV_KEYRING Invalid keyring +35 GPG_ERR_TRUSTDB Trust DB error +36 GPG_ERR_BAD_CERT Bad certificate +37 GPG_ERR_INV_USER_ID Invalid user ID +38 GPG_ERR_UNEXPECTED Unexpected error +39 GPG_ERR_TIME_CONFLICT Time conflict +40 GPG_ERR_KEYSERVER Keyserver error +41 GPG_ERR_WRONG_PUBKEY_ALGO Wrong public key algorithm +42 GPG_ERR_TRIBUTE_TO_D_A Tribute to D. A. +43 GPG_ERR_WEAK_KEY Weak encryption key +44 GPG_ERR_INV_KEYLEN Invalid key length +45 GPG_ERR_INV_ARG Invalid argument +46 GPG_ERR_BAD_URI Syntax error in URI +47 GPG_ERR_INV_URI Invalid URI +48 GPG_ERR_NETWORK Network error +49 GPG_ERR_UNKNOWN_HOST Unknown host +50 GPG_ERR_SELFTEST_FAILED Selftest failed +51 GPG_ERR_NOT_ENCRYPTED Data not encrypted +52 GPG_ERR_NOT_PROCESSED Data not processed +53 GPG_ERR_UNUSABLE_PUBKEY Unusable public key +54 GPG_ERR_UNUSABLE_SECKEY Unusable secret key +55 GPG_ERR_INV_VALUE Invalid value +56 GPG_ERR_BAD_CERT_CHAIN Bad certificate chain +57 GPG_ERR_MISSING_CERT Missing certificate +58 GPG_ERR_NO_DATA No data +59 GPG_ERR_BUG Bug +60 GPG_ERR_NOT_SUPPORTED Not supported +61 GPG_ERR_INV_OP Invalid operation code +62 GPG_ERR_TIMEOUT Timeout +63 GPG_ERR_INTERNAL Internal error +64 GPG_ERR_EOF_GCRYPT EOF (gcrypt) +65 GPG_ERR_INV_OBJ Invalid object +66 GPG_ERR_TOO_SHORT Provided object is too short +67 GPG_ERR_TOO_LARGE Provided object is too large +68 GPG_ERR_NO_OBJ Missing item in object +69 GPG_ERR_NOT_IMPLEMENTED Not implemented +70 GPG_ERR_CONFLICT Conflicting use +71 GPG_ERR_INV_CIPHER_MODE Invalid cipher mode +72 GPG_ERR_INV_FLAG Invalid flag +73 GPG_ERR_INV_HANDLE Invalid handle +74 GPG_ERR_TRUNCATED Result truncated +75 GPG_ERR_INCOMPLETE_LINE Incomplete line +76 GPG_ERR_INV_RESPONSE Invalid response +77 GPG_ERR_NO_AGENT No agent running +78 GPG_ERR_AGENT Agent error +79 GPG_ERR_INV_DATA Invalid data +80 GPG_ERR_ASSUAN_SERVER_FAULT Unspecific Assuan server fault +81 GPG_ERR_ASSUAN General Assuan error +82 GPG_ERR_INV_SESSION_KEY Invalid session key +83 GPG_ERR_INV_SEXP Invalid S-expression +84 GPG_ERR_UNSUPPORTED_ALGORITHM Unsupported algorithm +85 GPG_ERR_NO_PIN_ENTRY No pinentry +86 GPG_ERR_PIN_ENTRY pinentry error +87 GPG_ERR_BAD_PIN Bad PIN +88 GPG_ERR_INV_NAME Invalid name +89 GPG_ERR_BAD_DATA Bad data +90 GPG_ERR_INV_PARAMETER Invalid parameter +91 GPG_ERR_WRONG_CARD Wrong card +92 GPG_ERR_NO_DIRMNGR No dirmngr +93 GPG_ERR_DIRMNGR dirmngr error +94 GPG_ERR_CERT_REVOKED Certificate revoked +95 GPG_ERR_NO_CRL_KNOWN No CRL known +96 GPG_ERR_CRL_TOO_OLD CRL too old +97 GPG_ERR_LINE_TOO_LONG Line too long +98 GPG_ERR_NOT_TRUSTED Not trusted +99 GPG_ERR_CANCELED Operation cancelled +100 GPG_ERR_BAD_CA_CERT Bad CA certificate +101 GPG_ERR_CERT_EXPIRED Certificate expired +102 GPG_ERR_CERT_TOO_YOUNG Certificate too young +103 GPG_ERR_UNSUPPORTED_CERT Unsupported certificate +104 GPG_ERR_UNKNOWN_SEXP Unknown S-expression +105 GPG_ERR_UNSUPPORTED_PROTECTION Unsupported protection +106 GPG_ERR_CORRUPTED_PROTECTION Corrupted protection +107 GPG_ERR_AMBIGUOUS_NAME Ambiguous name +108 GPG_ERR_CARD Card error +109 GPG_ERR_CARD_RESET Card reset required +110 GPG_ERR_CARD_REMOVED Card removed +111 GPG_ERR_INV_CARD Invalid card +112 GPG_ERR_CARD_NOT_PRESENT Card not present +113 GPG_ERR_NO_PKCS15_APP No PKCS15 application +114 GPG_ERR_NOT_CONFIRMED Not confirmed +115 GPG_ERR_CONFIGURATION Configuration error +116 GPG_ERR_NO_POLICY_MATCH No policy match +117 GPG_ERR_INV_INDEX Invalid index +118 GPG_ERR_INV_ID Invalid ID +119 GPG_ERR_NO_SCDAEMON No SmartCard daemon +120 GPG_ERR_SCDAEMON SmartCard daemon error +121 GPG_ERR_UNSUPPORTED_PROTOCOL Unsupported protocol +122 GPG_ERR_BAD_PIN_METHOD Bad PIN method +123 GPG_ERR_CARD_NOT_INITIALIZED Card not initialized +124 GPG_ERR_UNSUPPORTED_OPERATION Unsupported operation +125 GPG_ERR_WRONG_KEY_USAGE Wrong key usage +126 GPG_ERR_NOTHING_FOUND Nothing found +127 GPG_ERR_WRONG_BLOB_TYPE Wrong blob type +128 GPG_ERR_MISSING_VALUE Missing value +129 GPG_ERR_HARDWARE Hardware problem +130 GPG_ERR_PIN_BLOCKED PIN blocked +131 GPG_ERR_USE_CONDITIONS Conditions of use not satisfied +132 GPG_ERR_PIN_NOT_SYNCED PINs are not synced +133 GPG_ERR_INV_CRL Invalid CRL +134 GPG_ERR_BAD_BER BER error +135 GPG_ERR_INV_BER Invalid BER +136 GPG_ERR_ELEMENT_NOT_FOUND Element not found +137 GPG_ERR_IDENTIFIER_NOT_FOUND Identifier not found +138 GPG_ERR_INV_TAG Invalid tag +139 GPG_ERR_INV_LENGTH Invalid length +140 GPG_ERR_INV_KEYINFO Invalid key info +141 GPG_ERR_UNEXPECTED_TAG Unexpected tag +142 GPG_ERR_NOT_DER_ENCODED Not DER encoded +143 GPG_ERR_NO_CMS_OBJ No CMS object +144 GPG_ERR_INV_CMS_OBJ Invalid CMS object +145 GPG_ERR_UNKNOWN_CMS_OBJ Unknown CMS object +146 GPG_ERR_UNSUPPORTED_CMS_OBJ Unsupported CMS object +147 GPG_ERR_UNSUPPORTED_ENCODING Unsupported encoding +148 GPG_ERR_UNSUPPORTED_CMS_VERSION Unsupported CMS version +149 GPG_ERR_UNKNOWN_ALGORITHM Unknown algorithm +150 GPG_ERR_INV_ENGINE Invalid crypto engine +151 GPG_ERR_PUBKEY_NOT_TRUSTED Public key not trusted +152 GPG_ERR_DECRYPT_FAILED Decryption failed +153 GPG_ERR_KEY_EXPIRED Key expired +154 GPG_ERR_SIG_EXPIRED Signature expired +155 GPG_ERR_ENCODING_PROBLEM Encoding problem +156 GPG_ERR_INV_STATE Invalid state +157 GPG_ERR_DUP_VALUE Duplicated value +158 GPG_ERR_MISSING_ACTION Missing action +159 GPG_ERR_MODULE_NOT_FOUND ASN.1 module not found +160 GPG_ERR_INV_OID_STRING Invalid OID string +161 GPG_ERR_INV_TIME Invalid time +162 GPG_ERR_INV_CRL_OBJ Invalid CRL object +163 GPG_ERR_UNSUPPORTED_CRL_VERSION Unsupported CRL version +164 GPG_ERR_INV_CERT_OBJ Invalid certificate object +165 GPG_ERR_UNKNOWN_NAME Unknown name +166 GPG_ERR_LOCALE_PROBLEM A locale function failed +167 GPG_ERR_NOT_LOCKED Not locked +168 GPG_ERR_PROTOCOL_VIOLATION Protocol violation +169 GPG_ERR_INV_MAC Invalid MAC +170 GPG_ERR_INV_REQUEST Invalid request +171 GPG_ERR_UNKNOWN_EXTN Unknown extension +172 GPG_ERR_UNKNOWN_CRIT_EXTN Unknown critical extension +173 GPG_ERR_LOCKED Locked +174 GPG_ERR_UNKNOWN_OPTION Unknown option +175 GPG_ERR_UNKNOWN_COMMAND Unknown command +176 GPG_ERR_NOT_OPERATIONAL Not operational +177 GPG_ERR_NO_PASSPHRASE No passphrase given +178 GPG_ERR_NO_PIN No PIN given +179 GPG_ERR_NOT_ENABLED Not enabled +180 GPG_ERR_NO_ENGINE No crypto engine +181 GPG_ERR_MISSING_KEY Missing key +182 GPG_ERR_TOO_MANY Too many objects +183 GPG_ERR_LIMIT_REACHED Limit reached +184 GPG_ERR_NOT_INITIALIZED Not initialized +185 GPG_ERR_MISSING_ISSUER_CERT Missing issuer certificate +186 GPG_ERR_NO_KEYSERVER No keyserver available +187 GPG_ERR_INV_CURVE Invalid elliptic curve +188 GPG_ERR_UNKNOWN_CURVE Unknown elliptic curve +189 GPG_ERR_DUP_KEY Duplicated key +190 GPG_ERR_AMBIGUOUS Ambiguous result +191 GPG_ERR_NO_CRYPT_CTX No crypto context +192 GPG_ERR_WRONG_CRYPT_CTX Wrong crypto context +193 GPG_ERR_BAD_CRYPT_CTX Bad crypto context +194 GPG_ERR_CRYPT_CTX_CONFLICT Conflict in the crypto context +195 GPG_ERR_BROKEN_PUBKEY Broken public key +196 GPG_ERR_BROKEN_SECKEY Broken secret key +197 GPG_ERR_MAC_ALGO Invalid MAC algorithm +198 GPG_ERR_FULLY_CANCELED Operation fully cancelled +199 GPG_ERR_UNFINISHED Operation not yet finished +200 GPG_ERR_BUFFER_TOO_SHORT Buffer too short + +# Error codes pertaining to S-expressions. + +201 GPG_ERR_SEXP_INV_LEN_SPEC Invalid length specifier in S-expression +202 GPG_ERR_SEXP_STRING_TOO_LONG String too long in S-expression +203 GPG_ERR_SEXP_UNMATCHED_PAREN Unmatched parentheses in S-expression +204 GPG_ERR_SEXP_NOT_CANONICAL S-expression not canonical +205 GPG_ERR_SEXP_BAD_CHARACTER Bad character in S-expression +206 GPG_ERR_SEXP_BAD_QUOTATION Bad quotation in S-expression +207 GPG_ERR_SEXP_ZERO_PREFIX Zero prefix in S-expression +208 GPG_ERR_SEXP_NESTED_DH Nested display hints in S-expression +209 GPG_ERR_SEXP_UNMATCHED_DH Unmatched display hints +210 GPG_ERR_SEXP_UNEXPECTED_PUNC Unexpected reserved punctuation in S-expression +211 GPG_ERR_SEXP_BAD_HEX_CHAR Bad hexadecimal character in S-expression +212 GPG_ERR_SEXP_ODD_HEX_NUMBERS Odd hexadecimal numbers in S-expression +213 GPG_ERR_SEXP_BAD_OCT_CHAR Bad octal character in S-expression + +# 214 to 216 are free to be used. +217 GPG_ERR_SUBKEYS_EXP_OR_REV All subkeys are expired or revoked +218 GPG_ERR_DB_CORRUPTED Database is corrupted +219 GPG_ERR_SERVER_FAILED Server indicated a failure +220 GPG_ERR_NO_NAME No name +221 GPG_ERR_NO_KEY No key +222 GPG_ERR_LEGACY_KEY Legacy key +223 GPG_ERR_REQUEST_TOO_SHORT Request too short +224 GPG_ERR_REQUEST_TOO_LONG Request too long +225 GPG_ERR_OBJ_TERM_STATE Object is in termination state +226 GPG_ERR_NO_CERT_CHAIN No certificate chain +227 GPG_ERR_CERT_TOO_LARGE Certificate is too large +228 GPG_ERR_INV_RECORD Invalid record +229 GPG_ERR_BAD_MAC The MAC does not verify +230 GPG_ERR_UNEXPECTED_MSG Unexpected message +231 GPG_ERR_COMPR_FAILED Compression or decompression failed +232 GPG_ERR_WOULD_WRAP A counter would wrap +233 GPG_ERR_FATAL_ALERT Fatal alert message received +234 GPG_ERR_NO_CIPHER No cipher algorithm +235 GPG_ERR_MISSING_CLIENT_CERT Missing client certificate +236 GPG_ERR_CLOSE_NOTIFY Close notification received +237 GPG_ERR_TICKET_EXPIRED Ticket expired +238 GPG_ERR_BAD_TICKET Bad ticket +239 GPG_ERR_UNKNOWN_IDENTITY Unknown identity +240 GPG_ERR_BAD_HS_CERT Bad certificate message in handshake +241 GPG_ERR_BAD_HS_CERT_REQ Bad certificate request message in handshake +242 GPG_ERR_BAD_HS_CERT_VER Bad certificate verify message in handshake +243 GPG_ERR_BAD_HS_CHANGE_CIPHER Bad change cipher message in handshake +244 GPG_ERR_BAD_HS_CLIENT_HELLO Bad client hello message in handshake +245 GPG_ERR_BAD_HS_SERVER_HELLO Bad server hello message in handshake +246 GPG_ERR_BAD_HS_SERVER_HELLO_DONE Bad server hello done message in handshake +247 GPG_ERR_BAD_HS_FINISHED Bad finished message in handshake +248 GPG_ERR_BAD_HS_SERVER_KEX Bad server key exchange message in handshake +249 GPG_ERR_BAD_HS_CLIENT_KEX Bad client key exchange message in handshake +250 GPG_ERR_BOGUS_STRING Bogus string +251 GPG_ERR_FORBIDDEN Forbidden +252 GPG_ERR_KEY_DISABLED Key disabled +253 GPG_ERR_KEY_ON_CARD Not possible with a card based key +254 GPG_ERR_INV_LOCK_OBJ Invalid lock object + +255 GPG_ERR_TRUE True +256 GPG_ERR_FALSE False + +# Error codes pertaining to the Assuan IPC interface +257 GPG_ERR_ASS_GENERAL General IPC error +258 GPG_ERR_ASS_ACCEPT_FAILED IPC accept call failed +259 GPG_ERR_ASS_CONNECT_FAILED IPC connect call failed +260 GPG_ERR_ASS_INV_RESPONSE Invalid IPC response +261 GPG_ERR_ASS_INV_VALUE Invalid value passed to IPC +262 GPG_ERR_ASS_INCOMPLETE_LINE Incomplete line passed to IPC +263 GPG_ERR_ASS_LINE_TOO_LONG Line passed to IPC too long +264 GPG_ERR_ASS_NESTED_COMMANDS Nested IPC commands +265 GPG_ERR_ASS_NO_DATA_CB No data callback in IPC +266 GPG_ERR_ASS_NO_INQUIRE_CB No inquire callback in IPC +267 GPG_ERR_ASS_NOT_A_SERVER Not an IPC server +268 GPG_ERR_ASS_NOT_A_CLIENT Not an IPC client +269 GPG_ERR_ASS_SERVER_START Problem starting IPC server +270 GPG_ERR_ASS_READ_ERROR IPC read error +271 GPG_ERR_ASS_WRITE_ERROR IPC write error +# reserved +273 GPG_ERR_ASS_TOO_MUCH_DATA Too much data for IPC layer +274 GPG_ERR_ASS_UNEXPECTED_CMD Unexpected IPC command +275 GPG_ERR_ASS_UNKNOWN_CMD Unknown IPC command +276 GPG_ERR_ASS_SYNTAX IPC syntax error +277 GPG_ERR_ASS_CANCELED IPC call has been cancelled +278 GPG_ERR_ASS_NO_INPUT No input source for IPC +279 GPG_ERR_ASS_NO_OUTPUT No output source for IPC +280 GPG_ERR_ASS_PARAMETER IPC parameter error +281 GPG_ERR_ASS_UNKNOWN_INQUIRE Unknown IPC inquire + +# 282 to 299 are reserved for future assuan codes. + +300 GPG_ERR_ENGINE_TOO_OLD Crypto engine too old +301 GPG_ERR_WINDOW_TOO_SMALL Screen or window too small +302 GPG_ERR_WINDOW_TOO_LARGE Screen or window too large +303 GPG_ERR_MISSING_ENVVAR Required environment variable not set +304 GPG_ERR_USER_ID_EXISTS User ID already exists +305 GPG_ERR_NAME_EXISTS Name already exists +306 GPG_ERR_DUP_NAME Duplicated name +307 GPG_ERR_TOO_YOUNG Object is too young +308 GPG_ERR_TOO_OLD Object is too old +309 GPG_ERR_UNKNOWN_FLAG Unknown flag +310 GPG_ERR_INV_ORDER Invalid execution order +311 GPG_ERR_ALREADY_FETCHED Already fetched +312 GPG_ERR_TRY_LATER Try again later +313 GPG_ERR_WRONG_NAME Wrong name +314 GPG_ERR_NO_AUTH Not authenticated +315 GPG_ERR_BAD_AUTH Bad authentication +# This range is free for use. + +666 GPG_ERR_SYSTEM_BUG System bug detected + +# +# Mapping of some error codes from libdns and other DNS specific error codes +# +711 GPG_ERR_DNS_UNKNOWN Unknown DNS error +712 GPG_ERR_DNS_SECTION Invalid DNS section +713 GPG_ERR_DNS_ADDRESS Invalid textual address form +714 GPG_ERR_DNS_NO_QUERY Missing DNS query packet +715 GPG_ERR_DNS_NO_ANSWER Missing DNS answer packet +716 GPG_ERR_DNS_CLOSED Connection closed in DNS +717 GPG_ERR_DNS_VERIFY Verification failed in DNS +718 GPG_ERR_DNS_TIMEOUT DNS Timeout + +# +# Mapping of LDAP error codes +# +# The numbers reflect the OpenLDAP code with an offset of 768. +# Some error names are shortened +# +721 GPG_ERR_LDAP_GENERAL General LDAP error +722 GPG_ERR_LDAP_ATTR_GENERAL General LDAP attribute error +723 GPG_ERR_LDAP_NAME_GENERAL General LDAP name error +724 GPG_ERR_LDAP_SECURITY_GENERAL General LDAP security error +725 GPG_ERR_LDAP_SERVICE_GENERAL General LDAP service error +726 GPG_ERR_LDAP_UPDATE_GENERAL General LDAP update error +727 GPG_ERR_LDAP_E_GENERAL Experimental LDAP error code +728 GPG_ERR_LDAP_X_GENERAL Private LDAP error code +729 GPG_ERR_LDAP_OTHER_GENERAL Other general LDAP error +# 730 to 749 not used +750 GPG_ERR_LDAP_X_CONNECTING LDAP connecting failed (X) +751 GPG_ERR_LDAP_REFERRAL_LIMIT LDAP referral limit exceeded +752 GPG_ERR_LDAP_CLIENT_LOOP LDAP client loop +# 753 is an obsolete error code +754 GPG_ERR_LDAP_NO_RESULTS No LDAP results returned +755 GPG_ERR_LDAP_CONTROL_NOT_FOUND LDAP control not found +756 GPG_ERR_LDAP_NOT_SUPPORTED Not supported by LDAP +757 GPG_ERR_LDAP_CONNECT LDAP connect error +758 GPG_ERR_LDAP_NO_MEMORY Out of memory in LDAP +759 GPG_ERR_LDAP_PARAM Bad parameter to an LDAP routine +760 GPG_ERR_LDAP_USER_CANCELLED User cancelled LDAP operation +761 GPG_ERR_LDAP_FILTER Bad LDAP search filter +762 GPG_ERR_LDAP_AUTH_UNKNOWN Unknown LDAP authentication method +763 GPG_ERR_LDAP_TIMEOUT Timeout in LDAP +764 GPG_ERR_LDAP_DECODING LDAP decoding error +765 GPG_ERR_LDAP_ENCODING LDAP encoding error +766 GPG_ERR_LDAP_LOCAL LDAP local error +767 GPG_ERR_LDAP_SERVER_DOWN Cannot contact LDAP server +768 GPG_ERR_LDAP_SUCCESS LDAP success +769 GPG_ERR_LDAP_OPERATIONS LDAP operations error +770 GPG_ERR_LDAP_PROTOCOL LDAP protocol error +771 GPG_ERR_LDAP_TIMELIMIT Time limit exceeded in LDAP +772 GPG_ERR_LDAP_SIZELIMIT Size limit exceeded in LDAP +773 GPG_ERR_LDAP_COMPARE_FALSE LDAP compare false +774 GPG_ERR_LDAP_COMPARE_TRUE LDAP compare true +775 GPG_ERR_LDAP_UNSUPPORTED_AUTH LDAP authentication method not supported +776 GPG_ERR_LDAP_STRONG_AUTH_RQRD Strong(er) LDAP authentication required +777 GPG_ERR_LDAP_PARTIAL_RESULTS Partial LDAP results+referral received +778 GPG_ERR_LDAP_REFERRAL LDAP referral +779 GPG_ERR_LDAP_ADMINLIMIT Administrative LDAP limit exceeded +780 GPG_ERR_LDAP_UNAVAIL_CRIT_EXTN Critical LDAP extension is unavailable +781 GPG_ERR_LDAP_CONFIDENT_RQRD Confidentiality required by LDAP +782 GPG_ERR_LDAP_SASL_BIND_INPROG LDAP SASL bind in progress +# 783 not used +784 GPG_ERR_LDAP_NO_SUCH_ATTRIBUTE No such LDAP attribute +785 GPG_ERR_LDAP_UNDEFINED_TYPE Undefined LDAP attribute type +786 GPG_ERR_LDAP_BAD_MATCHING Inappropriate matching in LDAP +787 GPG_ERR_LDAP_CONST_VIOLATION Constraint violation in LDAP +788 GPG_ERR_LDAP_TYPE_VALUE_EXISTS LDAP type or value exists +789 GPG_ERR_LDAP_INV_SYNTAX Invalid syntax in LDAP +# 790 to 799 not used +800 GPG_ERR_LDAP_NO_SUCH_OBJ No such LDAP object +801 GPG_ERR_LDAP_ALIAS_PROBLEM LDAP alias problem +802 GPG_ERR_LDAP_INV_DN_SYNTAX Invalid DN syntax in LDAP +803 GPG_ERR_LDAP_IS_LEAF LDAP entry is a leaf +804 GPG_ERR_LDAP_ALIAS_DEREF LDAP alias dereferencing problem +# 805 to 814 not used +815 GPG_ERR_LDAP_X_PROXY_AUTH_FAIL LDAP proxy authorization failure (X) +816 GPG_ERR_LDAP_BAD_AUTH Inappropriate LDAP authentication +817 GPG_ERR_LDAP_INV_CREDENTIALS Invalid LDAP credentials +818 GPG_ERR_LDAP_INSUFFICIENT_ACC Insufficient access for LDAP +819 GPG_ERR_LDAP_BUSY LDAP server is busy +820 GPG_ERR_LDAP_UNAVAILABLE LDAP server is unavailable +821 GPG_ERR_LDAP_UNWILL_TO_PERFORM LDAP server is unwilling to perform +822 GPG_ERR_LDAP_LOOP_DETECT Loop detected by LDAP +# 823 to 831 not used +832 GPG_ERR_LDAP_NAMING_VIOLATION LDAP naming violation +833 GPG_ERR_LDAP_OBJ_CLS_VIOLATION LDAP object class violation +834 GPG_ERR_LDAP_NOT_ALLOW_NONLEAF LDAP operation not allowed on non-leaf +835 GPG_ERR_LDAP_NOT_ALLOW_ON_RDN LDAP operation not allowed on RDN +836 GPG_ERR_LDAP_ALREADY_EXISTS Already exists (LDAP) +837 GPG_ERR_LDAP_NO_OBJ_CLASS_MODS Cannot modify LDAP object class +838 GPG_ERR_LDAP_RESULTS_TOO_LARGE LDAP results too large +839 GPG_ERR_LDAP_AFFECTS_MULT_DSAS LDAP operation affects multiple DSAs +# 840 to 843 not used +844 GPG_ERR_LDAP_VLV Virtual LDAP list view error +# 845 to 847 not used +848 GPG_ERR_LDAP_OTHER Other LDAP error +# 849 to 880 not used +881 GPG_ERR_LDAP_CUP_RESOURCE_LIMIT Resources exhausted in LCUP +882 GPG_ERR_LDAP_CUP_SEC_VIOLATION Security violation in LCUP +883 GPG_ERR_LDAP_CUP_INV_DATA Invalid data in LCUP +884 GPG_ERR_LDAP_CUP_UNSUP_SCHEME Unsupported scheme in LCUP +885 GPG_ERR_LDAP_CUP_RELOAD Reload required in LCUP +886 GPG_ERR_LDAP_CANCELLED LDAP cancelled +887 GPG_ERR_LDAP_NO_SUCH_OPERATION No LDAP operation to cancel +888 GPG_ERR_LDAP_TOO_LATE Too late to cancel LDAP +889 GPG_ERR_LDAP_CANNOT_CANCEL Cannot cancel LDAP +890 GPG_ERR_LDAP_ASSERTION_FAILED LDAP assertion failed +891 GPG_ERR_LDAP_PROX_AUTH_DENIED Proxied authorization denied by LDAP + +# 892 to 950 are reserved for future LDAP codes. + +# 951 to 1023 are free to be used. + +# For free use by non-GnuPG components: +1024 GPG_ERR_USER_1 User defined error code 1 +1025 GPG_ERR_USER_2 User defined error code 2 +1026 GPG_ERR_USER_3 User defined error code 3 +1027 GPG_ERR_USER_4 User defined error code 4 +1028 GPG_ERR_USER_5 User defined error code 5 +1029 GPG_ERR_USER_6 User defined error code 6 +1030 GPG_ERR_USER_7 User defined error code 7 +1031 GPG_ERR_USER_8 User defined error code 8 +1032 GPG_ERR_USER_9 User defined error code 9 +1033 GPG_ERR_USER_10 User defined error code 10 +1034 GPG_ERR_USER_11 User defined error code 11 +1035 GPG_ERR_USER_12 User defined error code 12 +1036 GPG_ERR_USER_13 User defined error code 13 +1037 GPG_ERR_USER_14 User defined error code 14 +1038 GPG_ERR_USER_15 User defined error code 15 +1039 GPG_ERR_USER_16 User defined error code 16 + +# 1040 to 16380 are free to be used. + +16381 GPG_ERR_MISSING_ERRNO System error w/o errno +16382 GPG_ERR_UNKNOWN_ERRNO Unknown system error +16383 GPG_ERR_EOF End of file + +# 16384 - 32767 are reserved for future extensions. + +# GPG_SYSTEM_ERROR | (141 to 32767) are to be used for system errors. + + GPG_ERR_CODE_DIM Unknown error code diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/err-sources.h.in b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/err-sources.h.in new file mode 100644 index 000000000..13ca454a6 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/err-sources.h.in @@ -0,0 +1,61 @@ +# err-sources.h.in - List of error sources and their description input file. +/* err-sources.h - List of error sources and their description. + Copyright (C) 2003, 2004 g10 Code GmbH + + This file is part of libgpg-error. + + libgpg-error is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + libgpg-error is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with libgpg-error; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +# Everything up to the first line that starts with a number in the +# first column is copied into the output verbatim. Then, empty lines +# are ignored. Other lines must have an error source number, followed +# by one or more characters, followed by the error source +# symbol, followed by one or more characters, followed by the +# error source name. Trailing whitespace is removed. The error +# sources should be sorted. The last line should not have a number, +# but only a , followed by a description for error sources that +# are not in the list. + +0 GPG_ERR_SOURCE_UNKNOWN Unspecified source +1 GPG_ERR_SOURCE_GCRYPT gcrypt +2 GPG_ERR_SOURCE_GPG GnuPG +3 GPG_ERR_SOURCE_GPGSM GpgSM +4 GPG_ERR_SOURCE_GPGAGENT GPG Agent +5 GPG_ERR_SOURCE_PINENTRY Pinentry +6 GPG_ERR_SOURCE_SCD SCD +7 GPG_ERR_SOURCE_GPGME GPGME +8 GPG_ERR_SOURCE_KEYBOX Keybox +9 GPG_ERR_SOURCE_KSBA KSBA +10 GPG_ERR_SOURCE_DIRMNGR Dirmngr +11 GPG_ERR_SOURCE_GSTI GSTI +12 GPG_ERR_SOURCE_GPA GPA +13 GPG_ERR_SOURCE_KLEO Kleopatra +14 GPG_ERR_SOURCE_G13 G13 +15 GPG_ERR_SOURCE_ASSUAN Assuan + +17 GPG_ERR_SOURCE_TLS TLS + +# 15 to 30 are free to be used. + +31 GPG_ERR_SOURCE_ANY Any source +32 GPG_ERR_SOURCE_USER_1 User defined source 1 +33 GPG_ERR_SOURCE_USER_2 User defined source 2 +34 GPG_ERR_SOURCE_USER_3 User defined source 3 +35 GPG_ERR_SOURCE_USER_4 User defined source 4 + +# 36 to 255 are free to be used. + + GPG_ERR_SOURCE_DIM Unknown source diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/errnos.in b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/errnos.in new file mode 100644 index 000000000..018fb9ad5 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/errnos.in @@ -0,0 +1,172 @@ +# errnos.in - List of system error values input file. +/* errnos.in - List of system error values. + Copyright (C) 2003, 2004 g10 Code GmbH + + This file is part of libgpg-error. + + libgpg-error is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + libgpg-error is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with libgpg-error; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +# Everything up to the first line that starts with a number in the +# first column is copied into the output verbatim. Then, empty lines +# are ignored. Other lines must have an error code number, followed +# by one or more characters, followed by the error name. +# +# IMPORTANT: For now, the numbering must be consecutive. Some of the +# scripts (notably mkerrnos.h) do not deal correctly with a numbering +# that is out of order or has gaps. + + +0 E2BIG +1 EACCES +2 EADDRINUSE +3 EADDRNOTAVAIL +4 EADV +5 EAFNOSUPPORT +6 EAGAIN +7 EALREADY +8 EAUTH +9 EBACKGROUND +10 EBADE +11 EBADF +12 EBADFD +13 EBADMSG +14 EBADR +15 EBADRPC +16 EBADRQC +17 EBADSLT +18 EBFONT +19 EBUSY +20 ECANCELED +21 ECHILD +22 ECHRNG +23 ECOMM +24 ECONNABORTED +25 ECONNREFUSED +26 ECONNRESET +27 ED +28 EDEADLK +29 EDEADLOCK +30 EDESTADDRREQ +31 EDIED +32 EDOM +33 EDOTDOT +34 EDQUOT +35 EEXIST +36 EFAULT +37 EFBIG +38 EFTYPE +39 EGRATUITOUS +40 EGREGIOUS +41 EHOSTDOWN +42 EHOSTUNREACH +43 EIDRM +44 EIEIO +45 EILSEQ +46 EINPROGRESS +47 EINTR +48 EINVAL +49 EIO +50 EISCONN +51 EISDIR +52 EISNAM +53 EL2HLT +54 EL2NSYNC +55 EL3HLT +56 EL3RST +57 ELIBACC +58 ELIBBAD +59 ELIBEXEC +60 ELIBMAX +61 ELIBSCN +62 ELNRNG +63 ELOOP +64 EMEDIUMTYPE +65 EMFILE +66 EMLINK +67 EMSGSIZE +68 EMULTIHOP +69 ENAMETOOLONG +70 ENAVAIL +71 ENEEDAUTH +72 ENETDOWN +73 ENETRESET +74 ENETUNREACH +75 ENFILE +76 ENOANO +77 ENOBUFS +78 ENOCSI +79 ENODATA +80 ENODEV +81 ENOENT +82 ENOEXEC +83 ENOLCK +84 ENOLINK +85 ENOMEDIUM +86 ENOMEM +87 ENOMSG +88 ENONET +89 ENOPKG +90 ENOPROTOOPT +91 ENOSPC +92 ENOSR +93 ENOSTR +94 ENOSYS +95 ENOTBLK +96 ENOTCONN +97 ENOTDIR +98 ENOTEMPTY +99 ENOTNAM +100 ENOTSOCK +101 ENOTSUP +102 ENOTTY +103 ENOTUNIQ +104 ENXIO +105 EOPNOTSUPP +106 EOVERFLOW +107 EPERM +108 EPFNOSUPPORT +109 EPIPE +110 EPROCLIM +111 EPROCUNAVAIL +112 EPROGMISMATCH +113 EPROGUNAVAIL +114 EPROTO +115 EPROTONOSUPPORT +116 EPROTOTYPE +117 ERANGE +118 EREMCHG +119 EREMOTE +120 EREMOTEIO +121 ERESTART +122 EROFS +123 ERPCMISMATCH +124 ESHUTDOWN +125 ESOCKTNOSUPPORT +126 ESPIPE +127 ESRCH +128 ESRMNT +129 ESTALE +130 ESTRPIPE +131 ETIME +132 ETIMEDOUT +133 ETOOMANYREFS +134 ETXTBSY +135 EUCLEAN +136 EUNATCH +137 EUSERS +138 EWOULDBLOCK +139 EXDEV +140 EXFULL diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs new file mode 100644 index 000000000..2e64d100b --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs @@ -0,0 +1,50 @@ +pub const MIN_GPG_ERR_VERSION: &str = "1.42.0\0"; +#[macro_export] +macro_rules! require_gpg_err_ver { +($ver:tt => { $($t:tt)* }) => (require_gpg_err_ver! { $ver => { $($t)* } else {} }); +((1,0) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,1) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,2) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,3) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,4) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,5) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,6) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,7) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,8) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,9) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,10) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,11) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,12) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,13) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,14) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,15) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,16) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,17) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,18) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,19) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,20) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,21) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,22) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,23) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,24) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,25) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,26) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,27) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,28) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,29) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,30) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,31) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,32) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,33) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,34) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,35) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,36) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,37) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,38) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,39) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,40) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,41) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((1,42) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +((0,$ver:tt) => { $($t:tt)* } else { $($u:tt)* }) => ($($t)*); +($ver:tt => { $($t:tt)* } else { $($u:tt)* }) => ($($u)*); +} diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/output b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/output new file mode 100644 index 000000000..eca9de3e0 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/output @@ -0,0 +1,16 @@ +scanning file: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/err-sources.h.in +scanning file: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/err-codes.h.in +scanning file: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/errnos.in +cargo:generated=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out +cargo:rerun-if-env-changed=LIBGPG_ERROR_PREFIX +cargo:rerun-if-env-changed=LIBGPG_ERROR_INCLUDE +cargo:rerun-if-env-changed=LIBGPG_ERROR_LIB_DIR +cargo:rerun-if-env-changed=LIBGPG_ERROR_LIBS +cargo:rerun-if-env-changed=LIBGPG_ERROR_CONFIG +cargo:version=1.42 +cargo:include=/opt/homebrew/opt/libgpg-error/include +cargo:lib_dir=/opt/homebrew/opt/libgpg-error/lib +cargo:rustc-link-search=native=/opt/homebrew/opt/libgpg-error/lib +cargo:libs=gpg-error:pthread +cargo:rustc-link-lib=gpg-error +cargo:rustc-link-lib=pthread diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/root-output b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/root-output new file mode 100644 index 000000000..f5ca34f58 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/root-output @@ -0,0 +1 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/stderr b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/stderr new file mode 100644 index 000000000..aa649f0e7 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/stderr @@ -0,0 +1,2 @@ +running: "sh" "-c" "gpg-error-config --version" +running: "sh" "-c" "gpg-error-config --cflags --mt --libs" diff --git a/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/invoked.timestamp b/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/invoked.timestamp new file mode 100644 index 000000000..e00328da5 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/output b/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/output new file mode 100644 index 000000000..e69de29bb diff --git a/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/root-output b/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/root-output new file mode 100644 index 000000000..7455a67f9 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/root-output @@ -0,0 +1 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/out \ No newline at end of file diff --git a/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/stderr b/aes-gmac-siv/target/debug/build/memchr-06fbab55fcd00195/stderr new file mode 100644 index 000000000..e69de29bb diff --git a/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build-script-build b/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build-script-build new file mode 100755 index 000000000..17179d855 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build-script-build differ diff --git a/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build_script_build-2f8e2a2693131de8 b/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build_script_build-2f8e2a2693131de8 new file mode 100755 index 000000000..17179d855 Binary files /dev/null and b/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build_script_build-2f8e2a2693131de8 differ diff --git a/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build_script_build-2f8e2a2693131de8.d b/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build_script_build-2f8e2a2693131de8.d new file mode 100644 index 000000000..15044b7d9 --- /dev/null +++ b/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build_script_build-2f8e2a2693131de8.d @@ -0,0 +1,5 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build_script_build-2f8e2a2693131de8: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/build.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/memchr-2f8e2a2693131de8/build_script_build-2f8e2a2693131de8.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/build.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/build.rs: diff --git a/aes-gmac-siv/target/debug/deps/aes_gmac_siv-5b1abd81e5ce9de6 b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-5b1abd81e5ce9de6 new file mode 100755 index 000000000..f2eb80a93 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-5b1abd81e5ce9de6 differ diff --git a/aes-gmac-siv/target/debug/deps/aes_gmac_siv-5b1abd81e5ce9de6.d b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-5b1abd81e5ce9de6.d new file mode 100644 index 000000000..bb73ca0b3 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-5b1abd81e5ce9de6.d @@ -0,0 +1,6 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/aes_gmac_siv-5b1abd81e5ce9de6: src/lib.rs src/impl_macos.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/aes_gmac_siv-5b1abd81e5ce9de6.d: src/lib.rs src/impl_macos.rs + +src/lib.rs: +src/impl_macos.rs: diff --git a/aes-gmac-siv/target/debug/deps/aes_gmac_siv-875e596b10f5485e.d b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-875e596b10f5485e.d new file mode 100644 index 000000000..94cd9d3ec --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-875e596b10f5485e.d @@ -0,0 +1,8 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/aes_gmac_siv-875e596b10f5485e.rmeta: src/lib.rs src/impl_macos.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-875e596b10f5485e.rlib: src/lib.rs src/impl_macos.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/aes_gmac_siv-875e596b10f5485e.d: src/lib.rs src/impl_macos.rs + +src/lib.rs: +src/impl_macos.rs: diff --git a/aes-gmac-siv/target/debug/deps/aes_gmac_siv-b13b4d3e539005c7.d b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-b13b4d3e539005c7.d new file mode 100644 index 000000000..4a096514b --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-b13b4d3e539005c7.d @@ -0,0 +1,7 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/aes_gmac_siv-b13b4d3e539005c7.rmeta: src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-b13b4d3e539005c7.rlib: src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/aes_gmac_siv-b13b4d3e539005c7.d: src/lib.rs + +src/lib.rs: diff --git a/aes-gmac-siv/target/debug/deps/aes_gmac_siv-bc95c1caa14365d2 b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-bc95c1caa14365d2 new file mode 100755 index 000000000..b6d8a9009 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-bc95c1caa14365d2 differ diff --git a/aes-gmac-siv/target/debug/deps/aes_gmac_siv-bc95c1caa14365d2.d b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-bc95c1caa14365d2.d new file mode 100644 index 000000000..7913ded1f --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/aes_gmac_siv-bc95c1caa14365d2.d @@ -0,0 +1,5 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/aes_gmac_siv-bc95c1caa14365d2: src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/aes_gmac_siv-bc95c1caa14365d2.d: src/lib.rs + +src/lib.rs: diff --git a/aes-gmac-siv/target/debug/deps/bitflags-7e8c35729097e448.d b/aes-gmac-siv/target/debug/deps/bitflags-7e8c35729097e448.d new file mode 100644 index 000000000..0d9701490 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/bitflags-7e8c35729097e448.d @@ -0,0 +1,7 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/bitflags-7e8c35729097e448.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libbitflags-7e8c35729097e448.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/bitflags-7e8c35729097e448.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs: diff --git a/aes-gmac-siv/target/debug/deps/bitflags-ce7067cc35224a19.d b/aes-gmac-siv/target/debug/deps/bitflags-ce7067cc35224a19.d new file mode 100644 index 000000000..d3b9bc139 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/bitflags-ce7067cc35224a19.d @@ -0,0 +1,7 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/bitflags-ce7067cc35224a19.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libbitflags-ce7067cc35224a19.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/bitflags-ce7067cc35224a19.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs: diff --git a/aes-gmac-siv/target/debug/deps/cc-6b5aa7e0383028dc.d b/aes-gmac-siv/target/debug/deps/cc-6b5aa7e0383028dc.d new file mode 100644 index 000000000..6c9e397ed --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/cc-6b5aa7e0383028dc.d @@ -0,0 +1,8 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cc-6b5aa7e0383028dc.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.69/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.69/src/windows_registry.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libcc-6b5aa7e0383028dc.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.69/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.69/src/windows_registry.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cc-6b5aa7e0383028dc.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.69/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.69/src/windows_registry.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.69/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.69/src/windows_registry.rs: diff --git a/aes-gmac-siv/target/debug/deps/cfg_if-be66a79b7ab460da.d b/aes-gmac-siv/target/debug/deps/cfg_if-be66a79b7ab460da.d new file mode 100644 index 000000000..24c355616 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/cfg_if-be66a79b7ab460da.d @@ -0,0 +1,7 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cfg_if-be66a79b7ab460da.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libcfg_if-be66a79b7ab460da.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cfg_if-be66a79b7ab460da.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs: diff --git a/aes-gmac-siv/target/debug/deps/cfg_if-e801ab34c04da5fd.d b/aes-gmac-siv/target/debug/deps/cfg_if-e801ab34c04da5fd.d new file mode 100644 index 000000000..8f918aa8f --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/cfg_if-e801ab34c04da5fd.d @@ -0,0 +1,7 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cfg_if-e801ab34c04da5fd.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libcfg_if-e801ab34c04da5fd.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cfg_if-e801ab34c04da5fd.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs: diff --git a/aes-gmac-siv/target/debug/deps/cstr_argument-b3206ac6d2945a18.d b/aes-gmac-siv/target/debug/deps/cstr_argument-b3206ac6d2945a18.d new file mode 100644 index 000000000..9ac150542 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/cstr_argument-b3206ac6d2945a18.d @@ -0,0 +1,7 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cstr_argument-b3206ac6d2945a18.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cstr-argument-0.1.1/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libcstr_argument-b3206ac6d2945a18.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cstr-argument-0.1.1/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cstr_argument-b3206ac6d2945a18.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cstr-argument-0.1.1/src/lib.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cstr-argument-0.1.1/src/lib.rs: diff --git a/aes-gmac-siv/target/debug/deps/cstr_argument-e83a3bce6491455b.d b/aes-gmac-siv/target/debug/deps/cstr_argument-e83a3bce6491455b.d new file mode 100644 index 000000000..1557ebec4 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/cstr_argument-e83a3bce6491455b.d @@ -0,0 +1,7 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cstr_argument-e83a3bce6491455b.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cstr-argument-0.1.1/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libcstr_argument-e83a3bce6491455b.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cstr-argument-0.1.1/src/lib.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/cstr_argument-e83a3bce6491455b.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cstr-argument-0.1.1/src/lib.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/cstr-argument-0.1.1/src/lib.rs: diff --git a/aes-gmac-siv/target/debug/deps/gcrypt-205a0cd896b30512.d b/aes-gmac-siv/target/debug/deps/gcrypt-205a0cd896b30512.d new file mode 100644 index 000000000..3a705c245 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/gcrypt-205a0cd896b30512.d @@ -0,0 +1,20 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/gcrypt-205a0cd896b30512.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/utils.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/buffer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/cipher.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/digest.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/kdf.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mac.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/ec.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/integer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/point.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/pkey.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/rand.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/sexp.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgcrypt-205a0cd896b30512.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/utils.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/buffer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/cipher.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/digest.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/kdf.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mac.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/ec.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/integer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/point.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/pkey.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/rand.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/sexp.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/gcrypt-205a0cd896b30512.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/utils.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/buffer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/cipher.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/digest.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/kdf.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mac.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/ec.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/integer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/point.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/pkey.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/rand.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/sexp.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/utils.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/buffer.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/cipher.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/digest.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/kdf.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mac.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/ec.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/integer.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/point.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/pkey.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/rand.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/sexp.rs: diff --git a/aes-gmac-siv/target/debug/deps/gcrypt-ce56f0cd2515e604.d b/aes-gmac-siv/target/debug/deps/gcrypt-ce56f0cd2515e604.d new file mode 100644 index 000000000..e7ecb6912 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/gcrypt-ce56f0cd2515e604.d @@ -0,0 +1,20 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/gcrypt-ce56f0cd2515e604.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/utils.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/buffer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/cipher.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/digest.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/kdf.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mac.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/ec.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/integer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/point.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/pkey.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/rand.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/sexp.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgcrypt-ce56f0cd2515e604.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/utils.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/buffer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/cipher.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/digest.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/kdf.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mac.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/ec.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/integer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/point.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/pkey.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/rand.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/sexp.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/gcrypt-ce56f0cd2515e604.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/utils.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/buffer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/cipher.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/digest.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/kdf.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mac.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/ec.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/integer.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/point.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/pkey.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/rand.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/sexp.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/utils.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/buffer.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/cipher.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/digest.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/kdf.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mac.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/ec.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/integer.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/mpi/point.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/pkey.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/rand.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gcrypt-0.7.0/src/sexp.rs: diff --git a/aes-gmac-siv/target/debug/deps/gpg_error-e5dd51e9febc3058.d b/aes-gmac-siv/target/debug/deps/gpg_error-e5dd51e9febc3058.d new file mode 100644 index 000000000..4261f5e8b --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/gpg_error-e5dd51e9febc3058.d @@ -0,0 +1,10 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/gpg_error-e5dd51e9febc3058.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/src/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgpg_error-e5dd51e9febc3058.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/src/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/gpg_error-e5dd51e9febc3058.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/src/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/src/lib.rs: +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs: + +# env-dep:OUT_DIR=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out diff --git a/aes-gmac-siv/target/debug/deps/gpg_error-ed944ce3b7c456d9.d b/aes-gmac-siv/target/debug/deps/gpg_error-ed944ce3b7c456d9.d new file mode 100644 index 000000000..3efff14d0 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/gpg_error-ed944ce3b7c456d9.d @@ -0,0 +1,10 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/gpg_error-ed944ce3b7c456d9.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/src/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgpg_error-ed944ce3b7c456d9.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/src/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/gpg_error-ed944ce3b7c456d9.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/src/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/gpg-error-0.5.2/src/lib.rs: +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out/constants.rs: + +# env-dep:OUT_DIR=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/gpg-error-3f352f167bd685b9/out diff --git a/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-875e596b10f5485e.rlib b/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-875e596b10f5485e.rlib new file mode 100644 index 000000000..5f7347a76 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-875e596b10f5485e.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-875e596b10f5485e.rmeta b/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-875e596b10f5485e.rmeta new file mode 100644 index 000000000..245c159cd Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-875e596b10f5485e.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-b13b4d3e539005c7.rlib b/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-b13b4d3e539005c7.rlib new file mode 100644 index 000000000..1697c82b4 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-b13b4d3e539005c7.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-b13b4d3e539005c7.rmeta b/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-b13b4d3e539005c7.rmeta new file mode 100644 index 000000000..910f5df8a Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libaes_gmac_siv-b13b4d3e539005c7.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libbitflags-7e8c35729097e448.rlib b/aes-gmac-siv/target/debug/deps/libbitflags-7e8c35729097e448.rlib new file mode 100644 index 000000000..9c6ea4b4d Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libbitflags-7e8c35729097e448.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libbitflags-7e8c35729097e448.rmeta b/aes-gmac-siv/target/debug/deps/libbitflags-7e8c35729097e448.rmeta new file mode 100644 index 000000000..0d7d57f5f Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libbitflags-7e8c35729097e448.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libbitflags-ce7067cc35224a19.rlib b/aes-gmac-siv/target/debug/deps/libbitflags-ce7067cc35224a19.rlib new file mode 100644 index 000000000..1cc8d9018 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libbitflags-ce7067cc35224a19.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libbitflags-ce7067cc35224a19.rmeta b/aes-gmac-siv/target/debug/deps/libbitflags-ce7067cc35224a19.rmeta new file mode 100644 index 000000000..a1be2ad43 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libbitflags-ce7067cc35224a19.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libc-17b8aad1382124a9.d b/aes-gmac-siv/target/debug/deps/libc-17b8aad1382124a9.d new file mode 100644 index 000000000..cc239215f --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/libc-17b8aad1382124a9.d @@ -0,0 +1,16 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libc-17b8aad1382124a9.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/macros.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/fixed_width_ints.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/align.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/align.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/liblibc-17b8aad1382124a9.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/macros.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/fixed_width_ints.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/align.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/align.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libc-17b8aad1382124a9.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/macros.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/fixed_width_ints.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/align.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/align.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/macros.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/fixed_width_ints.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/align.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/align.rs: diff --git a/aes-gmac-siv/target/debug/deps/libc-53f181f7c0156696.d b/aes-gmac-siv/target/debug/deps/libc-53f181f7c0156696.d new file mode 100644 index 000000000..948444b79 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/libc-53f181f7c0156696.d @@ -0,0 +1,16 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libc-53f181f7c0156696.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/macros.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/fixed_width_ints.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/align.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/align.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/liblibc-53f181f7c0156696.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/macros.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/fixed_width_ints.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/align.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/align.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libc-53f181f7c0156696.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/macros.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/fixed_width_ints.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/align.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/align.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/macros.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/fixed_width_ints.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/bsd/apple/b64/aarch64/align.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98/src/unix/align.rs: diff --git a/aes-gmac-siv/target/debug/deps/libcc-6b5aa7e0383028dc.rlib b/aes-gmac-siv/target/debug/deps/libcc-6b5aa7e0383028dc.rlib new file mode 100644 index 000000000..43f4f98d0 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcc-6b5aa7e0383028dc.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libcc-6b5aa7e0383028dc.rmeta b/aes-gmac-siv/target/debug/deps/libcc-6b5aa7e0383028dc.rmeta new file mode 100644 index 000000000..049bfc6d4 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcc-6b5aa7e0383028dc.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libcfg_if-be66a79b7ab460da.rlib b/aes-gmac-siv/target/debug/deps/libcfg_if-be66a79b7ab460da.rlib new file mode 100644 index 000000000..17bdbc244 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcfg_if-be66a79b7ab460da.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libcfg_if-be66a79b7ab460da.rmeta b/aes-gmac-siv/target/debug/deps/libcfg_if-be66a79b7ab460da.rmeta new file mode 100644 index 000000000..9355d4321 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcfg_if-be66a79b7ab460da.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libcfg_if-e801ab34c04da5fd.rlib b/aes-gmac-siv/target/debug/deps/libcfg_if-e801ab34c04da5fd.rlib new file mode 100644 index 000000000..d679938b7 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcfg_if-e801ab34c04da5fd.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libcfg_if-e801ab34c04da5fd.rmeta b/aes-gmac-siv/target/debug/deps/libcfg_if-e801ab34c04da5fd.rmeta new file mode 100644 index 000000000..65d032018 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcfg_if-e801ab34c04da5fd.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libcstr_argument-b3206ac6d2945a18.rlib b/aes-gmac-siv/target/debug/deps/libcstr_argument-b3206ac6d2945a18.rlib new file mode 100644 index 000000000..293b21622 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcstr_argument-b3206ac6d2945a18.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libcstr_argument-b3206ac6d2945a18.rmeta b/aes-gmac-siv/target/debug/deps/libcstr_argument-b3206ac6d2945a18.rmeta new file mode 100644 index 000000000..efe9f4036 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcstr_argument-b3206ac6d2945a18.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libcstr_argument-e83a3bce6491455b.rlib b/aes-gmac-siv/target/debug/deps/libcstr_argument-e83a3bce6491455b.rlib new file mode 100644 index 000000000..d01e65af2 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcstr_argument-e83a3bce6491455b.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libcstr_argument-e83a3bce6491455b.rmeta b/aes-gmac-siv/target/debug/deps/libcstr_argument-e83a3bce6491455b.rmeta new file mode 100644 index 000000000..90c3f88b5 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libcstr_argument-e83a3bce6491455b.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libgcrypt-205a0cd896b30512.rlib b/aes-gmac-siv/target/debug/deps/libgcrypt-205a0cd896b30512.rlib new file mode 100644 index 000000000..74e19f5f3 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libgcrypt-205a0cd896b30512.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libgcrypt-205a0cd896b30512.rmeta b/aes-gmac-siv/target/debug/deps/libgcrypt-205a0cd896b30512.rmeta new file mode 100644 index 000000000..6886d804a Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libgcrypt-205a0cd896b30512.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libgcrypt-ce56f0cd2515e604.rlib b/aes-gmac-siv/target/debug/deps/libgcrypt-ce56f0cd2515e604.rlib new file mode 100644 index 000000000..f40faded9 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libgcrypt-ce56f0cd2515e604.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libgcrypt-ce56f0cd2515e604.rmeta b/aes-gmac-siv/target/debug/deps/libgcrypt-ce56f0cd2515e604.rmeta new file mode 100644 index 000000000..ec6995de4 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libgcrypt-ce56f0cd2515e604.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libgcrypt_sys-38778a1366bad380.d b/aes-gmac-siv/target/debug/deps/libgcrypt_sys-38778a1366bad380.d new file mode 100644 index 000000000..195a9bcc9 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/libgcrypt_sys-38778a1366bad380.d @@ -0,0 +1,13 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgcrypt_sys-38778a1366bad380.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/consts.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/funcs.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/types.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/version.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-38778a1366bad380.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/consts.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/funcs.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/types.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/version.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgcrypt_sys-38778a1366bad380.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/consts.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/funcs.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/types.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/version.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/consts.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/funcs.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/types.rs: +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out/version.rs: + +# env-dep:OUT_DIR=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-5398eb00e9874fd8/out diff --git a/aes-gmac-siv/target/debug/deps/libgcrypt_sys-6e4e61e81f82addb.d b/aes-gmac-siv/target/debug/deps/libgcrypt_sys-6e4e61e81f82addb.d new file mode 100644 index 000000000..83a3f5fdc --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/libgcrypt_sys-6e4e61e81f82addb.d @@ -0,0 +1,13 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgcrypt_sys-6e4e61e81f82addb.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/consts.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/funcs.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/types.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/version.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-6e4e61e81f82addb.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/consts.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/funcs.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/types.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/version.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgcrypt_sys-6e4e61e81f82addb.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/consts.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/funcs.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/types.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/version.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/consts.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/funcs.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgcrypt-sys-0.7.0/types.rs: +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out/version.rs: + +# env-dep:OUT_DIR=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgcrypt-sys-498746affc7462fa/out diff --git a/aes-gmac-siv/target/debug/deps/libgpg_error-e5dd51e9febc3058.rlib b/aes-gmac-siv/target/debug/deps/libgpg_error-e5dd51e9febc3058.rlib new file mode 100644 index 000000000..ea91afe8a Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libgpg_error-e5dd51e9febc3058.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libgpg_error-e5dd51e9febc3058.rmeta b/aes-gmac-siv/target/debug/deps/libgpg_error-e5dd51e9febc3058.rmeta new file mode 100644 index 000000000..735d77be6 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libgpg_error-e5dd51e9febc3058.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libgpg_error-ed944ce3b7c456d9.rlib b/aes-gmac-siv/target/debug/deps/libgpg_error-ed944ce3b7c456d9.rlib new file mode 100644 index 000000000..db3012bdb Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libgpg_error-ed944ce3b7c456d9.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libgpg_error-ed944ce3b7c456d9.rmeta b/aes-gmac-siv/target/debug/deps/libgpg_error-ed944ce3b7c456d9.rmeta new file mode 100644 index 000000000..6f2fd05ff Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libgpg_error-ed944ce3b7c456d9.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libgpg_error_sys-873fe832ba03ebbc.d b/aes-gmac-siv/target/debug/deps/libgpg_error_sys-873fe832ba03ebbc.d new file mode 100644 index 000000000..058fb08f7 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/libgpg_error_sys-873fe832ba03ebbc.d @@ -0,0 +1,11 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgpg_error_sys-873fe832ba03ebbc.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-873fe832ba03ebbc.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgpg_error_sys-873fe832ba03ebbc.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/lib.rs: +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs: +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs: + +# env-dep:OUT_DIR=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out diff --git a/aes-gmac-siv/target/debug/deps/libgpg_error_sys-9a61376458b669a2.d b/aes-gmac-siv/target/debug/deps/libgpg_error_sys-9a61376458b669a2.d new file mode 100644 index 000000000..2b64eb7fb --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/libgpg_error_sys-9a61376458b669a2.d @@ -0,0 +1,11 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgpg_error_sys-9a61376458b669a2.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-9a61376458b669a2.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libgpg_error_sys-9a61376458b669a2.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/lib.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs /Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/libgpg-error-sys-0.5.2/lib.rs: +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/version.rs: +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out/constants.rs: + +# env-dep:OUT_DIR=/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/build/libgpg-error-sys-e3a8693364d4f0a2/out diff --git a/aes-gmac-siv/target/debug/deps/liblibc-17b8aad1382124a9.rlib b/aes-gmac-siv/target/debug/deps/liblibc-17b8aad1382124a9.rlib new file mode 100644 index 000000000..ea94d97ab Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibc-17b8aad1382124a9.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/liblibc-17b8aad1382124a9.rmeta b/aes-gmac-siv/target/debug/deps/liblibc-17b8aad1382124a9.rmeta new file mode 100644 index 000000000..9ce6370c8 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibc-17b8aad1382124a9.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/liblibc-53f181f7c0156696.rlib b/aes-gmac-siv/target/debug/deps/liblibc-53f181f7c0156696.rlib new file mode 100644 index 000000000..9dbdd97cb Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibc-53f181f7c0156696.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/liblibc-53f181f7c0156696.rmeta b/aes-gmac-siv/target/debug/deps/liblibc-53f181f7c0156696.rmeta new file mode 100644 index 000000000..3d80cb85d Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibc-53f181f7c0156696.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-38778a1366bad380.rlib b/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-38778a1366bad380.rlib new file mode 100644 index 000000000..006329bc4 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-38778a1366bad380.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-38778a1366bad380.rmeta b/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-38778a1366bad380.rmeta new file mode 100644 index 000000000..aab137ec2 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-38778a1366bad380.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-6e4e61e81f82addb.rlib b/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-6e4e61e81f82addb.rlib new file mode 100644 index 000000000..c542e4890 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-6e4e61e81f82addb.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-6e4e61e81f82addb.rmeta b/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-6e4e61e81f82addb.rmeta new file mode 100644 index 000000000..50ad390b1 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibgcrypt_sys-6e4e61e81f82addb.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-873fe832ba03ebbc.rlib b/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-873fe832ba03ebbc.rlib new file mode 100644 index 000000000..4fe7591d7 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-873fe832ba03ebbc.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-873fe832ba03ebbc.rmeta b/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-873fe832ba03ebbc.rmeta new file mode 100644 index 000000000..0d7076e48 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-873fe832ba03ebbc.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-9a61376458b669a2.rlib b/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-9a61376458b669a2.rlib new file mode 100644 index 000000000..af65638fb Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-9a61376458b669a2.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-9a61376458b669a2.rmeta b/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-9a61376458b669a2.rmeta new file mode 100644 index 000000000..e9037364c Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/liblibgpg_error_sys-9a61376458b669a2.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libmemchr-4eca30fe91c0d131.rlib b/aes-gmac-siv/target/debug/deps/libmemchr-4eca30fe91c0d131.rlib new file mode 100644 index 000000000..5cf15d716 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libmemchr-4eca30fe91c0d131.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libmemchr-4eca30fe91c0d131.rmeta b/aes-gmac-siv/target/debug/deps/libmemchr-4eca30fe91c0d131.rmeta new file mode 100644 index 000000000..f4e544b28 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libmemchr-4eca30fe91c0d131.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libmemchr-526d9975d34f4d76.rlib b/aes-gmac-siv/target/debug/deps/libmemchr-526d9975d34f4d76.rlib new file mode 100644 index 000000000..2bdedf6f4 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libmemchr-526d9975d34f4d76.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libmemchr-526d9975d34f4d76.rmeta b/aes-gmac-siv/target/debug/deps/libmemchr-526d9975d34f4d76.rmeta new file mode 100644 index 000000000..4e1e329e8 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libmemchr-526d9975d34f4d76.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libonce_cell-328239dfb04bd33f.rlib b/aes-gmac-siv/target/debug/deps/libonce_cell-328239dfb04bd33f.rlib new file mode 100644 index 000000000..7c0e13b35 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libonce_cell-328239dfb04bd33f.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libonce_cell-328239dfb04bd33f.rmeta b/aes-gmac-siv/target/debug/deps/libonce_cell-328239dfb04bd33f.rmeta new file mode 100644 index 000000000..b93a9ebd4 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libonce_cell-328239dfb04bd33f.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/libonce_cell-82d3a795abe465c0.rlib b/aes-gmac-siv/target/debug/deps/libonce_cell-82d3a795abe465c0.rlib new file mode 100644 index 000000000..91ab38b8e Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libonce_cell-82d3a795abe465c0.rlib differ diff --git a/aes-gmac-siv/target/debug/deps/libonce_cell-82d3a795abe465c0.rmeta b/aes-gmac-siv/target/debug/deps/libonce_cell-82d3a795abe465c0.rmeta new file mode 100644 index 000000000..7c18c09a2 Binary files /dev/null and b/aes-gmac-siv/target/debug/deps/libonce_cell-82d3a795abe465c0.rmeta differ diff --git a/aes-gmac-siv/target/debug/deps/memchr-4eca30fe91c0d131.d b/aes-gmac-siv/target/debug/deps/memchr-4eca30fe91c0d131.d new file mode 100644 index 000000000..39da151b5 --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/memchr-4eca30fe91c0d131.d @@ -0,0 +1,20 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/memchr-4eca30fe91c0d131.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/cow.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/iter.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/naive.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/byte_frequencies.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rabinkarp.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rarebytes.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/twoway.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/util.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libmemchr-4eca30fe91c0d131.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/cow.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/iter.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/naive.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/byte_frequencies.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rabinkarp.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rarebytes.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/twoway.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/util.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/memchr-4eca30fe91c0d131.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/cow.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/iter.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/naive.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/byte_frequencies.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rabinkarp.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rarebytes.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/twoway.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/util.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/cow.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/fallback.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/iter.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/naive.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/byte_frequencies.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/fallback.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rabinkarp.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rarebytes.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/twoway.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/util.rs: diff --git a/aes-gmac-siv/target/debug/deps/memchr-526d9975d34f4d76.d b/aes-gmac-siv/target/debug/deps/memchr-526d9975d34f4d76.d new file mode 100644 index 000000000..58cb610ad --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/memchr-526d9975d34f4d76.d @@ -0,0 +1,20 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/memchr-526d9975d34f4d76.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/cow.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/iter.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/naive.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/byte_frequencies.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rabinkarp.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rarebytes.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/twoway.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/util.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libmemchr-526d9975d34f4d76.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/cow.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/iter.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/naive.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/byte_frequencies.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rabinkarp.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rarebytes.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/twoway.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/util.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/memchr-526d9975d34f4d76.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/cow.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/iter.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/naive.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/byte_frequencies.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/mod.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/fallback.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rabinkarp.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rarebytes.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/twoway.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/util.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/cow.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/fallback.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/iter.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memchr/naive.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/byte_frequencies.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/mod.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/prefilter/fallback.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rabinkarp.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/rarebytes.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/twoway.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.4.0/src/memmem/util.rs: diff --git a/aes-gmac-siv/target/debug/deps/once_cell-328239dfb04bd33f.d b/aes-gmac-siv/target/debug/deps/once_cell-328239dfb04bd33f.d new file mode 100644 index 000000000..8f34a339d --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/once_cell-328239dfb04bd33f.d @@ -0,0 +1,9 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/once_cell-328239dfb04bd33f.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/imp_std.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/race.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libonce_cell-328239dfb04bd33f.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/imp_std.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/race.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/once_cell-328239dfb04bd33f.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/imp_std.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/race.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/imp_std.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/race.rs: diff --git a/aes-gmac-siv/target/debug/deps/once_cell-82d3a795abe465c0.d b/aes-gmac-siv/target/debug/deps/once_cell-82d3a795abe465c0.d new file mode 100644 index 000000000..c189c17ec --- /dev/null +++ b/aes-gmac-siv/target/debug/deps/once_cell-82d3a795abe465c0.d @@ -0,0 +1,9 @@ +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/once_cell-82d3a795abe465c0.rmeta: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/imp_std.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/race.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/libonce_cell-82d3a795abe465c0.rlib: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/imp_std.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/race.rs + +/Users/api/Code/ZeroTier/ZeroTier/aes-gmac-siv/target/debug/deps/once_cell-82d3a795abe465c0.d: /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/lib.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/imp_std.rs /Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/race.rs + +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/lib.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/imp_std.rs: +/Users/api/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.8.0/src/race.rs: diff --git a/core/AES.cpp b/core/AES.cpp index 425155b63..96ff7497e 100644 --- a/core/AES.cpp +++ b/core/AES.cpp @@ -32,32 +32,23 @@ namespace ZeroTier { namespace { -#define s_bmul32(N, x, y, rh, rl) \ - uint32_t x0t_##N = (x)&0x11111111U; \ - uint32_t x1t_##N = (x)&0x22222222U; \ - uint32_t x2t_##N = (x)&0x44444444U; \ - uint32_t x3t_##N = (x)&0x88888888U; \ - uint32_t y0t_##N = (y)&0x11111111U; \ - uint32_t y1t_##N = (y)&0x22222222U; \ - uint32_t y2t_##N = (y)&0x44444444U; \ - uint32_t y3t_##N = (y)&0x88888888U; \ - uint64_t z0t_##N = (((uint64_t)x0t_##N * y0t_##N) ^ ((uint64_t)x1t_##N * y3t_##N) ^ ((uint64_t)x2t_##N * y2t_##N) \ - ^ ((uint64_t)x3t_##N * y1t_##N)) \ - & 0x1111111111111111ULL; \ - uint64_t z1t_##N = (((uint64_t)x0t_##N * y1t_##N) ^ ((uint64_t)x1t_##N * y0t_##N) ^ ((uint64_t)x2t_##N * y3t_##N) \ - ^ ((uint64_t)x3t_##N * y2t_##N)) \ - & 0x2222222222222222ULL; \ - uint64_t z2t_##N = (((uint64_t)x0t_##N * y2t_##N) ^ ((uint64_t)x1t_##N * y1t_##N) ^ ((uint64_t)x2t_##N * y0t_##N) \ - ^ ((uint64_t)x3t_##N * y3t_##N)) \ - & 0x4444444444444444ULL; \ - z0t_##N |= z1t_##N; \ - z2t_##N |= z0t_##N; \ - uint64_t zt_##N = z2t_##N \ - | ((((uint64_t)x0t_##N * y3t_##N) ^ ((uint64_t)x1t_##N * y2t_##N) \ - ^ ((uint64_t)x2t_##N * y1t_##N) ^ ((uint64_t)x3t_##N * y0t_##N)) \ - & 0x8888888888888888ULL); \ - (rh) = (uint32_t)(zt_##N >> 32U); \ - (rl) = (uint32_t)zt_##N; +#define s_bmul32(N, x, y, rh, rl) \ + uint32_t x0t_##N = (x)&0x11111111U; \ + uint32_t x1t_##N = (x)&0x22222222U; \ + uint32_t x2t_##N = (x)&0x44444444U; \ + uint32_t x3t_##N = (x)&0x88888888U; \ + uint32_t y0t_##N = (y)&0x11111111U; \ + uint32_t y1t_##N = (y)&0x22222222U; \ + uint32_t y2t_##N = (y)&0x44444444U; \ + uint32_t y3t_##N = (y)&0x88888888U; \ + uint64_t z0t_##N = (((uint64_t)x0t_##N * y0t_##N) ^ ((uint64_t)x1t_##N * y3t_##N) ^ ((uint64_t)x2t_##N * y2t_##N) ^ ((uint64_t)x3t_##N * y1t_##N)) & 0x1111111111111111ULL; \ + uint64_t z1t_##N = (((uint64_t)x0t_##N * y1t_##N) ^ ((uint64_t)x1t_##N * y0t_##N) ^ ((uint64_t)x2t_##N * y3t_##N) ^ ((uint64_t)x3t_##N * y2t_##N)) & 0x2222222222222222ULL; \ + uint64_t z2t_##N = (((uint64_t)x0t_##N * y2t_##N) ^ ((uint64_t)x1t_##N * y1t_##N) ^ ((uint64_t)x2t_##N * y0t_##N) ^ ((uint64_t)x3t_##N * y3t_##N)) & 0x4444444444444444ULL; \ + z0t_##N |= z1t_##N; \ + z2t_##N |= z0t_##N; \ + uint64_t zt_##N = z2t_##N | ((((uint64_t)x0t_##N * y3t_##N) ^ ((uint64_t)x1t_##N * y2t_##N) ^ ((uint64_t)x2t_##N * y1t_##N) ^ ((uint64_t)x3t_##N * y0t_##N)) & 0x8888888888888888ULL); \ + (rh) = (uint32_t)(zt_##N >> 32U); \ + (rl) = (uint32_t)zt_##N; void s_gfmul(const uint64_t hh, const uint64_t hl, uint64_t &y0, uint64_t &y1) noexcept { @@ -340,14 +331,10 @@ void AES::CTR::crypt(const void *const input, unsigned int len) noexcept t1 = Te0[s1 >> 24U] ^ Te1_r((s2 >> 16U) & m8) ^ Te2_r((s3 >> 8U) & m8) ^ Te3_r(s0 & m8) ^ rk[53]; t2 = Te0[s2 >> 24U] ^ Te1_r((s3 >> 16U) & m8) ^ Te2_r((s0 >> 8U) & m8) ^ Te3_r(s1 & m8) ^ rk[54]; t3 = Te0[s3 >> 24U] ^ Te1_r((s0 >> 16U) & m8) ^ Te2_r((s1 >> 8U) & m8) ^ Te3_r(s2 & m8) ^ rk[55]; - s0 = (Te2_r(t0 >> 24U) & m8_24) ^ (Te3_r((t1 >> 16U) & m8) & m8_16) ^ (Te0[(t2 >> 8U) & m8] & m8_8) - ^ (Te1_r(t3 & m8) & m8) ^ rk[56]; - s1 = (Te2_r(t1 >> 24U) & m8_24) ^ (Te3_r((t2 >> 16U) & m8) & m8_16) ^ (Te0[(t3 >> 8U) & m8] & m8_8) - ^ (Te1_r(t0 & m8) & m8) ^ rk[57]; - s2 = (Te2_r(t2 >> 24U) & m8_24) ^ (Te3_r((t3 >> 16U) & m8) & m8_16) ^ (Te0[(t0 >> 8U) & m8] & m8_8) - ^ (Te1_r(t1 & m8) & m8) ^ rk[58]; - s3 = (Te2_r(t3 >> 24U) & m8_24) ^ (Te3_r((t0 >> 16U) & m8) & m8_16) ^ (Te0[(t1 >> 8U) & m8] & m8_8) - ^ (Te1_r(t2 & m8) & m8) ^ rk[59]; + s0 = (Te2_r(t0 >> 24U) & m8_24) ^ (Te3_r((t1 >> 16U) & m8) & m8_16) ^ (Te0[(t2 >> 8U) & m8] & m8_8) ^ (Te1_r(t3 & m8) & m8) ^ rk[56]; + s1 = (Te2_r(t1 >> 24U) & m8_24) ^ (Te3_r((t2 >> 16U) & m8) & m8_16) ^ (Te0[(t3 >> 8U) & m8] & m8_8) ^ (Te1_r(t0 & m8) & m8) ^ rk[57]; + s2 = (Te2_r(t2 >> 24U) & m8_24) ^ (Te3_r((t3 >> 16U) & m8) & m8_16) ^ (Te0[(t0 >> 8U) & m8] & m8_8) ^ (Te1_r(t1 & m8) & m8) ^ rk[58]; + s3 = (Te2_r(t3 >> 24U) & m8_24) ^ (Te3_r((t0 >> 16U) & m8) & m8_16) ^ (Te0[(t1 >> 8U) & m8] & m8_8) ^ (Te1_r(t2 & m8) & m8) ^ rk[59]; *reinterpret_cast(out) = in0 ^ Utils::hton(((uint64_t)s0 << 32U) | (uint64_t)s1); *reinterpret_cast(out + 8) = in1 ^ Utils::hton(((uint64_t)s2 << 32U) | (uint64_t)s3); @@ -414,14 +401,10 @@ void AES::CTR::crypt(const void *const input, unsigned int len) noexcept t1 = Te0[s1 >> 24U] ^ Te1_r((s2 >> 16U) & m8) ^ Te2_r((s3 >> 8U) & m8) ^ Te3_r(s0 & m8) ^ rk[53]; t2 = Te0[s2 >> 24U] ^ Te1_r((s3 >> 16U) & m8) ^ Te2_r((s0 >> 8U) & m8) ^ Te3_r(s1 & m8) ^ rk[54]; t3 = Te0[s3 >> 24U] ^ Te1_r((s0 >> 16U) & m8) ^ Te2_r((s1 >> 8U) & m8) ^ Te3_r(s2 & m8) ^ rk[55]; - s0 = (Te2_r(t0 >> 24U) & m8_24) ^ (Te3_r((t1 >> 16U) & m8) & m8_16) ^ (Te0[(t2 >> 8U) & m8] & m8_8) - ^ (Te1_r(t3 & m8) & m8) ^ rk[56]; - s1 = (Te2_r(t1 >> 24U) & m8_24) ^ (Te3_r((t2 >> 16U) & m8) & m8_16) ^ (Te0[(t3 >> 8U) & m8] & m8_8) - ^ (Te1_r(t0 & m8) & m8) ^ rk[57]; - s2 = (Te2_r(t2 >> 24U) & m8_24) ^ (Te3_r((t3 >> 16U) & m8) & m8_16) ^ (Te0[(t0 >> 8U) & m8] & m8_8) - ^ (Te1_r(t1 & m8) & m8) ^ rk[58]; - s3 = (Te2_r(t3 >> 24U) & m8_24) ^ (Te3_r((t0 >> 16U) & m8) & m8_16) ^ (Te0[(t1 >> 8U) & m8] & m8_8) - ^ (Te1_r(t2 & m8) & m8) ^ rk[59]; + s0 = (Te2_r(t0 >> 24U) & m8_24) ^ (Te3_r((t1 >> 16U) & m8) & m8_16) ^ (Te0[(t2 >> 8U) & m8] & m8_8) ^ (Te1_r(t3 & m8) & m8) ^ rk[56]; + s1 = (Te2_r(t1 >> 24U) & m8_24) ^ (Te3_r((t2 >> 16U) & m8) & m8_16) ^ (Te0[(t3 >> 8U) & m8] & m8_8) ^ (Te1_r(t0 & m8) & m8) ^ rk[57]; + s2 = (Te2_r(t2 >> 24U) & m8_24) ^ (Te3_r((t3 >> 16U) & m8) & m8_16) ^ (Te0[(t0 >> 8U) & m8] & m8_8) ^ (Te1_r(t1 & m8) & m8) ^ rk[58]; + s3 = (Te2_r(t3 >> 24U) & m8_24) ^ (Te3_r((t0 >> 16U) & m8) & m8_16) ^ (Te0[(t1 >> 8U) & m8] & m8_8) ^ (Te1_r(t2 & m8) & m8) ^ rk[59]; out[0] = in[0] ^ (uint8_t)(s0 >> 24U); out[1] = in[1] ^ (uint8_t)(s0 >> 16U); @@ -468,118 +451,42 @@ void AES::CTR::finish() noexcept // Software AES and AES key expansion --------------------------------------------------------------------------------- -const uint32_t AES::Te0[256] = { - 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, - 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, - 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, - 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, - 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, - 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, - 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, - 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, - 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, - 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, - 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, - 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, - 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, - 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, - 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, - 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, - 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, - 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, - 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, - 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, - 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, - 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, - 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, - 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, - 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, - 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, - 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, - 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, - 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a -}; -const uint32_t AES::Te4[256] = { - 0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b, 0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5, 0x30303030, - 0x01010101, 0x67676767, 0x2b2b2b2b, 0xfefefefe, 0xd7d7d7d7, 0xabababab, 0x76767676, 0xcacacaca, 0x82828282, - 0xc9c9c9c9, 0x7d7d7d7d, 0xfafafafa, 0x59595959, 0x47474747, 0xf0f0f0f0, 0xadadadad, 0xd4d4d4d4, 0xa2a2a2a2, - 0xafafafaf, 0x9c9c9c9c, 0xa4a4a4a4, 0x72727272, 0xc0c0c0c0, 0xb7b7b7b7, 0xfdfdfdfd, 0x93939393, 0x26262626, - 0x36363636, 0x3f3f3f3f, 0xf7f7f7f7, 0xcccccccc, 0x34343434, 0xa5a5a5a5, 0xe5e5e5e5, 0xf1f1f1f1, 0x71717171, - 0xd8d8d8d8, 0x31313131, 0x15151515, 0x04040404, 0xc7c7c7c7, 0x23232323, 0xc3c3c3c3, 0x18181818, 0x96969696, - 0x05050505, 0x9a9a9a9a, 0x07070707, 0x12121212, 0x80808080, 0xe2e2e2e2, 0xebebebeb, 0x27272727, 0xb2b2b2b2, - 0x75757575, 0x09090909, 0x83838383, 0x2c2c2c2c, 0x1a1a1a1a, 0x1b1b1b1b, 0x6e6e6e6e, 0x5a5a5a5a, 0xa0a0a0a0, - 0x52525252, 0x3b3b3b3b, 0xd6d6d6d6, 0xb3b3b3b3, 0x29292929, 0xe3e3e3e3, 0x2f2f2f2f, 0x84848484, 0x53535353, - 0xd1d1d1d1, 0x00000000, 0xedededed, 0x20202020, 0xfcfcfcfc, 0xb1b1b1b1, 0x5b5b5b5b, 0x6a6a6a6a, 0xcbcbcbcb, - 0xbebebebe, 0x39393939, 0x4a4a4a4a, 0x4c4c4c4c, 0x58585858, 0xcfcfcfcf, 0xd0d0d0d0, 0xefefefef, 0xaaaaaaaa, - 0xfbfbfbfb, 0x43434343, 0x4d4d4d4d, 0x33333333, 0x85858585, 0x45454545, 0xf9f9f9f9, 0x02020202, 0x7f7f7f7f, - 0x50505050, 0x3c3c3c3c, 0x9f9f9f9f, 0xa8a8a8a8, 0x51515151, 0xa3a3a3a3, 0x40404040, 0x8f8f8f8f, 0x92929292, - 0x9d9d9d9d, 0x38383838, 0xf5f5f5f5, 0xbcbcbcbc, 0xb6b6b6b6, 0xdadadada, 0x21212121, 0x10101010, 0xffffffff, - 0xf3f3f3f3, 0xd2d2d2d2, 0xcdcdcdcd, 0x0c0c0c0c, 0x13131313, 0xecececec, 0x5f5f5f5f, 0x97979797, 0x44444444, - 0x17171717, 0xc4c4c4c4, 0xa7a7a7a7, 0x7e7e7e7e, 0x3d3d3d3d, 0x64646464, 0x5d5d5d5d, 0x19191919, 0x73737373, - 0x60606060, 0x81818181, 0x4f4f4f4f, 0xdcdcdcdc, 0x22222222, 0x2a2a2a2a, 0x90909090, 0x88888888, 0x46464646, - 0xeeeeeeee, 0xb8b8b8b8, 0x14141414, 0xdededede, 0x5e5e5e5e, 0x0b0b0b0b, 0xdbdbdbdb, 0xe0e0e0e0, 0x32323232, - 0x3a3a3a3a, 0x0a0a0a0a, 0x49494949, 0x06060606, 0x24242424, 0x5c5c5c5c, 0xc2c2c2c2, 0xd3d3d3d3, 0xacacacac, - 0x62626262, 0x91919191, 0x95959595, 0xe4e4e4e4, 0x79797979, 0xe7e7e7e7, 0xc8c8c8c8, 0x37373737, 0x6d6d6d6d, - 0x8d8d8d8d, 0xd5d5d5d5, 0x4e4e4e4e, 0xa9a9a9a9, 0x6c6c6c6c, 0x56565656, 0xf4f4f4f4, 0xeaeaeaea, 0x65656565, - 0x7a7a7a7a, 0xaeaeaeae, 0x08080808, 0xbabababa, 0x78787878, 0x25252525, 0x2e2e2e2e, 0x1c1c1c1c, 0xa6a6a6a6, - 0xb4b4b4b4, 0xc6c6c6c6, 0xe8e8e8e8, 0xdddddddd, 0x74747474, 0x1f1f1f1f, 0x4b4b4b4b, 0xbdbdbdbd, 0x8b8b8b8b, - 0x8a8a8a8a, 0x70707070, 0x3e3e3e3e, 0xb5b5b5b5, 0x66666666, 0x48484848, 0x03030303, 0xf6f6f6f6, 0x0e0e0e0e, - 0x61616161, 0x35353535, 0x57575757, 0xb9b9b9b9, 0x86868686, 0xc1c1c1c1, 0x1d1d1d1d, 0x9e9e9e9e, 0xe1e1e1e1, - 0xf8f8f8f8, 0x98989898, 0x11111111, 0x69696969, 0xd9d9d9d9, 0x8e8e8e8e, 0x94949494, 0x9b9b9b9b, 0x1e1e1e1e, - 0x87878787, 0xe9e9e9e9, 0xcececece, 0x55555555, 0x28282828, 0xdfdfdfdf, 0x8c8c8c8c, 0xa1a1a1a1, 0x89898989, - 0x0d0d0d0d, 0xbfbfbfbf, 0xe6e6e6e6, 0x42424242, 0x68686868, 0x41414141, 0x99999999, 0x2d2d2d2d, 0x0f0f0f0f, - 0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616 -}; -const uint32_t AES::Td0[256] = { - 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, - 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, - 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, - 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, - 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, - 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, - 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, - 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, - 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, - 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, - 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, - 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, - 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, - 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, - 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, - 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, - 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, - 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, - 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, - 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, - 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, - 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, - 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, - 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, - 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, - 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, - 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, - 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, - 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 -}; -const uint8_t AES::Td4[256] = { - 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, - 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, - 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, - 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, - 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, - 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, - 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, - 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, - 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, - 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, - 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, - 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, - 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, - 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d -}; -const uint32_t AES::rcon[15] = { 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, - 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000, - 0x6c000000, 0xd8000000, 0xab000000, 0x4d000000, 0x9a000000 }; +const uint32_t AES::Te0[256] = { 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, + 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, + 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, + 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, + 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, + 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, + 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, + 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, + 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, + 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a }; +const uint32_t AES::Te4[256] = { 0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b, 0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5, 0x30303030, 0x01010101, 0x67676767, 0x2b2b2b2b, 0xfefefefe, 0xd7d7d7d7, 0xabababab, 0x76767676, 0xcacacaca, 0x82828282, 0xc9c9c9c9, 0x7d7d7d7d, 0xfafafafa, 0x59595959, 0x47474747, 0xf0f0f0f0, 0xadadadad, 0xd4d4d4d4, + 0xa2a2a2a2, 0xafafafaf, 0x9c9c9c9c, 0xa4a4a4a4, 0x72727272, 0xc0c0c0c0, 0xb7b7b7b7, 0xfdfdfdfd, 0x93939393, 0x26262626, 0x36363636, 0x3f3f3f3f, 0xf7f7f7f7, 0xcccccccc, 0x34343434, 0xa5a5a5a5, 0xe5e5e5e5, 0xf1f1f1f1, 0x71717171, 0xd8d8d8d8, 0x31313131, 0x15151515, 0x04040404, 0xc7c7c7c7, 0x23232323, 0xc3c3c3c3, + 0x18181818, 0x96969696, 0x05050505, 0x9a9a9a9a, 0x07070707, 0x12121212, 0x80808080, 0xe2e2e2e2, 0xebebebeb, 0x27272727, 0xb2b2b2b2, 0x75757575, 0x09090909, 0x83838383, 0x2c2c2c2c, 0x1a1a1a1a, 0x1b1b1b1b, 0x6e6e6e6e, 0x5a5a5a5a, 0xa0a0a0a0, 0x52525252, 0x3b3b3b3b, 0xd6d6d6d6, 0xb3b3b3b3, 0x29292929, 0xe3e3e3e3, + 0x2f2f2f2f, 0x84848484, 0x53535353, 0xd1d1d1d1, 0x00000000, 0xedededed, 0x20202020, 0xfcfcfcfc, 0xb1b1b1b1, 0x5b5b5b5b, 0x6a6a6a6a, 0xcbcbcbcb, 0xbebebebe, 0x39393939, 0x4a4a4a4a, 0x4c4c4c4c, 0x58585858, 0xcfcfcfcf, 0xd0d0d0d0, 0xefefefef, 0xaaaaaaaa, 0xfbfbfbfb, 0x43434343, 0x4d4d4d4d, 0x33333333, 0x85858585, + 0x45454545, 0xf9f9f9f9, 0x02020202, 0x7f7f7f7f, 0x50505050, 0x3c3c3c3c, 0x9f9f9f9f, 0xa8a8a8a8, 0x51515151, 0xa3a3a3a3, 0x40404040, 0x8f8f8f8f, 0x92929292, 0x9d9d9d9d, 0x38383838, 0xf5f5f5f5, 0xbcbcbcbc, 0xb6b6b6b6, 0xdadadada, 0x21212121, 0x10101010, 0xffffffff, 0xf3f3f3f3, 0xd2d2d2d2, 0xcdcdcdcd, 0x0c0c0c0c, + 0x13131313, 0xecececec, 0x5f5f5f5f, 0x97979797, 0x44444444, 0x17171717, 0xc4c4c4c4, 0xa7a7a7a7, 0x7e7e7e7e, 0x3d3d3d3d, 0x64646464, 0x5d5d5d5d, 0x19191919, 0x73737373, 0x60606060, 0x81818181, 0x4f4f4f4f, 0xdcdcdcdc, 0x22222222, 0x2a2a2a2a, 0x90909090, 0x88888888, 0x46464646, 0xeeeeeeee, 0xb8b8b8b8, 0x14141414, + 0xdededede, 0x5e5e5e5e, 0x0b0b0b0b, 0xdbdbdbdb, 0xe0e0e0e0, 0x32323232, 0x3a3a3a3a, 0x0a0a0a0a, 0x49494949, 0x06060606, 0x24242424, 0x5c5c5c5c, 0xc2c2c2c2, 0xd3d3d3d3, 0xacacacac, 0x62626262, 0x91919191, 0x95959595, 0xe4e4e4e4, 0x79797979, 0xe7e7e7e7, 0xc8c8c8c8, 0x37373737, 0x6d6d6d6d, 0x8d8d8d8d, 0xd5d5d5d5, + 0x4e4e4e4e, 0xa9a9a9a9, 0x6c6c6c6c, 0x56565656, 0xf4f4f4f4, 0xeaeaeaea, 0x65656565, 0x7a7a7a7a, 0xaeaeaeae, 0x08080808, 0xbabababa, 0x78787878, 0x25252525, 0x2e2e2e2e, 0x1c1c1c1c, 0xa6a6a6a6, 0xb4b4b4b4, 0xc6c6c6c6, 0xe8e8e8e8, 0xdddddddd, 0x74747474, 0x1f1f1f1f, 0x4b4b4b4b, 0xbdbdbdbd, 0x8b8b8b8b, 0x8a8a8a8a, + 0x70707070, 0x3e3e3e3e, 0xb5b5b5b5, 0x66666666, 0x48484848, 0x03030303, 0xf6f6f6f6, 0x0e0e0e0e, 0x61616161, 0x35353535, 0x57575757, 0xb9b9b9b9, 0x86868686, 0xc1c1c1c1, 0x1d1d1d1d, 0x9e9e9e9e, 0xe1e1e1e1, 0xf8f8f8f8, 0x98989898, 0x11111111, 0x69696969, 0xd9d9d9d9, 0x8e8e8e8e, 0x94949494, 0x9b9b9b9b, 0x1e1e1e1e, + 0x87878787, 0xe9e9e9e9, 0xcececece, 0x55555555, 0x28282828, 0xdfdfdfdf, 0x8c8c8c8c, 0xa1a1a1a1, 0x89898989, 0x0d0d0d0d, 0xbfbfbfbf, 0xe6e6e6e6, 0x42424242, 0x68686868, 0x41414141, 0x99999999, 0x2d2d2d2d, 0x0f0f0f0f, 0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616 }; +const uint32_t AES::Td0[256] = { 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, + 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, + 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, + 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, + 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, + 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, + 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, + 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, + 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, + 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 }; +const uint8_t AES::Td4[256] = { 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, + 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, + 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, + 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d }; +const uint32_t AES::rcon[15] = { 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000, 0x6c000000, 0xd8000000, 0xab000000, 0x4d000000, 0x9a000000 }; void AES::p_initSW(const uint8_t *key) noexcept { @@ -595,16 +502,14 @@ void AES::p_initSW(const uint8_t *key) noexcept rk[7] = Utils::loadBigEndian(key + 28); for (int i = 0;;) { uint32_t temp = rk[7]; - rk[8] = rk[0] ^ (Te2_r((temp >> 16U) & 0xffU) & 0xff000000U) ^ (Te3_r((temp >> 8U) & 0xffU) & 0x00ff0000U) - ^ (Te0[(temp)&0xffU] & 0x0000ff00U) ^ (Te1_r(temp >> 24U) & 0x000000ffU) ^ rcon[i]; - rk[9] = rk[1] ^ rk[8]; - rk[10] = rk[2] ^ rk[9]; - rk[11] = rk[3] ^ rk[10]; + rk[8] = rk[0] ^ (Te2_r((temp >> 16U) & 0xffU) & 0xff000000U) ^ (Te3_r((temp >> 8U) & 0xffU) & 0x00ff0000U) ^ (Te0[(temp)&0xffU] & 0x0000ff00U) ^ (Te1_r(temp >> 24U) & 0x000000ffU) ^ rcon[i]; + rk[9] = rk[1] ^ rk[8]; + rk[10] = rk[2] ^ rk[9]; + rk[11] = rk[3] ^ rk[10]; if (++i == 7) break; temp = rk[11]; - rk[12] = rk[4] ^ (Te2_r(temp >> 24U) & 0xff000000U) ^ (Te3_r((temp >> 16U) & 0xffU) & 0x00ff0000U) - ^ (Te0[(temp >> 8U) & 0xffU] & 0x0000ff00U) ^ (Te1_r((temp)&0xffU) & 0x000000ffU); + rk[12] = rk[4] ^ (Te2_r(temp >> 24U) & 0xff000000U) ^ (Te3_r((temp >> 16U) & 0xffU) & 0x00ff0000U) ^ (Te0[(temp >> 8U) & 0xffU] & 0x0000ff00U) ^ (Te1_r((temp)&0xffU) & 0x000000ffU); rk[13] = rk[5] ^ rk[12]; rk[14] = rk[6] ^ rk[13]; rk[15] = rk[7] ^ rk[14]; @@ -635,14 +540,10 @@ void AES::p_initSW(const uint8_t *key) noexcept } for (int i = 1; i < 14; ++i) { rk += 4; - rk[0] = Td0[Te4[(rk[0] >> 24U)] & 0xffU] ^ Td1_r(Te4[(rk[0] >> 16U) & 0xffU] & 0xffU) - ^ Td2_r(Te4[(rk[0] >> 8U) & 0xffU] & 0xffU) ^ Td3_r(Te4[(rk[0]) & 0xffU] & 0xffU); - rk[1] = Td0[Te4[(rk[1] >> 24U)] & 0xffU] ^ Td1_r(Te4[(rk[1] >> 16U) & 0xffU] & 0xffU) - ^ Td2_r(Te4[(rk[1] >> 8U) & 0xffU] & 0xffU) ^ Td3_r(Te4[(rk[1]) & 0xffU] & 0xffU); - rk[2] = Td0[Te4[(rk[2] >> 24U)] & 0xffU] ^ Td1_r(Te4[(rk[2] >> 16U) & 0xffU] & 0xffU) - ^ Td2_r(Te4[(rk[2] >> 8U) & 0xffU] & 0xffU) ^ Td3_r(Te4[(rk[2]) & 0xffU] & 0xffU); - rk[3] = Td0[Te4[(rk[3] >> 24U)] & 0xffU] ^ Td1_r(Te4[(rk[3] >> 16U) & 0xffU] & 0xffU) - ^ Td2_r(Te4[(rk[3] >> 8U) & 0xffU] & 0xffU) ^ Td3_r(Te4[(rk[3]) & 0xffU] & 0xffU); + rk[0] = Td0[Te4[(rk[0] >> 24U)] & 0xffU] ^ Td1_r(Te4[(rk[0] >> 16U) & 0xffU] & 0xffU) ^ Td2_r(Te4[(rk[0] >> 8U) & 0xffU] & 0xffU) ^ Td3_r(Te4[(rk[0]) & 0xffU] & 0xffU); + rk[1] = Td0[Te4[(rk[1] >> 24U)] & 0xffU] ^ Td1_r(Te4[(rk[1] >> 16U) & 0xffU] & 0xffU) ^ Td2_r(Te4[(rk[1] >> 8U) & 0xffU] & 0xffU) ^ Td3_r(Te4[(rk[1]) & 0xffU] & 0xffU); + rk[2] = Td0[Te4[(rk[2] >> 24U)] & 0xffU] ^ Td1_r(Te4[(rk[2] >> 16U) & 0xffU] & 0xffU) ^ Td2_r(Te4[(rk[2] >> 8U) & 0xffU] & 0xffU) ^ Td3_r(Te4[(rk[2]) & 0xffU] & 0xffU); + rk[3] = Td0[Te4[(rk[3] >> 24U)] & 0xffU] ^ Td1_r(Te4[(rk[3] >> 16U) & 0xffU] & 0xffU) ^ Td2_r(Te4[(rk[3] >> 8U) & 0xffU] & 0xffU) ^ Td3_r(Te4[(rk[3]) & 0xffU] & 0xffU); } } @@ -711,14 +612,10 @@ void AES::p_encryptSW(const uint8_t *in, uint8_t *out) const noexcept t1 = Te0[s1 >> 24U] ^ Te1_r((s2 >> 16U) & m8) ^ Te2_r((s3 >> 8U) & m8) ^ Te3_r(s0 & m8) ^ rk[53]; t2 = Te0[s2 >> 24U] ^ Te1_r((s3 >> 16U) & m8) ^ Te2_r((s0 >> 8U) & m8) ^ Te3_r(s1 & m8) ^ rk[54]; t3 = Te0[s3 >> 24U] ^ Te1_r((s0 >> 16U) & m8) ^ Te2_r((s1 >> 8U) & m8) ^ Te3_r(s2 & m8) ^ rk[55]; - s0 = (Te2_r(t0 >> 24U) & m8_24) ^ (Te3_r((t1 >> 16U) & m8) & m8_16) ^ (Te0[(t2 >> 8U) & m8] & m8_8) - ^ (Te1_r(t3 & m8) & m8) ^ rk[56]; - s1 = (Te2_r(t1 >> 24U) & m8_24) ^ (Te3_r((t2 >> 16U) & m8) & m8_16) ^ (Te0[(t3 >> 8U) & m8] & m8_8) - ^ (Te1_r(t0 & m8) & m8) ^ rk[57]; - s2 = (Te2_r(t2 >> 24U) & m8_24) ^ (Te3_r((t3 >> 16U) & m8) & m8_16) ^ (Te0[(t0 >> 8U) & m8] & m8_8) - ^ (Te1_r(t1 & m8) & m8) ^ rk[58]; - s3 = (Te2_r(t3 >> 24U) & m8_24) ^ (Te3_r((t0 >> 16U) & m8) & m8_16) ^ (Te0[(t1 >> 8U) & m8] & m8_8) - ^ (Te1_r(t2 & m8) & m8) ^ rk[59]; + s0 = (Te2_r(t0 >> 24U) & m8_24) ^ (Te3_r((t1 >> 16U) & m8) & m8_16) ^ (Te0[(t2 >> 8U) & m8] & m8_8) ^ (Te1_r(t3 & m8) & m8) ^ rk[56]; + s1 = (Te2_r(t1 >> 24U) & m8_24) ^ (Te3_r((t2 >> 16U) & m8) & m8_16) ^ (Te0[(t3 >> 8U) & m8] & m8_8) ^ (Te1_r(t0 & m8) & m8) ^ rk[57]; + s2 = (Te2_r(t2 >> 24U) & m8_24) ^ (Te3_r((t3 >> 16U) & m8) & m8_16) ^ (Te0[(t0 >> 8U) & m8] & m8_8) ^ (Te1_r(t1 & m8) & m8) ^ rk[58]; + s3 = (Te2_r(t3 >> 24U) & m8_24) ^ (Te3_r((t0 >> 16U) & m8) & m8_16) ^ (Te0[(t1 >> 8U) & m8] & m8_8) ^ (Te1_r(t2 & m8) & m8) ^ rk[59]; Utils::storeBigEndian(out, s0); Utils::storeBigEndian(out + 4, s1); @@ -788,14 +685,10 @@ void AES::p_decryptSW(const uint8_t *in, uint8_t *out) const noexcept t1 = Td0[s1 >> 24U] ^ Td1_r((s0 >> 16U) & m8) ^ Td2_r((s3 >> 8U) & m8) ^ Td3_r(s2 & m8) ^ rk[53]; t2 = Td0[s2 >> 24U] ^ Td1_r((s1 >> 16U) & m8) ^ Td2_r((s0 >> 8U) & m8) ^ Td3_r(s3 & m8) ^ rk[54]; t3 = Td0[s3 >> 24U] ^ Td1_r((s2 >> 16U) & m8) ^ Td2_r((s1 >> 8U) & m8) ^ Td3_r(s0 & m8) ^ rk[55]; - s0 = (Td4[t0 >> 24U] << 24U) ^ (Td4[(t3 >> 16U) & m8] << 16U) ^ (Td4[(t2 >> 8U) & m8] << 8U) ^ (Td4[(t1)&m8]) - ^ rk[56]; - s1 = (Td4[t1 >> 24U] << 24U) ^ (Td4[(t0 >> 16U) & m8] << 16U) ^ (Td4[(t3 >> 8U) & m8] << 8U) ^ (Td4[(t2)&m8]) - ^ rk[57]; - s2 = (Td4[t2 >> 24U] << 24U) ^ (Td4[(t1 >> 16U) & m8] << 16U) ^ (Td4[(t0 >> 8U) & m8] << 8U) ^ (Td4[(t3)&m8]) - ^ rk[58]; - s3 = (Td4[t3 >> 24U] << 24U) ^ (Td4[(t2 >> 16U) & m8] << 16U) ^ (Td4[(t1 >> 8U) & m8] << 8U) ^ (Td4[(t0)&m8]) - ^ rk[59]; + s0 = (Td4[t0 >> 24U] << 24U) ^ (Td4[(t3 >> 16U) & m8] << 16U) ^ (Td4[(t2 >> 8U) & m8] << 8U) ^ (Td4[(t1)&m8]) ^ rk[56]; + s1 = (Td4[t1 >> 24U] << 24U) ^ (Td4[(t0 >> 16U) & m8] << 16U) ^ (Td4[(t3 >> 8U) & m8] << 8U) ^ (Td4[(t2)&m8]) ^ rk[57]; + s2 = (Td4[t2 >> 24U] << 24U) ^ (Td4[(t1 >> 16U) & m8] << 16U) ^ (Td4[(t0 >> 8U) & m8] << 8U) ^ (Td4[(t3)&m8]) ^ rk[58]; + s3 = (Td4[t3 >> 24U] << 24U) ^ (Td4[(t2 >> 16U) & m8] << 16U) ^ (Td4[(t1 >> 8U) & m8] << 8U) ^ (Td4[(t0)&m8]) ^ rk[59]; Utils::storeBigEndian(out, s0); Utils::storeBigEndian(out + 4, s1); diff --git a/core/AES_aesni.cpp b/core/AES_aesni.cpp index efb0cd0b2..f423d4149 100644 --- a/core/AES_aesni.cpp +++ b/core/AES_aesni.cpp @@ -47,15 +47,10 @@ p_gmacPCLMUL128(const __m128i h, __m128i y) noexcept t4 = _mm_xor_si128(t4, t2); __m128i t5 = _mm_srli_epi32(t1, 31); t1 = _mm_or_si128(_mm_slli_epi32(t1, 1), _mm_slli_si128(t5, 4)); - t4 = _mm_or_si128( - _mm_or_si128(_mm_slli_epi32(t4, 1), _mm_slli_si128(_mm_srli_epi32(t4, 31), 4)), _mm_srli_si128(t5, 12)); - t5 = _mm_xor_si128(_mm_xor_si128(_mm_slli_epi32(t1, 31), _mm_slli_epi32(t1, 30)), _mm_slli_epi32(t1, 25)); - t1 = _mm_xor_si128(t1, _mm_slli_si128(t5, 12)); - t4 = _mm_xor_si128( - _mm_xor_si128( - _mm_xor_si128(_mm_xor_si128(_mm_xor_si128(t4, _mm_srli_si128(t5, 4)), t1), _mm_srli_epi32(t1, 2)), - _mm_srli_epi32(t1, 7)), - _mm_srli_epi32(t1, 1)); + t4 = _mm_or_si128(_mm_or_si128(_mm_slli_epi32(t4, 1), _mm_slli_si128(_mm_srli_epi32(t4, 31), 4)), _mm_srli_si128(t5, 12)); + t5 = _mm_xor_si128(_mm_xor_si128(_mm_slli_epi32(t1, 31), _mm_slli_epi32(t1, 30)), _mm_slli_epi32(t1, 25)); + t1 = _mm_xor_si128(t1, _mm_slli_si128(t5, 12)); + t4 = _mm_xor_si128(_mm_xor_si128(_mm_xor_si128(_mm_xor_si128(_mm_xor_si128(t4, _mm_srli_si128(t5, 4)), t1), _mm_srli_epi32(t1, 2)), _mm_srli_epi32(t1, 7)), _mm_srli_epi32(t1, 1)); return _mm_shuffle_epi8(t4, s_sseSwapBytes); } @@ -93,9 +88,7 @@ void p_aesCtrInnerVAES512(unsigned int &len, const uint64_t c0, uint64_t &_c1, c const __m512i kk14 = _mm512_broadcast_i32x4(k[14]); _mm_prefetch(in, _MM_HINT_T0); for (unsigned int i = 0, c = (len >> 6U); i < c; ++i) { - __m512i d0 = _mm512_set_epi64( - (long long)Utils::hton(c1 + 3ULL), (long long)c0, (long long)Utils::hton(c1 + 2ULL), (long long)c0, - (long long)Utils::hton(c1 + 1ULL), (long long)c0, (long long)Utils::hton(c1), (long long)c0); + __m512i d0 = _mm512_set_epi64((long long)Utils::hton(c1 + 3ULL), (long long)c0, (long long)Utils::hton(c1 + 2ULL), (long long)c0, (long long)Utils::hton(c1 + 1ULL), (long long)c0, (long long)Utils::hton(c1), (long long)c0); c1 += 4; d0 = _mm512_xor_si512(d0, kk0); d0 = _mm512_aesenc_epi128(d0, kk1); @@ -112,9 +105,7 @@ void p_aesCtrInnerVAES512(unsigned int &len, const uint64_t c0, uint64_t &_c1, c d0 = _mm512_aesenc_epi128(d0, kk12); d0 = _mm512_aesenc_epi128(d0, kk13); d0 = _mm512_aesenclast_epi128(d0, kk14); - _mm512_storeu_si512( - reinterpret_cast<__m512i *>(out), - _mm512_xor_si512(_mm512_loadu_si512(reinterpret_cast(in)), d0)); + _mm512_storeu_si512(reinterpret_cast<__m512i *>(out), _mm512_xor_si512(_mm512_loadu_si512(reinterpret_cast(in)), d0)); in += 64; out += 64; _mm_prefetch(in, _MM_HINT_T0); @@ -152,10 +143,8 @@ void p_aesCtrInnerVAES256(unsigned int &len, const uint64_t c0, uint64_t &_c1, c const __m256i kk14 = _mm256_broadcastsi128_si256(k[14]); _mm_prefetch(in, _MM_HINT_T0); for (unsigned int i = 0, c = (len >> 6U); i < c; ++i) { - __m256i d0 = _mm256_set_epi64x( - (long long)Utils::hton(c1 + 1ULL), (long long)c0, (long long)Utils::hton(c1), (long long)c0); - __m256i d1 = _mm256_set_epi64x( - (long long)Utils::hton(c1 + 3ULL), (long long)c0, (long long)Utils::hton(c1 + 2ULL), (long long)c0); + __m256i d0 = _mm256_set_epi64x((long long)Utils::hton(c1 + 1ULL), (long long)c0, (long long)Utils::hton(c1), (long long)c0); + __m256i d1 = _mm256_set_epi64x((long long)Utils::hton(c1 + 3ULL), (long long)c0, (long long)Utils::hton(c1 + 2ULL), (long long)c0); c1 += 4; d0 = _mm256_xor_si256(d0, kk0); d1 = _mm256_xor_si256(d1, kk0); @@ -187,12 +176,8 @@ void p_aesCtrInnerVAES256(unsigned int &len, const uint64_t c0, uint64_t &_c1, c d1 = _mm256_aesenc_epi128(d1, kk13); d0 = _mm256_aesenclast_epi128(d0, kk14); d1 = _mm256_aesenclast_epi128(d1, kk14); - _mm256_storeu_si256( - reinterpret_cast<__m256i *>(out), - _mm256_xor_si256(d0, _mm256_loadu_si256(reinterpret_cast(in)))); - _mm256_storeu_si256( - reinterpret_cast<__m256i *>(out + 32), - _mm256_xor_si256(d1, _mm256_loadu_si256(reinterpret_cast(in + 32)))); + _mm256_storeu_si256(reinterpret_cast<__m256i *>(out), _mm256_xor_si256(d0, _mm256_loadu_si256(reinterpret_cast(in)))); + _mm256_storeu_si256(reinterpret_cast<__m256i *>(out + 32), _mm256_xor_si256(d1, _mm256_loadu_si256(reinterpret_cast(in + 32)))); in += 64; out += 64; _mm_prefetch(in, _MM_HINT_T0); @@ -259,8 +244,7 @@ void AES::GMAC::p_aesNIUpdate(const uint8_t *in, unsigned int len) noexcept --len; _r[_rp++] = *(in++); if (_rp == 16) { - y = p_gmacPCLMUL128( - _aes.p_k.ni.h[0], _mm_xor_si128(y, _mm_loadu_si128(reinterpret_cast<__m128i *>(_r)))); + y = p_gmacPCLMUL128(_aes.p_k.ni.h[0], _mm_xor_si128(y, _mm_loadu_si128(reinterpret_cast<__m128i *>(_r)))); break; } } @@ -285,34 +269,21 @@ void AES::GMAC::p_aesNIUpdate(const uint8_t *in, unsigned int len) noexcept __m128i d3 = _mm_shuffle_epi8(_mm_loadu_si128(reinterpret_cast(in + 32)), sb); __m128i d4 = _mm_shuffle_epi8(_mm_loadu_si128(reinterpret_cast(in + 48)), sb); in += 64; - __m128i a = _mm_xor_si128( - _mm_xor_si128(_mm_clmulepi64_si128(hhhh, d1, 0x00), _mm_clmulepi64_si128(hhh, d2, 0x00)), - _mm_xor_si128(_mm_clmulepi64_si128(hh, d3, 0x00), _mm_clmulepi64_si128(h, d4, 0x00))); - __m128i b = _mm_xor_si128( - _mm_xor_si128(_mm_clmulepi64_si128(hhhh, d1, 0x11), _mm_clmulepi64_si128(hhh, d2, 0x11)), - _mm_xor_si128(_mm_clmulepi64_si128(hh, d3, 0x11), _mm_clmulepi64_si128(h, d4, 0x11))); + __m128i a = _mm_xor_si128(_mm_xor_si128(_mm_clmulepi64_si128(hhhh, d1, 0x00), _mm_clmulepi64_si128(hhh, d2, 0x00)), _mm_xor_si128(_mm_clmulepi64_si128(hh, d3, 0x00), _mm_clmulepi64_si128(h, d4, 0x00))); + __m128i b = _mm_xor_si128(_mm_xor_si128(_mm_clmulepi64_si128(hhhh, d1, 0x11), _mm_clmulepi64_si128(hhh, d2, 0x11)), _mm_xor_si128(_mm_clmulepi64_si128(hh, d3, 0x11), _mm_clmulepi64_si128(h, d4, 0x11))); __m128i c = _mm_xor_si128( _mm_xor_si128( - _mm_xor_si128( - _mm_clmulepi64_si128(hhhh2, _mm_xor_si128(_mm_shuffle_epi32(d1, 78), d1), 0x00), - _mm_clmulepi64_si128(hhh2, _mm_xor_si128(_mm_shuffle_epi32(d2, 78), d2), 0x00)), - _mm_xor_si128( - _mm_clmulepi64_si128(hh2, _mm_xor_si128(_mm_shuffle_epi32(d3, 78), d3), 0x00), - _mm_clmulepi64_si128(h2, _mm_xor_si128(_mm_shuffle_epi32(d4, 78), d4), 0x00))), + _mm_xor_si128(_mm_clmulepi64_si128(hhhh2, _mm_xor_si128(_mm_shuffle_epi32(d1, 78), d1), 0x00), _mm_clmulepi64_si128(hhh2, _mm_xor_si128(_mm_shuffle_epi32(d2, 78), d2), 0x00)), + _mm_xor_si128(_mm_clmulepi64_si128(hh2, _mm_xor_si128(_mm_shuffle_epi32(d3, 78), d3), 0x00), _mm_clmulepi64_si128(h2, _mm_xor_si128(_mm_shuffle_epi32(d4, 78), d4), 0x00))), _mm_xor_si128(a, b)); a = _mm_xor_si128(_mm_slli_si128(c, 8), a); b = _mm_xor_si128(_mm_srli_si128(c, 8), b); c = _mm_srli_epi32(a, 31); a = _mm_or_si128(_mm_slli_epi32(a, 1), _mm_slli_si128(c, 4)); - b = _mm_or_si128( - _mm_or_si128(_mm_slli_epi32(b, 1), _mm_slli_si128(_mm_srli_epi32(b, 31), 4)), _mm_srli_si128(c, 12)); + b = _mm_or_si128(_mm_or_si128(_mm_slli_epi32(b, 1), _mm_slli_si128(_mm_srli_epi32(b, 31), 4)), _mm_srli_si128(c, 12)); c = _mm_xor_si128(_mm_slli_epi32(a, 31), _mm_xor_si128(_mm_slli_epi32(a, 30), _mm_slli_epi32(a, 25))); a = _mm_xor_si128(a, _mm_slli_si128(c, 12)); - b = _mm_xor_si128( - b, _mm_xor_si128( - a, _mm_xor_si128( - _mm_xor_si128(_mm_srli_epi32(a, 1), _mm_srli_si128(c, 4)), - _mm_xor_si128(_mm_srli_epi32(a, 2), _mm_srli_epi32(a, 7))))); + b = _mm_xor_si128(b, _mm_xor_si128(a, _mm_xor_si128(_mm_xor_si128(_mm_srli_epi32(a, 1), _mm_srli_si128(c, 4)), _mm_xor_si128(_mm_srli_epi32(a, 2), _mm_srli_epi32(a, 7))))); y = _mm_shuffle_epi8(b, sb); _mm_prefetch(in, _MM_HINT_T0); } while (likely(in != end64)); @@ -479,242 +450,239 @@ void AES::CTR::p_aesNICrypt(const uint8_t *in, uint8_t *out, unsigned int len) n #endif #if !defined(ZT_AES_VAES512) && defined(ZT_AES_VAES256) - if (Utils::CPUID.vaes) { - p_aesCtrInnerVAES256(len, _ctr[0], c1, in, out, k); - goto skip_conventional_aesni_64; - } - else { + if (Utils::CPUID.vaes) { + p_aesCtrInnerVAES256(len, _ctr[0], c1, in, out, k); + goto skip_conventional_aesni_64; + } + else { #endif - const uint8_t *const eof64 = in + (len & ~((unsigned int)63)); - len &= 63; - _mm_prefetch(in, _MM_HINT_T0); - do { - __m128i d0 = _mm_set_epi64x((long long)Utils::hton(c1), (long long)c0); - __m128i d1 = _mm_set_epi64x((long long)Utils::hton(c1 + 1ULL), (long long)c0); - __m128i d2 = _mm_set_epi64x((long long)Utils::hton(c1 + 2ULL), (long long)c0); - __m128i d3 = _mm_set_epi64x((long long)Utils::hton(c1 + 3ULL), (long long)c0); - c1 += 4; - d0 = _mm_xor_si128(d0, k0); - d1 = _mm_xor_si128(d1, k0); - d2 = _mm_xor_si128(d2, k0); - d3 = _mm_xor_si128(d3, k0); - d0 = _mm_aesenc_si128(d0, k1); - d1 = _mm_aesenc_si128(d1, k1); - d2 = _mm_aesenc_si128(d2, k1); - d3 = _mm_aesenc_si128(d3, k1); - d0 = _mm_aesenc_si128(d0, k2); - d1 = _mm_aesenc_si128(d1, k2); - d2 = _mm_aesenc_si128(d2, k2); - d3 = _mm_aesenc_si128(d3, k2); - d0 = _mm_aesenc_si128(d0, k3); - d1 = _mm_aesenc_si128(d1, k3); - d2 = _mm_aesenc_si128(d2, k3); - d3 = _mm_aesenc_si128(d3, k3); - d0 = _mm_aesenc_si128(d0, k4); - d1 = _mm_aesenc_si128(d1, k4); - d2 = _mm_aesenc_si128(d2, k4); - d3 = _mm_aesenc_si128(d3, k4); - d0 = _mm_aesenc_si128(d0, k5); - d1 = _mm_aesenc_si128(d1, k5); - d2 = _mm_aesenc_si128(d2, k5); - d3 = _mm_aesenc_si128(d3, k5); - d0 = _mm_aesenc_si128(d0, k6); - d1 = _mm_aesenc_si128(d1, k6); - d2 = _mm_aesenc_si128(d2, k6); - d3 = _mm_aesenc_si128(d3, k6); - d0 = _mm_aesenc_si128(d0, k7); - d1 = _mm_aesenc_si128(d1, k7); - d2 = _mm_aesenc_si128(d2, k7); - d3 = _mm_aesenc_si128(d3, k7); - d0 = _mm_aesenc_si128(d0, k8); - d1 = _mm_aesenc_si128(d1, k8); - d2 = _mm_aesenc_si128(d2, k8); - d3 = _mm_aesenc_si128(d3, k8); - d0 = _mm_aesenc_si128(d0, k9); - d1 = _mm_aesenc_si128(d1, k9); - d2 = _mm_aesenc_si128(d2, k9); - d3 = _mm_aesenc_si128(d3, k9); - d0 = _mm_aesenc_si128(d0, k10); - d1 = _mm_aesenc_si128(d1, k10); - d2 = _mm_aesenc_si128(d2, k10); - d3 = _mm_aesenc_si128(d3, k10); - d0 = _mm_aesenc_si128(d0, k11); - d1 = _mm_aesenc_si128(d1, k11); - d2 = _mm_aesenc_si128(d2, k11); - d3 = _mm_aesenc_si128(d3, k11); - d0 = _mm_aesenc_si128(d0, k12); - d1 = _mm_aesenc_si128(d1, k12); - d2 = _mm_aesenc_si128(d2, k12); - d3 = _mm_aesenc_si128(d3, k12); - d0 = _mm_aesenc_si128(d0, k13); - d1 = _mm_aesenc_si128(d1, k13); - d2 = _mm_aesenc_si128(d2, k13); - d3 = _mm_aesenc_si128(d3, k13); - d0 = _mm_xor_si128( - _mm_aesenclast_si128(d0, k14), _mm_loadu_si128(reinterpret_cast(in))); - d1 = _mm_xor_si128( - _mm_aesenclast_si128(d1, k14), _mm_loadu_si128(reinterpret_cast(in + 16))); - d2 = _mm_xor_si128( - _mm_aesenclast_si128(d2, k14), _mm_loadu_si128(reinterpret_cast(in + 32))); - d3 = _mm_xor_si128( - _mm_aesenclast_si128(d3, k14), _mm_loadu_si128(reinterpret_cast(in + 48))); - _mm_storeu_si128(reinterpret_cast<__m128i *>(out), d0); - _mm_storeu_si128(reinterpret_cast<__m128i *>(out + 16), d1); - _mm_storeu_si128(reinterpret_cast<__m128i *>(out + 32), d2); - _mm_storeu_si128(reinterpret_cast<__m128i *>(out + 48), d3); - in += 64; - out += 64; - _mm_prefetch(in, _MM_HINT_T0); - } while (likely(in != eof64)); + const uint8_t *const eof64 = in + (len & ~((unsigned int)63)); + len &= 63; + _mm_prefetch(in, _MM_HINT_T0); + do { + __m128i d0 = _mm_set_epi64x((long long)Utils::hton(c1), (long long)c0); + __m128i d1 = _mm_set_epi64x((long long)Utils::hton(c1 + 1ULL), (long long)c0); + __m128i d2 = _mm_set_epi64x((long long)Utils::hton(c1 + 2ULL), (long long)c0); + __m128i d3 = _mm_set_epi64x((long long)Utils::hton(c1 + 3ULL), (long long)c0); + c1 += 4; + d0 = _mm_xor_si128(d0, k0); + d1 = _mm_xor_si128(d1, k0); + d2 = _mm_xor_si128(d2, k0); + d3 = _mm_xor_si128(d3, k0); + d0 = _mm_aesenc_si128(d0, k1); + d1 = _mm_aesenc_si128(d1, k1); + d2 = _mm_aesenc_si128(d2, k1); + d3 = _mm_aesenc_si128(d3, k1); + d0 = _mm_aesenc_si128(d0, k2); + d1 = _mm_aesenc_si128(d1, k2); + d2 = _mm_aesenc_si128(d2, k2); + d3 = _mm_aesenc_si128(d3, k2); + d0 = _mm_aesenc_si128(d0, k3); + d1 = _mm_aesenc_si128(d1, k3); + d2 = _mm_aesenc_si128(d2, k3); + d3 = _mm_aesenc_si128(d3, k3); + d0 = _mm_aesenc_si128(d0, k4); + d1 = _mm_aesenc_si128(d1, k4); + d2 = _mm_aesenc_si128(d2, k4); + d3 = _mm_aesenc_si128(d3, k4); + d0 = _mm_aesenc_si128(d0, k5); + d1 = _mm_aesenc_si128(d1, k5); + d2 = _mm_aesenc_si128(d2, k5); + d3 = _mm_aesenc_si128(d3, k5); + d0 = _mm_aesenc_si128(d0, k6); + d1 = _mm_aesenc_si128(d1, k6); + d2 = _mm_aesenc_si128(d2, k6); + d3 = _mm_aesenc_si128(d3, k6); + d0 = _mm_aesenc_si128(d0, k7); + d1 = _mm_aesenc_si128(d1, k7); + d2 = _mm_aesenc_si128(d2, k7); + d3 = _mm_aesenc_si128(d3, k7); + d0 = _mm_aesenc_si128(d0, k8); + d1 = _mm_aesenc_si128(d1, k8); + d2 = _mm_aesenc_si128(d2, k8); + d3 = _mm_aesenc_si128(d3, k8); + d0 = _mm_aesenc_si128(d0, k9); + d1 = _mm_aesenc_si128(d1, k9); + d2 = _mm_aesenc_si128(d2, k9); + d3 = _mm_aesenc_si128(d3, k9); + d0 = _mm_aesenc_si128(d0, k10); + d1 = _mm_aesenc_si128(d1, k10); + d2 = _mm_aesenc_si128(d2, k10); + d3 = _mm_aesenc_si128(d3, k10); + d0 = _mm_aesenc_si128(d0, k11); + d1 = _mm_aesenc_si128(d1, k11); + d2 = _mm_aesenc_si128(d2, k11); + d3 = _mm_aesenc_si128(d3, k11); + d0 = _mm_aesenc_si128(d0, k12); + d1 = _mm_aesenc_si128(d1, k12); + d2 = _mm_aesenc_si128(d2, k12); + d3 = _mm_aesenc_si128(d3, k12); + d0 = _mm_aesenc_si128(d0, k13); + d1 = _mm_aesenc_si128(d1, k13); + d2 = _mm_aesenc_si128(d2, k13); + d3 = _mm_aesenc_si128(d3, k13); + d0 = _mm_xor_si128(_mm_aesenclast_si128(d0, k14), _mm_loadu_si128(reinterpret_cast(in))); + d1 = _mm_xor_si128(_mm_aesenclast_si128(d1, k14), _mm_loadu_si128(reinterpret_cast(in + 16))); + d2 = _mm_xor_si128(_mm_aesenclast_si128(d2, k14), _mm_loadu_si128(reinterpret_cast(in + 32))); + d3 = _mm_xor_si128(_mm_aesenclast_si128(d3, k14), _mm_loadu_si128(reinterpret_cast(in + 48))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(out), d0); + _mm_storeu_si128(reinterpret_cast<__m128i *>(out + 16), d1); + _mm_storeu_si128(reinterpret_cast<__m128i *>(out + 32), d2); + _mm_storeu_si128(reinterpret_cast<__m128i *>(out + 48), d3); + in += 64; + out += 64; + _mm_prefetch(in, _MM_HINT_T0); + } while (likely(in != eof64)); #if defined(ZT_AES_VAES512) || defined(ZT_AES_VAES256) + } +#endif } -#endif + + while (len >= 16) { + __m128i d0 = _mm_set_epi64x((long long)Utils::hton(c1++), (long long)c0); + d0 = _mm_xor_si128(d0, k0); + d0 = _mm_aesenc_si128(d0, k1); + d0 = _mm_aesenc_si128(d0, k2); + d0 = _mm_aesenc_si128(d0, k3); + d0 = _mm_aesenc_si128(d0, k4); + d0 = _mm_aesenc_si128(d0, k5); + d0 = _mm_aesenc_si128(d0, k6); + d0 = _mm_aesenc_si128(d0, k7); + d0 = _mm_aesenc_si128(d0, k8); + d0 = _mm_aesenc_si128(d0, k9); + d0 = _mm_aesenc_si128(d0, k10); + d0 = _mm_aesenc_si128(d0, k11); + d0 = _mm_aesenc_si128(d0, k12); + d0 = _mm_aesenc_si128(d0, k13); + _mm_storeu_si128(reinterpret_cast<__m128i *>(out), _mm_xor_si128(_mm_aesenclast_si128(d0, k14), _mm_loadu_si128(reinterpret_cast(in)))); + in += 16; + len -= 16; + out += 16; + } + + // Any remaining input is placed in _out. This will be picked up and crypted + // on subsequent calls to crypt() or finish() as it'll mean _len will not be + // an even multiple of 16. + for (unsigned int i = 0; i < len; ++i) + out[i] = in[i]; + + _ctr[1] = Utils::hton(c1); } - while (len >= 16) { - __m128i d0 = _mm_set_epi64x((long long)Utils::hton(c1++), (long long)c0); - d0 = _mm_xor_si128(d0, k0); - d0 = _mm_aesenc_si128(d0, k1); - d0 = _mm_aesenc_si128(d0, k2); - d0 = _mm_aesenc_si128(d0, k3); - d0 = _mm_aesenc_si128(d0, k4); - d0 = _mm_aesenc_si128(d0, k5); - d0 = _mm_aesenc_si128(d0, k6); - d0 = _mm_aesenc_si128(d0, k7); - d0 = _mm_aesenc_si128(d0, k8); - d0 = _mm_aesenc_si128(d0, k9); - d0 = _mm_aesenc_si128(d0, k10); - d0 = _mm_aesenc_si128(d0, k11); - d0 = _mm_aesenc_si128(d0, k12); - d0 = _mm_aesenc_si128(d0, k13); - _mm_storeu_si128( - reinterpret_cast<__m128i *>(out), - _mm_xor_si128(_mm_aesenclast_si128(d0, k14), _mm_loadu_si128(reinterpret_cast(in)))); - in += 16; - len -= 16; - out += 16; +#ifdef __GNUC__ + __attribute__((__target__("sse,sse2,ssse3,aes,pclmul"))) +#endif + void + AES::p_init_aesni(const uint8_t *key) noexcept + { + __m128i t1, t2, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13; + p_k.ni.k[0] = t1 = _mm_loadu_si128((const __m128i *)key); + p_k.ni.k[1] = k1 = t2 = _mm_loadu_si128((const __m128i *)(key + 16)); + p_k.ni.k[2] = k2 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x01)); + p_k.ni.k[3] = k3 = t2 = p_init256_2_aesni(t1, t2); + p_k.ni.k[4] = k4 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x02)); + p_k.ni.k[5] = k5 = t2 = p_init256_2_aesni(t1, t2); + p_k.ni.k[6] = k6 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x04)); + p_k.ni.k[7] = k7 = t2 = p_init256_2_aesni(t1, t2); + p_k.ni.k[8] = k8 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x08)); + p_k.ni.k[9] = k9 = t2 = p_init256_2_aesni(t1, t2); + p_k.ni.k[10] = k10 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x10)); + p_k.ni.k[11] = k11 = t2 = p_init256_2_aesni(t1, t2); + p_k.ni.k[12] = k12 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x20)); + p_k.ni.k[13] = k13 = t2 = p_init256_2_aesni(t1, t2); + p_k.ni.k[14] = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x40)); + p_k.ni.k[15] = _mm_aesimc_si128(k13); + p_k.ni.k[16] = _mm_aesimc_si128(k12); + p_k.ni.k[17] = _mm_aesimc_si128(k11); + p_k.ni.k[18] = _mm_aesimc_si128(k10); + p_k.ni.k[19] = _mm_aesimc_si128(k9); + p_k.ni.k[20] = _mm_aesimc_si128(k8); + p_k.ni.k[21] = _mm_aesimc_si128(k7); + p_k.ni.k[22] = _mm_aesimc_si128(k6); + p_k.ni.k[23] = _mm_aesimc_si128(k5); + p_k.ni.k[24] = _mm_aesimc_si128(k4); + p_k.ni.k[25] = _mm_aesimc_si128(k3); + p_k.ni.k[26] = _mm_aesimc_si128(k2); + p_k.ni.k[27] = _mm_aesimc_si128(k1); + + __m128i h = p_k.ni.k[0]; // _mm_xor_si128(_mm_setzero_si128(),_k.ni.k[0]); + h = _mm_aesenc_si128(h, k1); + h = _mm_aesenc_si128(h, k2); + h = _mm_aesenc_si128(h, k3); + h = _mm_aesenc_si128(h, k4); + h = _mm_aesenc_si128(h, k5); + h = _mm_aesenc_si128(h, k6); + h = _mm_aesenc_si128(h, k7); + h = _mm_aesenc_si128(h, k8); + h = _mm_aesenc_si128(h, k9); + h = _mm_aesenc_si128(h, k10); + h = _mm_aesenc_si128(h, k11); + h = _mm_aesenc_si128(h, k12); + h = _mm_aesenc_si128(h, k13); + h = _mm_aesenclast_si128(h, p_k.ni.k[14]); + __m128i hswap = _mm_shuffle_epi8(h, s_sseSwapBytes); + __m128i hh = p_gmacPCLMUL128(hswap, h); + __m128i hhh = p_gmacPCLMUL128(hswap, hh); + __m128i hhhh = p_gmacPCLMUL128(hswap, hhh); + p_k.ni.h[0] = hswap; + p_k.ni.h[1] = hh = _mm_shuffle_epi8(hh, s_sseSwapBytes); + p_k.ni.h[2] = hhh = _mm_shuffle_epi8(hhh, s_sseSwapBytes); + p_k.ni.h[3] = hhhh = _mm_shuffle_epi8(hhhh, s_sseSwapBytes); + p_k.ni.h2[0] = _mm_xor_si128(_mm_shuffle_epi32(hswap, 78), hswap); + p_k.ni.h2[1] = _mm_xor_si128(_mm_shuffle_epi32(hh, 78), hh); + p_k.ni.h2[2] = _mm_xor_si128(_mm_shuffle_epi32(hhh, 78), hhh); + p_k.ni.h2[3] = _mm_xor_si128(_mm_shuffle_epi32(hhhh, 78), hhhh); } - // Any remaining input is placed in _out. This will be picked up and crypted - // on subsequent calls to crypt() or finish() as it'll mean _len will not be - // an even multiple of 16. - for (unsigned int i = 0; i < len; ++i) - out[i] = in[i]; - - _ctr[1] = Utils::hton(c1); -} +#ifdef __GNUC__ + __attribute__((__target__("sse,sse2,aes"))) +#endif + void + AES::p_encrypt_aesni(const void *const in, void *const out) const noexcept + { + __m128i tmp = _mm_loadu_si128((const __m128i *)in); + tmp = _mm_xor_si128(tmp, p_k.ni.k[0]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[1]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[2]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[3]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[4]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[5]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[6]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[7]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[8]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[9]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[10]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[11]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[12]); + tmp = _mm_aesenc_si128(tmp, p_k.ni.k[13]); + _mm_storeu_si128((__m128i *)out, _mm_aesenclast_si128(tmp, p_k.ni.k[14])); + } #ifdef __GNUC__ -__attribute__((__target__("sse,sse2,ssse3,aes,pclmul"))) + __attribute__((__target__("sse,sse2,aes"))) #endif -void AES::p_init_aesni(const uint8_t *key) noexcept -{ - __m128i t1, t2, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13; - p_k.ni.k[0] = t1 = _mm_loadu_si128((const __m128i *)key); - p_k.ni.k[1] = k1 = t2 = _mm_loadu_si128((const __m128i *)(key + 16)); - p_k.ni.k[2] = k2 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x01)); - p_k.ni.k[3] = k3 = t2 = p_init256_2_aesni(t1, t2); - p_k.ni.k[4] = k4 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x02)); - p_k.ni.k[5] = k5 = t2 = p_init256_2_aesni(t1, t2); - p_k.ni.k[6] = k6 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x04)); - p_k.ni.k[7] = k7 = t2 = p_init256_2_aesni(t1, t2); - p_k.ni.k[8] = k8 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x08)); - p_k.ni.k[9] = k9 = t2 = p_init256_2_aesni(t1, t2); - p_k.ni.k[10] = k10 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x10)); - p_k.ni.k[11] = k11 = t2 = p_init256_2_aesni(t1, t2); - p_k.ni.k[12] = k12 = t1 = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x20)); - p_k.ni.k[13] = k13 = t2 = p_init256_2_aesni(t1, t2); - p_k.ni.k[14] = p_init256_1_aesni(t1, _mm_aeskeygenassist_si128(t2, 0x40)); - p_k.ni.k[15] = _mm_aesimc_si128(k13); - p_k.ni.k[16] = _mm_aesimc_si128(k12); - p_k.ni.k[17] = _mm_aesimc_si128(k11); - p_k.ni.k[18] = _mm_aesimc_si128(k10); - p_k.ni.k[19] = _mm_aesimc_si128(k9); - p_k.ni.k[20] = _mm_aesimc_si128(k8); - p_k.ni.k[21] = _mm_aesimc_si128(k7); - p_k.ni.k[22] = _mm_aesimc_si128(k6); - p_k.ni.k[23] = _mm_aesimc_si128(k5); - p_k.ni.k[24] = _mm_aesimc_si128(k4); - p_k.ni.k[25] = _mm_aesimc_si128(k3); - p_k.ni.k[26] = _mm_aesimc_si128(k2); - p_k.ni.k[27] = _mm_aesimc_si128(k1); - - __m128i h = p_k.ni.k[0]; // _mm_xor_si128(_mm_setzero_si128(),_k.ni.k[0]); - h = _mm_aesenc_si128(h, k1); - h = _mm_aesenc_si128(h, k2); - h = _mm_aesenc_si128(h, k3); - h = _mm_aesenc_si128(h, k4); - h = _mm_aesenc_si128(h, k5); - h = _mm_aesenc_si128(h, k6); - h = _mm_aesenc_si128(h, k7); - h = _mm_aesenc_si128(h, k8); - h = _mm_aesenc_si128(h, k9); - h = _mm_aesenc_si128(h, k10); - h = _mm_aesenc_si128(h, k11); - h = _mm_aesenc_si128(h, k12); - h = _mm_aesenc_si128(h, k13); - h = _mm_aesenclast_si128(h, p_k.ni.k[14]); - __m128i hswap = _mm_shuffle_epi8(h, s_sseSwapBytes); - __m128i hh = p_gmacPCLMUL128(hswap, h); - __m128i hhh = p_gmacPCLMUL128(hswap, hh); - __m128i hhhh = p_gmacPCLMUL128(hswap, hhh); - p_k.ni.h[0] = hswap; - p_k.ni.h[1] = hh = _mm_shuffle_epi8(hh, s_sseSwapBytes); - p_k.ni.h[2] = hhh = _mm_shuffle_epi8(hhh, s_sseSwapBytes); - p_k.ni.h[3] = hhhh = _mm_shuffle_epi8(hhhh, s_sseSwapBytes); - p_k.ni.h2[0] = _mm_xor_si128(_mm_shuffle_epi32(hswap, 78), hswap); - p_k.ni.h2[1] = _mm_xor_si128(_mm_shuffle_epi32(hh, 78), hh); - p_k.ni.h2[2] = _mm_xor_si128(_mm_shuffle_epi32(hhh, 78), hhh); - p_k.ni.h2[3] = _mm_xor_si128(_mm_shuffle_epi32(hhhh, 78), hhhh); -} - -#ifdef __GNUC__ -__attribute__((__target__("sse,sse2,aes"))) -#endif -void AES::p_encrypt_aesni(const void *const in, void *const out) const noexcept -{ - __m128i tmp = _mm_loadu_si128((const __m128i *)in); - tmp = _mm_xor_si128(tmp, p_k.ni.k[0]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[1]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[2]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[3]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[4]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[5]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[6]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[7]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[8]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[9]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[10]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[11]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[12]); - tmp = _mm_aesenc_si128(tmp, p_k.ni.k[13]); - _mm_storeu_si128((__m128i *)out, _mm_aesenclast_si128(tmp, p_k.ni.k[14])); -} - -#ifdef __GNUC__ -__attribute__((__target__("sse,sse2,aes"))) -#endif -void AES::p_decrypt_aesni(const void *in, void *out) const noexcept -{ - __m128i tmp = _mm_loadu_si128((const __m128i *)in); - tmp = _mm_xor_si128(tmp, p_k.ni.k[14]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[15]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[16]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[17]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[18]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[19]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[20]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[21]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[22]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[23]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[24]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[25]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[26]); - tmp = _mm_aesdec_si128(tmp, p_k.ni.k[27]); - _mm_storeu_si128((__m128i *)out, _mm_aesdeclast_si128(tmp, p_k.ni.k[0])); -} + void + AES::p_decrypt_aesni(const void *in, void *out) const noexcept + { + __m128i tmp = _mm_loadu_si128((const __m128i *)in); + tmp = _mm_xor_si128(tmp, p_k.ni.k[14]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[15]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[16]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[17]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[18]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[19]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[20]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[21]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[22]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[23]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[24]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[25]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[26]); + tmp = _mm_aesdec_si128(tmp, p_k.ni.k[27]); + _mm_storeu_si128((__m128i *)out, _mm_aesdeclast_si128(tmp, p_k.ni.k[0])); + } } // namespace ZeroTier diff --git a/core/AES_armcrypto.cpp b/core/AES_armcrypto.cpp index c13b25604..4bd3e2751 100644 --- a/core/AES_armcrypto.cpp +++ b/core/AES_armcrypto.cpp @@ -298,9 +298,7 @@ void AES::CTR::p_armCrypt(const uint8_t *in, uint8_t *out, unsigned int len) noe vst1q_u8(reinterpret_cast(_ctr), vrev32q_u8(dd)); } -#define ZT_INIT_ARMNEON_CRYPTO_SUBWORD(w) \ - ((uint32_t)s_sbox[w & 0xffU] + ((uint32_t)s_sbox[(w >> 8U) & 0xffU] << 8U) \ - + ((uint32_t)s_sbox[(w >> 16U) & 0xffU] << 16U) + ((uint32_t)s_sbox[(w >> 24U) & 0xffU] << 24U)) +#define ZT_INIT_ARMNEON_CRYPTO_SUBWORD(w) ((uint32_t)s_sbox[w & 0xffU] + ((uint32_t)s_sbox[(w >> 8U) & 0xffU] << 8U) + ((uint32_t)s_sbox[(w >> 16U) & 0xffU] << 16U) + ((uint32_t)s_sbox[(w >> 24U) & 0xffU] << 24U)) #define ZT_INIT_ARMNEON_CRYPTO_ROTWORD(w) (((w) << 8U) | ((w) >> 24U)) #define ZT_INIT_ARMNEON_CRYPTO_NK 8 #define ZT_INIT_ARMNEON_CRYPTO_NB 4 @@ -308,40 +306,25 @@ void AES::CTR::p_armCrypt(const uint8_t *in, uint8_t *out, unsigned int len) noe void AES::p_init_armneon_crypto(const uint8_t *key) noexcept { - static const uint8_t s_sbox[256] = { - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, - 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, - 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, - 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, - 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, - 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, - 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, - 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, - 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, - 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, - 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, - 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, - 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, - 0xb0, 0x54, 0xbb, 0x16 - }; + static const uint8_t s_sbox[256] = { 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, + 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, + 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, + 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 }; uint64_t h[2]; uint32_t *const w = reinterpret_cast(p_k.neon.ek); for (unsigned int i = 0; i < ZT_INIT_ARMNEON_CRYPTO_NK; ++i) { const unsigned int j = i * 4; - w[i] = ((uint32_t)key[j] << 24U) | ((uint32_t)key[j + 1] << 16U) | ((uint32_t)key[j + 2] << 8U) - | (uint32_t)key[j + 3]; + w[i] = ((uint32_t)key[j] << 24U) | ((uint32_t)key[j + 1] << 16U) | ((uint32_t)key[j + 2] << 8U) | (uint32_t)key[j + 3]; } - for (unsigned int i = ZT_INIT_ARMNEON_CRYPTO_NK; i < (ZT_INIT_ARMNEON_CRYPTO_NB * (ZT_INIT_ARMNEON_CRYPTO_NR + 1)); - ++i) { + for (unsigned int i = ZT_INIT_ARMNEON_CRYPTO_NK; i < (ZT_INIT_ARMNEON_CRYPTO_NB * (ZT_INIT_ARMNEON_CRYPTO_NR + 1)); ++i) { uint32_t t = w[i - 1]; const unsigned int imod = i & (ZT_INIT_ARMNEON_CRYPTO_NK - 1); if (imod == 0) { - t = ZT_INIT_ARMNEON_CRYPTO_SUBWORD(ZT_INIT_ARMNEON_CRYPTO_ROTWORD(t)) - ^ rcon[(i - 1) / ZT_INIT_ARMNEON_CRYPTO_NK]; + t = ZT_INIT_ARMNEON_CRYPTO_SUBWORD(ZT_INIT_ARMNEON_CRYPTO_ROTWORD(t)) ^ rcon[(i - 1) / ZT_INIT_ARMNEON_CRYPTO_NK]; } else if (imod == 4) { t = ZT_INIT_ARMNEON_CRYPTO_SUBWORD(t); diff --git a/core/Address.hpp b/core/Address.hpp index db4d6ff7e..2256c10e2 100644 --- a/core/Address.hpp +++ b/core/Address.hpp @@ -34,12 +34,7 @@ class Address : public TriviallyCopyable { ZT_INLINE Address(const uint64_t a) noexcept : _a(a) {} - explicit ZT_INLINE Address(const uint8_t b[5]) noexcept - : _a( - ((uint64_t)b[0] << 32U) | ((uint64_t)b[1] << 24U) | ((uint64_t)b[2] << 16U) | ((uint64_t)b[3] << 8U) - | (uint64_t)b[4]) - { - } + explicit ZT_INLINE Address(const uint8_t b[5]) noexcept : _a(((uint64_t)b[0] << 32U) | ((uint64_t)b[1] << 24U) | ((uint64_t)b[2] << 16U) | ((uint64_t)b[3] << 8U) | (uint64_t)b[4]) {} ZT_INLINE Address &operator=(const uint64_t a) noexcept { @@ -51,11 +46,7 @@ class Address : public TriviallyCopyable { * @param bits Raw address -- 5 bytes, big-endian byte order * @param len Length of array */ - ZT_INLINE void setTo(const uint8_t b[5]) noexcept - { - _a = ((uint64_t)b[0] << 32U) | ((uint64_t)b[1] << 24U) | ((uint64_t)b[2] << 16U) | ((uint64_t)b[3] << 8U) - | (uint64_t)b[4]; - } + ZT_INLINE void setTo(const uint8_t b[5]) noexcept { _a = ((uint64_t)b[0] << 32U) | ((uint64_t)b[1] << 24U) | ((uint64_t)b[2] << 16U) | ((uint64_t)b[3] << 8U) | (uint64_t)b[4]; } /** * @param bits Buffer to hold 5-byte address in big-endian byte order diff --git a/core/Buf.hpp b/core/Buf.hpp index a5425e593..964fcdd2b 100644 --- a/core/Buf.hpp +++ b/core/Buf.hpp @@ -113,12 +113,7 @@ class Buf { * Slice is almost exactly like the built-in slice data structure in Go */ struct Slice : TriviallyCopyable { - ZT_INLINE Slice(const SharedPtr &b_, const unsigned int s_, const unsigned int e_) noexcept - : b(b_) - , s(s_) - , e(e_) - { - } + ZT_INLINE Slice(const SharedPtr &b_, const unsigned int s_, const unsigned int e_) noexcept : b(b_), s(s_), e(e_) {} ZT_INLINE Slice() noexcept : b(), s(0), e(0) {} @@ -198,8 +193,7 @@ class Buf { * @tparam F Type of copyFunction (typically inferred) * @return Size of data in destination or -1 on error */ - template - ZT_INLINE int mergeMap(Buf &b, const unsigned int simpleCopyBefore, F copyFunction) const noexcept + template ZT_INLINE int mergeMap(Buf &b, const unsigned int simpleCopyBefore, F copyFunction) const noexcept { unsigned int size = 0; for (PacketVector::const_iterator s(begin()); s != end(); ++s) { @@ -236,15 +230,9 @@ class Buf { /** * Create a new buffer and copy data into it */ - ZT_INLINE Buf(const void *const data, const unsigned int len) noexcept : __refCount(0) - { - Utils::copy(unsafeData, data, len); - } + ZT_INLINE Buf(const void *const data, const unsigned int len) noexcept : __refCount(0) { Utils::copy(unsafeData, data, len); } - ZT_INLINE Buf(const Buf &b2) noexcept : __nextInPool(0), __refCount(0) - { - Utils::copy(unsafeData, b2.unsafeData); - } + ZT_INLINE Buf(const Buf &b2) noexcept : __nextInPool(0), __refCount(0) { Utils::copy(unsafeData, b2.unsafeData); } ZT_INLINE Buf &operator=(const Buf &b2) noexcept { @@ -274,10 +262,7 @@ class Buf { * @param size Size of data that should be in buffer * @return True if iterator has read past the size of the data */ - static ZT_INLINE bool readOverflow(const int &ii, const unsigned int size) noexcept - { - return ((ii - (int)size) > 0); - } + static ZT_INLINE bool readOverflow(const int &ii, const unsigned int size) noexcept { return ((ii - (int)size) > 0); } /** * Set all memory to zero @@ -324,9 +309,7 @@ class Buf { const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; ii += 4; #ifdef ZT_NO_UNALIGNED_ACCESS - return ( - ((uint32_t)unsafeData[s] << 24U) | ((uint32_t)unsafeData[s + 1] << 16U) - | ((uint32_t)unsafeData[s + 2] << 8U) | (uint32_t)unsafeData[s + 3]); + return (((uint32_t)unsafeData[s] << 24U) | ((uint32_t)unsafeData[s + 1] << 16U) | ((uint32_t)unsafeData[s + 2] << 8U) | (uint32_t)unsafeData[s + 3]); #else return Utils::ntoh(*reinterpret_cast(unsafeData + s)); #endif @@ -343,11 +326,7 @@ class Buf { const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; ii += 8; #ifdef ZT_NO_UNALIGNED_ACCESS - return ( - ((uint64_t)unsafeData[s] << 56U) | ((uint64_t)unsafeData[s + 1] << 48U) - | ((uint64_t)unsafeData[s + 2] << 40U) | ((uint64_t)unsafeData[s + 3] << 32U) - | ((uint64_t)unsafeData[s + 4] << 24U) | ((uint64_t)unsafeData[s + 5] << 16U) - | ((uint64_t)unsafeData[s + 6] << 8U) | (uint64_t)unsafeData[s + 7]); + return (((uint64_t)unsafeData[s] << 56U) | ((uint64_t)unsafeData[s + 1] << 48U) | ((uint64_t)unsafeData[s + 2] << 40U) | ((uint64_t)unsafeData[s + 3] << 32U) | ((uint64_t)unsafeData[s + 4] << 24U) | ((uint64_t)unsafeData[s + 5] << 16U) | ((uint64_t)unsafeData[s + 6] << 8U) | (uint64_t)unsafeData[s + 7]); #else return Utils::ntoh(*reinterpret_cast(unsafeData + s)); #endif @@ -506,9 +485,7 @@ class Buf { { static_assert((I + 3) < ZT_BUF_MEM_SIZE, "overflow"); #ifdef ZT_NO_UNALIGNED_ACCESS - return ( - ((uint32_t)unsafeData[I] << 24U) | ((uint32_t)unsafeData[I + 1] << 16U) - | ((uint32_t)unsafeData[I + 2] << 8U) | (uint32_t)unsafeData[I + 3]); + return (((uint32_t)unsafeData[I] << 24U) | ((uint32_t)unsafeData[I + 1] << 16U) | ((uint32_t)unsafeData[I + 2] << 8U) | (uint32_t)unsafeData[I + 3]); #else return Utils::ntoh(*reinterpret_cast(unsafeData + I)); #endif @@ -524,11 +501,7 @@ class Buf { { static_assert((I + 7) < ZT_BUF_MEM_SIZE, "overflow"); #ifdef ZT_NO_UNALIGNED_ACCESS - return ( - ((uint64_t)unsafeData[I] << 56U) | ((uint64_t)unsafeData[I + 1] << 48U) - | ((uint64_t)unsafeData[I + 2] << 40U) | ((uint64_t)unsafeData[I + 3] << 32U) - | ((uint64_t)unsafeData[I + 4] << 24U) | ((uint64_t)unsafeData[I + 5] << 16U) - | ((uint64_t)unsafeData[I + 6] << 8U) | (uint64_t)unsafeData[I + 7]); + return (((uint64_t)unsafeData[I] << 56U) | ((uint64_t)unsafeData[I + 1] << 48U) | ((uint64_t)unsafeData[I + 2] << 40U) | ((uint64_t)unsafeData[I + 3] << 32U) | ((uint64_t)unsafeData[I + 4] << 24U) | ((uint64_t)unsafeData[I + 5] << 16U) | ((uint64_t)unsafeData[I + 6] << 8U) | (uint64_t)unsafeData[I + 7]); #else return Utils::ntoh(*reinterpret_cast(unsafeData + I)); #endif @@ -571,9 +544,7 @@ class Buf { { const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; #ifdef ZT_NO_UNALIGNED_ACCESS - return ( - ((uint32_t)unsafeData[s] << 24U) | ((uint32_t)unsafeData[s + 1] << 16U) - | ((uint32_t)unsafeData[s + 2] << 8U) | (uint32_t)unsafeData[s + 3]); + return (((uint32_t)unsafeData[s] << 24U) | ((uint32_t)unsafeData[s + 1] << 16U) | ((uint32_t)unsafeData[s + 2] << 8U) | (uint32_t)unsafeData[s + 3]); #else return Utils::ntoh(*reinterpret_cast(unsafeData + s)); #endif @@ -590,11 +561,7 @@ class Buf { { const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; #ifdef ZT_NO_UNALIGNED_ACCESS - return ( - ((uint64_t)unsafeData[s] << 56U) | ((uint64_t)unsafeData[s + 1] << 48U) - | ((uint64_t)unsafeData[s + 2] << 40U) | ((uint64_t)unsafeData[s + 3] << 32U) - | ((uint64_t)unsafeData[s + 4] << 24U) | ((uint64_t)unsafeData[s + 5] << 16U) - | ((uint64_t)unsafeData[s + 6] << 8U) | (uint64_t)unsafeData[s + 7]); + return (((uint64_t)unsafeData[s] << 56U) | ((uint64_t)unsafeData[s + 1] << 48U) | ((uint64_t)unsafeData[s + 2] << 40U) | ((uint64_t)unsafeData[s + 3] << 32U) | ((uint64_t)unsafeData[s + 4] << 24U) | ((uint64_t)unsafeData[s + 5] << 16U) | ((uint64_t)unsafeData[s + 6] << 8U) | (uint64_t)unsafeData[s + 7]); #else return Utils::ntoh(*reinterpret_cast(unsafeData + s)); #endif diff --git a/core/C25519.cpp b/core/C25519.cpp index e2c2b7864..e9daf0c00 100644 --- a/core/C25519.cpp +++ b/core/C25519.cpp @@ -56,62 +56,24 @@ void fproduct(limb *output, const limb *in2, const limb *in) { output[0] = ((limb)((s32)in2[0])) * ((s32)in[0]); output[1] = ((limb)((s32)in2[0])) * ((s32)in[1]) + ((limb)((s32)in2[1])) * ((s32)in[0]); - output[2] = 2 * ((limb)((s32)in2[1])) * ((s32)in[1]) + ((limb)((s32)in2[0])) * ((s32)in[2]) - + ((limb)((s32)in2[2])) * ((s32)in[0]); - output[3] = ((limb)((s32)in2[1])) * ((s32)in[2]) + ((limb)((s32)in2[2])) * ((s32)in[1]) - + ((limb)((s32)in2[0])) * ((s32)in[3]) + ((limb)((s32)in2[3])) * ((s32)in[0]); - output[4] = ((limb)((s32)in2[2])) * ((s32)in[2]) - + 2 * (((limb)((s32)in2[1])) * ((s32)in[3]) + ((limb)((s32)in2[3])) * ((s32)in[1])) - + ((limb)((s32)in2[0])) * ((s32)in[4]) + ((limb)((s32)in2[4])) * ((s32)in[0]); - output[5] = ((limb)((s32)in2[2])) * ((s32)in[3]) + ((limb)((s32)in2[3])) * ((s32)in[2]) - + ((limb)((s32)in2[1])) * ((s32)in[4]) + ((limb)((s32)in2[4])) * ((s32)in[1]) - + ((limb)((s32)in2[0])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[0]); - output[6] = 2 - * (((limb)((s32)in2[3])) * ((s32)in[3]) + ((limb)((s32)in2[1])) * ((s32)in[5]) - + ((limb)((s32)in2[5])) * ((s32)in[1])) - + ((limb)((s32)in2[2])) * ((s32)in[4]) + ((limb)((s32)in2[4])) * ((s32)in[2]) - + ((limb)((s32)in2[0])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[0]); - output[7] = ((limb)((s32)in2[3])) * ((s32)in[4]) + ((limb)((s32)in2[4])) * ((s32)in[3]) - + ((limb)((s32)in2[2])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[2]) - + ((limb)((s32)in2[1])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[1]) - + ((limb)((s32)in2[0])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[0]); - output[8] = ((limb)((s32)in2[4])) * ((s32)in[4]) - + 2 - * (((limb)((s32)in2[3])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[3]) - + ((limb)((s32)in2[1])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[1])) - + ((limb)((s32)in2[2])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[2]) - + ((limb)((s32)in2[0])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[0]); - output[9] = ((limb)((s32)in2[4])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[4]) - + ((limb)((s32)in2[3])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[3]) - + ((limb)((s32)in2[2])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[2]) - + ((limb)((s32)in2[1])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[1]) + output[2] = 2 * ((limb)((s32)in2[1])) * ((s32)in[1]) + ((limb)((s32)in2[0])) * ((s32)in[2]) + ((limb)((s32)in2[2])) * ((s32)in[0]); + output[3] = ((limb)((s32)in2[1])) * ((s32)in[2]) + ((limb)((s32)in2[2])) * ((s32)in[1]) + ((limb)((s32)in2[0])) * ((s32)in[3]) + ((limb)((s32)in2[3])) * ((s32)in[0]); + output[4] = ((limb)((s32)in2[2])) * ((s32)in[2]) + 2 * (((limb)((s32)in2[1])) * ((s32)in[3]) + ((limb)((s32)in2[3])) * ((s32)in[1])) + ((limb)((s32)in2[0])) * ((s32)in[4]) + ((limb)((s32)in2[4])) * ((s32)in[0]); + output[5] = ((limb)((s32)in2[2])) * ((s32)in[3]) + ((limb)((s32)in2[3])) * ((s32)in[2]) + ((limb)((s32)in2[1])) * ((s32)in[4]) + ((limb)((s32)in2[4])) * ((s32)in[1]) + ((limb)((s32)in2[0])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[0]); + output[6] = 2 * (((limb)((s32)in2[3])) * ((s32)in[3]) + ((limb)((s32)in2[1])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[1])) + ((limb)((s32)in2[2])) * ((s32)in[4]) + ((limb)((s32)in2[4])) * ((s32)in[2]) + ((limb)((s32)in2[0])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[0]); + output[7] = ((limb)((s32)in2[3])) * ((s32)in[4]) + ((limb)((s32)in2[4])) * ((s32)in[3]) + ((limb)((s32)in2[2])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[2]) + ((limb)((s32)in2[1])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[1]) + ((limb)((s32)in2[0])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[0]); + output[8] = ((limb)((s32)in2[4])) * ((s32)in[4]) + 2 * (((limb)((s32)in2[3])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[3]) + ((limb)((s32)in2[1])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[1])) + ((limb)((s32)in2[2])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[2]) + ((limb)((s32)in2[0])) * ((s32)in[8]) + + ((limb)((s32)in2[8])) * ((s32)in[0]); + output[9] = ((limb)((s32)in2[4])) * ((s32)in[5]) + ((limb)((s32)in2[5])) * ((s32)in[4]) + ((limb)((s32)in2[3])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[3]) + ((limb)((s32)in2[2])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[2]) + ((limb)((s32)in2[1])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[1]) + ((limb)((s32)in2[0])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[0]); - output[10] = 2 - * (((limb)((s32)in2[5])) * ((s32)in[5]) + ((limb)((s32)in2[3])) * ((s32)in[7]) - + ((limb)((s32)in2[7])) * ((s32)in[3]) + ((limb)((s32)in2[1])) * ((s32)in[9]) - + ((limb)((s32)in2[9])) * ((s32)in[1])) - + ((limb)((s32)in2[4])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[4]) - + ((limb)((s32)in2[2])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[2]); - output[11] = ((limb)((s32)in2[5])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[5]) - + ((limb)((s32)in2[4])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[4]) - + ((limb)((s32)in2[3])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[3]) - + ((limb)((s32)in2[2])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[2]); - output[12] = ((limb)((s32)in2[6])) * ((s32)in[6]) - + 2 - * (((limb)((s32)in2[5])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[5]) - + ((limb)((s32)in2[3])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[3])) - + ((limb)((s32)in2[4])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[4]); - output[13] = ((limb)((s32)in2[6])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[6]) - + ((limb)((s32)in2[5])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[5]) - + ((limb)((s32)in2[4])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[4]); - output[14] = 2 - * (((limb)((s32)in2[7])) * ((s32)in[7]) + ((limb)((s32)in2[5])) * ((s32)in[9]) - + ((limb)((s32)in2[9])) * ((s32)in[5])) - + ((limb)((s32)in2[6])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[6]); - output[15] = ((limb)((s32)in2[7])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[7]) - + ((limb)((s32)in2[6])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[6]); - output[16] = ((limb)((s32)in2[8])) * ((s32)in[8]) - + 2 * (((limb)((s32)in2[7])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[7])); + output[10] = 2 * (((limb)((s32)in2[5])) * ((s32)in[5]) + ((limb)((s32)in2[3])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[3]) + ((limb)((s32)in2[1])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[1])) + ((limb)((s32)in2[4])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[4]) + ((limb)((s32)in2[2])) * ((s32)in[8]) + + ((limb)((s32)in2[8])) * ((s32)in[2]); + output[11] = ((limb)((s32)in2[5])) * ((s32)in[6]) + ((limb)((s32)in2[6])) * ((s32)in[5]) + ((limb)((s32)in2[4])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[4]) + ((limb)((s32)in2[3])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[3]) + ((limb)((s32)in2[2])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[2]); + output[12] = ((limb)((s32)in2[6])) * ((s32)in[6]) + 2 * (((limb)((s32)in2[5])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[5]) + ((limb)((s32)in2[3])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[3])) + ((limb)((s32)in2[4])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[4]); + output[13] = ((limb)((s32)in2[6])) * ((s32)in[7]) + ((limb)((s32)in2[7])) * ((s32)in[6]) + ((limb)((s32)in2[5])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[5]) + ((limb)((s32)in2[4])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[4]); + output[14] = 2 * (((limb)((s32)in2[7])) * ((s32)in[7]) + ((limb)((s32)in2[5])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[5])) + ((limb)((s32)in2[6])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[6]); + output[15] = ((limb)((s32)in2[7])) * ((s32)in[8]) + ((limb)((s32)in2[8])) * ((s32)in[7]) + ((limb)((s32)in2[6])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[6]); + output[16] = ((limb)((s32)in2[8])) * ((s32)in[8]) + 2 * (((limb)((s32)in2[7])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[7])); output[17] = ((limb)((s32)in2[8])) * ((s32)in[9]) + ((limb)((s32)in2[9])) * ((s32)in[8]); output[18] = 2 * ((limb)((s32)in2[9])) * ((s32)in[9]); } @@ -198,46 +160,21 @@ ZT_INLINE void fmul(limb *output, const limb *in, const limb *in2) void fsquare_inner(limb *output, const limb *in) { - output[0] = ((limb)((s32)in[0])) * ((s32)in[0]); - output[1] = 2 * ((limb)((s32)in[0])) * ((s32)in[1]); - output[2] = 2 * (((limb)((s32)in[1])) * ((s32)in[1]) + ((limb)((s32)in[0])) * ((s32)in[2])); - output[3] = 2 * (((limb)((s32)in[1])) * ((s32)in[2]) + ((limb)((s32)in[0])) * ((s32)in[3])); - output[4] = ((limb)((s32)in[2])) * ((s32)in[2]) + 4 * ((limb)((s32)in[1])) * ((s32)in[3]) - + 2 * ((limb)((s32)in[0])) * ((s32)in[4]); - output[5] = 2 - * (((limb)((s32)in[2])) * ((s32)in[3]) + ((limb)((s32)in[1])) * ((s32)in[4]) - + ((limb)((s32)in[0])) * ((s32)in[5])); - output[6] = 2 - * (((limb)((s32)in[3])) * ((s32)in[3]) + ((limb)((s32)in[2])) * ((s32)in[4]) - + ((limb)((s32)in[0])) * ((s32)in[6]) + 2 * ((limb)((s32)in[1])) * ((s32)in[5])); - output[7] = 2 - * (((limb)((s32)in[3])) * ((s32)in[4]) + ((limb)((s32)in[2])) * ((s32)in[5]) - + ((limb)((s32)in[1])) * ((s32)in[6]) + ((limb)((s32)in[0])) * ((s32)in[7])); - output[8] = ((limb)((s32)in[4])) * ((s32)in[4]) - + 2 - * (((limb)((s32)in[2])) * ((s32)in[6]) + ((limb)((s32)in[0])) * ((s32)in[8]) - + 2 * (((limb)((s32)in[1])) * ((s32)in[7]) + ((limb)((s32)in[3])) * ((s32)in[5]))); - output[9] = 2 - * (((limb)((s32)in[4])) * ((s32)in[5]) + ((limb)((s32)in[3])) * ((s32)in[6]) - + ((limb)((s32)in[2])) * ((s32)in[7]) + ((limb)((s32)in[1])) * ((s32)in[8]) - + ((limb)((s32)in[0])) * ((s32)in[9])); - output[10] = 2 - * (((limb)((s32)in[5])) * ((s32)in[5]) + ((limb)((s32)in[4])) * ((s32)in[6]) - + ((limb)((s32)in[2])) * ((s32)in[8]) - + 2 * (((limb)((s32)in[3])) * ((s32)in[7]) + ((limb)((s32)in[1])) * ((s32)in[9]))); - output[11] = 2 - * (((limb)((s32)in[5])) * ((s32)in[6]) + ((limb)((s32)in[4])) * ((s32)in[7]) - + ((limb)((s32)in[3])) * ((s32)in[8]) + ((limb)((s32)in[2])) * ((s32)in[9])); - output[12] = ((limb)((s32)in[6])) * ((s32)in[6]) - + 2 - * (((limb)((s32)in[4])) * ((s32)in[8]) - + 2 * (((limb)((s32)in[5])) * ((s32)in[7]) + ((limb)((s32)in[3])) * ((s32)in[9]))); - output[13] = 2 - * (((limb)((s32)in[6])) * ((s32)in[7]) + ((limb)((s32)in[5])) * ((s32)in[8]) - + ((limb)((s32)in[4])) * ((s32)in[9])); - output[14] = 2 - * (((limb)((s32)in[7])) * ((s32)in[7]) + ((limb)((s32)in[6])) * ((s32)in[8]) - + 2 * ((limb)((s32)in[5])) * ((s32)in[9])); + output[0] = ((limb)((s32)in[0])) * ((s32)in[0]); + output[1] = 2 * ((limb)((s32)in[0])) * ((s32)in[1]); + output[2] = 2 * (((limb)((s32)in[1])) * ((s32)in[1]) + ((limb)((s32)in[0])) * ((s32)in[2])); + output[3] = 2 * (((limb)((s32)in[1])) * ((s32)in[2]) + ((limb)((s32)in[0])) * ((s32)in[3])); + output[4] = ((limb)((s32)in[2])) * ((s32)in[2]) + 4 * ((limb)((s32)in[1])) * ((s32)in[3]) + 2 * ((limb)((s32)in[0])) * ((s32)in[4]); + output[5] = 2 * (((limb)((s32)in[2])) * ((s32)in[3]) + ((limb)((s32)in[1])) * ((s32)in[4]) + ((limb)((s32)in[0])) * ((s32)in[5])); + output[6] = 2 * (((limb)((s32)in[3])) * ((s32)in[3]) + ((limb)((s32)in[2])) * ((s32)in[4]) + ((limb)((s32)in[0])) * ((s32)in[6]) + 2 * ((limb)((s32)in[1])) * ((s32)in[5])); + output[7] = 2 * (((limb)((s32)in[3])) * ((s32)in[4]) + ((limb)((s32)in[2])) * ((s32)in[5]) + ((limb)((s32)in[1])) * ((s32)in[6]) + ((limb)((s32)in[0])) * ((s32)in[7])); + output[8] = ((limb)((s32)in[4])) * ((s32)in[4]) + 2 * (((limb)((s32)in[2])) * ((s32)in[6]) + ((limb)((s32)in[0])) * ((s32)in[8]) + 2 * (((limb)((s32)in[1])) * ((s32)in[7]) + ((limb)((s32)in[3])) * ((s32)in[5]))); + output[9] = 2 * (((limb)((s32)in[4])) * ((s32)in[5]) + ((limb)((s32)in[3])) * ((s32)in[6]) + ((limb)((s32)in[2])) * ((s32)in[7]) + ((limb)((s32)in[1])) * ((s32)in[8]) + ((limb)((s32)in[0])) * ((s32)in[9])); + output[10] = 2 * (((limb)((s32)in[5])) * ((s32)in[5]) + ((limb)((s32)in[4])) * ((s32)in[6]) + ((limb)((s32)in[2])) * ((s32)in[8]) + 2 * (((limb)((s32)in[3])) * ((s32)in[7]) + ((limb)((s32)in[1])) * ((s32)in[9]))); + output[11] = 2 * (((limb)((s32)in[5])) * ((s32)in[6]) + ((limb)((s32)in[4])) * ((s32)in[7]) + ((limb)((s32)in[3])) * ((s32)in[8]) + ((limb)((s32)in[2])) * ((s32)in[9])); + output[12] = ((limb)((s32)in[6])) * ((s32)in[6]) + 2 * (((limb)((s32)in[4])) * ((s32)in[8]) + 2 * (((limb)((s32)in[5])) * ((s32)in[7]) + ((limb)((s32)in[3])) * ((s32)in[9]))); + output[13] = 2 * (((limb)((s32)in[6])) * ((s32)in[7]) + ((limb)((s32)in[5])) * ((s32)in[8]) + ((limb)((s32)in[4])) * ((s32)in[9])); + output[14] = 2 * (((limb)((s32)in[7])) * ((s32)in[7]) + ((limb)((s32)in[6])) * ((s32)in[8]) + 2 * ((limb)((s32)in[5])) * ((s32)in[9])); output[15] = 2 * (((limb)((s32)in[7])) * ((s32)in[8]) + ((limb)((s32)in[6])) * ((s32)in[9])); output[16] = ((limb)((s32)in[8])) * ((s32)in[8]) + 4 * ((limb)((s32)in[7])) * ((s32)in[9]); output[17] = 2 * ((limb)((s32)in[8])) * ((s32)in[9]); @@ -255,11 +192,7 @@ ZT_INLINE void fsquare(limb *output, const limb *in) ZT_INLINE void fexpand(limb *output, const u8 *input) { -#define F(n, start, shift, mask) \ - output[n] = ((((limb)input[start + 0]) | ((limb)input[start + 1]) << 8 | ((limb)input[start + 2]) << 16 \ - | ((limb)input[start + 3]) << 24) \ - >> shift) \ - & mask +#define F(n, start, shift, mask) output[n] = ((((limb)input[start + 0]) | ((limb)input[start + 1]) << 8 | ((limb)input[start + 2]) << 16 | ((limb)input[start + 3]) << 24) >> shift) & mask F(0, 0, 0, 0x3ffffff); F(1, 3, 2, 0x1ffffff); F(2, 6, 3, 0x3ffffff); @@ -376,10 +309,10 @@ void fcontract(u8 *output, limb *input_limbs) input[7] <<= 3; input[8] <<= 4; input[9] <<= 6; -#define F(i, s) \ - output[s + 0] |= input[i] & 0xff; \ - output[s + 1] = (input[i] >> 8) & 0xff; \ - output[s + 2] = (input[i] >> 16) & 0xff; \ +#define F(i, s) \ + output[s + 0] |= input[i] & 0xff; \ + output[s + 1] = (input[i] >> 8) & 0xff; \ + output[s + 2] = (input[i] >> 16) & 0xff; \ output[s + 3] = (input[i] >> 24) & 0xff output[0] = 0; output[16] = 0; @@ -888,13 +821,8 @@ ZT_INLINE void fe25519_pow2523(fe25519 *r, const fe25519 *x) fe25519_mul(r, &t, x); } -const uint32_t m[32] = { - 0xED, 0xD3, 0xF5, 0x5C, 0x1A, 0x63, 0x12, 0x58, 0xD6, 0x9C, 0xF7, 0xA2, 0xDE, 0xF9, 0xDE, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 -}; -const uint32_t mu[33] = { 0x1B, 0x13, 0x2C, 0x0A, 0xA3, 0xE5, 0x9C, 0xED, 0xA7, 0x29, 0x63, - 0x08, 0x5D, 0x21, 0x06, 0x21, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F }; +const uint32_t m[32] = { 0xED, 0xD3, 0xF5, 0x5C, 0x1A, 0x63, 0x12, 0x58, 0xD6, 0x9C, 0xF7, 0xA2, 0xDE, 0xF9, 0xDE, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 }; +const uint32_t mu[33] = { 0x1B, 0x13, 0x2C, 0x0A, 0xA3, 0xE5, 0x9C, 0xED, 0xA7, 0x29, 0x63, 0x08, 0x5D, 0x21, 0x06, 0x21, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F }; ZT_INLINE uint32_t lt(uint32_t a, uint32_t b) /* 16-bit inputs */ { @@ -1075,1727 +1003,863 @@ ZT_INLINE void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, con r[126] = ((s1->v[31] >> 4) & 3) ^ (((s2->v[31] >> 4) & 3) << 2); } -static const fe25519 ge25519_ecd = { { 0xA3, 0x78, 0x59, 0x13, 0xCA, 0x4D, 0xEB, 0x75, 0xAB, 0xD8, 0x41, - 0x41, 0x4D, 0x0A, 0x70, 0x00, 0x98, 0xE8, 0x79, 0x77, 0x79, 0x40, - 0xC7, 0x8C, 0x73, 0xFE, 0x6F, 0x2B, 0xEE, 0x6C, 0x03, 0x52 } }; -static const fe25519 ge25519_ec2d = { { 0x59, 0xF1, 0xB2, 0x26, 0x94, 0x9B, 0xD6, 0xEB, 0x56, 0xB1, 0x83, - 0x82, 0x9A, 0x14, 0xE0, 0x00, 0x30, 0xD1, 0xF3, 0xEE, 0xF2, 0x80, - 0x8E, 0x19, 0xE7, 0xFC, 0xDF, 0x56, 0xDC, 0xD9, 0x06, 0x24 } }; -static const fe25519 ge25519_sqrtm1 = { { 0xB0, 0xA0, 0x0E, 0x4A, 0x27, 0x1B, 0xEE, 0xC4, 0x78, 0xE4, 0x2F, - 0xAD, 0x06, 0x18, 0x43, 0x2F, 0xA7, 0xD7, 0xFB, 0x3D, 0x99, 0x00, - 0x4D, 0x2B, 0x0B, 0xDF, 0xC1, 0x4F, 0x80, 0x24, 0x83, 0x2B } }; -static const ge25519 ge25519_base = { - { { 0x1A, 0xD5, 0x25, 0x8F, 0x60, 0x2D, 0x56, 0xC9, 0xB2, 0xA7, 0x25, 0x95, 0x60, 0xC7, 0x2C, 0x69, - 0x5C, 0xDC, 0xD6, 0xFD, 0x31, 0xE2, 0xA4, 0xC0, 0xFE, 0x53, 0x6E, 0xCD, 0xD3, 0x36, 0x69, 0x21 } }, - { { 0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0xA3, 0xDD, 0xB7, 0xA5, 0xB3, 0x8A, 0xDE, 0x6D, 0xF5, 0x52, 0x51, 0x77, 0x80, 0x9F, 0xF0, 0x20, - 0x7D, 0xE3, 0xAB, 0x64, 0x8E, 0x4E, 0xEA, 0x66, 0x65, 0x76, 0x8B, 0xD7, 0x0F, 0x5F, 0x87, 0x67 } } -}; -static const ge25519_aff ge25519_base_multiples_affine[425] = { - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x1a, 0xd5, 0x25, 0x8f, 0x60, 0x2d, 0x56, 0xc9, 0xb2, 0xa7, 0x25, 0x95, 0x60, 0xc7, 0x2c, 0x69, - 0x5c, 0xdc, 0xd6, 0xfd, 0x31, 0xe2, 0xa4, 0xc0, 0xfe, 0x53, 0x6e, 0xcd, 0xd3, 0x36, 0x69, 0x21 } }, - { { 0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66 } } }, - { { { 0x0e, 0xce, 0x43, 0x28, 0x4e, 0xa1, 0xc5, 0x83, 0x5f, 0xa4, 0xd7, 0x15, 0x45, 0x8e, 0x0d, 0x08, - 0xac, 0xe7, 0x33, 0x18, 0x7d, 0x3b, 0x04, 0x3d, 0x6c, 0x04, 0x5a, 0x9f, 0x4c, 0x38, 0xab, 0x36 } }, - { { 0xc9, 0xa3, 0xf8, 0x6a, 0xae, 0x46, 0x5f, 0x0e, 0x56, 0x51, 0x38, 0x64, 0x51, 0x0f, 0x39, 0x97, - 0x56, 0x1f, 0xa2, 0xc9, 0xe8, 0x5e, 0xa2, 0x1d, 0xc2, 0x29, 0x23, 0x09, 0xf3, 0xcd, 0x60, 0x22 } } }, - { { { 0x5c, 0xe2, 0xf8, 0xd3, 0x5f, 0x48, 0x62, 0xac, 0x86, 0x48, 0x62, 0x81, 0x19, 0x98, 0x43, 0x63, - 0x3a, 0xc8, 0xda, 0x3e, 0x74, 0xae, 0xf4, 0x1f, 0x49, 0x8f, 0x92, 0x22, 0x4a, 0x9c, 0xae, 0x67 } }, - { { 0xd4, 0xb4, 0xf5, 0x78, 0x48, 0x68, 0xc3, 0x02, 0x04, 0x03, 0x24, 0x67, 0x17, 0xec, 0x16, 0x9f, - 0xf7, 0x9e, 0x26, 0x60, 0x8e, 0xa1, 0x26, 0xa1, 0xab, 0x69, 0xee, 0x77, 0xd1, 0xb1, 0x67, 0x12 } } }, - { { { 0x70, 0xf8, 0xc9, 0xc4, 0x57, 0xa6, 0x3a, 0x49, 0x47, 0x15, 0xce, 0x93, 0xc1, 0x9e, 0x73, 0x1a, - 0xf9, 0x20, 0x35, 0x7a, 0xb8, 0xd4, 0x25, 0x83, 0x46, 0xf1, 0xcf, 0x56, 0xdb, 0xa8, 0x3d, 0x20 } }, - { { 0x2f, 0x11, 0x32, 0xca, 0x61, 0xab, 0x38, 0xdf, 0xf0, 0x0f, 0x2f, 0xea, 0x32, 0x28, 0xf2, 0x4c, - 0x6c, 0x71, 0xd5, 0x80, 0x85, 0xb8, 0x0e, 0x47, 0xe1, 0x95, 0x15, 0xcb, 0x27, 0xe8, 0xd0, 0x47 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xc8, 0x84, 0xa5, 0x08, 0xbc, 0xfd, 0x87, 0x3b, 0x99, 0x8b, 0x69, 0x80, 0x7b, 0xc6, 0x3a, 0xeb, - 0x93, 0xcf, 0x4e, 0xf8, 0x5c, 0x2d, 0x86, 0x42, 0xb6, 0x71, 0xd7, 0x97, 0x5f, 0xe1, 0x42, 0x67 } }, - { { 0xb4, 0xb9, 0x37, 0xfc, 0xa9, 0x5b, 0x2f, 0x1e, 0x93, 0xe4, 0x1e, 0x62, 0xfc, 0x3c, 0x78, 0x81, - 0x8f, 0xf3, 0x8a, 0x66, 0x09, 0x6f, 0xad, 0x6e, 0x79, 0x73, 0xe5, 0xc9, 0x00, 0x06, 0xd3, 0x21 } } }, - { { { 0xf8, 0xf9, 0x28, 0x6c, 0x6d, 0x59, 0xb2, 0x59, 0x74, 0x23, 0xbf, 0xe7, 0x33, 0x8d, 0x57, 0x09, - 0x91, 0x9c, 0x24, 0x08, 0x15, 0x2b, 0xe2, 0xb8, 0xee, 0x3a, 0xe5, 0x27, 0x06, 0x86, 0xa4, 0x23 } }, - { { 0xeb, 0x27, 0x67, 0xc1, 0x37, 0xab, 0x7a, 0xd8, 0x27, 0x9c, 0x07, 0x8e, 0xff, 0x11, 0x6a, 0xb0, - 0x78, 0x6e, 0xad, 0x3a, 0x2e, 0x0f, 0x98, 0x9f, 0x72, 0xc3, 0x7f, 0x82, 0xf2, 0x96, 0x96, 0x70 } } }, - { { { 0x81, 0x6b, 0x88, 0xe8, 0x1e, 0xc7, 0x77, 0x96, 0x0e, 0xa1, 0xa9, 0x52, 0xe0, 0xd8, 0x0e, 0x61, - 0x9e, 0x79, 0x2d, 0x95, 0x9c, 0x8d, 0x96, 0xe0, 0x06, 0x40, 0x5d, 0x87, 0x28, 0x5f, 0x98, 0x70 } }, - { { 0xf1, 0x79, 0x7b, 0xed, 0x4f, 0x44, 0xb2, 0xe7, 0x08, 0x0d, 0xc2, 0x08, 0x12, 0xd2, 0x9f, 0xdf, - 0xcd, 0x93, 0x20, 0x8a, 0xcf, 0x33, 0xca, 0x6d, 0x89, 0xb9, 0x77, 0xc8, 0x93, 0x1b, 0x4e, 0x60 } } }, - { { { 0x26, 0x4f, 0x7e, 0x97, 0xf6, 0x40, 0xdd, 0x4f, 0xfc, 0x52, 0x78, 0xf9, 0x90, 0x31, 0x03, 0xe6, - 0x7d, 0x56, 0x39, 0x0b, 0x1d, 0x56, 0x82, 0x85, 0xf9, 0x1a, 0x42, 0x17, 0x69, 0x6c, 0xcf, 0x39 } }, - { { 0x69, 0xd2, 0x06, 0x3a, 0x4f, 0x39, 0x2d, 0xf9, 0x38, 0x40, 0x8c, 0x4c, 0xe7, 0x05, 0x12, 0xb4, - 0x78, 0x8b, 0xf8, 0xc0, 0xec, 0x93, 0xde, 0x7a, 0x6b, 0xce, 0x2c, 0xe1, 0x0e, 0xa9, 0x34, 0x44 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x0b, 0xa4, 0x3c, 0xb0, 0x0f, 0x7a, 0x51, 0xf1, 0x78, 0xd6, 0xd9, 0x6a, 0xfd, 0x46, 0xe8, 0xb8, - 0xa8, 0x79, 0x1d, 0x87, 0xf9, 0x90, 0xf2, 0x9c, 0x13, 0x29, 0xf8, 0x0b, 0x20, 0x64, 0xfa, 0x05 } }, - { { 0x26, 0x09, 0xda, 0x17, 0xaf, 0x95, 0xd6, 0xfb, 0x6a, 0x19, 0x0d, 0x6e, 0x5e, 0x12, 0xf1, 0x99, - 0x4c, 0xaa, 0xa8, 0x6f, 0x79, 0x86, 0xf4, 0x72, 0x28, 0x00, 0x26, 0xf9, 0xea, 0x9e, 0x19, 0x3d } } }, - { { { 0x87, 0xdd, 0xcf, 0xf0, 0x5b, 0x49, 0xa2, 0x5d, 0x40, 0x7a, 0x23, 0x26, 0xa4, 0x7a, 0x83, 0x8a, - 0xb7, 0x8b, 0xd2, 0x1a, 0xbf, 0xea, 0x02, 0x24, 0x08, 0x5f, 0x7b, 0xa9, 0xb1, 0xbe, 0x9d, 0x37 } }, - { { 0xfc, 0x86, 0x4b, 0x08, 0xee, 0xe7, 0xa0, 0xfd, 0x21, 0x45, 0x09, 0x34, 0xc1, 0x61, 0x32, 0x23, - 0xfc, 0x9b, 0x55, 0x48, 0x53, 0x99, 0xf7, 0x63, 0xd0, 0x99, 0xce, 0x01, 0xe0, 0x9f, 0xeb, 0x28 } } }, - { { { 0x47, 0xfc, 0xab, 0x5a, 0x17, 0xf0, 0x85, 0x56, 0x3a, 0x30, 0x86, 0x20, 0x28, 0x4b, 0x8e, 0x44, - 0x74, 0x3a, 0x6e, 0x02, 0xf1, 0x32, 0x8f, 0x9f, 0x3f, 0x08, 0x35, 0xe9, 0xca, 0x16, 0x5f, 0x6e } }, - { { 0x1c, 0x59, 0x1c, 0x65, 0x5d, 0x34, 0xa4, 0x09, 0xcd, 0x13, 0x9c, 0x70, 0x7d, 0xb1, 0x2a, 0xc5, - 0x88, 0xaf, 0x0b, 0x60, 0xc7, 0x9f, 0x34, 0x8d, 0xd6, 0xb7, 0x7f, 0xea, 0x78, 0x65, 0x8d, 0x77 } } }, - { { { 0x56, 0xa5, 0xc2, 0x0c, 0xdd, 0xbc, 0xb8, 0x20, 0x6d, 0x57, 0x61, 0xb5, 0xfb, 0x78, 0xb5, 0xd4, - 0x49, 0x54, 0x90, 0x26, 0xc1, 0xcb, 0xe9, 0xe6, 0xbf, 0xec, 0x1d, 0x4e, 0xed, 0x07, 0x7e, 0x5e } }, - { { 0xc7, 0xf6, 0x6c, 0x56, 0x31, 0x20, 0x14, 0x0e, 0xa8, 0xd9, 0x27, 0xc1, 0x9a, 0x3d, 0x1b, 0x7d, - 0x0e, 0x26, 0xd3, 0x81, 0xaa, 0xeb, 0xf5, 0x6b, 0x79, 0x02, 0xf1, 0x51, 0x5c, 0x75, 0x55, 0x0f } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x0a, 0x34, 0xcd, 0x82, 0x3c, 0x33, 0x09, 0x54, 0xd2, 0x61, 0x39, 0x30, 0x9b, 0xfd, 0xef, 0x21, - 0x26, 0xd4, 0x70, 0xfa, 0xee, 0xf9, 0x31, 0x33, 0x73, 0x84, 0xd0, 0xb3, 0x81, 0xbf, 0xec, 0x2e } }, - { { 0xe8, 0x93, 0x8b, 0x00, 0x64, 0xf7, 0x9c, 0xb8, 0x74, 0xe0, 0xe6, 0x49, 0x48, 0x4d, 0x4d, 0x48, - 0xb6, 0x19, 0xa1, 0x40, 0xb7, 0xd9, 0x32, 0x41, 0x7c, 0x82, 0x37, 0xa1, 0x2d, 0xdc, 0xd2, 0x54 } } }, - { { { 0x68, 0x2b, 0x4a, 0x5b, 0xd5, 0xc7, 0x51, 0x91, 0x1d, 0xe1, 0x2a, 0x4b, 0xc4, 0x47, 0xf1, 0xbc, - 0x7a, 0xb3, 0xcb, 0xc8, 0xb6, 0x7c, 0xac, 0x90, 0x05, 0xfd, 0xf3, 0xf9, 0x52, 0x3a, 0x11, 0x6b } }, - { { 0x3d, 0xc1, 0x27, 0xf3, 0x59, 0x43, 0x95, 0x90, 0xc5, 0x96, 0x79, 0xf5, 0xf4, 0x95, 0x65, 0x29, - 0x06, 0x9c, 0x51, 0x05, 0x18, 0xda, 0xb8, 0x2e, 0x79, 0x7e, 0x69, 0x59, 0x71, 0x01, 0xeb, 0x1a } } }, - { { { 0x15, 0x06, 0x49, 0xb6, 0x8a, 0x3c, 0xea, 0x2f, 0x34, 0x20, 0x14, 0xc3, 0xaa, 0xd6, 0xaf, 0x2c, - 0x3e, 0xbd, 0x65, 0x20, 0xe2, 0x4d, 0x4b, 0x3b, 0xeb, 0x9f, 0x4a, 0xc3, 0xad, 0xa4, 0x3b, 0x60 } }, - { { 0xbc, 0x58, 0xe6, 0xc0, 0x95, 0x2a, 0x2a, 0x81, 0x9a, 0x7a, 0xf3, 0xd2, 0x06, 0xbe, 0x48, 0xbc, - 0x0c, 0xc5, 0x46, 0xe0, 0x6a, 0xd4, 0xac, 0x0f, 0xd9, 0xcc, 0x82, 0x34, 0x2c, 0xaf, 0xdb, 0x1f } } }, - { { { 0xf7, 0x17, 0x13, 0xbd, 0xfb, 0xbc, 0xd2, 0xec, 0x45, 0xb3, 0x15, 0x31, 0xe9, 0xaf, 0x82, 0x84, - 0x3d, 0x28, 0xc6, 0xfc, 0x11, 0xf5, 0x41, 0xb5, 0x8b, 0xd3, 0x12, 0x76, 0x52, 0xe7, 0x1a, 0x3c } }, - { { 0x4e, 0x36, 0x11, 0x07, 0xa2, 0x15, 0x20, 0x51, 0xc4, 0x2a, 0xc3, 0x62, 0x8b, 0x5e, 0x7f, 0xa6, - 0x0f, 0xf9, 0x45, 0x85, 0x6c, 0x11, 0x86, 0xb7, 0x7e, 0xe5, 0xd7, 0xf9, 0xc3, 0x91, 0x1c, 0x05 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xea, 0xd6, 0xde, 0x29, 0x3a, 0x00, 0xb9, 0x02, 0x59, 0xcb, 0x26, 0xc4, 0xba, 0x99, 0xb1, 0x97, - 0x2f, 0x8e, 0x00, 0x92, 0x26, 0x4f, 0x52, 0xeb, 0x47, 0x1b, 0x89, 0x8b, 0x24, 0xc0, 0x13, 0x7d } }, - { { 0xd5, 0x20, 0x5b, 0x80, 0xa6, 0x80, 0x20, 0x95, 0xc3, 0xe9, 0x9f, 0x8e, 0x87, 0x9e, 0x1e, 0x9e, - 0x7a, 0xc7, 0xcc, 0x75, 0x6c, 0xa5, 0xf1, 0x91, 0x1a, 0xa8, 0x01, 0x2c, 0xab, 0x76, 0xa9, 0x59 } } }, - { { { 0xde, 0xc9, 0xb1, 0x31, 0x10, 0x16, 0xaa, 0x35, 0x14, 0x6a, 0xd4, 0xb5, 0x34, 0x82, 0x71, 0xd2, - 0x4a, 0x5d, 0x9a, 0x1f, 0x53, 0x26, 0x3c, 0xe5, 0x8e, 0x8d, 0x33, 0x7f, 0xff, 0xa9, 0xd5, 0x17 } }, - { { 0x89, 0xaf, 0xf6, 0xa4, 0x64, 0xd5, 0x10, 0xe0, 0x1d, 0xad, 0xef, 0x44, 0xbd, 0xda, 0x83, 0xac, - 0x7a, 0xa8, 0xf0, 0x1c, 0x07, 0xf9, 0xc3, 0x43, 0x6c, 0x3f, 0xb7, 0xd3, 0x87, 0x22, 0x02, 0x73 } } }, - { { { 0x64, 0x1d, 0x49, 0x13, 0x2f, 0x71, 0xec, 0x69, 0x87, 0xd0, 0x42, 0xee, 0x13, 0xec, 0xe3, 0xed, - 0x56, 0x7b, 0xbf, 0xbd, 0x8c, 0x2f, 0x7d, 0x7b, 0x9d, 0x28, 0xec, 0x8e, 0x76, 0x2f, 0x6f, 0x08 } }, - { { 0x22, 0xf5, 0x5f, 0x4d, 0x15, 0xef, 0xfc, 0x4e, 0x57, 0x03, 0x36, 0x89, 0xf0, 0xeb, 0x5b, 0x91, - 0xd6, 0xe2, 0xca, 0x01, 0xa5, 0xee, 0x52, 0xec, 0xa0, 0x3c, 0x8f, 0x33, 0x90, 0x5a, 0x94, 0x72 } } }, - { { { 0x8a, 0x4b, 0xe7, 0x38, 0xbc, 0xda, 0xc2, 0xb0, 0x85, 0xe1, 0x4a, 0xfe, 0x2d, 0x44, 0x84, 0xcb, - 0x20, 0x6b, 0x2d, 0xbf, 0x11, 0x9c, 0xd7, 0xbe, 0xd3, 0x3e, 0x5f, 0xbf, 0x68, 0xbc, 0xa8, 0x07 } }, - { { 0x01, 0x89, 0x28, 0x22, 0x6a, 0x78, 0xaa, 0x29, 0x03, 0xc8, 0x74, 0x95, 0x03, 0x3e, 0xdc, 0xbd, - 0x07, 0x13, 0xa8, 0xa2, 0x20, 0x2d, 0xb3, 0x18, 0x70, 0x42, 0xfd, 0x7a, 0xc4, 0xd7, 0x49, 0x72 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x02, 0xff, 0x32, 0x2b, 0x5c, 0x93, 0x54, 0x32, 0xe8, 0x57, 0x54, 0x1a, 0x8b, 0x33, 0x60, 0x65, - 0xd3, 0x67, 0xa4, 0xc1, 0x26, 0xc4, 0xa4, 0x34, 0x1f, 0x9b, 0xa7, 0xa9, 0xf4, 0xd9, 0x4f, 0x5b } }, - { { 0x46, 0x8d, 0xb0, 0x33, 0x54, 0x26, 0x5b, 0x68, 0xdf, 0xbb, 0xc5, 0xec, 0xc2, 0xf9, 0x3c, 0x5a, - 0x37, 0xc1, 0x8e, 0x27, 0x47, 0xaa, 0x49, 0x5a, 0xf8, 0xfb, 0x68, 0x04, 0x23, 0xd1, 0xeb, 0x40 } } }, - { { { 0x65, 0xa5, 0x11, 0x84, 0x8a, 0x67, 0x9d, 0x9e, 0xd1, 0x44, 0x68, 0x7a, 0x34, 0xe1, 0x9f, 0xa3, - 0x54, 0xcd, 0x07, 0xca, 0x79, 0x1f, 0x54, 0x2f, 0x13, 0x70, 0x4e, 0xee, 0xa2, 0xfa, 0xe7, 0x5d } }, - { { 0x36, 0xec, 0x54, 0xf8, 0xce, 0xe4, 0x85, 0xdf, 0xf6, 0x6f, 0x1d, 0x90, 0x08, 0xbc, 0xe8, 0xc0, - 0x92, 0x2d, 0x43, 0x6b, 0x92, 0xa9, 0x8e, 0xab, 0x0a, 0x2e, 0x1c, 0x1e, 0x64, 0x23, 0x9f, 0x2c } } }, - { { { 0xa7, 0xd6, 0x2e, 0xd5, 0xcc, 0xd4, 0xcb, 0x5a, 0x3b, 0xa7, 0xf9, 0x46, 0x03, 0x1d, 0xad, 0x2b, - 0x34, 0x31, 0x90, 0x00, 0x46, 0x08, 0x82, 0x14, 0xc4, 0xe0, 0x9c, 0xf0, 0xe3, 0x55, 0x43, 0x31 } }, - { { 0x60, 0xd6, 0xdd, 0x78, 0xe6, 0xd4, 0x22, 0x42, 0x1f, 0x00, 0xf9, 0xb1, 0x6a, 0x63, 0xe2, 0x92, - 0x59, 0xd1, 0x1a, 0xb7, 0x00, 0x54, 0x29, 0xc9, 0xc1, 0xf6, 0x6f, 0x7a, 0xc5, 0x3c, 0x5f, 0x65 } } }, - { { { 0x27, 0x4f, 0xd0, 0x72, 0xb1, 0x11, 0x14, 0x27, 0x15, 0x94, 0x48, 0x81, 0x7e, 0x74, 0xd8, 0x32, - 0xd5, 0xd1, 0x11, 0x28, 0x60, 0x63, 0x36, 0x32, 0x37, 0xb5, 0x13, 0x1c, 0xa0, 0x37, 0xe3, 0x74 } }, - { { 0xf1, 0x25, 0x4e, 0x11, 0x96, 0x67, 0xe6, 0x1c, 0xc2, 0xb2, 0x53, 0xe2, 0xda, 0x85, 0xee, 0xb2, - 0x9f, 0x59, 0xf3, 0xba, 0xbd, 0xfa, 0xcf, 0x6e, 0xf9, 0xda, 0xa4, 0xb3, 0x02, 0x8f, 0x64, 0x08 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x34, 0x94, 0xf2, 0x64, 0x54, 0x47, 0x37, 0x07, 0x40, 0x8a, 0x20, 0xba, 0x4a, 0x55, 0xd7, 0x3f, - 0x47, 0xba, 0x25, 0x23, 0x14, 0xb0, 0x2c, 0xe8, 0x55, 0xa8, 0xa6, 0xef, 0x51, 0xbd, 0x6f, 0x6a } }, - { { 0x71, 0xd6, 0x16, 0x76, 0xb2, 0x06, 0xea, 0x79, 0xf5, 0xc4, 0xc3, 0x52, 0x7e, 0x61, 0xd1, 0xe1, - 0xad, 0x70, 0x78, 0x1d, 0x16, 0x11, 0xf8, 0x7c, 0x2b, 0xfc, 0x55, 0x9f, 0x52, 0xf8, 0xf5, 0x16 } } }, - { { { 0x34, 0x96, 0x9a, 0xf6, 0xc5, 0xe0, 0x14, 0x03, 0x24, 0x0e, 0x4c, 0xad, 0x9e, 0x9a, 0x70, 0x23, - 0x96, 0xb2, 0xf1, 0x2e, 0x9d, 0xc3, 0x32, 0x9b, 0x54, 0xa5, 0x73, 0xde, 0x88, 0xb1, 0x3e, 0x24 } }, - { { 0xf6, 0xe2, 0x4c, 0x1f, 0x5b, 0xb2, 0xaf, 0x82, 0xa5, 0xcf, 0x81, 0x10, 0x04, 0xef, 0xdb, 0xa2, - 0xcc, 0x24, 0xb2, 0x7e, 0x0b, 0x7a, 0xeb, 0x01, 0xd8, 0x52, 0xf4, 0x51, 0x89, 0x29, 0x79, 0x37 } } }, - { { { 0x74, 0xde, 0x12, 0xf3, 0x68, 0xb7, 0x66, 0xc3, 0xee, 0x68, 0xdc, 0x81, 0xb5, 0x55, 0x99, 0xab, - 0xd9, 0x28, 0x63, 0x6d, 0x8b, 0x40, 0x69, 0x75, 0x6c, 0xcd, 0x5c, 0x2a, 0x7e, 0x32, 0x7b, 0x29 } }, - { { 0x02, 0xcc, 0x22, 0x74, 0x4d, 0x19, 0x07, 0xc0, 0xda, 0xb5, 0x76, 0x51, 0x2a, 0xaa, 0xa6, 0x0a, - 0x5f, 0x26, 0xd4, 0xbc, 0xaf, 0x48, 0x88, 0x7f, 0x02, 0xbc, 0xf2, 0xe1, 0xcf, 0xe9, 0xdd, 0x15 } } }, - { { { 0xed, 0xb5, 0x9a, 0x8c, 0x9a, 0xdd, 0x27, 0xf4, 0x7f, 0x47, 0xd9, 0x52, 0xa7, 0xcd, 0x65, 0xa5, - 0x31, 0x22, 0xed, 0xa6, 0x63, 0x5b, 0x80, 0x4a, 0xad, 0x4d, 0xed, 0xbf, 0xee, 0x49, 0xb3, 0x06 } }, - { { 0xf8, 0x64, 0x8b, 0x60, 0x90, 0xe9, 0xde, 0x44, 0x77, 0xb9, 0x07, 0x36, 0x32, 0xc2, 0x50, 0xf5, - 0x65, 0xdf, 0x48, 0x4c, 0x37, 0xaa, 0x68, 0xab, 0x9a, 0x1f, 0x3e, 0xff, 0x89, 0x92, 0xa0, 0x07 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x7d, 0x4f, 0x9c, 0x19, 0xc0, 0x4a, 0x31, 0xec, 0xf9, 0xaa, 0xeb, 0xb2, 0x16, 0x9c, 0xa3, 0x66, - 0x5f, 0xd1, 0xd4, 0xed, 0xb8, 0x92, 0x1c, 0xab, 0xda, 0xea, 0xd9, 0x57, 0xdf, 0x4c, 0x2a, 0x48 } }, - { { 0x4b, 0xb0, 0x4e, 0x6e, 0x11, 0x3b, 0x51, 0xbd, 0x6a, 0xfd, 0xe4, 0x25, 0xa5, 0x5f, 0x11, 0x3f, - 0x98, 0x92, 0x51, 0x14, 0xc6, 0x5f, 0x3c, 0x0b, 0xa8, 0xf7, 0xc2, 0x81, 0x43, 0xde, 0x91, 0x73 } } }, - { { { 0x3c, 0x8f, 0x9f, 0x33, 0x2a, 0x1f, 0x43, 0x33, 0x8f, 0x68, 0xff, 0x1f, 0x3d, 0x73, 0x6b, 0xbf, - 0x68, 0xcc, 0x7d, 0x13, 0x6c, 0x24, 0x4b, 0xcc, 0x4d, 0x24, 0x0d, 0xfe, 0xde, 0x86, 0xad, 0x3b } }, - { { 0x79, 0x51, 0x81, 0x01, 0xdc, 0x73, 0x53, 0xe0, 0x6e, 0x9b, 0xea, 0x68, 0x3f, 0x5c, 0x14, 0x84, - 0x53, 0x8d, 0x4b, 0xc0, 0x9f, 0x9f, 0x89, 0x2b, 0x8c, 0xba, 0x86, 0xfa, 0xf2, 0xcd, 0xe3, 0x2d } } }, - { { { 0x06, 0xf9, 0x29, 0x5a, 0xdb, 0x3d, 0x84, 0x52, 0xab, 0xcc, 0x6b, 0x60, 0x9d, 0xb7, 0x4a, 0x0e, - 0x36, 0x63, 0x91, 0xad, 0xa0, 0x95, 0xb0, 0x97, 0x89, 0x4e, 0xcf, 0x7d, 0x3c, 0xe5, 0x7c, 0x28 } }, - { { 0x2e, 0x69, 0x98, 0xfd, 0xc6, 0xbd, 0xcc, 0xca, 0xdf, 0x9a, 0x44, 0x7e, 0x9d, 0xca, 0x89, 0x6d, - 0xbf, 0x27, 0xc2, 0xf8, 0xcd, 0x46, 0x00, 0x2b, 0xb5, 0x58, 0x4e, 0xb7, 0x89, 0x09, 0xe9, 0x2d } } }, - { { { 0x54, 0xbe, 0x75, 0xcb, 0x05, 0xb0, 0x54, 0xb7, 0xe7, 0x26, 0x86, 0x4a, 0xfc, 0x19, 0xcf, 0x27, - 0x46, 0xd4, 0x22, 0x96, 0x5a, 0x11, 0xe8, 0xd5, 0x1b, 0xed, 0x71, 0xc5, 0x5d, 0xc8, 0xaf, 0x45 } }, - { { 0x40, 0x7b, 0x77, 0x57, 0x49, 0x9e, 0x80, 0x39, 0x23, 0xee, 0x81, 0x0b, 0x22, 0xcf, 0xdb, 0x7a, - 0x2f, 0x14, 0xb8, 0x57, 0x8f, 0xa1, 0x39, 0x1e, 0x77, 0xfc, 0x0b, 0xa6, 0xbf, 0x8a, 0x0c, 0x6c } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x77, 0x3a, 0xd4, 0xd8, 0x27, 0xcf, 0xe8, 0xa1, 0x72, 0x9d, 0xca, 0xdd, 0x0d, 0x96, 0xda, 0x79, - 0xed, 0x56, 0x42, 0x15, 0x60, 0xc7, 0x1c, 0x6b, 0x26, 0x30, 0xf6, 0x6a, 0x95, 0x67, 0xf3, 0x0a } }, - { { 0xc5, 0x08, 0xa4, 0x2b, 0x2f, 0xbd, 0x31, 0x81, 0x2a, 0xa6, 0xb6, 0xe4, 0x00, 0x91, 0xda, 0x3d, - 0xb2, 0xb0, 0x96, 0xce, 0x8a, 0xd2, 0x8d, 0x70, 0xb3, 0xd3, 0x34, 0x01, 0x90, 0x8d, 0x10, 0x21 } } }, - { { { 0x33, 0x0d, 0xe7, 0xba, 0x4f, 0x07, 0xdf, 0x8d, 0xea, 0x7d, 0xa0, 0xc5, 0xd6, 0xb1, 0xb0, 0xe5, - 0x57, 0x1b, 0x5b, 0xf5, 0x45, 0x13, 0x14, 0x64, 0x5a, 0xeb, 0x5c, 0xfc, 0x54, 0x01, 0x76, 0x2b } }, - { { 0x02, 0x0c, 0xc2, 0xaf, 0x96, 0x36, 0xfe, 0x4a, 0xe2, 0x54, 0x20, 0x6a, 0xeb, 0xb2, 0x9f, 0x62, - 0xd7, 0xce, 0xa2, 0x3f, 0x20, 0x11, 0x34, 0x37, 0xe0, 0x42, 0xed, 0x6f, 0xf9, 0x1a, 0xc8, 0x7d } } }, - { { { 0xd8, 0xb9, 0x11, 0xe8, 0x36, 0x3f, 0x42, 0xc1, 0xca, 0xdc, 0xd3, 0xf1, 0xc8, 0x23, 0x3d, 0x4f, - 0x51, 0x7b, 0x9d, 0x8d, 0xd8, 0xe4, 0xa0, 0xaa, 0xf3, 0x04, 0xd6, 0x11, 0x93, 0xc8, 0x35, 0x45 } }, - { { 0x61, 0x36, 0xd6, 0x08, 0x90, 0xbf, 0xa7, 0x7a, 0x97, 0x6c, 0x0f, 0x84, 0xd5, 0x33, 0x2d, 0x37, - 0xc9, 0x6a, 0x80, 0x90, 0x3d, 0x0a, 0xa2, 0xaa, 0xe1, 0xb8, 0x84, 0xba, 0x61, 0x36, 0xdd, 0x69 } } }, - { { { 0x6b, 0xdb, 0x5b, 0x9c, 0xc6, 0x92, 0xbc, 0x23, 0xaf, 0xc5, 0xb8, 0x75, 0xf8, 0x42, 0xfa, 0xd6, - 0xb6, 0x84, 0x94, 0x63, 0x98, 0x93, 0x48, 0x78, 0x38, 0xcd, 0xbb, 0x18, 0x34, 0xc3, 0xdb, 0x67 } }, - { { 0x96, 0xf3, 0x3a, 0x09, 0x56, 0xb0, 0x6f, 0x7c, 0x51, 0x1e, 0x1b, 0x39, 0x48, 0xea, 0xc9, 0x0c, - 0x25, 0xa2, 0x7a, 0xca, 0xe7, 0x92, 0xfc, 0x59, 0x30, 0xa3, 0x89, 0x85, 0xdf, 0x6f, 0x43, 0x38 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x79, 0x84, 0x44, 0x19, 0xbd, 0xe9, 0x54, 0xc4, 0xc0, 0x6e, 0x2a, 0xa8, 0xa8, 0x9b, 0x43, 0xd5, - 0x71, 0x22, 0x5f, 0xdc, 0x01, 0xfa, 0xdf, 0xb3, 0xb8, 0x47, 0x4b, 0x0a, 0xa5, 0x44, 0xea, 0x29 } }, - { { 0x05, 0x90, 0x50, 0xaf, 0x63, 0x5f, 0x9d, 0x9e, 0xe1, 0x9d, 0x38, 0x97, 0x1f, 0x6c, 0xac, 0x30, - 0x46, 0xb2, 0x6a, 0x19, 0xd1, 0x4b, 0xdb, 0xbb, 0x8c, 0xda, 0x2e, 0xab, 0xc8, 0x5a, 0x77, 0x6c } } }, - { { { 0x2b, 0xbe, 0xaf, 0xa1, 0x6d, 0x2f, 0x0b, 0xb1, 0x8f, 0xe3, 0xe0, 0x38, 0xcd, 0x0b, 0x41, 0x1b, - 0x4a, 0x15, 0x07, 0xf3, 0x6f, 0xdc, 0xb8, 0xe9, 0xde, 0xb2, 0xa3, 0x40, 0x01, 0xa6, 0x45, 0x1e } }, - { { 0x76, 0x0a, 0xda, 0x8d, 0x2c, 0x07, 0x3f, 0x89, 0x7d, 0x04, 0xad, 0x43, 0x50, 0x6e, 0xd2, 0x47, - 0xcb, 0x8a, 0xe6, 0x85, 0x1a, 0x24, 0xf3, 0xd2, 0x60, 0xfd, 0xdf, 0x73, 0xa4, 0x0d, 0x73, 0x0e } } }, - { { { 0xfd, 0x67, 0x6b, 0x71, 0x9b, 0x81, 0x53, 0x39, 0x39, 0xf4, 0xb8, 0xd5, 0xc3, 0x30, 0x9b, 0x3b, - 0x7c, 0xa3, 0xf0, 0xd0, 0x84, 0x21, 0xd6, 0xbf, 0xb7, 0x4c, 0x87, 0x13, 0x45, 0x2d, 0xa7, 0x55 } }, - { { 0x5d, 0x04, 0xb3, 0x40, 0x28, 0x95, 0x2d, 0x30, 0x83, 0xec, 0x5e, 0xe4, 0xff, 0x75, 0xfe, 0x79, - 0x26, 0x9d, 0x1d, 0x36, 0xcd, 0x0a, 0x15, 0xd2, 0x24, 0x14, 0x77, 0x71, 0xd7, 0x8a, 0x1b, 0x04 } } }, - { { { 0x5d, 0x93, 0xc9, 0xbe, 0xaa, 0x90, 0xcd, 0x9b, 0xfb, 0x73, 0x7e, 0xb0, 0x64, 0x98, 0x57, 0x44, - 0x42, 0x41, 0xb1, 0xaf, 0xea, 0xc1, 0xc3, 0x22, 0xff, 0x60, 0x46, 0xcb, 0x61, 0x81, 0x70, 0x61 } }, - { { 0x0d, 0x82, 0xb9, 0xfe, 0x21, 0xcd, 0xc4, 0xf5, 0x98, 0x0c, 0x4e, 0x72, 0xee, 0x87, 0x49, 0xf8, - 0xa1, 0x95, 0xdf, 0x8f, 0x2d, 0xbd, 0x21, 0x06, 0x7c, 0x15, 0xe8, 0x12, 0x6d, 0x93, 0xd6, 0x38 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x91, 0xf7, 0x51, 0xd9, 0xef, 0x7d, 0x42, 0x01, 0x13, 0xe9, 0xb8, 0x7f, 0xa6, 0x49, 0x17, 0x64, - 0x21, 0x80, 0x83, 0x2c, 0x63, 0x4c, 0x60, 0x09, 0x59, 0x91, 0x92, 0x77, 0x39, 0x51, 0xf4, 0x48 } }, - { { 0x60, 0xd5, 0x22, 0x83, 0x08, 0x2f, 0xff, 0x99, 0x3e, 0x69, 0x6d, 0x88, 0xda, 0xe7, 0x5b, 0x52, - 0x26, 0x31, 0x2a, 0xe5, 0x89, 0xde, 0x68, 0x90, 0xb6, 0x22, 0x5a, 0xbd, 0xd3, 0x85, 0x53, 0x31 } } }, - { { { 0xd8, 0xce, 0xdc, 0xf9, 0x3c, 0x4b, 0xa2, 0x1d, 0x2c, 0x2f, 0x36, 0xbe, 0x7a, 0xfc, 0xcd, 0xbc, - 0xdc, 0xf9, 0x30, 0xbd, 0xff, 0x05, 0xc7, 0xe4, 0x8e, 0x17, 0x62, 0xf8, 0x4d, 0xa0, 0x56, 0x79 } }, - { { 0x82, 0xe7, 0xf6, 0xba, 0x53, 0x84, 0x0a, 0xa3, 0x34, 0xff, 0x3c, 0xa3, 0x6a, 0xa1, 0x37, 0xea, - 0xdd, 0xb6, 0x95, 0xb3, 0x78, 0x19, 0x76, 0x1e, 0x55, 0x2f, 0x77, 0x2e, 0x7f, 0xc1, 0xea, 0x5e } } }, - { { { 0x83, 0xe1, 0x6e, 0xa9, 0x07, 0x33, 0x3e, 0x83, 0xff, 0xcb, 0x1c, 0x9f, 0xb1, 0xa3, 0xb4, 0xc9, - 0xe1, 0x07, 0x97, 0xff, 0xf8, 0x23, 0x8f, 0xce, 0x40, 0xfd, 0x2e, 0x5e, 0xdb, 0x16, 0x43, 0x2d } }, - { { 0xba, 0x38, 0x02, 0xf7, 0x81, 0x43, 0x83, 0xa3, 0x20, 0x4f, 0x01, 0x3b, 0x8a, 0x04, 0x38, 0x31, - 0xc6, 0x0f, 0xc8, 0xdf, 0xd7, 0xfa, 0x2f, 0x88, 0x3f, 0xfc, 0x0c, 0x76, 0xc4, 0xa6, 0x45, 0x72 } } }, - { { { 0xbb, 0x0c, 0xbc, 0x6a, 0xa4, 0x97, 0x17, 0x93, 0x2d, 0x6f, 0xde, 0x72, 0x10, 0x1c, 0x08, 0x2c, - 0x0f, 0x80, 0x32, 0x68, 0x27, 0xd4, 0xab, 0xdd, 0xc5, 0x58, 0x61, 0x13, 0x6d, 0x11, 0x1e, 0x4d } }, - { { 0x1a, 0xb9, 0xc9, 0x10, 0xfb, 0x1e, 0x4e, 0xf4, 0x84, 0x4b, 0x8a, 0x5e, 0x7b, 0x4b, 0xe8, 0x43, - 0x8c, 0x8f, 0x00, 0xb5, 0x54, 0x13, 0xc5, 0x5c, 0xb6, 0x35, 0x4e, 0x9d, 0xe4, 0x5b, 0x41, 0x6d } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x15, 0x7d, 0x12, 0x48, 0x82, 0x14, 0x42, 0xcd, 0x32, 0xd4, 0x4b, 0xc1, 0x72, 0x61, 0x2a, 0x8c, - 0xec, 0xe2, 0xf8, 0x24, 0x45, 0x94, 0xe3, 0xbe, 0xdd, 0x67, 0xa8, 0x77, 0x5a, 0xae, 0x5b, 0x4b } }, - { { 0xcb, 0x77, 0x9a, 0x20, 0xde, 0xb8, 0x23, 0xd9, 0xa0, 0x0f, 0x8c, 0x7b, 0xa5, 0xcb, 0xae, 0xb6, - 0xec, 0x42, 0x67, 0x0e, 0x58, 0xa4, 0x75, 0x98, 0x21, 0x71, 0x84, 0xb3, 0xe0, 0x76, 0x94, 0x73 } } }, - { { { 0xdf, 0xfc, 0x69, 0x28, 0x23, 0x3f, 0x5b, 0xf8, 0x3b, 0x24, 0x37, 0xf3, 0x1d, 0xd5, 0x22, 0x6b, - 0xd0, 0x98, 0xa8, 0x6c, 0xcf, 0xff, 0x06, 0xe1, 0x13, 0xdf, 0xb9, 0xc1, 0x0c, 0xa9, 0xbf, 0x33 } }, - { { 0xd9, 0x81, 0xda, 0xb2, 0x4f, 0x82, 0x9d, 0x43, 0x81, 0x09, 0xf1, 0xd2, 0x01, 0xef, 0xac, 0xf4, - 0x2d, 0x7d, 0x01, 0x09, 0xf1, 0xff, 0xa5, 0x9f, 0xe5, 0xca, 0x27, 0x63, 0xdb, 0x20, 0xb1, 0x53 } } }, - { { { 0x67, 0x02, 0xe8, 0xad, 0xa9, 0x34, 0xd4, 0xf0, 0x15, 0x81, 0xaa, 0xc7, 0x4d, 0x87, 0x94, 0xea, - 0x75, 0xe7, 0x4c, 0x94, 0x04, 0x0e, 0x69, 0x87, 0xe7, 0x51, 0x91, 0x10, 0x03, 0xc7, 0xbe, 0x56 } }, - { { 0x32, 0xfb, 0x86, 0xec, 0x33, 0x6b, 0x2e, 0x51, 0x2b, 0xc8, 0xfa, 0x6c, 0x70, 0x47, 0x7e, 0xce, - 0x05, 0x0c, 0x71, 0xf3, 0xb4, 0x56, 0xa6, 0xdc, 0xcc, 0x78, 0x07, 0x75, 0xd0, 0xdd, 0xb2, 0x6a } } }, - { { { 0xc6, 0xef, 0xb9, 0xc0, 0x2b, 0x22, 0x08, 0x1e, 0x71, 0x70, 0xb3, 0x35, 0x9c, 0x7a, 0x01, 0x92, - 0x44, 0x9a, 0xf6, 0xb0, 0x58, 0x95, 0xc1, 0x9b, 0x02, 0xed, 0x2d, 0x7c, 0x34, 0x29, 0x49, 0x44 } }, - { { 0x45, 0x62, 0x1d, 0x2e, 0xff, 0x2a, 0x1c, 0x21, 0xa4, 0x25, 0x7b, 0x0d, 0x8c, 0x15, 0x39, 0xfc, - 0x8f, 0x7c, 0xa5, 0x7d, 0x1e, 0x25, 0xa3, 0x45, 0xd6, 0xab, 0xbd, 0xcb, 0xc5, 0x5e, 0x78, 0x77 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xd0, 0xd3, 0x42, 0xed, 0x1d, 0x00, 0x3c, 0x15, 0x2c, 0x9c, 0x77, 0x81, 0xd2, 0x73, 0xd1, 0x06, - 0xd5, 0xc4, 0x7f, 0x94, 0xbb, 0x92, 0x2d, 0x2c, 0x4b, 0x45, 0x4b, 0xe9, 0x2a, 0x89, 0x6b, 0x2b } }, - { { 0xd2, 0x0c, 0x88, 0xc5, 0x48, 0x4d, 0xea, 0x0d, 0x4a, 0xc9, 0x52, 0x6a, 0x61, 0x79, 0xe9, 0x76, - 0xf3, 0x85, 0x52, 0x5c, 0x1b, 0x2c, 0xe1, 0xd6, 0xc4, 0x0f, 0x18, 0x0e, 0x4e, 0xf6, 0x1c, 0x7f } } }, - { { { 0xb4, 0x04, 0x2e, 0x42, 0xcb, 0x1f, 0x2b, 0x11, 0x51, 0x7b, 0x08, 0xac, 0xaa, 0x3e, 0x9e, 0x52, - 0x60, 0xb7, 0xc2, 0x61, 0x57, 0x8c, 0x84, 0xd5, 0x18, 0xa6, 0x19, 0xfc, 0xb7, 0x75, 0x91, 0x1b } }, - { { 0xe8, 0x68, 0xca, 0x44, 0xc8, 0x38, 0x38, 0xcc, 0x53, 0x0a, 0x32, 0x35, 0xcc, 0x52, 0xcb, 0x0e, - 0xf7, 0xc5, 0xe7, 0xec, 0x3d, 0x85, 0xcc, 0x58, 0xe2, 0x17, 0x47, 0xff, 0x9f, 0xa5, 0x30, 0x17 } } }, - { { { 0xe3, 0xae, 0xc8, 0xc1, 0x71, 0x75, 0x31, 0x00, 0x37, 0x41, 0x5c, 0x0e, 0x39, 0xda, 0x73, 0xa0, - 0xc7, 0x97, 0x36, 0x6c, 0x5b, 0xf2, 0xee, 0x64, 0x0a, 0x3d, 0x89, 0x1e, 0x1d, 0x49, 0x8c, 0x37 } }, - { { 0x4c, 0xe6, 0xb0, 0xc1, 0xa5, 0x2a, 0x82, 0x09, 0x08, 0xad, 0x79, 0x9c, 0x56, 0xf6, 0xf9, 0xc1, - 0xd7, 0x7c, 0x39, 0x7f, 0x93, 0xca, 0x11, 0x55, 0xbf, 0x07, 0x1b, 0x82, 0x29, 0x69, 0x95, 0x5c } } }, - { { { 0x87, 0xee, 0xa6, 0x56, 0x9e, 0xc2, 0x9a, 0x56, 0x24, 0x42, 0x85, 0x4d, 0x98, 0x31, 0x1e, 0x60, - 0x4d, 0x87, 0x85, 0x04, 0xae, 0x46, 0x12, 0xf9, 0x8e, 0x7f, 0xe4, 0x7f, 0xf6, 0x1c, 0x37, 0x01 } }, - { { 0x73, 0x4c, 0xb6, 0xc5, 0xc4, 0xe9, 0x6c, 0x85, 0x48, 0x4a, 0x5a, 0xac, 0xd9, 0x1f, 0x43, 0xf8, - 0x62, 0x5b, 0xee, 0x98, 0x2a, 0x33, 0x8e, 0x79, 0xce, 0x61, 0x06, 0x35, 0xd8, 0xd7, 0xca, 0x71 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x72, 0xd3, 0xae, 0xa6, 0xca, 0x8f, 0xcd, 0xcc, 0x78, 0x8e, 0x19, 0x4d, 0xa7, 0xd2, 0x27, 0xe9, - 0xa4, 0x3c, 0x16, 0x5b, 0x84, 0x80, 0xf9, 0xd0, 0xcc, 0x6a, 0x1e, 0xca, 0x1e, 0x67, 0xbd, 0x63 } }, - { { 0x7b, 0x6e, 0x2a, 0xd2, 0x87, 0x48, 0xff, 0xa1, 0xca, 0xe9, 0x15, 0x85, 0xdc, 0xdb, 0x2c, 0x39, - 0x12, 0x91, 0xa9, 0x20, 0xaa, 0x4f, 0x29, 0xf4, 0x15, 0x7a, 0xd2, 0xf5, 0x32, 0xcc, 0x60, 0x04 } } }, - { { { 0xe5, 0x10, 0x47, 0x3b, 0xfa, 0x90, 0xfc, 0x30, 0xb5, 0xea, 0x6f, 0x56, 0x8f, 0xfb, 0x0e, 0xa7, - 0x3b, 0xc8, 0xb2, 0xff, 0x02, 0x7a, 0x33, 0x94, 0x93, 0x2a, 0x03, 0xe0, 0x96, 0x3a, 0x6c, 0x0f } }, - { { 0x5a, 0x63, 0x67, 0xe1, 0x9b, 0x47, 0x78, 0x9f, 0x38, 0x79, 0xac, 0x97, 0x66, 0x1d, 0x5e, 0x51, - 0xee, 0x24, 0x42, 0xe8, 0x58, 0x4b, 0x8a, 0x03, 0x75, 0x86, 0x37, 0x86, 0xe2, 0x97, 0x4e, 0x3d } } }, - { { { 0x3f, 0x75, 0x8e, 0xb4, 0xff, 0xd8, 0xdd, 0xd6, 0x37, 0x57, 0x9d, 0x6d, 0x3b, 0xbd, 0xd5, 0x60, - 0x88, 0x65, 0x9a, 0xb9, 0x4a, 0x68, 0x84, 0xa2, 0x67, 0xdd, 0x17, 0x25, 0x97, 0x04, 0x8b, 0x5e } }, - { { 0xbb, 0x40, 0x5e, 0xbc, 0x16, 0x92, 0x05, 0xc4, 0xc0, 0x4e, 0x72, 0x90, 0x0e, 0xab, 0xcf, 0x8a, - 0xed, 0xef, 0xb9, 0x2d, 0x3b, 0xf8, 0x43, 0x5b, 0xba, 0x2d, 0xeb, 0x2f, 0x52, 0xd2, 0xd1, 0x5a } } }, - { { { 0x40, 0xb4, 0xab, 0xe6, 0xad, 0x9f, 0x46, 0x69, 0x4a, 0xb3, 0x8e, 0xaa, 0xea, 0x9c, 0x8a, 0x20, - 0x16, 0x5d, 0x8c, 0x13, 0xbd, 0xf6, 0x1d, 0xc5, 0x24, 0xbd, 0x90, 0x2a, 0x1c, 0xc7, 0x13, 0x3b } }, - { { 0x54, 0xdc, 0x16, 0x0d, 0x18, 0xbe, 0x35, 0x64, 0x61, 0x52, 0x02, 0x80, 0xaf, 0x05, 0xf7, 0xa6, - 0x42, 0xd3, 0x8f, 0x2e, 0x79, 0x26, 0xa8, 0xbb, 0xb2, 0x17, 0x48, 0xb2, 0x7a, 0x0a, 0x89, 0x14 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x20, 0xa8, 0x88, 0xe3, 0x91, 0xc0, 0x6e, 0xbb, 0x8a, 0x27, 0x82, 0x51, 0x83, 0xb2, 0x28, 0xa9, - 0x83, 0xeb, 0xa6, 0xa9, 0x4d, 0x17, 0x59, 0x22, 0x54, 0x00, 0x50, 0x45, 0xcb, 0x48, 0x4b, 0x18 } }, - { { 0x33, 0x7c, 0xe7, 0x26, 0xba, 0x4d, 0x32, 0xfe, 0x53, 0xf4, 0xfa, 0x83, 0xe3, 0xa5, 0x79, 0x66, - 0x73, 0xef, 0x80, 0x23, 0x68, 0xc2, 0x60, 0xdd, 0xa9, 0x33, 0xdc, 0x03, 0x7a, 0xe0, 0xe0, 0x3e } } }, - { { { 0x34, 0x5c, 0x13, 0xfb, 0xc0, 0xe3, 0x78, 0x2b, 0x54, 0x58, 0x22, 0x9b, 0x76, 0x81, 0x7f, 0x93, - 0x9c, 0x25, 0x3c, 0xd2, 0xe9, 0x96, 0x21, 0x26, 0x08, 0xf5, 0xed, 0x95, 0x11, 0xae, 0x04, 0x5a } }, - { { 0xb9, 0xe8, 0xc5, 0x12, 0x97, 0x1f, 0x83, 0xfe, 0x3e, 0x94, 0x99, 0xd4, 0x2d, 0xf9, 0x52, 0x59, - 0x5c, 0x82, 0xa6, 0xf0, 0x75, 0x7e, 0xe8, 0xec, 0xcc, 0xac, 0x18, 0x21, 0x09, 0x67, 0x66, 0x67 } } }, - { { { 0xb3, 0x40, 0x29, 0xd1, 0xcb, 0x1b, 0x08, 0x9e, 0x9c, 0xb7, 0x53, 0xb9, 0x3b, 0x71, 0x08, 0x95, - 0x12, 0x1a, 0x58, 0xaf, 0x7e, 0x82, 0x52, 0x43, 0x4f, 0x11, 0x39, 0xf4, 0x93, 0x1a, 0x26, 0x05 } }, - { { 0x6e, 0x44, 0xa3, 0xf9, 0x64, 0xaf, 0xe7, 0x6d, 0x7d, 0xdf, 0x1e, 0xac, 0x04, 0xea, 0x3b, 0x5f, - 0x9b, 0xe8, 0x24, 0x9d, 0x0e, 0xe5, 0x2e, 0x3e, 0xdf, 0xa9, 0xf7, 0xd4, 0x50, 0x71, 0xf0, 0x78 } } }, - { { { 0x3e, 0xa8, 0x38, 0xc2, 0x57, 0x56, 0x42, 0x9a, 0xb1, 0xe2, 0xf8, 0x45, 0xaa, 0x11, 0x48, 0x5f, - 0x17, 0xc4, 0x54, 0x27, 0xdc, 0x5d, 0xaa, 0xdd, 0x41, 0xbc, 0xdf, 0x81, 0xb9, 0x53, 0xee, 0x52 } }, - { { 0xc3, 0xf1, 0xa7, 0x6d, 0xb3, 0x5f, 0x92, 0x6f, 0xcc, 0x91, 0xb8, 0x95, 0x05, 0xdf, 0x3c, 0x64, - 0x57, 0x39, 0x61, 0x51, 0xad, 0x8c, 0x38, 0x7b, 0xc8, 0xde, 0x00, 0x34, 0xbe, 0xa1, 0xb0, 0x7e } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x25, 0x24, 0x1d, 0x8a, 0x67, 0x20, 0xee, 0x42, 0xeb, 0x38, 0xed, 0x0b, 0x8b, 0xcd, 0x46, 0x9d, - 0x5e, 0x6b, 0x1e, 0x24, 0x9d, 0x12, 0x05, 0x1a, 0xcc, 0x05, 0x4e, 0x92, 0x38, 0xe1, 0x1f, 0x50 } }, - { { 0x4e, 0xee, 0x1c, 0x91, 0xe6, 0x11, 0xbd, 0x8e, 0x55, 0x1a, 0x18, 0x75, 0x66, 0xaf, 0x4d, 0x7b, - 0x0f, 0xae, 0x6d, 0x85, 0xca, 0x82, 0x58, 0x21, 0x9c, 0x18, 0xe0, 0xed, 0xec, 0x22, 0x80, 0x2f } } }, - { { { 0x68, 0x3b, 0x0a, 0x39, 0x1d, 0x6a, 0x15, 0x57, 0xfc, 0xf0, 0x63, 0x54, 0xdb, 0x39, 0xdb, 0xe8, - 0x5c, 0x64, 0xff, 0xa0, 0x09, 0x4f, 0x3b, 0xb7, 0x32, 0x60, 0x99, 0x94, 0xfd, 0x94, 0x82, 0x2d } }, - { { 0x24, 0xf6, 0x5a, 0x44, 0xf1, 0x55, 0x2c, 0xdb, 0xea, 0x7c, 0x84, 0x7c, 0x01, 0xac, 0xe3, 0xfd, - 0xc9, 0x27, 0xc1, 0x5a, 0xb9, 0xde, 0x4f, 0x5a, 0x90, 0xdd, 0xc6, 0x67, 0xaa, 0x6f, 0x8a, 0x3a } } }, - { { { 0x78, 0x52, 0x87, 0xc9, 0x97, 0x63, 0xb1, 0xdd, 0x54, 0x5f, 0xc1, 0xf8, 0xf1, 0x06, 0xa6, 0xa8, - 0xa3, 0x88, 0x82, 0xd4, 0xcb, 0xa6, 0x19, 0xdd, 0xd1, 0x11, 0x87, 0x08, 0x17, 0x4c, 0x37, 0x2a } }, - { { 0xa1, 0x0c, 0xf3, 0x08, 0x43, 0xd9, 0x24, 0x1e, 0x83, 0xa7, 0xdf, 0x91, 0xca, 0xbd, 0x69, 0x47, - 0x8d, 0x1b, 0xe2, 0xb9, 0x4e, 0xb5, 0xe1, 0x76, 0xb3, 0x1c, 0x93, 0x03, 0xce, 0x5f, 0xb3, 0x5a } } }, - { { { 0x1d, 0xda, 0xe4, 0x61, 0x03, 0x50, 0xa9, 0x8b, 0x68, 0x18, 0xef, 0xb2, 0x1c, 0x84, 0x3b, 0xa2, - 0x44, 0x95, 0xa3, 0x04, 0x3b, 0xd6, 0x99, 0x00, 0xaf, 0x76, 0x42, 0x67, 0x02, 0x7d, 0x85, 0x56 } }, - { { 0xce, 0x72, 0x0e, 0x29, 0x84, 0xb2, 0x7d, 0xd2, 0x45, 0xbe, 0x57, 0x06, 0xed, 0x7f, 0xcf, 0xed, - 0xcd, 0xef, 0x19, 0xd6, 0xbc, 0x15, 0x79, 0x64, 0xd2, 0x18, 0xe3, 0x20, 0x67, 0x3a, 0x54, 0x0b } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x52, 0xfd, 0x04, 0xc5, 0xfb, 0x99, 0xe7, 0xe8, 0xfb, 0x8c, 0xe1, 0x42, 0x03, 0xef, 0x9d, 0xd9, - 0x9e, 0x4d, 0xf7, 0x80, 0xcf, 0x2e, 0xcc, 0x9b, 0x45, 0xc9, 0x7b, 0x7a, 0xbc, 0x37, 0xa8, 0x52 } }, - { { 0x96, 0x11, 0x41, 0x8a, 0x47, 0x91, 0xfe, 0xb6, 0xda, 0x7a, 0x54, 0x63, 0xd1, 0x14, 0x35, 0x05, - 0x86, 0x8c, 0xa9, 0x36, 0x3f, 0xf2, 0x85, 0x54, 0x4e, 0x92, 0xd8, 0x85, 0x01, 0x46, 0xd6, 0x50 } } }, - { { { 0x53, 0xcd, 0xf3, 0x86, 0x40, 0xe6, 0x39, 0x42, 0x95, 0xd6, 0xcb, 0x45, 0x1a, 0x20, 0xc8, 0x45, - 0x4b, 0x32, 0x69, 0x04, 0xb1, 0xaf, 0x20, 0x46, 0xc7, 0x6b, 0x23, 0x5b, 0x69, 0xee, 0x30, 0x3f } }, - { { 0x70, 0x83, 0x47, 0xc0, 0xdb, 0x55, 0x08, 0xa8, 0x7b, 0x18, 0x6d, 0xf5, 0x04, 0x5a, 0x20, 0x0c, - 0x4a, 0x8c, 0x60, 0xae, 0xae, 0x0f, 0x64, 0x55, 0x55, 0x2e, 0xd5, 0x1d, 0x53, 0x31, 0x42, 0x41 } } }, - { { { 0xca, 0xfc, 0x88, 0x6b, 0x96, 0x78, 0x0a, 0x8b, 0x83, 0xdc, 0xbc, 0xaf, 0x40, 0xb6, 0x8d, 0x7f, - 0xef, 0xb4, 0xd1, 0x3f, 0xcc, 0xa2, 0x74, 0xc9, 0xc2, 0x92, 0x55, 0x00, 0xab, 0xdb, 0xbf, 0x4f } }, - { { 0x93, 0x1c, 0x06, 0x2d, 0x66, 0x65, 0x02, 0xa4, 0x97, 0x18, 0xfd, 0x00, 0xe7, 0xab, 0x03, 0xec, - 0xce, 0xc1, 0xbf, 0x37, 0xf8, 0x13, 0x53, 0xa5, 0xe5, 0x0c, 0x3a, 0xa8, 0x55, 0xb9, 0xff, 0x68 } } }, - { { { 0xe4, 0xe6, 0x6d, 0x30, 0x7d, 0x30, 0x35, 0xc2, 0x78, 0x87, 0xf9, 0xfc, 0x6b, 0x5a, 0xc3, 0xb7, - 0x65, 0xd8, 0x2e, 0xc7, 0xa5, 0x0c, 0xc6, 0xdc, 0x12, 0xaa, 0xd6, 0x4f, 0xc5, 0x38, 0xbc, 0x0e } }, - { { 0xe2, 0x3c, 0x76, 0x86, 0x38, 0xf2, 0x7b, 0x2c, 0x16, 0x78, 0x8d, 0xf5, 0xa4, 0x15, 0xda, 0xdb, - 0x26, 0x85, 0xa0, 0x56, 0xdd, 0x1d, 0xe3, 0xb3, 0xfd, 0x40, 0xef, 0xf2, 0xd9, 0xa1, 0xb3, 0x04 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xdb, 0x49, 0x0e, 0xe6, 0x58, 0x10, 0x7a, 0x52, 0xda, 0xb5, 0x7d, 0x37, 0x6a, 0x3e, 0xa1, 0x78, - 0xce, 0xc7, 0x1c, 0x24, 0x23, 0xdb, 0x7d, 0xfb, 0x8c, 0x8d, 0xdc, 0x30, 0x67, 0x69, 0x75, 0x3b } }, - { { 0xa9, 0xea, 0x6d, 0x16, 0x16, 0x60, 0xf4, 0x60, 0x87, 0x19, 0x44, 0x8c, 0x4a, 0x8b, 0x3e, 0xfb, - 0x16, 0x00, 0x00, 0x54, 0xa6, 0x9e, 0x9f, 0xef, 0xcf, 0xd9, 0xd2, 0x4c, 0x74, 0x31, 0xd0, 0x34 } } }, - { { { 0xa4, 0xeb, 0x04, 0xa4, 0x8c, 0x8f, 0x71, 0x27, 0x95, 0x85, 0x5d, 0x55, 0x4b, 0xb1, 0x26, 0x26, - 0xc8, 0xae, 0x6a, 0x7d, 0xa2, 0x21, 0xca, 0xce, 0x38, 0xab, 0x0f, 0xd0, 0xd5, 0x2b, 0x6b, 0x00 } }, - { { 0xe5, 0x67, 0x0c, 0xf1, 0x3a, 0x9a, 0xea, 0x09, 0x39, 0xef, 0xd1, 0x30, 0xbc, 0x33, 0xba, 0xb1, - 0x6a, 0xc5, 0x27, 0x08, 0x7f, 0x54, 0x80, 0x3d, 0xab, 0xf6, 0x15, 0x7a, 0xc2, 0x40, 0x73, 0x72 } } }, - { { { 0x84, 0x56, 0x82, 0xb6, 0x12, 0x70, 0x7f, 0xf7, 0xf0, 0xbd, 0x5b, 0xa9, 0xd5, 0xc5, 0x5f, 0x59, - 0xbf, 0x7f, 0xb3, 0x55, 0x22, 0x02, 0xc9, 0x44, 0x55, 0x87, 0x8f, 0x96, 0x98, 0x64, 0x6d, 0x15 } }, - { { 0xb0, 0x8b, 0xaa, 0x1e, 0xec, 0xc7, 0xa5, 0x8f, 0x1f, 0x92, 0x04, 0xc6, 0x05, 0xf6, 0xdf, 0xa1, - 0xcc, 0x1f, 0x81, 0xf5, 0x0e, 0x9c, 0x57, 0xdc, 0xe3, 0xbb, 0x06, 0x87, 0x1e, 0xfe, 0x23, 0x6c } } }, - { { { 0xd8, 0x2b, 0x5b, 0x16, 0xea, 0x20, 0xf1, 0xd3, 0x68, 0x8f, 0xae, 0x5b, 0xd0, 0xa9, 0x1a, 0x19, - 0xa8, 0x36, 0xfb, 0x2b, 0x57, 0x88, 0x7d, 0x90, 0xd5, 0xa6, 0xf3, 0xdc, 0x38, 0x89, 0x4e, 0x1f } }, - { { 0xcc, 0x19, 0xda, 0x9b, 0x3b, 0x43, 0x48, 0x21, 0x2e, 0x23, 0x4d, 0x3d, 0xae, 0xf8, 0x8c, 0xfc, - 0xdd, 0xa6, 0x74, 0x37, 0x65, 0xca, 0xee, 0x1a, 0x19, 0x8e, 0x9f, 0x64, 0x6f, 0x0c, 0x8b, 0x5a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x25, 0xb9, 0xc2, 0xf0, 0x72, 0xb8, 0x15, 0x16, 0xcc, 0x8d, 0x3c, 0x6f, 0x25, 0xed, 0xf4, 0x46, - 0x2e, 0x0c, 0x60, 0x0f, 0xe2, 0x84, 0x34, 0x55, 0x89, 0x59, 0x34, 0x1b, 0xf5, 0x8d, 0xfe, 0x08 } }, - { { 0xf8, 0xab, 0x93, 0xbc, 0x44, 0xba, 0x1b, 0x75, 0x4b, 0x49, 0x6f, 0xd0, 0x54, 0x2e, 0x63, 0xba, - 0xb5, 0xea, 0xed, 0x32, 0x14, 0xc9, 0x94, 0xd8, 0xc5, 0xce, 0xf4, 0x10, 0x68, 0xe0, 0x38, 0x27 } } }, - { { { 0x74, 0x1c, 0x14, 0x9b, 0xd4, 0x64, 0x61, 0x71, 0x5a, 0xb6, 0x21, 0x33, 0x4f, 0xf7, 0x8e, 0xba, - 0xa5, 0x48, 0x9a, 0xc7, 0xfa, 0x9a, 0xf0, 0xb4, 0x62, 0xad, 0xf2, 0x5e, 0xcc, 0x03, 0x24, 0x1a } }, - { { 0xf5, 0x76, 0xfd, 0xe4, 0xaf, 0xb9, 0x03, 0x59, 0xce, 0x63, 0xd2, 0x3b, 0x1f, 0xcd, 0x21, 0x0c, - 0xad, 0x44, 0xa5, 0x97, 0xac, 0x80, 0x11, 0x02, 0x9b, 0x0c, 0xe5, 0x8b, 0xcd, 0xfb, 0x79, 0x77 } } }, - { { { 0x15, 0xbe, 0x9a, 0x0d, 0xba, 0x38, 0x72, 0x20, 0x8a, 0xf5, 0xbe, 0x59, 0x93, 0x79, 0xb7, 0xf6, - 0x6a, 0x0c, 0x38, 0x27, 0x1a, 0x60, 0xf4, 0x86, 0x3b, 0xab, 0x5a, 0x00, 0xa0, 0xce, 0x21, 0x7d } }, - { { 0x6c, 0xba, 0x14, 0xc5, 0xea, 0x12, 0x9e, 0x2e, 0x82, 0x63, 0xce, 0x9b, 0x4a, 0xe7, 0x1d, 0xec, - 0xf1, 0x2e, 0x51, 0x1c, 0xf4, 0xd0, 0x69, 0x15, 0x42, 0x9d, 0xa3, 0x3f, 0x0e, 0xbf, 0xe9, 0x5c } } }, - { { { 0xe4, 0x0d, 0xf4, 0xbd, 0xee, 0x31, 0x10, 0xed, 0xcb, 0x12, 0x86, 0xad, 0xd4, 0x2f, 0x90, 0x37, - 0x32, 0xc3, 0x0b, 0x73, 0xec, 0x97, 0x85, 0xa4, 0x01, 0x1c, 0x76, 0x35, 0xfe, 0x75, 0xdd, 0x71 } }, - { { 0x11, 0xa4, 0x88, 0x9f, 0x3e, 0x53, 0x69, 0x3b, 0x1b, 0xe0, 0xf7, 0xba, 0x9b, 0xad, 0x4e, 0x81, - 0x5f, 0xb5, 0x5c, 0xae, 0xbe, 0x67, 0x86, 0x37, 0x34, 0x8e, 0x07, 0x32, 0x45, 0x4a, 0x67, 0x39 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x90, 0x70, 0x58, 0x20, 0x03, 0x1e, 0x67, 0xb2, 0xc8, 0x9b, 0x58, 0xc5, 0xb1, 0xeb, 0x2d, 0x4a, - 0xde, 0x82, 0x8c, 0xf2, 0xd2, 0x14, 0xb8, 0x70, 0x61, 0x4e, 0x73, 0xd6, 0x0b, 0x6b, 0x0d, 0x30 } }, - { { 0x81, 0xfc, 0x55, 0x5c, 0xbf, 0xa7, 0xc4, 0xbd, 0xe2, 0xf0, 0x4b, 0x8f, 0xe9, 0x7d, 0x99, 0xfa, - 0xd3, 0xab, 0xbc, 0xc7, 0x83, 0x2b, 0x04, 0x7f, 0x0c, 0x19, 0x43, 0x03, 0x3d, 0x07, 0xca, 0x40 } } }, - { { { 0xf9, 0xc8, 0xbe, 0x8c, 0x16, 0x81, 0x39, 0x96, 0xf6, 0x17, 0x58, 0xc8, 0x30, 0x58, 0xfb, 0xc2, - 0x03, 0x45, 0xd2, 0x52, 0x76, 0xe0, 0x6a, 0x26, 0x28, 0x5c, 0x88, 0x59, 0x6a, 0x5a, 0x54, 0x42 } }, - { { 0x07, 0xb5, 0x2e, 0x2c, 0x67, 0x15, 0x9b, 0xfb, 0x83, 0x69, 0x1e, 0x0f, 0xda, 0xd6, 0x29, 0xb1, - 0x60, 0xe0, 0xb2, 0xba, 0x69, 0xa2, 0x9e, 0xbd, 0xbd, 0xe0, 0x1c, 0xbd, 0xcd, 0x06, 0x64, 0x70 } } }, - { { { 0x41, 0xfa, 0x8c, 0xe1, 0x89, 0x8f, 0x27, 0xc8, 0x25, 0x8f, 0x6f, 0x5f, 0x55, 0xf8, 0xde, 0x95, - 0x6d, 0x2f, 0x75, 0x16, 0x2b, 0x4e, 0x44, 0xfd, 0x86, 0x6e, 0xe9, 0x70, 0x39, 0x76, 0x97, 0x7e } }, - { { 0x17, 0x62, 0x6b, 0x14, 0xa1, 0x7c, 0xd0, 0x79, 0x6e, 0xd8, 0x8a, 0xa5, 0x6d, 0x8c, 0x93, 0xd2, - 0x3f, 0xec, 0x44, 0x8d, 0x6e, 0x91, 0x01, 0x8c, 0x8f, 0xee, 0x01, 0x8f, 0xc0, 0xb4, 0x85, 0x0e } } }, - { { { 0x02, 0x3a, 0x70, 0x41, 0xe4, 0x11, 0x57, 0x23, 0xac, 0xe6, 0xfc, 0x54, 0x7e, 0xcd, 0xd7, 0x22, - 0xcb, 0x76, 0x9f, 0x20, 0xce, 0xa0, 0x73, 0x76, 0x51, 0x3b, 0xa4, 0xf8, 0xe3, 0x62, 0x12, 0x6c } }, - { { 0x7f, 0x00, 0x9c, 0x26, 0x0d, 0x6f, 0x48, 0x7f, 0x3a, 0x01, 0xed, 0xc5, 0x96, 0xb0, 0x1f, 0x4f, - 0xa8, 0x02, 0x62, 0x27, 0x8a, 0x50, 0x8d, 0x9a, 0x8b, 0x52, 0x0f, 0x1e, 0xcf, 0x41, 0x38, 0x19 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xf5, 0x6c, 0xd4, 0x2f, 0x0f, 0x69, 0x0f, 0x87, 0x3f, 0x61, 0x65, 0x1e, 0x35, 0x34, 0x85, 0xba, - 0x02, 0x30, 0xac, 0x25, 0x3d, 0xe2, 0x62, 0xf1, 0xcc, 0xe9, 0x1b, 0xc2, 0xef, 0x6a, 0x42, 0x57 } }, - { { 0x34, 0x1f, 0x2e, 0xac, 0xd1, 0xc7, 0x04, 0x52, 0x32, 0x66, 0xb2, 0x33, 0x73, 0x21, 0x34, 0x54, - 0xf7, 0x71, 0xed, 0x06, 0xb0, 0xff, 0xa6, 0x59, 0x6f, 0x8a, 0x4e, 0xfb, 0x02, 0xb0, 0x45, 0x6b } } }, - { { { 0xf5, 0x48, 0x0b, 0x03, 0xc5, 0x22, 0x7d, 0x80, 0x08, 0x53, 0xfe, 0x32, 0xb1, 0xa1, 0x8a, 0x74, - 0x6f, 0xbd, 0x3f, 0x85, 0xf4, 0xcf, 0xf5, 0x60, 0xaf, 0x41, 0x7e, 0x3e, 0x46, 0xa3, 0x5a, 0x20 } }, - { { 0xaa, 0x35, 0x87, 0x44, 0x63, 0x66, 0x97, 0xf8, 0x6e, 0x55, 0x0c, 0x04, 0x3e, 0x35, 0x50, 0xbf, - 0x93, 0x69, 0xd2, 0x8b, 0x05, 0x55, 0x99, 0xbe, 0xe2, 0x53, 0x61, 0xec, 0xe8, 0x08, 0x0b, 0x32 } } }, - { { { 0xb3, 0x10, 0x45, 0x02, 0x69, 0x59, 0x2e, 0x97, 0xd9, 0x64, 0xf8, 0xdb, 0x25, 0x80, 0xdc, 0xc4, - 0xd5, 0x62, 0x3c, 0xed, 0x65, 0x91, 0xad, 0xd1, 0x57, 0x81, 0x94, 0xaa, 0xa1, 0x29, 0xfc, 0x68 } }, - { { 0xdd, 0xb5, 0x7d, 0xab, 0x5a, 0x21, 0x41, 0x53, 0xbb, 0x17, 0x79, 0x0d, 0xd1, 0xa8, 0x0c, 0x0c, - 0x20, 0x88, 0x09, 0xe9, 0x84, 0xe8, 0x25, 0x11, 0x67, 0x7a, 0x8b, 0x1a, 0xe4, 0x5d, 0xe1, 0x5d } } }, - { { { 0x37, 0xea, 0xfe, 0x65, 0x3b, 0x25, 0xe8, 0xe1, 0xc2, 0xc5, 0x02, 0xa4, 0xbe, 0x98, 0x0a, 0x2b, - 0x61, 0xc1, 0x9b, 0xe2, 0xd5, 0x92, 0xe6, 0x9e, 0x7d, 0x1f, 0xca, 0x43, 0x88, 0x8b, 0x2c, 0x59 } }, - { { 0xe0, 0xb5, 0x00, 0x1d, 0x2a, 0x6f, 0xaf, 0x79, 0x86, 0x2f, 0xa6, 0x5a, 0x93, 0xd1, 0xfe, 0xae, - 0x3a, 0xee, 0xdb, 0x7c, 0x61, 0xbe, 0x7c, 0x01, 0xf9, 0xfe, 0x52, 0xdc, 0xd8, 0x52, 0xa3, 0x42 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x22, 0xaf, 0x13, 0x37, 0xbd, 0x37, 0x71, 0xac, 0x04, 0x46, 0x63, 0xac, 0xa4, 0x77, 0xed, 0x25, - 0x38, 0xe0, 0x15, 0xa8, 0x64, 0x00, 0x0d, 0xce, 0x51, 0x01, 0xa9, 0xbc, 0x0f, 0x03, 0x1c, 0x04 } }, - { { 0x89, 0xf9, 0x80, 0x07, 0xcf, 0x3f, 0xb3, 0xe9, 0xe7, 0x45, 0x44, 0x3d, 0x2a, 0x7c, 0xe9, 0xe4, - 0x16, 0x5c, 0x5e, 0x65, 0x1c, 0xc7, 0x7d, 0xc6, 0x7a, 0xfb, 0x43, 0xee, 0x25, 0x76, 0x46, 0x72 } } }, - { { { 0x02, 0xa2, 0xed, 0xf4, 0x8f, 0x6b, 0x0b, 0x3e, 0xeb, 0x35, 0x1a, 0xd5, 0x7e, 0xdb, 0x78, 0x00, - 0x96, 0x8a, 0xa0, 0xb4, 0xcf, 0x60, 0x4b, 0xd4, 0xd5, 0xf9, 0x2d, 0xbf, 0x88, 0xbd, 0x22, 0x62 } }, - { { 0x13, 0x53, 0xe4, 0x82, 0x57, 0xfa, 0x1e, 0x8f, 0x06, 0x2b, 0x90, 0xba, 0x08, 0xb6, 0x10, 0x54, - 0x4f, 0x7c, 0x1b, 0x26, 0xed, 0xda, 0x6b, 0xdd, 0x25, 0xd0, 0x4e, 0xea, 0x42, 0xbb, 0x25, 0x03 } } }, - { { { 0x51, 0x16, 0x50, 0x7c, 0xd5, 0x5d, 0xf6, 0x99, 0xe8, 0x77, 0x72, 0x4e, 0xfa, 0x62, 0xcb, 0x76, - 0x75, 0x0c, 0xe2, 0x71, 0x98, 0x92, 0xd5, 0xfa, 0x45, 0xdf, 0x5c, 0x6f, 0x1e, 0x9e, 0x28, 0x69 } }, - { { 0x0d, 0xac, 0x66, 0x6d, 0xc3, 0x8b, 0xba, 0x16, 0xb5, 0xe2, 0xa0, 0x0d, 0x0c, 0xbd, 0xa4, 0x8e, - 0x18, 0x6c, 0xf2, 0xdc, 0xf9, 0xdc, 0x4a, 0x86, 0x25, 0x95, 0x14, 0xcb, 0xd8, 0x1a, 0x04, 0x0f } } }, - { { { 0x97, 0xa5, 0xdb, 0x8b, 0x2d, 0xaa, 0x42, 0x11, 0x09, 0xf2, 0x93, 0xbb, 0xd9, 0x06, 0x84, 0x4e, - 0x11, 0xa8, 0xa0, 0x25, 0x2b, 0xa6, 0x5f, 0xae, 0xc4, 0xb4, 0x4c, 0xc8, 0xab, 0xc7, 0x3b, 0x02 } }, - { { 0xee, 0xc9, 0x29, 0x0f, 0xdf, 0x11, 0x85, 0xed, 0xce, 0x0d, 0x62, 0x2c, 0x8f, 0x4b, 0xf9, 0x04, - 0xe9, 0x06, 0x72, 0x1d, 0x37, 0x20, 0x50, 0xc9, 0x14, 0xeb, 0xec, 0x39, 0xa7, 0x97, 0x2b, 0x4d } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x69, 0xd1, 0x39, 0xbd, 0xfb, 0x33, 0xbe, 0xc4, 0xf0, 0x5c, 0xef, 0xf0, 0x56, 0x68, 0xfc, 0x97, - 0x47, 0xc8, 0x72, 0xb6, 0x53, 0xa4, 0x0a, 0x98, 0xa5, 0xb4, 0x37, 0x71, 0xcf, 0x66, 0x50, 0x6d } }, - { { 0x17, 0xa4, 0x19, 0x52, 0x11, 0x47, 0xb3, 0x5c, 0x5b, 0xa9, 0x2e, 0x22, 0xb4, 0x00, 0x52, 0xf9, - 0x57, 0x18, 0xb8, 0xbe, 0x5a, 0xe3, 0xab, 0x83, 0xc8, 0x87, 0x0a, 0x2a, 0xd8, 0x8c, 0xbb, 0x54 } } }, - { { { 0xa9, 0x62, 0x93, 0x85, 0xbe, 0xe8, 0x73, 0x4a, 0x0e, 0xb0, 0xb5, 0x2d, 0x94, 0x50, 0xaa, 0xd3, - 0xb2, 0xea, 0x9d, 0x62, 0x76, 0x3b, 0x07, 0x34, 0x4e, 0x2d, 0x70, 0xc8, 0x9a, 0x15, 0x66, 0x6b } }, - { { 0xc5, 0x96, 0xca, 0xc8, 0x22, 0x1a, 0xee, 0x5f, 0xe7, 0x31, 0x60, 0x22, 0x83, 0x08, 0x63, 0xce, - 0xb9, 0x32, 0x44, 0x58, 0x5d, 0x3a, 0x9b, 0xe4, 0x04, 0xd5, 0xef, 0x38, 0xef, 0x4b, 0xdd, 0x19 } } }, - { { { 0x4d, 0xc2, 0x17, 0x75, 0xa1, 0x68, 0xcd, 0xc3, 0xc6, 0x03, 0x44, 0xe3, 0x78, 0x09, 0x91, 0x47, - 0x3f, 0x0f, 0xe4, 0x92, 0x58, 0xfa, 0x7d, 0x1f, 0x20, 0x94, 0x58, 0x5e, 0xbc, 0x19, 0x02, 0x6f } }, - { { 0x20, 0xd6, 0xd8, 0x91, 0x54, 0xa7, 0xf3, 0x20, 0x4b, 0x34, 0x06, 0xfa, 0x30, 0xc8, 0x6f, 0x14, - 0x10, 0x65, 0x74, 0x13, 0x4e, 0xf0, 0x69, 0x26, 0xce, 0xcf, 0x90, 0xf4, 0xd0, 0xc5, 0xc8, 0x64 } } }, - { { { 0x26, 0xa2, 0x50, 0x02, 0x24, 0x72, 0xf1, 0xf0, 0x4e, 0x2d, 0x93, 0xd5, 0x08, 0xe7, 0xae, 0x38, - 0xf7, 0x18, 0xa5, 0x32, 0x34, 0xc2, 0xf0, 0xa6, 0xec, 0xb9, 0x61, 0x7b, 0x64, 0x99, 0xac, 0x71 } }, - { { 0x25, 0xcf, 0x74, 0x55, 0x1b, 0xaa, 0xa9, 0x38, 0x41, 0x40, 0xd5, 0x95, 0x95, 0xab, 0x1c, 0x5e, - 0xbc, 0x41, 0x7e, 0x14, 0x30, 0xbe, 0x13, 0x89, 0xf4, 0xe5, 0xeb, 0x28, 0xc0, 0xc2, 0x96, 0x3a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x2b, 0x77, 0x45, 0xec, 0x67, 0x76, 0x32, 0x4c, 0xb9, 0xdf, 0x25, 0x32, 0x6b, 0xcb, 0xe7, 0x14, - 0x61, 0x43, 0xee, 0xba, 0x9b, 0x71, 0xef, 0xd2, 0x48, 0x65, 0xbb, 0x1b, 0x8a, 0x13, 0x1b, 0x22 } }, - { { 0x84, 0xad, 0x0c, 0x18, 0x38, 0x5a, 0xba, 0xd0, 0x98, 0x59, 0xbf, 0x37, 0xb0, 0x4f, 0x97, 0x60, - 0x20, 0xb3, 0x9b, 0x97, 0xf6, 0x08, 0x6c, 0xa4, 0xff, 0xfb, 0xb7, 0xfa, 0x95, 0xb2, 0x51, 0x79 } } }, - { { { 0x28, 0x5c, 0x3f, 0xdb, 0x6b, 0x18, 0x3b, 0x5c, 0xd1, 0x04, 0x28, 0xde, 0x85, 0x52, 0x31, 0xb5, - 0xbb, 0xf6, 0xa9, 0xed, 0xbe, 0x28, 0x4f, 0xb3, 0x7e, 0x05, 0x6a, 0xdb, 0x95, 0x0d, 0x1b, 0x1c } }, - { { 0xd5, 0xc5, 0xc3, 0x9a, 0x0a, 0xd0, 0x31, 0x3e, 0x07, 0x36, 0x8e, 0xc0, 0x8a, 0x62, 0xb1, 0xca, - 0xd6, 0x0e, 0x1e, 0x9d, 0xef, 0xab, 0x98, 0x4d, 0xbb, 0x6c, 0x05, 0xe0, 0xe4, 0x5d, 0xbd, 0x57 } } }, - { { { 0xcc, 0x21, 0x27, 0xce, 0xfd, 0xa9, 0x94, 0x8e, 0xe1, 0xab, 0x49, 0xe0, 0x46, 0x26, 0xa1, 0xa8, - 0x8c, 0xa1, 0x99, 0x1d, 0xb4, 0x27, 0x6d, 0x2d, 0xc8, 0x39, 0x30, 0x5e, 0x37, 0x52, 0xc4, 0x6e } }, - { { 0xa9, 0x85, 0xf4, 0xe7, 0xb0, 0x15, 0x33, 0x84, 0x1b, 0x14, 0x1a, 0x02, 0xd9, 0x3b, 0xad, 0x0f, - 0x43, 0x6c, 0xea, 0x3e, 0x0f, 0x7e, 0xda, 0xdd, 0x6b, 0x4c, 0x7f, 0x6e, 0xd4, 0x6b, 0xbf, 0x0f } } }, - { { { 0x47, 0x9f, 0x7c, 0x56, 0x7c, 0x43, 0x91, 0x1c, 0xbb, 0x4e, 0x72, 0x3e, 0x64, 0xab, 0xa0, 0xa0, - 0xdf, 0xb4, 0xd8, 0x87, 0x3a, 0xbd, 0xa8, 0x48, 0xc9, 0xb8, 0xef, 0x2e, 0xad, 0x6f, 0x84, 0x4f } }, - { { 0x2d, 0x2d, 0xf0, 0x1b, 0x7e, 0x2a, 0x6c, 0xf8, 0xa9, 0x6a, 0xe1, 0xf0, 0x99, 0xa1, 0x67, 0x9a, - 0xd4, 0x13, 0xca, 0xca, 0xba, 0x27, 0x92, 0xaa, 0xa1, 0x5d, 0x50, 0xde, 0xcc, 0x40, 0x26, 0x0a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x9f, 0x3e, 0xf2, 0xb2, 0x90, 0xce, 0xdb, 0x64, 0x3e, 0x03, 0xdd, 0x37, 0x36, 0x54, 0x70, 0x76, - 0x24, 0xb5, 0x69, 0x03, 0xfc, 0xa0, 0x2b, 0x74, 0xb2, 0x05, 0x0e, 0xcc, 0xd8, 0x1f, 0x6a, 0x1f } }, - { { 0x19, 0x5e, 0x60, 0x69, 0x58, 0x86, 0xa0, 0x31, 0xbd, 0x32, 0xe9, 0x2c, 0x5c, 0xd2, 0x85, 0xba, - 0x40, 0x64, 0xa8, 0x74, 0xf8, 0x0e, 0x1c, 0xb3, 0xa9, 0x69, 0xe8, 0x1e, 0x40, 0x64, 0x99, 0x77 } } }, - { { { 0x6c, 0x32, 0x4f, 0xfd, 0xbb, 0x5c, 0xbb, 0x8d, 0x64, 0x66, 0x4a, 0x71, 0x1f, 0x79, 0xa3, 0xad, - 0x8d, 0xf9, 0xd4, 0xec, 0xcf, 0x67, 0x70, 0xfa, 0x05, 0x4a, 0x0f, 0x6e, 0xaf, 0x87, 0x0a, 0x6f } }, - { { 0xc6, 0x36, 0x6e, 0x6c, 0x8c, 0x24, 0x09, 0x60, 0xbe, 0x26, 0xd2, 0x4c, 0x5e, 0x17, 0xca, 0x5f, - 0x1d, 0xcc, 0x87, 0xe8, 0x42, 0x6a, 0xcb, 0xcb, 0x7d, 0x92, 0x05, 0x35, 0x81, 0x13, 0x60, 0x6b } } }, - { { { 0xf4, 0x15, 0xcd, 0x0f, 0x0a, 0xaf, 0x4e, 0x6b, 0x51, 0xfd, 0x14, 0xc4, 0x2e, 0x13, 0x86, 0x74, - 0x44, 0xcb, 0x66, 0x6b, 0xb6, 0x9d, 0x74, 0x56, 0x32, 0xac, 0x8d, 0x8e, 0x8c, 0x8c, 0x8c, 0x39 } }, - { { 0xca, 0x59, 0x74, 0x1a, 0x11, 0xef, 0x6d, 0xf7, 0x39, 0x5c, 0x3b, 0x1f, 0xfa, 0xe3, 0x40, 0x41, - 0x23, 0x9e, 0xf6, 0xd1, 0x21, 0xa2, 0xbf, 0xad, 0x65, 0x42, 0x6b, 0x59, 0x8a, 0xe8, 0xc5, 0x7f } } }, - { { { 0x64, 0x05, 0x7a, 0x84, 0x4a, 0x13, 0xc3, 0xf6, 0xb0, 0x6e, 0x9a, 0x6b, 0x53, 0x6b, 0x32, 0xda, - 0xd9, 0x74, 0x75, 0xc4, 0xba, 0x64, 0x3d, 0x3b, 0x08, 0xdd, 0x10, 0x46, 0xef, 0xc7, 0x90, 0x1f } }, - { { 0x7b, 0x2f, 0x3a, 0xce, 0xc8, 0xa1, 0x79, 0x3c, 0x30, 0x12, 0x44, 0x28, 0xf6, 0xbc, 0xff, 0xfd, - 0xf4, 0xc0, 0x97, 0xb0, 0xcc, 0xc3, 0x13, 0x7a, 0xb9, 0x9a, 0x16, 0xe4, 0xcb, 0x4c, 0x34, 0x63 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x07, 0x4e, 0xd3, 0x2d, 0x09, 0x33, 0x0e, 0xd2, 0x0d, 0xbe, 0x3e, 0xe7, 0xe4, 0xaa, 0xb7, 0x00, - 0x8b, 0xe8, 0xad, 0xaa, 0x7a, 0x8d, 0x34, 0x28, 0xa9, 0x81, 0x94, 0xc5, 0xe7, 0x42, 0xac, 0x47 } }, - { { 0x24, 0x89, 0x7a, 0x8f, 0xb5, 0x9b, 0xf0, 0xc2, 0x03, 0x64, 0xd0, 0x1e, 0xf5, 0xa4, 0xb2, 0xf3, - 0x74, 0xe9, 0x1a, 0x16, 0xfd, 0xcb, 0x15, 0xea, 0xeb, 0x10, 0x6c, 0x35, 0xd1, 0xc1, 0xa6, 0x28 } } }, - { { { 0xcc, 0xd5, 0x39, 0xfc, 0xa5, 0xa4, 0xad, 0x32, 0x15, 0xce, 0x19, 0xe8, 0x34, 0x2b, 0x1c, 0x60, - 0x91, 0xfc, 0x05, 0xa9, 0xb3, 0xdc, 0x80, 0x29, 0xc4, 0x20, 0x79, 0x06, 0x39, 0xc0, 0xe2, 0x22 } }, - { { 0xbb, 0xa8, 0xe1, 0x89, 0x70, 0x57, 0x18, 0x54, 0x3c, 0xf6, 0x0d, 0x82, 0x12, 0x05, 0x87, 0x96, - 0x06, 0x39, 0xe3, 0xf8, 0xb3, 0x95, 0xe5, 0xd7, 0x26, 0xbf, 0x09, 0x5a, 0x94, 0xf9, 0x1c, 0x63 } } }, - { { { 0x2b, 0x8c, 0x2d, 0x9a, 0x8b, 0x84, 0xf2, 0x56, 0xfb, 0xad, 0x2e, 0x7f, 0xb7, 0xfc, 0x30, 0xe1, - 0x35, 0x89, 0xba, 0x4d, 0xa8, 0x6d, 0xce, 0x8c, 0x8b, 0x30, 0xe0, 0xda, 0x29, 0x18, 0x11, 0x17 } }, - { { 0x19, 0xa6, 0x5a, 0x65, 0x93, 0xc3, 0xb5, 0x31, 0x22, 0x4f, 0xf3, 0xf6, 0x0f, 0xeb, 0x28, 0xc3, - 0x7c, 0xeb, 0xce, 0x86, 0xec, 0x67, 0x76, 0x6e, 0x35, 0x45, 0x7b, 0xd8, 0x6b, 0x92, 0x01, 0x65 } } }, - { { { 0x3d, 0xd5, 0x9a, 0x64, 0x73, 0x36, 0xb1, 0xd6, 0x86, 0x98, 0x42, 0x3f, 0x8a, 0xf1, 0xc7, 0xf5, - 0x42, 0xa8, 0x9c, 0x52, 0xa8, 0xdc, 0xf9, 0x24, 0x3f, 0x4a, 0xa1, 0xa4, 0x5b, 0xe8, 0x62, 0x1a } }, - { { 0xc5, 0xbd, 0xc8, 0x14, 0xd5, 0x0d, 0xeb, 0xe1, 0xa5, 0xe6, 0x83, 0x11, 0x09, 0x00, 0x1d, 0x55, - 0x83, 0x51, 0x7e, 0x75, 0x00, 0x81, 0xb9, 0xcb, 0xd8, 0xc5, 0xe5, 0xa1, 0xd9, 0x17, 0x6d, 0x1f } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xea, 0xf9, 0xe4, 0xe9, 0xe1, 0x52, 0x3f, 0x51, 0x19, 0x0d, 0xdd, 0xd9, 0x9d, 0x93, 0x31, 0x87, - 0x23, 0x09, 0xd5, 0x83, 0xeb, 0x92, 0x09, 0x76, 0x6e, 0xe3, 0xf8, 0xc0, 0xa2, 0x66, 0xb5, 0x36 } }, - { { 0x3a, 0xbb, 0x39, 0xed, 0x32, 0x02, 0xe7, 0x43, 0x7a, 0x38, 0x14, 0x84, 0xe3, 0x44, 0xd2, 0x5e, - 0x94, 0xdd, 0x78, 0x89, 0x55, 0x4c, 0x73, 0x9e, 0xe1, 0xe4, 0x3e, 0x43, 0xd0, 0x4a, 0xde, 0x1b } } }, - { { { 0xb2, 0xe7, 0x8f, 0xe3, 0xa3, 0xc5, 0xcb, 0x72, 0xee, 0x79, 0x41, 0xf8, 0xdf, 0xee, 0x65, 0xc5, - 0x45, 0x77, 0x27, 0x3c, 0xbd, 0x58, 0xd3, 0x75, 0xe2, 0x04, 0x4b, 0xbb, 0x65, 0xf3, 0xc8, 0x0f } }, - { { 0x24, 0x7b, 0x93, 0x34, 0xb5, 0xe2, 0x74, 0x48, 0xcd, 0xa0, 0x0b, 0x92, 0x97, 0x66, 0x39, 0xf4, - 0xb0, 0xe2, 0x5d, 0x39, 0x6a, 0x5b, 0x45, 0x17, 0x78, 0x1e, 0xdb, 0x91, 0x81, 0x1c, 0xf9, 0x16 } } }, - { { { 0x16, 0xdf, 0xd1, 0x5a, 0xd5, 0xe9, 0x4e, 0x58, 0x95, 0x93, 0x5f, 0x51, 0x09, 0xc3, 0x2a, 0xc9, - 0xd4, 0x55, 0x48, 0x79, 0xa4, 0xa3, 0xb2, 0xc3, 0x62, 0xaa, 0x8c, 0xe8, 0xad, 0x47, 0x39, 0x1b } }, - { { 0x46, 0xda, 0x9e, 0x51, 0x3a, 0xe6, 0xd1, 0xa6, 0xbb, 0x4d, 0x7b, 0x08, 0xbe, 0x8c, 0xd5, 0xf3, - 0x3f, 0xfd, 0xf7, 0x44, 0x80, 0x2d, 0x53, 0x4b, 0xd0, 0x87, 0x68, 0xc1, 0xb5, 0xd8, 0xf7, 0x07 } } }, - { { { 0xf4, 0x10, 0x46, 0xbe, 0xb7, 0xd2, 0xd1, 0xce, 0x5e, 0x76, 0xa2, 0xd7, 0x03, 0xdc, 0xe4, 0x81, - 0x5a, 0xf6, 0x3c, 0xde, 0xae, 0x7a, 0x9d, 0x21, 0x34, 0xa5, 0xf6, 0xa9, 0x73, 0xe2, 0x8d, 0x60 } }, - { { 0xfa, 0x44, 0x71, 0xf6, 0x41, 0xd8, 0xc6, 0x58, 0x13, 0x37, 0xeb, 0x84, 0x0f, 0x96, 0xc7, 0xdc, - 0xc8, 0xa9, 0x7a, 0x83, 0xb2, 0x2f, 0x31, 0xb1, 0x1a, 0xd8, 0x98, 0x3f, 0x11, 0xd0, 0x31, 0x3b } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x81, 0xd5, 0x34, 0x16, 0x01, 0xa3, 0x93, 0xea, 0x52, 0x94, 0xec, 0x93, 0xb7, 0x81, 0x11, 0x2d, - 0x58, 0xf9, 0xb5, 0x0a, 0xaa, 0x4f, 0xf6, 0x2e, 0x3f, 0x36, 0xbf, 0x33, 0x5a, 0xe7, 0xd1, 0x08 } }, - { { 0x1a, 0xcf, 0x42, 0xae, 0xcc, 0xb5, 0x77, 0x39, 0xc4, 0x5b, 0x5b, 0xd0, 0x26, 0x59, 0x27, 0xd0, - 0x55, 0x71, 0x12, 0x9d, 0x88, 0x3d, 0x9c, 0xea, 0x41, 0x6a, 0xf0, 0x50, 0x93, 0x93, 0xdd, 0x47 } } }, - { { { 0x6f, 0xc9, 0x51, 0x6d, 0x1c, 0xaa, 0xf5, 0xa5, 0x90, 0x3f, 0x14, 0xe2, 0x6e, 0x8e, 0x64, 0xfd, - 0xac, 0xe0, 0x4e, 0x22, 0xe5, 0xc1, 0xbc, 0x29, 0x0a, 0x6a, 0x9e, 0xa1, 0x60, 0xcb, 0x2f, 0x0b } }, - { { 0xdc, 0x39, 0x32, 0xf3, 0xa1, 0x44, 0xe9, 0xc5, 0xc3, 0x78, 0xfb, 0x95, 0x47, 0x34, 0x35, 0x34, - 0xe8, 0x25, 0xde, 0x93, 0xc6, 0xb4, 0x76, 0x6d, 0x86, 0x13, 0xc6, 0xe9, 0x68, 0xb5, 0x01, 0x63 } } }, - { { { 0x1f, 0x9a, 0x52, 0x64, 0x97, 0xd9, 0x1c, 0x08, 0x51, 0x6f, 0x26, 0x9d, 0xaa, 0x93, 0x33, 0x43, - 0xfa, 0x77, 0xe9, 0x62, 0x9b, 0x5d, 0x18, 0x75, 0xeb, 0x78, 0xf7, 0x87, 0x8f, 0x41, 0xb4, 0x4d } }, - { { 0x13, 0xa8, 0x82, 0x3e, 0xe9, 0x13, 0xad, 0xeb, 0x01, 0xca, 0xcf, 0xda, 0xcd, 0xf7, 0x6c, 0xc7, - 0x7a, 0xdc, 0x1e, 0x6e, 0xc8, 0x4e, 0x55, 0x62, 0x80, 0xea, 0x78, 0x0c, 0x86, 0xb9, 0x40, 0x51 } } }, - { { { 0x27, 0xae, 0xd3, 0x0d, 0x4c, 0x8f, 0x34, 0xea, 0x7d, 0x3c, 0xe5, 0x8a, 0xcf, 0x5b, 0x92, 0xd8, - 0x30, 0x16, 0xb4, 0xa3, 0x75, 0xff, 0xeb, 0x27, 0xc8, 0x5c, 0x6c, 0xc2, 0xee, 0x6c, 0x21, 0x0b } }, - { { 0xc3, 0xba, 0x12, 0x53, 0x2a, 0xaa, 0x77, 0xad, 0x19, 0x78, 0x55, 0x8a, 0x2e, 0x60, 0x87, 0xc2, - 0x6e, 0x91, 0x38, 0x91, 0x3f, 0x7a, 0xc5, 0x24, 0x8f, 0x51, 0xc5, 0xde, 0xb0, 0x53, 0x30, 0x56 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x02, 0xfe, 0x54, 0x12, 0x18, 0xca, 0x7d, 0xa5, 0x68, 0x43, 0xa3, 0x6d, 0x14, 0x2a, 0x6a, 0xa5, - 0x8e, 0x32, 0xe7, 0x63, 0x4f, 0xe3, 0xc6, 0x44, 0x3e, 0xab, 0x63, 0xca, 0x17, 0x86, 0x74, 0x3f } }, - { { 0x1e, 0x64, 0xc1, 0x7d, 0x52, 0xdc, 0x13, 0x5a, 0xa1, 0x9c, 0x4e, 0xee, 0x99, 0x28, 0xbb, 0x4c, - 0xee, 0xac, 0xa9, 0x1b, 0x89, 0xa2, 0x38, 0x39, 0x7b, 0xc4, 0x0f, 0x42, 0xe6, 0x89, 0xed, 0x0f } } }, - { { { 0xf3, 0x3c, 0x8c, 0x80, 0x83, 0x10, 0x8a, 0x37, 0x50, 0x9c, 0xb4, 0xdf, 0x3f, 0x8c, 0xf7, 0x23, - 0x07, 0xd6, 0xff, 0xa0, 0x82, 0x6c, 0x75, 0x3b, 0xe4, 0xb5, 0xbb, 0xe4, 0xe6, 0x50, 0xf0, 0x08 } }, - { { 0x62, 0xee, 0x75, 0x48, 0x92, 0x33, 0xf2, 0xf4, 0xad, 0x15, 0x7a, 0xa1, 0x01, 0x46, 0xa9, 0x32, - 0x06, 0x88, 0xb6, 0x36, 0x47, 0x35, 0xb9, 0xb4, 0x42, 0x85, 0x76, 0xf0, 0x48, 0x00, 0x90, 0x38 } } }, - { { { 0x51, 0x15, 0x9d, 0xc3, 0x95, 0xd1, 0x39, 0xbb, 0x64, 0x9d, 0x15, 0x81, 0xc1, 0x68, 0xd0, 0xb6, - 0xa4, 0x2c, 0x7d, 0x5e, 0x02, 0x39, 0x00, 0xe0, 0x3b, 0xa4, 0xcc, 0xca, 0x1d, 0x81, 0x24, 0x10 } }, - { { 0xe7, 0x29, 0xf9, 0x37, 0xd9, 0x46, 0x5a, 0xcd, 0x70, 0xfe, 0x4d, 0x5b, 0xbf, 0xa5, 0xcf, 0x91, - 0xf4, 0xef, 0xee, 0x8a, 0x29, 0xd0, 0xe7, 0xc4, 0x25, 0x92, 0x8a, 0xff, 0x36, 0xfc, 0xe4, 0x49 } } }, - { { { 0xbd, 0x00, 0xb9, 0x04, 0x7d, 0x35, 0xfc, 0xeb, 0xd0, 0x0b, 0x05, 0x32, 0x52, 0x7a, 0x89, 0x24, - 0x75, 0x50, 0xe1, 0x63, 0x02, 0x82, 0x8e, 0xe7, 0x85, 0x0c, 0xf2, 0x56, 0x44, 0x37, 0x83, 0x25 } }, - { { 0x8f, 0xa1, 0xce, 0xcb, 0x60, 0xda, 0x12, 0x02, 0x1e, 0x29, 0x39, 0x2a, 0x03, 0xb7, 0xeb, 0x77, - 0x40, 0xea, 0xc9, 0x2b, 0x2c, 0xd5, 0x7d, 0x7e, 0x2c, 0xc7, 0x5a, 0xfd, 0xff, 0xc4, 0xd1, 0x62 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x1d, 0x88, 0x98, 0x5b, 0x4e, 0xfc, 0x41, 0x24, 0x05, 0xe6, 0x50, 0x2b, 0xae, 0x96, 0x51, 0xd9, - 0x6b, 0x72, 0xb2, 0x33, 0x42, 0x98, 0x68, 0xbb, 0x10, 0x5a, 0x7a, 0x8c, 0x9d, 0x07, 0xb4, 0x05 } }, - { { 0x2f, 0x61, 0x9f, 0xd7, 0xa8, 0x3f, 0x83, 0x8c, 0x10, 0x69, 0x90, 0xe6, 0xcf, 0xd2, 0x63, 0xa3, - 0xe4, 0x54, 0x7e, 0xe5, 0x69, 0x13, 0x1c, 0x90, 0x57, 0xaa, 0xe9, 0x53, 0x22, 0x43, 0x29, 0x23 } } }, - { { { 0xe5, 0x1c, 0xf8, 0x0a, 0xfd, 0x2d, 0x7e, 0xf5, 0xf5, 0x70, 0x7d, 0x41, 0x6b, 0x11, 0xfe, 0xbe, - 0x99, 0xd1, 0x55, 0x29, 0x31, 0xbf, 0xc0, 0x97, 0x6c, 0xd5, 0x35, 0xcc, 0x5e, 0x8b, 0xd9, 0x69 } }, - { { 0x8e, 0x4e, 0x9f, 0x25, 0xf8, 0x81, 0x54, 0x2d, 0x0e, 0xd5, 0x54, 0x81, 0x9b, 0xa6, 0x92, 0xce, - 0x4b, 0xe9, 0x8f, 0x24, 0x3b, 0xca, 0xe0, 0x44, 0xab, 0x36, 0xfe, 0xfb, 0x87, 0xd4, 0x26, 0x3e } } }, - { { { 0x0f, 0x93, 0x9c, 0x11, 0xe7, 0xdb, 0xf1, 0xf0, 0x85, 0x43, 0x28, 0x15, 0x37, 0xdd, 0xde, 0x27, - 0xdf, 0xad, 0x3e, 0x49, 0x4f, 0xe0, 0x5b, 0xf6, 0x80, 0x59, 0x15, 0x3c, 0x85, 0xb7, 0x3e, 0x12 } }, - { { 0xf5, 0xff, 0xcc, 0xf0, 0xb4, 0x12, 0x03, 0x5f, 0xc9, 0x84, 0xcb, 0x1d, 0x17, 0xe0, 0xbc, 0xcc, - 0x03, 0x62, 0xa9, 0x8b, 0x94, 0xa6, 0xaa, 0x18, 0xcb, 0x27, 0x8d, 0x49, 0xa6, 0x17, 0x15, 0x07 } } }, - { { { 0xd9, 0xb6, 0xd4, 0x9d, 0xd4, 0x6a, 0xaf, 0x70, 0x07, 0x2c, 0x10, 0x9e, 0xbd, 0x11, 0xad, 0xe4, - 0x26, 0x33, 0x70, 0x92, 0x78, 0x1c, 0x74, 0x9f, 0x75, 0x60, 0x56, 0xf4, 0x39, 0xa8, 0xa8, 0x62 } }, - { { 0x3b, 0xbf, 0x55, 0x35, 0x61, 0x8b, 0x44, 0x97, 0xe8, 0x3a, 0x55, 0xc1, 0xc8, 0x3b, 0xfd, 0x95, - 0x29, 0x11, 0x60, 0x96, 0x1e, 0xcb, 0x11, 0x9d, 0xc2, 0x03, 0x8a, 0x1b, 0xc6, 0xd6, 0x45, 0x3d } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x7e, 0x0e, 0x50, 0xb2, 0xcc, 0x0d, 0x6b, 0xa6, 0x71, 0x5b, 0x42, 0xed, 0xbd, 0xaf, 0xac, 0xf0, - 0xfc, 0x12, 0xa2, 0x3f, 0x4e, 0xda, 0xe8, 0x11, 0xf3, 0x23, 0xe1, 0x04, 0x62, 0x03, 0x1c, 0x4e } }, - { { 0xc8, 0xb1, 0x1b, 0x6f, 0x73, 0x61, 0x3d, 0x27, 0x0d, 0x7d, 0x7a, 0x25, 0x5f, 0x73, 0x0e, 0x2f, - 0x93, 0xf6, 0x24, 0xd8, 0x4f, 0x90, 0xac, 0xa2, 0x62, 0x0a, 0xf0, 0x61, 0xd9, 0x08, 0x59, 0x6a } } }, - { { { 0x6f, 0x2d, 0x55, 0xf8, 0x2f, 0x8e, 0xf0, 0x18, 0x3b, 0xea, 0xdd, 0x26, 0x72, 0xd1, 0xf5, 0xfe, - 0xe5, 0xb8, 0xe6, 0xd3, 0x10, 0x48, 0x46, 0x49, 0x3a, 0x9f, 0x5e, 0x45, 0x6b, 0x90, 0xe8, 0x7f } }, - { { 0xd3, 0x76, 0x69, 0x33, 0x7b, 0xb9, 0x40, 0x70, 0xee, 0xa6, 0x29, 0x6b, 0xdd, 0xd0, 0x5d, 0x8d, - 0xc1, 0x3e, 0x4a, 0xea, 0x37, 0xb1, 0x03, 0x02, 0x03, 0x35, 0xf1, 0x28, 0x9d, 0xff, 0x00, 0x13 } } }, - { { { 0x7a, 0xdb, 0x12, 0xd2, 0x8a, 0x82, 0x03, 0x1b, 0x1e, 0xaf, 0xf9, 0x4b, 0x9c, 0xbe, 0xae, 0x7c, - 0xe4, 0x94, 0x2a, 0x23, 0xb3, 0x62, 0x86, 0xe7, 0xfd, 0x23, 0xaa, 0x99, 0xbd, 0x2b, 0x11, 0x6c } }, - { { 0x8d, 0xa6, 0xd5, 0xac, 0x9d, 0xcc, 0x68, 0x75, 0x7f, 0xc3, 0x4d, 0x4b, 0xdd, 0x6c, 0xbb, 0x11, - 0x5a, 0x60, 0xe5, 0xbd, 0x7d, 0x27, 0x8b, 0xda, 0xb4, 0x95, 0xf6, 0x03, 0x27, 0xa4, 0x92, 0x3f } } }, - { { { 0x22, 0xd6, 0xb5, 0x17, 0x84, 0xbf, 0x12, 0xcc, 0x23, 0x14, 0x4a, 0xdf, 0x14, 0x31, 0xbc, 0xa1, - 0xac, 0x6e, 0xab, 0xfa, 0x57, 0x11, 0x53, 0xb3, 0x27, 0xe6, 0xf9, 0x47, 0x33, 0x44, 0x34, 0x1e } }, - { { 0x79, 0xfc, 0xa6, 0xb4, 0x0b, 0x35, 0x20, 0xc9, 0x4d, 0x22, 0x84, 0xc4, 0xa9, 0x20, 0xec, 0x89, - 0x94, 0xba, 0x66, 0x56, 0x48, 0xb9, 0x87, 0x7f, 0xca, 0x1e, 0x06, 0xed, 0xa5, 0x55, 0x59, 0x29 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x56, 0xe1, 0xf5, 0xf1, 0xd5, 0xab, 0xa8, 0x2b, 0xae, 0x89, 0xf3, 0xcf, 0x56, 0x9f, 0xf2, 0x4b, - 0x31, 0xbc, 0x18, 0xa9, 0x06, 0x5b, 0xbe, 0xb4, 0x61, 0xf8, 0xb2, 0x06, 0x9c, 0x81, 0xab, 0x4c } }, - { { 0x1f, 0x68, 0x76, 0x01, 0x16, 0x38, 0x2b, 0x0f, 0x77, 0x97, 0x92, 0x67, 0x4e, 0x86, 0x6a, 0x8b, - 0xe5, 0xe8, 0x0c, 0xf7, 0x36, 0x39, 0xb5, 0x33, 0xe6, 0xcf, 0x5e, 0xbd, 0x18, 0xfb, 0x10, 0x1f } } }, - { { { 0x83, 0xf0, 0x0d, 0x63, 0xef, 0x53, 0x6b, 0xb5, 0x6b, 0xf9, 0x83, 0xcf, 0xde, 0x04, 0x22, 0x9b, - 0x2c, 0x0a, 0xe0, 0xa5, 0xd8, 0xc7, 0x9c, 0xa5, 0xa3, 0xf6, 0x6f, 0xcf, 0x90, 0x6b, 0x68, 0x7c } }, - { { 0x33, 0x15, 0xd7, 0x7f, 0x1a, 0xd5, 0x21, 0x58, 0xc4, 0x18, 0xa5, 0xf0, 0xcc, 0x73, 0xa8, 0xfd, - 0xfa, 0x18, 0xd1, 0x03, 0x91, 0x8d, 0x52, 0xd2, 0xa3, 0xa4, 0xd3, 0xb1, 0xea, 0x1d, 0x0f, 0x00 } } }, - { { { 0xcc, 0x48, 0x83, 0x90, 0xe5, 0xfd, 0x3f, 0x84, 0xaa, 0xf9, 0x8b, 0x82, 0x59, 0x24, 0x34, 0x68, - 0x4f, 0x1c, 0x23, 0xd9, 0xcc, 0x71, 0xe1, 0x7f, 0x8c, 0xaf, 0xf1, 0xee, 0x00, 0xb6, 0xa0, 0x77 } }, - { { 0xf5, 0x1a, 0x61, 0xf7, 0x37, 0x9d, 0x00, 0xf4, 0xf2, 0x69, 0x6f, 0x4b, 0x01, 0x85, 0x19, 0x45, - 0x4d, 0x7f, 0x02, 0x7c, 0x6a, 0x05, 0x47, 0x6c, 0x1f, 0x81, 0x20, 0xd4, 0xe8, 0x50, 0x27, 0x72 } } }, - { { { 0x2c, 0x3a, 0xe5, 0xad, 0xf4, 0xdd, 0x2d, 0xf7, 0x5c, 0x44, 0xb5, 0x5b, 0x21, 0xa3, 0x89, 0x5f, - 0x96, 0x45, 0xca, 0x4d, 0xa4, 0x21, 0x99, 0x70, 0xda, 0xc4, 0xc4, 0xa0, 0xe5, 0xf4, 0xec, 0x0a } }, - { { 0x07, 0x68, 0x21, 0x65, 0xe9, 0x08, 0xa0, 0x0b, 0x6a, 0x4a, 0xba, 0xb5, 0x80, 0xaf, 0xd0, 0x1b, - 0xc5, 0xf5, 0x4b, 0x73, 0x50, 0x60, 0x2d, 0x71, 0x69, 0x61, 0x0e, 0xc0, 0x20, 0x40, 0x30, 0x19 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xd0, 0x75, 0x57, 0x3b, 0xeb, 0x5c, 0x14, 0x56, 0x50, 0xc9, 0x4f, 0xb8, 0xb8, 0x1e, 0xa3, 0xf4, - 0xab, 0xf5, 0xa9, 0x20, 0x15, 0x94, 0x82, 0xda, 0x96, 0x1c, 0x9b, 0x59, 0x8c, 0xff, 0xf4, 0x51 } }, - { { 0xc1, 0x3a, 0x86, 0xd7, 0xb0, 0x06, 0x84, 0x7f, 0x1b, 0xbd, 0xd4, 0x07, 0x78, 0x80, 0x2e, 0xb1, - 0xb4, 0xee, 0x52, 0x38, 0xee, 0x9a, 0xf9, 0xf6, 0xf3, 0x41, 0x6e, 0xd4, 0x88, 0x95, 0xac, 0x35 } } }, - { { { 0x41, 0x97, 0xbf, 0x71, 0x6a, 0x9b, 0x72, 0xec, 0xf3, 0xf8, 0x6b, 0xe6, 0x0e, 0x6c, 0x69, 0xa5, - 0x2f, 0x68, 0x52, 0xd8, 0x61, 0x81, 0xc0, 0x63, 0x3f, 0xa6, 0x3c, 0x13, 0x90, 0xe6, 0x8d, 0x56 } }, - { { 0xe8, 0x39, 0x30, 0x77, 0x23, 0xb1, 0xfd, 0x1b, 0x3d, 0x3e, 0x74, 0x4d, 0x7f, 0xae, 0x5b, 0x3a, - 0xb4, 0x65, 0x0e, 0x3a, 0x43, 0xdc, 0xdc, 0x41, 0x47, 0xe6, 0xe8, 0x92, 0x09, 0x22, 0x48, 0x4c } } }, - { { { 0x85, 0x57, 0x9f, 0xb5, 0xc8, 0x06, 0xb2, 0x9f, 0x47, 0x3f, 0xf0, 0xfa, 0xe6, 0xa9, 0xb1, 0x9b, - 0x6f, 0x96, 0x7d, 0xf9, 0xa4, 0x65, 0x09, 0x75, 0x32, 0xa6, 0x6c, 0x7f, 0x47, 0x4b, 0x2f, 0x4f } }, - { { 0x34, 0xe9, 0x59, 0x93, 0x9d, 0x26, 0x80, 0x54, 0xf2, 0xcc, 0x3c, 0xc2, 0x25, 0x85, 0xe3, 0x6a, - 0xc1, 0x62, 0x04, 0xa7, 0x08, 0x32, 0x6d, 0xa1, 0x39, 0x84, 0x8a, 0x3b, 0x87, 0x5f, 0x11, 0x13 } } }, - { { { 0xda, 0x03, 0x34, 0x66, 0xc4, 0x0c, 0x73, 0x6e, 0xbc, 0x24, 0xb5, 0xf9, 0x70, 0x81, 0x52, 0xe9, - 0xf4, 0x7c, 0x23, 0xdd, 0x9f, 0xb8, 0x46, 0xef, 0x1d, 0x22, 0x55, 0x7d, 0x71, 0xc4, 0x42, 0x33 } }, - { { 0xc5, 0x37, 0x69, 0x5b, 0xa8, 0xc6, 0x9d, 0xa4, 0xfc, 0x61, 0x6e, 0x68, 0x46, 0xea, 0xd7, 0x1c, - 0x67, 0xd2, 0x7d, 0xfa, 0xf1, 0xcc, 0x54, 0x8d, 0x36, 0x35, 0xc9, 0x00, 0xdf, 0x6c, 0x67, 0x50 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x9a, 0x4d, 0x42, 0x29, 0x5d, 0xa4, 0x6b, 0x6f, 0xa8, 0x8a, 0x4d, 0x91, 0x7b, 0xd2, 0xdf, 0x36, - 0xef, 0x01, 0x22, 0xc5, 0xcc, 0x8d, 0xeb, 0x58, 0x3d, 0xb3, 0x50, 0xfc, 0x8b, 0x97, 0x96, 0x33 } }, - { { 0x93, 0x33, 0x07, 0xc8, 0x4a, 0xca, 0xd0, 0xb1, 0xab, 0xbd, 0xdd, 0xa7, 0x7c, 0xac, 0x3e, 0x45, - 0xcb, 0xcc, 0x07, 0x91, 0xbf, 0x35, 0x9d, 0xcb, 0x7d, 0x12, 0x3c, 0x11, 0x59, 0x13, 0xcf, 0x5c } } }, - { { { 0x45, 0xb8, 0x41, 0xd7, 0xab, 0x07, 0x15, 0x00, 0x8e, 0xce, 0xdf, 0xb2, 0x43, 0x5c, 0x01, 0xdc, - 0xf4, 0x01, 0x51, 0x95, 0x10, 0x5a, 0xf6, 0x24, 0x24, 0xa0, 0x19, 0x3a, 0x09, 0x2a, 0xaa, 0x3f } }, - { { 0xdc, 0x8e, 0xeb, 0xc6, 0xbf, 0xdd, 0x11, 0x7b, 0xe7, 0x47, 0xe6, 0xce, 0xe7, 0xb6, 0xc5, 0xe8, - 0x8a, 0xdc, 0x4b, 0x57, 0x15, 0x3b, 0x66, 0xca, 0x89, 0xa3, 0xfd, 0xac, 0x0d, 0xe1, 0x1d, 0x7a } } }, - { { { 0x89, 0xef, 0xbf, 0x03, 0x75, 0xd0, 0x29, 0x50, 0xcb, 0x7d, 0xd6, 0xbe, 0xad, 0x5f, 0x7b, 0x00, - 0x32, 0xaa, 0x98, 0xed, 0x3f, 0x8f, 0x92, 0xcb, 0x81, 0x56, 0x01, 0x63, 0x64, 0xa3, 0x38, 0x39 } }, - { { 0x8b, 0xa4, 0xd6, 0x50, 0xb4, 0xaa, 0x5d, 0x64, 0x64, 0x76, 0x2e, 0xa1, 0xa6, 0xb3, 0xb8, 0x7c, - 0x7a, 0x56, 0xf5, 0x5c, 0x4e, 0x84, 0x5c, 0xfb, 0xdd, 0xca, 0x48, 0x8b, 0x48, 0xb9, 0xba, 0x34 } } }, - { { { 0xc5, 0xe3, 0xe8, 0xae, 0x17, 0x27, 0xe3, 0x64, 0x60, 0x71, 0x47, 0x29, 0x02, 0x0f, 0x92, 0x5d, - 0x10, 0x93, 0xc8, 0x0e, 0xa1, 0xed, 0xba, 0xa9, 0x96, 0x1c, 0xc5, 0x76, 0x30, 0xcd, 0xf9, 0x30 } }, - { { 0x95, 0xb0, 0xbd, 0x8c, 0xbc, 0xa7, 0x4f, 0x7e, 0xfd, 0x4e, 0x3a, 0xbf, 0x5f, 0x04, 0x79, 0x80, - 0x2b, 0x5a, 0x9f, 0x4f, 0x68, 0x21, 0x19, 0x71, 0xc6, 0x20, 0x01, 0x42, 0xaa, 0xdf, 0xae, 0x2c } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x90, 0x6e, 0x7e, 0x4b, 0x71, 0x93, 0xc0, 0x72, 0xed, 0xeb, 0x71, 0x24, 0x97, 0x26, 0x9c, 0xfe, - 0xcb, 0x3e, 0x59, 0x19, 0xa8, 0x0f, 0x75, 0x7d, 0xbe, 0x18, 0xe6, 0x96, 0x1e, 0x95, 0x70, 0x60 } }, - { { 0x89, 0x66, 0x3e, 0x1d, 0x4c, 0x5f, 0xfe, 0xc0, 0x04, 0x43, 0xd6, 0x44, 0x19, 0xb5, 0xad, 0xc7, - 0x22, 0xdc, 0x71, 0x28, 0x64, 0xde, 0x41, 0x38, 0x27, 0x8f, 0x2c, 0x6b, 0x08, 0xb8, 0xb8, 0x7b } } }, - { { { 0x3d, 0x70, 0x27, 0x9d, 0xd9, 0xaf, 0xb1, 0x27, 0xaf, 0xe3, 0x5d, 0x1e, 0x3a, 0x30, 0x54, 0x61, - 0x60, 0xe8, 0xc3, 0x26, 0x3a, 0xbc, 0x7e, 0xf5, 0x81, 0xdd, 0x64, 0x01, 0x04, 0xeb, 0xc0, 0x1e } }, - { { 0xda, 0x2c, 0xa4, 0xd1, 0xa1, 0xc3, 0x5c, 0x6e, 0x32, 0x07, 0x1f, 0xb8, 0x0e, 0x19, 0x9e, 0x99, - 0x29, 0x33, 0x9a, 0xae, 0x7a, 0xed, 0x68, 0x42, 0x69, 0x7c, 0x07, 0xb3, 0x38, 0x2c, 0xf6, 0x3d } } }, - { { { 0x64, 0xaa, 0xb5, 0x88, 0x79, 0x65, 0x38, 0x8c, 0x94, 0xd6, 0x62, 0x37, 0x7d, 0x64, 0xcd, 0x3a, - 0xeb, 0xff, 0xe8, 0x81, 0x09, 0xc7, 0x6a, 0x50, 0x09, 0x0d, 0x28, 0x03, 0x0d, 0x9a, 0x93, 0x0a } }, - { { 0x42, 0xa3, 0xf1, 0xc5, 0xb4, 0x0f, 0xd8, 0xc8, 0x8d, 0x15, 0x31, 0xbd, 0xf8, 0x07, 0x8b, 0xcd, - 0x08, 0x8a, 0xfb, 0x18, 0x07, 0xfe, 0x8e, 0x52, 0x86, 0xef, 0xbe, 0xec, 0x49, 0x52, 0x99, 0x08 } } }, - { { { 0x0f, 0xa9, 0xd5, 0x01, 0xaa, 0x48, 0x4f, 0x28, 0x66, 0x32, 0x1a, 0xba, 0x7c, 0xea, 0x11, 0x80, - 0x17, 0x18, 0x9b, 0x56, 0x88, 0x25, 0x06, 0x69, 0x12, 0x2c, 0xea, 0x56, 0x69, 0x41, 0x24, 0x19 } }, - { { 0xde, 0x21, 0xf0, 0xda, 0x8a, 0xfb, 0xb1, 0xb8, 0xcd, 0xc8, 0x6a, 0x82, 0x19, 0x73, 0xdb, 0xc7, - 0xcf, 0x88, 0xeb, 0x96, 0xee, 0x6f, 0xfb, 0x06, 0xd2, 0xcd, 0x7d, 0x7b, 0x12, 0x28, 0x8e, 0x0c } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x93, 0x44, 0x97, 0xce, 0x28, 0xff, 0x3a, 0x40, 0xc4, 0xf5, 0xf6, 0x9b, 0xf4, 0x6b, 0x07, 0x84, - 0xfb, 0x98, 0xd8, 0xec, 0x8c, 0x03, 0x57, 0xec, 0x49, 0xed, 0x63, 0xb6, 0xaa, 0xff, 0x98, 0x28 } }, - { { 0x3d, 0x16, 0x35, 0xf3, 0x46, 0xbc, 0xb3, 0xf4, 0xc6, 0xb6, 0x4f, 0xfa, 0xf4, 0xa0, 0x13, 0xe6, - 0x57, 0x45, 0x93, 0xb9, 0xbc, 0xd6, 0x59, 0xe7, 0x77, 0x94, 0x6c, 0xab, 0x96, 0x3b, 0x4f, 0x09 } } }, - { { { 0x5a, 0xf7, 0x6b, 0x01, 0x12, 0x4f, 0x51, 0xc1, 0x70, 0x84, 0x94, 0x47, 0xb2, 0x01, 0x6c, 0x71, - 0xd7, 0xcc, 0x17, 0x66, 0x0f, 0x59, 0x5d, 0x5d, 0x10, 0x01, 0x57, 0x11, 0xf5, 0xdd, 0xe2, 0x34 } }, - { { 0x26, 0xd9, 0x1f, 0x5c, 0x58, 0xac, 0x8b, 0x03, 0xd2, 0xc3, 0x85, 0x0f, 0x3a, 0xc3, 0x7f, 0x6d, - 0x8e, 0x86, 0xcd, 0x52, 0x74, 0x8f, 0x55, 0x77, 0x17, 0xb7, 0x8e, 0xb7, 0x88, 0xea, 0xda, 0x1b } } }, - { { { 0xb6, 0xea, 0x0e, 0x40, 0x93, 0x20, 0x79, 0x35, 0x6a, 0x61, 0x84, 0x5a, 0x07, 0x6d, 0xf9, 0x77, - 0x6f, 0xed, 0x69, 0x1c, 0x0d, 0x25, 0x76, 0xcc, 0xf0, 0xdb, 0xbb, 0xc5, 0xad, 0xe2, 0x26, 0x57 } }, - { { 0xcf, 0xe8, 0x0e, 0x6b, 0x96, 0x7d, 0xed, 0x27, 0xd1, 0x3c, 0xa9, 0xd9, 0x50, 0xa9, 0x98, 0x84, - 0x5e, 0x86, 0xef, 0xd6, 0xf0, 0xf8, 0x0e, 0x89, 0x05, 0x2f, 0xd9, 0x5f, 0x15, 0x5f, 0x73, 0x79 } } }, - { { { 0xc8, 0x5c, 0x16, 0xfe, 0xed, 0x9f, 0x26, 0x56, 0xf6, 0x4b, 0x9f, 0xa7, 0x0a, 0x85, 0xfe, 0xa5, - 0x8c, 0x87, 0xdd, 0x98, 0xce, 0x4e, 0xc3, 0x58, 0x55, 0xb2, 0x7b, 0x3d, 0xd8, 0x6b, 0xb5, 0x4c } }, - { { 0x65, 0x38, 0xa0, 0x15, 0xfa, 0xa7, 0xb4, 0x8f, 0xeb, 0xc4, 0x86, 0x9b, 0x30, 0xa5, 0x5e, 0x4d, - 0xea, 0x8a, 0x9a, 0x9f, 0x1a, 0xd8, 0x5b, 0x53, 0x14, 0x19, 0x25, 0x63, 0xb4, 0x6f, 0x1f, 0x5d } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xac, 0x8f, 0xbc, 0x1e, 0x7d, 0x8b, 0x5a, 0x0b, 0x8d, 0xaf, 0x76, 0x2e, 0x71, 0xe3, 0x3b, 0x6f, - 0x53, 0x2f, 0x3e, 0x90, 0x95, 0xd4, 0x35, 0x14, 0x4f, 0x8c, 0x3c, 0xce, 0x57, 0x1c, 0x76, 0x49 } }, - { { 0xa8, 0x50, 0xe1, 0x61, 0x6b, 0x57, 0x35, 0xeb, 0x44, 0x0b, 0x0c, 0x6e, 0xf9, 0x25, 0x80, 0x74, - 0xf2, 0x8f, 0x6f, 0x7a, 0x3e, 0x7f, 0x2d, 0xf3, 0x4e, 0x09, 0x65, 0x10, 0x5e, 0x03, 0x25, 0x32 } } }, - { { { 0xa9, 0x60, 0xdc, 0x0f, 0x64, 0xe5, 0x1d, 0xe2, 0x8d, 0x4f, 0x79, 0x2f, 0x0e, 0x24, 0x02, 0x00, - 0x05, 0x77, 0x43, 0x25, 0x3d, 0x6a, 0xc7, 0xb7, 0xbf, 0x04, 0x08, 0x65, 0xf4, 0x39, 0x4b, 0x65 } }, - { { 0x96, 0x19, 0x12, 0x6b, 0x6a, 0xb7, 0xe3, 0xdc, 0x45, 0x9b, 0xdb, 0xb4, 0xa8, 0xae, 0xdc, 0xa8, - 0x14, 0x44, 0x65, 0x62, 0xce, 0x34, 0x9a, 0x84, 0x18, 0x12, 0x01, 0xf1, 0xe2, 0x7b, 0xce, 0x50 } } }, - { { { 0x41, 0x21, 0x30, 0x53, 0x1b, 0x47, 0x01, 0xb7, 0x18, 0xd8, 0x82, 0x57, 0xbd, 0xa3, 0x60, 0xf0, - 0x32, 0xf6, 0x5b, 0xf0, 0x30, 0x88, 0x91, 0x59, 0xfd, 0x90, 0xa2, 0xb9, 0x55, 0x93, 0x21, 0x34 } }, - { { 0x97, 0x67, 0x9e, 0xeb, 0x6a, 0xf9, 0x6e, 0xd6, 0x73, 0xe8, 0x6b, 0x29, 0xec, 0x63, 0x82, 0x00, - 0xa8, 0x99, 0x1c, 0x1d, 0x30, 0xc8, 0x90, 0x52, 0x90, 0xb6, 0x6a, 0x80, 0x4e, 0xff, 0x4b, 0x51 } } }, - { { { 0x0f, 0x7d, 0x63, 0x8c, 0x6e, 0x5c, 0xde, 0x30, 0xdf, 0x65, 0xfa, 0x2e, 0xb0, 0xa3, 0x25, 0x05, - 0x54, 0xbd, 0x25, 0xba, 0x06, 0xae, 0xdf, 0x8b, 0xd9, 0x1b, 0xea, 0x38, 0xb3, 0x05, 0x16, 0x09 } }, - { { 0xc7, 0x8c, 0xbf, 0x64, 0x28, 0xad, 0xf8, 0xa5, 0x5a, 0x6f, 0xc9, 0xba, 0xd5, 0x7f, 0xd5, 0xd6, - 0xbd, 0x66, 0x2f, 0x3d, 0xaa, 0x54, 0xf6, 0xba, 0x32, 0x22, 0x9a, 0x1e, 0x52, 0x05, 0xf4, 0x1d } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xaa, 0x1f, 0xbb, 0xeb, 0xfe, 0xe4, 0x87, 0xfc, 0xb1, 0x2c, 0xb7, 0x88, 0xf4, 0xc6, 0xb9, 0xf5, - 0x24, 0x46, 0xf2, 0xa5, 0x9f, 0x8f, 0x8a, 0x93, 0x70, 0x69, 0xd4, 0x56, 0xec, 0xfd, 0x06, 0x46 } }, - { { 0x4e, 0x66, 0xcf, 0x4e, 0x34, 0xce, 0x0c, 0xd9, 0xa6, 0x50, 0xd6, 0x5e, 0x95, 0xaf, 0xe9, 0x58, - 0xfa, 0xee, 0x9b, 0xb8, 0xa5, 0x0f, 0x35, 0xe0, 0x43, 0x82, 0x6d, 0x65, 0xe6, 0xd9, 0x00, 0x0f } } }, - { { { 0x7b, 0x75, 0x3a, 0xfc, 0x64, 0xd3, 0x29, 0x7e, 0xdd, 0x49, 0x9a, 0x59, 0x53, 0xbf, 0xb4, 0xa7, - 0x52, 0xb3, 0x05, 0xab, 0xc3, 0xaf, 0x16, 0x1a, 0x85, 0x42, 0x32, 0xa2, 0x86, 0xfa, 0x39, 0x43 } }, - { { 0x0e, 0x4b, 0xa3, 0x63, 0x8a, 0xfe, 0xa5, 0x58, 0xf1, 0x13, 0xbd, 0x9d, 0xaa, 0x7f, 0x76, 0x40, - 0x70, 0x81, 0x10, 0x75, 0x99, 0xbb, 0xbe, 0x0b, 0x16, 0xe9, 0xba, 0x62, 0x34, 0xcc, 0x07, 0x6d } } }, - { { { 0xc3, 0xf1, 0xc6, 0x93, 0x65, 0xee, 0x0b, 0xbc, 0xea, 0x14, 0xf0, 0xc1, 0xf8, 0x84, 0x89, 0xc2, - 0xc9, 0xd7, 0xea, 0x34, 0xca, 0xa7, 0xc4, 0x99, 0xd5, 0x50, 0x69, 0xcb, 0xd6, 0x21, 0x63, 0x7c } }, - { { 0x99, 0xeb, 0x7c, 0x31, 0x73, 0x64, 0x67, 0x7f, 0x0c, 0x66, 0xaa, 0x8c, 0x69, 0x91, 0xe2, 0x26, - 0xd3, 0x23, 0xe2, 0x76, 0x5d, 0x32, 0x52, 0xdf, 0x5d, 0xc5, 0x8f, 0xb7, 0x7c, 0x84, 0xb3, 0x70 } } }, - { { { 0xeb, 0x01, 0xc7, 0x36, 0x97, 0x4e, 0xb6, 0xab, 0x5f, 0x0d, 0x2c, 0xba, 0x67, 0x64, 0x55, 0xde, - 0xbc, 0xff, 0xa6, 0xec, 0x04, 0xd3, 0x8d, 0x39, 0x56, 0x5e, 0xee, 0xf8, 0xe4, 0x2e, 0x33, 0x62 } }, - { { 0x65, 0xef, 0xb8, 0x9f, 0xc8, 0x4b, 0xa7, 0xfd, 0x21, 0x49, 0x9b, 0x92, 0x35, 0x82, 0xd6, 0x0a, - 0x9b, 0xf2, 0x79, 0xf1, 0x47, 0x2f, 0x6a, 0x7e, 0x9f, 0xcf, 0x18, 0x02, 0x3c, 0xfb, 0x1b, 0x3e } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x2f, 0x8b, 0xc8, 0x40, 0x51, 0xd1, 0xac, 0x1a, 0x0b, 0xe4, 0xa9, 0xa2, 0x42, 0x21, 0x19, 0x2f, - 0x7b, 0x97, 0xbf, 0xf7, 0x57, 0x6d, 0x3f, 0x3d, 0x4f, 0x0f, 0xe2, 0xb2, 0x81, 0x00, 0x9e, 0x7b } }, - { { 0x8c, 0x85, 0x2b, 0xc4, 0xfc, 0xf1, 0xab, 0xe8, 0x79, 0x22, 0xc4, 0x84, 0x17, 0x3a, 0xfa, 0x86, - 0xa6, 0x7d, 0xf9, 0xf3, 0x6f, 0x03, 0x57, 0x20, 0x4d, 0x79, 0xf9, 0x6e, 0x71, 0x54, 0x38, 0x09 } } }, - { { { 0x40, 0x29, 0x74, 0xa8, 0x2f, 0x5e, 0xf9, 0x79, 0xa4, 0xf3, 0x3e, 0xb9, 0xfd, 0x33, 0x31, 0xac, - 0x9a, 0x69, 0x88, 0x1e, 0x77, 0x21, 0x2d, 0xf3, 0x91, 0x52, 0x26, 0x15, 0xb2, 0xa6, 0xcf, 0x7e } }, - { { 0xc6, 0x20, 0x47, 0x6c, 0xa4, 0x7d, 0xcb, 0x63, 0xea, 0x5b, 0x03, 0xdf, 0x3e, 0x88, 0x81, 0x6d, - 0xce, 0x07, 0x42, 0x18, 0x60, 0x7e, 0x7b, 0x55, 0xfe, 0x6a, 0xf3, 0xda, 0x5c, 0x8b, 0x95, 0x10 } } }, - { { { 0x62, 0xe4, 0x0d, 0x03, 0xb4, 0xd7, 0xcd, 0xfa, 0xbd, 0x46, 0xdf, 0x93, 0x71, 0x10, 0x2c, 0xa8, - 0x3b, 0xb6, 0x09, 0x05, 0x70, 0x84, 0x43, 0x29, 0xa8, 0x59, 0xf5, 0x8e, 0x10, 0xe4, 0xd7, 0x20 } }, - { { 0x57, 0x82, 0x1c, 0xab, 0xbf, 0x62, 0x70, 0xe8, 0xc4, 0xcf, 0xf0, 0x28, 0x6e, 0x16, 0x3c, 0x08, - 0x78, 0x89, 0x85, 0x46, 0x0f, 0xf6, 0x7f, 0xcf, 0xcb, 0x7e, 0xb8, 0x25, 0xe9, 0x5a, 0xfa, 0x03 } } }, - { { { 0xfb, 0x95, 0x92, 0x63, 0x50, 0xfc, 0x62, 0xf0, 0xa4, 0x5e, 0x8c, 0x18, 0xc2, 0x17, 0x24, 0xb7, - 0x78, 0xc2, 0xa9, 0xe7, 0x6a, 0x32, 0xd6, 0x29, 0x85, 0xaf, 0xcb, 0x8d, 0x91, 0x13, 0xda, 0x6b } }, - { { 0x36, 0x0a, 0xc2, 0xb6, 0x4b, 0xa5, 0x5d, 0x07, 0x17, 0x41, 0x31, 0x5f, 0x62, 0x46, 0xf8, 0x92, - 0xf9, 0x66, 0x48, 0x73, 0xa6, 0x97, 0x0d, 0x7d, 0x88, 0xee, 0x62, 0xb1, 0x03, 0xa8, 0x3f, 0x2c } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x4a, 0xb1, 0x70, 0x8a, 0xa9, 0xe8, 0x63, 0x79, 0x00, 0xe2, 0x25, 0x16, 0xca, 0x4b, 0x0f, 0xa4, - 0x66, 0xad, 0x19, 0x9f, 0x88, 0x67, 0x0c, 0x8b, 0xc2, 0x4a, 0x5b, 0x2b, 0x6d, 0x95, 0xaf, 0x19 } }, - { { 0x8b, 0x9d, 0xb6, 0xcc, 0x60, 0xb4, 0x72, 0x4f, 0x17, 0x69, 0x5a, 0x4a, 0x68, 0x34, 0xab, 0xa1, - 0x45, 0x32, 0x3c, 0x83, 0x87, 0x72, 0x30, 0x54, 0x77, 0x68, 0xae, 0xfb, 0xb5, 0x8b, 0x22, 0x5e } } }, - { { { 0xf1, 0xb9, 0x87, 0x35, 0xc5, 0xbb, 0xb9, 0xcf, 0xf5, 0xd6, 0xcd, 0xd5, 0x0c, 0x7c, 0x0e, 0xe6, - 0x90, 0x34, 0xfb, 0x51, 0x42, 0x1e, 0x6d, 0xac, 0x9a, 0x46, 0xc4, 0x97, 0x29, 0x32, 0xbf, 0x45 } }, - { { 0x66, 0x9e, 0xc6, 0x24, 0xc0, 0xed, 0xa5, 0x5d, 0x88, 0xd4, 0xf0, 0x73, 0x97, 0x7b, 0xea, 0x7f, - 0x42, 0xff, 0x21, 0xa0, 0x9b, 0x2f, 0x9a, 0xfd, 0x53, 0x57, 0x07, 0x84, 0x48, 0x88, 0x9d, 0x52 } } }, - { { { 0xc6, 0x96, 0x48, 0x34, 0x2a, 0x06, 0xaf, 0x94, 0x3d, 0xf4, 0x1a, 0xcf, 0xf2, 0xc0, 0x21, 0xc2, - 0x42, 0x5e, 0xc8, 0x2f, 0x35, 0xa2, 0x3e, 0x29, 0xfa, 0x0c, 0x84, 0xe5, 0x89, 0x72, 0x7c, 0x06 } }, - { { 0x32, 0x65, 0x03, 0xe5, 0x89, 0xa6, 0x6e, 0xb3, 0x5b, 0x8e, 0xca, 0xeb, 0xfe, 0x22, 0x56, 0x8b, - 0x5d, 0x14, 0x4b, 0x4d, 0xf9, 0xbe, 0xb5, 0xf5, 0xe6, 0x5c, 0x7b, 0x8b, 0xf4, 0x13, 0x11, 0x34 } } }, - { { { 0x07, 0xc6, 0x22, 0x15, 0xe2, 0x9c, 0x60, 0xa2, 0x19, 0xd9, 0x27, 0xae, 0x37, 0x4e, 0xa6, 0xc9, - 0x80, 0xa6, 0x91, 0x8f, 0x12, 0x49, 0xe5, 0x00, 0x18, 0x47, 0xd1, 0xd7, 0x28, 0x22, 0x63, 0x39 } }, - { { 0xe8, 0xe2, 0x00, 0x7e, 0xf2, 0x9e, 0x1e, 0x99, 0x39, 0x95, 0x04, 0xbd, 0x1e, 0x67, 0x7b, 0xb2, - 0x26, 0xac, 0xe6, 0xaa, 0xe2, 0x46, 0xd5, 0xe4, 0xe8, 0x86, 0xbd, 0xab, 0x7c, 0x55, 0x59, 0x6f } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x24, 0x64, 0x6e, 0x9b, 0x35, 0x71, 0x78, 0xce, 0x33, 0x03, 0x21, 0x33, 0x36, 0xf1, 0x73, 0x9b, - 0xb9, 0x15, 0x8b, 0x2c, 0x69, 0xcf, 0x4d, 0xed, 0x4f, 0x4d, 0x57, 0x14, 0x13, 0x82, 0xa4, 0x4d } }, - { { 0x65, 0x6e, 0x0a, 0xa4, 0x59, 0x07, 0x17, 0xf2, 0x6b, 0x4a, 0x1f, 0x6e, 0xf6, 0xb5, 0xbc, 0x62, - 0xe4, 0xb6, 0xda, 0xa2, 0x93, 0xbc, 0x29, 0x05, 0xd2, 0xd2, 0x73, 0x46, 0x03, 0x16, 0x40, 0x31 } } }, - { { { 0x4c, 0x73, 0x6d, 0x15, 0xbd, 0xa1, 0x4d, 0x5c, 0x13, 0x0b, 0x24, 0x06, 0x98, 0x78, 0x1c, 0x5b, - 0xeb, 0x1f, 0x18, 0x54, 0x43, 0xd9, 0x55, 0x66, 0xda, 0x29, 0x21, 0xe8, 0xb8, 0x3c, 0x42, 0x22 } }, - { { 0xb4, 0xcd, 0x08, 0x6f, 0x15, 0x23, 0x1a, 0x0b, 0x22, 0xed, 0xd1, 0xf1, 0xa7, 0xc7, 0x73, 0x45, - 0xf3, 0x9e, 0xce, 0x76, 0xb7, 0xf6, 0x39, 0xb6, 0x8e, 0x79, 0xbe, 0xe9, 0x9b, 0xcf, 0x7d, 0x62 } } }, - { { { 0x92, 0x5b, 0xfc, 0x72, 0xfd, 0xba, 0xf1, 0xfd, 0xa6, 0x7c, 0x95, 0xe3, 0x61, 0x3f, 0xe9, 0x03, - 0xd4, 0x2b, 0xd4, 0x20, 0xd9, 0xdb, 0x4d, 0x32, 0x3e, 0xf5, 0x11, 0x64, 0xe3, 0xb4, 0xbe, 0x32 } }, - { { 0x86, 0x17, 0x90, 0xe7, 0xc9, 0x1f, 0x10, 0xa5, 0x6a, 0x2d, 0x39, 0xd0, 0x3b, 0xc4, 0xa6, 0xe9, - 0x59, 0x13, 0xda, 0x1a, 0xe6, 0xa0, 0xb9, 0x3c, 0x50, 0xb8, 0x40, 0x7c, 0x15, 0x36, 0x5a, 0x42 } } }, - { { { 0xb4, 0x0b, 0x32, 0xab, 0xdc, 0x04, 0x51, 0x55, 0x21, 0x1e, 0x0b, 0x75, 0x99, 0x89, 0x73, 0x35, - 0x3a, 0x91, 0x2b, 0xfe, 0xe7, 0x49, 0xea, 0x76, 0xc1, 0xf9, 0x46, 0xb9, 0x53, 0x02, 0x23, 0x04 } }, - { { 0xfc, 0x5a, 0x1e, 0x1d, 0x74, 0x58, 0x95, 0xa6, 0x8f, 0x7b, 0x97, 0x3e, 0x17, 0x3b, 0x79, 0x2d, - 0xa6, 0x57, 0xef, 0x45, 0x02, 0x0b, 0x4d, 0x6e, 0x9e, 0x93, 0x8d, 0x2f, 0xd9, 0x9d, 0xdb, 0x04 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xc0, 0xd7, 0x56, 0x97, 0x58, 0x91, 0xde, 0x09, 0x4f, 0x9f, 0xbe, 0x63, 0xb0, 0x83, 0x86, 0x43, - 0x5d, 0xbc, 0xe0, 0xf3, 0xc0, 0x75, 0xbf, 0x8b, 0x8e, 0xaa, 0xf7, 0x8b, 0x64, 0x6e, 0xb0, 0x63 } }, - { { 0x16, 0xae, 0x8b, 0xe0, 0x9b, 0x24, 0x68, 0x5c, 0x44, 0xc2, 0xd0, 0x08, 0xb7, 0x7b, 0x62, 0xfd, - 0x7f, 0xd8, 0xd4, 0xb7, 0x50, 0xfd, 0x2c, 0x1b, 0xbf, 0x41, 0x95, 0xd9, 0x8e, 0xd8, 0x17, 0x1b } } }, - { { { 0x86, 0x55, 0x37, 0x8e, 0xc3, 0x38, 0x48, 0x14, 0xb5, 0x97, 0xd2, 0xa7, 0x54, 0x45, 0xf1, 0x35, - 0x44, 0x38, 0x9e, 0xf1, 0x1b, 0xb6, 0x34, 0x00, 0x3c, 0x96, 0xee, 0x29, 0x00, 0xea, 0x2c, 0x0b } }, - { { 0xea, 0xda, 0x99, 0x9e, 0x19, 0x83, 0x66, 0x6d, 0xe9, 0x76, 0x87, 0x50, 0xd1, 0xfd, 0x3c, 0x60, - 0x87, 0xc6, 0x41, 0xd9, 0x8e, 0xdb, 0x5e, 0xde, 0xaa, 0x9a, 0xd3, 0x28, 0xda, 0x95, 0xea, 0x47 } } }, - { { { 0xd0, 0x80, 0xba, 0x19, 0xae, 0x1d, 0xa9, 0x79, 0xf6, 0x3f, 0xac, 0x5d, 0x6f, 0x96, 0x1f, 0x2a, - 0xce, 0x29, 0xb2, 0xff, 0x37, 0xf1, 0x94, 0x8f, 0x0c, 0xb5, 0x28, 0xba, 0x9a, 0x21, 0xf6, 0x66 } }, - { { 0x02, 0xfb, 0x54, 0xb8, 0x05, 0xf3, 0x81, 0x52, 0x69, 0x34, 0x46, 0x9d, 0x86, 0x76, 0x8f, 0xd7, - 0xf8, 0x6a, 0x66, 0xff, 0xe6, 0xa7, 0x90, 0xf7, 0x5e, 0xcd, 0x6a, 0x9b, 0x55, 0xfc, 0x9d, 0x48 } } }, - { { { 0xbd, 0xaa, 0x13, 0xe6, 0xcd, 0x45, 0x4a, 0xa4, 0x59, 0x0a, 0x64, 0xb1, 0x98, 0xd6, 0x34, 0x13, - 0x04, 0xe6, 0x97, 0x94, 0x06, 0xcb, 0xd4, 0x4e, 0xbb, 0x96, 0xcd, 0xd1, 0x57, 0xd1, 0xe3, 0x06 } }, - { { 0x7a, 0x6c, 0x45, 0x27, 0xc4, 0x93, 0x7f, 0x7d, 0x7c, 0x62, 0x50, 0x38, 0x3a, 0x6b, 0xb5, 0x88, - 0xc6, 0xd9, 0xf1, 0x78, 0x19, 0xb9, 0x39, 0x93, 0x3d, 0xc9, 0xe0, 0x9c, 0x3c, 0xce, 0xf5, 0x72 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x24, 0xea, 0x23, 0x7d, 0x56, 0x2c, 0xe2, 0x59, 0x0e, 0x85, 0x60, 0x04, 0x88, 0x5a, 0x74, 0x1e, - 0x4b, 0xef, 0x13, 0xda, 0x4c, 0xff, 0x83, 0x45, 0x85, 0x3f, 0x08, 0x95, 0x2c, 0x20, 0x13, 0x1f } }, - { { 0x48, 0x5f, 0x27, 0x90, 0x5c, 0x02, 0x42, 0xad, 0x78, 0x47, 0x5c, 0xb5, 0x7e, 0x08, 0x85, 0x00, - 0xfa, 0x7f, 0xfd, 0xfd, 0xe7, 0x09, 0x11, 0xf2, 0x7e, 0x1b, 0x38, 0x6c, 0x35, 0x6d, 0x33, 0x66 } } }, - { { { 0x93, 0x03, 0x36, 0x81, 0xac, 0xe4, 0x20, 0x09, 0x35, 0x4c, 0x45, 0xb2, 0x1e, 0x4c, 0x14, 0x21, - 0xe6, 0xe9, 0x8a, 0x7b, 0x8d, 0xfe, 0x1e, 0xc6, 0x3e, 0xc1, 0x35, 0xfa, 0xe7, 0x70, 0x4e, 0x1d } }, - { { 0x61, 0x2e, 0xc2, 0xdd, 0x95, 0x57, 0xd1, 0xab, 0x80, 0xe8, 0x63, 0x17, 0xb5, 0x48, 0xe4, 0x8a, - 0x11, 0x9e, 0x72, 0xbe, 0x85, 0x8d, 0x51, 0x0a, 0xf2, 0x9f, 0xe0, 0x1c, 0xa9, 0x07, 0x28, 0x7b } } }, - { { { 0xbb, 0x71, 0x14, 0x5e, 0x26, 0x8c, 0x3d, 0xc8, 0xe9, 0x7c, 0xd3, 0xd6, 0xd1, 0x2f, 0x07, 0x6d, - 0xe6, 0xdf, 0xfb, 0x79, 0xd6, 0x99, 0x59, 0x96, 0x48, 0x40, 0x0f, 0x3a, 0x7b, 0xb2, 0xa0, 0x72 } }, - { { 0x4e, 0x3b, 0x69, 0xc8, 0x43, 0x75, 0x51, 0x6c, 0x79, 0x56, 0xe4, 0xcb, 0xf7, 0xa6, 0x51, 0xc2, - 0x2c, 0x42, 0x0b, 0xd4, 0x82, 0x20, 0x1c, 0x01, 0x08, 0x66, 0xd7, 0xbf, 0x04, 0x56, 0xfc, 0x02 } } }, - { { { 0x24, 0xe8, 0xb7, 0x60, 0xae, 0x47, 0x80, 0xfc, 0xe5, 0x23, 0xe7, 0xc2, 0xc9, 0x85, 0xe6, 0x98, - 0xa0, 0x29, 0x4e, 0xe1, 0x84, 0x39, 0x2d, 0x95, 0x2c, 0xf3, 0x45, 0x3c, 0xff, 0xaf, 0x27, 0x4c } }, - { { 0x6b, 0xa6, 0xf5, 0x4b, 0x11, 0xbd, 0xba, 0x5b, 0x9e, 0xc4, 0xa4, 0x51, 0x1e, 0xbe, 0xd0, 0x90, - 0x3a, 0x9c, 0xc2, 0x26, 0xb6, 0x1e, 0xf1, 0x95, 0x7d, 0xc8, 0x6d, 0x52, 0xe6, 0x99, 0x2c, 0x5f } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x85, 0xe0, 0x24, 0x32, 0xb4, 0xd1, 0xef, 0xfc, 0x69, 0xa2, 0xbf, 0x8f, 0x72, 0x2c, 0x95, 0xf6, - 0xe4, 0x6e, 0x7d, 0x90, 0xf7, 0x57, 0x81, 0xa0, 0xf7, 0xda, 0xef, 0x33, 0x07, 0xe3, 0x6b, 0x78 } }, - { { 0x36, 0x27, 0x3e, 0xc6, 0x12, 0x07, 0xab, 0x4e, 0xbe, 0x69, 0x9d, 0xb3, 0xbe, 0x08, 0x7c, 0x2a, - 0x47, 0x08, 0xfd, 0xd4, 0xcd, 0x0e, 0x27, 0x34, 0x5b, 0x98, 0x34, 0x2f, 0x77, 0x5f, 0x3a, 0x65 } } }, - { { { 0x13, 0xaa, 0x2e, 0x4c, 0xf0, 0x22, 0xb8, 0x6c, 0xb3, 0x19, 0x4d, 0xeb, 0x6b, 0xd0, 0xa4, 0xc6, - 0x9c, 0xdd, 0xc8, 0x5b, 0x81, 0x57, 0x89, 0xdf, 0x33, 0xa9, 0x68, 0x49, 0x80, 0xe4, 0xfe, 0x21 } }, - { { 0x00, 0x17, 0x90, 0x30, 0xe9, 0xd3, 0x60, 0x30, 0x31, 0xc2, 0x72, 0x89, 0x7a, 0x36, 0xa5, 0xbd, - 0x39, 0x83, 0x85, 0x50, 0xa1, 0x5d, 0x6c, 0x41, 0x1d, 0xb5, 0x2c, 0x07, 0x40, 0x77, 0x0b, 0x50 } } }, - { { { 0x64, 0x34, 0xec, 0xc0, 0x9e, 0x44, 0x41, 0xaf, 0xa0, 0x36, 0x05, 0x6d, 0xea, 0x30, 0x25, 0x46, - 0x35, 0x24, 0x9d, 0x86, 0xbd, 0x95, 0xf1, 0x6a, 0x46, 0xd7, 0x94, 0x54, 0xf9, 0x3b, 0xbd, 0x5d } }, - { { 0x77, 0x5b, 0xe2, 0x37, 0xc7, 0xe1, 0x7c, 0x13, 0x8c, 0x9f, 0x7b, 0x7b, 0x2a, 0xce, 0x42, 0xa3, - 0xb9, 0x2a, 0x99, 0xa8, 0xc0, 0xd8, 0x3c, 0x86, 0xb0, 0xfb, 0xe9, 0x76, 0x77, 0xf7, 0xf5, 0x56 } } }, - { { { 0xdf, 0xb3, 0x46, 0x11, 0x6e, 0x13, 0xb7, 0x28, 0x4e, 0x56, 0xdd, 0xf1, 0xac, 0xad, 0x58, 0xc3, - 0xf8, 0x88, 0x94, 0x5e, 0x06, 0x98, 0xa1, 0xe4, 0x6a, 0xfb, 0x0a, 0x49, 0x5d, 0x8a, 0xfe, 0x77 } }, - { { 0x46, 0x02, 0xf5, 0xa5, 0xaf, 0xc5, 0x75, 0x6d, 0xba, 0x45, 0x35, 0x0a, 0xfe, 0xc9, 0xac, 0x22, - 0x91, 0x8d, 0x21, 0x95, 0x33, 0x03, 0xc0, 0x8a, 0x16, 0xf3, 0x39, 0xe0, 0x01, 0x0f, 0x53, 0x3c } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x34, 0x75, 0x37, 0x1f, 0x34, 0x4e, 0xa9, 0x1d, 0x68, 0x67, 0xf8, 0x49, 0x98, 0x96, 0xfc, 0x4c, - 0x65, 0x97, 0xf7, 0x02, 0x4a, 0x52, 0x6c, 0x01, 0xbd, 0x48, 0xbb, 0x1b, 0xed, 0xa4, 0xe2, 0x53 } }, - { { 0x59, 0xd5, 0x9b, 0x5a, 0xa2, 0x90, 0xd3, 0xb8, 0x37, 0x4c, 0x55, 0x82, 0x28, 0x08, 0x0f, 0x7f, - 0xaa, 0x81, 0x65, 0xe0, 0x0c, 0x52, 0xc9, 0xa3, 0x32, 0x27, 0x64, 0xda, 0xfd, 0x34, 0x23, 0x5a } } }, - { { { 0xb5, 0xb0, 0x0c, 0x4d, 0xb3, 0x7b, 0x23, 0xc8, 0x1f, 0x8a, 0x39, 0x66, 0xe6, 0xba, 0x4c, 0x10, - 0x37, 0xca, 0x9c, 0x7c, 0x05, 0x9e, 0xff, 0xc0, 0xf8, 0x8e, 0xb1, 0x8f, 0x6f, 0x67, 0x18, 0x26 } }, - { { 0x4b, 0x41, 0x13, 0x54, 0x23, 0x1a, 0xa4, 0x4e, 0xa9, 0x8b, 0x1e, 0x4b, 0xfc, 0x15, 0x24, 0xbb, - 0x7e, 0xcb, 0xb6, 0x1e, 0x1b, 0xf5, 0xf2, 0xc8, 0x56, 0xec, 0x32, 0xa2, 0x60, 0x5b, 0xa0, 0x2a } } }, - { { { 0xa4, 0x29, 0x47, 0x86, 0x2e, 0x92, 0x4f, 0x11, 0x4f, 0xf3, 0xb2, 0x5c, 0xd5, 0x3e, 0xa6, 0xb9, - 0xc8, 0xe2, 0x33, 0x11, 0x1f, 0x01, 0x8f, 0xb0, 0x9b, 0xc7, 0xa5, 0xff, 0x83, 0x0f, 0x1e, 0x28 } }, - { { 0x1d, 0x29, 0x7a, 0xa1, 0xec, 0x8e, 0xb5, 0xad, 0xea, 0x02, 0x68, 0x60, 0x74, 0x29, 0x1c, 0xa5, - 0xcf, 0xc8, 0x3b, 0x7d, 0x8b, 0x2b, 0x7c, 0xad, 0xa4, 0x40, 0x17, 0x51, 0x59, 0x7c, 0x2e, 0x5d } } }, - { { { 0x0a, 0x6c, 0x4f, 0xbc, 0x3e, 0x32, 0xe7, 0x4a, 0x1a, 0x13, 0xc1, 0x49, 0x38, 0xbf, 0xf7, 0xc2, - 0xd3, 0x8f, 0x6b, 0xad, 0x52, 0xf7, 0xcf, 0xbc, 0x27, 0xcb, 0x40, 0x67, 0x76, 0xcd, 0x6d, 0x56 } }, - { { 0xe5, 0xb0, 0x27, 0xad, 0xbe, 0x9b, 0xf2, 0xb5, 0x63, 0xde, 0x3a, 0x23, 0x95, 0xb7, 0x0a, 0x7e, - 0xf3, 0x9e, 0x45, 0x6f, 0x19, 0x39, 0x75, 0x8f, 0x39, 0x3d, 0x0f, 0xc0, 0x9f, 0xf1, 0xe9, 0x51 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x88, 0xaa, 0x14, 0x24, 0x86, 0x94, 0x11, 0x12, 0x3e, 0x1a, 0xb5, 0xcc, 0xbb, 0xe0, 0x9c, 0xd5, - 0x9c, 0x6d, 0xba, 0x58, 0x72, 0x8d, 0xfb, 0x22, 0x7b, 0x9f, 0x7c, 0x94, 0x30, 0xb3, 0x51, 0x21 } }, - { { 0xf6, 0x74, 0x3d, 0xf2, 0xaf, 0xd0, 0x1e, 0x03, 0x7c, 0x23, 0x6b, 0xc9, 0xfc, 0x25, 0x70, 0x90, - 0xdc, 0x9a, 0xa4, 0xfb, 0x49, 0xfc, 0x3d, 0x0a, 0x35, 0x38, 0x6f, 0xe4, 0x7e, 0x50, 0x01, 0x2a } } }, - { { { 0xd6, 0xe3, 0x96, 0x61, 0x3a, 0xfd, 0xef, 0x9b, 0x1f, 0x90, 0xa4, 0x24, 0x14, 0x5b, 0xc8, 0xde, - 0x50, 0xb1, 0x1d, 0xaf, 0xe8, 0x55, 0x8a, 0x87, 0x0d, 0xfe, 0xaa, 0x3b, 0x82, 0x2c, 0x8d, 0x7b } }, - { { 0x85, 0x0c, 0xaf, 0xf8, 0x83, 0x44, 0x49, 0xd9, 0x45, 0xcf, 0xf7, 0x48, 0xd9, 0x53, 0xb4, 0xf1, - 0x65, 0xa0, 0xe1, 0xc3, 0xb3, 0x15, 0xed, 0x89, 0x9b, 0x4f, 0x62, 0xb3, 0x57, 0xa5, 0x45, 0x1c } } }, - { { { 0x8f, 0x12, 0xea, 0xaf, 0xd1, 0x1f, 0x79, 0x10, 0x0b, 0xf6, 0xa3, 0x7b, 0xea, 0xac, 0x8b, 0x57, - 0x32, 0x62, 0xe7, 0x06, 0x12, 0x51, 0xa0, 0x3b, 0x43, 0x5e, 0xa4, 0x20, 0x78, 0x31, 0xce, 0x0d } }, - { { 0x84, 0x7c, 0xc2, 0xa6, 0x91, 0x23, 0xce, 0xbd, 0xdc, 0xf9, 0xce, 0xd5, 0x75, 0x30, 0x22, 0xe6, - 0xf9, 0x43, 0x62, 0x0d, 0xf7, 0x75, 0x9d, 0x7f, 0x8c, 0xff, 0x7d, 0xe4, 0x72, 0xac, 0x9f, 0x1c } } }, - { { { 0x88, 0xc1, 0x99, 0xd0, 0x3c, 0x1c, 0x5d, 0xb4, 0xef, 0x13, 0x0f, 0x90, 0xb9, 0x36, 0x2f, 0x95, - 0x95, 0xc6, 0xdc, 0xde, 0x0a, 0x51, 0xe2, 0x8d, 0xf3, 0xbc, 0x51, 0xec, 0xdf, 0xb1, 0xa2, 0x5f } }, - { { 0x2e, 0x68, 0xa1, 0x23, 0x7d, 0x9b, 0x40, 0x69, 0x85, 0x7b, 0x42, 0xbf, 0x90, 0x4b, 0xd6, 0x40, - 0x2f, 0xd7, 0x52, 0x52, 0xb2, 0x21, 0xde, 0x64, 0xbd, 0x88, 0xc3, 0x6d, 0xa5, 0xfa, 0x81, 0x3f } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xfb, 0xfd, 0x47, 0x7b, 0x8a, 0x66, 0x9e, 0x79, 0x2e, 0x64, 0x82, 0xef, 0xf7, 0x21, 0xec, 0xf6, - 0xd8, 0x86, 0x09, 0x31, 0x7c, 0xdd, 0x03, 0x6a, 0x58, 0xa0, 0x77, 0xb7, 0x9b, 0x8c, 0x87, 0x1f } }, - { { 0x55, 0x47, 0xe4, 0xa8, 0x3d, 0x55, 0x21, 0x34, 0xab, 0x1d, 0xae, 0xe0, 0xf4, 0xea, 0xdb, 0xc5, - 0xb9, 0x58, 0xbf, 0xc4, 0x2a, 0x89, 0x31, 0x1a, 0xf4, 0x2d, 0xe1, 0xca, 0x37, 0x99, 0x47, 0x59 } } }, - { { { 0xc7, 0xca, 0x63, 0xc1, 0x49, 0xa9, 0x35, 0x45, 0x55, 0x7e, 0xda, 0x64, 0x32, 0x07, 0x50, 0xf7, - 0x32, 0xac, 0xde, 0x75, 0x58, 0x9b, 0x11, 0xb2, 0x3a, 0x1f, 0xf5, 0xf7, 0x79, 0x04, 0xe6, 0x08 } }, - { { 0x46, 0xfa, 0x22, 0x4b, 0xfa, 0xe1, 0xfe, 0x96, 0xfc, 0x67, 0xba, 0x67, 0x97, 0xc4, 0xe7, 0x1b, - 0x86, 0x90, 0x5f, 0xee, 0xf4, 0x5b, 0x11, 0xb2, 0xcd, 0xad, 0xee, 0xc2, 0x48, 0x6c, 0x2b, 0x1b } } }, - { { { 0xe3, 0x39, 0x62, 0xb4, 0x4f, 0x31, 0x04, 0xc9, 0xda, 0xd5, 0x73, 0x51, 0x57, 0xc5, 0xb8, 0xf3, - 0xa3, 0x43, 0x70, 0xe4, 0x61, 0x81, 0x84, 0xe2, 0xbb, 0xbf, 0x4f, 0x9e, 0xa4, 0x5e, 0x74, 0x06 } }, - { { 0x29, 0xac, 0xff, 0x27, 0xe0, 0x59, 0xbe, 0x39, 0x9c, 0x0d, 0x83, 0xd7, 0x10, 0x0b, 0x15, 0xb7, - 0xe1, 0xc2, 0x2c, 0x30, 0x73, 0x80, 0x3a, 0x7d, 0x5d, 0xab, 0x58, 0x6b, 0xc1, 0xf0, 0xf4, 0x22 } } }, - { { { 0xfe, 0x7f, 0xfb, 0x35, 0x7d, 0xc6, 0x01, 0x23, 0x28, 0xc4, 0x02, 0xac, 0x1f, 0x42, 0xb4, 0x9d, - 0xfc, 0x00, 0x94, 0xa5, 0xee, 0xca, 0xda, 0x97, 0x09, 0x41, 0x77, 0x87, 0x5d, 0x7b, 0x87, 0x78 } }, - { { 0xf5, 0xfb, 0x90, 0x2d, 0x81, 0x19, 0x9e, 0x2f, 0x6d, 0x85, 0x88, 0x8c, 0x40, 0x5c, 0x77, 0x41, - 0x4d, 0x01, 0x19, 0x76, 0x60, 0xe8, 0x4c, 0x48, 0xe4, 0x33, 0x83, 0x32, 0x6c, 0xb4, 0x41, 0x03 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xff, 0x10, 0xc2, 0x09, 0x4f, 0x6e, 0xf4, 0xd2, 0xdf, 0x7e, 0xca, 0x7b, 0x1c, 0x1d, 0xba, 0xa3, - 0xb6, 0xda, 0x67, 0x33, 0xd4, 0x87, 0x36, 0x4b, 0x11, 0x20, 0x05, 0xa6, 0x29, 0xc1, 0x87, 0x17 } }, - { { 0xf6, 0x96, 0xca, 0x2f, 0xda, 0x38, 0xa7, 0x1b, 0xfc, 0xca, 0x7d, 0xfe, 0x08, 0x89, 0xe2, 0x47, - 0x2b, 0x6a, 0x5d, 0x4b, 0xfa, 0xa1, 0xb4, 0xde, 0xb6, 0xc2, 0x31, 0x51, 0xf5, 0xe0, 0xa4, 0x0b } } }, - { { { 0x5c, 0xe5, 0xc6, 0x04, 0x8e, 0x2b, 0x57, 0xbe, 0x38, 0x85, 0x23, 0xcb, 0xb7, 0xbe, 0x4f, 0xa9, - 0xd3, 0x6e, 0x12, 0xaa, 0xd5, 0xb2, 0x2e, 0x93, 0x29, 0x9a, 0x4a, 0x88, 0x18, 0x43, 0xf5, 0x01 } }, - { { 0x50, 0xfc, 0xdb, 0xa2, 0x59, 0x21, 0x8d, 0xbd, 0x7e, 0x33, 0xae, 0x2f, 0x87, 0x1a, 0xd0, 0x97, - 0xc7, 0x0d, 0x4d, 0x63, 0x01, 0xef, 0x05, 0x84, 0xec, 0x40, 0xdd, 0xa8, 0x0a, 0x4f, 0x70, 0x0b } } }, - { { { 0x41, 0x69, 0x01, 0x67, 0x5c, 0xd3, 0x8a, 0xc5, 0xcf, 0x3f, 0xd1, 0x57, 0xd1, 0x67, 0x3e, 0x01, - 0x39, 0xb5, 0xcb, 0x81, 0x56, 0x96, 0x26, 0xb6, 0xc2, 0xe7, 0x5c, 0xfb, 0x63, 0x97, 0x58, 0x06 } }, - { { 0x0c, 0x0e, 0xf3, 0xba, 0xf0, 0xe5, 0xba, 0xb2, 0x57, 0x77, 0xc6, 0x20, 0x9b, 0x89, 0x24, 0xbe, - 0xf2, 0x9c, 0x8a, 0xba, 0x69, 0xc1, 0xf1, 0xb0, 0x4f, 0x2a, 0x05, 0x9a, 0xee, 0x10, 0x7e, 0x36 } } }, - { { { 0x3f, 0x26, 0xe9, 0x40, 0xe9, 0x03, 0xad, 0x06, 0x69, 0x91, 0xe0, 0xd1, 0x89, 0x60, 0x84, 0x79, - 0xde, 0x27, 0x6d, 0xe6, 0x76, 0xbd, 0xea, 0xe6, 0xae, 0x48, 0xc3, 0x67, 0xc0, 0x57, 0xcd, 0x2f } }, - { { 0x7f, 0xc1, 0xdc, 0xb9, 0xc7, 0xbc, 0x86, 0x3d, 0x55, 0x4b, 0x28, 0x7a, 0xfb, 0x4d, 0xc7, 0xf8, - 0xbc, 0x67, 0x2a, 0x60, 0x4d, 0x8f, 0x07, 0x0b, 0x1a, 0x17, 0xbf, 0xfa, 0xac, 0xa7, 0x3d, 0x1a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x91, 0x3f, 0xed, 0x5e, 0x18, 0x78, 0x3f, 0x23, 0x2c, 0x0d, 0x8c, 0x44, 0x00, 0xe8, 0xfb, 0xe9, - 0x8e, 0xd6, 0xd1, 0x36, 0x58, 0x57, 0x9e, 0xae, 0x4b, 0x5c, 0x0b, 0x07, 0xbc, 0x6b, 0x55, 0x2b } }, - { { 0x6f, 0x4d, 0x17, 0xd7, 0xe1, 0x84, 0xd9, 0x78, 0xb1, 0x90, 0xfd, 0x2e, 0xb3, 0xb5, 0x19, 0x3f, - 0x1b, 0xfa, 0xc0, 0x68, 0xb3, 0xdd, 0x00, 0x2e, 0x89, 0xbd, 0x7e, 0x80, 0x32, 0x13, 0xa0, 0x7b } } }, - { { { 0x1a, 0x6f, 0x40, 0xaf, 0x44, 0x44, 0xb0, 0x43, 0x8f, 0x0d, 0xd0, 0x1e, 0xc4, 0x0b, 0x19, 0x5d, - 0x8e, 0xfe, 0xc1, 0xf3, 0xc5, 0x5c, 0x91, 0xf8, 0x04, 0x4e, 0xbe, 0x90, 0xb4, 0x47, 0x5c, 0x3f } }, - { { 0xb0, 0x3b, 0x2c, 0xf3, 0xfe, 0x32, 0x71, 0x07, 0x3f, 0xaa, 0xba, 0x45, 0x60, 0xa8, 0x8d, 0xea, - 0x54, 0xcb, 0x39, 0x10, 0xb4, 0xf2, 0x8b, 0xd2, 0x14, 0x82, 0x42, 0x07, 0x8e, 0xe9, 0x7c, 0x53 } } }, - { { { 0xb0, 0xae, 0xc1, 0x8d, 0xc9, 0x8f, 0xb9, 0x7a, 0x77, 0xef, 0xba, 0x79, 0xa0, 0x3c, 0xa8, 0xf5, - 0x6a, 0xe2, 0x3f, 0x5d, 0x00, 0xe3, 0x4b, 0x45, 0x24, 0x7b, 0x43, 0x78, 0x55, 0x1d, 0x2b, 0x1e } }, - { { 0x01, 0xb8, 0xd6, 0x16, 0x67, 0xa0, 0x15, 0xb9, 0xe1, 0x58, 0xa4, 0xa7, 0x31, 0x37, 0x77, 0x2f, - 0x8b, 0x12, 0x9f, 0xf4, 0x3f, 0xc7, 0x36, 0x66, 0xd2, 0xa8, 0x56, 0xf7, 0x7f, 0x74, 0xc6, 0x41 } } }, - { { { 0x5d, 0xf8, 0xb4, 0xa8, 0x30, 0xdd, 0xcc, 0x38, 0xa5, 0xd3, 0xca, 0xd8, 0xd1, 0xf8, 0xb2, 0x31, - 0x91, 0xd4, 0x72, 0x05, 0x57, 0x4a, 0x3b, 0x82, 0x4a, 0xc6, 0x68, 0x20, 0xe2, 0x18, 0x41, 0x61 } }, - { { 0x19, 0xd4, 0x8d, 0x47, 0x29, 0x12, 0x65, 0xb0, 0x11, 0x78, 0x47, 0xb5, 0xcb, 0xa3, 0xa5, 0xfa, - 0x05, 0x85, 0x54, 0xa9, 0x33, 0x97, 0x8d, 0x2b, 0xc2, 0xfe, 0x99, 0x35, 0x28, 0xe5, 0xeb, 0x63 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xb1, 0x3f, 0x3f, 0xef, 0xd8, 0xf4, 0xfc, 0xb3, 0xa0, 0x60, 0x50, 0x06, 0x2b, 0x29, 0x52, 0x70, - 0x15, 0x0b, 0x24, 0x24, 0xf8, 0x5f, 0x79, 0x18, 0xcc, 0xff, 0x89, 0x99, 0x84, 0xa1, 0xae, 0x13 } }, - { { 0x44, 0x1f, 0xb8, 0xc2, 0x01, 0xc1, 0x30, 0x19, 0x55, 0x05, 0x60, 0x10, 0xa4, 0x6c, 0x2d, 0x67, - 0x70, 0xe5, 0x25, 0x1b, 0xf2, 0xbf, 0xdd, 0xfb, 0x70, 0x2b, 0xa1, 0x8c, 0x9c, 0x94, 0x84, 0x08 } } }, - { { { 0xe7, 0xc4, 0x43, 0x4d, 0xc9, 0x2b, 0x69, 0x5d, 0x1d, 0x3c, 0xaf, 0xbb, 0x43, 0x38, 0x4e, 0x98, - 0x3d, 0xed, 0x0d, 0x21, 0x03, 0xfd, 0xf0, 0x99, 0x47, 0x04, 0xb0, 0x98, 0x69, 0x55, 0x72, 0x0f } }, - { { 0x5e, 0xdf, 0x15, 0x53, 0x3b, 0x86, 0x80, 0xb0, 0xf1, 0x70, 0x68, 0x8f, 0x66, 0x7c, 0x0e, 0x49, - 0x1a, 0xd8, 0x6b, 0xfe, 0x4e, 0xef, 0xca, 0x47, 0xd4, 0x03, 0xc1, 0x37, 0x50, 0x9c, 0xc1, 0x16 } } }, - { { { 0xcd, 0x24, 0xc6, 0x3e, 0x0c, 0x82, 0x9b, 0x91, 0x2b, 0x61, 0x4a, 0xb2, 0x0f, 0x88, 0x55, 0x5f, - 0x5a, 0x57, 0xff, 0xe5, 0x74, 0x0b, 0x13, 0x43, 0x00, 0xd8, 0x6b, 0xcf, 0xd2, 0x15, 0x03, 0x2c } }, - { { 0xdc, 0xff, 0x15, 0x61, 0x2f, 0x4a, 0x2f, 0x62, 0xf2, 0x04, 0x2f, 0xb5, 0x0c, 0xb7, 0x1e, 0x3f, - 0x74, 0x1a, 0x0f, 0xd7, 0xea, 0xcd, 0xd9, 0x7d, 0xf6, 0x12, 0x0e, 0x2f, 0xdb, 0x5a, 0x3b, 0x16 } } }, - { { { 0x1b, 0x37, 0x47, 0xe3, 0xf5, 0x9e, 0xea, 0x2c, 0x2a, 0xe7, 0x82, 0x36, 0xf4, 0x1f, 0x81, 0x47, - 0x92, 0x4b, 0x69, 0x0e, 0x11, 0x8c, 0x5d, 0x53, 0x5b, 0x81, 0x27, 0x08, 0xbc, 0xa0, 0xae, 0x25 } }, - { { 0x69, 0x32, 0xa1, 0x05, 0x11, 0x42, 0x00, 0xd2, 0x59, 0xac, 0x4d, 0x62, 0x8b, 0x13, 0xe2, 0x50, - 0x5d, 0xa0, 0x9d, 0x9b, 0xfd, 0xbb, 0x12, 0x41, 0x75, 0x41, 0x9e, 0xcc, 0xdc, 0xc7, 0xdc, 0x5d } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xd9, 0xe3, 0x38, 0x06, 0x46, 0x70, 0x82, 0x5e, 0x28, 0x49, 0x79, 0xff, 0x25, 0xd2, 0x4e, 0x29, - 0x8d, 0x06, 0xb0, 0x23, 0xae, 0x9b, 0x66, 0xe4, 0x7d, 0xc0, 0x70, 0x91, 0xa3, 0xfc, 0xec, 0x4e } }, - { { 0x62, 0x12, 0x37, 0x6a, 0x30, 0xf6, 0x1e, 0xfb, 0x14, 0x5c, 0x0d, 0x0e, 0xb7, 0x81, 0x6a, 0xe7, - 0x08, 0x05, 0xac, 0xaa, 0x38, 0x46, 0xe2, 0x73, 0xea, 0x4b, 0x07, 0x81, 0x43, 0x7c, 0x9e, 0x5e } } }, - { { { 0xfc, 0xf9, 0x21, 0x4f, 0x2e, 0x76, 0x9b, 0x1f, 0x28, 0x60, 0x77, 0x43, 0x32, 0x9d, 0xbe, 0x17, - 0x30, 0x2a, 0xc6, 0x18, 0x92, 0x66, 0x62, 0x30, 0x98, 0x40, 0x11, 0xa6, 0x7f, 0x18, 0x84, 0x28 } }, - { { 0x3f, 0xab, 0xd3, 0xf4, 0x8a, 0x76, 0xa1, 0x3c, 0xca, 0x2d, 0x49, 0xc3, 0xea, 0x08, 0x0b, 0x85, - 0x17, 0x2a, 0xc3, 0x6c, 0x08, 0xfd, 0x57, 0x9f, 0x3d, 0x5f, 0xdf, 0x67, 0x68, 0x42, 0x00, 0x32 } } }, - { { { 0x51, 0x60, 0x1b, 0x06, 0x4f, 0x8a, 0x21, 0xba, 0x38, 0xa8, 0xba, 0xd6, 0x40, 0xf6, 0xe9, 0x9b, - 0x76, 0x4d, 0x56, 0x21, 0x5b, 0x0a, 0x9b, 0x2e, 0x4f, 0x3d, 0x81, 0x32, 0x08, 0x9f, 0x97, 0x5b } }, - { { 0xe5, 0x44, 0xec, 0x06, 0x9d, 0x90, 0x79, 0x9f, 0xd3, 0xe0, 0x79, 0xaf, 0x8f, 0x10, 0xfd, 0xdd, - 0x04, 0xae, 0x27, 0x97, 0x46, 0x33, 0x79, 0xea, 0xb8, 0x4e, 0xca, 0x5a, 0x59, 0x57, 0xe1, 0x0e } } }, - { { { 0x1a, 0xda, 0xf3, 0xa5, 0x41, 0x43, 0x28, 0xfc, 0x7e, 0xe7, 0x71, 0xea, 0xc6, 0x3b, 0x59, 0xcc, - 0x2e, 0xd3, 0x40, 0xec, 0xb3, 0x13, 0x6f, 0x44, 0xcd, 0x13, 0xb2, 0x37, 0xf2, 0x6e, 0xd9, 0x1c } }, - { { 0xe3, 0xdb, 0x60, 0xcd, 0x5c, 0x4a, 0x18, 0x0f, 0xef, 0x73, 0x36, 0x71, 0x8c, 0xf6, 0x11, 0xb4, - 0xd8, 0xce, 0x17, 0x5e, 0x4f, 0x26, 0x77, 0x97, 0x5f, 0xcb, 0xef, 0x91, 0xeb, 0x6a, 0x62, 0x7a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x18, 0x4a, 0xa2, 0x97, 0x08, 0x81, 0x2d, 0x83, 0xc4, 0xcc, 0xf0, 0x83, 0x7e, 0xec, 0x0d, 0x95, - 0x4c, 0x5b, 0xfb, 0xfa, 0x98, 0x80, 0x4a, 0x66, 0x56, 0x0c, 0x51, 0xb3, 0xf2, 0x04, 0x5d, 0x27 } }, - { { 0x3b, 0xb9, 0xb8, 0x06, 0x5a, 0x2e, 0xfe, 0xc3, 0x82, 0x37, 0x9c, 0xa3, 0x11, 0x1f, 0x9c, 0xa6, - 0xda, 0x63, 0x48, 0x9b, 0xad, 0xde, 0x2d, 0xa6, 0xbc, 0x6e, 0x32, 0xda, 0x27, 0x65, 0xdd, 0x57 } } }, - { { { 0x84, 0x4f, 0x37, 0x31, 0x7d, 0x2e, 0xbc, 0xad, 0x87, 0x07, 0x2a, 0x6b, 0x37, 0xfc, 0x5f, 0xeb, - 0x4e, 0x75, 0x35, 0xa6, 0xde, 0xab, 0x0a, 0x19, 0x3a, 0xb7, 0xb1, 0xef, 0x92, 0x6a, 0x3b, 0x3c } }, - { { 0x3b, 0xb2, 0x94, 0x6d, 0x39, 0x60, 0xac, 0xee, 0xe7, 0x81, 0x1a, 0x3b, 0x76, 0x87, 0x5c, 0x05, - 0x94, 0x2a, 0x45, 0xb9, 0x80, 0xe9, 0x22, 0xb1, 0x07, 0xcb, 0x40, 0x9e, 0x70, 0x49, 0x6d, 0x12 } } }, - { { { 0xfd, 0x18, 0x78, 0x84, 0xa8, 0x4c, 0x7d, 0x6e, 0x59, 0xa6, 0xe5, 0x74, 0xf1, 0x19, 0xa6, 0x84, - 0x2e, 0x51, 0xc1, 0x29, 0x13, 0xf2, 0x14, 0x6b, 0x5d, 0x53, 0x51, 0xf7, 0xef, 0xbf, 0x01, 0x22 } }, - { { 0xa4, 0x4b, 0x62, 0x4c, 0xe6, 0xfd, 0x72, 0x07, 0xf2, 0x81, 0xfc, 0xf2, 0xbd, 0x12, 0x7c, 0x68, - 0x76, 0x2a, 0xba, 0xf5, 0x65, 0xb1, 0x1f, 0x17, 0x0a, 0x38, 0xb0, 0xbf, 0xc0, 0xf8, 0xf4, 0x2a } } }, - { { { 0x55, 0x60, 0x55, 0x5b, 0xe4, 0x1d, 0x71, 0x4c, 0x9d, 0x5b, 0x9f, 0x70, 0xa6, 0x85, 0x9a, 0x2c, - 0xa0, 0xe2, 0x32, 0x48, 0xce, 0x9e, 0x2a, 0xa5, 0x07, 0x3b, 0xc7, 0x6c, 0x86, 0x77, 0xde, 0x3c } }, - { { 0xf7, 0x18, 0x7a, 0x96, 0x7e, 0x43, 0x57, 0xa9, 0x55, 0xfc, 0x4e, 0xb6, 0x72, 0x00, 0xf2, 0xe4, - 0xd7, 0x52, 0xd3, 0xd3, 0xb6, 0x85, 0xf6, 0x71, 0xc7, 0x44, 0x3f, 0x7f, 0xd7, 0xb3, 0xf2, 0x79 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x46, 0xca, 0xa7, 0x55, 0x7b, 0x79, 0xf3, 0xca, 0x5a, 0x65, 0xf6, 0xed, 0x50, 0x14, 0x7b, 0xe4, - 0xc4, 0x2a, 0x65, 0x9e, 0xe2, 0xf9, 0xca, 0xa7, 0x22, 0x26, 0x53, 0xcb, 0x21, 0x5b, 0xa7, 0x31 } }, - { { 0x90, 0xd7, 0xc5, 0x26, 0x08, 0xbd, 0xb0, 0x53, 0x63, 0x58, 0xc3, 0x31, 0x5e, 0x75, 0x46, 0x15, - 0x91, 0xa6, 0xf8, 0x2f, 0x1a, 0x08, 0x65, 0x88, 0x2f, 0x98, 0x04, 0xf1, 0x7c, 0x6e, 0x00, 0x77 } } }, - { { { 0x81, 0x21, 0x61, 0x09, 0xf6, 0x4e, 0xf1, 0x92, 0xee, 0x63, 0x61, 0x73, 0x87, 0xc7, 0x54, 0x0e, - 0x42, 0x4b, 0xc9, 0x47, 0xd1, 0xb8, 0x7e, 0x91, 0x75, 0x37, 0x99, 0x28, 0xb8, 0xdd, 0x7f, 0x50 } }, - { { 0x89, 0x8f, 0xc0, 0xbe, 0x5d, 0xd6, 0x9f, 0xa0, 0xf0, 0x9d, 0x81, 0xce, 0x3a, 0x7b, 0x98, 0x58, - 0xbb, 0xd7, 0x78, 0xc8, 0x3f, 0x13, 0xf1, 0x74, 0x19, 0xdf, 0xf8, 0x98, 0x89, 0x5d, 0xfa, 0x5f } } }, - { { { 0x9e, 0x35, 0x85, 0x94, 0x47, 0x1f, 0x90, 0x15, 0x26, 0xd0, 0x84, 0xed, 0x8a, 0x80, 0xf7, 0x63, - 0x42, 0x86, 0x27, 0xd7, 0xf4, 0x75, 0x58, 0xdc, 0x9c, 0xc0, 0x22, 0x7e, 0x20, 0x35, 0xfd, 0x1f } }, - { { 0x68, 0x0e, 0x6f, 0x97, 0xba, 0x70, 0xbb, 0xa3, 0x0e, 0xe5, 0x0b, 0x12, 0xf4, 0xa2, 0xdc, 0x47, - 0xf8, 0xe6, 0xd0, 0x23, 0x6c, 0x33, 0xa8, 0x99, 0x46, 0x6e, 0x0f, 0x44, 0xba, 0x76, 0x48, 0x0f } } }, - { { { 0xa3, 0x2a, 0x61, 0x37, 0xe2, 0x59, 0x12, 0x0e, 0x27, 0xba, 0x64, 0x43, 0xae, 0xc0, 0x42, 0x69, - 0x79, 0xa4, 0x1e, 0x29, 0x8b, 0x15, 0xeb, 0xf8, 0xaf, 0xd4, 0xa2, 0x68, 0x33, 0xb5, 0x7a, 0x24 } }, - { { 0x2c, 0x19, 0x33, 0xdd, 0x1b, 0xab, 0xec, 0x01, 0xb0, 0x23, 0xf8, 0x42, 0x2b, 0x06, 0x88, 0xea, - 0x3d, 0x2d, 0x00, 0x2a, 0x78, 0x45, 0x4d, 0x38, 0xed, 0x2e, 0x2e, 0x44, 0x49, 0xed, 0xcb, 0x33 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xa0, 0x68, 0xe8, 0x41, 0x8f, 0x91, 0xf8, 0x11, 0x13, 0x90, 0x2e, 0xa7, 0xab, 0x30, 0xef, 0xad, - 0xa0, 0x61, 0x00, 0x88, 0xef, 0xdb, 0xce, 0x5b, 0x5c, 0xbb, 0x62, 0xc8, 0x56, 0xf9, 0x00, 0x73 } }, - { { 0x3f, 0x60, 0xc1, 0x82, 0x2d, 0xa3, 0x28, 0x58, 0x24, 0x9e, 0x9f, 0xe3, 0x70, 0xcc, 0x09, 0x4e, - 0x1a, 0x3f, 0x11, 0x11, 0x15, 0x07, 0x3c, 0xa4, 0x41, 0xe0, 0x65, 0xa3, 0x0a, 0x41, 0x6d, 0x11 } } }, - { { { 0x31, 0x40, 0x01, 0x52, 0x56, 0x94, 0x5b, 0x28, 0x8a, 0xaa, 0x52, 0xee, 0xd8, 0x0a, 0x05, 0x8d, - 0xcd, 0xb5, 0xaa, 0x2e, 0x38, 0xaa, 0xb7, 0x87, 0xf7, 0x2b, 0xfb, 0x04, 0xcb, 0x84, 0x3d, 0x54 } }, - { { 0x20, 0xef, 0x59, 0xde, 0xa4, 0x2b, 0x93, 0x6e, 0x2e, 0xec, 0x42, 0x9a, 0xd4, 0x2d, 0xf4, 0x46, - 0x58, 0x27, 0x2b, 0x18, 0x8f, 0x83, 0x3d, 0x69, 0x9e, 0xd4, 0x3e, 0xb6, 0xc5, 0xfd, 0x58, 0x03 } } }, - { { { 0x33, 0x89, 0xc9, 0x63, 0x62, 0x1c, 0x17, 0xb4, 0x60, 0xc4, 0x26, 0x68, 0x09, 0xc3, 0x2e, 0x37, - 0x0f, 0x7b, 0xb4, 0x9c, 0xb6, 0xf9, 0xfb, 0xd4, 0x51, 0x78, 0xc8, 0x63, 0xea, 0x77, 0x47, 0x07 } }, - { { 0x32, 0xb4, 0x18, 0x47, 0x79, 0xcb, 0xd4, 0x5a, 0x07, 0x14, 0x0f, 0xa0, 0xd5, 0xac, 0xd0, 0x41, - 0x40, 0xab, 0x61, 0x23, 0xe5, 0x2a, 0x2a, 0x6f, 0xf7, 0xa8, 0xd4, 0x76, 0xef, 0xe7, 0x45, 0x6c } } }, - { { { 0xa1, 0x5e, 0x60, 0x4f, 0xfb, 0xe1, 0x70, 0x6a, 0x1f, 0x55, 0x4f, 0x09, 0xb4, 0x95, 0x33, 0x36, - 0xc6, 0x81, 0x01, 0x18, 0x06, 0x25, 0x27, 0xa4, 0xb4, 0x24, 0xa4, 0x86, 0x03, 0x4c, 0xac, 0x02 } }, - { { 0x77, 0x38, 0xde, 0xd7, 0x60, 0x48, 0x07, 0xf0, 0x74, 0xa8, 0xff, 0x54, 0xe5, 0x30, 0x43, 0xff, - 0x77, 0xfb, 0x21, 0x07, 0xff, 0xb2, 0x07, 0x6b, 0xe4, 0xe5, 0x30, 0xfc, 0x19, 0x6c, 0xa3, 0x01 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x13, 0xc5, 0x2c, 0xac, 0xd3, 0x83, 0x82, 0x7c, 0x29, 0xf7, 0x05, 0xa5, 0x00, 0xb6, 0x1f, 0x86, - 0x55, 0xf4, 0xd6, 0x2f, 0x0c, 0x99, 0xd0, 0x65, 0x9b, 0x6b, 0x46, 0x0d, 0x43, 0xf8, 0x16, 0x28 } }, - { { 0x1e, 0x7f, 0xb4, 0x74, 0x7e, 0xb1, 0x89, 0x4f, 0x18, 0x5a, 0xab, 0x64, 0x06, 0xdf, 0x45, 0x87, - 0xe0, 0x6a, 0xc6, 0xf0, 0x0e, 0xc9, 0x24, 0x35, 0x38, 0xea, 0x30, 0x54, 0xb4, 0xc4, 0x52, 0x54 } } }, - { { { 0xe9, 0x9f, 0xdc, 0x3f, 0xc1, 0x89, 0x44, 0x74, 0x27, 0xe4, 0xc1, 0x90, 0xff, 0x4a, 0xa7, 0x3c, - 0xee, 0xcd, 0xf4, 0x1d, 0x25, 0x94, 0x7f, 0x63, 0x16, 0x48, 0xbc, 0x64, 0xfe, 0x95, 0xc4, 0x0c } }, - { { 0x8b, 0x19, 0x75, 0x6e, 0x03, 0x06, 0x5e, 0x6a, 0x6f, 0x1a, 0x8c, 0xe3, 0xd3, 0x28, 0xf2, 0xe0, - 0xb9, 0x7a, 0x43, 0x69, 0xe6, 0xd3, 0xc0, 0xfe, 0x7e, 0x97, 0xab, 0x6c, 0x7b, 0x8e, 0x13, 0x42 } } }, - { { { 0xd4, 0xca, 0x70, 0x3d, 0xab, 0xfb, 0x5f, 0x5e, 0x00, 0x0c, 0xcc, 0x77, 0x22, 0xf8, 0x78, 0x55, - 0xae, 0x62, 0x35, 0xfb, 0x9a, 0xc6, 0x03, 0xe4, 0x0c, 0xee, 0xab, 0xc7, 0xc0, 0x89, 0x87, 0x54 } }, - { { 0x32, 0xad, 0xae, 0x85, 0x58, 0x43, 0xb8, 0xb1, 0xe6, 0x3e, 0x00, 0x9c, 0x78, 0x88, 0x56, 0xdb, - 0x9c, 0xfc, 0x79, 0xf6, 0xf9, 0x41, 0x5f, 0xb7, 0xbc, 0x11, 0xf9, 0x20, 0x36, 0x1c, 0x53, 0x2b } } }, - { { { 0x5a, 0x20, 0x5b, 0xa1, 0xa5, 0x44, 0x91, 0x24, 0x02, 0x63, 0x12, 0x64, 0xb8, 0x55, 0xf6, 0xde, - 0x2c, 0xdb, 0x47, 0xb8, 0xc6, 0x0a, 0xc3, 0x00, 0x78, 0x93, 0xd8, 0xf5, 0xf5, 0x18, 0x28, 0x0a } }, - { { 0xd6, 0x1b, 0x9a, 0x6c, 0xe5, 0x46, 0xea, 0x70, 0x96, 0x8d, 0x4e, 0x2a, 0x52, 0x21, 0x26, 0x4b, - 0xb1, 0xbb, 0x0f, 0x7c, 0xa9, 0x9b, 0x04, 0xbb, 0x51, 0x08, 0xf1, 0x9a, 0xa4, 0x76, 0x7c, 0x18 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xfa, 0x94, 0xf7, 0x40, 0xd0, 0xd7, 0xeb, 0xa9, 0x82, 0x36, 0xd5, 0x15, 0xb9, 0x33, 0x7a, 0xbf, - 0x8a, 0xf2, 0x63, 0xaa, 0x37, 0xf5, 0x59, 0xac, 0xbd, 0xbb, 0x32, 0x36, 0xbe, 0x73, 0x99, 0x38 } }, - { { 0x2c, 0xb3, 0xda, 0x7a, 0xd8, 0x3d, 0x99, 0xca, 0xd2, 0xf4, 0xda, 0x99, 0x8e, 0x4f, 0x98, 0xb7, - 0xf4, 0xae, 0x3e, 0x9f, 0x8e, 0x35, 0x60, 0xa4, 0x33, 0x75, 0xa4, 0x04, 0x93, 0xb1, 0x6b, 0x4d } } }, - { { { 0x97, 0x9d, 0xa8, 0xcd, 0x97, 0x7b, 0x9d, 0xb9, 0xe7, 0xa5, 0xef, 0xfd, 0xa8, 0x42, 0x6b, 0xc3, - 0x62, 0x64, 0x7d, 0xa5, 0x1b, 0xc9, 0x9e, 0xd2, 0x45, 0xb9, 0xee, 0x03, 0xb0, 0xbf, 0xc0, 0x68 } }, - { { 0xed, 0xb7, 0x84, 0x2c, 0xf6, 0xd3, 0xa1, 0x6b, 0x24, 0x6d, 0x87, 0x56, 0x97, 0x59, 0x79, 0x62, - 0x9f, 0xac, 0xed, 0xf3, 0xc9, 0x89, 0x21, 0x2e, 0x04, 0xb3, 0xcc, 0x2f, 0xbe, 0xd6, 0x0a, 0x4b } } }, - { { { 0x39, 0x61, 0x05, 0xed, 0x25, 0x89, 0x8b, 0x5d, 0x1b, 0xcb, 0x0c, 0x55, 0xf4, 0x6a, 0x00, 0x8a, - 0x46, 0xe8, 0x1e, 0xc6, 0x83, 0xc8, 0x5a, 0x76, 0xdb, 0xcc, 0x19, 0x7a, 0xcc, 0x67, 0x46, 0x0b } }, - { { 0x53, 0xcf, 0xc2, 0xa1, 0xad, 0x6a, 0xf3, 0xcd, 0x8f, 0xc9, 0xde, 0x1c, 0xf8, 0x6c, 0x8f, 0xf8, - 0x76, 0x42, 0xe7, 0xfe, 0xb2, 0x72, 0x21, 0x0a, 0x66, 0x74, 0x8f, 0xb7, 0xeb, 0xe4, 0x6f, 0x01 } } }, - { { { 0x22, 0x8c, 0x6b, 0xbe, 0xfc, 0x4d, 0x70, 0x62, 0x6e, 0x52, 0x77, 0x99, 0x88, 0x7e, 0x7b, 0x57, - 0x7a, 0x0d, 0xfe, 0xdc, 0x72, 0x92, 0xf1, 0x68, 0x1d, 0x97, 0xd7, 0x7c, 0x8d, 0x53, 0x10, 0x37 } }, - { { 0x53, 0x88, 0x77, 0x02, 0xca, 0x27, 0xa8, 0xe5, 0x45, 0xe2, 0xa8, 0x48, 0x2a, 0xab, 0x18, 0xca, - 0xea, 0x2d, 0x2a, 0x54, 0x17, 0x37, 0x32, 0x09, 0xdc, 0xe0, 0x4a, 0xb7, 0x7d, 0x82, 0x10, 0x7d } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x8a, 0x64, 0x1e, 0x14, 0x0a, 0x57, 0xd4, 0xda, 0x5c, 0x96, 0x9b, 0x01, 0x4c, 0x67, 0xbf, 0x8b, - 0x30, 0xfe, 0x08, 0xdb, 0x0d, 0xd5, 0xa8, 0xd7, 0x09, 0x11, 0x85, 0xa2, 0xd3, 0x45, 0xfb, 0x7e } }, - { { 0xda, 0x8c, 0xc2, 0xd0, 0xac, 0x18, 0xe8, 0x52, 0x36, 0xd4, 0x21, 0xa3, 0xdd, 0x57, 0x22, 0x79, - 0xb7, 0xf8, 0x71, 0x9d, 0xc6, 0x91, 0x70, 0x86, 0x56, 0xbf, 0xa1, 0x11, 0x8b, 0x19, 0xe1, 0x0f } } }, - { { { 0x18, 0x32, 0x98, 0x2c, 0x8f, 0x91, 0xae, 0x12, 0xf0, 0x8c, 0xea, 0xf3, 0x3c, 0xb9, 0x5d, 0xe4, - 0x69, 0xed, 0xb2, 0x47, 0x18, 0xbd, 0xce, 0x16, 0x52, 0x5c, 0x23, 0xe2, 0xa5, 0x25, 0x52, 0x5d } }, - { { 0xb9, 0xb1, 0xe7, 0x5d, 0x4e, 0xbc, 0xee, 0xbb, 0x40, 0x81, 0x77, 0x82, 0x19, 0xab, 0xb5, 0xc6, - 0xee, 0xab, 0x5b, 0x6b, 0x63, 0x92, 0x8a, 0x34, 0x8d, 0xcd, 0xee, 0x4f, 0x49, 0xe5, 0xc9, 0x7e } } }, - { { { 0x21, 0xac, 0x8b, 0x22, 0xcd, 0xc3, 0x9a, 0xe9, 0x5e, 0x78, 0xbd, 0xde, 0xba, 0xad, 0xab, 0xbf, - 0x75, 0x41, 0x09, 0xc5, 0x58, 0xa4, 0x7d, 0x92, 0xb0, 0x7f, 0xf2, 0xa1, 0xd1, 0xc0, 0xb3, 0x6d } }, - { { 0x62, 0x4f, 0xd0, 0x75, 0x77, 0xba, 0x76, 0x77, 0xd7, 0xb8, 0xd8, 0x92, 0x6f, 0x98, 0x34, 0x3d, - 0xd6, 0x4e, 0x1c, 0x0f, 0xf0, 0x8f, 0x2e, 0xf1, 0xb3, 0xbd, 0xb1, 0xb9, 0xec, 0x99, 0xb4, 0x07 } } }, - { { { 0x60, 0x57, 0x2e, 0x9a, 0x72, 0x1d, 0x6b, 0x6e, 0x58, 0x33, 0x24, 0x8c, 0x48, 0x39, 0x46, 0x8e, - 0x89, 0x6a, 0x88, 0x51, 0x23, 0x62, 0xb5, 0x32, 0x09, 0x36, 0xe3, 0x57, 0xf5, 0x98, 0xde, 0x6f } }, - { { 0x8b, 0x2c, 0x00, 0x48, 0x4a, 0xf9, 0x5b, 0x87, 0x69, 0x52, 0xe5, 0x5b, 0xd1, 0xb1, 0xe5, 0x25, - 0x25, 0xe0, 0x9c, 0xc2, 0x13, 0x44, 0xe8, 0xb9, 0x0a, 0x70, 0xad, 0xbd, 0x0f, 0x51, 0x94, 0x69 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xa2, 0xdc, 0xab, 0xa9, 0x25, 0x2d, 0xac, 0x5f, 0x03, 0x33, 0x08, 0xe7, 0x7e, 0xfe, 0x95, 0x36, - 0x3c, 0x5b, 0x3a, 0xd3, 0x05, 0x82, 0x1c, 0x95, 0x2d, 0xd8, 0x77, 0x7e, 0x02, 0xd9, 0x5b, 0x70 } }, - { { 0xc2, 0xfe, 0x1b, 0x0c, 0x67, 0xcd, 0xd6, 0xe0, 0x51, 0x8e, 0x2c, 0xe0, 0x79, 0x88, 0xf0, 0xcf, - 0x41, 0x4a, 0xad, 0x23, 0xd4, 0x46, 0xca, 0x94, 0xa1, 0xc3, 0xeb, 0x28, 0x06, 0xfa, 0x17, 0x14 } } }, - { { { 0x7b, 0xaa, 0x70, 0x0a, 0x4b, 0xfb, 0xf5, 0xbf, 0x80, 0xc5, 0xcf, 0x08, 0x7a, 0xdd, 0xa1, 0xf4, - 0x9d, 0x54, 0x50, 0x53, 0x23, 0x77, 0x23, 0xf5, 0x34, 0xa5, 0x22, 0xd1, 0x0d, 0x96, 0x2e, 0x47 } }, - { { 0xcc, 0xb7, 0x32, 0x89, 0x57, 0xd0, 0x98, 0x75, 0xe4, 0x37, 0x99, 0xa9, 0xe8, 0xba, 0xed, 0xba, - 0xeb, 0xc7, 0x4f, 0x15, 0x76, 0x07, 0x0c, 0x4c, 0xef, 0x9f, 0x52, 0xfc, 0x04, 0x5d, 0x58, 0x10 } } }, - { { { 0xce, 0x82, 0xf0, 0x8f, 0x79, 0x02, 0xa8, 0xd1, 0xda, 0x14, 0x09, 0x48, 0xee, 0x8a, 0x40, 0x98, - 0x76, 0x60, 0x54, 0x5a, 0xde, 0x03, 0x24, 0xf5, 0xe6, 0x2f, 0xe1, 0x03, 0xbf, 0x68, 0x82, 0x7f } }, - { { 0x64, 0xe9, 0x28, 0xc7, 0xa4, 0xcf, 0x2a, 0xf9, 0x90, 0x64, 0x72, 0x2c, 0x8b, 0xeb, 0xec, 0xa0, - 0xf2, 0x7d, 0x35, 0xb5, 0x90, 0x4d, 0x7f, 0x5b, 0x4a, 0x49, 0xe4, 0xb8, 0x3b, 0xc8, 0xa1, 0x2f } } }, - { { { 0x8b, 0xc5, 0xcc, 0x3d, 0x69, 0xa6, 0xa1, 0x18, 0x44, 0xbc, 0x4d, 0x77, 0x37, 0xc7, 0x86, 0xec, - 0x0c, 0xc9, 0xd6, 0x44, 0xa9, 0x23, 0x27, 0xb9, 0x03, 0x34, 0xa7, 0x0a, 0xd5, 0xc7, 0x34, 0x37 } }, - { { 0xf9, 0x7e, 0x3e, 0x66, 0xee, 0xf9, 0x99, 0x28, 0xff, 0xad, 0x11, 0xd8, 0xe2, 0x66, 0xc5, 0xcd, - 0x0f, 0x0d, 0x0b, 0x6a, 0xfc, 0x7c, 0x24, 0xa8, 0x4f, 0xa8, 0x5e, 0x80, 0x45, 0x8b, 0x6c, 0x41 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xef, 0x1e, 0xec, 0xf7, 0x8d, 0x77, 0xf2, 0xea, 0xdb, 0x60, 0x03, 0x21, 0xc0, 0xff, 0x5e, 0x67, - 0xc3, 0x71, 0x0b, 0x21, 0xb4, 0x41, 0xa0, 0x68, 0x38, 0xc6, 0x01, 0xa3, 0xd3, 0x51, 0x3c, 0x3c } }, - { { 0x92, 0xf8, 0xd6, 0x4b, 0xef, 0x42, 0x13, 0xb2, 0x4a, 0xc4, 0x2e, 0x72, 0x3f, 0xc9, 0x11, 0xbd, - 0x74, 0x02, 0x0e, 0xf5, 0x13, 0x9d, 0x83, 0x1a, 0x1b, 0xd5, 0x54, 0xde, 0xc4, 0x1e, 0x16, 0x6c } } }, - { { { 0x27, 0x52, 0xe4, 0x63, 0xaa, 0x94, 0xe6, 0xc3, 0x28, 0x9c, 0xc6, 0x56, 0xac, 0xfa, 0xb6, 0xbd, - 0xe2, 0xcc, 0x76, 0xc6, 0x27, 0x27, 0xa2, 0x8e, 0x78, 0x2b, 0x84, 0x72, 0x10, 0xbd, 0x4e, 0x2a } }, - { { 0xea, 0xa7, 0x23, 0xef, 0x04, 0x61, 0x80, 0x50, 0xc9, 0x6e, 0xa5, 0x96, 0xd1, 0xd1, 0xc8, 0xc3, - 0x18, 0xd7, 0x2d, 0xfd, 0x26, 0xbd, 0xcb, 0x7b, 0x92, 0x51, 0x0e, 0x4a, 0x65, 0x57, 0xb8, 0x49 } } }, - { { { 0xab, 0x55, 0x36, 0xc3, 0xec, 0x63, 0x55, 0x11, 0x55, 0xf6, 0xa5, 0xc7, 0x01, 0x5f, 0xfe, 0x79, - 0xd8, 0x0a, 0xf7, 0x03, 0xd8, 0x98, 0x99, 0xf5, 0xd0, 0x00, 0x54, 0x6b, 0x66, 0x28, 0xf5, 0x25 } }, - { { 0x7a, 0x8d, 0xa1, 0x5d, 0x70, 0x5d, 0x51, 0x27, 0xee, 0x30, 0x65, 0x56, 0x95, 0x46, 0xde, 0xbd, - 0x03, 0x75, 0xb4, 0x57, 0x59, 0x89, 0xeb, 0x02, 0x9e, 0xcc, 0x89, 0x19, 0xa7, 0xcb, 0x17, 0x67 } } }, - { { { 0x6a, 0xeb, 0xfc, 0x9a, 0x9a, 0x10, 0xce, 0xdb, 0x3a, 0x1c, 0x3c, 0x6a, 0x9d, 0xea, 0x46, 0xbc, - 0x45, 0x49, 0xac, 0xe3, 0x41, 0x12, 0x7c, 0xf0, 0xf7, 0x4f, 0xf9, 0xf7, 0xff, 0x2c, 0x89, 0x04 } }, - { { 0x30, 0x31, 0x54, 0x1a, 0x46, 0xca, 0xe6, 0xc6, 0xcb, 0xe2, 0xc3, 0xc1, 0x8b, 0x75, 0x81, 0xbe, - 0xee, 0xf8, 0xa3, 0x11, 0x1c, 0x25, 0xa3, 0xa7, 0x35, 0x51, 0x55, 0xe2, 0x25, 0xaa, 0xe2, 0x3a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xb4, 0x48, 0x10, 0x9f, 0x8a, 0x09, 0x76, 0xfa, 0xf0, 0x7a, 0xb0, 0x70, 0xf7, 0x83, 0x80, 0x52, - 0x84, 0x2b, 0x26, 0xa2, 0xc4, 0x5d, 0x4f, 0xba, 0xb1, 0xc8, 0x40, 0x0d, 0x78, 0x97, 0xc4, 0x60 } }, - { { 0xd4, 0xb1, 0x6c, 0x08, 0xc7, 0x40, 0x38, 0x73, 0x5f, 0x0b, 0xf3, 0x76, 0x5d, 0xb2, 0xa5, 0x2f, - 0x57, 0x57, 0x07, 0xed, 0x08, 0xa2, 0x6c, 0x4f, 0x08, 0x02, 0xb5, 0x0e, 0xee, 0x44, 0xfa, 0x22 } } }, - { { { 0x0f, 0x00, 0x3f, 0xa6, 0x04, 0x19, 0x56, 0x65, 0x31, 0x7f, 0x8b, 0xeb, 0x0d, 0xe1, 0x47, 0x89, - 0x97, 0x16, 0x53, 0xfa, 0x81, 0xa7, 0xaa, 0xb2, 0xbf, 0x67, 0xeb, 0x72, 0x60, 0x81, 0x0d, 0x48 } }, - { { 0x7e, 0x13, 0x33, 0xcd, 0xa8, 0x84, 0x56, 0x1e, 0x67, 0xaf, 0x6b, 0x43, 0xac, 0x17, 0xaf, 0x16, - 0xc0, 0x52, 0x99, 0x49, 0x5b, 0x87, 0x73, 0x7e, 0xb5, 0x43, 0xda, 0x6b, 0x1d, 0x0f, 0x2d, 0x55 } } }, - { { { 0xe9, 0x58, 0x1f, 0xff, 0x84, 0x3f, 0x93, 0x1c, 0xcb, 0xe1, 0x30, 0x69, 0xa5, 0x75, 0x19, 0x7e, - 0x14, 0x5f, 0xf8, 0xfc, 0x09, 0xdd, 0xa8, 0x78, 0x9d, 0xca, 0x59, 0x8b, 0xd1, 0x30, 0x01, 0x13 } }, - { { 0xff, 0x76, 0x03, 0xc5, 0x4b, 0x89, 0x99, 0x70, 0x00, 0x59, 0x70, 0x9c, 0xd5, 0xd9, 0x11, 0x89, - 0x5a, 0x46, 0xfe, 0xef, 0xdc, 0xd9, 0x55, 0x2b, 0x45, 0xa7, 0xb0, 0x2d, 0xfb, 0x24, 0xc2, 0x29 } } }, - { { { 0x38, 0x06, 0xf8, 0x0b, 0xac, 0x82, 0xc4, 0x97, 0x2b, 0x90, 0xe0, 0xf7, 0xa8, 0xab, 0x6c, 0x08, - 0x80, 0x66, 0x90, 0x46, 0xf7, 0x26, 0x2d, 0xf8, 0xf1, 0xc4, 0x6b, 0x4a, 0x82, 0x98, 0x8e, 0x37 } }, - { { 0x8e, 0xb4, 0xee, 0xb8, 0xd4, 0x3f, 0xb2, 0x1b, 0xe0, 0x0a, 0x3d, 0x75, 0x34, 0x28, 0xa2, 0x8e, - 0xc4, 0x92, 0x7b, 0xfe, 0x60, 0x6e, 0x6d, 0xb8, 0x31, 0x1d, 0x62, 0x0d, 0x78, 0x14, 0x42, 0x11 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x5e, 0xa8, 0xd8, 0x04, 0x9b, 0x73, 0xc9, 0xc9, 0xdc, 0x0d, 0x73, 0xbf, 0x0a, 0x0a, 0x73, 0xff, - 0x18, 0x1f, 0x9c, 0x51, 0xaa, 0xc6, 0xf1, 0x83, 0x25, 0xfd, 0xab, 0xa3, 0x11, 0xd3, 0x01, 0x24 } }, - { { 0x4d, 0xe3, 0x7e, 0x38, 0x62, 0x5e, 0x64, 0xbb, 0x2b, 0x53, 0xb5, 0x03, 0x68, 0xc4, 0xf2, 0x2b, - 0x5a, 0x03, 0x32, 0x99, 0x4a, 0x41, 0x9a, 0xe1, 0x1a, 0xae, 0x8c, 0x48, 0xf3, 0x24, 0x32, 0x65 } } }, - { { { 0xe8, 0xdd, 0xad, 0x3a, 0x8c, 0xea, 0xf4, 0xb3, 0xb2, 0xe5, 0x73, 0xf2, 0xed, 0x8b, 0xbf, 0xed, - 0xb1, 0x0c, 0x0c, 0xfb, 0x2b, 0xf1, 0x01, 0x48, 0xe8, 0x26, 0x03, 0x8e, 0x27, 0x4d, 0x96, 0x72 } }, - { { 0xc8, 0x09, 0x3b, 0x60, 0xc9, 0x26, 0x4d, 0x7c, 0xf2, 0x9c, 0xd4, 0xa1, 0x3b, 0x26, 0xc2, 0x04, - 0x33, 0x44, 0x76, 0x3c, 0x02, 0xbb, 0x11, 0x42, 0x0c, 0x22, 0xb7, 0xc6, 0xe1, 0xac, 0xb4, 0x0e } } }, - { { { 0x6f, 0x85, 0xe7, 0xef, 0xde, 0x67, 0x30, 0xfc, 0xbf, 0x5a, 0xe0, 0x7b, 0x7a, 0x2a, 0x54, 0x6b, - 0x5d, 0x62, 0x85, 0xa1, 0xf8, 0x16, 0x88, 0xec, 0x61, 0xb9, 0x96, 0xb5, 0xef, 0x2d, 0x43, 0x4d } }, - { { 0x7c, 0x31, 0x33, 0xcc, 0xe4, 0xcf, 0x6c, 0xff, 0x80, 0x47, 0x77, 0xd1, 0xd8, 0xe9, 0x69, 0x97, - 0x98, 0x7f, 0x20, 0x57, 0x1d, 0x1d, 0x4f, 0x08, 0x27, 0xc8, 0x35, 0x57, 0x40, 0xc6, 0x21, 0x0c } } }, - { { { 0xd2, 0x8e, 0x9b, 0xfa, 0x42, 0x8e, 0xdf, 0x8f, 0xc7, 0x86, 0xf9, 0xa4, 0xca, 0x70, 0x00, 0x9d, - 0x21, 0xbf, 0xec, 0x57, 0x62, 0x30, 0x58, 0x8c, 0x0d, 0x35, 0xdb, 0x5d, 0x8b, 0x6a, 0xa0, 0x5a } }, - { { 0xc1, 0x58, 0x7c, 0x0d, 0x20, 0xdd, 0x11, 0x26, 0x5f, 0x89, 0x3b, 0x97, 0x58, 0xf8, 0x8b, 0xe3, - 0xdf, 0x32, 0xe2, 0xfc, 0xd8, 0x67, 0xf2, 0xa5, 0x37, 0x1e, 0x6d, 0xec, 0x7c, 0x27, 0x20, 0x79 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xd0, 0xe9, 0xc0, 0xfa, 0x95, 0x45, 0x23, 0x96, 0xf1, 0x2c, 0x79, 0x25, 0x14, 0xce, 0x40, 0x14, - 0x44, 0x2c, 0x36, 0x50, 0xd9, 0x63, 0x56, 0xb7, 0x56, 0x3b, 0x9e, 0xa7, 0xef, 0x89, 0xbb, 0x0e } }, - { { 0xce, 0x7f, 0xdc, 0x0a, 0xcc, 0x82, 0x1c, 0x0a, 0x78, 0x71, 0xe8, 0x74, 0x8d, 0x01, 0x30, 0x0f, - 0xa7, 0x11, 0x4c, 0xdf, 0x38, 0xd7, 0xa7, 0x0d, 0xf8, 0x48, 0x52, 0x00, 0x80, 0x7b, 0x5f, 0x0e } } }, - { { { 0x25, 0x83, 0xe6, 0x94, 0x7b, 0x81, 0xb2, 0x91, 0xae, 0x0e, 0x05, 0xc9, 0xa3, 0x68, 0x2d, 0xd9, - 0x88, 0x25, 0x19, 0x2a, 0x61, 0x61, 0x21, 0x97, 0x15, 0xa1, 0x35, 0xa5, 0x46, 0xc8, 0xa2, 0x0e } }, - { { 0x1b, 0x03, 0x0d, 0x8b, 0x5a, 0x1b, 0x97, 0x4b, 0xf2, 0x16, 0x31, 0x3d, 0x1f, 0x33, 0xa0, 0x50, - 0x3a, 0x18, 0xbe, 0x13, 0xa1, 0x76, 0xc1, 0xba, 0x1b, 0xf1, 0x05, 0x7b, 0x33, 0xa8, 0x82, 0x3b } } }, - { { { 0xba, 0x36, 0x7b, 0x6d, 0xa9, 0xea, 0x14, 0x12, 0xc5, 0xfa, 0x91, 0x00, 0xba, 0x9b, 0x99, 0xcc, - 0x56, 0x02, 0xe9, 0xa0, 0x26, 0x40, 0x66, 0x8c, 0xc4, 0xf8, 0x85, 0x33, 0x68, 0xe7, 0x03, 0x20 } }, - { { 0x50, 0x5b, 0xff, 0xa9, 0xb2, 0xf1, 0xf1, 0x78, 0xcf, 0x14, 0xa4, 0xa9, 0xfc, 0x09, 0x46, 0x94, - 0x54, 0x65, 0x0d, 0x9c, 0x5f, 0x72, 0x21, 0xe2, 0x97, 0xa5, 0x2d, 0x81, 0xce, 0x4a, 0x5f, 0x79 } } }, - { { { 0x3d, 0x5f, 0x5c, 0xd2, 0xbc, 0x7d, 0x77, 0x0e, 0x2a, 0x6d, 0x22, 0x45, 0x84, 0x06, 0xc4, 0xdd, - 0xc6, 0xa6, 0xc6, 0xd7, 0x49, 0xad, 0x6d, 0x87, 0x91, 0x0e, 0x3a, 0x67, 0x1d, 0x2c, 0x1d, 0x56 } }, - { { 0xfe, 0x7a, 0x74, 0xcf, 0xd4, 0xd2, 0xe5, 0x19, 0xde, 0xd0, 0xdb, 0x70, 0x23, 0x69, 0xe6, 0x6d, - 0xec, 0xec, 0xcc, 0x09, 0x33, 0x6a, 0x77, 0xdc, 0x6b, 0x22, 0x76, 0x5d, 0x92, 0x09, 0xac, 0x2d } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x23, 0x15, 0x17, 0xeb, 0xd3, 0xdb, 0x12, 0x5e, 0x01, 0xf0, 0x91, 0xab, 0x2c, 0x41, 0xce, 0xac, - 0xed, 0x1b, 0x4b, 0x2d, 0xbc, 0xdb, 0x17, 0x66, 0x89, 0x46, 0xad, 0x4b, 0x1e, 0x6f, 0x0b, 0x14 } }, - { { 0x11, 0xce, 0xbf, 0xb6, 0x77, 0x2d, 0x48, 0x22, 0x18, 0x4f, 0xa3, 0x5d, 0x4a, 0xb0, 0x70, 0x12, - 0x3e, 0x54, 0xd7, 0xd8, 0x0e, 0x2b, 0x27, 0xdc, 0x53, 0xff, 0xca, 0x8c, 0x59, 0xb3, 0x4e, 0x44 } } }, - { { { 0x07, 0x76, 0x61, 0x0f, 0x66, 0xb2, 0x21, 0x39, 0x7e, 0xc0, 0xec, 0x45, 0x28, 0x82, 0xa1, 0x29, - 0x32, 0x44, 0x35, 0x13, 0x5e, 0x61, 0x5e, 0x54, 0xcb, 0x7c, 0xef, 0xf6, 0x41, 0xcf, 0x9f, 0x0a } }, - { { 0xdd, 0xf9, 0xda, 0x84, 0xc3, 0xe6, 0x8a, 0x9f, 0x24, 0xd2, 0x96, 0x5d, 0x39, 0x6f, 0x58, 0x8c, - 0xc1, 0x56, 0x93, 0xab, 0xb5, 0x79, 0x3b, 0xd2, 0xa8, 0x73, 0x16, 0xed, 0xfa, 0xb4, 0x2f, 0x73 } } }, - { { { 0x8b, 0xb1, 0x95, 0xe5, 0x92, 0x50, 0x35, 0x11, 0x76, 0xac, 0xf4, 0x4d, 0x24, 0xc3, 0x32, 0xe6, - 0xeb, 0xfe, 0x2c, 0x87, 0xc4, 0xf1, 0x56, 0xc4, 0x75, 0x24, 0x7a, 0x56, 0x85, 0x5a, 0x3a, 0x13 } }, - { { 0x0d, 0x16, 0xac, 0x3c, 0x4a, 0x58, 0x86, 0x3a, 0x46, 0x7f, 0x6c, 0xa3, 0x52, 0x6e, 0x37, 0xe4, - 0x96, 0x9c, 0xe9, 0x5c, 0x66, 0x41, 0x67, 0xe4, 0xfb, 0x79, 0x0c, 0x05, 0xf6, 0x64, 0xd5, 0x7c } } }, - { { { 0x28, 0xc1, 0xe1, 0x54, 0x73, 0xf2, 0xbf, 0x76, 0x74, 0x19, 0x19, 0x1b, 0xe4, 0xb9, 0xa8, 0x46, - 0x65, 0x73, 0xf3, 0x77, 0x9b, 0x29, 0x74, 0x5b, 0xc6, 0x89, 0x6c, 0x2c, 0x7c, 0xf8, 0xb3, 0x0f } }, - { { 0xf7, 0xd5, 0xe9, 0x74, 0x5d, 0xb8, 0x25, 0x16, 0xb5, 0x30, 0xbc, 0x84, 0xc5, 0xf0, 0xad, 0xca, - 0x12, 0x28, 0xbc, 0x9d, 0xd4, 0xfa, 0x82, 0xe6, 0xe3, 0xbf, 0xa2, 0x15, 0x2c, 0xd4, 0x34, 0x10 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x61, 0xb1, 0x46, 0xba, 0x0e, 0x31, 0xa5, 0x67, 0x6c, 0x7f, 0xd6, 0xd9, 0x27, 0x85, 0x0f, 0x79, - 0x14, 0xc8, 0x6c, 0x2f, 0x5f, 0x5b, 0x9c, 0x35, 0x3d, 0x38, 0x86, 0x77, 0x65, 0x55, 0x6a, 0x7b } }, - { { 0xd3, 0xb0, 0x3a, 0x66, 0x60, 0x1b, 0x43, 0xf1, 0x26, 0x58, 0x99, 0x09, 0x8f, 0x2d, 0xa3, 0x14, - 0x71, 0x85, 0xdb, 0xed, 0xf6, 0x26, 0xd5, 0x61, 0x9a, 0x73, 0xac, 0x0e, 0xea, 0xac, 0xb7, 0x0c } } }, - { { { 0x5e, 0xf4, 0xe5, 0x17, 0x0e, 0x10, 0x9f, 0xe7, 0x43, 0x5f, 0x67, 0x5c, 0xac, 0x4b, 0xe5, 0x14, - 0x41, 0xd2, 0xbf, 0x48, 0xf5, 0x14, 0xb0, 0x71, 0xc6, 0x61, 0xc1, 0xb2, 0x70, 0x58, 0xd2, 0x5a } }, - { { 0x2d, 0xba, 0x16, 0x07, 0x92, 0x94, 0xdc, 0xbd, 0x50, 0x2b, 0xc9, 0x7f, 0x42, 0x00, 0xba, 0x61, - 0xed, 0xf8, 0x43, 0xed, 0xf5, 0xf9, 0x40, 0x60, 0xb2, 0xb0, 0x82, 0xcb, 0xed, 0x75, 0xc7, 0x65 } } }, - { { { 0x80, 0xba, 0x0d, 0x09, 0x40, 0xa7, 0x39, 0xa6, 0x67, 0x34, 0x7e, 0x66, 0xbe, 0x56, 0xfb, 0x53, - 0x78, 0xc4, 0x46, 0xe8, 0xed, 0x68, 0x6c, 0x7f, 0xce, 0xe8, 0x9f, 0xce, 0xa2, 0x64, 0x58, 0x53 } }, - { { 0xe8, 0xc1, 0xa9, 0xc2, 0x7b, 0x59, 0x21, 0x33, 0xe2, 0x43, 0x73, 0x2b, 0xac, 0x2d, 0xc1, 0x89, - 0x3b, 0x15, 0xe2, 0xd5, 0xc0, 0x97, 0x8a, 0xfd, 0x6f, 0x36, 0x33, 0xb7, 0xb9, 0xc3, 0x88, 0x09 } } }, - { { { 0xd0, 0xb6, 0x56, 0x30, 0x5c, 0xae, 0xb3, 0x75, 0x44, 0xa4, 0x83, 0x51, 0x6e, 0x01, 0x65, 0xef, - 0x45, 0x76, 0xe6, 0xf5, 0xa2, 0x0d, 0xd4, 0x16, 0x3b, 0x58, 0x2f, 0xf2, 0x2f, 0x36, 0x18, 0x3f } }, - { { 0xfd, 0x2f, 0xe0, 0x9b, 0x1e, 0x8c, 0xc5, 0x18, 0xa9, 0xca, 0xd4, 0x2b, 0x35, 0xb6, 0x95, 0x0a, - 0x9f, 0x7e, 0xfb, 0xc4, 0xef, 0x88, 0x7b, 0x23, 0x43, 0xec, 0x2f, 0x0d, 0x0f, 0x7a, 0xfc, 0x5c } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x8d, 0xd2, 0xda, 0xc7, 0x44, 0xd6, 0x7a, 0xdb, 0x26, 0x7d, 0x1d, 0xb8, 0xe1, 0xde, 0x9d, 0x7a, - 0x7d, 0x17, 0x7e, 0x1c, 0x37, 0x04, 0x8d, 0x2d, 0x7c, 0x5e, 0x18, 0x38, 0x1e, 0xaf, 0xc7, 0x1b } }, - { { 0x33, 0x48, 0x31, 0x00, 0x59, 0xf6, 0xf2, 0xca, 0x0f, 0x27, 0x1b, 0x63, 0x12, 0x7e, 0x02, 0x1d, - 0x49, 0xc0, 0x5d, 0x79, 0x87, 0xef, 0x5e, 0x7a, 0x2f, 0x1f, 0x66, 0x55, 0xd8, 0x09, 0xd9, 0x61 } } }, - { { { 0x54, 0x83, 0x02, 0x18, 0x82, 0x93, 0x99, 0x07, 0xd0, 0xa7, 0xda, 0xd8, 0x75, 0x89, 0xfa, 0xf2, - 0xd9, 0xa3, 0xb8, 0x6b, 0x5a, 0x35, 0x28, 0xd2, 0x6b, 0x59, 0xc2, 0xf8, 0x45, 0xe2, 0xbc, 0x06 } }, - { { 0x65, 0xc0, 0xa3, 0x88, 0x51, 0x95, 0xfc, 0x96, 0x94, 0x78, 0xe8, 0x0d, 0x8b, 0x41, 0xc9, 0xc2, - 0x58, 0x48, 0x75, 0x10, 0x2f, 0xcd, 0x2a, 0xc9, 0xa0, 0x6d, 0x0f, 0xdd, 0x9c, 0x98, 0x26, 0x3d } } }, - { { { 0x2f, 0x66, 0x29, 0x1b, 0x04, 0x89, 0xbd, 0x7e, 0xee, 0x6e, 0xdd, 0xb7, 0x0e, 0xef, 0xb0, 0x0c, - 0xb4, 0xfc, 0x7f, 0xc2, 0xc9, 0x3a, 0x3c, 0x64, 0xef, 0x45, 0x44, 0xaf, 0x8a, 0x90, 0x65, 0x76 } }, - { { 0xa1, 0x4c, 0x70, 0x4b, 0x0e, 0xa0, 0x83, 0x70, 0x13, 0xa4, 0xaf, 0xb8, 0x38, 0x19, 0x22, 0x65, - 0x09, 0xb4, 0x02, 0x4f, 0x06, 0xf8, 0x17, 0xce, 0x46, 0x45, 0xda, 0x50, 0x7c, 0x8a, 0xd1, 0x4e } } }, - { { { 0xf7, 0xd4, 0x16, 0x6c, 0x4e, 0x95, 0x9d, 0x5d, 0x0f, 0x91, 0x2b, 0x52, 0xfe, 0x5c, 0x34, 0xe5, - 0x30, 0xe6, 0xa4, 0x3b, 0xf3, 0xf3, 0x34, 0x08, 0xa9, 0x4a, 0xa0, 0xb5, 0x6e, 0xb3, 0x09, 0x0a } }, - { { 0x26, 0xd9, 0x5e, 0xa3, 0x0f, 0xeb, 0xa2, 0xf3, 0x20, 0x3b, 0x37, 0xd4, 0xe4, 0x9e, 0xce, 0x06, - 0x3d, 0x53, 0xed, 0xae, 0x2b, 0xeb, 0xb6, 0x24, 0x0a, 0x11, 0xa3, 0x0f, 0xd6, 0x7f, 0xa4, 0x3a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xdb, 0x9f, 0x2c, 0xfc, 0xd6, 0xb2, 0x1e, 0x2e, 0x52, 0x7a, 0x06, 0x87, 0x2d, 0x86, 0x72, 0x2b, - 0x6d, 0x90, 0x77, 0x46, 0x43, 0xb5, 0x7a, 0xf8, 0x60, 0x7d, 0x91, 0x60, 0x5b, 0x9d, 0x9e, 0x07 } }, - { { 0x97, 0x87, 0xc7, 0x04, 0x1c, 0x38, 0x01, 0x39, 0x58, 0xc7, 0x85, 0xa3, 0xfc, 0x64, 0x00, 0x64, - 0x25, 0xa2, 0xbf, 0x50, 0x94, 0xca, 0x26, 0x31, 0x45, 0x0a, 0x24, 0xd2, 0x51, 0x29, 0x51, 0x16 } } }, - { { { 0x4d, 0x4a, 0xd7, 0x98, 0x71, 0x57, 0xac, 0x7d, 0x8b, 0x37, 0xbd, 0x63, 0xff, 0x87, 0xb1, 0x49, - 0x95, 0x20, 0x7c, 0xcf, 0x7c, 0x59, 0xc4, 0x91, 0x9c, 0xef, 0xd0, 0xdb, 0x60, 0x09, 0x9d, 0x46 } }, - { { 0xcb, 0x78, 0x94, 0x90, 0xe4, 0x45, 0xb3, 0xf6, 0xd9, 0xf6, 0x57, 0x74, 0xd5, 0xf8, 0x83, 0x4f, - 0x39, 0xc9, 0xbd, 0x88, 0xc2, 0x57, 0x21, 0x1f, 0x24, 0x32, 0x68, 0xf8, 0xc7, 0x21, 0x5f, 0x0b } } }, - { { { 0x2a, 0x36, 0x68, 0xfc, 0x5f, 0xb6, 0x4f, 0xa5, 0xe3, 0x9d, 0x24, 0x2f, 0xc0, 0x93, 0x61, 0xcf, - 0xf8, 0x0a, 0xed, 0xe1, 0xdb, 0x27, 0xec, 0x0e, 0x14, 0x32, 0x5f, 0x8e, 0xa1, 0x62, 0x41, 0x16 } }, - { { 0x95, 0x21, 0x01, 0xce, 0x95, 0x5b, 0x0e, 0x57, 0xc7, 0xb9, 0x62, 0xb5, 0x28, 0xca, 0x11, 0xec, - 0xb4, 0x46, 0x06, 0x73, 0x26, 0xff, 0xfb, 0x66, 0x7d, 0xee, 0x5f, 0xb2, 0x56, 0xfd, 0x2a, 0x08 } } }, - { { { 0x92, 0x67, 0x77, 0x56, 0xa1, 0xff, 0xc4, 0xc5, 0x95, 0xf0, 0xe3, 0x3a, 0x0a, 0xca, 0x94, 0x4d, - 0x9e, 0x7e, 0x3d, 0xb9, 0x6e, 0xb6, 0xb0, 0xce, 0xa4, 0x30, 0x89, 0x99, 0xe9, 0xad, 0x11, 0x59 } }, - { { 0xf6, 0x48, 0x95, 0xa1, 0x6f, 0x5f, 0xb7, 0xa5, 0xbb, 0x30, 0x00, 0x1c, 0xd2, 0x8a, 0xd6, 0x25, - 0x26, 0x1b, 0xb2, 0x0d, 0x37, 0x6a, 0x05, 0xf4, 0x9d, 0x3e, 0x17, 0x2a, 0x43, 0xd2, 0x3a, 0x06 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x32, 0x99, 0x93, 0xd1, 0x9a, 0x72, 0xf3, 0xa9, 0x16, 0xbd, 0xb4, 0x4c, 0xdd, 0xf9, 0xd4, 0xb2, - 0x64, 0x9a, 0xd3, 0x05, 0xe4, 0xa3, 0x73, 0x1c, 0xcb, 0x7e, 0x57, 0x67, 0xff, 0x04, 0xb3, 0x10 } }, - { { 0xb9, 0x4b, 0xa4, 0xad, 0xd0, 0x6d, 0x61, 0x23, 0xb4, 0xaf, 0x34, 0xa9, 0xaa, 0x65, 0xec, 0xd9, - 0x69, 0xe3, 0x85, 0xcd, 0xcc, 0xe7, 0xb0, 0x9b, 0x41, 0xc1, 0x1c, 0xf9, 0xa0, 0xfa, 0xb7, 0x13 } } }, - { { { 0x04, 0xfd, 0x88, 0x3c, 0x0c, 0xd0, 0x09, 0x52, 0x51, 0x4f, 0x06, 0x19, 0xcc, 0xc3, 0xbb, 0xde, - 0x80, 0xc5, 0x33, 0xbc, 0xf9, 0xf3, 0x17, 0x36, 0xdd, 0xc6, 0xde, 0xe8, 0x9b, 0x5d, 0x79, 0x1b } }, - { { 0x65, 0x0a, 0xbe, 0x51, 0x57, 0xad, 0x50, 0x79, 0x08, 0x71, 0x9b, 0x07, 0x95, 0x8f, 0xfb, 0xae, - 0x4b, 0x38, 0xba, 0xcf, 0x53, 0x2a, 0x86, 0x1e, 0xc0, 0x50, 0x5c, 0x67, 0x1b, 0xf6, 0x87, 0x6c } } }, - { { { 0x4f, 0x00, 0xb2, 0x66, 0x55, 0xed, 0x4a, 0xed, 0x8d, 0xe1, 0x66, 0x18, 0xb2, 0x14, 0x74, 0x8d, - 0xfd, 0x1a, 0x36, 0x0f, 0x26, 0x5c, 0x8b, 0x89, 0xf3, 0xab, 0xf2, 0xf3, 0x24, 0x67, 0xfd, 0x70 } }, - { { 0xfd, 0x4e, 0x2a, 0xc1, 0x3a, 0xca, 0x8f, 0x00, 0xd8, 0xec, 0x74, 0x67, 0xef, 0x61, 0xe0, 0x28, - 0xd0, 0x96, 0xf4, 0x48, 0xde, 0x81, 0xe3, 0xef, 0xdc, 0xaa, 0x7d, 0xf3, 0xb6, 0x55, 0xa6, 0x65 } } }, - { { { 0xeb, 0xcb, 0xc5, 0x70, 0x91, 0x31, 0x10, 0x93, 0x0d, 0xc8, 0xd0, 0xef, 0x62, 0xe8, 0x6f, 0x82, - 0xe3, 0x69, 0x3d, 0x91, 0x7f, 0x31, 0xe1, 0x26, 0x35, 0x3c, 0x4a, 0x2f, 0xab, 0xc4, 0x9a, 0x5e } }, - { { 0xab, 0x1b, 0xb5, 0xe5, 0x2b, 0xc3, 0x0e, 0x29, 0xb0, 0xd0, 0x73, 0xe6, 0x4f, 0x64, 0xf2, 0xbc, - 0xe4, 0xe4, 0xe1, 0x9a, 0x52, 0x33, 0x2f, 0xbd, 0xcc, 0x03, 0xee, 0x8a, 0xfa, 0x00, 0x5f, 0x50 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xf6, 0xdb, 0x0d, 0x22, 0x3d, 0xb5, 0x14, 0x75, 0x31, 0xf0, 0x81, 0xe2, 0xb9, 0x37, 0xa2, 0xa9, - 0x84, 0x11, 0x9a, 0x07, 0xb5, 0x53, 0x89, 0x78, 0xa9, 0x30, 0x27, 0xa1, 0xf1, 0x4e, 0x5c, 0x2e } }, - { { 0x8b, 0x00, 0x54, 0xfb, 0x4d, 0xdc, 0xcb, 0x17, 0x35, 0x40, 0xff, 0xb7, 0x8c, 0xfe, 0x4a, 0xe4, - 0x4e, 0x99, 0x4e, 0xa8, 0x74, 0x54, 0x5d, 0x5c, 0x96, 0xa3, 0x12, 0x55, 0x36, 0x31, 0x17, 0x5c } } }, - { { { 0xce, 0x24, 0xef, 0x7b, 0x86, 0xf2, 0x0f, 0x77, 0xe8, 0x5c, 0x7d, 0x87, 0x38, 0x2d, 0xef, 0xaf, - 0xf2, 0x8c, 0x72, 0x2e, 0xeb, 0xb6, 0x55, 0x4b, 0x6e, 0xf1, 0x4e, 0x8a, 0x0e, 0x9a, 0x6c, 0x4c } }, - { { 0x25, 0xea, 0x86, 0xc2, 0xd1, 0x4f, 0xb7, 0x3e, 0xa8, 0x5c, 0x8d, 0x66, 0x81, 0x25, 0xed, 0xc5, - 0x4c, 0x05, 0xb9, 0xd8, 0xd6, 0x70, 0xbe, 0x73, 0x82, 0xe8, 0xa1, 0xe5, 0x1e, 0x71, 0xd5, 0x26 } } }, - { { { 0x4e, 0x6d, 0xc3, 0xa7, 0x4f, 0x22, 0x45, 0x26, 0xa2, 0x7e, 0x16, 0xf7, 0xf7, 0x63, 0xdc, 0x86, - 0x01, 0x2a, 0x71, 0x38, 0x5c, 0x33, 0xc3, 0xce, 0x30, 0xff, 0xf9, 0x2c, 0x91, 0x71, 0x8a, 0x72 } }, - { { 0x8c, 0x44, 0x09, 0x28, 0xd5, 0x23, 0xc9, 0x8f, 0xf3, 0x84, 0x45, 0xc6, 0x9a, 0x5e, 0xff, 0xd2, - 0xc7, 0x57, 0x93, 0xa3, 0xc1, 0x69, 0xdd, 0x62, 0x0f, 0xda, 0x5c, 0x30, 0x59, 0x5d, 0xe9, 0x4c } } }, - { { { 0x92, 0x7e, 0x50, 0x27, 0x72, 0xd7, 0x0c, 0xd6, 0x69, 0x96, 0x81, 0x35, 0x84, 0x94, 0x35, 0x8b, - 0x6c, 0xaa, 0x62, 0x86, 0x6e, 0x1c, 0x15, 0xf3, 0x6c, 0xb3, 0xff, 0x65, 0x1b, 0xa2, 0x9b, 0x59 } }, - { { 0xe2, 0xa9, 0x65, 0x88, 0xc4, 0x50, 0xfa, 0xbb, 0x3b, 0x6e, 0x5f, 0x44, 0x01, 0xca, 0x97, 0xd4, - 0xdd, 0xf6, 0xcd, 0x3f, 0x3f, 0xe5, 0x97, 0x67, 0x2b, 0x8c, 0x66, 0x0f, 0x35, 0x9b, 0xf5, 0x07 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xf1, 0x59, 0x27, 0xd8, 0xdb, 0x5a, 0x11, 0x5e, 0x82, 0xf3, 0x38, 0xff, 0x1c, 0xed, 0xfe, 0x3f, - 0x64, 0x54, 0x3f, 0x7f, 0xd1, 0x81, 0xed, 0xef, 0x65, 0xc5, 0xcb, 0xfd, 0xe1, 0x80, 0xcd, 0x11 } }, - { { 0xe0, 0xdb, 0x22, 0x28, 0xe6, 0xff, 0x61, 0x9d, 0x41, 0x14, 0x2d, 0x3b, 0x26, 0x22, 0xdf, 0xf1, - 0x34, 0x81, 0xe9, 0x45, 0xee, 0x0f, 0x98, 0x8b, 0xa6, 0x3f, 0xef, 0xf7, 0x43, 0x19, 0xf1, 0x43 } } }, - { { { 0xee, 0xf3, 0x00, 0xa1, 0x50, 0xde, 0xc0, 0xb6, 0x01, 0xe3, 0x8c, 0x3c, 0x4d, 0x31, 0xd2, 0xb0, - 0x58, 0xcd, 0xed, 0x10, 0x4a, 0x7a, 0xef, 0x80, 0xa9, 0x19, 0x32, 0xf3, 0xd8, 0x33, 0x8c, 0x06 } }, - { { 0xcb, 0x7d, 0x4f, 0xff, 0x30, 0xd8, 0x12, 0x3b, 0x39, 0x1c, 0x06, 0xf9, 0x4c, 0x34, 0x35, 0x71, - 0xb5, 0x16, 0x94, 0x67, 0xdf, 0xee, 0x11, 0xde, 0xa4, 0x1d, 0x88, 0x93, 0x35, 0xa9, 0x32, 0x10 } } }, - { { { 0xe9, 0xc3, 0xbc, 0x7b, 0x5c, 0xfc, 0xb2, 0xf9, 0xc9, 0x2f, 0xe5, 0xba, 0x3a, 0x0b, 0xab, 0x64, - 0x38, 0x6f, 0x5b, 0x4b, 0x93, 0xda, 0x64, 0xec, 0x4d, 0x3d, 0xa0, 0xf5, 0xbb, 0xba, 0x47, 0x48 } }, - { { 0x60, 0xbc, 0x45, 0x1f, 0x23, 0xa2, 0x3b, 0x70, 0x76, 0xe6, 0x97, 0x99, 0x4f, 0x77, 0x54, 0x67, - 0x30, 0x9a, 0xe7, 0x66, 0xd6, 0xcd, 0x2e, 0x51, 0x24, 0x2c, 0x42, 0x4a, 0x11, 0xfe, 0x6f, 0x7e } } }, - { { { 0x87, 0xc0, 0xb1, 0xf0, 0xa3, 0x6f, 0x0c, 0x93, 0xa9, 0x0a, 0x72, 0xef, 0x5c, 0xbe, 0x65, 0x35, - 0xa7, 0x6a, 0x4e, 0x2c, 0xbf, 0x21, 0x23, 0xe8, 0x2f, 0x97, 0xc7, 0x3e, 0xc8, 0x17, 0xac, 0x1e } }, - { { 0x7b, 0xef, 0x21, 0xe5, 0x40, 0xcc, 0x1e, 0xdc, 0xd6, 0xbd, 0x97, 0x7a, 0x7c, 0x75, 0x86, 0x7a, - 0x25, 0x5a, 0x6e, 0x7c, 0xe5, 0x51, 0x3c, 0x1b, 0x5b, 0x82, 0x9a, 0x07, 0x60, 0xa1, 0x19, 0x04 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x96, 0x88, 0xa6, 0xab, 0x8f, 0xe3, 0x3a, 0x49, 0xf8, 0xfe, 0x34, 0xe7, 0x6a, 0xb2, 0xfe, 0x40, - 0x26, 0x74, 0x57, 0x4c, 0xf6, 0xd4, 0x99, 0xce, 0x5d, 0x7b, 0x2f, 0x67, 0xd6, 0x5a, 0xe4, 0x4e } }, - { { 0x5c, 0x82, 0xb3, 0xbd, 0x55, 0x25, 0xf6, 0x6a, 0x93, 0xa4, 0x02, 0xc6, 0x7d, 0x5c, 0xb1, 0x2b, - 0x5b, 0xff, 0xfb, 0x56, 0xf8, 0x01, 0x41, 0x90, 0xc6, 0xb6, 0xac, 0x4f, 0xfe, 0xa7, 0x41, 0x70 } } }, - { { { 0xdb, 0xfa, 0x9b, 0x2c, 0xd4, 0x23, 0x67, 0x2c, 0x8a, 0x63, 0x6c, 0x07, 0x26, 0x48, 0x4f, 0xc2, - 0x03, 0xd2, 0x53, 0x20, 0x28, 0xed, 0x65, 0x71, 0x47, 0xa9, 0x16, 0x16, 0x12, 0xbc, 0x28, 0x33 } }, - { { 0x39, 0xc0, 0xfa, 0xfa, 0xcd, 0x33, 0x43, 0xc7, 0x97, 0x76, 0x9b, 0x93, 0x91, 0x72, 0xeb, 0xc5, - 0x18, 0x67, 0x4c, 0x11, 0xf0, 0xf4, 0xe5, 0x73, 0xb2, 0x5c, 0x1b, 0xc2, 0x26, 0x3f, 0xbf, 0x2b } } }, - { { { 0x86, 0xe6, 0x8c, 0x1d, 0xdf, 0xca, 0xfc, 0xd5, 0xf8, 0x3a, 0xc3, 0x44, 0x72, 0xe6, 0x78, 0x9d, - 0x2b, 0x97, 0xf8, 0x28, 0x45, 0xb4, 0x20, 0xc9, 0x2a, 0x8c, 0x67, 0xaa, 0x11, 0xc5, 0x5b, 0x2f } }, - { { 0x17, 0x0f, 0x86, 0x52, 0xd7, 0x9d, 0xc3, 0x44, 0x51, 0x76, 0x32, 0x65, 0xb4, 0x37, 0x81, 0x99, - 0x46, 0x37, 0x62, 0xed, 0xcf, 0x64, 0x9d, 0x72, 0x40, 0x7a, 0x4c, 0x0b, 0x76, 0x2a, 0xfb, 0x56 } } }, - { { { 0x33, 0xa7, 0x90, 0x7c, 0xc3, 0x6f, 0x17, 0xa5, 0xa0, 0x67, 0x72, 0x17, 0xea, 0x7e, 0x63, 0x14, - 0x83, 0xde, 0xc1, 0x71, 0x2d, 0x41, 0x32, 0x7a, 0xf3, 0xd1, 0x2b, 0xd8, 0x2a, 0xa6, 0x46, 0x36 } }, - { { 0xac, 0xcc, 0x6b, 0x7c, 0xf9, 0xb8, 0x8b, 0x08, 0x5c, 0xd0, 0x7d, 0x8f, 0x73, 0xea, 0x20, 0xda, - 0x86, 0xca, 0x00, 0xc7, 0xad, 0x73, 0x4d, 0xe9, 0xe8, 0xa9, 0xda, 0x1f, 0x03, 0x06, 0xdd, 0x24 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x9c, 0xb2, 0x61, 0x0a, 0x98, 0x2a, 0xa5, 0xd7, 0xee, 0xa9, 0xac, 0x65, 0xcb, 0x0a, 0x1e, 0xe2, - 0xbe, 0xdc, 0x85, 0x59, 0x0f, 0x9c, 0xa6, 0x57, 0x34, 0xa5, 0x87, 0xeb, 0x7b, 0x1e, 0x0c, 0x3c } }, - { { 0x2f, 0xbd, 0x84, 0x63, 0x0d, 0xb5, 0xa0, 0xf0, 0x4b, 0x9e, 0x93, 0xc6, 0x34, 0x9a, 0x34, 0xff, - 0x73, 0x19, 0x2f, 0x6e, 0x54, 0x45, 0x2c, 0x92, 0x31, 0x76, 0x34, 0xf1, 0xb2, 0x26, 0xe8, 0x74 } } }, - { { { 0x0a, 0x67, 0x90, 0x6d, 0x0c, 0x4c, 0xcc, 0xc0, 0xe6, 0xbd, 0xa7, 0x5e, 0x55, 0x8c, 0xcd, 0x58, - 0x9b, 0x11, 0xa2, 0xbb, 0x4b, 0xb1, 0x43, 0x04, 0x3c, 0x55, 0xed, 0x23, 0xfe, 0xcd, 0xb1, 0x53 } }, - { { 0x05, 0xfb, 0x75, 0xf5, 0x01, 0xaf, 0x38, 0x72, 0x58, 0xfc, 0x04, 0x29, 0x34, 0x7a, 0x67, 0xa2, - 0x08, 0x50, 0x6e, 0xd0, 0x2b, 0x73, 0xd5, 0xb8, 0xe4, 0x30, 0x96, 0xad, 0x45, 0xdf, 0xa6, 0x5c } } }, - { { { 0x0d, 0x88, 0x1a, 0x90, 0x7e, 0xdc, 0xd8, 0xfe, 0xc1, 0x2f, 0x5d, 0x67, 0xee, 0x67, 0x2f, 0xed, - 0x6f, 0x55, 0x43, 0x5f, 0x87, 0x14, 0x35, 0x42, 0xd3, 0x75, 0xae, 0xd5, 0xd3, 0x85, 0x1a, 0x76 } }, - { { 0x87, 0xc8, 0xa0, 0x6e, 0xe1, 0xb0, 0xad, 0x6a, 0x4a, 0x34, 0x71, 0xed, 0x7c, 0xd6, 0x44, 0x03, - 0x65, 0x4a, 0x5c, 0x5c, 0x04, 0xf5, 0x24, 0x3f, 0xb0, 0x16, 0x5e, 0x8c, 0xb2, 0xd2, 0xc5, 0x20 } } }, - { { { 0x98, 0x83, 0xc2, 0x37, 0xa0, 0x41, 0xa8, 0x48, 0x5c, 0x5f, 0xbf, 0xc8, 0xfa, 0x24, 0xe0, 0x59, - 0x2c, 0xbd, 0xf6, 0x81, 0x7e, 0x88, 0xe6, 0xca, 0x04, 0xd8, 0x5d, 0x60, 0xbb, 0x74, 0xa7, 0x0b } }, - { { 0x21, 0x13, 0x91, 0xbf, 0x77, 0x7a, 0x33, 0xbc, 0xe9, 0x07, 0x39, 0x0a, 0xdd, 0x7d, 0x06, 0x10, - 0x9a, 0xee, 0x47, 0x73, 0x1b, 0x15, 0x5a, 0xfb, 0xcd, 0x4d, 0xd0, 0xd2, 0x3a, 0x01, 0xba, 0x54 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x48, 0xd5, 0x39, 0x4a, 0x0b, 0x20, 0x6a, 0x43, 0xa0, 0x07, 0x82, 0x5e, 0x49, 0x7c, 0xc9, 0x47, - 0xf1, 0x7c, 0x37, 0xb9, 0x23, 0xef, 0x6b, 0x46, 0x45, 0x8c, 0x45, 0x76, 0xdf, 0x14, 0x6b, 0x6e } }, - { { 0x42, 0xc9, 0xca, 0x29, 0x4c, 0x76, 0x37, 0xda, 0x8a, 0x2d, 0x7c, 0x3a, 0x58, 0xf2, 0x03, 0xb4, - 0xb5, 0xb9, 0x1a, 0x13, 0x2d, 0xde, 0x5f, 0x6b, 0x9d, 0xba, 0x52, 0xc9, 0x5d, 0xb3, 0xf3, 0x30 } } }, - { { { 0x4c, 0x6f, 0xfe, 0x6b, 0x0c, 0x62, 0xd7, 0x48, 0x71, 0xef, 0xb1, 0x85, 0x79, 0xc0, 0xed, 0x24, - 0xb1, 0x08, 0x93, 0x76, 0x8e, 0xf7, 0x38, 0x8e, 0xeb, 0xfe, 0x80, 0x40, 0xaf, 0x90, 0x64, 0x49 } }, - { { 0x4a, 0x88, 0xda, 0xc1, 0x98, 0x44, 0x3c, 0x53, 0x4e, 0xdb, 0x4b, 0xb9, 0x12, 0x5f, 0xcd, 0x08, - 0x04, 0xef, 0x75, 0xe7, 0xb1, 0x3a, 0xe5, 0x07, 0xfa, 0xca, 0x65, 0x7b, 0x72, 0x10, 0x64, 0x7f } } }, - { { { 0x3d, 0x81, 0xf0, 0xeb, 0x16, 0xfd, 0x58, 0x33, 0x8d, 0x7c, 0x1a, 0xfb, 0x20, 0x2c, 0x8a, 0xee, - 0x90, 0xbb, 0x33, 0x6d, 0x45, 0xe9, 0x8e, 0x99, 0x85, 0xe1, 0x08, 0x1f, 0xc5, 0xf1, 0xb5, 0x46 } }, - { { 0xe4, 0xe7, 0x43, 0x4b, 0xa0, 0x3f, 0x2b, 0x06, 0xba, 0x17, 0xae, 0x3d, 0xe6, 0xce, 0xbd, 0xb8, - 0xed, 0x74, 0x11, 0x35, 0xec, 0x96, 0xfe, 0x31, 0xe3, 0x0e, 0x7a, 0x4e, 0xc9, 0x1d, 0xcb, 0x20 } } }, - { { { 0xe0, 0x67, 0xe9, 0x7b, 0xdb, 0x96, 0x5c, 0xb0, 0x32, 0xd0, 0x59, 0x31, 0x90, 0xdc, 0x92, 0x97, - 0xac, 0x09, 0x38, 0x31, 0x0f, 0x7e, 0xd6, 0x5d, 0xd0, 0x06, 0xb6, 0x1f, 0xea, 0xf0, 0x5b, 0x07 } }, - { { 0x81, 0x9f, 0xc7, 0xde, 0x6b, 0x41, 0x22, 0x35, 0x14, 0x67, 0x77, 0x3e, 0x90, 0x81, 0xb0, 0xd9, - 0x85, 0x4c, 0xca, 0x9b, 0x3f, 0x04, 0x59, 0xd6, 0xaa, 0x17, 0xc3, 0x88, 0x34, 0x37, 0xba, 0x43 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x4c, 0xb6, 0x69, 0xc8, 0x81, 0x95, 0x94, 0x33, 0x92, 0x34, 0xe9, 0x3c, 0x84, 0x0d, 0x3d, 0x5a, - 0x37, 0x9c, 0x22, 0xa0, 0xaa, 0x65, 0xce, 0xb4, 0xc2, 0x2d, 0x66, 0x67, 0x02, 0xff, 0x74, 0x10 } }, - { { 0x22, 0xb0, 0xd5, 0xe6, 0xc7, 0xef, 0xb1, 0xa7, 0x13, 0xda, 0x60, 0xb4, 0x80, 0xc1, 0x42, 0x7d, - 0x10, 0x70, 0x97, 0x04, 0x4d, 0xda, 0x23, 0x89, 0xc2, 0x0e, 0x68, 0xcb, 0xde, 0xe0, 0x9b, 0x29 } } }, - { { { 0x33, 0xfe, 0x42, 0x2a, 0x36, 0x2b, 0x2e, 0x36, 0x64, 0x5c, 0x8b, 0xcc, 0x81, 0x6a, 0x15, 0x08, - 0xa1, 0x27, 0xe8, 0x57, 0xe5, 0x78, 0x8e, 0xf2, 0x58, 0x19, 0x12, 0x42, 0xae, 0xc4, 0x63, 0x3e } }, - { { 0x78, 0x96, 0x9c, 0xa7, 0xca, 0x80, 0xae, 0x02, 0x85, 0xb1, 0x7c, 0x04, 0x5c, 0xc1, 0x5b, 0x26, - 0xc1, 0xba, 0xed, 0xa5, 0x59, 0x70, 0x85, 0x8c, 0x8c, 0xe8, 0x87, 0xac, 0x6a, 0x28, 0x99, 0x35 } } }, - { { { 0x9f, 0x04, 0x08, 0x28, 0xbe, 0x87, 0xda, 0x80, 0x28, 0x38, 0xde, 0x9f, 0xcd, 0xe4, 0xe3, 0x62, - 0xfb, 0x2e, 0x46, 0x8d, 0x01, 0xb3, 0x06, 0x51, 0xd4, 0x19, 0x3b, 0x11, 0xfa, 0xe2, 0xad, 0x1e } }, - { { 0xa0, 0x20, 0x99, 0x69, 0x0a, 0xae, 0xa3, 0x70, 0x4e, 0x64, 0x80, 0xb7, 0x85, 0x9c, 0x87, 0x54, - 0x43, 0x43, 0x55, 0x80, 0x6d, 0x8d, 0x7c, 0xa9, 0x64, 0xca, 0x6c, 0x2e, 0x21, 0xd8, 0xc8, 0x6c } } }, - { { { 0x91, 0x4a, 0x07, 0xad, 0x08, 0x75, 0xc1, 0x4f, 0xa4, 0xb2, 0xc3, 0x6f, 0x46, 0x3e, 0xb1, 0xce, - 0x52, 0xab, 0x67, 0x09, 0x54, 0x48, 0x6b, 0x6c, 0xd7, 0x1d, 0x71, 0x76, 0xcb, 0xff, 0xdd, 0x31 } }, - { { 0x36, 0x88, 0xfa, 0xfd, 0xf0, 0x36, 0x6f, 0x07, 0x74, 0x88, 0x50, 0xd0, 0x95, 0x38, 0x4a, 0x48, - 0x2e, 0x07, 0x64, 0x97, 0x11, 0x76, 0x01, 0x1a, 0x27, 0x4d, 0x8e, 0x25, 0x9a, 0x9b, 0x1c, 0x22 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xbe, 0x57, 0xbd, 0x0e, 0x0f, 0xac, 0x5e, 0x76, 0xa3, 0x71, 0xad, 0x2b, 0x10, 0x45, 0x02, 0xec, - 0x59, 0xd5, 0x5d, 0xa9, 0x44, 0xcc, 0x25, 0x4c, 0xb3, 0x3c, 0x5b, 0x69, 0x07, 0x55, 0x26, 0x6b } }, - { { 0x30, 0x6b, 0xd4, 0xa7, 0x51, 0x29, 0xe3, 0xf9, 0x7a, 0x75, 0x2a, 0x82, 0x2f, 0xd6, 0x1d, 0x99, - 0x2b, 0x80, 0xd5, 0x67, 0x1e, 0x15, 0x9d, 0xca, 0xfd, 0xeb, 0xac, 0x97, 0x35, 0x09, 0x7f, 0x3f } } }, - { { { 0x35, 0x0d, 0x34, 0x0a, 0xb8, 0x67, 0x56, 0x29, 0x20, 0xf3, 0x19, 0x5f, 0xe2, 0x83, 0x42, 0x73, - 0x53, 0xa8, 0xc5, 0x02, 0x19, 0x33, 0xb4, 0x64, 0xbd, 0xc3, 0x87, 0x8c, 0xd7, 0x76, 0xed, 0x25 } }, - { { 0x47, 0x39, 0x37, 0x76, 0x0d, 0x1d, 0x0c, 0xf5, 0x5a, 0x6d, 0x43, 0x88, 0x99, 0x15, 0xb4, 0x52, - 0x0f, 0x2a, 0xb3, 0xb0, 0x3f, 0xa6, 0xb3, 0x26, 0xb3, 0xc7, 0x45, 0xf5, 0x92, 0x5f, 0x9b, 0x17 } } }, - { { { 0x9d, 0x23, 0xbd, 0x15, 0xfe, 0x52, 0x52, 0x15, 0x26, 0x79, 0x86, 0xba, 0x06, 0x56, 0x66, 0xbb, - 0x8c, 0x2e, 0x10, 0x11, 0xd5, 0x4a, 0x18, 0x52, 0xda, 0x84, 0x44, 0xf0, 0x3e, 0xe9, 0x8c, 0x35 } }, - { { 0xad, 0xa0, 0x41, 0xec, 0xc8, 0x4d, 0xb9, 0xd2, 0x6e, 0x96, 0x4e, 0x5b, 0xc5, 0xc2, 0xa0, 0x1b, - 0xcf, 0x0c, 0xbf, 0x17, 0x66, 0x57, 0xc1, 0x17, 0x90, 0x45, 0x71, 0xc2, 0xe1, 0x24, 0xeb, 0x27 } } }, - { { { 0x2c, 0xb9, 0x42, 0xa4, 0xaf, 0x3b, 0x42, 0x0e, 0xc2, 0x0f, 0xf2, 0xea, 0x83, 0xaf, 0x9a, 0x13, - 0x17, 0xb0, 0xbd, 0x89, 0x17, 0xe3, 0x72, 0xcb, 0x0e, 0x76, 0x7e, 0x41, 0x63, 0x04, 0x88, 0x71 } }, - { { 0x75, 0x78, 0x38, 0x86, 0x57, 0xdd, 0x9f, 0xee, 0x54, 0x70, 0x65, 0xbf, 0xf1, 0x2c, 0xe0, 0x39, - 0x0d, 0xe3, 0x89, 0xfd, 0x8e, 0x93, 0x4f, 0x43, 0xdc, 0xd5, 0x5b, 0xde, 0xf9, 0x98, 0xe5, 0x7b } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xe7, 0x3b, 0x65, 0x11, 0xdf, 0xb2, 0xf2, 0x63, 0x94, 0x12, 0x6f, 0x5c, 0x9e, 0x77, 0xc1, 0xb6, - 0xd8, 0xab, 0x58, 0x7a, 0x1d, 0x95, 0x73, 0xdd, 0xe7, 0xe3, 0x6f, 0xf2, 0x03, 0x1d, 0xdb, 0x76 } }, - { { 0xae, 0x06, 0x4e, 0x2c, 0x52, 0x1b, 0xbc, 0x5a, 0x5a, 0xa5, 0xbe, 0x27, 0xbd, 0xeb, 0xe1, 0x14, - 0x17, 0x68, 0x26, 0x07, 0x03, 0xd1, 0x18, 0x0b, 0xdf, 0xf1, 0x06, 0x5c, 0xa6, 0x1b, 0xb9, 0x24 } } }, - { { { 0xc5, 0x66, 0x80, 0x13, 0x0e, 0x48, 0x8c, 0x87, 0x31, 0x84, 0xb4, 0x60, 0xed, 0xc5, 0xec, 0xb6, - 0xc5, 0x05, 0x33, 0x5f, 0x2f, 0x7d, 0x40, 0xb6, 0x32, 0x1d, 0x38, 0x74, 0x1b, 0xf1, 0x09, 0x3d } }, - { { 0xd4, 0x69, 0x82, 0xbc, 0x8d, 0xf8, 0x34, 0x36, 0x75, 0x55, 0x18, 0x55, 0x58, 0x3c, 0x79, 0xaf, - 0x26, 0x80, 0xab, 0x9b, 0x95, 0x00, 0xf1, 0xcb, 0xda, 0xc1, 0x9f, 0xf6, 0x2f, 0xa2, 0xf4, 0x45 } } }, - { { { 0x17, 0xbe, 0xeb, 0x85, 0xed, 0x9e, 0xcd, 0x56, 0xf5, 0x17, 0x45, 0x42, 0xb4, 0x1f, 0x44, 0x4c, - 0x05, 0x74, 0x15, 0x47, 0x00, 0xc6, 0x6a, 0x3d, 0x24, 0x09, 0x0d, 0x58, 0xb1, 0x42, 0xd7, 0x04 } }, - { { 0x8d, 0xbd, 0xa3, 0xc4, 0x06, 0x9b, 0x1f, 0x90, 0x58, 0x60, 0x74, 0xb2, 0x00, 0x3b, 0x3c, 0xd2, - 0xda, 0x82, 0xbb, 0x10, 0x90, 0x69, 0x92, 0xa9, 0xb4, 0x30, 0x81, 0xe3, 0x7c, 0xa8, 0x89, 0x45 } } }, - { { { 0x3f, 0xdc, 0x05, 0xcb, 0x41, 0x3c, 0xc8, 0x23, 0x04, 0x2c, 0x38, 0x99, 0xe3, 0x68, 0x55, 0xf9, - 0xd3, 0x32, 0xc7, 0xbf, 0xfa, 0xd4, 0x1b, 0x5d, 0xde, 0xdc, 0x10, 0x42, 0xc0, 0x42, 0xd9, 0x75 } }, - { { 0x2d, 0xab, 0x35, 0x4e, 0x87, 0xc4, 0x65, 0x97, 0x67, 0x24, 0xa4, 0x47, 0xad, 0x3f, 0x8e, 0xf3, - 0xcb, 0x31, 0x17, 0x77, 0xc5, 0xe2, 0xd7, 0x8f, 0x3c, 0xc1, 0xcd, 0x56, 0x48, 0xc1, 0x6c, 0x69 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x14, 0xae, 0x5f, 0x88, 0x7b, 0xa5, 0x90, 0xdf, 0x10, 0xb2, 0x8b, 0x5e, 0x24, 0x17, 0xc3, 0xa3, - 0xd4, 0x0f, 0x92, 0x61, 0x1a, 0x19, 0x5a, 0xad, 0x76, 0xbd, 0xd8, 0x1c, 0xdd, 0xe0, 0x12, 0x6d } }, - { { 0x8e, 0xbd, 0x70, 0x8f, 0x02, 0xa3, 0x24, 0x4d, 0x5a, 0x67, 0xc4, 0xda, 0xf7, 0x20, 0x0f, 0x81, - 0x5b, 0x7a, 0x05, 0x24, 0x67, 0x83, 0x0b, 0x2a, 0x80, 0xe7, 0xfd, 0x74, 0x4b, 0x9e, 0x5c, 0x0d } } }, - { { { 0x94, 0xd5, 0x5f, 0x1f, 0xa2, 0xfb, 0xeb, 0xe1, 0x07, 0x34, 0xf8, 0x20, 0xad, 0x81, 0x30, 0x06, - 0x2d, 0xa1, 0x81, 0x95, 0x36, 0xcf, 0x11, 0x0b, 0xaf, 0xc1, 0x2b, 0x9a, 0x6c, 0x55, 0xc1, 0x16 } }, - { { 0x36, 0x4f, 0xf1, 0x5e, 0x74, 0x35, 0x13, 0x28, 0xd7, 0x11, 0xcf, 0xb8, 0xde, 0x93, 0xb3, 0x05, - 0xb8, 0xb5, 0x73, 0xe9, 0xeb, 0xad, 0x19, 0x1e, 0x89, 0x0f, 0x8b, 0x15, 0xd5, 0x8c, 0xe3, 0x23 } } }, - { { { 0x33, 0x79, 0xe7, 0x18, 0xe6, 0x0f, 0x57, 0x93, 0x15, 0xa0, 0xa7, 0xaa, 0xc4, 0xbf, 0x4f, 0x30, - 0x74, 0x95, 0x5e, 0x69, 0x4a, 0x5b, 0x45, 0xe4, 0x00, 0xeb, 0x23, 0x74, 0x4c, 0xdf, 0x6b, 0x45 } }, - { { 0x97, 0x29, 0x6c, 0xc4, 0x42, 0x0b, 0xdd, 0xc0, 0x29, 0x5c, 0x9b, 0x34, 0x97, 0xd0, 0xc7, 0x79, - 0x80, 0x63, 0x74, 0xe4, 0x8e, 0x37, 0xb0, 0x2b, 0x7c, 0xe8, 0x68, 0x6c, 0xc3, 0x82, 0x97, 0x57 } } }, - { { { 0x22, 0xbe, 0x83, 0xb6, 0x4b, 0x80, 0x6b, 0x43, 0x24, 0x5e, 0xef, 0x99, 0x9b, 0xa8, 0xfc, 0x25, - 0x8d, 0x3b, 0x03, 0x94, 0x2b, 0x3e, 0xe7, 0x95, 0x76, 0x9b, 0xcc, 0x15, 0xdb, 0x32, 0xe6, 0x66 } }, - { { 0x84, 0xf0, 0x4a, 0x13, 0xa6, 0xd6, 0xfa, 0x93, 0x46, 0x07, 0xf6, 0x7e, 0x5c, 0x6d, 0x5e, 0xf6, - 0xa6, 0xe7, 0x48, 0xf0, 0x06, 0xea, 0xff, 0x90, 0xc1, 0xcc, 0x4c, 0x19, 0x9c, 0x3c, 0x4e, 0x53 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x2a, 0x50, 0xe3, 0x07, 0x15, 0x59, 0xf2, 0x8b, 0x81, 0xf2, 0xf3, 0xd3, 0x6c, 0x99, 0x8c, 0x70, - 0x67, 0xec, 0xcc, 0xee, 0x9e, 0x59, 0x45, 0x59, 0x7d, 0x47, 0x75, 0x69, 0xf5, 0x24, 0x93, 0x5d } }, - { { 0x6a, 0x4f, 0x1b, 0xbe, 0x6b, 0x30, 0xcf, 0x75, 0x46, 0xe3, 0x7b, 0x9d, 0xfc, 0xcd, 0xd8, 0x5c, - 0x1f, 0xb4, 0xc8, 0xe2, 0x24, 0xec, 0x1a, 0x28, 0x05, 0x32, 0x57, 0xfd, 0x3c, 0x5a, 0x98, 0x10 } } }, - { { { 0xa3, 0xdb, 0xf7, 0x30, 0xd8, 0xc2, 0x9a, 0xe1, 0xd3, 0xce, 0x22, 0xe5, 0x80, 0x1e, 0xd9, 0xe4, - 0x1f, 0xab, 0xc0, 0x71, 0x1a, 0x86, 0x0e, 0x27, 0x99, 0x5b, 0xfa, 0x76, 0x99, 0xb0, 0x08, 0x3c } }, - { { 0x2a, 0x93, 0xd2, 0x85, 0x1b, 0x6a, 0x5d, 0xa6, 0xee, 0xd1, 0xd1, 0x33, 0xbd, 0x6a, 0x36, 0x73, - 0x37, 0x3a, 0x44, 0xb4, 0xec, 0xa9, 0x7a, 0xde, 0x83, 0x40, 0xd7, 0xdf, 0x28, 0xba, 0xa2, 0x30 } } }, - { { { 0xd3, 0xb5, 0x6d, 0x05, 0x3f, 0x9f, 0xf3, 0x15, 0x8d, 0x7c, 0xca, 0xc9, 0xfc, 0x8a, 0x7c, 0x94, - 0xb0, 0x63, 0x36, 0x9b, 0x78, 0xd1, 0x91, 0x1f, 0x93, 0xd8, 0x57, 0x43, 0xde, 0x76, 0xa3, 0x43 } }, - { { 0x9b, 0x35, 0xe2, 0xa9, 0x3d, 0x32, 0x1e, 0xbb, 0x16, 0x28, 0x70, 0xe9, 0x45, 0x2f, 0x8f, 0x70, - 0x7f, 0x08, 0x7e, 0x53, 0xc4, 0x7a, 0xbf, 0xf7, 0xe1, 0xa4, 0x6a, 0xd8, 0xac, 0x64, 0x1b, 0x11 } } }, - { { { 0xb2, 0xeb, 0x47, 0x46, 0x18, 0x3e, 0x1f, 0x99, 0x0c, 0xcc, 0xf1, 0x2c, 0xe0, 0xe7, 0x8f, 0xe0, - 0x01, 0x7e, 0x65, 0xb8, 0x0c, 0xd0, 0xfb, 0xc8, 0xb9, 0x90, 0x98, 0x33, 0x61, 0x3b, 0xd8, 0x27 } }, - { { 0xa0, 0xbe, 0x72, 0x3a, 0x50, 0x4b, 0x74, 0xab, 0x01, 0xc8, 0x93, 0xc5, 0xe4, 0xc7, 0x08, 0x6c, - 0xb4, 0xca, 0xee, 0xeb, 0x8e, 0xd7, 0x4e, 0x26, 0xc6, 0x1d, 0xe2, 0x71, 0xaf, 0x89, 0xa0, 0x2a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x98, 0x0b, 0xe4, 0xde, 0xdb, 0xa8, 0xfa, 0x82, 0x74, 0x06, 0x52, 0x6d, 0x08, 0x52, 0x8a, 0xff, - 0x62, 0xc5, 0x6a, 0x44, 0x0f, 0x51, 0x8c, 0x1f, 0x6e, 0xb6, 0xc6, 0x2c, 0x81, 0xd3, 0x76, 0x46 } }, - { { 0xf4, 0x29, 0x74, 0x2e, 0x80, 0xa7, 0x1a, 0x8f, 0xf6, 0xbd, 0xd6, 0x8e, 0xbf, 0xc1, 0x95, 0x2a, - 0xeb, 0xa0, 0x7f, 0x45, 0xa0, 0x50, 0x14, 0x05, 0xb1, 0x57, 0x4c, 0x74, 0xb7, 0xe2, 0x89, 0x7d } } }, - { { { 0x07, 0xee, 0xa7, 0xad, 0xb7, 0x09, 0x0b, 0x49, 0x4e, 0xbf, 0xca, 0xe5, 0x21, 0xe6, 0xe6, 0xaf, - 0xd5, 0x67, 0xf3, 0xce, 0x7e, 0x7c, 0x93, 0x7b, 0x5a, 0x10, 0x12, 0x0e, 0x6c, 0x06, 0x11, 0x75 } }, - { { 0xd5, 0xfc, 0x86, 0xa3, 0x3b, 0xa3, 0x3e, 0x0a, 0xfb, 0x0b, 0xf7, 0x36, 0xb1, 0x5b, 0xda, 0x70, - 0xb7, 0x00, 0xa7, 0xda, 0x88, 0x8f, 0x84, 0xa8, 0xbc, 0x1c, 0x39, 0xb8, 0x65, 0xf3, 0x4d, 0x60 } } }, - { { { 0x96, 0x9d, 0x31, 0xf4, 0xa2, 0xbe, 0x81, 0xb9, 0xa5, 0x59, 0x9e, 0xba, 0x07, 0xbe, 0x74, 0x58, - 0xd8, 0xeb, 0xc5, 0x9f, 0x3d, 0xd1, 0xf4, 0xae, 0xce, 0x53, 0xdf, 0x4f, 0xc7, 0x2a, 0x89, 0x4d } }, - { { 0x29, 0xd8, 0xf2, 0xaa, 0xe9, 0x0e, 0xf7, 0x2e, 0x5f, 0x9d, 0x8a, 0x5b, 0x09, 0xed, 0xc9, 0x24, - 0x22, 0xf4, 0x0f, 0x25, 0x8f, 0x1c, 0x84, 0x6e, 0x34, 0x14, 0x6c, 0xea, 0xb3, 0x86, 0x5d, 0x04 } } }, - { { { 0x07, 0x98, 0x61, 0xe8, 0x6a, 0xd2, 0x81, 0x49, 0x25, 0xd5, 0x5b, 0x18, 0xc7, 0x35, 0x52, 0x51, - 0xa4, 0x46, 0xad, 0x18, 0x0d, 0xc9, 0x5f, 0x18, 0x91, 0x3b, 0xb4, 0xc0, 0x60, 0x59, 0x8d, 0x66 } }, - { { 0x03, 0x1b, 0x79, 0x53, 0x6e, 0x24, 0xae, 0x57, 0xd9, 0x58, 0x09, 0x85, 0x48, 0xa2, 0xd3, 0xb5, - 0xe2, 0x4d, 0x11, 0x82, 0xe6, 0x86, 0x3c, 0xe9, 0xb1, 0x00, 0x19, 0xc2, 0x57, 0xf7, 0x66, 0x7a } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x0f, 0xe3, 0x89, 0x03, 0xd7, 0x22, 0x95, 0x9f, 0xca, 0xb4, 0x8d, 0x9e, 0x6d, 0x97, 0xff, 0x8d, - 0x21, 0x59, 0x07, 0xef, 0x03, 0x2d, 0x5e, 0xf8, 0x44, 0x46, 0xe7, 0x85, 0x80, 0xc5, 0x89, 0x50 } }, - { { 0x8b, 0xd8, 0x53, 0x86, 0x24, 0x86, 0x29, 0x52, 0x01, 0xfa, 0x20, 0xc3, 0x4e, 0x95, 0xcb, 0xad, - 0x7b, 0x34, 0x94, 0x30, 0xb7, 0x7a, 0xfa, 0x96, 0x41, 0x60, 0x2b, 0xcb, 0x59, 0xb9, 0xca, 0x50 } } }, - { { { 0xc2, 0x5b, 0x9b, 0x78, 0x23, 0x1b, 0x3a, 0x88, 0x94, 0x5f, 0x0a, 0x9b, 0x98, 0x2b, 0x6e, 0x53, - 0x11, 0xf6, 0xff, 0xc6, 0x7d, 0x42, 0xcc, 0x02, 0x80, 0x40, 0x0d, 0x1e, 0xfb, 0xaf, 0x61, 0x07 } }, - { { 0xb0, 0xe6, 0x2f, 0x81, 0x70, 0xa1, 0x2e, 0x39, 0x04, 0x7c, 0xc4, 0x2c, 0x87, 0x45, 0x4a, 0x5b, - 0x69, 0x97, 0xac, 0x6d, 0x2c, 0x10, 0x42, 0x7c, 0x3b, 0x15, 0x70, 0x60, 0x0e, 0x11, 0x6d, 0x3a } } }, - { { { 0x9b, 0x18, 0x80, 0x5e, 0xdb, 0x05, 0xbd, 0xc6, 0xb7, 0x3c, 0xc2, 0x40, 0x4d, 0x5d, 0xce, 0x97, - 0x8a, 0x34, 0x15, 0xab, 0x28, 0x5d, 0x10, 0xf0, 0x37, 0x0c, 0xcc, 0x16, 0xfa, 0x1f, 0x33, 0x0d } }, - { { 0x19, 0xf9, 0x35, 0xaa, 0x59, 0x1a, 0x0c, 0x5c, 0x06, 0xfc, 0x6a, 0x0b, 0x97, 0x53, 0x36, 0xfc, - 0x2a, 0xa5, 0x5a, 0x9b, 0x30, 0xef, 0x23, 0xaf, 0x39, 0x5d, 0x9a, 0x6b, 0x75, 0x57, 0x48, 0x0b } } }, - { { { 0x26, 0xdc, 0x76, 0x3b, 0xfc, 0xf9, 0x9c, 0x3f, 0x89, 0x0b, 0x62, 0x53, 0xaf, 0x83, 0x01, 0x2e, - 0xbc, 0x6a, 0xc6, 0x03, 0x0d, 0x75, 0x2a, 0x0d, 0xe6, 0x94, 0x54, 0xcf, 0xb3, 0xe5, 0x96, 0x25 } }, - { { 0xfe, 0x82, 0xb1, 0x74, 0x31, 0x8a, 0xa7, 0x6f, 0x56, 0xbd, 0x8d, 0xf4, 0xe0, 0x94, 0x51, 0x59, - 0xde, 0x2c, 0x5a, 0xf4, 0x84, 0x6b, 0x4a, 0x88, 0x93, 0xc0, 0x0c, 0x9a, 0xac, 0xa7, 0xa0, 0x68 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x25, 0x0d, 0xd6, 0xc7, 0x23, 0x47, 0x10, 0xad, 0xc7, 0x08, 0x5c, 0x87, 0x87, 0x93, 0x98, 0x18, - 0xb8, 0xd3, 0x9c, 0xac, 0x5a, 0x3d, 0xc5, 0x75, 0xf8, 0x49, 0x32, 0x14, 0xcc, 0x51, 0x96, 0x24 } }, - { { 0x65, 0x9c, 0x5d, 0xf0, 0x37, 0x04, 0xf0, 0x34, 0x69, 0x2a, 0xf0, 0xa5, 0x64, 0xca, 0xde, 0x2b, - 0x5b, 0x15, 0x10, 0xd2, 0xab, 0x06, 0xdd, 0xc4, 0xb0, 0xb6, 0x5b, 0xc1, 0x17, 0xdf, 0x8f, 0x02 } } }, - { { { 0xbd, 0x59, 0x3d, 0xbf, 0x5c, 0x31, 0x44, 0x2c, 0x32, 0x94, 0x04, 0x60, 0x84, 0x0f, 0xad, 0x00, - 0xb6, 0x8f, 0xc9, 0x1d, 0xcc, 0x5c, 0xa2, 0x49, 0x0e, 0x50, 0x91, 0x08, 0x9a, 0x43, 0x55, 0x05 } }, - { { 0x5d, 0x93, 0x55, 0xdf, 0x9b, 0x12, 0x19, 0xec, 0x93, 0x85, 0x42, 0x9e, 0x66, 0x0f, 0x9d, 0xaf, - 0x99, 0xaf, 0x26, 0x89, 0xbc, 0x61, 0xfd, 0xff, 0xce, 0x4b, 0xf4, 0x33, 0x95, 0xc9, 0x35, 0x58 } } }, - { { { 0x12, 0x55, 0xf9, 0xda, 0xcb, 0x44, 0xa7, 0xdc, 0x57, 0xe2, 0xf9, 0x9a, 0xe6, 0x07, 0x23, 0x60, - 0x54, 0xa7, 0x39, 0xa5, 0x9b, 0x84, 0x56, 0x6e, 0xaa, 0x8b, 0x8f, 0xb0, 0x2c, 0x87, 0xaf, 0x67 } }, - { { 0x00, 0xa9, 0x4c, 0xb2, 0x12, 0xf8, 0x32, 0xa8, 0x7a, 0x00, 0x4b, 0x49, 0x32, 0xba, 0x1f, 0x5d, - 0x44, 0x8e, 0x44, 0x7a, 0xdc, 0x11, 0xfb, 0x39, 0x08, 0x57, 0x87, 0xa5, 0x12, 0x42, 0x93, 0x0e } } }, - { { { 0x17, 0xb4, 0xae, 0x72, 0x59, 0xd0, 0xaa, 0xa8, 0x16, 0x8b, 0x63, 0x11, 0xb3, 0x43, 0x04, 0xda, - 0x0c, 0xa8, 0xb7, 0x68, 0xdd, 0x4e, 0x54, 0xe7, 0xaf, 0x5d, 0x5d, 0x05, 0x76, 0x36, 0xec, 0x0d } }, - { { 0x6d, 0x7c, 0x82, 0x32, 0x38, 0x55, 0x57, 0x74, 0x5b, 0x7d, 0xc3, 0xc4, 0xfb, 0x06, 0x29, 0xf0, - 0x13, 0x55, 0x54, 0xc6, 0xa7, 0xdc, 0x4c, 0x9f, 0x98, 0x49, 0x20, 0xa8, 0xc3, 0x8d, 0xfa, 0x48 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x87, 0x47, 0x9d, 0xe9, 0x25, 0xd5, 0xe3, 0x47, 0x78, 0xdf, 0x85, 0xa7, 0x85, 0x5e, 0x7a, 0x4c, - 0x5f, 0x79, 0x1a, 0xf3, 0xa2, 0xb2, 0x28, 0xa0, 0x9c, 0xdd, 0x30, 0x40, 0xd4, 0x38, 0xbd, 0x28 } }, - { { 0xfc, 0xbb, 0xd5, 0x78, 0x6d, 0x1d, 0xd4, 0x99, 0xb4, 0xaa, 0x44, 0x44, 0x7a, 0x1b, 0xd8, 0xfe, - 0xb4, 0x99, 0xb9, 0xcc, 0xe7, 0xc4, 0xd3, 0x3a, 0x73, 0x83, 0x41, 0x5c, 0x40, 0xd7, 0x2d, 0x55 } } }, - { { { 0x26, 0xe1, 0x7b, 0x5f, 0xe5, 0xdc, 0x3f, 0x7d, 0xa1, 0xa7, 0x26, 0x44, 0x22, 0x23, 0xc0, 0x8f, - 0x7d, 0xf1, 0xb5, 0x11, 0x47, 0x7b, 0x19, 0xd4, 0x75, 0x6f, 0x1e, 0xa5, 0x27, 0xfe, 0xc8, 0x0e } }, - { { 0xd3, 0x11, 0x3d, 0xab, 0xef, 0x2c, 0xed, 0xb1, 0x3d, 0x7c, 0x32, 0x81, 0x6b, 0xfe, 0xf8, 0x1c, - 0x3c, 0x7b, 0xc0, 0x61, 0xdf, 0xb8, 0x75, 0x76, 0x7f, 0xaa, 0xd8, 0x93, 0xaf, 0x3d, 0xe8, 0x3d } } }, - { { { 0xfd, 0x5b, 0x4e, 0x8d, 0xb6, 0x7e, 0x82, 0x9b, 0xef, 0xce, 0x04, 0x69, 0x51, 0x52, 0xff, 0xef, - 0xa0, 0x52, 0xb5, 0x79, 0x17, 0x5e, 0x2f, 0xde, 0xd6, 0x3c, 0x2d, 0xa0, 0x43, 0xb4, 0x0b, 0x19 } }, - { { 0xc0, 0x61, 0x48, 0x48, 0x17, 0xf4, 0x9e, 0x18, 0x51, 0x2d, 0xea, 0x2f, 0xf2, 0xf2, 0xe0, 0xa3, - 0x14, 0xb7, 0x8b, 0x3a, 0x30, 0xf5, 0x81, 0xc1, 0x5d, 0x71, 0x39, 0x62, 0x55, 0x1f, 0x60, 0x5a } } }, - { { { 0xe5, 0x89, 0x8a, 0x76, 0x6c, 0xdb, 0x4d, 0x0a, 0x5b, 0x72, 0x9d, 0x59, 0x6e, 0x63, 0x63, 0x18, - 0x7c, 0xe3, 0xfa, 0xe2, 0xdb, 0xa1, 0x8d, 0xf4, 0xa5, 0xd7, 0x16, 0xb2, 0xd0, 0xb3, 0x3f, 0x39 } }, - { { 0xce, 0x60, 0x09, 0x6c, 0xf5, 0x76, 0x17, 0x24, 0x80, 0x3a, 0x96, 0xc7, 0x94, 0x2e, 0xf7, 0x6b, - 0xef, 0xb5, 0x05, 0x96, 0xef, 0xd3, 0x7b, 0x51, 0xda, 0x05, 0x44, 0x67, 0xbc, 0x07, 0x21, 0x4e } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xe9, 0x73, 0x6f, 0x21, 0xb9, 0xde, 0x22, 0x7d, 0xeb, 0x97, 0x31, 0x10, 0xa3, 0xea, 0xe1, 0xc6, - 0x37, 0xeb, 0x8f, 0x43, 0x58, 0xde, 0x41, 0x64, 0x0e, 0x3e, 0x07, 0x99, 0x3d, 0xf1, 0xdf, 0x1e } }, - { { 0xf8, 0xad, 0x43, 0xc2, 0x17, 0x06, 0xe2, 0xe4, 0xa9, 0x86, 0xcd, 0x18, 0xd7, 0x78, 0xc8, 0x74, - 0x66, 0xd2, 0x09, 0x18, 0xa5, 0xf1, 0xca, 0xa6, 0x62, 0x92, 0xc1, 0xcb, 0x00, 0xeb, 0x42, 0x2e } } }, - { { { 0x7b, 0x34, 0x24, 0x4c, 0xcf, 0x38, 0xe5, 0x6c, 0x0a, 0x01, 0x2c, 0x22, 0x0b, 0x24, 0x38, 0xad, - 0x24, 0x7e, 0x19, 0xf0, 0x6c, 0xf9, 0x31, 0xf4, 0x35, 0x11, 0xf6, 0x46, 0x33, 0x3a, 0x23, 0x59 } }, - { { 0x20, 0x0b, 0xa1, 0x08, 0x19, 0xad, 0x39, 0x54, 0xea, 0x3e, 0x23, 0x09, 0xb6, 0xe2, 0xd2, 0xbc, - 0x4d, 0xfc, 0x9c, 0xf0, 0x13, 0x16, 0x22, 0x3f, 0xb9, 0xd2, 0x11, 0x86, 0x90, 0x55, 0xce, 0x3c } } }, - { { { 0xc4, 0x0b, 0x4b, 0x62, 0x99, 0x37, 0x84, 0x3f, 0x74, 0xa2, 0xf9, 0xce, 0xe2, 0x0b, 0x0f, 0x2a, - 0x3d, 0xa3, 0xe3, 0xdb, 0x5a, 0x9d, 0x93, 0xcc, 0xa5, 0xef, 0x82, 0x91, 0x1d, 0xe6, 0x6c, 0x68 } }, - { { 0xa3, 0x64, 0x17, 0x9b, 0x8b, 0xc8, 0x3a, 0x61, 0xe6, 0x9d, 0xc6, 0xed, 0x7b, 0x03, 0x52, 0x26, - 0x9d, 0x3a, 0xb3, 0x13, 0xcc, 0x8a, 0xfd, 0x2c, 0x1a, 0x1d, 0xed, 0x13, 0xd0, 0x55, 0x57, 0x0e } } }, - { { { 0x1a, 0xea, 0xbf, 0xfd, 0x4a, 0x3c, 0x8e, 0xec, 0x29, 0x7e, 0x77, 0x77, 0x12, 0x99, 0xd7, 0x84, - 0xf9, 0x55, 0x7f, 0xf1, 0x8b, 0xb4, 0xd2, 0x95, 0xa3, 0x8d, 0xf0, 0x8a, 0xa7, 0xeb, 0x82, 0x4b } }, - { { 0x2c, 0x28, 0xf4, 0x3a, 0xf6, 0xde, 0x0a, 0xe0, 0x41, 0x44, 0x23, 0xf8, 0x3f, 0x03, 0x64, 0x9f, - 0xc3, 0x55, 0x4c, 0xc6, 0xc1, 0x94, 0x1c, 0x24, 0x5d, 0x5f, 0x92, 0x45, 0x96, 0x57, 0x37, 0x14 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xc1, 0xcd, 0x90, 0x66, 0xb9, 0x76, 0xa0, 0x5b, 0xa5, 0x85, 0x75, 0x23, 0xf9, 0x89, 0xa5, 0x82, - 0xb2, 0x6f, 0xb1, 0xeb, 0xc4, 0x69, 0x6f, 0x18, 0x5a, 0xed, 0x94, 0x3d, 0x9d, 0xd9, 0x2c, 0x1a } }, - { { 0x35, 0xb0, 0xe6, 0x73, 0x06, 0xb7, 0x37, 0xe0, 0xf8, 0xb0, 0x22, 0xe8, 0xd2, 0xed, 0x0b, 0xef, - 0xe6, 0xc6, 0x5a, 0x99, 0x9e, 0x1a, 0x9f, 0x04, 0x97, 0xe4, 0x4d, 0x0b, 0xbe, 0xba, 0x44, 0x40 } } }, - { { { 0xc1, 0x56, 0x96, 0x91, 0x5f, 0x1f, 0xbb, 0x54, 0x6f, 0x88, 0x89, 0x0a, 0xb2, 0xd6, 0x41, 0x42, - 0x6a, 0x82, 0xee, 0x14, 0xaa, 0x76, 0x30, 0x65, 0x0f, 0x67, 0x39, 0xa6, 0x51, 0x7c, 0x49, 0x24 } }, - { { 0x35, 0xa3, 0x78, 0xd1, 0x11, 0x0f, 0x75, 0xd3, 0x70, 0x46, 0xdb, 0x20, 0x51, 0xcb, 0x92, 0x80, - 0x54, 0x10, 0x74, 0x36, 0x86, 0xa9, 0xd7, 0xa3, 0x08, 0x78, 0xf1, 0x01, 0x29, 0xf8, 0x80, 0x3b } } }, - { { { 0xdb, 0xa7, 0x9d, 0x9d, 0xbf, 0xa0, 0xcc, 0xed, 0x53, 0xa2, 0xa2, 0x19, 0x39, 0x48, 0x83, 0x19, - 0x37, 0x58, 0xd1, 0x04, 0x28, 0x40, 0xf7, 0x8a, 0xc2, 0x08, 0xb7, 0xa5, 0x42, 0xcf, 0x53, 0x4c } }, - { { 0xa7, 0xbb, 0xf6, 0x8e, 0xad, 0xdd, 0xf7, 0x90, 0xdd, 0x5f, 0x93, 0x89, 0xae, 0x04, 0x37, 0xe6, - 0x9a, 0xb7, 0xe8, 0xc0, 0xdf, 0x16, 0x2a, 0xbf, 0xc4, 0x3a, 0x3c, 0x41, 0xd5, 0x89, 0x72, 0x5a } } }, - { { { 0x1f, 0x96, 0xff, 0x34, 0x2c, 0x13, 0x21, 0xcb, 0x0a, 0x89, 0x85, 0xbe, 0xb3, 0x70, 0x9e, 0x1e, - 0xde, 0x97, 0xaf, 0x96, 0x30, 0xf7, 0x48, 0x89, 0x40, 0x8d, 0x07, 0xf1, 0x25, 0xf0, 0x30, 0x58 } }, - { { 0x1e, 0xd4, 0x93, 0x57, 0xe2, 0x17, 0xe7, 0x9d, 0xab, 0x3c, 0x55, 0x03, 0x82, 0x2f, 0x2b, 0xdb, - 0x56, 0x1e, 0x30, 0x2e, 0x24, 0x47, 0x6e, 0xe6, 0xff, 0x33, 0x24, 0x2c, 0x75, 0x51, 0xd4, 0x67 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0x2b, 0x06, 0xd9, 0xa1, 0x5d, 0xe1, 0xf4, 0xd1, 0x1e, 0x3c, 0x9a, 0xc6, 0x29, 0x2b, 0x13, 0x13, - 0x78, 0xc0, 0xd8, 0x16, 0x17, 0x2d, 0x9e, 0xa9, 0xc9, 0x79, 0x57, 0xab, 0x24, 0x91, 0x92, 0x19 } }, - { { 0x69, 0xfb, 0xa1, 0x9c, 0xa6, 0x75, 0x49, 0x7d, 0x60, 0x73, 0x40, 0x42, 0xc4, 0x13, 0x0a, 0x95, - 0x79, 0x1e, 0x04, 0x83, 0x94, 0x99, 0x9b, 0x1e, 0x0c, 0xe8, 0x1f, 0x54, 0xef, 0xcb, 0xc0, 0x52 } } }, - { { { 0x14, 0x89, 0x73, 0xa1, 0x37, 0x87, 0x6a, 0x7a, 0xcf, 0x1d, 0xd9, 0x2e, 0x1a, 0x67, 0xed, 0x74, - 0xc0, 0xf0, 0x9c, 0x33, 0xdd, 0xdf, 0x08, 0xbf, 0x7b, 0xd1, 0x66, 0xda, 0xe6, 0xc9, 0x49, 0x08 } }, - { { 0xe9, 0xdd, 0x5e, 0x55, 0xb0, 0x0a, 0xde, 0x21, 0x4c, 0x5a, 0x2e, 0xd4, 0x80, 0x3a, 0x57, 0x92, - 0x7a, 0xf1, 0xc4, 0x2c, 0x40, 0xaf, 0x2f, 0xc9, 0x92, 0x03, 0xe5, 0x5a, 0xbc, 0xdc, 0xf4, 0x09 } } }, - { { { 0xf3, 0xe1, 0x2b, 0x7c, 0x05, 0x86, 0x80, 0x93, 0x4a, 0xad, 0xb4, 0x8f, 0x7e, 0x99, 0x0c, 0xfd, - 0xcd, 0xef, 0xd1, 0xff, 0x2c, 0x69, 0x34, 0x13, 0x41, 0x64, 0xcf, 0x3b, 0xd0, 0x90, 0x09, 0x1e } }, - { { 0x9d, 0x45, 0xd6, 0x80, 0xe6, 0x45, 0xaa, 0xf4, 0x15, 0xaa, 0x5c, 0x34, 0x87, 0x99, 0xa2, 0x8c, - 0x26, 0x84, 0x62, 0x7d, 0xb6, 0x29, 0xc0, 0x52, 0xea, 0xf5, 0x81, 0x18, 0x0f, 0x35, 0xa9, 0x0e } } }, - { { { 0xe7, 0x20, 0x72, 0x7c, 0x6d, 0x94, 0x5f, 0x52, 0x44, 0x54, 0xe3, 0xf1, 0xb2, 0xb0, 0x36, 0x46, - 0x0f, 0xae, 0x92, 0xe8, 0x70, 0x9d, 0x6e, 0x79, 0xb1, 0xad, 0x37, 0xa9, 0x5f, 0xc0, 0xde, 0x03 } }, - { { 0x15, 0x55, 0x37, 0xc6, 0x1c, 0x27, 0x1c, 0x6d, 0x14, 0x4f, 0xca, 0xa4, 0xc4, 0x88, 0x25, 0x46, - 0x39, 0xfc, 0x5a, 0xe5, 0xfe, 0x29, 0x11, 0x69, 0xf5, 0x72, 0x84, 0x4d, 0x78, 0x9f, 0x94, 0x15 } } }, - { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, - { { { 0xec, 0xd3, 0xff, 0x57, 0x0b, 0xb0, 0xb2, 0xdc, 0xf8, 0x4f, 0xe2, 0x12, 0xd5, 0x36, 0xbe, 0x6b, - 0x09, 0x43, 0x6d, 0xa3, 0x4d, 0x90, 0x2d, 0xb8, 0x74, 0xe8, 0x71, 0x45, 0x19, 0x8b, 0x0c, 0x6a } }, - { { 0xb8, 0x42, 0x1c, 0x03, 0xad, 0x2c, 0x03, 0x8e, 0xac, 0xd7, 0x98, 0x29, 0x13, 0xc6, 0x02, 0x29, - 0xb5, 0xd4, 0xe7, 0xcf, 0xcc, 0x8b, 0x83, 0xec, 0x35, 0xc7, 0x9c, 0x74, 0xb7, 0xad, 0x85, 0x5f } } }, - { { { 0x78, 0x84, 0xe1, 0x56, 0x45, 0x69, 0x68, 0x5a, 0x4f, 0xb8, 0xb1, 0x29, 0xff, 0x33, 0x03, 0x31, - 0xb7, 0xcb, 0x96, 0x25, 0xe6, 0xe6, 0x41, 0x98, 0x1a, 0xbb, 0x03, 0x56, 0xf2, 0xb2, 0x91, 0x34 } }, - { { 0x2c, 0x6c, 0xf7, 0x66, 0xa4, 0x62, 0x6b, 0x39, 0xb3, 0xba, 0x65, 0xd3, 0x1c, 0xf8, 0x11, 0xaa, - 0xbe, 0xdc, 0x80, 0x59, 0x87, 0xf5, 0x7b, 0xe5, 0xe3, 0xb3, 0x3e, 0x39, 0xda, 0xbe, 0x88, 0x09 } } }, - { { { 0x8b, 0xf1, 0xa0, 0xf5, 0xdc, 0x29, 0xb4, 0xe2, 0x07, 0xc6, 0x7a, 0x00, 0xd0, 0x89, 0x17, 0x51, - 0xd4, 0xbb, 0xd4, 0x22, 0xea, 0x7e, 0x7d, 0x7c, 0x24, 0xea, 0xf2, 0xe8, 0x22, 0x12, 0x95, 0x06 } }, - { { 0xda, 0x7c, 0xa4, 0x0c, 0xf4, 0xba, 0x6e, 0xe1, 0x89, 0xb5, 0x59, 0xca, 0xf1, 0xc0, 0x29, 0x36, - 0x09, 0x44, 0xe2, 0x7f, 0xd1, 0x63, 0x15, 0x99, 0xea, 0x25, 0xcf, 0x0c, 0x9d, 0xc0, 0x44, 0x6f } } }, - { { { 0x1d, 0x86, 0x4e, 0xcf, 0xf7, 0x37, 0x10, 0x25, 0x8f, 0x12, 0xfb, 0x19, 0xfb, 0xe0, 0xed, 0x10, - 0xc8, 0xe2, 0xf5, 0x75, 0xb1, 0x33, 0xc0, 0x96, 0x0d, 0xfb, 0x15, 0x6c, 0x0d, 0x07, 0x5f, 0x05 } }, - { { 0x69, 0x3e, 0x47, 0x97, 0x2c, 0xaf, 0x52, 0x7c, 0x78, 0x83, 0xad, 0x1b, 0x39, 0x82, 0x2f, 0x02, - 0x6f, 0x47, 0xdb, 0x2a, 0xb0, 0xe1, 0x91, 0x99, 0x55, 0xb8, 0x99, 0x3a, 0xa0, 0x44, 0x11, 0x51 } } } -}; +static const fe25519 ge25519_ecd = { { 0xA3, 0x78, 0x59, 0x13, 0xCA, 0x4D, 0xEB, 0x75, 0xAB, 0xD8, 0x41, 0x41, 0x4D, 0x0A, 0x70, 0x00, 0x98, 0xE8, 0x79, 0x77, 0x79, 0x40, 0xC7, 0x8C, 0x73, 0xFE, 0x6F, 0x2B, 0xEE, 0x6C, 0x03, 0x52 } }; +static const fe25519 ge25519_ec2d = { { 0x59, 0xF1, 0xB2, 0x26, 0x94, 0x9B, 0xD6, 0xEB, 0x56, 0xB1, 0x83, 0x82, 0x9A, 0x14, 0xE0, 0x00, 0x30, 0xD1, 0xF3, 0xEE, 0xF2, 0x80, 0x8E, 0x19, 0xE7, 0xFC, 0xDF, 0x56, 0xDC, 0xD9, 0x06, 0x24 } }; +static const fe25519 ge25519_sqrtm1 = { { 0xB0, 0xA0, 0x0E, 0x4A, 0x27, 0x1B, 0xEE, 0xC4, 0x78, 0xE4, 0x2F, 0xAD, 0x06, 0x18, 0x43, 0x2F, 0xA7, 0xD7, 0xFB, 0x3D, 0x99, 0x00, 0x4D, 0x2B, 0x0B, 0xDF, 0xC1, 0x4F, 0x80, 0x24, 0x83, 0x2B } }; +static const ge25519 ge25519_base = { { { 0x1A, 0xD5, 0x25, 0x8F, 0x60, 0x2D, 0x56, 0xC9, 0xB2, 0xA7, 0x25, 0x95, 0x60, 0xC7, 0x2C, 0x69, 0x5C, 0xDC, 0xD6, 0xFD, 0x31, 0xE2, 0xA4, 0xC0, 0xFE, 0x53, 0x6E, 0xCD, 0xD3, 0x36, 0x69, 0x21 } }, + { { 0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0xA3, 0xDD, 0xB7, 0xA5, 0xB3, 0x8A, 0xDE, 0x6D, 0xF5, 0x52, 0x51, 0x77, 0x80, 0x9F, 0xF0, 0x20, 0x7D, 0xE3, 0xAB, 0x64, 0x8E, 0x4E, 0xEA, 0x66, 0x65, 0x76, 0x8B, 0xD7, 0x0F, 0x5F, 0x87, 0x67 } } }; +static const ge25519_aff ge25519_base_multiples_affine[425] = { { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x1a, 0xd5, 0x25, 0x8f, 0x60, 0x2d, 0x56, 0xc9, 0xb2, 0xa7, 0x25, 0x95, 0x60, 0xc7, 0x2c, 0x69, 0x5c, 0xdc, 0xd6, 0xfd, 0x31, 0xe2, 0xa4, 0xc0, 0xfe, 0x53, 0x6e, 0xcd, 0xd3, 0x36, 0x69, 0x21 } }, + { { 0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66 } } }, + { { { 0x0e, 0xce, 0x43, 0x28, 0x4e, 0xa1, 0xc5, 0x83, 0x5f, 0xa4, 0xd7, 0x15, 0x45, 0x8e, 0x0d, 0x08, 0xac, 0xe7, 0x33, 0x18, 0x7d, 0x3b, 0x04, 0x3d, 0x6c, 0x04, 0x5a, 0x9f, 0x4c, 0x38, 0xab, 0x36 } }, + { { 0xc9, 0xa3, 0xf8, 0x6a, 0xae, 0x46, 0x5f, 0x0e, 0x56, 0x51, 0x38, 0x64, 0x51, 0x0f, 0x39, 0x97, 0x56, 0x1f, 0xa2, 0xc9, 0xe8, 0x5e, 0xa2, 0x1d, 0xc2, 0x29, 0x23, 0x09, 0xf3, 0xcd, 0x60, 0x22 } } }, + { { { 0x5c, 0xe2, 0xf8, 0xd3, 0x5f, 0x48, 0x62, 0xac, 0x86, 0x48, 0x62, 0x81, 0x19, 0x98, 0x43, 0x63, 0x3a, 0xc8, 0xda, 0x3e, 0x74, 0xae, 0xf4, 0x1f, 0x49, 0x8f, 0x92, 0x22, 0x4a, 0x9c, 0xae, 0x67 } }, + { { 0xd4, 0xb4, 0xf5, 0x78, 0x48, 0x68, 0xc3, 0x02, 0x04, 0x03, 0x24, 0x67, 0x17, 0xec, 0x16, 0x9f, 0xf7, 0x9e, 0x26, 0x60, 0x8e, 0xa1, 0x26, 0xa1, 0xab, 0x69, 0xee, 0x77, 0xd1, 0xb1, 0x67, 0x12 } } }, + { { { 0x70, 0xf8, 0xc9, 0xc4, 0x57, 0xa6, 0x3a, 0x49, 0x47, 0x15, 0xce, 0x93, 0xc1, 0x9e, 0x73, 0x1a, 0xf9, 0x20, 0x35, 0x7a, 0xb8, 0xd4, 0x25, 0x83, 0x46, 0xf1, 0xcf, 0x56, 0xdb, 0xa8, 0x3d, 0x20 } }, + { { 0x2f, 0x11, 0x32, 0xca, 0x61, 0xab, 0x38, 0xdf, 0xf0, 0x0f, 0x2f, 0xea, 0x32, 0x28, 0xf2, 0x4c, 0x6c, 0x71, 0xd5, 0x80, 0x85, 0xb8, 0x0e, 0x47, 0xe1, 0x95, 0x15, 0xcb, 0x27, 0xe8, 0xd0, 0x47 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xc8, 0x84, 0xa5, 0x08, 0xbc, 0xfd, 0x87, 0x3b, 0x99, 0x8b, 0x69, 0x80, 0x7b, 0xc6, 0x3a, 0xeb, 0x93, 0xcf, 0x4e, 0xf8, 0x5c, 0x2d, 0x86, 0x42, 0xb6, 0x71, 0xd7, 0x97, 0x5f, 0xe1, 0x42, 0x67 } }, + { { 0xb4, 0xb9, 0x37, 0xfc, 0xa9, 0x5b, 0x2f, 0x1e, 0x93, 0xe4, 0x1e, 0x62, 0xfc, 0x3c, 0x78, 0x81, 0x8f, 0xf3, 0x8a, 0x66, 0x09, 0x6f, 0xad, 0x6e, 0x79, 0x73, 0xe5, 0xc9, 0x00, 0x06, 0xd3, 0x21 } } }, + { { { 0xf8, 0xf9, 0x28, 0x6c, 0x6d, 0x59, 0xb2, 0x59, 0x74, 0x23, 0xbf, 0xe7, 0x33, 0x8d, 0x57, 0x09, 0x91, 0x9c, 0x24, 0x08, 0x15, 0x2b, 0xe2, 0xb8, 0xee, 0x3a, 0xe5, 0x27, 0x06, 0x86, 0xa4, 0x23 } }, + { { 0xeb, 0x27, 0x67, 0xc1, 0x37, 0xab, 0x7a, 0xd8, 0x27, 0x9c, 0x07, 0x8e, 0xff, 0x11, 0x6a, 0xb0, 0x78, 0x6e, 0xad, 0x3a, 0x2e, 0x0f, 0x98, 0x9f, 0x72, 0xc3, 0x7f, 0x82, 0xf2, 0x96, 0x96, 0x70 } } }, + { { { 0x81, 0x6b, 0x88, 0xe8, 0x1e, 0xc7, 0x77, 0x96, 0x0e, 0xa1, 0xa9, 0x52, 0xe0, 0xd8, 0x0e, 0x61, 0x9e, 0x79, 0x2d, 0x95, 0x9c, 0x8d, 0x96, 0xe0, 0x06, 0x40, 0x5d, 0x87, 0x28, 0x5f, 0x98, 0x70 } }, + { { 0xf1, 0x79, 0x7b, 0xed, 0x4f, 0x44, 0xb2, 0xe7, 0x08, 0x0d, 0xc2, 0x08, 0x12, 0xd2, 0x9f, 0xdf, 0xcd, 0x93, 0x20, 0x8a, 0xcf, 0x33, 0xca, 0x6d, 0x89, 0xb9, 0x77, 0xc8, 0x93, 0x1b, 0x4e, 0x60 } } }, + { { { 0x26, 0x4f, 0x7e, 0x97, 0xf6, 0x40, 0xdd, 0x4f, 0xfc, 0x52, 0x78, 0xf9, 0x90, 0x31, 0x03, 0xe6, 0x7d, 0x56, 0x39, 0x0b, 0x1d, 0x56, 0x82, 0x85, 0xf9, 0x1a, 0x42, 0x17, 0x69, 0x6c, 0xcf, 0x39 } }, + { { 0x69, 0xd2, 0x06, 0x3a, 0x4f, 0x39, 0x2d, 0xf9, 0x38, 0x40, 0x8c, 0x4c, 0xe7, 0x05, 0x12, 0xb4, 0x78, 0x8b, 0xf8, 0xc0, 0xec, 0x93, 0xde, 0x7a, 0x6b, 0xce, 0x2c, 0xe1, 0x0e, 0xa9, 0x34, 0x44 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x0b, 0xa4, 0x3c, 0xb0, 0x0f, 0x7a, 0x51, 0xf1, 0x78, 0xd6, 0xd9, 0x6a, 0xfd, 0x46, 0xe8, 0xb8, 0xa8, 0x79, 0x1d, 0x87, 0xf9, 0x90, 0xf2, 0x9c, 0x13, 0x29, 0xf8, 0x0b, 0x20, 0x64, 0xfa, 0x05 } }, + { { 0x26, 0x09, 0xda, 0x17, 0xaf, 0x95, 0xd6, 0xfb, 0x6a, 0x19, 0x0d, 0x6e, 0x5e, 0x12, 0xf1, 0x99, 0x4c, 0xaa, 0xa8, 0x6f, 0x79, 0x86, 0xf4, 0x72, 0x28, 0x00, 0x26, 0xf9, 0xea, 0x9e, 0x19, 0x3d } } }, + { { { 0x87, 0xdd, 0xcf, 0xf0, 0x5b, 0x49, 0xa2, 0x5d, 0x40, 0x7a, 0x23, 0x26, 0xa4, 0x7a, 0x83, 0x8a, 0xb7, 0x8b, 0xd2, 0x1a, 0xbf, 0xea, 0x02, 0x24, 0x08, 0x5f, 0x7b, 0xa9, 0xb1, 0xbe, 0x9d, 0x37 } }, + { { 0xfc, 0x86, 0x4b, 0x08, 0xee, 0xe7, 0xa0, 0xfd, 0x21, 0x45, 0x09, 0x34, 0xc1, 0x61, 0x32, 0x23, 0xfc, 0x9b, 0x55, 0x48, 0x53, 0x99, 0xf7, 0x63, 0xd0, 0x99, 0xce, 0x01, 0xe0, 0x9f, 0xeb, 0x28 } } }, + { { { 0x47, 0xfc, 0xab, 0x5a, 0x17, 0xf0, 0x85, 0x56, 0x3a, 0x30, 0x86, 0x20, 0x28, 0x4b, 0x8e, 0x44, 0x74, 0x3a, 0x6e, 0x02, 0xf1, 0x32, 0x8f, 0x9f, 0x3f, 0x08, 0x35, 0xe9, 0xca, 0x16, 0x5f, 0x6e } }, + { { 0x1c, 0x59, 0x1c, 0x65, 0x5d, 0x34, 0xa4, 0x09, 0xcd, 0x13, 0x9c, 0x70, 0x7d, 0xb1, 0x2a, 0xc5, 0x88, 0xaf, 0x0b, 0x60, 0xc7, 0x9f, 0x34, 0x8d, 0xd6, 0xb7, 0x7f, 0xea, 0x78, 0x65, 0x8d, 0x77 } } }, + { { { 0x56, 0xa5, 0xc2, 0x0c, 0xdd, 0xbc, 0xb8, 0x20, 0x6d, 0x57, 0x61, 0xb5, 0xfb, 0x78, 0xb5, 0xd4, 0x49, 0x54, 0x90, 0x26, 0xc1, 0xcb, 0xe9, 0xe6, 0xbf, 0xec, 0x1d, 0x4e, 0xed, 0x07, 0x7e, 0x5e } }, + { { 0xc7, 0xf6, 0x6c, 0x56, 0x31, 0x20, 0x14, 0x0e, 0xa8, 0xd9, 0x27, 0xc1, 0x9a, 0x3d, 0x1b, 0x7d, 0x0e, 0x26, 0xd3, 0x81, 0xaa, 0xeb, 0xf5, 0x6b, 0x79, 0x02, 0xf1, 0x51, 0x5c, 0x75, 0x55, 0x0f } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x0a, 0x34, 0xcd, 0x82, 0x3c, 0x33, 0x09, 0x54, 0xd2, 0x61, 0x39, 0x30, 0x9b, 0xfd, 0xef, 0x21, 0x26, 0xd4, 0x70, 0xfa, 0xee, 0xf9, 0x31, 0x33, 0x73, 0x84, 0xd0, 0xb3, 0x81, 0xbf, 0xec, 0x2e } }, + { { 0xe8, 0x93, 0x8b, 0x00, 0x64, 0xf7, 0x9c, 0xb8, 0x74, 0xe0, 0xe6, 0x49, 0x48, 0x4d, 0x4d, 0x48, 0xb6, 0x19, 0xa1, 0x40, 0xb7, 0xd9, 0x32, 0x41, 0x7c, 0x82, 0x37, 0xa1, 0x2d, 0xdc, 0xd2, 0x54 } } }, + { { { 0x68, 0x2b, 0x4a, 0x5b, 0xd5, 0xc7, 0x51, 0x91, 0x1d, 0xe1, 0x2a, 0x4b, 0xc4, 0x47, 0xf1, 0xbc, 0x7a, 0xb3, 0xcb, 0xc8, 0xb6, 0x7c, 0xac, 0x90, 0x05, 0xfd, 0xf3, 0xf9, 0x52, 0x3a, 0x11, 0x6b } }, + { { 0x3d, 0xc1, 0x27, 0xf3, 0x59, 0x43, 0x95, 0x90, 0xc5, 0x96, 0x79, 0xf5, 0xf4, 0x95, 0x65, 0x29, 0x06, 0x9c, 0x51, 0x05, 0x18, 0xda, 0xb8, 0x2e, 0x79, 0x7e, 0x69, 0x59, 0x71, 0x01, 0xeb, 0x1a } } }, + { { { 0x15, 0x06, 0x49, 0xb6, 0x8a, 0x3c, 0xea, 0x2f, 0x34, 0x20, 0x14, 0xc3, 0xaa, 0xd6, 0xaf, 0x2c, 0x3e, 0xbd, 0x65, 0x20, 0xe2, 0x4d, 0x4b, 0x3b, 0xeb, 0x9f, 0x4a, 0xc3, 0xad, 0xa4, 0x3b, 0x60 } }, + { { 0xbc, 0x58, 0xe6, 0xc0, 0x95, 0x2a, 0x2a, 0x81, 0x9a, 0x7a, 0xf3, 0xd2, 0x06, 0xbe, 0x48, 0xbc, 0x0c, 0xc5, 0x46, 0xe0, 0x6a, 0xd4, 0xac, 0x0f, 0xd9, 0xcc, 0x82, 0x34, 0x2c, 0xaf, 0xdb, 0x1f } } }, + { { { 0xf7, 0x17, 0x13, 0xbd, 0xfb, 0xbc, 0xd2, 0xec, 0x45, 0xb3, 0x15, 0x31, 0xe9, 0xaf, 0x82, 0x84, 0x3d, 0x28, 0xc6, 0xfc, 0x11, 0xf5, 0x41, 0xb5, 0x8b, 0xd3, 0x12, 0x76, 0x52, 0xe7, 0x1a, 0x3c } }, + { { 0x4e, 0x36, 0x11, 0x07, 0xa2, 0x15, 0x20, 0x51, 0xc4, 0x2a, 0xc3, 0x62, 0x8b, 0x5e, 0x7f, 0xa6, 0x0f, 0xf9, 0x45, 0x85, 0x6c, 0x11, 0x86, 0xb7, 0x7e, 0xe5, 0xd7, 0xf9, 0xc3, 0x91, 0x1c, 0x05 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xea, 0xd6, 0xde, 0x29, 0x3a, 0x00, 0xb9, 0x02, 0x59, 0xcb, 0x26, 0xc4, 0xba, 0x99, 0xb1, 0x97, 0x2f, 0x8e, 0x00, 0x92, 0x26, 0x4f, 0x52, 0xeb, 0x47, 0x1b, 0x89, 0x8b, 0x24, 0xc0, 0x13, 0x7d } }, + { { 0xd5, 0x20, 0x5b, 0x80, 0xa6, 0x80, 0x20, 0x95, 0xc3, 0xe9, 0x9f, 0x8e, 0x87, 0x9e, 0x1e, 0x9e, 0x7a, 0xc7, 0xcc, 0x75, 0x6c, 0xa5, 0xf1, 0x91, 0x1a, 0xa8, 0x01, 0x2c, 0xab, 0x76, 0xa9, 0x59 } } }, + { { { 0xde, 0xc9, 0xb1, 0x31, 0x10, 0x16, 0xaa, 0x35, 0x14, 0x6a, 0xd4, 0xb5, 0x34, 0x82, 0x71, 0xd2, 0x4a, 0x5d, 0x9a, 0x1f, 0x53, 0x26, 0x3c, 0xe5, 0x8e, 0x8d, 0x33, 0x7f, 0xff, 0xa9, 0xd5, 0x17 } }, + { { 0x89, 0xaf, 0xf6, 0xa4, 0x64, 0xd5, 0x10, 0xe0, 0x1d, 0xad, 0xef, 0x44, 0xbd, 0xda, 0x83, 0xac, 0x7a, 0xa8, 0xf0, 0x1c, 0x07, 0xf9, 0xc3, 0x43, 0x6c, 0x3f, 0xb7, 0xd3, 0x87, 0x22, 0x02, 0x73 } } }, + { { { 0x64, 0x1d, 0x49, 0x13, 0x2f, 0x71, 0xec, 0x69, 0x87, 0xd0, 0x42, 0xee, 0x13, 0xec, 0xe3, 0xed, 0x56, 0x7b, 0xbf, 0xbd, 0x8c, 0x2f, 0x7d, 0x7b, 0x9d, 0x28, 0xec, 0x8e, 0x76, 0x2f, 0x6f, 0x08 } }, + { { 0x22, 0xf5, 0x5f, 0x4d, 0x15, 0xef, 0xfc, 0x4e, 0x57, 0x03, 0x36, 0x89, 0xf0, 0xeb, 0x5b, 0x91, 0xd6, 0xe2, 0xca, 0x01, 0xa5, 0xee, 0x52, 0xec, 0xa0, 0x3c, 0x8f, 0x33, 0x90, 0x5a, 0x94, 0x72 } } }, + { { { 0x8a, 0x4b, 0xe7, 0x38, 0xbc, 0xda, 0xc2, 0xb0, 0x85, 0xe1, 0x4a, 0xfe, 0x2d, 0x44, 0x84, 0xcb, 0x20, 0x6b, 0x2d, 0xbf, 0x11, 0x9c, 0xd7, 0xbe, 0xd3, 0x3e, 0x5f, 0xbf, 0x68, 0xbc, 0xa8, 0x07 } }, + { { 0x01, 0x89, 0x28, 0x22, 0x6a, 0x78, 0xaa, 0x29, 0x03, 0xc8, 0x74, 0x95, 0x03, 0x3e, 0xdc, 0xbd, 0x07, 0x13, 0xa8, 0xa2, 0x20, 0x2d, 0xb3, 0x18, 0x70, 0x42, 0xfd, 0x7a, 0xc4, 0xd7, 0x49, 0x72 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x02, 0xff, 0x32, 0x2b, 0x5c, 0x93, 0x54, 0x32, 0xe8, 0x57, 0x54, 0x1a, 0x8b, 0x33, 0x60, 0x65, 0xd3, 0x67, 0xa4, 0xc1, 0x26, 0xc4, 0xa4, 0x34, 0x1f, 0x9b, 0xa7, 0xa9, 0xf4, 0xd9, 0x4f, 0x5b } }, + { { 0x46, 0x8d, 0xb0, 0x33, 0x54, 0x26, 0x5b, 0x68, 0xdf, 0xbb, 0xc5, 0xec, 0xc2, 0xf9, 0x3c, 0x5a, 0x37, 0xc1, 0x8e, 0x27, 0x47, 0xaa, 0x49, 0x5a, 0xf8, 0xfb, 0x68, 0x04, 0x23, 0xd1, 0xeb, 0x40 } } }, + { { { 0x65, 0xa5, 0x11, 0x84, 0x8a, 0x67, 0x9d, 0x9e, 0xd1, 0x44, 0x68, 0x7a, 0x34, 0xe1, 0x9f, 0xa3, 0x54, 0xcd, 0x07, 0xca, 0x79, 0x1f, 0x54, 0x2f, 0x13, 0x70, 0x4e, 0xee, 0xa2, 0xfa, 0xe7, 0x5d } }, + { { 0x36, 0xec, 0x54, 0xf8, 0xce, 0xe4, 0x85, 0xdf, 0xf6, 0x6f, 0x1d, 0x90, 0x08, 0xbc, 0xe8, 0xc0, 0x92, 0x2d, 0x43, 0x6b, 0x92, 0xa9, 0x8e, 0xab, 0x0a, 0x2e, 0x1c, 0x1e, 0x64, 0x23, 0x9f, 0x2c } } }, + { { { 0xa7, 0xd6, 0x2e, 0xd5, 0xcc, 0xd4, 0xcb, 0x5a, 0x3b, 0xa7, 0xf9, 0x46, 0x03, 0x1d, 0xad, 0x2b, 0x34, 0x31, 0x90, 0x00, 0x46, 0x08, 0x82, 0x14, 0xc4, 0xe0, 0x9c, 0xf0, 0xe3, 0x55, 0x43, 0x31 } }, + { { 0x60, 0xd6, 0xdd, 0x78, 0xe6, 0xd4, 0x22, 0x42, 0x1f, 0x00, 0xf9, 0xb1, 0x6a, 0x63, 0xe2, 0x92, 0x59, 0xd1, 0x1a, 0xb7, 0x00, 0x54, 0x29, 0xc9, 0xc1, 0xf6, 0x6f, 0x7a, 0xc5, 0x3c, 0x5f, 0x65 } } }, + { { { 0x27, 0x4f, 0xd0, 0x72, 0xb1, 0x11, 0x14, 0x27, 0x15, 0x94, 0x48, 0x81, 0x7e, 0x74, 0xd8, 0x32, 0xd5, 0xd1, 0x11, 0x28, 0x60, 0x63, 0x36, 0x32, 0x37, 0xb5, 0x13, 0x1c, 0xa0, 0x37, 0xe3, 0x74 } }, + { { 0xf1, 0x25, 0x4e, 0x11, 0x96, 0x67, 0xe6, 0x1c, 0xc2, 0xb2, 0x53, 0xe2, 0xda, 0x85, 0xee, 0xb2, 0x9f, 0x59, 0xf3, 0xba, 0xbd, 0xfa, 0xcf, 0x6e, 0xf9, 0xda, 0xa4, 0xb3, 0x02, 0x8f, 0x64, 0x08 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x34, 0x94, 0xf2, 0x64, 0x54, 0x47, 0x37, 0x07, 0x40, 0x8a, 0x20, 0xba, 0x4a, 0x55, 0xd7, 0x3f, 0x47, 0xba, 0x25, 0x23, 0x14, 0xb0, 0x2c, 0xe8, 0x55, 0xa8, 0xa6, 0xef, 0x51, 0xbd, 0x6f, 0x6a } }, + { { 0x71, 0xd6, 0x16, 0x76, 0xb2, 0x06, 0xea, 0x79, 0xf5, 0xc4, 0xc3, 0x52, 0x7e, 0x61, 0xd1, 0xe1, 0xad, 0x70, 0x78, 0x1d, 0x16, 0x11, 0xf8, 0x7c, 0x2b, 0xfc, 0x55, 0x9f, 0x52, 0xf8, 0xf5, 0x16 } } }, + { { { 0x34, 0x96, 0x9a, 0xf6, 0xc5, 0xe0, 0x14, 0x03, 0x24, 0x0e, 0x4c, 0xad, 0x9e, 0x9a, 0x70, 0x23, 0x96, 0xb2, 0xf1, 0x2e, 0x9d, 0xc3, 0x32, 0x9b, 0x54, 0xa5, 0x73, 0xde, 0x88, 0xb1, 0x3e, 0x24 } }, + { { 0xf6, 0xe2, 0x4c, 0x1f, 0x5b, 0xb2, 0xaf, 0x82, 0xa5, 0xcf, 0x81, 0x10, 0x04, 0xef, 0xdb, 0xa2, 0xcc, 0x24, 0xb2, 0x7e, 0x0b, 0x7a, 0xeb, 0x01, 0xd8, 0x52, 0xf4, 0x51, 0x89, 0x29, 0x79, 0x37 } } }, + { { { 0x74, 0xde, 0x12, 0xf3, 0x68, 0xb7, 0x66, 0xc3, 0xee, 0x68, 0xdc, 0x81, 0xb5, 0x55, 0x99, 0xab, 0xd9, 0x28, 0x63, 0x6d, 0x8b, 0x40, 0x69, 0x75, 0x6c, 0xcd, 0x5c, 0x2a, 0x7e, 0x32, 0x7b, 0x29 } }, + { { 0x02, 0xcc, 0x22, 0x74, 0x4d, 0x19, 0x07, 0xc0, 0xda, 0xb5, 0x76, 0x51, 0x2a, 0xaa, 0xa6, 0x0a, 0x5f, 0x26, 0xd4, 0xbc, 0xaf, 0x48, 0x88, 0x7f, 0x02, 0xbc, 0xf2, 0xe1, 0xcf, 0xe9, 0xdd, 0x15 } } }, + { { { 0xed, 0xb5, 0x9a, 0x8c, 0x9a, 0xdd, 0x27, 0xf4, 0x7f, 0x47, 0xd9, 0x52, 0xa7, 0xcd, 0x65, 0xa5, 0x31, 0x22, 0xed, 0xa6, 0x63, 0x5b, 0x80, 0x4a, 0xad, 0x4d, 0xed, 0xbf, 0xee, 0x49, 0xb3, 0x06 } }, + { { 0xf8, 0x64, 0x8b, 0x60, 0x90, 0xe9, 0xde, 0x44, 0x77, 0xb9, 0x07, 0x36, 0x32, 0xc2, 0x50, 0xf5, 0x65, 0xdf, 0x48, 0x4c, 0x37, 0xaa, 0x68, 0xab, 0x9a, 0x1f, 0x3e, 0xff, 0x89, 0x92, 0xa0, 0x07 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x7d, 0x4f, 0x9c, 0x19, 0xc0, 0x4a, 0x31, 0xec, 0xf9, 0xaa, 0xeb, 0xb2, 0x16, 0x9c, 0xa3, 0x66, 0x5f, 0xd1, 0xd4, 0xed, 0xb8, 0x92, 0x1c, 0xab, 0xda, 0xea, 0xd9, 0x57, 0xdf, 0x4c, 0x2a, 0x48 } }, + { { 0x4b, 0xb0, 0x4e, 0x6e, 0x11, 0x3b, 0x51, 0xbd, 0x6a, 0xfd, 0xe4, 0x25, 0xa5, 0x5f, 0x11, 0x3f, 0x98, 0x92, 0x51, 0x14, 0xc6, 0x5f, 0x3c, 0x0b, 0xa8, 0xf7, 0xc2, 0x81, 0x43, 0xde, 0x91, 0x73 } } }, + { { { 0x3c, 0x8f, 0x9f, 0x33, 0x2a, 0x1f, 0x43, 0x33, 0x8f, 0x68, 0xff, 0x1f, 0x3d, 0x73, 0x6b, 0xbf, 0x68, 0xcc, 0x7d, 0x13, 0x6c, 0x24, 0x4b, 0xcc, 0x4d, 0x24, 0x0d, 0xfe, 0xde, 0x86, 0xad, 0x3b } }, + { { 0x79, 0x51, 0x81, 0x01, 0xdc, 0x73, 0x53, 0xe0, 0x6e, 0x9b, 0xea, 0x68, 0x3f, 0x5c, 0x14, 0x84, 0x53, 0x8d, 0x4b, 0xc0, 0x9f, 0x9f, 0x89, 0x2b, 0x8c, 0xba, 0x86, 0xfa, 0xf2, 0xcd, 0xe3, 0x2d } } }, + { { { 0x06, 0xf9, 0x29, 0x5a, 0xdb, 0x3d, 0x84, 0x52, 0xab, 0xcc, 0x6b, 0x60, 0x9d, 0xb7, 0x4a, 0x0e, 0x36, 0x63, 0x91, 0xad, 0xa0, 0x95, 0xb0, 0x97, 0x89, 0x4e, 0xcf, 0x7d, 0x3c, 0xe5, 0x7c, 0x28 } }, + { { 0x2e, 0x69, 0x98, 0xfd, 0xc6, 0xbd, 0xcc, 0xca, 0xdf, 0x9a, 0x44, 0x7e, 0x9d, 0xca, 0x89, 0x6d, 0xbf, 0x27, 0xc2, 0xf8, 0xcd, 0x46, 0x00, 0x2b, 0xb5, 0x58, 0x4e, 0xb7, 0x89, 0x09, 0xe9, 0x2d } } }, + { { { 0x54, 0xbe, 0x75, 0xcb, 0x05, 0xb0, 0x54, 0xb7, 0xe7, 0x26, 0x86, 0x4a, 0xfc, 0x19, 0xcf, 0x27, 0x46, 0xd4, 0x22, 0x96, 0x5a, 0x11, 0xe8, 0xd5, 0x1b, 0xed, 0x71, 0xc5, 0x5d, 0xc8, 0xaf, 0x45 } }, + { { 0x40, 0x7b, 0x77, 0x57, 0x49, 0x9e, 0x80, 0x39, 0x23, 0xee, 0x81, 0x0b, 0x22, 0xcf, 0xdb, 0x7a, 0x2f, 0x14, 0xb8, 0x57, 0x8f, 0xa1, 0x39, 0x1e, 0x77, 0xfc, 0x0b, 0xa6, 0xbf, 0x8a, 0x0c, 0x6c } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x77, 0x3a, 0xd4, 0xd8, 0x27, 0xcf, 0xe8, 0xa1, 0x72, 0x9d, 0xca, 0xdd, 0x0d, 0x96, 0xda, 0x79, 0xed, 0x56, 0x42, 0x15, 0x60, 0xc7, 0x1c, 0x6b, 0x26, 0x30, 0xf6, 0x6a, 0x95, 0x67, 0xf3, 0x0a } }, + { { 0xc5, 0x08, 0xa4, 0x2b, 0x2f, 0xbd, 0x31, 0x81, 0x2a, 0xa6, 0xb6, 0xe4, 0x00, 0x91, 0xda, 0x3d, 0xb2, 0xb0, 0x96, 0xce, 0x8a, 0xd2, 0x8d, 0x70, 0xb3, 0xd3, 0x34, 0x01, 0x90, 0x8d, 0x10, 0x21 } } }, + { { { 0x33, 0x0d, 0xe7, 0xba, 0x4f, 0x07, 0xdf, 0x8d, 0xea, 0x7d, 0xa0, 0xc5, 0xd6, 0xb1, 0xb0, 0xe5, 0x57, 0x1b, 0x5b, 0xf5, 0x45, 0x13, 0x14, 0x64, 0x5a, 0xeb, 0x5c, 0xfc, 0x54, 0x01, 0x76, 0x2b } }, + { { 0x02, 0x0c, 0xc2, 0xaf, 0x96, 0x36, 0xfe, 0x4a, 0xe2, 0x54, 0x20, 0x6a, 0xeb, 0xb2, 0x9f, 0x62, 0xd7, 0xce, 0xa2, 0x3f, 0x20, 0x11, 0x34, 0x37, 0xe0, 0x42, 0xed, 0x6f, 0xf9, 0x1a, 0xc8, 0x7d } } }, + { { { 0xd8, 0xb9, 0x11, 0xe8, 0x36, 0x3f, 0x42, 0xc1, 0xca, 0xdc, 0xd3, 0xf1, 0xc8, 0x23, 0x3d, 0x4f, 0x51, 0x7b, 0x9d, 0x8d, 0xd8, 0xe4, 0xa0, 0xaa, 0xf3, 0x04, 0xd6, 0x11, 0x93, 0xc8, 0x35, 0x45 } }, + { { 0x61, 0x36, 0xd6, 0x08, 0x90, 0xbf, 0xa7, 0x7a, 0x97, 0x6c, 0x0f, 0x84, 0xd5, 0x33, 0x2d, 0x37, 0xc9, 0x6a, 0x80, 0x90, 0x3d, 0x0a, 0xa2, 0xaa, 0xe1, 0xb8, 0x84, 0xba, 0x61, 0x36, 0xdd, 0x69 } } }, + { { { 0x6b, 0xdb, 0x5b, 0x9c, 0xc6, 0x92, 0xbc, 0x23, 0xaf, 0xc5, 0xb8, 0x75, 0xf8, 0x42, 0xfa, 0xd6, 0xb6, 0x84, 0x94, 0x63, 0x98, 0x93, 0x48, 0x78, 0x38, 0xcd, 0xbb, 0x18, 0x34, 0xc3, 0xdb, 0x67 } }, + { { 0x96, 0xf3, 0x3a, 0x09, 0x56, 0xb0, 0x6f, 0x7c, 0x51, 0x1e, 0x1b, 0x39, 0x48, 0xea, 0xc9, 0x0c, 0x25, 0xa2, 0x7a, 0xca, 0xe7, 0x92, 0xfc, 0x59, 0x30, 0xa3, 0x89, 0x85, 0xdf, 0x6f, 0x43, 0x38 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x79, 0x84, 0x44, 0x19, 0xbd, 0xe9, 0x54, 0xc4, 0xc0, 0x6e, 0x2a, 0xa8, 0xa8, 0x9b, 0x43, 0xd5, 0x71, 0x22, 0x5f, 0xdc, 0x01, 0xfa, 0xdf, 0xb3, 0xb8, 0x47, 0x4b, 0x0a, 0xa5, 0x44, 0xea, 0x29 } }, + { { 0x05, 0x90, 0x50, 0xaf, 0x63, 0x5f, 0x9d, 0x9e, 0xe1, 0x9d, 0x38, 0x97, 0x1f, 0x6c, 0xac, 0x30, 0x46, 0xb2, 0x6a, 0x19, 0xd1, 0x4b, 0xdb, 0xbb, 0x8c, 0xda, 0x2e, 0xab, 0xc8, 0x5a, 0x77, 0x6c } } }, + { { { 0x2b, 0xbe, 0xaf, 0xa1, 0x6d, 0x2f, 0x0b, 0xb1, 0x8f, 0xe3, 0xe0, 0x38, 0xcd, 0x0b, 0x41, 0x1b, 0x4a, 0x15, 0x07, 0xf3, 0x6f, 0xdc, 0xb8, 0xe9, 0xde, 0xb2, 0xa3, 0x40, 0x01, 0xa6, 0x45, 0x1e } }, + { { 0x76, 0x0a, 0xda, 0x8d, 0x2c, 0x07, 0x3f, 0x89, 0x7d, 0x04, 0xad, 0x43, 0x50, 0x6e, 0xd2, 0x47, 0xcb, 0x8a, 0xe6, 0x85, 0x1a, 0x24, 0xf3, 0xd2, 0x60, 0xfd, 0xdf, 0x73, 0xa4, 0x0d, 0x73, 0x0e } } }, + { { { 0xfd, 0x67, 0x6b, 0x71, 0x9b, 0x81, 0x53, 0x39, 0x39, 0xf4, 0xb8, 0xd5, 0xc3, 0x30, 0x9b, 0x3b, 0x7c, 0xa3, 0xf0, 0xd0, 0x84, 0x21, 0xd6, 0xbf, 0xb7, 0x4c, 0x87, 0x13, 0x45, 0x2d, 0xa7, 0x55 } }, + { { 0x5d, 0x04, 0xb3, 0x40, 0x28, 0x95, 0x2d, 0x30, 0x83, 0xec, 0x5e, 0xe4, 0xff, 0x75, 0xfe, 0x79, 0x26, 0x9d, 0x1d, 0x36, 0xcd, 0x0a, 0x15, 0xd2, 0x24, 0x14, 0x77, 0x71, 0xd7, 0x8a, 0x1b, 0x04 } } }, + { { { 0x5d, 0x93, 0xc9, 0xbe, 0xaa, 0x90, 0xcd, 0x9b, 0xfb, 0x73, 0x7e, 0xb0, 0x64, 0x98, 0x57, 0x44, 0x42, 0x41, 0xb1, 0xaf, 0xea, 0xc1, 0xc3, 0x22, 0xff, 0x60, 0x46, 0xcb, 0x61, 0x81, 0x70, 0x61 } }, + { { 0x0d, 0x82, 0xb9, 0xfe, 0x21, 0xcd, 0xc4, 0xf5, 0x98, 0x0c, 0x4e, 0x72, 0xee, 0x87, 0x49, 0xf8, 0xa1, 0x95, 0xdf, 0x8f, 0x2d, 0xbd, 0x21, 0x06, 0x7c, 0x15, 0xe8, 0x12, 0x6d, 0x93, 0xd6, 0x38 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x91, 0xf7, 0x51, 0xd9, 0xef, 0x7d, 0x42, 0x01, 0x13, 0xe9, 0xb8, 0x7f, 0xa6, 0x49, 0x17, 0x64, 0x21, 0x80, 0x83, 0x2c, 0x63, 0x4c, 0x60, 0x09, 0x59, 0x91, 0x92, 0x77, 0x39, 0x51, 0xf4, 0x48 } }, + { { 0x60, 0xd5, 0x22, 0x83, 0x08, 0x2f, 0xff, 0x99, 0x3e, 0x69, 0x6d, 0x88, 0xda, 0xe7, 0x5b, 0x52, 0x26, 0x31, 0x2a, 0xe5, 0x89, 0xde, 0x68, 0x90, 0xb6, 0x22, 0x5a, 0xbd, 0xd3, 0x85, 0x53, 0x31 } } }, + { { { 0xd8, 0xce, 0xdc, 0xf9, 0x3c, 0x4b, 0xa2, 0x1d, 0x2c, 0x2f, 0x36, 0xbe, 0x7a, 0xfc, 0xcd, 0xbc, 0xdc, 0xf9, 0x30, 0xbd, 0xff, 0x05, 0xc7, 0xe4, 0x8e, 0x17, 0x62, 0xf8, 0x4d, 0xa0, 0x56, 0x79 } }, + { { 0x82, 0xe7, 0xf6, 0xba, 0x53, 0x84, 0x0a, 0xa3, 0x34, 0xff, 0x3c, 0xa3, 0x6a, 0xa1, 0x37, 0xea, 0xdd, 0xb6, 0x95, 0xb3, 0x78, 0x19, 0x76, 0x1e, 0x55, 0x2f, 0x77, 0x2e, 0x7f, 0xc1, 0xea, 0x5e } } }, + { { { 0x83, 0xe1, 0x6e, 0xa9, 0x07, 0x33, 0x3e, 0x83, 0xff, 0xcb, 0x1c, 0x9f, 0xb1, 0xa3, 0xb4, 0xc9, 0xe1, 0x07, 0x97, 0xff, 0xf8, 0x23, 0x8f, 0xce, 0x40, 0xfd, 0x2e, 0x5e, 0xdb, 0x16, 0x43, 0x2d } }, + { { 0xba, 0x38, 0x02, 0xf7, 0x81, 0x43, 0x83, 0xa3, 0x20, 0x4f, 0x01, 0x3b, 0x8a, 0x04, 0x38, 0x31, 0xc6, 0x0f, 0xc8, 0xdf, 0xd7, 0xfa, 0x2f, 0x88, 0x3f, 0xfc, 0x0c, 0x76, 0xc4, 0xa6, 0x45, 0x72 } } }, + { { { 0xbb, 0x0c, 0xbc, 0x6a, 0xa4, 0x97, 0x17, 0x93, 0x2d, 0x6f, 0xde, 0x72, 0x10, 0x1c, 0x08, 0x2c, 0x0f, 0x80, 0x32, 0x68, 0x27, 0xd4, 0xab, 0xdd, 0xc5, 0x58, 0x61, 0x13, 0x6d, 0x11, 0x1e, 0x4d } }, + { { 0x1a, 0xb9, 0xc9, 0x10, 0xfb, 0x1e, 0x4e, 0xf4, 0x84, 0x4b, 0x8a, 0x5e, 0x7b, 0x4b, 0xe8, 0x43, 0x8c, 0x8f, 0x00, 0xb5, 0x54, 0x13, 0xc5, 0x5c, 0xb6, 0x35, 0x4e, 0x9d, 0xe4, 0x5b, 0x41, 0x6d } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x15, 0x7d, 0x12, 0x48, 0x82, 0x14, 0x42, 0xcd, 0x32, 0xd4, 0x4b, 0xc1, 0x72, 0x61, 0x2a, 0x8c, 0xec, 0xe2, 0xf8, 0x24, 0x45, 0x94, 0xe3, 0xbe, 0xdd, 0x67, 0xa8, 0x77, 0x5a, 0xae, 0x5b, 0x4b } }, + { { 0xcb, 0x77, 0x9a, 0x20, 0xde, 0xb8, 0x23, 0xd9, 0xa0, 0x0f, 0x8c, 0x7b, 0xa5, 0xcb, 0xae, 0xb6, 0xec, 0x42, 0x67, 0x0e, 0x58, 0xa4, 0x75, 0x98, 0x21, 0x71, 0x84, 0xb3, 0xe0, 0x76, 0x94, 0x73 } } }, + { { { 0xdf, 0xfc, 0x69, 0x28, 0x23, 0x3f, 0x5b, 0xf8, 0x3b, 0x24, 0x37, 0xf3, 0x1d, 0xd5, 0x22, 0x6b, 0xd0, 0x98, 0xa8, 0x6c, 0xcf, 0xff, 0x06, 0xe1, 0x13, 0xdf, 0xb9, 0xc1, 0x0c, 0xa9, 0xbf, 0x33 } }, + { { 0xd9, 0x81, 0xda, 0xb2, 0x4f, 0x82, 0x9d, 0x43, 0x81, 0x09, 0xf1, 0xd2, 0x01, 0xef, 0xac, 0xf4, 0x2d, 0x7d, 0x01, 0x09, 0xf1, 0xff, 0xa5, 0x9f, 0xe5, 0xca, 0x27, 0x63, 0xdb, 0x20, 0xb1, 0x53 } } }, + { { { 0x67, 0x02, 0xe8, 0xad, 0xa9, 0x34, 0xd4, 0xf0, 0x15, 0x81, 0xaa, 0xc7, 0x4d, 0x87, 0x94, 0xea, 0x75, 0xe7, 0x4c, 0x94, 0x04, 0x0e, 0x69, 0x87, 0xe7, 0x51, 0x91, 0x10, 0x03, 0xc7, 0xbe, 0x56 } }, + { { 0x32, 0xfb, 0x86, 0xec, 0x33, 0x6b, 0x2e, 0x51, 0x2b, 0xc8, 0xfa, 0x6c, 0x70, 0x47, 0x7e, 0xce, 0x05, 0x0c, 0x71, 0xf3, 0xb4, 0x56, 0xa6, 0xdc, 0xcc, 0x78, 0x07, 0x75, 0xd0, 0xdd, 0xb2, 0x6a } } }, + { { { 0xc6, 0xef, 0xb9, 0xc0, 0x2b, 0x22, 0x08, 0x1e, 0x71, 0x70, 0xb3, 0x35, 0x9c, 0x7a, 0x01, 0x92, 0x44, 0x9a, 0xf6, 0xb0, 0x58, 0x95, 0xc1, 0x9b, 0x02, 0xed, 0x2d, 0x7c, 0x34, 0x29, 0x49, 0x44 } }, + { { 0x45, 0x62, 0x1d, 0x2e, 0xff, 0x2a, 0x1c, 0x21, 0xa4, 0x25, 0x7b, 0x0d, 0x8c, 0x15, 0x39, 0xfc, 0x8f, 0x7c, 0xa5, 0x7d, 0x1e, 0x25, 0xa3, 0x45, 0xd6, 0xab, 0xbd, 0xcb, 0xc5, 0x5e, 0x78, 0x77 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xd0, 0xd3, 0x42, 0xed, 0x1d, 0x00, 0x3c, 0x15, 0x2c, 0x9c, 0x77, 0x81, 0xd2, 0x73, 0xd1, 0x06, 0xd5, 0xc4, 0x7f, 0x94, 0xbb, 0x92, 0x2d, 0x2c, 0x4b, 0x45, 0x4b, 0xe9, 0x2a, 0x89, 0x6b, 0x2b } }, + { { 0xd2, 0x0c, 0x88, 0xc5, 0x48, 0x4d, 0xea, 0x0d, 0x4a, 0xc9, 0x52, 0x6a, 0x61, 0x79, 0xe9, 0x76, 0xf3, 0x85, 0x52, 0x5c, 0x1b, 0x2c, 0xe1, 0xd6, 0xc4, 0x0f, 0x18, 0x0e, 0x4e, 0xf6, 0x1c, 0x7f } } }, + { { { 0xb4, 0x04, 0x2e, 0x42, 0xcb, 0x1f, 0x2b, 0x11, 0x51, 0x7b, 0x08, 0xac, 0xaa, 0x3e, 0x9e, 0x52, 0x60, 0xb7, 0xc2, 0x61, 0x57, 0x8c, 0x84, 0xd5, 0x18, 0xa6, 0x19, 0xfc, 0xb7, 0x75, 0x91, 0x1b } }, + { { 0xe8, 0x68, 0xca, 0x44, 0xc8, 0x38, 0x38, 0xcc, 0x53, 0x0a, 0x32, 0x35, 0xcc, 0x52, 0xcb, 0x0e, 0xf7, 0xc5, 0xe7, 0xec, 0x3d, 0x85, 0xcc, 0x58, 0xe2, 0x17, 0x47, 0xff, 0x9f, 0xa5, 0x30, 0x17 } } }, + { { { 0xe3, 0xae, 0xc8, 0xc1, 0x71, 0x75, 0x31, 0x00, 0x37, 0x41, 0x5c, 0x0e, 0x39, 0xda, 0x73, 0xa0, 0xc7, 0x97, 0x36, 0x6c, 0x5b, 0xf2, 0xee, 0x64, 0x0a, 0x3d, 0x89, 0x1e, 0x1d, 0x49, 0x8c, 0x37 } }, + { { 0x4c, 0xe6, 0xb0, 0xc1, 0xa5, 0x2a, 0x82, 0x09, 0x08, 0xad, 0x79, 0x9c, 0x56, 0xf6, 0xf9, 0xc1, 0xd7, 0x7c, 0x39, 0x7f, 0x93, 0xca, 0x11, 0x55, 0xbf, 0x07, 0x1b, 0x82, 0x29, 0x69, 0x95, 0x5c } } }, + { { { 0x87, 0xee, 0xa6, 0x56, 0x9e, 0xc2, 0x9a, 0x56, 0x24, 0x42, 0x85, 0x4d, 0x98, 0x31, 0x1e, 0x60, 0x4d, 0x87, 0x85, 0x04, 0xae, 0x46, 0x12, 0xf9, 0x8e, 0x7f, 0xe4, 0x7f, 0xf6, 0x1c, 0x37, 0x01 } }, + { { 0x73, 0x4c, 0xb6, 0xc5, 0xc4, 0xe9, 0x6c, 0x85, 0x48, 0x4a, 0x5a, 0xac, 0xd9, 0x1f, 0x43, 0xf8, 0x62, 0x5b, 0xee, 0x98, 0x2a, 0x33, 0x8e, 0x79, 0xce, 0x61, 0x06, 0x35, 0xd8, 0xd7, 0xca, 0x71 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x72, 0xd3, 0xae, 0xa6, 0xca, 0x8f, 0xcd, 0xcc, 0x78, 0x8e, 0x19, 0x4d, 0xa7, 0xd2, 0x27, 0xe9, 0xa4, 0x3c, 0x16, 0x5b, 0x84, 0x80, 0xf9, 0xd0, 0xcc, 0x6a, 0x1e, 0xca, 0x1e, 0x67, 0xbd, 0x63 } }, + { { 0x7b, 0x6e, 0x2a, 0xd2, 0x87, 0x48, 0xff, 0xa1, 0xca, 0xe9, 0x15, 0x85, 0xdc, 0xdb, 0x2c, 0x39, 0x12, 0x91, 0xa9, 0x20, 0xaa, 0x4f, 0x29, 0xf4, 0x15, 0x7a, 0xd2, 0xf5, 0x32, 0xcc, 0x60, 0x04 } } }, + { { { 0xe5, 0x10, 0x47, 0x3b, 0xfa, 0x90, 0xfc, 0x30, 0xb5, 0xea, 0x6f, 0x56, 0x8f, 0xfb, 0x0e, 0xa7, 0x3b, 0xc8, 0xb2, 0xff, 0x02, 0x7a, 0x33, 0x94, 0x93, 0x2a, 0x03, 0xe0, 0x96, 0x3a, 0x6c, 0x0f } }, + { { 0x5a, 0x63, 0x67, 0xe1, 0x9b, 0x47, 0x78, 0x9f, 0x38, 0x79, 0xac, 0x97, 0x66, 0x1d, 0x5e, 0x51, 0xee, 0x24, 0x42, 0xe8, 0x58, 0x4b, 0x8a, 0x03, 0x75, 0x86, 0x37, 0x86, 0xe2, 0x97, 0x4e, 0x3d } } }, + { { { 0x3f, 0x75, 0x8e, 0xb4, 0xff, 0xd8, 0xdd, 0xd6, 0x37, 0x57, 0x9d, 0x6d, 0x3b, 0xbd, 0xd5, 0x60, 0x88, 0x65, 0x9a, 0xb9, 0x4a, 0x68, 0x84, 0xa2, 0x67, 0xdd, 0x17, 0x25, 0x97, 0x04, 0x8b, 0x5e } }, + { { 0xbb, 0x40, 0x5e, 0xbc, 0x16, 0x92, 0x05, 0xc4, 0xc0, 0x4e, 0x72, 0x90, 0x0e, 0xab, 0xcf, 0x8a, 0xed, 0xef, 0xb9, 0x2d, 0x3b, 0xf8, 0x43, 0x5b, 0xba, 0x2d, 0xeb, 0x2f, 0x52, 0xd2, 0xd1, 0x5a } } }, + { { { 0x40, 0xb4, 0xab, 0xe6, 0xad, 0x9f, 0x46, 0x69, 0x4a, 0xb3, 0x8e, 0xaa, 0xea, 0x9c, 0x8a, 0x20, 0x16, 0x5d, 0x8c, 0x13, 0xbd, 0xf6, 0x1d, 0xc5, 0x24, 0xbd, 0x90, 0x2a, 0x1c, 0xc7, 0x13, 0x3b } }, + { { 0x54, 0xdc, 0x16, 0x0d, 0x18, 0xbe, 0x35, 0x64, 0x61, 0x52, 0x02, 0x80, 0xaf, 0x05, 0xf7, 0xa6, 0x42, 0xd3, 0x8f, 0x2e, 0x79, 0x26, 0xa8, 0xbb, 0xb2, 0x17, 0x48, 0xb2, 0x7a, 0x0a, 0x89, 0x14 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x20, 0xa8, 0x88, 0xe3, 0x91, 0xc0, 0x6e, 0xbb, 0x8a, 0x27, 0x82, 0x51, 0x83, 0xb2, 0x28, 0xa9, 0x83, 0xeb, 0xa6, 0xa9, 0x4d, 0x17, 0x59, 0x22, 0x54, 0x00, 0x50, 0x45, 0xcb, 0x48, 0x4b, 0x18 } }, + { { 0x33, 0x7c, 0xe7, 0x26, 0xba, 0x4d, 0x32, 0xfe, 0x53, 0xf4, 0xfa, 0x83, 0xe3, 0xa5, 0x79, 0x66, 0x73, 0xef, 0x80, 0x23, 0x68, 0xc2, 0x60, 0xdd, 0xa9, 0x33, 0xdc, 0x03, 0x7a, 0xe0, 0xe0, 0x3e } } }, + { { { 0x34, 0x5c, 0x13, 0xfb, 0xc0, 0xe3, 0x78, 0x2b, 0x54, 0x58, 0x22, 0x9b, 0x76, 0x81, 0x7f, 0x93, 0x9c, 0x25, 0x3c, 0xd2, 0xe9, 0x96, 0x21, 0x26, 0x08, 0xf5, 0xed, 0x95, 0x11, 0xae, 0x04, 0x5a } }, + { { 0xb9, 0xe8, 0xc5, 0x12, 0x97, 0x1f, 0x83, 0xfe, 0x3e, 0x94, 0x99, 0xd4, 0x2d, 0xf9, 0x52, 0x59, 0x5c, 0x82, 0xa6, 0xf0, 0x75, 0x7e, 0xe8, 0xec, 0xcc, 0xac, 0x18, 0x21, 0x09, 0x67, 0x66, 0x67 } } }, + { { { 0xb3, 0x40, 0x29, 0xd1, 0xcb, 0x1b, 0x08, 0x9e, 0x9c, 0xb7, 0x53, 0xb9, 0x3b, 0x71, 0x08, 0x95, 0x12, 0x1a, 0x58, 0xaf, 0x7e, 0x82, 0x52, 0x43, 0x4f, 0x11, 0x39, 0xf4, 0x93, 0x1a, 0x26, 0x05 } }, + { { 0x6e, 0x44, 0xa3, 0xf9, 0x64, 0xaf, 0xe7, 0x6d, 0x7d, 0xdf, 0x1e, 0xac, 0x04, 0xea, 0x3b, 0x5f, 0x9b, 0xe8, 0x24, 0x9d, 0x0e, 0xe5, 0x2e, 0x3e, 0xdf, 0xa9, 0xf7, 0xd4, 0x50, 0x71, 0xf0, 0x78 } } }, + { { { 0x3e, 0xa8, 0x38, 0xc2, 0x57, 0x56, 0x42, 0x9a, 0xb1, 0xe2, 0xf8, 0x45, 0xaa, 0x11, 0x48, 0x5f, 0x17, 0xc4, 0x54, 0x27, 0xdc, 0x5d, 0xaa, 0xdd, 0x41, 0xbc, 0xdf, 0x81, 0xb9, 0x53, 0xee, 0x52 } }, + { { 0xc3, 0xf1, 0xa7, 0x6d, 0xb3, 0x5f, 0x92, 0x6f, 0xcc, 0x91, 0xb8, 0x95, 0x05, 0xdf, 0x3c, 0x64, 0x57, 0x39, 0x61, 0x51, 0xad, 0x8c, 0x38, 0x7b, 0xc8, 0xde, 0x00, 0x34, 0xbe, 0xa1, 0xb0, 0x7e } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x25, 0x24, 0x1d, 0x8a, 0x67, 0x20, 0xee, 0x42, 0xeb, 0x38, 0xed, 0x0b, 0x8b, 0xcd, 0x46, 0x9d, 0x5e, 0x6b, 0x1e, 0x24, 0x9d, 0x12, 0x05, 0x1a, 0xcc, 0x05, 0x4e, 0x92, 0x38, 0xe1, 0x1f, 0x50 } }, + { { 0x4e, 0xee, 0x1c, 0x91, 0xe6, 0x11, 0xbd, 0x8e, 0x55, 0x1a, 0x18, 0x75, 0x66, 0xaf, 0x4d, 0x7b, 0x0f, 0xae, 0x6d, 0x85, 0xca, 0x82, 0x58, 0x21, 0x9c, 0x18, 0xe0, 0xed, 0xec, 0x22, 0x80, 0x2f } } }, + { { { 0x68, 0x3b, 0x0a, 0x39, 0x1d, 0x6a, 0x15, 0x57, 0xfc, 0xf0, 0x63, 0x54, 0xdb, 0x39, 0xdb, 0xe8, 0x5c, 0x64, 0xff, 0xa0, 0x09, 0x4f, 0x3b, 0xb7, 0x32, 0x60, 0x99, 0x94, 0xfd, 0x94, 0x82, 0x2d } }, + { { 0x24, 0xf6, 0x5a, 0x44, 0xf1, 0x55, 0x2c, 0xdb, 0xea, 0x7c, 0x84, 0x7c, 0x01, 0xac, 0xe3, 0xfd, 0xc9, 0x27, 0xc1, 0x5a, 0xb9, 0xde, 0x4f, 0x5a, 0x90, 0xdd, 0xc6, 0x67, 0xaa, 0x6f, 0x8a, 0x3a } } }, + { { { 0x78, 0x52, 0x87, 0xc9, 0x97, 0x63, 0xb1, 0xdd, 0x54, 0x5f, 0xc1, 0xf8, 0xf1, 0x06, 0xa6, 0xa8, 0xa3, 0x88, 0x82, 0xd4, 0xcb, 0xa6, 0x19, 0xdd, 0xd1, 0x11, 0x87, 0x08, 0x17, 0x4c, 0x37, 0x2a } }, + { { 0xa1, 0x0c, 0xf3, 0x08, 0x43, 0xd9, 0x24, 0x1e, 0x83, 0xa7, 0xdf, 0x91, 0xca, 0xbd, 0x69, 0x47, 0x8d, 0x1b, 0xe2, 0xb9, 0x4e, 0xb5, 0xe1, 0x76, 0xb3, 0x1c, 0x93, 0x03, 0xce, 0x5f, 0xb3, 0x5a } } }, + { { { 0x1d, 0xda, 0xe4, 0x61, 0x03, 0x50, 0xa9, 0x8b, 0x68, 0x18, 0xef, 0xb2, 0x1c, 0x84, 0x3b, 0xa2, 0x44, 0x95, 0xa3, 0x04, 0x3b, 0xd6, 0x99, 0x00, 0xaf, 0x76, 0x42, 0x67, 0x02, 0x7d, 0x85, 0x56 } }, + { { 0xce, 0x72, 0x0e, 0x29, 0x84, 0xb2, 0x7d, 0xd2, 0x45, 0xbe, 0x57, 0x06, 0xed, 0x7f, 0xcf, 0xed, 0xcd, 0xef, 0x19, 0xd6, 0xbc, 0x15, 0x79, 0x64, 0xd2, 0x18, 0xe3, 0x20, 0x67, 0x3a, 0x54, 0x0b } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x52, 0xfd, 0x04, 0xc5, 0xfb, 0x99, 0xe7, 0xe8, 0xfb, 0x8c, 0xe1, 0x42, 0x03, 0xef, 0x9d, 0xd9, 0x9e, 0x4d, 0xf7, 0x80, 0xcf, 0x2e, 0xcc, 0x9b, 0x45, 0xc9, 0x7b, 0x7a, 0xbc, 0x37, 0xa8, 0x52 } }, + { { 0x96, 0x11, 0x41, 0x8a, 0x47, 0x91, 0xfe, 0xb6, 0xda, 0x7a, 0x54, 0x63, 0xd1, 0x14, 0x35, 0x05, 0x86, 0x8c, 0xa9, 0x36, 0x3f, 0xf2, 0x85, 0x54, 0x4e, 0x92, 0xd8, 0x85, 0x01, 0x46, 0xd6, 0x50 } } }, + { { { 0x53, 0xcd, 0xf3, 0x86, 0x40, 0xe6, 0x39, 0x42, 0x95, 0xd6, 0xcb, 0x45, 0x1a, 0x20, 0xc8, 0x45, 0x4b, 0x32, 0x69, 0x04, 0xb1, 0xaf, 0x20, 0x46, 0xc7, 0x6b, 0x23, 0x5b, 0x69, 0xee, 0x30, 0x3f } }, + { { 0x70, 0x83, 0x47, 0xc0, 0xdb, 0x55, 0x08, 0xa8, 0x7b, 0x18, 0x6d, 0xf5, 0x04, 0x5a, 0x20, 0x0c, 0x4a, 0x8c, 0x60, 0xae, 0xae, 0x0f, 0x64, 0x55, 0x55, 0x2e, 0xd5, 0x1d, 0x53, 0x31, 0x42, 0x41 } } }, + { { { 0xca, 0xfc, 0x88, 0x6b, 0x96, 0x78, 0x0a, 0x8b, 0x83, 0xdc, 0xbc, 0xaf, 0x40, 0xb6, 0x8d, 0x7f, 0xef, 0xb4, 0xd1, 0x3f, 0xcc, 0xa2, 0x74, 0xc9, 0xc2, 0x92, 0x55, 0x00, 0xab, 0xdb, 0xbf, 0x4f } }, + { { 0x93, 0x1c, 0x06, 0x2d, 0x66, 0x65, 0x02, 0xa4, 0x97, 0x18, 0xfd, 0x00, 0xe7, 0xab, 0x03, 0xec, 0xce, 0xc1, 0xbf, 0x37, 0xf8, 0x13, 0x53, 0xa5, 0xe5, 0x0c, 0x3a, 0xa8, 0x55, 0xb9, 0xff, 0x68 } } }, + { { { 0xe4, 0xe6, 0x6d, 0x30, 0x7d, 0x30, 0x35, 0xc2, 0x78, 0x87, 0xf9, 0xfc, 0x6b, 0x5a, 0xc3, 0xb7, 0x65, 0xd8, 0x2e, 0xc7, 0xa5, 0x0c, 0xc6, 0xdc, 0x12, 0xaa, 0xd6, 0x4f, 0xc5, 0x38, 0xbc, 0x0e } }, + { { 0xe2, 0x3c, 0x76, 0x86, 0x38, 0xf2, 0x7b, 0x2c, 0x16, 0x78, 0x8d, 0xf5, 0xa4, 0x15, 0xda, 0xdb, 0x26, 0x85, 0xa0, 0x56, 0xdd, 0x1d, 0xe3, 0xb3, 0xfd, 0x40, 0xef, 0xf2, 0xd9, 0xa1, 0xb3, 0x04 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xdb, 0x49, 0x0e, 0xe6, 0x58, 0x10, 0x7a, 0x52, 0xda, 0xb5, 0x7d, 0x37, 0x6a, 0x3e, 0xa1, 0x78, 0xce, 0xc7, 0x1c, 0x24, 0x23, 0xdb, 0x7d, 0xfb, 0x8c, 0x8d, 0xdc, 0x30, 0x67, 0x69, 0x75, 0x3b } }, + { { 0xa9, 0xea, 0x6d, 0x16, 0x16, 0x60, 0xf4, 0x60, 0x87, 0x19, 0x44, 0x8c, 0x4a, 0x8b, 0x3e, 0xfb, 0x16, 0x00, 0x00, 0x54, 0xa6, 0x9e, 0x9f, 0xef, 0xcf, 0xd9, 0xd2, 0x4c, 0x74, 0x31, 0xd0, 0x34 } } }, + { { { 0xa4, 0xeb, 0x04, 0xa4, 0x8c, 0x8f, 0x71, 0x27, 0x95, 0x85, 0x5d, 0x55, 0x4b, 0xb1, 0x26, 0x26, 0xc8, 0xae, 0x6a, 0x7d, 0xa2, 0x21, 0xca, 0xce, 0x38, 0xab, 0x0f, 0xd0, 0xd5, 0x2b, 0x6b, 0x00 } }, + { { 0xe5, 0x67, 0x0c, 0xf1, 0x3a, 0x9a, 0xea, 0x09, 0x39, 0xef, 0xd1, 0x30, 0xbc, 0x33, 0xba, 0xb1, 0x6a, 0xc5, 0x27, 0x08, 0x7f, 0x54, 0x80, 0x3d, 0xab, 0xf6, 0x15, 0x7a, 0xc2, 0x40, 0x73, 0x72 } } }, + { { { 0x84, 0x56, 0x82, 0xb6, 0x12, 0x70, 0x7f, 0xf7, 0xf0, 0xbd, 0x5b, 0xa9, 0xd5, 0xc5, 0x5f, 0x59, 0xbf, 0x7f, 0xb3, 0x55, 0x22, 0x02, 0xc9, 0x44, 0x55, 0x87, 0x8f, 0x96, 0x98, 0x64, 0x6d, 0x15 } }, + { { 0xb0, 0x8b, 0xaa, 0x1e, 0xec, 0xc7, 0xa5, 0x8f, 0x1f, 0x92, 0x04, 0xc6, 0x05, 0xf6, 0xdf, 0xa1, 0xcc, 0x1f, 0x81, 0xf5, 0x0e, 0x9c, 0x57, 0xdc, 0xe3, 0xbb, 0x06, 0x87, 0x1e, 0xfe, 0x23, 0x6c } } }, + { { { 0xd8, 0x2b, 0x5b, 0x16, 0xea, 0x20, 0xf1, 0xd3, 0x68, 0x8f, 0xae, 0x5b, 0xd0, 0xa9, 0x1a, 0x19, 0xa8, 0x36, 0xfb, 0x2b, 0x57, 0x88, 0x7d, 0x90, 0xd5, 0xa6, 0xf3, 0xdc, 0x38, 0x89, 0x4e, 0x1f } }, + { { 0xcc, 0x19, 0xda, 0x9b, 0x3b, 0x43, 0x48, 0x21, 0x2e, 0x23, 0x4d, 0x3d, 0xae, 0xf8, 0x8c, 0xfc, 0xdd, 0xa6, 0x74, 0x37, 0x65, 0xca, 0xee, 0x1a, 0x19, 0x8e, 0x9f, 0x64, 0x6f, 0x0c, 0x8b, 0x5a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x25, 0xb9, 0xc2, 0xf0, 0x72, 0xb8, 0x15, 0x16, 0xcc, 0x8d, 0x3c, 0x6f, 0x25, 0xed, 0xf4, 0x46, 0x2e, 0x0c, 0x60, 0x0f, 0xe2, 0x84, 0x34, 0x55, 0x89, 0x59, 0x34, 0x1b, 0xf5, 0x8d, 0xfe, 0x08 } }, + { { 0xf8, 0xab, 0x93, 0xbc, 0x44, 0xba, 0x1b, 0x75, 0x4b, 0x49, 0x6f, 0xd0, 0x54, 0x2e, 0x63, 0xba, 0xb5, 0xea, 0xed, 0x32, 0x14, 0xc9, 0x94, 0xd8, 0xc5, 0xce, 0xf4, 0x10, 0x68, 0xe0, 0x38, 0x27 } } }, + { { { 0x74, 0x1c, 0x14, 0x9b, 0xd4, 0x64, 0x61, 0x71, 0x5a, 0xb6, 0x21, 0x33, 0x4f, 0xf7, 0x8e, 0xba, 0xa5, 0x48, 0x9a, 0xc7, 0xfa, 0x9a, 0xf0, 0xb4, 0x62, 0xad, 0xf2, 0x5e, 0xcc, 0x03, 0x24, 0x1a } }, + { { 0xf5, 0x76, 0xfd, 0xe4, 0xaf, 0xb9, 0x03, 0x59, 0xce, 0x63, 0xd2, 0x3b, 0x1f, 0xcd, 0x21, 0x0c, 0xad, 0x44, 0xa5, 0x97, 0xac, 0x80, 0x11, 0x02, 0x9b, 0x0c, 0xe5, 0x8b, 0xcd, 0xfb, 0x79, 0x77 } } }, + { { { 0x15, 0xbe, 0x9a, 0x0d, 0xba, 0x38, 0x72, 0x20, 0x8a, 0xf5, 0xbe, 0x59, 0x93, 0x79, 0xb7, 0xf6, 0x6a, 0x0c, 0x38, 0x27, 0x1a, 0x60, 0xf4, 0x86, 0x3b, 0xab, 0x5a, 0x00, 0xa0, 0xce, 0x21, 0x7d } }, + { { 0x6c, 0xba, 0x14, 0xc5, 0xea, 0x12, 0x9e, 0x2e, 0x82, 0x63, 0xce, 0x9b, 0x4a, 0xe7, 0x1d, 0xec, 0xf1, 0x2e, 0x51, 0x1c, 0xf4, 0xd0, 0x69, 0x15, 0x42, 0x9d, 0xa3, 0x3f, 0x0e, 0xbf, 0xe9, 0x5c } } }, + { { { 0xe4, 0x0d, 0xf4, 0xbd, 0xee, 0x31, 0x10, 0xed, 0xcb, 0x12, 0x86, 0xad, 0xd4, 0x2f, 0x90, 0x37, 0x32, 0xc3, 0x0b, 0x73, 0xec, 0x97, 0x85, 0xa4, 0x01, 0x1c, 0x76, 0x35, 0xfe, 0x75, 0xdd, 0x71 } }, + { { 0x11, 0xa4, 0x88, 0x9f, 0x3e, 0x53, 0x69, 0x3b, 0x1b, 0xe0, 0xf7, 0xba, 0x9b, 0xad, 0x4e, 0x81, 0x5f, 0xb5, 0x5c, 0xae, 0xbe, 0x67, 0x86, 0x37, 0x34, 0x8e, 0x07, 0x32, 0x45, 0x4a, 0x67, 0x39 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x90, 0x70, 0x58, 0x20, 0x03, 0x1e, 0x67, 0xb2, 0xc8, 0x9b, 0x58, 0xc5, 0xb1, 0xeb, 0x2d, 0x4a, 0xde, 0x82, 0x8c, 0xf2, 0xd2, 0x14, 0xb8, 0x70, 0x61, 0x4e, 0x73, 0xd6, 0x0b, 0x6b, 0x0d, 0x30 } }, + { { 0x81, 0xfc, 0x55, 0x5c, 0xbf, 0xa7, 0xc4, 0xbd, 0xe2, 0xf0, 0x4b, 0x8f, 0xe9, 0x7d, 0x99, 0xfa, 0xd3, 0xab, 0xbc, 0xc7, 0x83, 0x2b, 0x04, 0x7f, 0x0c, 0x19, 0x43, 0x03, 0x3d, 0x07, 0xca, 0x40 } } }, + { { { 0xf9, 0xc8, 0xbe, 0x8c, 0x16, 0x81, 0x39, 0x96, 0xf6, 0x17, 0x58, 0xc8, 0x30, 0x58, 0xfb, 0xc2, 0x03, 0x45, 0xd2, 0x52, 0x76, 0xe0, 0x6a, 0x26, 0x28, 0x5c, 0x88, 0x59, 0x6a, 0x5a, 0x54, 0x42 } }, + { { 0x07, 0xb5, 0x2e, 0x2c, 0x67, 0x15, 0x9b, 0xfb, 0x83, 0x69, 0x1e, 0x0f, 0xda, 0xd6, 0x29, 0xb1, 0x60, 0xe0, 0xb2, 0xba, 0x69, 0xa2, 0x9e, 0xbd, 0xbd, 0xe0, 0x1c, 0xbd, 0xcd, 0x06, 0x64, 0x70 } } }, + { { { 0x41, 0xfa, 0x8c, 0xe1, 0x89, 0x8f, 0x27, 0xc8, 0x25, 0x8f, 0x6f, 0x5f, 0x55, 0xf8, 0xde, 0x95, 0x6d, 0x2f, 0x75, 0x16, 0x2b, 0x4e, 0x44, 0xfd, 0x86, 0x6e, 0xe9, 0x70, 0x39, 0x76, 0x97, 0x7e } }, + { { 0x17, 0x62, 0x6b, 0x14, 0xa1, 0x7c, 0xd0, 0x79, 0x6e, 0xd8, 0x8a, 0xa5, 0x6d, 0x8c, 0x93, 0xd2, 0x3f, 0xec, 0x44, 0x8d, 0x6e, 0x91, 0x01, 0x8c, 0x8f, 0xee, 0x01, 0x8f, 0xc0, 0xb4, 0x85, 0x0e } } }, + { { { 0x02, 0x3a, 0x70, 0x41, 0xe4, 0x11, 0x57, 0x23, 0xac, 0xe6, 0xfc, 0x54, 0x7e, 0xcd, 0xd7, 0x22, 0xcb, 0x76, 0x9f, 0x20, 0xce, 0xa0, 0x73, 0x76, 0x51, 0x3b, 0xa4, 0xf8, 0xe3, 0x62, 0x12, 0x6c } }, + { { 0x7f, 0x00, 0x9c, 0x26, 0x0d, 0x6f, 0x48, 0x7f, 0x3a, 0x01, 0xed, 0xc5, 0x96, 0xb0, 0x1f, 0x4f, 0xa8, 0x02, 0x62, 0x27, 0x8a, 0x50, 0x8d, 0x9a, 0x8b, 0x52, 0x0f, 0x1e, 0xcf, 0x41, 0x38, 0x19 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xf5, 0x6c, 0xd4, 0x2f, 0x0f, 0x69, 0x0f, 0x87, 0x3f, 0x61, 0x65, 0x1e, 0x35, 0x34, 0x85, 0xba, 0x02, 0x30, 0xac, 0x25, 0x3d, 0xe2, 0x62, 0xf1, 0xcc, 0xe9, 0x1b, 0xc2, 0xef, 0x6a, 0x42, 0x57 } }, + { { 0x34, 0x1f, 0x2e, 0xac, 0xd1, 0xc7, 0x04, 0x52, 0x32, 0x66, 0xb2, 0x33, 0x73, 0x21, 0x34, 0x54, 0xf7, 0x71, 0xed, 0x06, 0xb0, 0xff, 0xa6, 0x59, 0x6f, 0x8a, 0x4e, 0xfb, 0x02, 0xb0, 0x45, 0x6b } } }, + { { { 0xf5, 0x48, 0x0b, 0x03, 0xc5, 0x22, 0x7d, 0x80, 0x08, 0x53, 0xfe, 0x32, 0xb1, 0xa1, 0x8a, 0x74, 0x6f, 0xbd, 0x3f, 0x85, 0xf4, 0xcf, 0xf5, 0x60, 0xaf, 0x41, 0x7e, 0x3e, 0x46, 0xa3, 0x5a, 0x20 } }, + { { 0xaa, 0x35, 0x87, 0x44, 0x63, 0x66, 0x97, 0xf8, 0x6e, 0x55, 0x0c, 0x04, 0x3e, 0x35, 0x50, 0xbf, 0x93, 0x69, 0xd2, 0x8b, 0x05, 0x55, 0x99, 0xbe, 0xe2, 0x53, 0x61, 0xec, 0xe8, 0x08, 0x0b, 0x32 } } }, + { { { 0xb3, 0x10, 0x45, 0x02, 0x69, 0x59, 0x2e, 0x97, 0xd9, 0x64, 0xf8, 0xdb, 0x25, 0x80, 0xdc, 0xc4, 0xd5, 0x62, 0x3c, 0xed, 0x65, 0x91, 0xad, 0xd1, 0x57, 0x81, 0x94, 0xaa, 0xa1, 0x29, 0xfc, 0x68 } }, + { { 0xdd, 0xb5, 0x7d, 0xab, 0x5a, 0x21, 0x41, 0x53, 0xbb, 0x17, 0x79, 0x0d, 0xd1, 0xa8, 0x0c, 0x0c, 0x20, 0x88, 0x09, 0xe9, 0x84, 0xe8, 0x25, 0x11, 0x67, 0x7a, 0x8b, 0x1a, 0xe4, 0x5d, 0xe1, 0x5d } } }, + { { { 0x37, 0xea, 0xfe, 0x65, 0x3b, 0x25, 0xe8, 0xe1, 0xc2, 0xc5, 0x02, 0xa4, 0xbe, 0x98, 0x0a, 0x2b, 0x61, 0xc1, 0x9b, 0xe2, 0xd5, 0x92, 0xe6, 0x9e, 0x7d, 0x1f, 0xca, 0x43, 0x88, 0x8b, 0x2c, 0x59 } }, + { { 0xe0, 0xb5, 0x00, 0x1d, 0x2a, 0x6f, 0xaf, 0x79, 0x86, 0x2f, 0xa6, 0x5a, 0x93, 0xd1, 0xfe, 0xae, 0x3a, 0xee, 0xdb, 0x7c, 0x61, 0xbe, 0x7c, 0x01, 0xf9, 0xfe, 0x52, 0xdc, 0xd8, 0x52, 0xa3, 0x42 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x22, 0xaf, 0x13, 0x37, 0xbd, 0x37, 0x71, 0xac, 0x04, 0x46, 0x63, 0xac, 0xa4, 0x77, 0xed, 0x25, 0x38, 0xe0, 0x15, 0xa8, 0x64, 0x00, 0x0d, 0xce, 0x51, 0x01, 0xa9, 0xbc, 0x0f, 0x03, 0x1c, 0x04 } }, + { { 0x89, 0xf9, 0x80, 0x07, 0xcf, 0x3f, 0xb3, 0xe9, 0xe7, 0x45, 0x44, 0x3d, 0x2a, 0x7c, 0xe9, 0xe4, 0x16, 0x5c, 0x5e, 0x65, 0x1c, 0xc7, 0x7d, 0xc6, 0x7a, 0xfb, 0x43, 0xee, 0x25, 0x76, 0x46, 0x72 } } }, + { { { 0x02, 0xa2, 0xed, 0xf4, 0x8f, 0x6b, 0x0b, 0x3e, 0xeb, 0x35, 0x1a, 0xd5, 0x7e, 0xdb, 0x78, 0x00, 0x96, 0x8a, 0xa0, 0xb4, 0xcf, 0x60, 0x4b, 0xd4, 0xd5, 0xf9, 0x2d, 0xbf, 0x88, 0xbd, 0x22, 0x62 } }, + { { 0x13, 0x53, 0xe4, 0x82, 0x57, 0xfa, 0x1e, 0x8f, 0x06, 0x2b, 0x90, 0xba, 0x08, 0xb6, 0x10, 0x54, 0x4f, 0x7c, 0x1b, 0x26, 0xed, 0xda, 0x6b, 0xdd, 0x25, 0xd0, 0x4e, 0xea, 0x42, 0xbb, 0x25, 0x03 } } }, + { { { 0x51, 0x16, 0x50, 0x7c, 0xd5, 0x5d, 0xf6, 0x99, 0xe8, 0x77, 0x72, 0x4e, 0xfa, 0x62, 0xcb, 0x76, 0x75, 0x0c, 0xe2, 0x71, 0x98, 0x92, 0xd5, 0xfa, 0x45, 0xdf, 0x5c, 0x6f, 0x1e, 0x9e, 0x28, 0x69 } }, + { { 0x0d, 0xac, 0x66, 0x6d, 0xc3, 0x8b, 0xba, 0x16, 0xb5, 0xe2, 0xa0, 0x0d, 0x0c, 0xbd, 0xa4, 0x8e, 0x18, 0x6c, 0xf2, 0xdc, 0xf9, 0xdc, 0x4a, 0x86, 0x25, 0x95, 0x14, 0xcb, 0xd8, 0x1a, 0x04, 0x0f } } }, + { { { 0x97, 0xa5, 0xdb, 0x8b, 0x2d, 0xaa, 0x42, 0x11, 0x09, 0xf2, 0x93, 0xbb, 0xd9, 0x06, 0x84, 0x4e, 0x11, 0xa8, 0xa0, 0x25, 0x2b, 0xa6, 0x5f, 0xae, 0xc4, 0xb4, 0x4c, 0xc8, 0xab, 0xc7, 0x3b, 0x02 } }, + { { 0xee, 0xc9, 0x29, 0x0f, 0xdf, 0x11, 0x85, 0xed, 0xce, 0x0d, 0x62, 0x2c, 0x8f, 0x4b, 0xf9, 0x04, 0xe9, 0x06, 0x72, 0x1d, 0x37, 0x20, 0x50, 0xc9, 0x14, 0xeb, 0xec, 0x39, 0xa7, 0x97, 0x2b, 0x4d } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x69, 0xd1, 0x39, 0xbd, 0xfb, 0x33, 0xbe, 0xc4, 0xf0, 0x5c, 0xef, 0xf0, 0x56, 0x68, 0xfc, 0x97, 0x47, 0xc8, 0x72, 0xb6, 0x53, 0xa4, 0x0a, 0x98, 0xa5, 0xb4, 0x37, 0x71, 0xcf, 0x66, 0x50, 0x6d } }, + { { 0x17, 0xa4, 0x19, 0x52, 0x11, 0x47, 0xb3, 0x5c, 0x5b, 0xa9, 0x2e, 0x22, 0xb4, 0x00, 0x52, 0xf9, 0x57, 0x18, 0xb8, 0xbe, 0x5a, 0xe3, 0xab, 0x83, 0xc8, 0x87, 0x0a, 0x2a, 0xd8, 0x8c, 0xbb, 0x54 } } }, + { { { 0xa9, 0x62, 0x93, 0x85, 0xbe, 0xe8, 0x73, 0x4a, 0x0e, 0xb0, 0xb5, 0x2d, 0x94, 0x50, 0xaa, 0xd3, 0xb2, 0xea, 0x9d, 0x62, 0x76, 0x3b, 0x07, 0x34, 0x4e, 0x2d, 0x70, 0xc8, 0x9a, 0x15, 0x66, 0x6b } }, + { { 0xc5, 0x96, 0xca, 0xc8, 0x22, 0x1a, 0xee, 0x5f, 0xe7, 0x31, 0x60, 0x22, 0x83, 0x08, 0x63, 0xce, 0xb9, 0x32, 0x44, 0x58, 0x5d, 0x3a, 0x9b, 0xe4, 0x04, 0xd5, 0xef, 0x38, 0xef, 0x4b, 0xdd, 0x19 } } }, + { { { 0x4d, 0xc2, 0x17, 0x75, 0xa1, 0x68, 0xcd, 0xc3, 0xc6, 0x03, 0x44, 0xe3, 0x78, 0x09, 0x91, 0x47, 0x3f, 0x0f, 0xe4, 0x92, 0x58, 0xfa, 0x7d, 0x1f, 0x20, 0x94, 0x58, 0x5e, 0xbc, 0x19, 0x02, 0x6f } }, + { { 0x20, 0xd6, 0xd8, 0x91, 0x54, 0xa7, 0xf3, 0x20, 0x4b, 0x34, 0x06, 0xfa, 0x30, 0xc8, 0x6f, 0x14, 0x10, 0x65, 0x74, 0x13, 0x4e, 0xf0, 0x69, 0x26, 0xce, 0xcf, 0x90, 0xf4, 0xd0, 0xc5, 0xc8, 0x64 } } }, + { { { 0x26, 0xa2, 0x50, 0x02, 0x24, 0x72, 0xf1, 0xf0, 0x4e, 0x2d, 0x93, 0xd5, 0x08, 0xe7, 0xae, 0x38, 0xf7, 0x18, 0xa5, 0x32, 0x34, 0xc2, 0xf0, 0xa6, 0xec, 0xb9, 0x61, 0x7b, 0x64, 0x99, 0xac, 0x71 } }, + { { 0x25, 0xcf, 0x74, 0x55, 0x1b, 0xaa, 0xa9, 0x38, 0x41, 0x40, 0xd5, 0x95, 0x95, 0xab, 0x1c, 0x5e, 0xbc, 0x41, 0x7e, 0x14, 0x30, 0xbe, 0x13, 0x89, 0xf4, 0xe5, 0xeb, 0x28, 0xc0, 0xc2, 0x96, 0x3a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x2b, 0x77, 0x45, 0xec, 0x67, 0x76, 0x32, 0x4c, 0xb9, 0xdf, 0x25, 0x32, 0x6b, 0xcb, 0xe7, 0x14, 0x61, 0x43, 0xee, 0xba, 0x9b, 0x71, 0xef, 0xd2, 0x48, 0x65, 0xbb, 0x1b, 0x8a, 0x13, 0x1b, 0x22 } }, + { { 0x84, 0xad, 0x0c, 0x18, 0x38, 0x5a, 0xba, 0xd0, 0x98, 0x59, 0xbf, 0x37, 0xb0, 0x4f, 0x97, 0x60, 0x20, 0xb3, 0x9b, 0x97, 0xf6, 0x08, 0x6c, 0xa4, 0xff, 0xfb, 0xb7, 0xfa, 0x95, 0xb2, 0x51, 0x79 } } }, + { { { 0x28, 0x5c, 0x3f, 0xdb, 0x6b, 0x18, 0x3b, 0x5c, 0xd1, 0x04, 0x28, 0xde, 0x85, 0x52, 0x31, 0xb5, 0xbb, 0xf6, 0xa9, 0xed, 0xbe, 0x28, 0x4f, 0xb3, 0x7e, 0x05, 0x6a, 0xdb, 0x95, 0x0d, 0x1b, 0x1c } }, + { { 0xd5, 0xc5, 0xc3, 0x9a, 0x0a, 0xd0, 0x31, 0x3e, 0x07, 0x36, 0x8e, 0xc0, 0x8a, 0x62, 0xb1, 0xca, 0xd6, 0x0e, 0x1e, 0x9d, 0xef, 0xab, 0x98, 0x4d, 0xbb, 0x6c, 0x05, 0xe0, 0xe4, 0x5d, 0xbd, 0x57 } } }, + { { { 0xcc, 0x21, 0x27, 0xce, 0xfd, 0xa9, 0x94, 0x8e, 0xe1, 0xab, 0x49, 0xe0, 0x46, 0x26, 0xa1, 0xa8, 0x8c, 0xa1, 0x99, 0x1d, 0xb4, 0x27, 0x6d, 0x2d, 0xc8, 0x39, 0x30, 0x5e, 0x37, 0x52, 0xc4, 0x6e } }, + { { 0xa9, 0x85, 0xf4, 0xe7, 0xb0, 0x15, 0x33, 0x84, 0x1b, 0x14, 0x1a, 0x02, 0xd9, 0x3b, 0xad, 0x0f, 0x43, 0x6c, 0xea, 0x3e, 0x0f, 0x7e, 0xda, 0xdd, 0x6b, 0x4c, 0x7f, 0x6e, 0xd4, 0x6b, 0xbf, 0x0f } } }, + { { { 0x47, 0x9f, 0x7c, 0x56, 0x7c, 0x43, 0x91, 0x1c, 0xbb, 0x4e, 0x72, 0x3e, 0x64, 0xab, 0xa0, 0xa0, 0xdf, 0xb4, 0xd8, 0x87, 0x3a, 0xbd, 0xa8, 0x48, 0xc9, 0xb8, 0xef, 0x2e, 0xad, 0x6f, 0x84, 0x4f } }, + { { 0x2d, 0x2d, 0xf0, 0x1b, 0x7e, 0x2a, 0x6c, 0xf8, 0xa9, 0x6a, 0xe1, 0xf0, 0x99, 0xa1, 0x67, 0x9a, 0xd4, 0x13, 0xca, 0xca, 0xba, 0x27, 0x92, 0xaa, 0xa1, 0x5d, 0x50, 0xde, 0xcc, 0x40, 0x26, 0x0a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x9f, 0x3e, 0xf2, 0xb2, 0x90, 0xce, 0xdb, 0x64, 0x3e, 0x03, 0xdd, 0x37, 0x36, 0x54, 0x70, 0x76, 0x24, 0xb5, 0x69, 0x03, 0xfc, 0xa0, 0x2b, 0x74, 0xb2, 0x05, 0x0e, 0xcc, 0xd8, 0x1f, 0x6a, 0x1f } }, + { { 0x19, 0x5e, 0x60, 0x69, 0x58, 0x86, 0xa0, 0x31, 0xbd, 0x32, 0xe9, 0x2c, 0x5c, 0xd2, 0x85, 0xba, 0x40, 0x64, 0xa8, 0x74, 0xf8, 0x0e, 0x1c, 0xb3, 0xa9, 0x69, 0xe8, 0x1e, 0x40, 0x64, 0x99, 0x77 } } }, + { { { 0x6c, 0x32, 0x4f, 0xfd, 0xbb, 0x5c, 0xbb, 0x8d, 0x64, 0x66, 0x4a, 0x71, 0x1f, 0x79, 0xa3, 0xad, 0x8d, 0xf9, 0xd4, 0xec, 0xcf, 0x67, 0x70, 0xfa, 0x05, 0x4a, 0x0f, 0x6e, 0xaf, 0x87, 0x0a, 0x6f } }, + { { 0xc6, 0x36, 0x6e, 0x6c, 0x8c, 0x24, 0x09, 0x60, 0xbe, 0x26, 0xd2, 0x4c, 0x5e, 0x17, 0xca, 0x5f, 0x1d, 0xcc, 0x87, 0xe8, 0x42, 0x6a, 0xcb, 0xcb, 0x7d, 0x92, 0x05, 0x35, 0x81, 0x13, 0x60, 0x6b } } }, + { { { 0xf4, 0x15, 0xcd, 0x0f, 0x0a, 0xaf, 0x4e, 0x6b, 0x51, 0xfd, 0x14, 0xc4, 0x2e, 0x13, 0x86, 0x74, 0x44, 0xcb, 0x66, 0x6b, 0xb6, 0x9d, 0x74, 0x56, 0x32, 0xac, 0x8d, 0x8e, 0x8c, 0x8c, 0x8c, 0x39 } }, + { { 0xca, 0x59, 0x74, 0x1a, 0x11, 0xef, 0x6d, 0xf7, 0x39, 0x5c, 0x3b, 0x1f, 0xfa, 0xe3, 0x40, 0x41, 0x23, 0x9e, 0xf6, 0xd1, 0x21, 0xa2, 0xbf, 0xad, 0x65, 0x42, 0x6b, 0x59, 0x8a, 0xe8, 0xc5, 0x7f } } }, + { { { 0x64, 0x05, 0x7a, 0x84, 0x4a, 0x13, 0xc3, 0xf6, 0xb0, 0x6e, 0x9a, 0x6b, 0x53, 0x6b, 0x32, 0xda, 0xd9, 0x74, 0x75, 0xc4, 0xba, 0x64, 0x3d, 0x3b, 0x08, 0xdd, 0x10, 0x46, 0xef, 0xc7, 0x90, 0x1f } }, + { { 0x7b, 0x2f, 0x3a, 0xce, 0xc8, 0xa1, 0x79, 0x3c, 0x30, 0x12, 0x44, 0x28, 0xf6, 0xbc, 0xff, 0xfd, 0xf4, 0xc0, 0x97, 0xb0, 0xcc, 0xc3, 0x13, 0x7a, 0xb9, 0x9a, 0x16, 0xe4, 0xcb, 0x4c, 0x34, 0x63 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x07, 0x4e, 0xd3, 0x2d, 0x09, 0x33, 0x0e, 0xd2, 0x0d, 0xbe, 0x3e, 0xe7, 0xe4, 0xaa, 0xb7, 0x00, 0x8b, 0xe8, 0xad, 0xaa, 0x7a, 0x8d, 0x34, 0x28, 0xa9, 0x81, 0x94, 0xc5, 0xe7, 0x42, 0xac, 0x47 } }, + { { 0x24, 0x89, 0x7a, 0x8f, 0xb5, 0x9b, 0xf0, 0xc2, 0x03, 0x64, 0xd0, 0x1e, 0xf5, 0xa4, 0xb2, 0xf3, 0x74, 0xe9, 0x1a, 0x16, 0xfd, 0xcb, 0x15, 0xea, 0xeb, 0x10, 0x6c, 0x35, 0xd1, 0xc1, 0xa6, 0x28 } } }, + { { { 0xcc, 0xd5, 0x39, 0xfc, 0xa5, 0xa4, 0xad, 0x32, 0x15, 0xce, 0x19, 0xe8, 0x34, 0x2b, 0x1c, 0x60, 0x91, 0xfc, 0x05, 0xa9, 0xb3, 0xdc, 0x80, 0x29, 0xc4, 0x20, 0x79, 0x06, 0x39, 0xc0, 0xe2, 0x22 } }, + { { 0xbb, 0xa8, 0xe1, 0x89, 0x70, 0x57, 0x18, 0x54, 0x3c, 0xf6, 0x0d, 0x82, 0x12, 0x05, 0x87, 0x96, 0x06, 0x39, 0xe3, 0xf8, 0xb3, 0x95, 0xe5, 0xd7, 0x26, 0xbf, 0x09, 0x5a, 0x94, 0xf9, 0x1c, 0x63 } } }, + { { { 0x2b, 0x8c, 0x2d, 0x9a, 0x8b, 0x84, 0xf2, 0x56, 0xfb, 0xad, 0x2e, 0x7f, 0xb7, 0xfc, 0x30, 0xe1, 0x35, 0x89, 0xba, 0x4d, 0xa8, 0x6d, 0xce, 0x8c, 0x8b, 0x30, 0xe0, 0xda, 0x29, 0x18, 0x11, 0x17 } }, + { { 0x19, 0xa6, 0x5a, 0x65, 0x93, 0xc3, 0xb5, 0x31, 0x22, 0x4f, 0xf3, 0xf6, 0x0f, 0xeb, 0x28, 0xc3, 0x7c, 0xeb, 0xce, 0x86, 0xec, 0x67, 0x76, 0x6e, 0x35, 0x45, 0x7b, 0xd8, 0x6b, 0x92, 0x01, 0x65 } } }, + { { { 0x3d, 0xd5, 0x9a, 0x64, 0x73, 0x36, 0xb1, 0xd6, 0x86, 0x98, 0x42, 0x3f, 0x8a, 0xf1, 0xc7, 0xf5, 0x42, 0xa8, 0x9c, 0x52, 0xa8, 0xdc, 0xf9, 0x24, 0x3f, 0x4a, 0xa1, 0xa4, 0x5b, 0xe8, 0x62, 0x1a } }, + { { 0xc5, 0xbd, 0xc8, 0x14, 0xd5, 0x0d, 0xeb, 0xe1, 0xa5, 0xe6, 0x83, 0x11, 0x09, 0x00, 0x1d, 0x55, 0x83, 0x51, 0x7e, 0x75, 0x00, 0x81, 0xb9, 0xcb, 0xd8, 0xc5, 0xe5, 0xa1, 0xd9, 0x17, 0x6d, 0x1f } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xea, 0xf9, 0xe4, 0xe9, 0xe1, 0x52, 0x3f, 0x51, 0x19, 0x0d, 0xdd, 0xd9, 0x9d, 0x93, 0x31, 0x87, 0x23, 0x09, 0xd5, 0x83, 0xeb, 0x92, 0x09, 0x76, 0x6e, 0xe3, 0xf8, 0xc0, 0xa2, 0x66, 0xb5, 0x36 } }, + { { 0x3a, 0xbb, 0x39, 0xed, 0x32, 0x02, 0xe7, 0x43, 0x7a, 0x38, 0x14, 0x84, 0xe3, 0x44, 0xd2, 0x5e, 0x94, 0xdd, 0x78, 0x89, 0x55, 0x4c, 0x73, 0x9e, 0xe1, 0xe4, 0x3e, 0x43, 0xd0, 0x4a, 0xde, 0x1b } } }, + { { { 0xb2, 0xe7, 0x8f, 0xe3, 0xa3, 0xc5, 0xcb, 0x72, 0xee, 0x79, 0x41, 0xf8, 0xdf, 0xee, 0x65, 0xc5, 0x45, 0x77, 0x27, 0x3c, 0xbd, 0x58, 0xd3, 0x75, 0xe2, 0x04, 0x4b, 0xbb, 0x65, 0xf3, 0xc8, 0x0f } }, + { { 0x24, 0x7b, 0x93, 0x34, 0xb5, 0xe2, 0x74, 0x48, 0xcd, 0xa0, 0x0b, 0x92, 0x97, 0x66, 0x39, 0xf4, 0xb0, 0xe2, 0x5d, 0x39, 0x6a, 0x5b, 0x45, 0x17, 0x78, 0x1e, 0xdb, 0x91, 0x81, 0x1c, 0xf9, 0x16 } } }, + { { { 0x16, 0xdf, 0xd1, 0x5a, 0xd5, 0xe9, 0x4e, 0x58, 0x95, 0x93, 0x5f, 0x51, 0x09, 0xc3, 0x2a, 0xc9, 0xd4, 0x55, 0x48, 0x79, 0xa4, 0xa3, 0xb2, 0xc3, 0x62, 0xaa, 0x8c, 0xe8, 0xad, 0x47, 0x39, 0x1b } }, + { { 0x46, 0xda, 0x9e, 0x51, 0x3a, 0xe6, 0xd1, 0xa6, 0xbb, 0x4d, 0x7b, 0x08, 0xbe, 0x8c, 0xd5, 0xf3, 0x3f, 0xfd, 0xf7, 0x44, 0x80, 0x2d, 0x53, 0x4b, 0xd0, 0x87, 0x68, 0xc1, 0xb5, 0xd8, 0xf7, 0x07 } } }, + { { { 0xf4, 0x10, 0x46, 0xbe, 0xb7, 0xd2, 0xd1, 0xce, 0x5e, 0x76, 0xa2, 0xd7, 0x03, 0xdc, 0xe4, 0x81, 0x5a, 0xf6, 0x3c, 0xde, 0xae, 0x7a, 0x9d, 0x21, 0x34, 0xa5, 0xf6, 0xa9, 0x73, 0xe2, 0x8d, 0x60 } }, + { { 0xfa, 0x44, 0x71, 0xf6, 0x41, 0xd8, 0xc6, 0x58, 0x13, 0x37, 0xeb, 0x84, 0x0f, 0x96, 0xc7, 0xdc, 0xc8, 0xa9, 0x7a, 0x83, 0xb2, 0x2f, 0x31, 0xb1, 0x1a, 0xd8, 0x98, 0x3f, 0x11, 0xd0, 0x31, 0x3b } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x81, 0xd5, 0x34, 0x16, 0x01, 0xa3, 0x93, 0xea, 0x52, 0x94, 0xec, 0x93, 0xb7, 0x81, 0x11, 0x2d, 0x58, 0xf9, 0xb5, 0x0a, 0xaa, 0x4f, 0xf6, 0x2e, 0x3f, 0x36, 0xbf, 0x33, 0x5a, 0xe7, 0xd1, 0x08 } }, + { { 0x1a, 0xcf, 0x42, 0xae, 0xcc, 0xb5, 0x77, 0x39, 0xc4, 0x5b, 0x5b, 0xd0, 0x26, 0x59, 0x27, 0xd0, 0x55, 0x71, 0x12, 0x9d, 0x88, 0x3d, 0x9c, 0xea, 0x41, 0x6a, 0xf0, 0x50, 0x93, 0x93, 0xdd, 0x47 } } }, + { { { 0x6f, 0xc9, 0x51, 0x6d, 0x1c, 0xaa, 0xf5, 0xa5, 0x90, 0x3f, 0x14, 0xe2, 0x6e, 0x8e, 0x64, 0xfd, 0xac, 0xe0, 0x4e, 0x22, 0xe5, 0xc1, 0xbc, 0x29, 0x0a, 0x6a, 0x9e, 0xa1, 0x60, 0xcb, 0x2f, 0x0b } }, + { { 0xdc, 0x39, 0x32, 0xf3, 0xa1, 0x44, 0xe9, 0xc5, 0xc3, 0x78, 0xfb, 0x95, 0x47, 0x34, 0x35, 0x34, 0xe8, 0x25, 0xde, 0x93, 0xc6, 0xb4, 0x76, 0x6d, 0x86, 0x13, 0xc6, 0xe9, 0x68, 0xb5, 0x01, 0x63 } } }, + { { { 0x1f, 0x9a, 0x52, 0x64, 0x97, 0xd9, 0x1c, 0x08, 0x51, 0x6f, 0x26, 0x9d, 0xaa, 0x93, 0x33, 0x43, 0xfa, 0x77, 0xe9, 0x62, 0x9b, 0x5d, 0x18, 0x75, 0xeb, 0x78, 0xf7, 0x87, 0x8f, 0x41, 0xb4, 0x4d } }, + { { 0x13, 0xa8, 0x82, 0x3e, 0xe9, 0x13, 0xad, 0xeb, 0x01, 0xca, 0xcf, 0xda, 0xcd, 0xf7, 0x6c, 0xc7, 0x7a, 0xdc, 0x1e, 0x6e, 0xc8, 0x4e, 0x55, 0x62, 0x80, 0xea, 0x78, 0x0c, 0x86, 0xb9, 0x40, 0x51 } } }, + { { { 0x27, 0xae, 0xd3, 0x0d, 0x4c, 0x8f, 0x34, 0xea, 0x7d, 0x3c, 0xe5, 0x8a, 0xcf, 0x5b, 0x92, 0xd8, 0x30, 0x16, 0xb4, 0xa3, 0x75, 0xff, 0xeb, 0x27, 0xc8, 0x5c, 0x6c, 0xc2, 0xee, 0x6c, 0x21, 0x0b } }, + { { 0xc3, 0xba, 0x12, 0x53, 0x2a, 0xaa, 0x77, 0xad, 0x19, 0x78, 0x55, 0x8a, 0x2e, 0x60, 0x87, 0xc2, 0x6e, 0x91, 0x38, 0x91, 0x3f, 0x7a, 0xc5, 0x24, 0x8f, 0x51, 0xc5, 0xde, 0xb0, 0x53, 0x30, 0x56 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x02, 0xfe, 0x54, 0x12, 0x18, 0xca, 0x7d, 0xa5, 0x68, 0x43, 0xa3, 0x6d, 0x14, 0x2a, 0x6a, 0xa5, 0x8e, 0x32, 0xe7, 0x63, 0x4f, 0xe3, 0xc6, 0x44, 0x3e, 0xab, 0x63, 0xca, 0x17, 0x86, 0x74, 0x3f } }, + { { 0x1e, 0x64, 0xc1, 0x7d, 0x52, 0xdc, 0x13, 0x5a, 0xa1, 0x9c, 0x4e, 0xee, 0x99, 0x28, 0xbb, 0x4c, 0xee, 0xac, 0xa9, 0x1b, 0x89, 0xa2, 0x38, 0x39, 0x7b, 0xc4, 0x0f, 0x42, 0xe6, 0x89, 0xed, 0x0f } } }, + { { { 0xf3, 0x3c, 0x8c, 0x80, 0x83, 0x10, 0x8a, 0x37, 0x50, 0x9c, 0xb4, 0xdf, 0x3f, 0x8c, 0xf7, 0x23, 0x07, 0xd6, 0xff, 0xa0, 0x82, 0x6c, 0x75, 0x3b, 0xe4, 0xb5, 0xbb, 0xe4, 0xe6, 0x50, 0xf0, 0x08 } }, + { { 0x62, 0xee, 0x75, 0x48, 0x92, 0x33, 0xf2, 0xf4, 0xad, 0x15, 0x7a, 0xa1, 0x01, 0x46, 0xa9, 0x32, 0x06, 0x88, 0xb6, 0x36, 0x47, 0x35, 0xb9, 0xb4, 0x42, 0x85, 0x76, 0xf0, 0x48, 0x00, 0x90, 0x38 } } }, + { { { 0x51, 0x15, 0x9d, 0xc3, 0x95, 0xd1, 0x39, 0xbb, 0x64, 0x9d, 0x15, 0x81, 0xc1, 0x68, 0xd0, 0xb6, 0xa4, 0x2c, 0x7d, 0x5e, 0x02, 0x39, 0x00, 0xe0, 0x3b, 0xa4, 0xcc, 0xca, 0x1d, 0x81, 0x24, 0x10 } }, + { { 0xe7, 0x29, 0xf9, 0x37, 0xd9, 0x46, 0x5a, 0xcd, 0x70, 0xfe, 0x4d, 0x5b, 0xbf, 0xa5, 0xcf, 0x91, 0xf4, 0xef, 0xee, 0x8a, 0x29, 0xd0, 0xe7, 0xc4, 0x25, 0x92, 0x8a, 0xff, 0x36, 0xfc, 0xe4, 0x49 } } }, + { { { 0xbd, 0x00, 0xb9, 0x04, 0x7d, 0x35, 0xfc, 0xeb, 0xd0, 0x0b, 0x05, 0x32, 0x52, 0x7a, 0x89, 0x24, 0x75, 0x50, 0xe1, 0x63, 0x02, 0x82, 0x8e, 0xe7, 0x85, 0x0c, 0xf2, 0x56, 0x44, 0x37, 0x83, 0x25 } }, + { { 0x8f, 0xa1, 0xce, 0xcb, 0x60, 0xda, 0x12, 0x02, 0x1e, 0x29, 0x39, 0x2a, 0x03, 0xb7, 0xeb, 0x77, 0x40, 0xea, 0xc9, 0x2b, 0x2c, 0xd5, 0x7d, 0x7e, 0x2c, 0xc7, 0x5a, 0xfd, 0xff, 0xc4, 0xd1, 0x62 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x1d, 0x88, 0x98, 0x5b, 0x4e, 0xfc, 0x41, 0x24, 0x05, 0xe6, 0x50, 0x2b, 0xae, 0x96, 0x51, 0xd9, 0x6b, 0x72, 0xb2, 0x33, 0x42, 0x98, 0x68, 0xbb, 0x10, 0x5a, 0x7a, 0x8c, 0x9d, 0x07, 0xb4, 0x05 } }, + { { 0x2f, 0x61, 0x9f, 0xd7, 0xa8, 0x3f, 0x83, 0x8c, 0x10, 0x69, 0x90, 0xe6, 0xcf, 0xd2, 0x63, 0xa3, 0xe4, 0x54, 0x7e, 0xe5, 0x69, 0x13, 0x1c, 0x90, 0x57, 0xaa, 0xe9, 0x53, 0x22, 0x43, 0x29, 0x23 } } }, + { { { 0xe5, 0x1c, 0xf8, 0x0a, 0xfd, 0x2d, 0x7e, 0xf5, 0xf5, 0x70, 0x7d, 0x41, 0x6b, 0x11, 0xfe, 0xbe, 0x99, 0xd1, 0x55, 0x29, 0x31, 0xbf, 0xc0, 0x97, 0x6c, 0xd5, 0x35, 0xcc, 0x5e, 0x8b, 0xd9, 0x69 } }, + { { 0x8e, 0x4e, 0x9f, 0x25, 0xf8, 0x81, 0x54, 0x2d, 0x0e, 0xd5, 0x54, 0x81, 0x9b, 0xa6, 0x92, 0xce, 0x4b, 0xe9, 0x8f, 0x24, 0x3b, 0xca, 0xe0, 0x44, 0xab, 0x36, 0xfe, 0xfb, 0x87, 0xd4, 0x26, 0x3e } } }, + { { { 0x0f, 0x93, 0x9c, 0x11, 0xe7, 0xdb, 0xf1, 0xf0, 0x85, 0x43, 0x28, 0x15, 0x37, 0xdd, 0xde, 0x27, 0xdf, 0xad, 0x3e, 0x49, 0x4f, 0xe0, 0x5b, 0xf6, 0x80, 0x59, 0x15, 0x3c, 0x85, 0xb7, 0x3e, 0x12 } }, + { { 0xf5, 0xff, 0xcc, 0xf0, 0xb4, 0x12, 0x03, 0x5f, 0xc9, 0x84, 0xcb, 0x1d, 0x17, 0xe0, 0xbc, 0xcc, 0x03, 0x62, 0xa9, 0x8b, 0x94, 0xa6, 0xaa, 0x18, 0xcb, 0x27, 0x8d, 0x49, 0xa6, 0x17, 0x15, 0x07 } } }, + { { { 0xd9, 0xb6, 0xd4, 0x9d, 0xd4, 0x6a, 0xaf, 0x70, 0x07, 0x2c, 0x10, 0x9e, 0xbd, 0x11, 0xad, 0xe4, 0x26, 0x33, 0x70, 0x92, 0x78, 0x1c, 0x74, 0x9f, 0x75, 0x60, 0x56, 0xf4, 0x39, 0xa8, 0xa8, 0x62 } }, + { { 0x3b, 0xbf, 0x55, 0x35, 0x61, 0x8b, 0x44, 0x97, 0xe8, 0x3a, 0x55, 0xc1, 0xc8, 0x3b, 0xfd, 0x95, 0x29, 0x11, 0x60, 0x96, 0x1e, 0xcb, 0x11, 0x9d, 0xc2, 0x03, 0x8a, 0x1b, 0xc6, 0xd6, 0x45, 0x3d } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x7e, 0x0e, 0x50, 0xb2, 0xcc, 0x0d, 0x6b, 0xa6, 0x71, 0x5b, 0x42, 0xed, 0xbd, 0xaf, 0xac, 0xf0, 0xfc, 0x12, 0xa2, 0x3f, 0x4e, 0xda, 0xe8, 0x11, 0xf3, 0x23, 0xe1, 0x04, 0x62, 0x03, 0x1c, 0x4e } }, + { { 0xc8, 0xb1, 0x1b, 0x6f, 0x73, 0x61, 0x3d, 0x27, 0x0d, 0x7d, 0x7a, 0x25, 0x5f, 0x73, 0x0e, 0x2f, 0x93, 0xf6, 0x24, 0xd8, 0x4f, 0x90, 0xac, 0xa2, 0x62, 0x0a, 0xf0, 0x61, 0xd9, 0x08, 0x59, 0x6a } } }, + { { { 0x6f, 0x2d, 0x55, 0xf8, 0x2f, 0x8e, 0xf0, 0x18, 0x3b, 0xea, 0xdd, 0x26, 0x72, 0xd1, 0xf5, 0xfe, 0xe5, 0xb8, 0xe6, 0xd3, 0x10, 0x48, 0x46, 0x49, 0x3a, 0x9f, 0x5e, 0x45, 0x6b, 0x90, 0xe8, 0x7f } }, + { { 0xd3, 0x76, 0x69, 0x33, 0x7b, 0xb9, 0x40, 0x70, 0xee, 0xa6, 0x29, 0x6b, 0xdd, 0xd0, 0x5d, 0x8d, 0xc1, 0x3e, 0x4a, 0xea, 0x37, 0xb1, 0x03, 0x02, 0x03, 0x35, 0xf1, 0x28, 0x9d, 0xff, 0x00, 0x13 } } }, + { { { 0x7a, 0xdb, 0x12, 0xd2, 0x8a, 0x82, 0x03, 0x1b, 0x1e, 0xaf, 0xf9, 0x4b, 0x9c, 0xbe, 0xae, 0x7c, 0xe4, 0x94, 0x2a, 0x23, 0xb3, 0x62, 0x86, 0xe7, 0xfd, 0x23, 0xaa, 0x99, 0xbd, 0x2b, 0x11, 0x6c } }, + { { 0x8d, 0xa6, 0xd5, 0xac, 0x9d, 0xcc, 0x68, 0x75, 0x7f, 0xc3, 0x4d, 0x4b, 0xdd, 0x6c, 0xbb, 0x11, 0x5a, 0x60, 0xe5, 0xbd, 0x7d, 0x27, 0x8b, 0xda, 0xb4, 0x95, 0xf6, 0x03, 0x27, 0xa4, 0x92, 0x3f } } }, + { { { 0x22, 0xd6, 0xb5, 0x17, 0x84, 0xbf, 0x12, 0xcc, 0x23, 0x14, 0x4a, 0xdf, 0x14, 0x31, 0xbc, 0xa1, 0xac, 0x6e, 0xab, 0xfa, 0x57, 0x11, 0x53, 0xb3, 0x27, 0xe6, 0xf9, 0x47, 0x33, 0x44, 0x34, 0x1e } }, + { { 0x79, 0xfc, 0xa6, 0xb4, 0x0b, 0x35, 0x20, 0xc9, 0x4d, 0x22, 0x84, 0xc4, 0xa9, 0x20, 0xec, 0x89, 0x94, 0xba, 0x66, 0x56, 0x48, 0xb9, 0x87, 0x7f, 0xca, 0x1e, 0x06, 0xed, 0xa5, 0x55, 0x59, 0x29 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x56, 0xe1, 0xf5, 0xf1, 0xd5, 0xab, 0xa8, 0x2b, 0xae, 0x89, 0xf3, 0xcf, 0x56, 0x9f, 0xf2, 0x4b, 0x31, 0xbc, 0x18, 0xa9, 0x06, 0x5b, 0xbe, 0xb4, 0x61, 0xf8, 0xb2, 0x06, 0x9c, 0x81, 0xab, 0x4c } }, + { { 0x1f, 0x68, 0x76, 0x01, 0x16, 0x38, 0x2b, 0x0f, 0x77, 0x97, 0x92, 0x67, 0x4e, 0x86, 0x6a, 0x8b, 0xe5, 0xe8, 0x0c, 0xf7, 0x36, 0x39, 0xb5, 0x33, 0xe6, 0xcf, 0x5e, 0xbd, 0x18, 0xfb, 0x10, 0x1f } } }, + { { { 0x83, 0xf0, 0x0d, 0x63, 0xef, 0x53, 0x6b, 0xb5, 0x6b, 0xf9, 0x83, 0xcf, 0xde, 0x04, 0x22, 0x9b, 0x2c, 0x0a, 0xe0, 0xa5, 0xd8, 0xc7, 0x9c, 0xa5, 0xa3, 0xf6, 0x6f, 0xcf, 0x90, 0x6b, 0x68, 0x7c } }, + { { 0x33, 0x15, 0xd7, 0x7f, 0x1a, 0xd5, 0x21, 0x58, 0xc4, 0x18, 0xa5, 0xf0, 0xcc, 0x73, 0xa8, 0xfd, 0xfa, 0x18, 0xd1, 0x03, 0x91, 0x8d, 0x52, 0xd2, 0xa3, 0xa4, 0xd3, 0xb1, 0xea, 0x1d, 0x0f, 0x00 } } }, + { { { 0xcc, 0x48, 0x83, 0x90, 0xe5, 0xfd, 0x3f, 0x84, 0xaa, 0xf9, 0x8b, 0x82, 0x59, 0x24, 0x34, 0x68, 0x4f, 0x1c, 0x23, 0xd9, 0xcc, 0x71, 0xe1, 0x7f, 0x8c, 0xaf, 0xf1, 0xee, 0x00, 0xb6, 0xa0, 0x77 } }, + { { 0xf5, 0x1a, 0x61, 0xf7, 0x37, 0x9d, 0x00, 0xf4, 0xf2, 0x69, 0x6f, 0x4b, 0x01, 0x85, 0x19, 0x45, 0x4d, 0x7f, 0x02, 0x7c, 0x6a, 0x05, 0x47, 0x6c, 0x1f, 0x81, 0x20, 0xd4, 0xe8, 0x50, 0x27, 0x72 } } }, + { { { 0x2c, 0x3a, 0xe5, 0xad, 0xf4, 0xdd, 0x2d, 0xf7, 0x5c, 0x44, 0xb5, 0x5b, 0x21, 0xa3, 0x89, 0x5f, 0x96, 0x45, 0xca, 0x4d, 0xa4, 0x21, 0x99, 0x70, 0xda, 0xc4, 0xc4, 0xa0, 0xe5, 0xf4, 0xec, 0x0a } }, + { { 0x07, 0x68, 0x21, 0x65, 0xe9, 0x08, 0xa0, 0x0b, 0x6a, 0x4a, 0xba, 0xb5, 0x80, 0xaf, 0xd0, 0x1b, 0xc5, 0xf5, 0x4b, 0x73, 0x50, 0x60, 0x2d, 0x71, 0x69, 0x61, 0x0e, 0xc0, 0x20, 0x40, 0x30, 0x19 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xd0, 0x75, 0x57, 0x3b, 0xeb, 0x5c, 0x14, 0x56, 0x50, 0xc9, 0x4f, 0xb8, 0xb8, 0x1e, 0xa3, 0xf4, 0xab, 0xf5, 0xa9, 0x20, 0x15, 0x94, 0x82, 0xda, 0x96, 0x1c, 0x9b, 0x59, 0x8c, 0xff, 0xf4, 0x51 } }, + { { 0xc1, 0x3a, 0x86, 0xd7, 0xb0, 0x06, 0x84, 0x7f, 0x1b, 0xbd, 0xd4, 0x07, 0x78, 0x80, 0x2e, 0xb1, 0xb4, 0xee, 0x52, 0x38, 0xee, 0x9a, 0xf9, 0xf6, 0xf3, 0x41, 0x6e, 0xd4, 0x88, 0x95, 0xac, 0x35 } } }, + { { { 0x41, 0x97, 0xbf, 0x71, 0x6a, 0x9b, 0x72, 0xec, 0xf3, 0xf8, 0x6b, 0xe6, 0x0e, 0x6c, 0x69, 0xa5, 0x2f, 0x68, 0x52, 0xd8, 0x61, 0x81, 0xc0, 0x63, 0x3f, 0xa6, 0x3c, 0x13, 0x90, 0xe6, 0x8d, 0x56 } }, + { { 0xe8, 0x39, 0x30, 0x77, 0x23, 0xb1, 0xfd, 0x1b, 0x3d, 0x3e, 0x74, 0x4d, 0x7f, 0xae, 0x5b, 0x3a, 0xb4, 0x65, 0x0e, 0x3a, 0x43, 0xdc, 0xdc, 0x41, 0x47, 0xe6, 0xe8, 0x92, 0x09, 0x22, 0x48, 0x4c } } }, + { { { 0x85, 0x57, 0x9f, 0xb5, 0xc8, 0x06, 0xb2, 0x9f, 0x47, 0x3f, 0xf0, 0xfa, 0xe6, 0xa9, 0xb1, 0x9b, 0x6f, 0x96, 0x7d, 0xf9, 0xa4, 0x65, 0x09, 0x75, 0x32, 0xa6, 0x6c, 0x7f, 0x47, 0x4b, 0x2f, 0x4f } }, + { { 0x34, 0xe9, 0x59, 0x93, 0x9d, 0x26, 0x80, 0x54, 0xf2, 0xcc, 0x3c, 0xc2, 0x25, 0x85, 0xe3, 0x6a, 0xc1, 0x62, 0x04, 0xa7, 0x08, 0x32, 0x6d, 0xa1, 0x39, 0x84, 0x8a, 0x3b, 0x87, 0x5f, 0x11, 0x13 } } }, + { { { 0xda, 0x03, 0x34, 0x66, 0xc4, 0x0c, 0x73, 0x6e, 0xbc, 0x24, 0xb5, 0xf9, 0x70, 0x81, 0x52, 0xe9, 0xf4, 0x7c, 0x23, 0xdd, 0x9f, 0xb8, 0x46, 0xef, 0x1d, 0x22, 0x55, 0x7d, 0x71, 0xc4, 0x42, 0x33 } }, + { { 0xc5, 0x37, 0x69, 0x5b, 0xa8, 0xc6, 0x9d, 0xa4, 0xfc, 0x61, 0x6e, 0x68, 0x46, 0xea, 0xd7, 0x1c, 0x67, 0xd2, 0x7d, 0xfa, 0xf1, 0xcc, 0x54, 0x8d, 0x36, 0x35, 0xc9, 0x00, 0xdf, 0x6c, 0x67, 0x50 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x9a, 0x4d, 0x42, 0x29, 0x5d, 0xa4, 0x6b, 0x6f, 0xa8, 0x8a, 0x4d, 0x91, 0x7b, 0xd2, 0xdf, 0x36, 0xef, 0x01, 0x22, 0xc5, 0xcc, 0x8d, 0xeb, 0x58, 0x3d, 0xb3, 0x50, 0xfc, 0x8b, 0x97, 0x96, 0x33 } }, + { { 0x93, 0x33, 0x07, 0xc8, 0x4a, 0xca, 0xd0, 0xb1, 0xab, 0xbd, 0xdd, 0xa7, 0x7c, 0xac, 0x3e, 0x45, 0xcb, 0xcc, 0x07, 0x91, 0xbf, 0x35, 0x9d, 0xcb, 0x7d, 0x12, 0x3c, 0x11, 0x59, 0x13, 0xcf, 0x5c } } }, + { { { 0x45, 0xb8, 0x41, 0xd7, 0xab, 0x07, 0x15, 0x00, 0x8e, 0xce, 0xdf, 0xb2, 0x43, 0x5c, 0x01, 0xdc, 0xf4, 0x01, 0x51, 0x95, 0x10, 0x5a, 0xf6, 0x24, 0x24, 0xa0, 0x19, 0x3a, 0x09, 0x2a, 0xaa, 0x3f } }, + { { 0xdc, 0x8e, 0xeb, 0xc6, 0xbf, 0xdd, 0x11, 0x7b, 0xe7, 0x47, 0xe6, 0xce, 0xe7, 0xb6, 0xc5, 0xe8, 0x8a, 0xdc, 0x4b, 0x57, 0x15, 0x3b, 0x66, 0xca, 0x89, 0xa3, 0xfd, 0xac, 0x0d, 0xe1, 0x1d, 0x7a } } }, + { { { 0x89, 0xef, 0xbf, 0x03, 0x75, 0xd0, 0x29, 0x50, 0xcb, 0x7d, 0xd6, 0xbe, 0xad, 0x5f, 0x7b, 0x00, 0x32, 0xaa, 0x98, 0xed, 0x3f, 0x8f, 0x92, 0xcb, 0x81, 0x56, 0x01, 0x63, 0x64, 0xa3, 0x38, 0x39 } }, + { { 0x8b, 0xa4, 0xd6, 0x50, 0xb4, 0xaa, 0x5d, 0x64, 0x64, 0x76, 0x2e, 0xa1, 0xa6, 0xb3, 0xb8, 0x7c, 0x7a, 0x56, 0xf5, 0x5c, 0x4e, 0x84, 0x5c, 0xfb, 0xdd, 0xca, 0x48, 0x8b, 0x48, 0xb9, 0xba, 0x34 } } }, + { { { 0xc5, 0xe3, 0xe8, 0xae, 0x17, 0x27, 0xe3, 0x64, 0x60, 0x71, 0x47, 0x29, 0x02, 0x0f, 0x92, 0x5d, 0x10, 0x93, 0xc8, 0x0e, 0xa1, 0xed, 0xba, 0xa9, 0x96, 0x1c, 0xc5, 0x76, 0x30, 0xcd, 0xf9, 0x30 } }, + { { 0x95, 0xb0, 0xbd, 0x8c, 0xbc, 0xa7, 0x4f, 0x7e, 0xfd, 0x4e, 0x3a, 0xbf, 0x5f, 0x04, 0x79, 0x80, 0x2b, 0x5a, 0x9f, 0x4f, 0x68, 0x21, 0x19, 0x71, 0xc6, 0x20, 0x01, 0x42, 0xaa, 0xdf, 0xae, 0x2c } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x90, 0x6e, 0x7e, 0x4b, 0x71, 0x93, 0xc0, 0x72, 0xed, 0xeb, 0x71, 0x24, 0x97, 0x26, 0x9c, 0xfe, 0xcb, 0x3e, 0x59, 0x19, 0xa8, 0x0f, 0x75, 0x7d, 0xbe, 0x18, 0xe6, 0x96, 0x1e, 0x95, 0x70, 0x60 } }, + { { 0x89, 0x66, 0x3e, 0x1d, 0x4c, 0x5f, 0xfe, 0xc0, 0x04, 0x43, 0xd6, 0x44, 0x19, 0xb5, 0xad, 0xc7, 0x22, 0xdc, 0x71, 0x28, 0x64, 0xde, 0x41, 0x38, 0x27, 0x8f, 0x2c, 0x6b, 0x08, 0xb8, 0xb8, 0x7b } } }, + { { { 0x3d, 0x70, 0x27, 0x9d, 0xd9, 0xaf, 0xb1, 0x27, 0xaf, 0xe3, 0x5d, 0x1e, 0x3a, 0x30, 0x54, 0x61, 0x60, 0xe8, 0xc3, 0x26, 0x3a, 0xbc, 0x7e, 0xf5, 0x81, 0xdd, 0x64, 0x01, 0x04, 0xeb, 0xc0, 0x1e } }, + { { 0xda, 0x2c, 0xa4, 0xd1, 0xa1, 0xc3, 0x5c, 0x6e, 0x32, 0x07, 0x1f, 0xb8, 0x0e, 0x19, 0x9e, 0x99, 0x29, 0x33, 0x9a, 0xae, 0x7a, 0xed, 0x68, 0x42, 0x69, 0x7c, 0x07, 0xb3, 0x38, 0x2c, 0xf6, 0x3d } } }, + { { { 0x64, 0xaa, 0xb5, 0x88, 0x79, 0x65, 0x38, 0x8c, 0x94, 0xd6, 0x62, 0x37, 0x7d, 0x64, 0xcd, 0x3a, 0xeb, 0xff, 0xe8, 0x81, 0x09, 0xc7, 0x6a, 0x50, 0x09, 0x0d, 0x28, 0x03, 0x0d, 0x9a, 0x93, 0x0a } }, + { { 0x42, 0xa3, 0xf1, 0xc5, 0xb4, 0x0f, 0xd8, 0xc8, 0x8d, 0x15, 0x31, 0xbd, 0xf8, 0x07, 0x8b, 0xcd, 0x08, 0x8a, 0xfb, 0x18, 0x07, 0xfe, 0x8e, 0x52, 0x86, 0xef, 0xbe, 0xec, 0x49, 0x52, 0x99, 0x08 } } }, + { { { 0x0f, 0xa9, 0xd5, 0x01, 0xaa, 0x48, 0x4f, 0x28, 0x66, 0x32, 0x1a, 0xba, 0x7c, 0xea, 0x11, 0x80, 0x17, 0x18, 0x9b, 0x56, 0x88, 0x25, 0x06, 0x69, 0x12, 0x2c, 0xea, 0x56, 0x69, 0x41, 0x24, 0x19 } }, + { { 0xde, 0x21, 0xf0, 0xda, 0x8a, 0xfb, 0xb1, 0xb8, 0xcd, 0xc8, 0x6a, 0x82, 0x19, 0x73, 0xdb, 0xc7, 0xcf, 0x88, 0xeb, 0x96, 0xee, 0x6f, 0xfb, 0x06, 0xd2, 0xcd, 0x7d, 0x7b, 0x12, 0x28, 0x8e, 0x0c } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x93, 0x44, 0x97, 0xce, 0x28, 0xff, 0x3a, 0x40, 0xc4, 0xf5, 0xf6, 0x9b, 0xf4, 0x6b, 0x07, 0x84, 0xfb, 0x98, 0xd8, 0xec, 0x8c, 0x03, 0x57, 0xec, 0x49, 0xed, 0x63, 0xb6, 0xaa, 0xff, 0x98, 0x28 } }, + { { 0x3d, 0x16, 0x35, 0xf3, 0x46, 0xbc, 0xb3, 0xf4, 0xc6, 0xb6, 0x4f, 0xfa, 0xf4, 0xa0, 0x13, 0xe6, 0x57, 0x45, 0x93, 0xb9, 0xbc, 0xd6, 0x59, 0xe7, 0x77, 0x94, 0x6c, 0xab, 0x96, 0x3b, 0x4f, 0x09 } } }, + { { { 0x5a, 0xf7, 0x6b, 0x01, 0x12, 0x4f, 0x51, 0xc1, 0x70, 0x84, 0x94, 0x47, 0xb2, 0x01, 0x6c, 0x71, 0xd7, 0xcc, 0x17, 0x66, 0x0f, 0x59, 0x5d, 0x5d, 0x10, 0x01, 0x57, 0x11, 0xf5, 0xdd, 0xe2, 0x34 } }, + { { 0x26, 0xd9, 0x1f, 0x5c, 0x58, 0xac, 0x8b, 0x03, 0xd2, 0xc3, 0x85, 0x0f, 0x3a, 0xc3, 0x7f, 0x6d, 0x8e, 0x86, 0xcd, 0x52, 0x74, 0x8f, 0x55, 0x77, 0x17, 0xb7, 0x8e, 0xb7, 0x88, 0xea, 0xda, 0x1b } } }, + { { { 0xb6, 0xea, 0x0e, 0x40, 0x93, 0x20, 0x79, 0x35, 0x6a, 0x61, 0x84, 0x5a, 0x07, 0x6d, 0xf9, 0x77, 0x6f, 0xed, 0x69, 0x1c, 0x0d, 0x25, 0x76, 0xcc, 0xf0, 0xdb, 0xbb, 0xc5, 0xad, 0xe2, 0x26, 0x57 } }, + { { 0xcf, 0xe8, 0x0e, 0x6b, 0x96, 0x7d, 0xed, 0x27, 0xd1, 0x3c, 0xa9, 0xd9, 0x50, 0xa9, 0x98, 0x84, 0x5e, 0x86, 0xef, 0xd6, 0xf0, 0xf8, 0x0e, 0x89, 0x05, 0x2f, 0xd9, 0x5f, 0x15, 0x5f, 0x73, 0x79 } } }, + { { { 0xc8, 0x5c, 0x16, 0xfe, 0xed, 0x9f, 0x26, 0x56, 0xf6, 0x4b, 0x9f, 0xa7, 0x0a, 0x85, 0xfe, 0xa5, 0x8c, 0x87, 0xdd, 0x98, 0xce, 0x4e, 0xc3, 0x58, 0x55, 0xb2, 0x7b, 0x3d, 0xd8, 0x6b, 0xb5, 0x4c } }, + { { 0x65, 0x38, 0xa0, 0x15, 0xfa, 0xa7, 0xb4, 0x8f, 0xeb, 0xc4, 0x86, 0x9b, 0x30, 0xa5, 0x5e, 0x4d, 0xea, 0x8a, 0x9a, 0x9f, 0x1a, 0xd8, 0x5b, 0x53, 0x14, 0x19, 0x25, 0x63, 0xb4, 0x6f, 0x1f, 0x5d } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xac, 0x8f, 0xbc, 0x1e, 0x7d, 0x8b, 0x5a, 0x0b, 0x8d, 0xaf, 0x76, 0x2e, 0x71, 0xe3, 0x3b, 0x6f, 0x53, 0x2f, 0x3e, 0x90, 0x95, 0xd4, 0x35, 0x14, 0x4f, 0x8c, 0x3c, 0xce, 0x57, 0x1c, 0x76, 0x49 } }, + { { 0xa8, 0x50, 0xe1, 0x61, 0x6b, 0x57, 0x35, 0xeb, 0x44, 0x0b, 0x0c, 0x6e, 0xf9, 0x25, 0x80, 0x74, 0xf2, 0x8f, 0x6f, 0x7a, 0x3e, 0x7f, 0x2d, 0xf3, 0x4e, 0x09, 0x65, 0x10, 0x5e, 0x03, 0x25, 0x32 } } }, + { { { 0xa9, 0x60, 0xdc, 0x0f, 0x64, 0xe5, 0x1d, 0xe2, 0x8d, 0x4f, 0x79, 0x2f, 0x0e, 0x24, 0x02, 0x00, 0x05, 0x77, 0x43, 0x25, 0x3d, 0x6a, 0xc7, 0xb7, 0xbf, 0x04, 0x08, 0x65, 0xf4, 0x39, 0x4b, 0x65 } }, + { { 0x96, 0x19, 0x12, 0x6b, 0x6a, 0xb7, 0xe3, 0xdc, 0x45, 0x9b, 0xdb, 0xb4, 0xa8, 0xae, 0xdc, 0xa8, 0x14, 0x44, 0x65, 0x62, 0xce, 0x34, 0x9a, 0x84, 0x18, 0x12, 0x01, 0xf1, 0xe2, 0x7b, 0xce, 0x50 } } }, + { { { 0x41, 0x21, 0x30, 0x53, 0x1b, 0x47, 0x01, 0xb7, 0x18, 0xd8, 0x82, 0x57, 0xbd, 0xa3, 0x60, 0xf0, 0x32, 0xf6, 0x5b, 0xf0, 0x30, 0x88, 0x91, 0x59, 0xfd, 0x90, 0xa2, 0xb9, 0x55, 0x93, 0x21, 0x34 } }, + { { 0x97, 0x67, 0x9e, 0xeb, 0x6a, 0xf9, 0x6e, 0xd6, 0x73, 0xe8, 0x6b, 0x29, 0xec, 0x63, 0x82, 0x00, 0xa8, 0x99, 0x1c, 0x1d, 0x30, 0xc8, 0x90, 0x52, 0x90, 0xb6, 0x6a, 0x80, 0x4e, 0xff, 0x4b, 0x51 } } }, + { { { 0x0f, 0x7d, 0x63, 0x8c, 0x6e, 0x5c, 0xde, 0x30, 0xdf, 0x65, 0xfa, 0x2e, 0xb0, 0xa3, 0x25, 0x05, 0x54, 0xbd, 0x25, 0xba, 0x06, 0xae, 0xdf, 0x8b, 0xd9, 0x1b, 0xea, 0x38, 0xb3, 0x05, 0x16, 0x09 } }, + { { 0xc7, 0x8c, 0xbf, 0x64, 0x28, 0xad, 0xf8, 0xa5, 0x5a, 0x6f, 0xc9, 0xba, 0xd5, 0x7f, 0xd5, 0xd6, 0xbd, 0x66, 0x2f, 0x3d, 0xaa, 0x54, 0xf6, 0xba, 0x32, 0x22, 0x9a, 0x1e, 0x52, 0x05, 0xf4, 0x1d } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xaa, 0x1f, 0xbb, 0xeb, 0xfe, 0xe4, 0x87, 0xfc, 0xb1, 0x2c, 0xb7, 0x88, 0xf4, 0xc6, 0xb9, 0xf5, 0x24, 0x46, 0xf2, 0xa5, 0x9f, 0x8f, 0x8a, 0x93, 0x70, 0x69, 0xd4, 0x56, 0xec, 0xfd, 0x06, 0x46 } }, + { { 0x4e, 0x66, 0xcf, 0x4e, 0x34, 0xce, 0x0c, 0xd9, 0xa6, 0x50, 0xd6, 0x5e, 0x95, 0xaf, 0xe9, 0x58, 0xfa, 0xee, 0x9b, 0xb8, 0xa5, 0x0f, 0x35, 0xe0, 0x43, 0x82, 0x6d, 0x65, 0xe6, 0xd9, 0x00, 0x0f } } }, + { { { 0x7b, 0x75, 0x3a, 0xfc, 0x64, 0xd3, 0x29, 0x7e, 0xdd, 0x49, 0x9a, 0x59, 0x53, 0xbf, 0xb4, 0xa7, 0x52, 0xb3, 0x05, 0xab, 0xc3, 0xaf, 0x16, 0x1a, 0x85, 0x42, 0x32, 0xa2, 0x86, 0xfa, 0x39, 0x43 } }, + { { 0x0e, 0x4b, 0xa3, 0x63, 0x8a, 0xfe, 0xa5, 0x58, 0xf1, 0x13, 0xbd, 0x9d, 0xaa, 0x7f, 0x76, 0x40, 0x70, 0x81, 0x10, 0x75, 0x99, 0xbb, 0xbe, 0x0b, 0x16, 0xe9, 0xba, 0x62, 0x34, 0xcc, 0x07, 0x6d } } }, + { { { 0xc3, 0xf1, 0xc6, 0x93, 0x65, 0xee, 0x0b, 0xbc, 0xea, 0x14, 0xf0, 0xc1, 0xf8, 0x84, 0x89, 0xc2, 0xc9, 0xd7, 0xea, 0x34, 0xca, 0xa7, 0xc4, 0x99, 0xd5, 0x50, 0x69, 0xcb, 0xd6, 0x21, 0x63, 0x7c } }, + { { 0x99, 0xeb, 0x7c, 0x31, 0x73, 0x64, 0x67, 0x7f, 0x0c, 0x66, 0xaa, 0x8c, 0x69, 0x91, 0xe2, 0x26, 0xd3, 0x23, 0xe2, 0x76, 0x5d, 0x32, 0x52, 0xdf, 0x5d, 0xc5, 0x8f, 0xb7, 0x7c, 0x84, 0xb3, 0x70 } } }, + { { { 0xeb, 0x01, 0xc7, 0x36, 0x97, 0x4e, 0xb6, 0xab, 0x5f, 0x0d, 0x2c, 0xba, 0x67, 0x64, 0x55, 0xde, 0xbc, 0xff, 0xa6, 0xec, 0x04, 0xd3, 0x8d, 0x39, 0x56, 0x5e, 0xee, 0xf8, 0xe4, 0x2e, 0x33, 0x62 } }, + { { 0x65, 0xef, 0xb8, 0x9f, 0xc8, 0x4b, 0xa7, 0xfd, 0x21, 0x49, 0x9b, 0x92, 0x35, 0x82, 0xd6, 0x0a, 0x9b, 0xf2, 0x79, 0xf1, 0x47, 0x2f, 0x6a, 0x7e, 0x9f, 0xcf, 0x18, 0x02, 0x3c, 0xfb, 0x1b, 0x3e } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x2f, 0x8b, 0xc8, 0x40, 0x51, 0xd1, 0xac, 0x1a, 0x0b, 0xe4, 0xa9, 0xa2, 0x42, 0x21, 0x19, 0x2f, 0x7b, 0x97, 0xbf, 0xf7, 0x57, 0x6d, 0x3f, 0x3d, 0x4f, 0x0f, 0xe2, 0xb2, 0x81, 0x00, 0x9e, 0x7b } }, + { { 0x8c, 0x85, 0x2b, 0xc4, 0xfc, 0xf1, 0xab, 0xe8, 0x79, 0x22, 0xc4, 0x84, 0x17, 0x3a, 0xfa, 0x86, 0xa6, 0x7d, 0xf9, 0xf3, 0x6f, 0x03, 0x57, 0x20, 0x4d, 0x79, 0xf9, 0x6e, 0x71, 0x54, 0x38, 0x09 } } }, + { { { 0x40, 0x29, 0x74, 0xa8, 0x2f, 0x5e, 0xf9, 0x79, 0xa4, 0xf3, 0x3e, 0xb9, 0xfd, 0x33, 0x31, 0xac, 0x9a, 0x69, 0x88, 0x1e, 0x77, 0x21, 0x2d, 0xf3, 0x91, 0x52, 0x26, 0x15, 0xb2, 0xa6, 0xcf, 0x7e } }, + { { 0xc6, 0x20, 0x47, 0x6c, 0xa4, 0x7d, 0xcb, 0x63, 0xea, 0x5b, 0x03, 0xdf, 0x3e, 0x88, 0x81, 0x6d, 0xce, 0x07, 0x42, 0x18, 0x60, 0x7e, 0x7b, 0x55, 0xfe, 0x6a, 0xf3, 0xda, 0x5c, 0x8b, 0x95, 0x10 } } }, + { { { 0x62, 0xe4, 0x0d, 0x03, 0xb4, 0xd7, 0xcd, 0xfa, 0xbd, 0x46, 0xdf, 0x93, 0x71, 0x10, 0x2c, 0xa8, 0x3b, 0xb6, 0x09, 0x05, 0x70, 0x84, 0x43, 0x29, 0xa8, 0x59, 0xf5, 0x8e, 0x10, 0xe4, 0xd7, 0x20 } }, + { { 0x57, 0x82, 0x1c, 0xab, 0xbf, 0x62, 0x70, 0xe8, 0xc4, 0xcf, 0xf0, 0x28, 0x6e, 0x16, 0x3c, 0x08, 0x78, 0x89, 0x85, 0x46, 0x0f, 0xf6, 0x7f, 0xcf, 0xcb, 0x7e, 0xb8, 0x25, 0xe9, 0x5a, 0xfa, 0x03 } } }, + { { { 0xfb, 0x95, 0x92, 0x63, 0x50, 0xfc, 0x62, 0xf0, 0xa4, 0x5e, 0x8c, 0x18, 0xc2, 0x17, 0x24, 0xb7, 0x78, 0xc2, 0xa9, 0xe7, 0x6a, 0x32, 0xd6, 0x29, 0x85, 0xaf, 0xcb, 0x8d, 0x91, 0x13, 0xda, 0x6b } }, + { { 0x36, 0x0a, 0xc2, 0xb6, 0x4b, 0xa5, 0x5d, 0x07, 0x17, 0x41, 0x31, 0x5f, 0x62, 0x46, 0xf8, 0x92, 0xf9, 0x66, 0x48, 0x73, 0xa6, 0x97, 0x0d, 0x7d, 0x88, 0xee, 0x62, 0xb1, 0x03, 0xa8, 0x3f, 0x2c } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x4a, 0xb1, 0x70, 0x8a, 0xa9, 0xe8, 0x63, 0x79, 0x00, 0xe2, 0x25, 0x16, 0xca, 0x4b, 0x0f, 0xa4, 0x66, 0xad, 0x19, 0x9f, 0x88, 0x67, 0x0c, 0x8b, 0xc2, 0x4a, 0x5b, 0x2b, 0x6d, 0x95, 0xaf, 0x19 } }, + { { 0x8b, 0x9d, 0xb6, 0xcc, 0x60, 0xb4, 0x72, 0x4f, 0x17, 0x69, 0x5a, 0x4a, 0x68, 0x34, 0xab, 0xa1, 0x45, 0x32, 0x3c, 0x83, 0x87, 0x72, 0x30, 0x54, 0x77, 0x68, 0xae, 0xfb, 0xb5, 0x8b, 0x22, 0x5e } } }, + { { { 0xf1, 0xb9, 0x87, 0x35, 0xc5, 0xbb, 0xb9, 0xcf, 0xf5, 0xd6, 0xcd, 0xd5, 0x0c, 0x7c, 0x0e, 0xe6, 0x90, 0x34, 0xfb, 0x51, 0x42, 0x1e, 0x6d, 0xac, 0x9a, 0x46, 0xc4, 0x97, 0x29, 0x32, 0xbf, 0x45 } }, + { { 0x66, 0x9e, 0xc6, 0x24, 0xc0, 0xed, 0xa5, 0x5d, 0x88, 0xd4, 0xf0, 0x73, 0x97, 0x7b, 0xea, 0x7f, 0x42, 0xff, 0x21, 0xa0, 0x9b, 0x2f, 0x9a, 0xfd, 0x53, 0x57, 0x07, 0x84, 0x48, 0x88, 0x9d, 0x52 } } }, + { { { 0xc6, 0x96, 0x48, 0x34, 0x2a, 0x06, 0xaf, 0x94, 0x3d, 0xf4, 0x1a, 0xcf, 0xf2, 0xc0, 0x21, 0xc2, 0x42, 0x5e, 0xc8, 0x2f, 0x35, 0xa2, 0x3e, 0x29, 0xfa, 0x0c, 0x84, 0xe5, 0x89, 0x72, 0x7c, 0x06 } }, + { { 0x32, 0x65, 0x03, 0xe5, 0x89, 0xa6, 0x6e, 0xb3, 0x5b, 0x8e, 0xca, 0xeb, 0xfe, 0x22, 0x56, 0x8b, 0x5d, 0x14, 0x4b, 0x4d, 0xf9, 0xbe, 0xb5, 0xf5, 0xe6, 0x5c, 0x7b, 0x8b, 0xf4, 0x13, 0x11, 0x34 } } }, + { { { 0x07, 0xc6, 0x22, 0x15, 0xe2, 0x9c, 0x60, 0xa2, 0x19, 0xd9, 0x27, 0xae, 0x37, 0x4e, 0xa6, 0xc9, 0x80, 0xa6, 0x91, 0x8f, 0x12, 0x49, 0xe5, 0x00, 0x18, 0x47, 0xd1, 0xd7, 0x28, 0x22, 0x63, 0x39 } }, + { { 0xe8, 0xe2, 0x00, 0x7e, 0xf2, 0x9e, 0x1e, 0x99, 0x39, 0x95, 0x04, 0xbd, 0x1e, 0x67, 0x7b, 0xb2, 0x26, 0xac, 0xe6, 0xaa, 0xe2, 0x46, 0xd5, 0xe4, 0xe8, 0x86, 0xbd, 0xab, 0x7c, 0x55, 0x59, 0x6f } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x24, 0x64, 0x6e, 0x9b, 0x35, 0x71, 0x78, 0xce, 0x33, 0x03, 0x21, 0x33, 0x36, 0xf1, 0x73, 0x9b, 0xb9, 0x15, 0x8b, 0x2c, 0x69, 0xcf, 0x4d, 0xed, 0x4f, 0x4d, 0x57, 0x14, 0x13, 0x82, 0xa4, 0x4d } }, + { { 0x65, 0x6e, 0x0a, 0xa4, 0x59, 0x07, 0x17, 0xf2, 0x6b, 0x4a, 0x1f, 0x6e, 0xf6, 0xb5, 0xbc, 0x62, 0xe4, 0xb6, 0xda, 0xa2, 0x93, 0xbc, 0x29, 0x05, 0xd2, 0xd2, 0x73, 0x46, 0x03, 0x16, 0x40, 0x31 } } }, + { { { 0x4c, 0x73, 0x6d, 0x15, 0xbd, 0xa1, 0x4d, 0x5c, 0x13, 0x0b, 0x24, 0x06, 0x98, 0x78, 0x1c, 0x5b, 0xeb, 0x1f, 0x18, 0x54, 0x43, 0xd9, 0x55, 0x66, 0xda, 0x29, 0x21, 0xe8, 0xb8, 0x3c, 0x42, 0x22 } }, + { { 0xb4, 0xcd, 0x08, 0x6f, 0x15, 0x23, 0x1a, 0x0b, 0x22, 0xed, 0xd1, 0xf1, 0xa7, 0xc7, 0x73, 0x45, 0xf3, 0x9e, 0xce, 0x76, 0xb7, 0xf6, 0x39, 0xb6, 0x8e, 0x79, 0xbe, 0xe9, 0x9b, 0xcf, 0x7d, 0x62 } } }, + { { { 0x92, 0x5b, 0xfc, 0x72, 0xfd, 0xba, 0xf1, 0xfd, 0xa6, 0x7c, 0x95, 0xe3, 0x61, 0x3f, 0xe9, 0x03, 0xd4, 0x2b, 0xd4, 0x20, 0xd9, 0xdb, 0x4d, 0x32, 0x3e, 0xf5, 0x11, 0x64, 0xe3, 0xb4, 0xbe, 0x32 } }, + { { 0x86, 0x17, 0x90, 0xe7, 0xc9, 0x1f, 0x10, 0xa5, 0x6a, 0x2d, 0x39, 0xd0, 0x3b, 0xc4, 0xa6, 0xe9, 0x59, 0x13, 0xda, 0x1a, 0xe6, 0xa0, 0xb9, 0x3c, 0x50, 0xb8, 0x40, 0x7c, 0x15, 0x36, 0x5a, 0x42 } } }, + { { { 0xb4, 0x0b, 0x32, 0xab, 0xdc, 0x04, 0x51, 0x55, 0x21, 0x1e, 0x0b, 0x75, 0x99, 0x89, 0x73, 0x35, 0x3a, 0x91, 0x2b, 0xfe, 0xe7, 0x49, 0xea, 0x76, 0xc1, 0xf9, 0x46, 0xb9, 0x53, 0x02, 0x23, 0x04 } }, + { { 0xfc, 0x5a, 0x1e, 0x1d, 0x74, 0x58, 0x95, 0xa6, 0x8f, 0x7b, 0x97, 0x3e, 0x17, 0x3b, 0x79, 0x2d, 0xa6, 0x57, 0xef, 0x45, 0x02, 0x0b, 0x4d, 0x6e, 0x9e, 0x93, 0x8d, 0x2f, 0xd9, 0x9d, 0xdb, 0x04 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xc0, 0xd7, 0x56, 0x97, 0x58, 0x91, 0xde, 0x09, 0x4f, 0x9f, 0xbe, 0x63, 0xb0, 0x83, 0x86, 0x43, 0x5d, 0xbc, 0xe0, 0xf3, 0xc0, 0x75, 0xbf, 0x8b, 0x8e, 0xaa, 0xf7, 0x8b, 0x64, 0x6e, 0xb0, 0x63 } }, + { { 0x16, 0xae, 0x8b, 0xe0, 0x9b, 0x24, 0x68, 0x5c, 0x44, 0xc2, 0xd0, 0x08, 0xb7, 0x7b, 0x62, 0xfd, 0x7f, 0xd8, 0xd4, 0xb7, 0x50, 0xfd, 0x2c, 0x1b, 0xbf, 0x41, 0x95, 0xd9, 0x8e, 0xd8, 0x17, 0x1b } } }, + { { { 0x86, 0x55, 0x37, 0x8e, 0xc3, 0x38, 0x48, 0x14, 0xb5, 0x97, 0xd2, 0xa7, 0x54, 0x45, 0xf1, 0x35, 0x44, 0x38, 0x9e, 0xf1, 0x1b, 0xb6, 0x34, 0x00, 0x3c, 0x96, 0xee, 0x29, 0x00, 0xea, 0x2c, 0x0b } }, + { { 0xea, 0xda, 0x99, 0x9e, 0x19, 0x83, 0x66, 0x6d, 0xe9, 0x76, 0x87, 0x50, 0xd1, 0xfd, 0x3c, 0x60, 0x87, 0xc6, 0x41, 0xd9, 0x8e, 0xdb, 0x5e, 0xde, 0xaa, 0x9a, 0xd3, 0x28, 0xda, 0x95, 0xea, 0x47 } } }, + { { { 0xd0, 0x80, 0xba, 0x19, 0xae, 0x1d, 0xa9, 0x79, 0xf6, 0x3f, 0xac, 0x5d, 0x6f, 0x96, 0x1f, 0x2a, 0xce, 0x29, 0xb2, 0xff, 0x37, 0xf1, 0x94, 0x8f, 0x0c, 0xb5, 0x28, 0xba, 0x9a, 0x21, 0xf6, 0x66 } }, + { { 0x02, 0xfb, 0x54, 0xb8, 0x05, 0xf3, 0x81, 0x52, 0x69, 0x34, 0x46, 0x9d, 0x86, 0x76, 0x8f, 0xd7, 0xf8, 0x6a, 0x66, 0xff, 0xe6, 0xa7, 0x90, 0xf7, 0x5e, 0xcd, 0x6a, 0x9b, 0x55, 0xfc, 0x9d, 0x48 } } }, + { { { 0xbd, 0xaa, 0x13, 0xe6, 0xcd, 0x45, 0x4a, 0xa4, 0x59, 0x0a, 0x64, 0xb1, 0x98, 0xd6, 0x34, 0x13, 0x04, 0xe6, 0x97, 0x94, 0x06, 0xcb, 0xd4, 0x4e, 0xbb, 0x96, 0xcd, 0xd1, 0x57, 0xd1, 0xe3, 0x06 } }, + { { 0x7a, 0x6c, 0x45, 0x27, 0xc4, 0x93, 0x7f, 0x7d, 0x7c, 0x62, 0x50, 0x38, 0x3a, 0x6b, 0xb5, 0x88, 0xc6, 0xd9, 0xf1, 0x78, 0x19, 0xb9, 0x39, 0x93, 0x3d, 0xc9, 0xe0, 0x9c, 0x3c, 0xce, 0xf5, 0x72 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x24, 0xea, 0x23, 0x7d, 0x56, 0x2c, 0xe2, 0x59, 0x0e, 0x85, 0x60, 0x04, 0x88, 0x5a, 0x74, 0x1e, 0x4b, 0xef, 0x13, 0xda, 0x4c, 0xff, 0x83, 0x45, 0x85, 0x3f, 0x08, 0x95, 0x2c, 0x20, 0x13, 0x1f } }, + { { 0x48, 0x5f, 0x27, 0x90, 0x5c, 0x02, 0x42, 0xad, 0x78, 0x47, 0x5c, 0xb5, 0x7e, 0x08, 0x85, 0x00, 0xfa, 0x7f, 0xfd, 0xfd, 0xe7, 0x09, 0x11, 0xf2, 0x7e, 0x1b, 0x38, 0x6c, 0x35, 0x6d, 0x33, 0x66 } } }, + { { { 0x93, 0x03, 0x36, 0x81, 0xac, 0xe4, 0x20, 0x09, 0x35, 0x4c, 0x45, 0xb2, 0x1e, 0x4c, 0x14, 0x21, 0xe6, 0xe9, 0x8a, 0x7b, 0x8d, 0xfe, 0x1e, 0xc6, 0x3e, 0xc1, 0x35, 0xfa, 0xe7, 0x70, 0x4e, 0x1d } }, + { { 0x61, 0x2e, 0xc2, 0xdd, 0x95, 0x57, 0xd1, 0xab, 0x80, 0xe8, 0x63, 0x17, 0xb5, 0x48, 0xe4, 0x8a, 0x11, 0x9e, 0x72, 0xbe, 0x85, 0x8d, 0x51, 0x0a, 0xf2, 0x9f, 0xe0, 0x1c, 0xa9, 0x07, 0x28, 0x7b } } }, + { { { 0xbb, 0x71, 0x14, 0x5e, 0x26, 0x8c, 0x3d, 0xc8, 0xe9, 0x7c, 0xd3, 0xd6, 0xd1, 0x2f, 0x07, 0x6d, 0xe6, 0xdf, 0xfb, 0x79, 0xd6, 0x99, 0x59, 0x96, 0x48, 0x40, 0x0f, 0x3a, 0x7b, 0xb2, 0xa0, 0x72 } }, + { { 0x4e, 0x3b, 0x69, 0xc8, 0x43, 0x75, 0x51, 0x6c, 0x79, 0x56, 0xe4, 0xcb, 0xf7, 0xa6, 0x51, 0xc2, 0x2c, 0x42, 0x0b, 0xd4, 0x82, 0x20, 0x1c, 0x01, 0x08, 0x66, 0xd7, 0xbf, 0x04, 0x56, 0xfc, 0x02 } } }, + { { { 0x24, 0xe8, 0xb7, 0x60, 0xae, 0x47, 0x80, 0xfc, 0xe5, 0x23, 0xe7, 0xc2, 0xc9, 0x85, 0xe6, 0x98, 0xa0, 0x29, 0x4e, 0xe1, 0x84, 0x39, 0x2d, 0x95, 0x2c, 0xf3, 0x45, 0x3c, 0xff, 0xaf, 0x27, 0x4c } }, + { { 0x6b, 0xa6, 0xf5, 0x4b, 0x11, 0xbd, 0xba, 0x5b, 0x9e, 0xc4, 0xa4, 0x51, 0x1e, 0xbe, 0xd0, 0x90, 0x3a, 0x9c, 0xc2, 0x26, 0xb6, 0x1e, 0xf1, 0x95, 0x7d, 0xc8, 0x6d, 0x52, 0xe6, 0x99, 0x2c, 0x5f } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x85, 0xe0, 0x24, 0x32, 0xb4, 0xd1, 0xef, 0xfc, 0x69, 0xa2, 0xbf, 0x8f, 0x72, 0x2c, 0x95, 0xf6, 0xe4, 0x6e, 0x7d, 0x90, 0xf7, 0x57, 0x81, 0xa0, 0xf7, 0xda, 0xef, 0x33, 0x07, 0xe3, 0x6b, 0x78 } }, + { { 0x36, 0x27, 0x3e, 0xc6, 0x12, 0x07, 0xab, 0x4e, 0xbe, 0x69, 0x9d, 0xb3, 0xbe, 0x08, 0x7c, 0x2a, 0x47, 0x08, 0xfd, 0xd4, 0xcd, 0x0e, 0x27, 0x34, 0x5b, 0x98, 0x34, 0x2f, 0x77, 0x5f, 0x3a, 0x65 } } }, + { { { 0x13, 0xaa, 0x2e, 0x4c, 0xf0, 0x22, 0xb8, 0x6c, 0xb3, 0x19, 0x4d, 0xeb, 0x6b, 0xd0, 0xa4, 0xc6, 0x9c, 0xdd, 0xc8, 0x5b, 0x81, 0x57, 0x89, 0xdf, 0x33, 0xa9, 0x68, 0x49, 0x80, 0xe4, 0xfe, 0x21 } }, + { { 0x00, 0x17, 0x90, 0x30, 0xe9, 0xd3, 0x60, 0x30, 0x31, 0xc2, 0x72, 0x89, 0x7a, 0x36, 0xa5, 0xbd, 0x39, 0x83, 0x85, 0x50, 0xa1, 0x5d, 0x6c, 0x41, 0x1d, 0xb5, 0x2c, 0x07, 0x40, 0x77, 0x0b, 0x50 } } }, + { { { 0x64, 0x34, 0xec, 0xc0, 0x9e, 0x44, 0x41, 0xaf, 0xa0, 0x36, 0x05, 0x6d, 0xea, 0x30, 0x25, 0x46, 0x35, 0x24, 0x9d, 0x86, 0xbd, 0x95, 0xf1, 0x6a, 0x46, 0xd7, 0x94, 0x54, 0xf9, 0x3b, 0xbd, 0x5d } }, + { { 0x77, 0x5b, 0xe2, 0x37, 0xc7, 0xe1, 0x7c, 0x13, 0x8c, 0x9f, 0x7b, 0x7b, 0x2a, 0xce, 0x42, 0xa3, 0xb9, 0x2a, 0x99, 0xa8, 0xc0, 0xd8, 0x3c, 0x86, 0xb0, 0xfb, 0xe9, 0x76, 0x77, 0xf7, 0xf5, 0x56 } } }, + { { { 0xdf, 0xb3, 0x46, 0x11, 0x6e, 0x13, 0xb7, 0x28, 0x4e, 0x56, 0xdd, 0xf1, 0xac, 0xad, 0x58, 0xc3, 0xf8, 0x88, 0x94, 0x5e, 0x06, 0x98, 0xa1, 0xe4, 0x6a, 0xfb, 0x0a, 0x49, 0x5d, 0x8a, 0xfe, 0x77 } }, + { { 0x46, 0x02, 0xf5, 0xa5, 0xaf, 0xc5, 0x75, 0x6d, 0xba, 0x45, 0x35, 0x0a, 0xfe, 0xc9, 0xac, 0x22, 0x91, 0x8d, 0x21, 0x95, 0x33, 0x03, 0xc0, 0x8a, 0x16, 0xf3, 0x39, 0xe0, 0x01, 0x0f, 0x53, 0x3c } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x34, 0x75, 0x37, 0x1f, 0x34, 0x4e, 0xa9, 0x1d, 0x68, 0x67, 0xf8, 0x49, 0x98, 0x96, 0xfc, 0x4c, 0x65, 0x97, 0xf7, 0x02, 0x4a, 0x52, 0x6c, 0x01, 0xbd, 0x48, 0xbb, 0x1b, 0xed, 0xa4, 0xe2, 0x53 } }, + { { 0x59, 0xd5, 0x9b, 0x5a, 0xa2, 0x90, 0xd3, 0xb8, 0x37, 0x4c, 0x55, 0x82, 0x28, 0x08, 0x0f, 0x7f, 0xaa, 0x81, 0x65, 0xe0, 0x0c, 0x52, 0xc9, 0xa3, 0x32, 0x27, 0x64, 0xda, 0xfd, 0x34, 0x23, 0x5a } } }, + { { { 0xb5, 0xb0, 0x0c, 0x4d, 0xb3, 0x7b, 0x23, 0xc8, 0x1f, 0x8a, 0x39, 0x66, 0xe6, 0xba, 0x4c, 0x10, 0x37, 0xca, 0x9c, 0x7c, 0x05, 0x9e, 0xff, 0xc0, 0xf8, 0x8e, 0xb1, 0x8f, 0x6f, 0x67, 0x18, 0x26 } }, + { { 0x4b, 0x41, 0x13, 0x54, 0x23, 0x1a, 0xa4, 0x4e, 0xa9, 0x8b, 0x1e, 0x4b, 0xfc, 0x15, 0x24, 0xbb, 0x7e, 0xcb, 0xb6, 0x1e, 0x1b, 0xf5, 0xf2, 0xc8, 0x56, 0xec, 0x32, 0xa2, 0x60, 0x5b, 0xa0, 0x2a } } }, + { { { 0xa4, 0x29, 0x47, 0x86, 0x2e, 0x92, 0x4f, 0x11, 0x4f, 0xf3, 0xb2, 0x5c, 0xd5, 0x3e, 0xa6, 0xb9, 0xc8, 0xe2, 0x33, 0x11, 0x1f, 0x01, 0x8f, 0xb0, 0x9b, 0xc7, 0xa5, 0xff, 0x83, 0x0f, 0x1e, 0x28 } }, + { { 0x1d, 0x29, 0x7a, 0xa1, 0xec, 0x8e, 0xb5, 0xad, 0xea, 0x02, 0x68, 0x60, 0x74, 0x29, 0x1c, 0xa5, 0xcf, 0xc8, 0x3b, 0x7d, 0x8b, 0x2b, 0x7c, 0xad, 0xa4, 0x40, 0x17, 0x51, 0x59, 0x7c, 0x2e, 0x5d } } }, + { { { 0x0a, 0x6c, 0x4f, 0xbc, 0x3e, 0x32, 0xe7, 0x4a, 0x1a, 0x13, 0xc1, 0x49, 0x38, 0xbf, 0xf7, 0xc2, 0xd3, 0x8f, 0x6b, 0xad, 0x52, 0xf7, 0xcf, 0xbc, 0x27, 0xcb, 0x40, 0x67, 0x76, 0xcd, 0x6d, 0x56 } }, + { { 0xe5, 0xb0, 0x27, 0xad, 0xbe, 0x9b, 0xf2, 0xb5, 0x63, 0xde, 0x3a, 0x23, 0x95, 0xb7, 0x0a, 0x7e, 0xf3, 0x9e, 0x45, 0x6f, 0x19, 0x39, 0x75, 0x8f, 0x39, 0x3d, 0x0f, 0xc0, 0x9f, 0xf1, 0xe9, 0x51 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x88, 0xaa, 0x14, 0x24, 0x86, 0x94, 0x11, 0x12, 0x3e, 0x1a, 0xb5, 0xcc, 0xbb, 0xe0, 0x9c, 0xd5, 0x9c, 0x6d, 0xba, 0x58, 0x72, 0x8d, 0xfb, 0x22, 0x7b, 0x9f, 0x7c, 0x94, 0x30, 0xb3, 0x51, 0x21 } }, + { { 0xf6, 0x74, 0x3d, 0xf2, 0xaf, 0xd0, 0x1e, 0x03, 0x7c, 0x23, 0x6b, 0xc9, 0xfc, 0x25, 0x70, 0x90, 0xdc, 0x9a, 0xa4, 0xfb, 0x49, 0xfc, 0x3d, 0x0a, 0x35, 0x38, 0x6f, 0xe4, 0x7e, 0x50, 0x01, 0x2a } } }, + { { { 0xd6, 0xe3, 0x96, 0x61, 0x3a, 0xfd, 0xef, 0x9b, 0x1f, 0x90, 0xa4, 0x24, 0x14, 0x5b, 0xc8, 0xde, 0x50, 0xb1, 0x1d, 0xaf, 0xe8, 0x55, 0x8a, 0x87, 0x0d, 0xfe, 0xaa, 0x3b, 0x82, 0x2c, 0x8d, 0x7b } }, + { { 0x85, 0x0c, 0xaf, 0xf8, 0x83, 0x44, 0x49, 0xd9, 0x45, 0xcf, 0xf7, 0x48, 0xd9, 0x53, 0xb4, 0xf1, 0x65, 0xa0, 0xe1, 0xc3, 0xb3, 0x15, 0xed, 0x89, 0x9b, 0x4f, 0x62, 0xb3, 0x57, 0xa5, 0x45, 0x1c } } }, + { { { 0x8f, 0x12, 0xea, 0xaf, 0xd1, 0x1f, 0x79, 0x10, 0x0b, 0xf6, 0xa3, 0x7b, 0xea, 0xac, 0x8b, 0x57, 0x32, 0x62, 0xe7, 0x06, 0x12, 0x51, 0xa0, 0x3b, 0x43, 0x5e, 0xa4, 0x20, 0x78, 0x31, 0xce, 0x0d } }, + { { 0x84, 0x7c, 0xc2, 0xa6, 0x91, 0x23, 0xce, 0xbd, 0xdc, 0xf9, 0xce, 0xd5, 0x75, 0x30, 0x22, 0xe6, 0xf9, 0x43, 0x62, 0x0d, 0xf7, 0x75, 0x9d, 0x7f, 0x8c, 0xff, 0x7d, 0xe4, 0x72, 0xac, 0x9f, 0x1c } } }, + { { { 0x88, 0xc1, 0x99, 0xd0, 0x3c, 0x1c, 0x5d, 0xb4, 0xef, 0x13, 0x0f, 0x90, 0xb9, 0x36, 0x2f, 0x95, 0x95, 0xc6, 0xdc, 0xde, 0x0a, 0x51, 0xe2, 0x8d, 0xf3, 0xbc, 0x51, 0xec, 0xdf, 0xb1, 0xa2, 0x5f } }, + { { 0x2e, 0x68, 0xa1, 0x23, 0x7d, 0x9b, 0x40, 0x69, 0x85, 0x7b, 0x42, 0xbf, 0x90, 0x4b, 0xd6, 0x40, 0x2f, 0xd7, 0x52, 0x52, 0xb2, 0x21, 0xde, 0x64, 0xbd, 0x88, 0xc3, 0x6d, 0xa5, 0xfa, 0x81, 0x3f } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xfb, 0xfd, 0x47, 0x7b, 0x8a, 0x66, 0x9e, 0x79, 0x2e, 0x64, 0x82, 0xef, 0xf7, 0x21, 0xec, 0xf6, 0xd8, 0x86, 0x09, 0x31, 0x7c, 0xdd, 0x03, 0x6a, 0x58, 0xa0, 0x77, 0xb7, 0x9b, 0x8c, 0x87, 0x1f } }, + { { 0x55, 0x47, 0xe4, 0xa8, 0x3d, 0x55, 0x21, 0x34, 0xab, 0x1d, 0xae, 0xe0, 0xf4, 0xea, 0xdb, 0xc5, 0xb9, 0x58, 0xbf, 0xc4, 0x2a, 0x89, 0x31, 0x1a, 0xf4, 0x2d, 0xe1, 0xca, 0x37, 0x99, 0x47, 0x59 } } }, + { { { 0xc7, 0xca, 0x63, 0xc1, 0x49, 0xa9, 0x35, 0x45, 0x55, 0x7e, 0xda, 0x64, 0x32, 0x07, 0x50, 0xf7, 0x32, 0xac, 0xde, 0x75, 0x58, 0x9b, 0x11, 0xb2, 0x3a, 0x1f, 0xf5, 0xf7, 0x79, 0x04, 0xe6, 0x08 } }, + { { 0x46, 0xfa, 0x22, 0x4b, 0xfa, 0xe1, 0xfe, 0x96, 0xfc, 0x67, 0xba, 0x67, 0x97, 0xc4, 0xe7, 0x1b, 0x86, 0x90, 0x5f, 0xee, 0xf4, 0x5b, 0x11, 0xb2, 0xcd, 0xad, 0xee, 0xc2, 0x48, 0x6c, 0x2b, 0x1b } } }, + { { { 0xe3, 0x39, 0x62, 0xb4, 0x4f, 0x31, 0x04, 0xc9, 0xda, 0xd5, 0x73, 0x51, 0x57, 0xc5, 0xb8, 0xf3, 0xa3, 0x43, 0x70, 0xe4, 0x61, 0x81, 0x84, 0xe2, 0xbb, 0xbf, 0x4f, 0x9e, 0xa4, 0x5e, 0x74, 0x06 } }, + { { 0x29, 0xac, 0xff, 0x27, 0xe0, 0x59, 0xbe, 0x39, 0x9c, 0x0d, 0x83, 0xd7, 0x10, 0x0b, 0x15, 0xb7, 0xe1, 0xc2, 0x2c, 0x30, 0x73, 0x80, 0x3a, 0x7d, 0x5d, 0xab, 0x58, 0x6b, 0xc1, 0xf0, 0xf4, 0x22 } } }, + { { { 0xfe, 0x7f, 0xfb, 0x35, 0x7d, 0xc6, 0x01, 0x23, 0x28, 0xc4, 0x02, 0xac, 0x1f, 0x42, 0xb4, 0x9d, 0xfc, 0x00, 0x94, 0xa5, 0xee, 0xca, 0xda, 0x97, 0x09, 0x41, 0x77, 0x87, 0x5d, 0x7b, 0x87, 0x78 } }, + { { 0xf5, 0xfb, 0x90, 0x2d, 0x81, 0x19, 0x9e, 0x2f, 0x6d, 0x85, 0x88, 0x8c, 0x40, 0x5c, 0x77, 0x41, 0x4d, 0x01, 0x19, 0x76, 0x60, 0xe8, 0x4c, 0x48, 0xe4, 0x33, 0x83, 0x32, 0x6c, 0xb4, 0x41, 0x03 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xff, 0x10, 0xc2, 0x09, 0x4f, 0x6e, 0xf4, 0xd2, 0xdf, 0x7e, 0xca, 0x7b, 0x1c, 0x1d, 0xba, 0xa3, 0xb6, 0xda, 0x67, 0x33, 0xd4, 0x87, 0x36, 0x4b, 0x11, 0x20, 0x05, 0xa6, 0x29, 0xc1, 0x87, 0x17 } }, + { { 0xf6, 0x96, 0xca, 0x2f, 0xda, 0x38, 0xa7, 0x1b, 0xfc, 0xca, 0x7d, 0xfe, 0x08, 0x89, 0xe2, 0x47, 0x2b, 0x6a, 0x5d, 0x4b, 0xfa, 0xa1, 0xb4, 0xde, 0xb6, 0xc2, 0x31, 0x51, 0xf5, 0xe0, 0xa4, 0x0b } } }, + { { { 0x5c, 0xe5, 0xc6, 0x04, 0x8e, 0x2b, 0x57, 0xbe, 0x38, 0x85, 0x23, 0xcb, 0xb7, 0xbe, 0x4f, 0xa9, 0xd3, 0x6e, 0x12, 0xaa, 0xd5, 0xb2, 0x2e, 0x93, 0x29, 0x9a, 0x4a, 0x88, 0x18, 0x43, 0xf5, 0x01 } }, + { { 0x50, 0xfc, 0xdb, 0xa2, 0x59, 0x21, 0x8d, 0xbd, 0x7e, 0x33, 0xae, 0x2f, 0x87, 0x1a, 0xd0, 0x97, 0xc7, 0x0d, 0x4d, 0x63, 0x01, 0xef, 0x05, 0x84, 0xec, 0x40, 0xdd, 0xa8, 0x0a, 0x4f, 0x70, 0x0b } } }, + { { { 0x41, 0x69, 0x01, 0x67, 0x5c, 0xd3, 0x8a, 0xc5, 0xcf, 0x3f, 0xd1, 0x57, 0xd1, 0x67, 0x3e, 0x01, 0x39, 0xb5, 0xcb, 0x81, 0x56, 0x96, 0x26, 0xb6, 0xc2, 0xe7, 0x5c, 0xfb, 0x63, 0x97, 0x58, 0x06 } }, + { { 0x0c, 0x0e, 0xf3, 0xba, 0xf0, 0xe5, 0xba, 0xb2, 0x57, 0x77, 0xc6, 0x20, 0x9b, 0x89, 0x24, 0xbe, 0xf2, 0x9c, 0x8a, 0xba, 0x69, 0xc1, 0xf1, 0xb0, 0x4f, 0x2a, 0x05, 0x9a, 0xee, 0x10, 0x7e, 0x36 } } }, + { { { 0x3f, 0x26, 0xe9, 0x40, 0xe9, 0x03, 0xad, 0x06, 0x69, 0x91, 0xe0, 0xd1, 0x89, 0x60, 0x84, 0x79, 0xde, 0x27, 0x6d, 0xe6, 0x76, 0xbd, 0xea, 0xe6, 0xae, 0x48, 0xc3, 0x67, 0xc0, 0x57, 0xcd, 0x2f } }, + { { 0x7f, 0xc1, 0xdc, 0xb9, 0xc7, 0xbc, 0x86, 0x3d, 0x55, 0x4b, 0x28, 0x7a, 0xfb, 0x4d, 0xc7, 0xf8, 0xbc, 0x67, 0x2a, 0x60, 0x4d, 0x8f, 0x07, 0x0b, 0x1a, 0x17, 0xbf, 0xfa, 0xac, 0xa7, 0x3d, 0x1a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x91, 0x3f, 0xed, 0x5e, 0x18, 0x78, 0x3f, 0x23, 0x2c, 0x0d, 0x8c, 0x44, 0x00, 0xe8, 0xfb, 0xe9, 0x8e, 0xd6, 0xd1, 0x36, 0x58, 0x57, 0x9e, 0xae, 0x4b, 0x5c, 0x0b, 0x07, 0xbc, 0x6b, 0x55, 0x2b } }, + { { 0x6f, 0x4d, 0x17, 0xd7, 0xe1, 0x84, 0xd9, 0x78, 0xb1, 0x90, 0xfd, 0x2e, 0xb3, 0xb5, 0x19, 0x3f, 0x1b, 0xfa, 0xc0, 0x68, 0xb3, 0xdd, 0x00, 0x2e, 0x89, 0xbd, 0x7e, 0x80, 0x32, 0x13, 0xa0, 0x7b } } }, + { { { 0x1a, 0x6f, 0x40, 0xaf, 0x44, 0x44, 0xb0, 0x43, 0x8f, 0x0d, 0xd0, 0x1e, 0xc4, 0x0b, 0x19, 0x5d, 0x8e, 0xfe, 0xc1, 0xf3, 0xc5, 0x5c, 0x91, 0xf8, 0x04, 0x4e, 0xbe, 0x90, 0xb4, 0x47, 0x5c, 0x3f } }, + { { 0xb0, 0x3b, 0x2c, 0xf3, 0xfe, 0x32, 0x71, 0x07, 0x3f, 0xaa, 0xba, 0x45, 0x60, 0xa8, 0x8d, 0xea, 0x54, 0xcb, 0x39, 0x10, 0xb4, 0xf2, 0x8b, 0xd2, 0x14, 0x82, 0x42, 0x07, 0x8e, 0xe9, 0x7c, 0x53 } } }, + { { { 0xb0, 0xae, 0xc1, 0x8d, 0xc9, 0x8f, 0xb9, 0x7a, 0x77, 0xef, 0xba, 0x79, 0xa0, 0x3c, 0xa8, 0xf5, 0x6a, 0xe2, 0x3f, 0x5d, 0x00, 0xe3, 0x4b, 0x45, 0x24, 0x7b, 0x43, 0x78, 0x55, 0x1d, 0x2b, 0x1e } }, + { { 0x01, 0xb8, 0xd6, 0x16, 0x67, 0xa0, 0x15, 0xb9, 0xe1, 0x58, 0xa4, 0xa7, 0x31, 0x37, 0x77, 0x2f, 0x8b, 0x12, 0x9f, 0xf4, 0x3f, 0xc7, 0x36, 0x66, 0xd2, 0xa8, 0x56, 0xf7, 0x7f, 0x74, 0xc6, 0x41 } } }, + { { { 0x5d, 0xf8, 0xb4, 0xa8, 0x30, 0xdd, 0xcc, 0x38, 0xa5, 0xd3, 0xca, 0xd8, 0xd1, 0xf8, 0xb2, 0x31, 0x91, 0xd4, 0x72, 0x05, 0x57, 0x4a, 0x3b, 0x82, 0x4a, 0xc6, 0x68, 0x20, 0xe2, 0x18, 0x41, 0x61 } }, + { { 0x19, 0xd4, 0x8d, 0x47, 0x29, 0x12, 0x65, 0xb0, 0x11, 0x78, 0x47, 0xb5, 0xcb, 0xa3, 0xa5, 0xfa, 0x05, 0x85, 0x54, 0xa9, 0x33, 0x97, 0x8d, 0x2b, 0xc2, 0xfe, 0x99, 0x35, 0x28, 0xe5, 0xeb, 0x63 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xb1, 0x3f, 0x3f, 0xef, 0xd8, 0xf4, 0xfc, 0xb3, 0xa0, 0x60, 0x50, 0x06, 0x2b, 0x29, 0x52, 0x70, 0x15, 0x0b, 0x24, 0x24, 0xf8, 0x5f, 0x79, 0x18, 0xcc, 0xff, 0x89, 0x99, 0x84, 0xa1, 0xae, 0x13 } }, + { { 0x44, 0x1f, 0xb8, 0xc2, 0x01, 0xc1, 0x30, 0x19, 0x55, 0x05, 0x60, 0x10, 0xa4, 0x6c, 0x2d, 0x67, 0x70, 0xe5, 0x25, 0x1b, 0xf2, 0xbf, 0xdd, 0xfb, 0x70, 0x2b, 0xa1, 0x8c, 0x9c, 0x94, 0x84, 0x08 } } }, + { { { 0xe7, 0xc4, 0x43, 0x4d, 0xc9, 0x2b, 0x69, 0x5d, 0x1d, 0x3c, 0xaf, 0xbb, 0x43, 0x38, 0x4e, 0x98, 0x3d, 0xed, 0x0d, 0x21, 0x03, 0xfd, 0xf0, 0x99, 0x47, 0x04, 0xb0, 0x98, 0x69, 0x55, 0x72, 0x0f } }, + { { 0x5e, 0xdf, 0x15, 0x53, 0x3b, 0x86, 0x80, 0xb0, 0xf1, 0x70, 0x68, 0x8f, 0x66, 0x7c, 0x0e, 0x49, 0x1a, 0xd8, 0x6b, 0xfe, 0x4e, 0xef, 0xca, 0x47, 0xd4, 0x03, 0xc1, 0x37, 0x50, 0x9c, 0xc1, 0x16 } } }, + { { { 0xcd, 0x24, 0xc6, 0x3e, 0x0c, 0x82, 0x9b, 0x91, 0x2b, 0x61, 0x4a, 0xb2, 0x0f, 0x88, 0x55, 0x5f, 0x5a, 0x57, 0xff, 0xe5, 0x74, 0x0b, 0x13, 0x43, 0x00, 0xd8, 0x6b, 0xcf, 0xd2, 0x15, 0x03, 0x2c } }, + { { 0xdc, 0xff, 0x15, 0x61, 0x2f, 0x4a, 0x2f, 0x62, 0xf2, 0x04, 0x2f, 0xb5, 0x0c, 0xb7, 0x1e, 0x3f, 0x74, 0x1a, 0x0f, 0xd7, 0xea, 0xcd, 0xd9, 0x7d, 0xf6, 0x12, 0x0e, 0x2f, 0xdb, 0x5a, 0x3b, 0x16 } } }, + { { { 0x1b, 0x37, 0x47, 0xe3, 0xf5, 0x9e, 0xea, 0x2c, 0x2a, 0xe7, 0x82, 0x36, 0xf4, 0x1f, 0x81, 0x47, 0x92, 0x4b, 0x69, 0x0e, 0x11, 0x8c, 0x5d, 0x53, 0x5b, 0x81, 0x27, 0x08, 0xbc, 0xa0, 0xae, 0x25 } }, + { { 0x69, 0x32, 0xa1, 0x05, 0x11, 0x42, 0x00, 0xd2, 0x59, 0xac, 0x4d, 0x62, 0x8b, 0x13, 0xe2, 0x50, 0x5d, 0xa0, 0x9d, 0x9b, 0xfd, 0xbb, 0x12, 0x41, 0x75, 0x41, 0x9e, 0xcc, 0xdc, 0xc7, 0xdc, 0x5d } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xd9, 0xe3, 0x38, 0x06, 0x46, 0x70, 0x82, 0x5e, 0x28, 0x49, 0x79, 0xff, 0x25, 0xd2, 0x4e, 0x29, 0x8d, 0x06, 0xb0, 0x23, 0xae, 0x9b, 0x66, 0xe4, 0x7d, 0xc0, 0x70, 0x91, 0xa3, 0xfc, 0xec, 0x4e } }, + { { 0x62, 0x12, 0x37, 0x6a, 0x30, 0xf6, 0x1e, 0xfb, 0x14, 0x5c, 0x0d, 0x0e, 0xb7, 0x81, 0x6a, 0xe7, 0x08, 0x05, 0xac, 0xaa, 0x38, 0x46, 0xe2, 0x73, 0xea, 0x4b, 0x07, 0x81, 0x43, 0x7c, 0x9e, 0x5e } } }, + { { { 0xfc, 0xf9, 0x21, 0x4f, 0x2e, 0x76, 0x9b, 0x1f, 0x28, 0x60, 0x77, 0x43, 0x32, 0x9d, 0xbe, 0x17, 0x30, 0x2a, 0xc6, 0x18, 0x92, 0x66, 0x62, 0x30, 0x98, 0x40, 0x11, 0xa6, 0x7f, 0x18, 0x84, 0x28 } }, + { { 0x3f, 0xab, 0xd3, 0xf4, 0x8a, 0x76, 0xa1, 0x3c, 0xca, 0x2d, 0x49, 0xc3, 0xea, 0x08, 0x0b, 0x85, 0x17, 0x2a, 0xc3, 0x6c, 0x08, 0xfd, 0x57, 0x9f, 0x3d, 0x5f, 0xdf, 0x67, 0x68, 0x42, 0x00, 0x32 } } }, + { { { 0x51, 0x60, 0x1b, 0x06, 0x4f, 0x8a, 0x21, 0xba, 0x38, 0xa8, 0xba, 0xd6, 0x40, 0xf6, 0xe9, 0x9b, 0x76, 0x4d, 0x56, 0x21, 0x5b, 0x0a, 0x9b, 0x2e, 0x4f, 0x3d, 0x81, 0x32, 0x08, 0x9f, 0x97, 0x5b } }, + { { 0xe5, 0x44, 0xec, 0x06, 0x9d, 0x90, 0x79, 0x9f, 0xd3, 0xe0, 0x79, 0xaf, 0x8f, 0x10, 0xfd, 0xdd, 0x04, 0xae, 0x27, 0x97, 0x46, 0x33, 0x79, 0xea, 0xb8, 0x4e, 0xca, 0x5a, 0x59, 0x57, 0xe1, 0x0e } } }, + { { { 0x1a, 0xda, 0xf3, 0xa5, 0x41, 0x43, 0x28, 0xfc, 0x7e, 0xe7, 0x71, 0xea, 0xc6, 0x3b, 0x59, 0xcc, 0x2e, 0xd3, 0x40, 0xec, 0xb3, 0x13, 0x6f, 0x44, 0xcd, 0x13, 0xb2, 0x37, 0xf2, 0x6e, 0xd9, 0x1c } }, + { { 0xe3, 0xdb, 0x60, 0xcd, 0x5c, 0x4a, 0x18, 0x0f, 0xef, 0x73, 0x36, 0x71, 0x8c, 0xf6, 0x11, 0xb4, 0xd8, 0xce, 0x17, 0x5e, 0x4f, 0x26, 0x77, 0x97, 0x5f, 0xcb, 0xef, 0x91, 0xeb, 0x6a, 0x62, 0x7a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x18, 0x4a, 0xa2, 0x97, 0x08, 0x81, 0x2d, 0x83, 0xc4, 0xcc, 0xf0, 0x83, 0x7e, 0xec, 0x0d, 0x95, 0x4c, 0x5b, 0xfb, 0xfa, 0x98, 0x80, 0x4a, 0x66, 0x56, 0x0c, 0x51, 0xb3, 0xf2, 0x04, 0x5d, 0x27 } }, + { { 0x3b, 0xb9, 0xb8, 0x06, 0x5a, 0x2e, 0xfe, 0xc3, 0x82, 0x37, 0x9c, 0xa3, 0x11, 0x1f, 0x9c, 0xa6, 0xda, 0x63, 0x48, 0x9b, 0xad, 0xde, 0x2d, 0xa6, 0xbc, 0x6e, 0x32, 0xda, 0x27, 0x65, 0xdd, 0x57 } } }, + { { { 0x84, 0x4f, 0x37, 0x31, 0x7d, 0x2e, 0xbc, 0xad, 0x87, 0x07, 0x2a, 0x6b, 0x37, 0xfc, 0x5f, 0xeb, 0x4e, 0x75, 0x35, 0xa6, 0xde, 0xab, 0x0a, 0x19, 0x3a, 0xb7, 0xb1, 0xef, 0x92, 0x6a, 0x3b, 0x3c } }, + { { 0x3b, 0xb2, 0x94, 0x6d, 0x39, 0x60, 0xac, 0xee, 0xe7, 0x81, 0x1a, 0x3b, 0x76, 0x87, 0x5c, 0x05, 0x94, 0x2a, 0x45, 0xb9, 0x80, 0xe9, 0x22, 0xb1, 0x07, 0xcb, 0x40, 0x9e, 0x70, 0x49, 0x6d, 0x12 } } }, + { { { 0xfd, 0x18, 0x78, 0x84, 0xa8, 0x4c, 0x7d, 0x6e, 0x59, 0xa6, 0xe5, 0x74, 0xf1, 0x19, 0xa6, 0x84, 0x2e, 0x51, 0xc1, 0x29, 0x13, 0xf2, 0x14, 0x6b, 0x5d, 0x53, 0x51, 0xf7, 0xef, 0xbf, 0x01, 0x22 } }, + { { 0xa4, 0x4b, 0x62, 0x4c, 0xe6, 0xfd, 0x72, 0x07, 0xf2, 0x81, 0xfc, 0xf2, 0xbd, 0x12, 0x7c, 0x68, 0x76, 0x2a, 0xba, 0xf5, 0x65, 0xb1, 0x1f, 0x17, 0x0a, 0x38, 0xb0, 0xbf, 0xc0, 0xf8, 0xf4, 0x2a } } }, + { { { 0x55, 0x60, 0x55, 0x5b, 0xe4, 0x1d, 0x71, 0x4c, 0x9d, 0x5b, 0x9f, 0x70, 0xa6, 0x85, 0x9a, 0x2c, 0xa0, 0xe2, 0x32, 0x48, 0xce, 0x9e, 0x2a, 0xa5, 0x07, 0x3b, 0xc7, 0x6c, 0x86, 0x77, 0xde, 0x3c } }, + { { 0xf7, 0x18, 0x7a, 0x96, 0x7e, 0x43, 0x57, 0xa9, 0x55, 0xfc, 0x4e, 0xb6, 0x72, 0x00, 0xf2, 0xe4, 0xd7, 0x52, 0xd3, 0xd3, 0xb6, 0x85, 0xf6, 0x71, 0xc7, 0x44, 0x3f, 0x7f, 0xd7, 0xb3, 0xf2, 0x79 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x46, 0xca, 0xa7, 0x55, 0x7b, 0x79, 0xf3, 0xca, 0x5a, 0x65, 0xf6, 0xed, 0x50, 0x14, 0x7b, 0xe4, 0xc4, 0x2a, 0x65, 0x9e, 0xe2, 0xf9, 0xca, 0xa7, 0x22, 0x26, 0x53, 0xcb, 0x21, 0x5b, 0xa7, 0x31 } }, + { { 0x90, 0xd7, 0xc5, 0x26, 0x08, 0xbd, 0xb0, 0x53, 0x63, 0x58, 0xc3, 0x31, 0x5e, 0x75, 0x46, 0x15, 0x91, 0xa6, 0xf8, 0x2f, 0x1a, 0x08, 0x65, 0x88, 0x2f, 0x98, 0x04, 0xf1, 0x7c, 0x6e, 0x00, 0x77 } } }, + { { { 0x81, 0x21, 0x61, 0x09, 0xf6, 0x4e, 0xf1, 0x92, 0xee, 0x63, 0x61, 0x73, 0x87, 0xc7, 0x54, 0x0e, 0x42, 0x4b, 0xc9, 0x47, 0xd1, 0xb8, 0x7e, 0x91, 0x75, 0x37, 0x99, 0x28, 0xb8, 0xdd, 0x7f, 0x50 } }, + { { 0x89, 0x8f, 0xc0, 0xbe, 0x5d, 0xd6, 0x9f, 0xa0, 0xf0, 0x9d, 0x81, 0xce, 0x3a, 0x7b, 0x98, 0x58, 0xbb, 0xd7, 0x78, 0xc8, 0x3f, 0x13, 0xf1, 0x74, 0x19, 0xdf, 0xf8, 0x98, 0x89, 0x5d, 0xfa, 0x5f } } }, + { { { 0x9e, 0x35, 0x85, 0x94, 0x47, 0x1f, 0x90, 0x15, 0x26, 0xd0, 0x84, 0xed, 0x8a, 0x80, 0xf7, 0x63, 0x42, 0x86, 0x27, 0xd7, 0xf4, 0x75, 0x58, 0xdc, 0x9c, 0xc0, 0x22, 0x7e, 0x20, 0x35, 0xfd, 0x1f } }, + { { 0x68, 0x0e, 0x6f, 0x97, 0xba, 0x70, 0xbb, 0xa3, 0x0e, 0xe5, 0x0b, 0x12, 0xf4, 0xa2, 0xdc, 0x47, 0xf8, 0xe6, 0xd0, 0x23, 0x6c, 0x33, 0xa8, 0x99, 0x46, 0x6e, 0x0f, 0x44, 0xba, 0x76, 0x48, 0x0f } } }, + { { { 0xa3, 0x2a, 0x61, 0x37, 0xe2, 0x59, 0x12, 0x0e, 0x27, 0xba, 0x64, 0x43, 0xae, 0xc0, 0x42, 0x69, 0x79, 0xa4, 0x1e, 0x29, 0x8b, 0x15, 0xeb, 0xf8, 0xaf, 0xd4, 0xa2, 0x68, 0x33, 0xb5, 0x7a, 0x24 } }, + { { 0x2c, 0x19, 0x33, 0xdd, 0x1b, 0xab, 0xec, 0x01, 0xb0, 0x23, 0xf8, 0x42, 0x2b, 0x06, 0x88, 0xea, 0x3d, 0x2d, 0x00, 0x2a, 0x78, 0x45, 0x4d, 0x38, 0xed, 0x2e, 0x2e, 0x44, 0x49, 0xed, 0xcb, 0x33 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xa0, 0x68, 0xe8, 0x41, 0x8f, 0x91, 0xf8, 0x11, 0x13, 0x90, 0x2e, 0xa7, 0xab, 0x30, 0xef, 0xad, 0xa0, 0x61, 0x00, 0x88, 0xef, 0xdb, 0xce, 0x5b, 0x5c, 0xbb, 0x62, 0xc8, 0x56, 0xf9, 0x00, 0x73 } }, + { { 0x3f, 0x60, 0xc1, 0x82, 0x2d, 0xa3, 0x28, 0x58, 0x24, 0x9e, 0x9f, 0xe3, 0x70, 0xcc, 0x09, 0x4e, 0x1a, 0x3f, 0x11, 0x11, 0x15, 0x07, 0x3c, 0xa4, 0x41, 0xe0, 0x65, 0xa3, 0x0a, 0x41, 0x6d, 0x11 } } }, + { { { 0x31, 0x40, 0x01, 0x52, 0x56, 0x94, 0x5b, 0x28, 0x8a, 0xaa, 0x52, 0xee, 0xd8, 0x0a, 0x05, 0x8d, 0xcd, 0xb5, 0xaa, 0x2e, 0x38, 0xaa, 0xb7, 0x87, 0xf7, 0x2b, 0xfb, 0x04, 0xcb, 0x84, 0x3d, 0x54 } }, + { { 0x20, 0xef, 0x59, 0xde, 0xa4, 0x2b, 0x93, 0x6e, 0x2e, 0xec, 0x42, 0x9a, 0xd4, 0x2d, 0xf4, 0x46, 0x58, 0x27, 0x2b, 0x18, 0x8f, 0x83, 0x3d, 0x69, 0x9e, 0xd4, 0x3e, 0xb6, 0xc5, 0xfd, 0x58, 0x03 } } }, + { { { 0x33, 0x89, 0xc9, 0x63, 0x62, 0x1c, 0x17, 0xb4, 0x60, 0xc4, 0x26, 0x68, 0x09, 0xc3, 0x2e, 0x37, 0x0f, 0x7b, 0xb4, 0x9c, 0xb6, 0xf9, 0xfb, 0xd4, 0x51, 0x78, 0xc8, 0x63, 0xea, 0x77, 0x47, 0x07 } }, + { { 0x32, 0xb4, 0x18, 0x47, 0x79, 0xcb, 0xd4, 0x5a, 0x07, 0x14, 0x0f, 0xa0, 0xd5, 0xac, 0xd0, 0x41, 0x40, 0xab, 0x61, 0x23, 0xe5, 0x2a, 0x2a, 0x6f, 0xf7, 0xa8, 0xd4, 0x76, 0xef, 0xe7, 0x45, 0x6c } } }, + { { { 0xa1, 0x5e, 0x60, 0x4f, 0xfb, 0xe1, 0x70, 0x6a, 0x1f, 0x55, 0x4f, 0x09, 0xb4, 0x95, 0x33, 0x36, 0xc6, 0x81, 0x01, 0x18, 0x06, 0x25, 0x27, 0xa4, 0xb4, 0x24, 0xa4, 0x86, 0x03, 0x4c, 0xac, 0x02 } }, + { { 0x77, 0x38, 0xde, 0xd7, 0x60, 0x48, 0x07, 0xf0, 0x74, 0xa8, 0xff, 0x54, 0xe5, 0x30, 0x43, 0xff, 0x77, 0xfb, 0x21, 0x07, 0xff, 0xb2, 0x07, 0x6b, 0xe4, 0xe5, 0x30, 0xfc, 0x19, 0x6c, 0xa3, 0x01 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x13, 0xc5, 0x2c, 0xac, 0xd3, 0x83, 0x82, 0x7c, 0x29, 0xf7, 0x05, 0xa5, 0x00, 0xb6, 0x1f, 0x86, 0x55, 0xf4, 0xd6, 0x2f, 0x0c, 0x99, 0xd0, 0x65, 0x9b, 0x6b, 0x46, 0x0d, 0x43, 0xf8, 0x16, 0x28 } }, + { { 0x1e, 0x7f, 0xb4, 0x74, 0x7e, 0xb1, 0x89, 0x4f, 0x18, 0x5a, 0xab, 0x64, 0x06, 0xdf, 0x45, 0x87, 0xe0, 0x6a, 0xc6, 0xf0, 0x0e, 0xc9, 0x24, 0x35, 0x38, 0xea, 0x30, 0x54, 0xb4, 0xc4, 0x52, 0x54 } } }, + { { { 0xe9, 0x9f, 0xdc, 0x3f, 0xc1, 0x89, 0x44, 0x74, 0x27, 0xe4, 0xc1, 0x90, 0xff, 0x4a, 0xa7, 0x3c, 0xee, 0xcd, 0xf4, 0x1d, 0x25, 0x94, 0x7f, 0x63, 0x16, 0x48, 0xbc, 0x64, 0xfe, 0x95, 0xc4, 0x0c } }, + { { 0x8b, 0x19, 0x75, 0x6e, 0x03, 0x06, 0x5e, 0x6a, 0x6f, 0x1a, 0x8c, 0xe3, 0xd3, 0x28, 0xf2, 0xe0, 0xb9, 0x7a, 0x43, 0x69, 0xe6, 0xd3, 0xc0, 0xfe, 0x7e, 0x97, 0xab, 0x6c, 0x7b, 0x8e, 0x13, 0x42 } } }, + { { { 0xd4, 0xca, 0x70, 0x3d, 0xab, 0xfb, 0x5f, 0x5e, 0x00, 0x0c, 0xcc, 0x77, 0x22, 0xf8, 0x78, 0x55, 0xae, 0x62, 0x35, 0xfb, 0x9a, 0xc6, 0x03, 0xe4, 0x0c, 0xee, 0xab, 0xc7, 0xc0, 0x89, 0x87, 0x54 } }, + { { 0x32, 0xad, 0xae, 0x85, 0x58, 0x43, 0xb8, 0xb1, 0xe6, 0x3e, 0x00, 0x9c, 0x78, 0x88, 0x56, 0xdb, 0x9c, 0xfc, 0x79, 0xf6, 0xf9, 0x41, 0x5f, 0xb7, 0xbc, 0x11, 0xf9, 0x20, 0x36, 0x1c, 0x53, 0x2b } } }, + { { { 0x5a, 0x20, 0x5b, 0xa1, 0xa5, 0x44, 0x91, 0x24, 0x02, 0x63, 0x12, 0x64, 0xb8, 0x55, 0xf6, 0xde, 0x2c, 0xdb, 0x47, 0xb8, 0xc6, 0x0a, 0xc3, 0x00, 0x78, 0x93, 0xd8, 0xf5, 0xf5, 0x18, 0x28, 0x0a } }, + { { 0xd6, 0x1b, 0x9a, 0x6c, 0xe5, 0x46, 0xea, 0x70, 0x96, 0x8d, 0x4e, 0x2a, 0x52, 0x21, 0x26, 0x4b, 0xb1, 0xbb, 0x0f, 0x7c, 0xa9, 0x9b, 0x04, 0xbb, 0x51, 0x08, 0xf1, 0x9a, 0xa4, 0x76, 0x7c, 0x18 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xfa, 0x94, 0xf7, 0x40, 0xd0, 0xd7, 0xeb, 0xa9, 0x82, 0x36, 0xd5, 0x15, 0xb9, 0x33, 0x7a, 0xbf, 0x8a, 0xf2, 0x63, 0xaa, 0x37, 0xf5, 0x59, 0xac, 0xbd, 0xbb, 0x32, 0x36, 0xbe, 0x73, 0x99, 0x38 } }, + { { 0x2c, 0xb3, 0xda, 0x7a, 0xd8, 0x3d, 0x99, 0xca, 0xd2, 0xf4, 0xda, 0x99, 0x8e, 0x4f, 0x98, 0xb7, 0xf4, 0xae, 0x3e, 0x9f, 0x8e, 0x35, 0x60, 0xa4, 0x33, 0x75, 0xa4, 0x04, 0x93, 0xb1, 0x6b, 0x4d } } }, + { { { 0x97, 0x9d, 0xa8, 0xcd, 0x97, 0x7b, 0x9d, 0xb9, 0xe7, 0xa5, 0xef, 0xfd, 0xa8, 0x42, 0x6b, 0xc3, 0x62, 0x64, 0x7d, 0xa5, 0x1b, 0xc9, 0x9e, 0xd2, 0x45, 0xb9, 0xee, 0x03, 0xb0, 0xbf, 0xc0, 0x68 } }, + { { 0xed, 0xb7, 0x84, 0x2c, 0xf6, 0xd3, 0xa1, 0x6b, 0x24, 0x6d, 0x87, 0x56, 0x97, 0x59, 0x79, 0x62, 0x9f, 0xac, 0xed, 0xf3, 0xc9, 0x89, 0x21, 0x2e, 0x04, 0xb3, 0xcc, 0x2f, 0xbe, 0xd6, 0x0a, 0x4b } } }, + { { { 0x39, 0x61, 0x05, 0xed, 0x25, 0x89, 0x8b, 0x5d, 0x1b, 0xcb, 0x0c, 0x55, 0xf4, 0x6a, 0x00, 0x8a, 0x46, 0xe8, 0x1e, 0xc6, 0x83, 0xc8, 0x5a, 0x76, 0xdb, 0xcc, 0x19, 0x7a, 0xcc, 0x67, 0x46, 0x0b } }, + { { 0x53, 0xcf, 0xc2, 0xa1, 0xad, 0x6a, 0xf3, 0xcd, 0x8f, 0xc9, 0xde, 0x1c, 0xf8, 0x6c, 0x8f, 0xf8, 0x76, 0x42, 0xe7, 0xfe, 0xb2, 0x72, 0x21, 0x0a, 0x66, 0x74, 0x8f, 0xb7, 0xeb, 0xe4, 0x6f, 0x01 } } }, + { { { 0x22, 0x8c, 0x6b, 0xbe, 0xfc, 0x4d, 0x70, 0x62, 0x6e, 0x52, 0x77, 0x99, 0x88, 0x7e, 0x7b, 0x57, 0x7a, 0x0d, 0xfe, 0xdc, 0x72, 0x92, 0xf1, 0x68, 0x1d, 0x97, 0xd7, 0x7c, 0x8d, 0x53, 0x10, 0x37 } }, + { { 0x53, 0x88, 0x77, 0x02, 0xca, 0x27, 0xa8, 0xe5, 0x45, 0xe2, 0xa8, 0x48, 0x2a, 0xab, 0x18, 0xca, 0xea, 0x2d, 0x2a, 0x54, 0x17, 0x37, 0x32, 0x09, 0xdc, 0xe0, 0x4a, 0xb7, 0x7d, 0x82, 0x10, 0x7d } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x8a, 0x64, 0x1e, 0x14, 0x0a, 0x57, 0xd4, 0xda, 0x5c, 0x96, 0x9b, 0x01, 0x4c, 0x67, 0xbf, 0x8b, 0x30, 0xfe, 0x08, 0xdb, 0x0d, 0xd5, 0xa8, 0xd7, 0x09, 0x11, 0x85, 0xa2, 0xd3, 0x45, 0xfb, 0x7e } }, + { { 0xda, 0x8c, 0xc2, 0xd0, 0xac, 0x18, 0xe8, 0x52, 0x36, 0xd4, 0x21, 0xa3, 0xdd, 0x57, 0x22, 0x79, 0xb7, 0xf8, 0x71, 0x9d, 0xc6, 0x91, 0x70, 0x86, 0x56, 0xbf, 0xa1, 0x11, 0x8b, 0x19, 0xe1, 0x0f } } }, + { { { 0x18, 0x32, 0x98, 0x2c, 0x8f, 0x91, 0xae, 0x12, 0xf0, 0x8c, 0xea, 0xf3, 0x3c, 0xb9, 0x5d, 0xe4, 0x69, 0xed, 0xb2, 0x47, 0x18, 0xbd, 0xce, 0x16, 0x52, 0x5c, 0x23, 0xe2, 0xa5, 0x25, 0x52, 0x5d } }, + { { 0xb9, 0xb1, 0xe7, 0x5d, 0x4e, 0xbc, 0xee, 0xbb, 0x40, 0x81, 0x77, 0x82, 0x19, 0xab, 0xb5, 0xc6, 0xee, 0xab, 0x5b, 0x6b, 0x63, 0x92, 0x8a, 0x34, 0x8d, 0xcd, 0xee, 0x4f, 0x49, 0xe5, 0xc9, 0x7e } } }, + { { { 0x21, 0xac, 0x8b, 0x22, 0xcd, 0xc3, 0x9a, 0xe9, 0x5e, 0x78, 0xbd, 0xde, 0xba, 0xad, 0xab, 0xbf, 0x75, 0x41, 0x09, 0xc5, 0x58, 0xa4, 0x7d, 0x92, 0xb0, 0x7f, 0xf2, 0xa1, 0xd1, 0xc0, 0xb3, 0x6d } }, + { { 0x62, 0x4f, 0xd0, 0x75, 0x77, 0xba, 0x76, 0x77, 0xd7, 0xb8, 0xd8, 0x92, 0x6f, 0x98, 0x34, 0x3d, 0xd6, 0x4e, 0x1c, 0x0f, 0xf0, 0x8f, 0x2e, 0xf1, 0xb3, 0xbd, 0xb1, 0xb9, 0xec, 0x99, 0xb4, 0x07 } } }, + { { { 0x60, 0x57, 0x2e, 0x9a, 0x72, 0x1d, 0x6b, 0x6e, 0x58, 0x33, 0x24, 0x8c, 0x48, 0x39, 0x46, 0x8e, 0x89, 0x6a, 0x88, 0x51, 0x23, 0x62, 0xb5, 0x32, 0x09, 0x36, 0xe3, 0x57, 0xf5, 0x98, 0xde, 0x6f } }, + { { 0x8b, 0x2c, 0x00, 0x48, 0x4a, 0xf9, 0x5b, 0x87, 0x69, 0x52, 0xe5, 0x5b, 0xd1, 0xb1, 0xe5, 0x25, 0x25, 0xe0, 0x9c, 0xc2, 0x13, 0x44, 0xe8, 0xb9, 0x0a, 0x70, 0xad, 0xbd, 0x0f, 0x51, 0x94, 0x69 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xa2, 0xdc, 0xab, 0xa9, 0x25, 0x2d, 0xac, 0x5f, 0x03, 0x33, 0x08, 0xe7, 0x7e, 0xfe, 0x95, 0x36, 0x3c, 0x5b, 0x3a, 0xd3, 0x05, 0x82, 0x1c, 0x95, 0x2d, 0xd8, 0x77, 0x7e, 0x02, 0xd9, 0x5b, 0x70 } }, + { { 0xc2, 0xfe, 0x1b, 0x0c, 0x67, 0xcd, 0xd6, 0xe0, 0x51, 0x8e, 0x2c, 0xe0, 0x79, 0x88, 0xf0, 0xcf, 0x41, 0x4a, 0xad, 0x23, 0xd4, 0x46, 0xca, 0x94, 0xa1, 0xc3, 0xeb, 0x28, 0x06, 0xfa, 0x17, 0x14 } } }, + { { { 0x7b, 0xaa, 0x70, 0x0a, 0x4b, 0xfb, 0xf5, 0xbf, 0x80, 0xc5, 0xcf, 0x08, 0x7a, 0xdd, 0xa1, 0xf4, 0x9d, 0x54, 0x50, 0x53, 0x23, 0x77, 0x23, 0xf5, 0x34, 0xa5, 0x22, 0xd1, 0x0d, 0x96, 0x2e, 0x47 } }, + { { 0xcc, 0xb7, 0x32, 0x89, 0x57, 0xd0, 0x98, 0x75, 0xe4, 0x37, 0x99, 0xa9, 0xe8, 0xba, 0xed, 0xba, 0xeb, 0xc7, 0x4f, 0x15, 0x76, 0x07, 0x0c, 0x4c, 0xef, 0x9f, 0x52, 0xfc, 0x04, 0x5d, 0x58, 0x10 } } }, + { { { 0xce, 0x82, 0xf0, 0x8f, 0x79, 0x02, 0xa8, 0xd1, 0xda, 0x14, 0x09, 0x48, 0xee, 0x8a, 0x40, 0x98, 0x76, 0x60, 0x54, 0x5a, 0xde, 0x03, 0x24, 0xf5, 0xe6, 0x2f, 0xe1, 0x03, 0xbf, 0x68, 0x82, 0x7f } }, + { { 0x64, 0xe9, 0x28, 0xc7, 0xa4, 0xcf, 0x2a, 0xf9, 0x90, 0x64, 0x72, 0x2c, 0x8b, 0xeb, 0xec, 0xa0, 0xf2, 0x7d, 0x35, 0xb5, 0x90, 0x4d, 0x7f, 0x5b, 0x4a, 0x49, 0xe4, 0xb8, 0x3b, 0xc8, 0xa1, 0x2f } } }, + { { { 0x8b, 0xc5, 0xcc, 0x3d, 0x69, 0xa6, 0xa1, 0x18, 0x44, 0xbc, 0x4d, 0x77, 0x37, 0xc7, 0x86, 0xec, 0x0c, 0xc9, 0xd6, 0x44, 0xa9, 0x23, 0x27, 0xb9, 0x03, 0x34, 0xa7, 0x0a, 0xd5, 0xc7, 0x34, 0x37 } }, + { { 0xf9, 0x7e, 0x3e, 0x66, 0xee, 0xf9, 0x99, 0x28, 0xff, 0xad, 0x11, 0xd8, 0xe2, 0x66, 0xc5, 0xcd, 0x0f, 0x0d, 0x0b, 0x6a, 0xfc, 0x7c, 0x24, 0xa8, 0x4f, 0xa8, 0x5e, 0x80, 0x45, 0x8b, 0x6c, 0x41 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xef, 0x1e, 0xec, 0xf7, 0x8d, 0x77, 0xf2, 0xea, 0xdb, 0x60, 0x03, 0x21, 0xc0, 0xff, 0x5e, 0x67, 0xc3, 0x71, 0x0b, 0x21, 0xb4, 0x41, 0xa0, 0x68, 0x38, 0xc6, 0x01, 0xa3, 0xd3, 0x51, 0x3c, 0x3c } }, + { { 0x92, 0xf8, 0xd6, 0x4b, 0xef, 0x42, 0x13, 0xb2, 0x4a, 0xc4, 0x2e, 0x72, 0x3f, 0xc9, 0x11, 0xbd, 0x74, 0x02, 0x0e, 0xf5, 0x13, 0x9d, 0x83, 0x1a, 0x1b, 0xd5, 0x54, 0xde, 0xc4, 0x1e, 0x16, 0x6c } } }, + { { { 0x27, 0x52, 0xe4, 0x63, 0xaa, 0x94, 0xe6, 0xc3, 0x28, 0x9c, 0xc6, 0x56, 0xac, 0xfa, 0xb6, 0xbd, 0xe2, 0xcc, 0x76, 0xc6, 0x27, 0x27, 0xa2, 0x8e, 0x78, 0x2b, 0x84, 0x72, 0x10, 0xbd, 0x4e, 0x2a } }, + { { 0xea, 0xa7, 0x23, 0xef, 0x04, 0x61, 0x80, 0x50, 0xc9, 0x6e, 0xa5, 0x96, 0xd1, 0xd1, 0xc8, 0xc3, 0x18, 0xd7, 0x2d, 0xfd, 0x26, 0xbd, 0xcb, 0x7b, 0x92, 0x51, 0x0e, 0x4a, 0x65, 0x57, 0xb8, 0x49 } } }, + { { { 0xab, 0x55, 0x36, 0xc3, 0xec, 0x63, 0x55, 0x11, 0x55, 0xf6, 0xa5, 0xc7, 0x01, 0x5f, 0xfe, 0x79, 0xd8, 0x0a, 0xf7, 0x03, 0xd8, 0x98, 0x99, 0xf5, 0xd0, 0x00, 0x54, 0x6b, 0x66, 0x28, 0xf5, 0x25 } }, + { { 0x7a, 0x8d, 0xa1, 0x5d, 0x70, 0x5d, 0x51, 0x27, 0xee, 0x30, 0x65, 0x56, 0x95, 0x46, 0xde, 0xbd, 0x03, 0x75, 0xb4, 0x57, 0x59, 0x89, 0xeb, 0x02, 0x9e, 0xcc, 0x89, 0x19, 0xa7, 0xcb, 0x17, 0x67 } } }, + { { { 0x6a, 0xeb, 0xfc, 0x9a, 0x9a, 0x10, 0xce, 0xdb, 0x3a, 0x1c, 0x3c, 0x6a, 0x9d, 0xea, 0x46, 0xbc, 0x45, 0x49, 0xac, 0xe3, 0x41, 0x12, 0x7c, 0xf0, 0xf7, 0x4f, 0xf9, 0xf7, 0xff, 0x2c, 0x89, 0x04 } }, + { { 0x30, 0x31, 0x54, 0x1a, 0x46, 0xca, 0xe6, 0xc6, 0xcb, 0xe2, 0xc3, 0xc1, 0x8b, 0x75, 0x81, 0xbe, 0xee, 0xf8, 0xa3, 0x11, 0x1c, 0x25, 0xa3, 0xa7, 0x35, 0x51, 0x55, 0xe2, 0x25, 0xaa, 0xe2, 0x3a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xb4, 0x48, 0x10, 0x9f, 0x8a, 0x09, 0x76, 0xfa, 0xf0, 0x7a, 0xb0, 0x70, 0xf7, 0x83, 0x80, 0x52, 0x84, 0x2b, 0x26, 0xa2, 0xc4, 0x5d, 0x4f, 0xba, 0xb1, 0xc8, 0x40, 0x0d, 0x78, 0x97, 0xc4, 0x60 } }, + { { 0xd4, 0xb1, 0x6c, 0x08, 0xc7, 0x40, 0x38, 0x73, 0x5f, 0x0b, 0xf3, 0x76, 0x5d, 0xb2, 0xa5, 0x2f, 0x57, 0x57, 0x07, 0xed, 0x08, 0xa2, 0x6c, 0x4f, 0x08, 0x02, 0xb5, 0x0e, 0xee, 0x44, 0xfa, 0x22 } } }, + { { { 0x0f, 0x00, 0x3f, 0xa6, 0x04, 0x19, 0x56, 0x65, 0x31, 0x7f, 0x8b, 0xeb, 0x0d, 0xe1, 0x47, 0x89, 0x97, 0x16, 0x53, 0xfa, 0x81, 0xa7, 0xaa, 0xb2, 0xbf, 0x67, 0xeb, 0x72, 0x60, 0x81, 0x0d, 0x48 } }, + { { 0x7e, 0x13, 0x33, 0xcd, 0xa8, 0x84, 0x56, 0x1e, 0x67, 0xaf, 0x6b, 0x43, 0xac, 0x17, 0xaf, 0x16, 0xc0, 0x52, 0x99, 0x49, 0x5b, 0x87, 0x73, 0x7e, 0xb5, 0x43, 0xda, 0x6b, 0x1d, 0x0f, 0x2d, 0x55 } } }, + { { { 0xe9, 0x58, 0x1f, 0xff, 0x84, 0x3f, 0x93, 0x1c, 0xcb, 0xe1, 0x30, 0x69, 0xa5, 0x75, 0x19, 0x7e, 0x14, 0x5f, 0xf8, 0xfc, 0x09, 0xdd, 0xa8, 0x78, 0x9d, 0xca, 0x59, 0x8b, 0xd1, 0x30, 0x01, 0x13 } }, + { { 0xff, 0x76, 0x03, 0xc5, 0x4b, 0x89, 0x99, 0x70, 0x00, 0x59, 0x70, 0x9c, 0xd5, 0xd9, 0x11, 0x89, 0x5a, 0x46, 0xfe, 0xef, 0xdc, 0xd9, 0x55, 0x2b, 0x45, 0xa7, 0xb0, 0x2d, 0xfb, 0x24, 0xc2, 0x29 } } }, + { { { 0x38, 0x06, 0xf8, 0x0b, 0xac, 0x82, 0xc4, 0x97, 0x2b, 0x90, 0xe0, 0xf7, 0xa8, 0xab, 0x6c, 0x08, 0x80, 0x66, 0x90, 0x46, 0xf7, 0x26, 0x2d, 0xf8, 0xf1, 0xc4, 0x6b, 0x4a, 0x82, 0x98, 0x8e, 0x37 } }, + { { 0x8e, 0xb4, 0xee, 0xb8, 0xd4, 0x3f, 0xb2, 0x1b, 0xe0, 0x0a, 0x3d, 0x75, 0x34, 0x28, 0xa2, 0x8e, 0xc4, 0x92, 0x7b, 0xfe, 0x60, 0x6e, 0x6d, 0xb8, 0x31, 0x1d, 0x62, 0x0d, 0x78, 0x14, 0x42, 0x11 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x5e, 0xa8, 0xd8, 0x04, 0x9b, 0x73, 0xc9, 0xc9, 0xdc, 0x0d, 0x73, 0xbf, 0x0a, 0x0a, 0x73, 0xff, 0x18, 0x1f, 0x9c, 0x51, 0xaa, 0xc6, 0xf1, 0x83, 0x25, 0xfd, 0xab, 0xa3, 0x11, 0xd3, 0x01, 0x24 } }, + { { 0x4d, 0xe3, 0x7e, 0x38, 0x62, 0x5e, 0x64, 0xbb, 0x2b, 0x53, 0xb5, 0x03, 0x68, 0xc4, 0xf2, 0x2b, 0x5a, 0x03, 0x32, 0x99, 0x4a, 0x41, 0x9a, 0xe1, 0x1a, 0xae, 0x8c, 0x48, 0xf3, 0x24, 0x32, 0x65 } } }, + { { { 0xe8, 0xdd, 0xad, 0x3a, 0x8c, 0xea, 0xf4, 0xb3, 0xb2, 0xe5, 0x73, 0xf2, 0xed, 0x8b, 0xbf, 0xed, 0xb1, 0x0c, 0x0c, 0xfb, 0x2b, 0xf1, 0x01, 0x48, 0xe8, 0x26, 0x03, 0x8e, 0x27, 0x4d, 0x96, 0x72 } }, + { { 0xc8, 0x09, 0x3b, 0x60, 0xc9, 0x26, 0x4d, 0x7c, 0xf2, 0x9c, 0xd4, 0xa1, 0x3b, 0x26, 0xc2, 0x04, 0x33, 0x44, 0x76, 0x3c, 0x02, 0xbb, 0x11, 0x42, 0x0c, 0x22, 0xb7, 0xc6, 0xe1, 0xac, 0xb4, 0x0e } } }, + { { { 0x6f, 0x85, 0xe7, 0xef, 0xde, 0x67, 0x30, 0xfc, 0xbf, 0x5a, 0xe0, 0x7b, 0x7a, 0x2a, 0x54, 0x6b, 0x5d, 0x62, 0x85, 0xa1, 0xf8, 0x16, 0x88, 0xec, 0x61, 0xb9, 0x96, 0xb5, 0xef, 0x2d, 0x43, 0x4d } }, + { { 0x7c, 0x31, 0x33, 0xcc, 0xe4, 0xcf, 0x6c, 0xff, 0x80, 0x47, 0x77, 0xd1, 0xd8, 0xe9, 0x69, 0x97, 0x98, 0x7f, 0x20, 0x57, 0x1d, 0x1d, 0x4f, 0x08, 0x27, 0xc8, 0x35, 0x57, 0x40, 0xc6, 0x21, 0x0c } } }, + { { { 0xd2, 0x8e, 0x9b, 0xfa, 0x42, 0x8e, 0xdf, 0x8f, 0xc7, 0x86, 0xf9, 0xa4, 0xca, 0x70, 0x00, 0x9d, 0x21, 0xbf, 0xec, 0x57, 0x62, 0x30, 0x58, 0x8c, 0x0d, 0x35, 0xdb, 0x5d, 0x8b, 0x6a, 0xa0, 0x5a } }, + { { 0xc1, 0x58, 0x7c, 0x0d, 0x20, 0xdd, 0x11, 0x26, 0x5f, 0x89, 0x3b, 0x97, 0x58, 0xf8, 0x8b, 0xe3, 0xdf, 0x32, 0xe2, 0xfc, 0xd8, 0x67, 0xf2, 0xa5, 0x37, 0x1e, 0x6d, 0xec, 0x7c, 0x27, 0x20, 0x79 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xd0, 0xe9, 0xc0, 0xfa, 0x95, 0x45, 0x23, 0x96, 0xf1, 0x2c, 0x79, 0x25, 0x14, 0xce, 0x40, 0x14, 0x44, 0x2c, 0x36, 0x50, 0xd9, 0x63, 0x56, 0xb7, 0x56, 0x3b, 0x9e, 0xa7, 0xef, 0x89, 0xbb, 0x0e } }, + { { 0xce, 0x7f, 0xdc, 0x0a, 0xcc, 0x82, 0x1c, 0x0a, 0x78, 0x71, 0xe8, 0x74, 0x8d, 0x01, 0x30, 0x0f, 0xa7, 0x11, 0x4c, 0xdf, 0x38, 0xd7, 0xa7, 0x0d, 0xf8, 0x48, 0x52, 0x00, 0x80, 0x7b, 0x5f, 0x0e } } }, + { { { 0x25, 0x83, 0xe6, 0x94, 0x7b, 0x81, 0xb2, 0x91, 0xae, 0x0e, 0x05, 0xc9, 0xa3, 0x68, 0x2d, 0xd9, 0x88, 0x25, 0x19, 0x2a, 0x61, 0x61, 0x21, 0x97, 0x15, 0xa1, 0x35, 0xa5, 0x46, 0xc8, 0xa2, 0x0e } }, + { { 0x1b, 0x03, 0x0d, 0x8b, 0x5a, 0x1b, 0x97, 0x4b, 0xf2, 0x16, 0x31, 0x3d, 0x1f, 0x33, 0xa0, 0x50, 0x3a, 0x18, 0xbe, 0x13, 0xa1, 0x76, 0xc1, 0xba, 0x1b, 0xf1, 0x05, 0x7b, 0x33, 0xa8, 0x82, 0x3b } } }, + { { { 0xba, 0x36, 0x7b, 0x6d, 0xa9, 0xea, 0x14, 0x12, 0xc5, 0xfa, 0x91, 0x00, 0xba, 0x9b, 0x99, 0xcc, 0x56, 0x02, 0xe9, 0xa0, 0x26, 0x40, 0x66, 0x8c, 0xc4, 0xf8, 0x85, 0x33, 0x68, 0xe7, 0x03, 0x20 } }, + { { 0x50, 0x5b, 0xff, 0xa9, 0xb2, 0xf1, 0xf1, 0x78, 0xcf, 0x14, 0xa4, 0xa9, 0xfc, 0x09, 0x46, 0x94, 0x54, 0x65, 0x0d, 0x9c, 0x5f, 0x72, 0x21, 0xe2, 0x97, 0xa5, 0x2d, 0x81, 0xce, 0x4a, 0x5f, 0x79 } } }, + { { { 0x3d, 0x5f, 0x5c, 0xd2, 0xbc, 0x7d, 0x77, 0x0e, 0x2a, 0x6d, 0x22, 0x45, 0x84, 0x06, 0xc4, 0xdd, 0xc6, 0xa6, 0xc6, 0xd7, 0x49, 0xad, 0x6d, 0x87, 0x91, 0x0e, 0x3a, 0x67, 0x1d, 0x2c, 0x1d, 0x56 } }, + { { 0xfe, 0x7a, 0x74, 0xcf, 0xd4, 0xd2, 0xe5, 0x19, 0xde, 0xd0, 0xdb, 0x70, 0x23, 0x69, 0xe6, 0x6d, 0xec, 0xec, 0xcc, 0x09, 0x33, 0x6a, 0x77, 0xdc, 0x6b, 0x22, 0x76, 0x5d, 0x92, 0x09, 0xac, 0x2d } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x23, 0x15, 0x17, 0xeb, 0xd3, 0xdb, 0x12, 0x5e, 0x01, 0xf0, 0x91, 0xab, 0x2c, 0x41, 0xce, 0xac, 0xed, 0x1b, 0x4b, 0x2d, 0xbc, 0xdb, 0x17, 0x66, 0x89, 0x46, 0xad, 0x4b, 0x1e, 0x6f, 0x0b, 0x14 } }, + { { 0x11, 0xce, 0xbf, 0xb6, 0x77, 0x2d, 0x48, 0x22, 0x18, 0x4f, 0xa3, 0x5d, 0x4a, 0xb0, 0x70, 0x12, 0x3e, 0x54, 0xd7, 0xd8, 0x0e, 0x2b, 0x27, 0xdc, 0x53, 0xff, 0xca, 0x8c, 0x59, 0xb3, 0x4e, 0x44 } } }, + { { { 0x07, 0x76, 0x61, 0x0f, 0x66, 0xb2, 0x21, 0x39, 0x7e, 0xc0, 0xec, 0x45, 0x28, 0x82, 0xa1, 0x29, 0x32, 0x44, 0x35, 0x13, 0x5e, 0x61, 0x5e, 0x54, 0xcb, 0x7c, 0xef, 0xf6, 0x41, 0xcf, 0x9f, 0x0a } }, + { { 0xdd, 0xf9, 0xda, 0x84, 0xc3, 0xe6, 0x8a, 0x9f, 0x24, 0xd2, 0x96, 0x5d, 0x39, 0x6f, 0x58, 0x8c, 0xc1, 0x56, 0x93, 0xab, 0xb5, 0x79, 0x3b, 0xd2, 0xa8, 0x73, 0x16, 0xed, 0xfa, 0xb4, 0x2f, 0x73 } } }, + { { { 0x8b, 0xb1, 0x95, 0xe5, 0x92, 0x50, 0x35, 0x11, 0x76, 0xac, 0xf4, 0x4d, 0x24, 0xc3, 0x32, 0xe6, 0xeb, 0xfe, 0x2c, 0x87, 0xc4, 0xf1, 0x56, 0xc4, 0x75, 0x24, 0x7a, 0x56, 0x85, 0x5a, 0x3a, 0x13 } }, + { { 0x0d, 0x16, 0xac, 0x3c, 0x4a, 0x58, 0x86, 0x3a, 0x46, 0x7f, 0x6c, 0xa3, 0x52, 0x6e, 0x37, 0xe4, 0x96, 0x9c, 0xe9, 0x5c, 0x66, 0x41, 0x67, 0xe4, 0xfb, 0x79, 0x0c, 0x05, 0xf6, 0x64, 0xd5, 0x7c } } }, + { { { 0x28, 0xc1, 0xe1, 0x54, 0x73, 0xf2, 0xbf, 0x76, 0x74, 0x19, 0x19, 0x1b, 0xe4, 0xb9, 0xa8, 0x46, 0x65, 0x73, 0xf3, 0x77, 0x9b, 0x29, 0x74, 0x5b, 0xc6, 0x89, 0x6c, 0x2c, 0x7c, 0xf8, 0xb3, 0x0f } }, + { { 0xf7, 0xd5, 0xe9, 0x74, 0x5d, 0xb8, 0x25, 0x16, 0xb5, 0x30, 0xbc, 0x84, 0xc5, 0xf0, 0xad, 0xca, 0x12, 0x28, 0xbc, 0x9d, 0xd4, 0xfa, 0x82, 0xe6, 0xe3, 0xbf, 0xa2, 0x15, 0x2c, 0xd4, 0x34, 0x10 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x61, 0xb1, 0x46, 0xba, 0x0e, 0x31, 0xa5, 0x67, 0x6c, 0x7f, 0xd6, 0xd9, 0x27, 0x85, 0x0f, 0x79, 0x14, 0xc8, 0x6c, 0x2f, 0x5f, 0x5b, 0x9c, 0x35, 0x3d, 0x38, 0x86, 0x77, 0x65, 0x55, 0x6a, 0x7b } }, + { { 0xd3, 0xb0, 0x3a, 0x66, 0x60, 0x1b, 0x43, 0xf1, 0x26, 0x58, 0x99, 0x09, 0x8f, 0x2d, 0xa3, 0x14, 0x71, 0x85, 0xdb, 0xed, 0xf6, 0x26, 0xd5, 0x61, 0x9a, 0x73, 0xac, 0x0e, 0xea, 0xac, 0xb7, 0x0c } } }, + { { { 0x5e, 0xf4, 0xe5, 0x17, 0x0e, 0x10, 0x9f, 0xe7, 0x43, 0x5f, 0x67, 0x5c, 0xac, 0x4b, 0xe5, 0x14, 0x41, 0xd2, 0xbf, 0x48, 0xf5, 0x14, 0xb0, 0x71, 0xc6, 0x61, 0xc1, 0xb2, 0x70, 0x58, 0xd2, 0x5a } }, + { { 0x2d, 0xba, 0x16, 0x07, 0x92, 0x94, 0xdc, 0xbd, 0x50, 0x2b, 0xc9, 0x7f, 0x42, 0x00, 0xba, 0x61, 0xed, 0xf8, 0x43, 0xed, 0xf5, 0xf9, 0x40, 0x60, 0xb2, 0xb0, 0x82, 0xcb, 0xed, 0x75, 0xc7, 0x65 } } }, + { { { 0x80, 0xba, 0x0d, 0x09, 0x40, 0xa7, 0x39, 0xa6, 0x67, 0x34, 0x7e, 0x66, 0xbe, 0x56, 0xfb, 0x53, 0x78, 0xc4, 0x46, 0xe8, 0xed, 0x68, 0x6c, 0x7f, 0xce, 0xe8, 0x9f, 0xce, 0xa2, 0x64, 0x58, 0x53 } }, + { { 0xe8, 0xc1, 0xa9, 0xc2, 0x7b, 0x59, 0x21, 0x33, 0xe2, 0x43, 0x73, 0x2b, 0xac, 0x2d, 0xc1, 0x89, 0x3b, 0x15, 0xe2, 0xd5, 0xc0, 0x97, 0x8a, 0xfd, 0x6f, 0x36, 0x33, 0xb7, 0xb9, 0xc3, 0x88, 0x09 } } }, + { { { 0xd0, 0xb6, 0x56, 0x30, 0x5c, 0xae, 0xb3, 0x75, 0x44, 0xa4, 0x83, 0x51, 0x6e, 0x01, 0x65, 0xef, 0x45, 0x76, 0xe6, 0xf5, 0xa2, 0x0d, 0xd4, 0x16, 0x3b, 0x58, 0x2f, 0xf2, 0x2f, 0x36, 0x18, 0x3f } }, + { { 0xfd, 0x2f, 0xe0, 0x9b, 0x1e, 0x8c, 0xc5, 0x18, 0xa9, 0xca, 0xd4, 0x2b, 0x35, 0xb6, 0x95, 0x0a, 0x9f, 0x7e, 0xfb, 0xc4, 0xef, 0x88, 0x7b, 0x23, 0x43, 0xec, 0x2f, 0x0d, 0x0f, 0x7a, 0xfc, 0x5c } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x8d, 0xd2, 0xda, 0xc7, 0x44, 0xd6, 0x7a, 0xdb, 0x26, 0x7d, 0x1d, 0xb8, 0xe1, 0xde, 0x9d, 0x7a, 0x7d, 0x17, 0x7e, 0x1c, 0x37, 0x04, 0x8d, 0x2d, 0x7c, 0x5e, 0x18, 0x38, 0x1e, 0xaf, 0xc7, 0x1b } }, + { { 0x33, 0x48, 0x31, 0x00, 0x59, 0xf6, 0xf2, 0xca, 0x0f, 0x27, 0x1b, 0x63, 0x12, 0x7e, 0x02, 0x1d, 0x49, 0xc0, 0x5d, 0x79, 0x87, 0xef, 0x5e, 0x7a, 0x2f, 0x1f, 0x66, 0x55, 0xd8, 0x09, 0xd9, 0x61 } } }, + { { { 0x54, 0x83, 0x02, 0x18, 0x82, 0x93, 0x99, 0x07, 0xd0, 0xa7, 0xda, 0xd8, 0x75, 0x89, 0xfa, 0xf2, 0xd9, 0xa3, 0xb8, 0x6b, 0x5a, 0x35, 0x28, 0xd2, 0x6b, 0x59, 0xc2, 0xf8, 0x45, 0xe2, 0xbc, 0x06 } }, + { { 0x65, 0xc0, 0xa3, 0x88, 0x51, 0x95, 0xfc, 0x96, 0x94, 0x78, 0xe8, 0x0d, 0x8b, 0x41, 0xc9, 0xc2, 0x58, 0x48, 0x75, 0x10, 0x2f, 0xcd, 0x2a, 0xc9, 0xa0, 0x6d, 0x0f, 0xdd, 0x9c, 0x98, 0x26, 0x3d } } }, + { { { 0x2f, 0x66, 0x29, 0x1b, 0x04, 0x89, 0xbd, 0x7e, 0xee, 0x6e, 0xdd, 0xb7, 0x0e, 0xef, 0xb0, 0x0c, 0xb4, 0xfc, 0x7f, 0xc2, 0xc9, 0x3a, 0x3c, 0x64, 0xef, 0x45, 0x44, 0xaf, 0x8a, 0x90, 0x65, 0x76 } }, + { { 0xa1, 0x4c, 0x70, 0x4b, 0x0e, 0xa0, 0x83, 0x70, 0x13, 0xa4, 0xaf, 0xb8, 0x38, 0x19, 0x22, 0x65, 0x09, 0xb4, 0x02, 0x4f, 0x06, 0xf8, 0x17, 0xce, 0x46, 0x45, 0xda, 0x50, 0x7c, 0x8a, 0xd1, 0x4e } } }, + { { { 0xf7, 0xd4, 0x16, 0x6c, 0x4e, 0x95, 0x9d, 0x5d, 0x0f, 0x91, 0x2b, 0x52, 0xfe, 0x5c, 0x34, 0xe5, 0x30, 0xe6, 0xa4, 0x3b, 0xf3, 0xf3, 0x34, 0x08, 0xa9, 0x4a, 0xa0, 0xb5, 0x6e, 0xb3, 0x09, 0x0a } }, + { { 0x26, 0xd9, 0x5e, 0xa3, 0x0f, 0xeb, 0xa2, 0xf3, 0x20, 0x3b, 0x37, 0xd4, 0xe4, 0x9e, 0xce, 0x06, 0x3d, 0x53, 0xed, 0xae, 0x2b, 0xeb, 0xb6, 0x24, 0x0a, 0x11, 0xa3, 0x0f, 0xd6, 0x7f, 0xa4, 0x3a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xdb, 0x9f, 0x2c, 0xfc, 0xd6, 0xb2, 0x1e, 0x2e, 0x52, 0x7a, 0x06, 0x87, 0x2d, 0x86, 0x72, 0x2b, 0x6d, 0x90, 0x77, 0x46, 0x43, 0xb5, 0x7a, 0xf8, 0x60, 0x7d, 0x91, 0x60, 0x5b, 0x9d, 0x9e, 0x07 } }, + { { 0x97, 0x87, 0xc7, 0x04, 0x1c, 0x38, 0x01, 0x39, 0x58, 0xc7, 0x85, 0xa3, 0xfc, 0x64, 0x00, 0x64, 0x25, 0xa2, 0xbf, 0x50, 0x94, 0xca, 0x26, 0x31, 0x45, 0x0a, 0x24, 0xd2, 0x51, 0x29, 0x51, 0x16 } } }, + { { { 0x4d, 0x4a, 0xd7, 0x98, 0x71, 0x57, 0xac, 0x7d, 0x8b, 0x37, 0xbd, 0x63, 0xff, 0x87, 0xb1, 0x49, 0x95, 0x20, 0x7c, 0xcf, 0x7c, 0x59, 0xc4, 0x91, 0x9c, 0xef, 0xd0, 0xdb, 0x60, 0x09, 0x9d, 0x46 } }, + { { 0xcb, 0x78, 0x94, 0x90, 0xe4, 0x45, 0xb3, 0xf6, 0xd9, 0xf6, 0x57, 0x74, 0xd5, 0xf8, 0x83, 0x4f, 0x39, 0xc9, 0xbd, 0x88, 0xc2, 0x57, 0x21, 0x1f, 0x24, 0x32, 0x68, 0xf8, 0xc7, 0x21, 0x5f, 0x0b } } }, + { { { 0x2a, 0x36, 0x68, 0xfc, 0x5f, 0xb6, 0x4f, 0xa5, 0xe3, 0x9d, 0x24, 0x2f, 0xc0, 0x93, 0x61, 0xcf, 0xf8, 0x0a, 0xed, 0xe1, 0xdb, 0x27, 0xec, 0x0e, 0x14, 0x32, 0x5f, 0x8e, 0xa1, 0x62, 0x41, 0x16 } }, + { { 0x95, 0x21, 0x01, 0xce, 0x95, 0x5b, 0x0e, 0x57, 0xc7, 0xb9, 0x62, 0xb5, 0x28, 0xca, 0x11, 0xec, 0xb4, 0x46, 0x06, 0x73, 0x26, 0xff, 0xfb, 0x66, 0x7d, 0xee, 0x5f, 0xb2, 0x56, 0xfd, 0x2a, 0x08 } } }, + { { { 0x92, 0x67, 0x77, 0x56, 0xa1, 0xff, 0xc4, 0xc5, 0x95, 0xf0, 0xe3, 0x3a, 0x0a, 0xca, 0x94, 0x4d, 0x9e, 0x7e, 0x3d, 0xb9, 0x6e, 0xb6, 0xb0, 0xce, 0xa4, 0x30, 0x89, 0x99, 0xe9, 0xad, 0x11, 0x59 } }, + { { 0xf6, 0x48, 0x95, 0xa1, 0x6f, 0x5f, 0xb7, 0xa5, 0xbb, 0x30, 0x00, 0x1c, 0xd2, 0x8a, 0xd6, 0x25, 0x26, 0x1b, 0xb2, 0x0d, 0x37, 0x6a, 0x05, 0xf4, 0x9d, 0x3e, 0x17, 0x2a, 0x43, 0xd2, 0x3a, 0x06 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x32, 0x99, 0x93, 0xd1, 0x9a, 0x72, 0xf3, 0xa9, 0x16, 0xbd, 0xb4, 0x4c, 0xdd, 0xf9, 0xd4, 0xb2, 0x64, 0x9a, 0xd3, 0x05, 0xe4, 0xa3, 0x73, 0x1c, 0xcb, 0x7e, 0x57, 0x67, 0xff, 0x04, 0xb3, 0x10 } }, + { { 0xb9, 0x4b, 0xa4, 0xad, 0xd0, 0x6d, 0x61, 0x23, 0xb4, 0xaf, 0x34, 0xa9, 0xaa, 0x65, 0xec, 0xd9, 0x69, 0xe3, 0x85, 0xcd, 0xcc, 0xe7, 0xb0, 0x9b, 0x41, 0xc1, 0x1c, 0xf9, 0xa0, 0xfa, 0xb7, 0x13 } } }, + { { { 0x04, 0xfd, 0x88, 0x3c, 0x0c, 0xd0, 0x09, 0x52, 0x51, 0x4f, 0x06, 0x19, 0xcc, 0xc3, 0xbb, 0xde, 0x80, 0xc5, 0x33, 0xbc, 0xf9, 0xf3, 0x17, 0x36, 0xdd, 0xc6, 0xde, 0xe8, 0x9b, 0x5d, 0x79, 0x1b } }, + { { 0x65, 0x0a, 0xbe, 0x51, 0x57, 0xad, 0x50, 0x79, 0x08, 0x71, 0x9b, 0x07, 0x95, 0x8f, 0xfb, 0xae, 0x4b, 0x38, 0xba, 0xcf, 0x53, 0x2a, 0x86, 0x1e, 0xc0, 0x50, 0x5c, 0x67, 0x1b, 0xf6, 0x87, 0x6c } } }, + { { { 0x4f, 0x00, 0xb2, 0x66, 0x55, 0xed, 0x4a, 0xed, 0x8d, 0xe1, 0x66, 0x18, 0xb2, 0x14, 0x74, 0x8d, 0xfd, 0x1a, 0x36, 0x0f, 0x26, 0x5c, 0x8b, 0x89, 0xf3, 0xab, 0xf2, 0xf3, 0x24, 0x67, 0xfd, 0x70 } }, + { { 0xfd, 0x4e, 0x2a, 0xc1, 0x3a, 0xca, 0x8f, 0x00, 0xd8, 0xec, 0x74, 0x67, 0xef, 0x61, 0xe0, 0x28, 0xd0, 0x96, 0xf4, 0x48, 0xde, 0x81, 0xe3, 0xef, 0xdc, 0xaa, 0x7d, 0xf3, 0xb6, 0x55, 0xa6, 0x65 } } }, + { { { 0xeb, 0xcb, 0xc5, 0x70, 0x91, 0x31, 0x10, 0x93, 0x0d, 0xc8, 0xd0, 0xef, 0x62, 0xe8, 0x6f, 0x82, 0xe3, 0x69, 0x3d, 0x91, 0x7f, 0x31, 0xe1, 0x26, 0x35, 0x3c, 0x4a, 0x2f, 0xab, 0xc4, 0x9a, 0x5e } }, + { { 0xab, 0x1b, 0xb5, 0xe5, 0x2b, 0xc3, 0x0e, 0x29, 0xb0, 0xd0, 0x73, 0xe6, 0x4f, 0x64, 0xf2, 0xbc, 0xe4, 0xe4, 0xe1, 0x9a, 0x52, 0x33, 0x2f, 0xbd, 0xcc, 0x03, 0xee, 0x8a, 0xfa, 0x00, 0x5f, 0x50 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xf6, 0xdb, 0x0d, 0x22, 0x3d, 0xb5, 0x14, 0x75, 0x31, 0xf0, 0x81, 0xe2, 0xb9, 0x37, 0xa2, 0xa9, 0x84, 0x11, 0x9a, 0x07, 0xb5, 0x53, 0x89, 0x78, 0xa9, 0x30, 0x27, 0xa1, 0xf1, 0x4e, 0x5c, 0x2e } }, + { { 0x8b, 0x00, 0x54, 0xfb, 0x4d, 0xdc, 0xcb, 0x17, 0x35, 0x40, 0xff, 0xb7, 0x8c, 0xfe, 0x4a, 0xe4, 0x4e, 0x99, 0x4e, 0xa8, 0x74, 0x54, 0x5d, 0x5c, 0x96, 0xa3, 0x12, 0x55, 0x36, 0x31, 0x17, 0x5c } } }, + { { { 0xce, 0x24, 0xef, 0x7b, 0x86, 0xf2, 0x0f, 0x77, 0xe8, 0x5c, 0x7d, 0x87, 0x38, 0x2d, 0xef, 0xaf, 0xf2, 0x8c, 0x72, 0x2e, 0xeb, 0xb6, 0x55, 0x4b, 0x6e, 0xf1, 0x4e, 0x8a, 0x0e, 0x9a, 0x6c, 0x4c } }, + { { 0x25, 0xea, 0x86, 0xc2, 0xd1, 0x4f, 0xb7, 0x3e, 0xa8, 0x5c, 0x8d, 0x66, 0x81, 0x25, 0xed, 0xc5, 0x4c, 0x05, 0xb9, 0xd8, 0xd6, 0x70, 0xbe, 0x73, 0x82, 0xe8, 0xa1, 0xe5, 0x1e, 0x71, 0xd5, 0x26 } } }, + { { { 0x4e, 0x6d, 0xc3, 0xa7, 0x4f, 0x22, 0x45, 0x26, 0xa2, 0x7e, 0x16, 0xf7, 0xf7, 0x63, 0xdc, 0x86, 0x01, 0x2a, 0x71, 0x38, 0x5c, 0x33, 0xc3, 0xce, 0x30, 0xff, 0xf9, 0x2c, 0x91, 0x71, 0x8a, 0x72 } }, + { { 0x8c, 0x44, 0x09, 0x28, 0xd5, 0x23, 0xc9, 0x8f, 0xf3, 0x84, 0x45, 0xc6, 0x9a, 0x5e, 0xff, 0xd2, 0xc7, 0x57, 0x93, 0xa3, 0xc1, 0x69, 0xdd, 0x62, 0x0f, 0xda, 0x5c, 0x30, 0x59, 0x5d, 0xe9, 0x4c } } }, + { { { 0x92, 0x7e, 0x50, 0x27, 0x72, 0xd7, 0x0c, 0xd6, 0x69, 0x96, 0x81, 0x35, 0x84, 0x94, 0x35, 0x8b, 0x6c, 0xaa, 0x62, 0x86, 0x6e, 0x1c, 0x15, 0xf3, 0x6c, 0xb3, 0xff, 0x65, 0x1b, 0xa2, 0x9b, 0x59 } }, + { { 0xe2, 0xa9, 0x65, 0x88, 0xc4, 0x50, 0xfa, 0xbb, 0x3b, 0x6e, 0x5f, 0x44, 0x01, 0xca, 0x97, 0xd4, 0xdd, 0xf6, 0xcd, 0x3f, 0x3f, 0xe5, 0x97, 0x67, 0x2b, 0x8c, 0x66, 0x0f, 0x35, 0x9b, 0xf5, 0x07 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xf1, 0x59, 0x27, 0xd8, 0xdb, 0x5a, 0x11, 0x5e, 0x82, 0xf3, 0x38, 0xff, 0x1c, 0xed, 0xfe, 0x3f, 0x64, 0x54, 0x3f, 0x7f, 0xd1, 0x81, 0xed, 0xef, 0x65, 0xc5, 0xcb, 0xfd, 0xe1, 0x80, 0xcd, 0x11 } }, + { { 0xe0, 0xdb, 0x22, 0x28, 0xe6, 0xff, 0x61, 0x9d, 0x41, 0x14, 0x2d, 0x3b, 0x26, 0x22, 0xdf, 0xf1, 0x34, 0x81, 0xe9, 0x45, 0xee, 0x0f, 0x98, 0x8b, 0xa6, 0x3f, 0xef, 0xf7, 0x43, 0x19, 0xf1, 0x43 } } }, + { { { 0xee, 0xf3, 0x00, 0xa1, 0x50, 0xde, 0xc0, 0xb6, 0x01, 0xe3, 0x8c, 0x3c, 0x4d, 0x31, 0xd2, 0xb0, 0x58, 0xcd, 0xed, 0x10, 0x4a, 0x7a, 0xef, 0x80, 0xa9, 0x19, 0x32, 0xf3, 0xd8, 0x33, 0x8c, 0x06 } }, + { { 0xcb, 0x7d, 0x4f, 0xff, 0x30, 0xd8, 0x12, 0x3b, 0x39, 0x1c, 0x06, 0xf9, 0x4c, 0x34, 0x35, 0x71, 0xb5, 0x16, 0x94, 0x67, 0xdf, 0xee, 0x11, 0xde, 0xa4, 0x1d, 0x88, 0x93, 0x35, 0xa9, 0x32, 0x10 } } }, + { { { 0xe9, 0xc3, 0xbc, 0x7b, 0x5c, 0xfc, 0xb2, 0xf9, 0xc9, 0x2f, 0xe5, 0xba, 0x3a, 0x0b, 0xab, 0x64, 0x38, 0x6f, 0x5b, 0x4b, 0x93, 0xda, 0x64, 0xec, 0x4d, 0x3d, 0xa0, 0xf5, 0xbb, 0xba, 0x47, 0x48 } }, + { { 0x60, 0xbc, 0x45, 0x1f, 0x23, 0xa2, 0x3b, 0x70, 0x76, 0xe6, 0x97, 0x99, 0x4f, 0x77, 0x54, 0x67, 0x30, 0x9a, 0xe7, 0x66, 0xd6, 0xcd, 0x2e, 0x51, 0x24, 0x2c, 0x42, 0x4a, 0x11, 0xfe, 0x6f, 0x7e } } }, + { { { 0x87, 0xc0, 0xb1, 0xf0, 0xa3, 0x6f, 0x0c, 0x93, 0xa9, 0x0a, 0x72, 0xef, 0x5c, 0xbe, 0x65, 0x35, 0xa7, 0x6a, 0x4e, 0x2c, 0xbf, 0x21, 0x23, 0xe8, 0x2f, 0x97, 0xc7, 0x3e, 0xc8, 0x17, 0xac, 0x1e } }, + { { 0x7b, 0xef, 0x21, 0xe5, 0x40, 0xcc, 0x1e, 0xdc, 0xd6, 0xbd, 0x97, 0x7a, 0x7c, 0x75, 0x86, 0x7a, 0x25, 0x5a, 0x6e, 0x7c, 0xe5, 0x51, 0x3c, 0x1b, 0x5b, 0x82, 0x9a, 0x07, 0x60, 0xa1, 0x19, 0x04 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x96, 0x88, 0xa6, 0xab, 0x8f, 0xe3, 0x3a, 0x49, 0xf8, 0xfe, 0x34, 0xe7, 0x6a, 0xb2, 0xfe, 0x40, 0x26, 0x74, 0x57, 0x4c, 0xf6, 0xd4, 0x99, 0xce, 0x5d, 0x7b, 0x2f, 0x67, 0xd6, 0x5a, 0xe4, 0x4e } }, + { { 0x5c, 0x82, 0xb3, 0xbd, 0x55, 0x25, 0xf6, 0x6a, 0x93, 0xa4, 0x02, 0xc6, 0x7d, 0x5c, 0xb1, 0x2b, 0x5b, 0xff, 0xfb, 0x56, 0xf8, 0x01, 0x41, 0x90, 0xc6, 0xb6, 0xac, 0x4f, 0xfe, 0xa7, 0x41, 0x70 } } }, + { { { 0xdb, 0xfa, 0x9b, 0x2c, 0xd4, 0x23, 0x67, 0x2c, 0x8a, 0x63, 0x6c, 0x07, 0x26, 0x48, 0x4f, 0xc2, 0x03, 0xd2, 0x53, 0x20, 0x28, 0xed, 0x65, 0x71, 0x47, 0xa9, 0x16, 0x16, 0x12, 0xbc, 0x28, 0x33 } }, + { { 0x39, 0xc0, 0xfa, 0xfa, 0xcd, 0x33, 0x43, 0xc7, 0x97, 0x76, 0x9b, 0x93, 0x91, 0x72, 0xeb, 0xc5, 0x18, 0x67, 0x4c, 0x11, 0xf0, 0xf4, 0xe5, 0x73, 0xb2, 0x5c, 0x1b, 0xc2, 0x26, 0x3f, 0xbf, 0x2b } } }, + { { { 0x86, 0xe6, 0x8c, 0x1d, 0xdf, 0xca, 0xfc, 0xd5, 0xf8, 0x3a, 0xc3, 0x44, 0x72, 0xe6, 0x78, 0x9d, 0x2b, 0x97, 0xf8, 0x28, 0x45, 0xb4, 0x20, 0xc9, 0x2a, 0x8c, 0x67, 0xaa, 0x11, 0xc5, 0x5b, 0x2f } }, + { { 0x17, 0x0f, 0x86, 0x52, 0xd7, 0x9d, 0xc3, 0x44, 0x51, 0x76, 0x32, 0x65, 0xb4, 0x37, 0x81, 0x99, 0x46, 0x37, 0x62, 0xed, 0xcf, 0x64, 0x9d, 0x72, 0x40, 0x7a, 0x4c, 0x0b, 0x76, 0x2a, 0xfb, 0x56 } } }, + { { { 0x33, 0xa7, 0x90, 0x7c, 0xc3, 0x6f, 0x17, 0xa5, 0xa0, 0x67, 0x72, 0x17, 0xea, 0x7e, 0x63, 0x14, 0x83, 0xde, 0xc1, 0x71, 0x2d, 0x41, 0x32, 0x7a, 0xf3, 0xd1, 0x2b, 0xd8, 0x2a, 0xa6, 0x46, 0x36 } }, + { { 0xac, 0xcc, 0x6b, 0x7c, 0xf9, 0xb8, 0x8b, 0x08, 0x5c, 0xd0, 0x7d, 0x8f, 0x73, 0xea, 0x20, 0xda, 0x86, 0xca, 0x00, 0xc7, 0xad, 0x73, 0x4d, 0xe9, 0xe8, 0xa9, 0xda, 0x1f, 0x03, 0x06, 0xdd, 0x24 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x9c, 0xb2, 0x61, 0x0a, 0x98, 0x2a, 0xa5, 0xd7, 0xee, 0xa9, 0xac, 0x65, 0xcb, 0x0a, 0x1e, 0xe2, 0xbe, 0xdc, 0x85, 0x59, 0x0f, 0x9c, 0xa6, 0x57, 0x34, 0xa5, 0x87, 0xeb, 0x7b, 0x1e, 0x0c, 0x3c } }, + { { 0x2f, 0xbd, 0x84, 0x63, 0x0d, 0xb5, 0xa0, 0xf0, 0x4b, 0x9e, 0x93, 0xc6, 0x34, 0x9a, 0x34, 0xff, 0x73, 0x19, 0x2f, 0x6e, 0x54, 0x45, 0x2c, 0x92, 0x31, 0x76, 0x34, 0xf1, 0xb2, 0x26, 0xe8, 0x74 } } }, + { { { 0x0a, 0x67, 0x90, 0x6d, 0x0c, 0x4c, 0xcc, 0xc0, 0xe6, 0xbd, 0xa7, 0x5e, 0x55, 0x8c, 0xcd, 0x58, 0x9b, 0x11, 0xa2, 0xbb, 0x4b, 0xb1, 0x43, 0x04, 0x3c, 0x55, 0xed, 0x23, 0xfe, 0xcd, 0xb1, 0x53 } }, + { { 0x05, 0xfb, 0x75, 0xf5, 0x01, 0xaf, 0x38, 0x72, 0x58, 0xfc, 0x04, 0x29, 0x34, 0x7a, 0x67, 0xa2, 0x08, 0x50, 0x6e, 0xd0, 0x2b, 0x73, 0xd5, 0xb8, 0xe4, 0x30, 0x96, 0xad, 0x45, 0xdf, 0xa6, 0x5c } } }, + { { { 0x0d, 0x88, 0x1a, 0x90, 0x7e, 0xdc, 0xd8, 0xfe, 0xc1, 0x2f, 0x5d, 0x67, 0xee, 0x67, 0x2f, 0xed, 0x6f, 0x55, 0x43, 0x5f, 0x87, 0x14, 0x35, 0x42, 0xd3, 0x75, 0xae, 0xd5, 0xd3, 0x85, 0x1a, 0x76 } }, + { { 0x87, 0xc8, 0xa0, 0x6e, 0xe1, 0xb0, 0xad, 0x6a, 0x4a, 0x34, 0x71, 0xed, 0x7c, 0xd6, 0x44, 0x03, 0x65, 0x4a, 0x5c, 0x5c, 0x04, 0xf5, 0x24, 0x3f, 0xb0, 0x16, 0x5e, 0x8c, 0xb2, 0xd2, 0xc5, 0x20 } } }, + { { { 0x98, 0x83, 0xc2, 0x37, 0xa0, 0x41, 0xa8, 0x48, 0x5c, 0x5f, 0xbf, 0xc8, 0xfa, 0x24, 0xe0, 0x59, 0x2c, 0xbd, 0xf6, 0x81, 0x7e, 0x88, 0xe6, 0xca, 0x04, 0xd8, 0x5d, 0x60, 0xbb, 0x74, 0xa7, 0x0b } }, + { { 0x21, 0x13, 0x91, 0xbf, 0x77, 0x7a, 0x33, 0xbc, 0xe9, 0x07, 0x39, 0x0a, 0xdd, 0x7d, 0x06, 0x10, 0x9a, 0xee, 0x47, 0x73, 0x1b, 0x15, 0x5a, 0xfb, 0xcd, 0x4d, 0xd0, 0xd2, 0x3a, 0x01, 0xba, 0x54 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x48, 0xd5, 0x39, 0x4a, 0x0b, 0x20, 0x6a, 0x43, 0xa0, 0x07, 0x82, 0x5e, 0x49, 0x7c, 0xc9, 0x47, 0xf1, 0x7c, 0x37, 0xb9, 0x23, 0xef, 0x6b, 0x46, 0x45, 0x8c, 0x45, 0x76, 0xdf, 0x14, 0x6b, 0x6e } }, + { { 0x42, 0xc9, 0xca, 0x29, 0x4c, 0x76, 0x37, 0xda, 0x8a, 0x2d, 0x7c, 0x3a, 0x58, 0xf2, 0x03, 0xb4, 0xb5, 0xb9, 0x1a, 0x13, 0x2d, 0xde, 0x5f, 0x6b, 0x9d, 0xba, 0x52, 0xc9, 0x5d, 0xb3, 0xf3, 0x30 } } }, + { { { 0x4c, 0x6f, 0xfe, 0x6b, 0x0c, 0x62, 0xd7, 0x48, 0x71, 0xef, 0xb1, 0x85, 0x79, 0xc0, 0xed, 0x24, 0xb1, 0x08, 0x93, 0x76, 0x8e, 0xf7, 0x38, 0x8e, 0xeb, 0xfe, 0x80, 0x40, 0xaf, 0x90, 0x64, 0x49 } }, + { { 0x4a, 0x88, 0xda, 0xc1, 0x98, 0x44, 0x3c, 0x53, 0x4e, 0xdb, 0x4b, 0xb9, 0x12, 0x5f, 0xcd, 0x08, 0x04, 0xef, 0x75, 0xe7, 0xb1, 0x3a, 0xe5, 0x07, 0xfa, 0xca, 0x65, 0x7b, 0x72, 0x10, 0x64, 0x7f } } }, + { { { 0x3d, 0x81, 0xf0, 0xeb, 0x16, 0xfd, 0x58, 0x33, 0x8d, 0x7c, 0x1a, 0xfb, 0x20, 0x2c, 0x8a, 0xee, 0x90, 0xbb, 0x33, 0x6d, 0x45, 0xe9, 0x8e, 0x99, 0x85, 0xe1, 0x08, 0x1f, 0xc5, 0xf1, 0xb5, 0x46 } }, + { { 0xe4, 0xe7, 0x43, 0x4b, 0xa0, 0x3f, 0x2b, 0x06, 0xba, 0x17, 0xae, 0x3d, 0xe6, 0xce, 0xbd, 0xb8, 0xed, 0x74, 0x11, 0x35, 0xec, 0x96, 0xfe, 0x31, 0xe3, 0x0e, 0x7a, 0x4e, 0xc9, 0x1d, 0xcb, 0x20 } } }, + { { { 0xe0, 0x67, 0xe9, 0x7b, 0xdb, 0x96, 0x5c, 0xb0, 0x32, 0xd0, 0x59, 0x31, 0x90, 0xdc, 0x92, 0x97, 0xac, 0x09, 0x38, 0x31, 0x0f, 0x7e, 0xd6, 0x5d, 0xd0, 0x06, 0xb6, 0x1f, 0xea, 0xf0, 0x5b, 0x07 } }, + { { 0x81, 0x9f, 0xc7, 0xde, 0x6b, 0x41, 0x22, 0x35, 0x14, 0x67, 0x77, 0x3e, 0x90, 0x81, 0xb0, 0xd9, 0x85, 0x4c, 0xca, 0x9b, 0x3f, 0x04, 0x59, 0xd6, 0xaa, 0x17, 0xc3, 0x88, 0x34, 0x37, 0xba, 0x43 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x4c, 0xb6, 0x69, 0xc8, 0x81, 0x95, 0x94, 0x33, 0x92, 0x34, 0xe9, 0x3c, 0x84, 0x0d, 0x3d, 0x5a, 0x37, 0x9c, 0x22, 0xa0, 0xaa, 0x65, 0xce, 0xb4, 0xc2, 0x2d, 0x66, 0x67, 0x02, 0xff, 0x74, 0x10 } }, + { { 0x22, 0xb0, 0xd5, 0xe6, 0xc7, 0xef, 0xb1, 0xa7, 0x13, 0xda, 0x60, 0xb4, 0x80, 0xc1, 0x42, 0x7d, 0x10, 0x70, 0x97, 0x04, 0x4d, 0xda, 0x23, 0x89, 0xc2, 0x0e, 0x68, 0xcb, 0xde, 0xe0, 0x9b, 0x29 } } }, + { { { 0x33, 0xfe, 0x42, 0x2a, 0x36, 0x2b, 0x2e, 0x36, 0x64, 0x5c, 0x8b, 0xcc, 0x81, 0x6a, 0x15, 0x08, 0xa1, 0x27, 0xe8, 0x57, 0xe5, 0x78, 0x8e, 0xf2, 0x58, 0x19, 0x12, 0x42, 0xae, 0xc4, 0x63, 0x3e } }, + { { 0x78, 0x96, 0x9c, 0xa7, 0xca, 0x80, 0xae, 0x02, 0x85, 0xb1, 0x7c, 0x04, 0x5c, 0xc1, 0x5b, 0x26, 0xc1, 0xba, 0xed, 0xa5, 0x59, 0x70, 0x85, 0x8c, 0x8c, 0xe8, 0x87, 0xac, 0x6a, 0x28, 0x99, 0x35 } } }, + { { { 0x9f, 0x04, 0x08, 0x28, 0xbe, 0x87, 0xda, 0x80, 0x28, 0x38, 0xde, 0x9f, 0xcd, 0xe4, 0xe3, 0x62, 0xfb, 0x2e, 0x46, 0x8d, 0x01, 0xb3, 0x06, 0x51, 0xd4, 0x19, 0x3b, 0x11, 0xfa, 0xe2, 0xad, 0x1e } }, + { { 0xa0, 0x20, 0x99, 0x69, 0x0a, 0xae, 0xa3, 0x70, 0x4e, 0x64, 0x80, 0xb7, 0x85, 0x9c, 0x87, 0x54, 0x43, 0x43, 0x55, 0x80, 0x6d, 0x8d, 0x7c, 0xa9, 0x64, 0xca, 0x6c, 0x2e, 0x21, 0xd8, 0xc8, 0x6c } } }, + { { { 0x91, 0x4a, 0x07, 0xad, 0x08, 0x75, 0xc1, 0x4f, 0xa4, 0xb2, 0xc3, 0x6f, 0x46, 0x3e, 0xb1, 0xce, 0x52, 0xab, 0x67, 0x09, 0x54, 0x48, 0x6b, 0x6c, 0xd7, 0x1d, 0x71, 0x76, 0xcb, 0xff, 0xdd, 0x31 } }, + { { 0x36, 0x88, 0xfa, 0xfd, 0xf0, 0x36, 0x6f, 0x07, 0x74, 0x88, 0x50, 0xd0, 0x95, 0x38, 0x4a, 0x48, 0x2e, 0x07, 0x64, 0x97, 0x11, 0x76, 0x01, 0x1a, 0x27, 0x4d, 0x8e, 0x25, 0x9a, 0x9b, 0x1c, 0x22 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xbe, 0x57, 0xbd, 0x0e, 0x0f, 0xac, 0x5e, 0x76, 0xa3, 0x71, 0xad, 0x2b, 0x10, 0x45, 0x02, 0xec, 0x59, 0xd5, 0x5d, 0xa9, 0x44, 0xcc, 0x25, 0x4c, 0xb3, 0x3c, 0x5b, 0x69, 0x07, 0x55, 0x26, 0x6b } }, + { { 0x30, 0x6b, 0xd4, 0xa7, 0x51, 0x29, 0xe3, 0xf9, 0x7a, 0x75, 0x2a, 0x82, 0x2f, 0xd6, 0x1d, 0x99, 0x2b, 0x80, 0xd5, 0x67, 0x1e, 0x15, 0x9d, 0xca, 0xfd, 0xeb, 0xac, 0x97, 0x35, 0x09, 0x7f, 0x3f } } }, + { { { 0x35, 0x0d, 0x34, 0x0a, 0xb8, 0x67, 0x56, 0x29, 0x20, 0xf3, 0x19, 0x5f, 0xe2, 0x83, 0x42, 0x73, 0x53, 0xa8, 0xc5, 0x02, 0x19, 0x33, 0xb4, 0x64, 0xbd, 0xc3, 0x87, 0x8c, 0xd7, 0x76, 0xed, 0x25 } }, + { { 0x47, 0x39, 0x37, 0x76, 0x0d, 0x1d, 0x0c, 0xf5, 0x5a, 0x6d, 0x43, 0x88, 0x99, 0x15, 0xb4, 0x52, 0x0f, 0x2a, 0xb3, 0xb0, 0x3f, 0xa6, 0xb3, 0x26, 0xb3, 0xc7, 0x45, 0xf5, 0x92, 0x5f, 0x9b, 0x17 } } }, + { { { 0x9d, 0x23, 0xbd, 0x15, 0xfe, 0x52, 0x52, 0x15, 0x26, 0x79, 0x86, 0xba, 0x06, 0x56, 0x66, 0xbb, 0x8c, 0x2e, 0x10, 0x11, 0xd5, 0x4a, 0x18, 0x52, 0xda, 0x84, 0x44, 0xf0, 0x3e, 0xe9, 0x8c, 0x35 } }, + { { 0xad, 0xa0, 0x41, 0xec, 0xc8, 0x4d, 0xb9, 0xd2, 0x6e, 0x96, 0x4e, 0x5b, 0xc5, 0xc2, 0xa0, 0x1b, 0xcf, 0x0c, 0xbf, 0x17, 0x66, 0x57, 0xc1, 0x17, 0x90, 0x45, 0x71, 0xc2, 0xe1, 0x24, 0xeb, 0x27 } } }, + { { { 0x2c, 0xb9, 0x42, 0xa4, 0xaf, 0x3b, 0x42, 0x0e, 0xc2, 0x0f, 0xf2, 0xea, 0x83, 0xaf, 0x9a, 0x13, 0x17, 0xb0, 0xbd, 0x89, 0x17, 0xe3, 0x72, 0xcb, 0x0e, 0x76, 0x7e, 0x41, 0x63, 0x04, 0x88, 0x71 } }, + { { 0x75, 0x78, 0x38, 0x86, 0x57, 0xdd, 0x9f, 0xee, 0x54, 0x70, 0x65, 0xbf, 0xf1, 0x2c, 0xe0, 0x39, 0x0d, 0xe3, 0x89, 0xfd, 0x8e, 0x93, 0x4f, 0x43, 0xdc, 0xd5, 0x5b, 0xde, 0xf9, 0x98, 0xe5, 0x7b } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xe7, 0x3b, 0x65, 0x11, 0xdf, 0xb2, 0xf2, 0x63, 0x94, 0x12, 0x6f, 0x5c, 0x9e, 0x77, 0xc1, 0xb6, 0xd8, 0xab, 0x58, 0x7a, 0x1d, 0x95, 0x73, 0xdd, 0xe7, 0xe3, 0x6f, 0xf2, 0x03, 0x1d, 0xdb, 0x76 } }, + { { 0xae, 0x06, 0x4e, 0x2c, 0x52, 0x1b, 0xbc, 0x5a, 0x5a, 0xa5, 0xbe, 0x27, 0xbd, 0xeb, 0xe1, 0x14, 0x17, 0x68, 0x26, 0x07, 0x03, 0xd1, 0x18, 0x0b, 0xdf, 0xf1, 0x06, 0x5c, 0xa6, 0x1b, 0xb9, 0x24 } } }, + { { { 0xc5, 0x66, 0x80, 0x13, 0x0e, 0x48, 0x8c, 0x87, 0x31, 0x84, 0xb4, 0x60, 0xed, 0xc5, 0xec, 0xb6, 0xc5, 0x05, 0x33, 0x5f, 0x2f, 0x7d, 0x40, 0xb6, 0x32, 0x1d, 0x38, 0x74, 0x1b, 0xf1, 0x09, 0x3d } }, + { { 0xd4, 0x69, 0x82, 0xbc, 0x8d, 0xf8, 0x34, 0x36, 0x75, 0x55, 0x18, 0x55, 0x58, 0x3c, 0x79, 0xaf, 0x26, 0x80, 0xab, 0x9b, 0x95, 0x00, 0xf1, 0xcb, 0xda, 0xc1, 0x9f, 0xf6, 0x2f, 0xa2, 0xf4, 0x45 } } }, + { { { 0x17, 0xbe, 0xeb, 0x85, 0xed, 0x9e, 0xcd, 0x56, 0xf5, 0x17, 0x45, 0x42, 0xb4, 0x1f, 0x44, 0x4c, 0x05, 0x74, 0x15, 0x47, 0x00, 0xc6, 0x6a, 0x3d, 0x24, 0x09, 0x0d, 0x58, 0xb1, 0x42, 0xd7, 0x04 } }, + { { 0x8d, 0xbd, 0xa3, 0xc4, 0x06, 0x9b, 0x1f, 0x90, 0x58, 0x60, 0x74, 0xb2, 0x00, 0x3b, 0x3c, 0xd2, 0xda, 0x82, 0xbb, 0x10, 0x90, 0x69, 0x92, 0xa9, 0xb4, 0x30, 0x81, 0xe3, 0x7c, 0xa8, 0x89, 0x45 } } }, + { { { 0x3f, 0xdc, 0x05, 0xcb, 0x41, 0x3c, 0xc8, 0x23, 0x04, 0x2c, 0x38, 0x99, 0xe3, 0x68, 0x55, 0xf9, 0xd3, 0x32, 0xc7, 0xbf, 0xfa, 0xd4, 0x1b, 0x5d, 0xde, 0xdc, 0x10, 0x42, 0xc0, 0x42, 0xd9, 0x75 } }, + { { 0x2d, 0xab, 0x35, 0x4e, 0x87, 0xc4, 0x65, 0x97, 0x67, 0x24, 0xa4, 0x47, 0xad, 0x3f, 0x8e, 0xf3, 0xcb, 0x31, 0x17, 0x77, 0xc5, 0xe2, 0xd7, 0x8f, 0x3c, 0xc1, 0xcd, 0x56, 0x48, 0xc1, 0x6c, 0x69 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x14, 0xae, 0x5f, 0x88, 0x7b, 0xa5, 0x90, 0xdf, 0x10, 0xb2, 0x8b, 0x5e, 0x24, 0x17, 0xc3, 0xa3, 0xd4, 0x0f, 0x92, 0x61, 0x1a, 0x19, 0x5a, 0xad, 0x76, 0xbd, 0xd8, 0x1c, 0xdd, 0xe0, 0x12, 0x6d } }, + { { 0x8e, 0xbd, 0x70, 0x8f, 0x02, 0xa3, 0x24, 0x4d, 0x5a, 0x67, 0xc4, 0xda, 0xf7, 0x20, 0x0f, 0x81, 0x5b, 0x7a, 0x05, 0x24, 0x67, 0x83, 0x0b, 0x2a, 0x80, 0xe7, 0xfd, 0x74, 0x4b, 0x9e, 0x5c, 0x0d } } }, + { { { 0x94, 0xd5, 0x5f, 0x1f, 0xa2, 0xfb, 0xeb, 0xe1, 0x07, 0x34, 0xf8, 0x20, 0xad, 0x81, 0x30, 0x06, 0x2d, 0xa1, 0x81, 0x95, 0x36, 0xcf, 0x11, 0x0b, 0xaf, 0xc1, 0x2b, 0x9a, 0x6c, 0x55, 0xc1, 0x16 } }, + { { 0x36, 0x4f, 0xf1, 0x5e, 0x74, 0x35, 0x13, 0x28, 0xd7, 0x11, 0xcf, 0xb8, 0xde, 0x93, 0xb3, 0x05, 0xb8, 0xb5, 0x73, 0xe9, 0xeb, 0xad, 0x19, 0x1e, 0x89, 0x0f, 0x8b, 0x15, 0xd5, 0x8c, 0xe3, 0x23 } } }, + { { { 0x33, 0x79, 0xe7, 0x18, 0xe6, 0x0f, 0x57, 0x93, 0x15, 0xa0, 0xa7, 0xaa, 0xc4, 0xbf, 0x4f, 0x30, 0x74, 0x95, 0x5e, 0x69, 0x4a, 0x5b, 0x45, 0xe4, 0x00, 0xeb, 0x23, 0x74, 0x4c, 0xdf, 0x6b, 0x45 } }, + { { 0x97, 0x29, 0x6c, 0xc4, 0x42, 0x0b, 0xdd, 0xc0, 0x29, 0x5c, 0x9b, 0x34, 0x97, 0xd0, 0xc7, 0x79, 0x80, 0x63, 0x74, 0xe4, 0x8e, 0x37, 0xb0, 0x2b, 0x7c, 0xe8, 0x68, 0x6c, 0xc3, 0x82, 0x97, 0x57 } } }, + { { { 0x22, 0xbe, 0x83, 0xb6, 0x4b, 0x80, 0x6b, 0x43, 0x24, 0x5e, 0xef, 0x99, 0x9b, 0xa8, 0xfc, 0x25, 0x8d, 0x3b, 0x03, 0x94, 0x2b, 0x3e, 0xe7, 0x95, 0x76, 0x9b, 0xcc, 0x15, 0xdb, 0x32, 0xe6, 0x66 } }, + { { 0x84, 0xf0, 0x4a, 0x13, 0xa6, 0xd6, 0xfa, 0x93, 0x46, 0x07, 0xf6, 0x7e, 0x5c, 0x6d, 0x5e, 0xf6, 0xa6, 0xe7, 0x48, 0xf0, 0x06, 0xea, 0xff, 0x90, 0xc1, 0xcc, 0x4c, 0x19, 0x9c, 0x3c, 0x4e, 0x53 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x2a, 0x50, 0xe3, 0x07, 0x15, 0x59, 0xf2, 0x8b, 0x81, 0xf2, 0xf3, 0xd3, 0x6c, 0x99, 0x8c, 0x70, 0x67, 0xec, 0xcc, 0xee, 0x9e, 0x59, 0x45, 0x59, 0x7d, 0x47, 0x75, 0x69, 0xf5, 0x24, 0x93, 0x5d } }, + { { 0x6a, 0x4f, 0x1b, 0xbe, 0x6b, 0x30, 0xcf, 0x75, 0x46, 0xe3, 0x7b, 0x9d, 0xfc, 0xcd, 0xd8, 0x5c, 0x1f, 0xb4, 0xc8, 0xe2, 0x24, 0xec, 0x1a, 0x28, 0x05, 0x32, 0x57, 0xfd, 0x3c, 0x5a, 0x98, 0x10 } } }, + { { { 0xa3, 0xdb, 0xf7, 0x30, 0xd8, 0xc2, 0x9a, 0xe1, 0xd3, 0xce, 0x22, 0xe5, 0x80, 0x1e, 0xd9, 0xe4, 0x1f, 0xab, 0xc0, 0x71, 0x1a, 0x86, 0x0e, 0x27, 0x99, 0x5b, 0xfa, 0x76, 0x99, 0xb0, 0x08, 0x3c } }, + { { 0x2a, 0x93, 0xd2, 0x85, 0x1b, 0x6a, 0x5d, 0xa6, 0xee, 0xd1, 0xd1, 0x33, 0xbd, 0x6a, 0x36, 0x73, 0x37, 0x3a, 0x44, 0xb4, 0xec, 0xa9, 0x7a, 0xde, 0x83, 0x40, 0xd7, 0xdf, 0x28, 0xba, 0xa2, 0x30 } } }, + { { { 0xd3, 0xb5, 0x6d, 0x05, 0x3f, 0x9f, 0xf3, 0x15, 0x8d, 0x7c, 0xca, 0xc9, 0xfc, 0x8a, 0x7c, 0x94, 0xb0, 0x63, 0x36, 0x9b, 0x78, 0xd1, 0x91, 0x1f, 0x93, 0xd8, 0x57, 0x43, 0xde, 0x76, 0xa3, 0x43 } }, + { { 0x9b, 0x35, 0xe2, 0xa9, 0x3d, 0x32, 0x1e, 0xbb, 0x16, 0x28, 0x70, 0xe9, 0x45, 0x2f, 0x8f, 0x70, 0x7f, 0x08, 0x7e, 0x53, 0xc4, 0x7a, 0xbf, 0xf7, 0xe1, 0xa4, 0x6a, 0xd8, 0xac, 0x64, 0x1b, 0x11 } } }, + { { { 0xb2, 0xeb, 0x47, 0x46, 0x18, 0x3e, 0x1f, 0x99, 0x0c, 0xcc, 0xf1, 0x2c, 0xe0, 0xe7, 0x8f, 0xe0, 0x01, 0x7e, 0x65, 0xb8, 0x0c, 0xd0, 0xfb, 0xc8, 0xb9, 0x90, 0x98, 0x33, 0x61, 0x3b, 0xd8, 0x27 } }, + { { 0xa0, 0xbe, 0x72, 0x3a, 0x50, 0x4b, 0x74, 0xab, 0x01, 0xc8, 0x93, 0xc5, 0xe4, 0xc7, 0x08, 0x6c, 0xb4, 0xca, 0xee, 0xeb, 0x8e, 0xd7, 0x4e, 0x26, 0xc6, 0x1d, 0xe2, 0x71, 0xaf, 0x89, 0xa0, 0x2a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x98, 0x0b, 0xe4, 0xde, 0xdb, 0xa8, 0xfa, 0x82, 0x74, 0x06, 0x52, 0x6d, 0x08, 0x52, 0x8a, 0xff, 0x62, 0xc5, 0x6a, 0x44, 0x0f, 0x51, 0x8c, 0x1f, 0x6e, 0xb6, 0xc6, 0x2c, 0x81, 0xd3, 0x76, 0x46 } }, + { { 0xf4, 0x29, 0x74, 0x2e, 0x80, 0xa7, 0x1a, 0x8f, 0xf6, 0xbd, 0xd6, 0x8e, 0xbf, 0xc1, 0x95, 0x2a, 0xeb, 0xa0, 0x7f, 0x45, 0xa0, 0x50, 0x14, 0x05, 0xb1, 0x57, 0x4c, 0x74, 0xb7, 0xe2, 0x89, 0x7d } } }, + { { { 0x07, 0xee, 0xa7, 0xad, 0xb7, 0x09, 0x0b, 0x49, 0x4e, 0xbf, 0xca, 0xe5, 0x21, 0xe6, 0xe6, 0xaf, 0xd5, 0x67, 0xf3, 0xce, 0x7e, 0x7c, 0x93, 0x7b, 0x5a, 0x10, 0x12, 0x0e, 0x6c, 0x06, 0x11, 0x75 } }, + { { 0xd5, 0xfc, 0x86, 0xa3, 0x3b, 0xa3, 0x3e, 0x0a, 0xfb, 0x0b, 0xf7, 0x36, 0xb1, 0x5b, 0xda, 0x70, 0xb7, 0x00, 0xa7, 0xda, 0x88, 0x8f, 0x84, 0xa8, 0xbc, 0x1c, 0x39, 0xb8, 0x65, 0xf3, 0x4d, 0x60 } } }, + { { { 0x96, 0x9d, 0x31, 0xf4, 0xa2, 0xbe, 0x81, 0xb9, 0xa5, 0x59, 0x9e, 0xba, 0x07, 0xbe, 0x74, 0x58, 0xd8, 0xeb, 0xc5, 0x9f, 0x3d, 0xd1, 0xf4, 0xae, 0xce, 0x53, 0xdf, 0x4f, 0xc7, 0x2a, 0x89, 0x4d } }, + { { 0x29, 0xd8, 0xf2, 0xaa, 0xe9, 0x0e, 0xf7, 0x2e, 0x5f, 0x9d, 0x8a, 0x5b, 0x09, 0xed, 0xc9, 0x24, 0x22, 0xf4, 0x0f, 0x25, 0x8f, 0x1c, 0x84, 0x6e, 0x34, 0x14, 0x6c, 0xea, 0xb3, 0x86, 0x5d, 0x04 } } }, + { { { 0x07, 0x98, 0x61, 0xe8, 0x6a, 0xd2, 0x81, 0x49, 0x25, 0xd5, 0x5b, 0x18, 0xc7, 0x35, 0x52, 0x51, 0xa4, 0x46, 0xad, 0x18, 0x0d, 0xc9, 0x5f, 0x18, 0x91, 0x3b, 0xb4, 0xc0, 0x60, 0x59, 0x8d, 0x66 } }, + { { 0x03, 0x1b, 0x79, 0x53, 0x6e, 0x24, 0xae, 0x57, 0xd9, 0x58, 0x09, 0x85, 0x48, 0xa2, 0xd3, 0xb5, 0xe2, 0x4d, 0x11, 0x82, 0xe6, 0x86, 0x3c, 0xe9, 0xb1, 0x00, 0x19, 0xc2, 0x57, 0xf7, 0x66, 0x7a } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x0f, 0xe3, 0x89, 0x03, 0xd7, 0x22, 0x95, 0x9f, 0xca, 0xb4, 0x8d, 0x9e, 0x6d, 0x97, 0xff, 0x8d, 0x21, 0x59, 0x07, 0xef, 0x03, 0x2d, 0x5e, 0xf8, 0x44, 0x46, 0xe7, 0x85, 0x80, 0xc5, 0x89, 0x50 } }, + { { 0x8b, 0xd8, 0x53, 0x86, 0x24, 0x86, 0x29, 0x52, 0x01, 0xfa, 0x20, 0xc3, 0x4e, 0x95, 0xcb, 0xad, 0x7b, 0x34, 0x94, 0x30, 0xb7, 0x7a, 0xfa, 0x96, 0x41, 0x60, 0x2b, 0xcb, 0x59, 0xb9, 0xca, 0x50 } } }, + { { { 0xc2, 0x5b, 0x9b, 0x78, 0x23, 0x1b, 0x3a, 0x88, 0x94, 0x5f, 0x0a, 0x9b, 0x98, 0x2b, 0x6e, 0x53, 0x11, 0xf6, 0xff, 0xc6, 0x7d, 0x42, 0xcc, 0x02, 0x80, 0x40, 0x0d, 0x1e, 0xfb, 0xaf, 0x61, 0x07 } }, + { { 0xb0, 0xe6, 0x2f, 0x81, 0x70, 0xa1, 0x2e, 0x39, 0x04, 0x7c, 0xc4, 0x2c, 0x87, 0x45, 0x4a, 0x5b, 0x69, 0x97, 0xac, 0x6d, 0x2c, 0x10, 0x42, 0x7c, 0x3b, 0x15, 0x70, 0x60, 0x0e, 0x11, 0x6d, 0x3a } } }, + { { { 0x9b, 0x18, 0x80, 0x5e, 0xdb, 0x05, 0xbd, 0xc6, 0xb7, 0x3c, 0xc2, 0x40, 0x4d, 0x5d, 0xce, 0x97, 0x8a, 0x34, 0x15, 0xab, 0x28, 0x5d, 0x10, 0xf0, 0x37, 0x0c, 0xcc, 0x16, 0xfa, 0x1f, 0x33, 0x0d } }, + { { 0x19, 0xf9, 0x35, 0xaa, 0x59, 0x1a, 0x0c, 0x5c, 0x06, 0xfc, 0x6a, 0x0b, 0x97, 0x53, 0x36, 0xfc, 0x2a, 0xa5, 0x5a, 0x9b, 0x30, 0xef, 0x23, 0xaf, 0x39, 0x5d, 0x9a, 0x6b, 0x75, 0x57, 0x48, 0x0b } } }, + { { { 0x26, 0xdc, 0x76, 0x3b, 0xfc, 0xf9, 0x9c, 0x3f, 0x89, 0x0b, 0x62, 0x53, 0xaf, 0x83, 0x01, 0x2e, 0xbc, 0x6a, 0xc6, 0x03, 0x0d, 0x75, 0x2a, 0x0d, 0xe6, 0x94, 0x54, 0xcf, 0xb3, 0xe5, 0x96, 0x25 } }, + { { 0xfe, 0x82, 0xb1, 0x74, 0x31, 0x8a, 0xa7, 0x6f, 0x56, 0xbd, 0x8d, 0xf4, 0xe0, 0x94, 0x51, 0x59, 0xde, 0x2c, 0x5a, 0xf4, 0x84, 0x6b, 0x4a, 0x88, 0x93, 0xc0, 0x0c, 0x9a, 0xac, 0xa7, 0xa0, 0x68 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x25, 0x0d, 0xd6, 0xc7, 0x23, 0x47, 0x10, 0xad, 0xc7, 0x08, 0x5c, 0x87, 0x87, 0x93, 0x98, 0x18, 0xb8, 0xd3, 0x9c, 0xac, 0x5a, 0x3d, 0xc5, 0x75, 0xf8, 0x49, 0x32, 0x14, 0xcc, 0x51, 0x96, 0x24 } }, + { { 0x65, 0x9c, 0x5d, 0xf0, 0x37, 0x04, 0xf0, 0x34, 0x69, 0x2a, 0xf0, 0xa5, 0x64, 0xca, 0xde, 0x2b, 0x5b, 0x15, 0x10, 0xd2, 0xab, 0x06, 0xdd, 0xc4, 0xb0, 0xb6, 0x5b, 0xc1, 0x17, 0xdf, 0x8f, 0x02 } } }, + { { { 0xbd, 0x59, 0x3d, 0xbf, 0x5c, 0x31, 0x44, 0x2c, 0x32, 0x94, 0x04, 0x60, 0x84, 0x0f, 0xad, 0x00, 0xb6, 0x8f, 0xc9, 0x1d, 0xcc, 0x5c, 0xa2, 0x49, 0x0e, 0x50, 0x91, 0x08, 0x9a, 0x43, 0x55, 0x05 } }, + { { 0x5d, 0x93, 0x55, 0xdf, 0x9b, 0x12, 0x19, 0xec, 0x93, 0x85, 0x42, 0x9e, 0x66, 0x0f, 0x9d, 0xaf, 0x99, 0xaf, 0x26, 0x89, 0xbc, 0x61, 0xfd, 0xff, 0xce, 0x4b, 0xf4, 0x33, 0x95, 0xc9, 0x35, 0x58 } } }, + { { { 0x12, 0x55, 0xf9, 0xda, 0xcb, 0x44, 0xa7, 0xdc, 0x57, 0xe2, 0xf9, 0x9a, 0xe6, 0x07, 0x23, 0x60, 0x54, 0xa7, 0x39, 0xa5, 0x9b, 0x84, 0x56, 0x6e, 0xaa, 0x8b, 0x8f, 0xb0, 0x2c, 0x87, 0xaf, 0x67 } }, + { { 0x00, 0xa9, 0x4c, 0xb2, 0x12, 0xf8, 0x32, 0xa8, 0x7a, 0x00, 0x4b, 0x49, 0x32, 0xba, 0x1f, 0x5d, 0x44, 0x8e, 0x44, 0x7a, 0xdc, 0x11, 0xfb, 0x39, 0x08, 0x57, 0x87, 0xa5, 0x12, 0x42, 0x93, 0x0e } } }, + { { { 0x17, 0xb4, 0xae, 0x72, 0x59, 0xd0, 0xaa, 0xa8, 0x16, 0x8b, 0x63, 0x11, 0xb3, 0x43, 0x04, 0xda, 0x0c, 0xa8, 0xb7, 0x68, 0xdd, 0x4e, 0x54, 0xe7, 0xaf, 0x5d, 0x5d, 0x05, 0x76, 0x36, 0xec, 0x0d } }, + { { 0x6d, 0x7c, 0x82, 0x32, 0x38, 0x55, 0x57, 0x74, 0x5b, 0x7d, 0xc3, 0xc4, 0xfb, 0x06, 0x29, 0xf0, 0x13, 0x55, 0x54, 0xc6, 0xa7, 0xdc, 0x4c, 0x9f, 0x98, 0x49, 0x20, 0xa8, 0xc3, 0x8d, 0xfa, 0x48 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x87, 0x47, 0x9d, 0xe9, 0x25, 0xd5, 0xe3, 0x47, 0x78, 0xdf, 0x85, 0xa7, 0x85, 0x5e, 0x7a, 0x4c, 0x5f, 0x79, 0x1a, 0xf3, 0xa2, 0xb2, 0x28, 0xa0, 0x9c, 0xdd, 0x30, 0x40, 0xd4, 0x38, 0xbd, 0x28 } }, + { { 0xfc, 0xbb, 0xd5, 0x78, 0x6d, 0x1d, 0xd4, 0x99, 0xb4, 0xaa, 0x44, 0x44, 0x7a, 0x1b, 0xd8, 0xfe, 0xb4, 0x99, 0xb9, 0xcc, 0xe7, 0xc4, 0xd3, 0x3a, 0x73, 0x83, 0x41, 0x5c, 0x40, 0xd7, 0x2d, 0x55 } } }, + { { { 0x26, 0xe1, 0x7b, 0x5f, 0xe5, 0xdc, 0x3f, 0x7d, 0xa1, 0xa7, 0x26, 0x44, 0x22, 0x23, 0xc0, 0x8f, 0x7d, 0xf1, 0xb5, 0x11, 0x47, 0x7b, 0x19, 0xd4, 0x75, 0x6f, 0x1e, 0xa5, 0x27, 0xfe, 0xc8, 0x0e } }, + { { 0xd3, 0x11, 0x3d, 0xab, 0xef, 0x2c, 0xed, 0xb1, 0x3d, 0x7c, 0x32, 0x81, 0x6b, 0xfe, 0xf8, 0x1c, 0x3c, 0x7b, 0xc0, 0x61, 0xdf, 0xb8, 0x75, 0x76, 0x7f, 0xaa, 0xd8, 0x93, 0xaf, 0x3d, 0xe8, 0x3d } } }, + { { { 0xfd, 0x5b, 0x4e, 0x8d, 0xb6, 0x7e, 0x82, 0x9b, 0xef, 0xce, 0x04, 0x69, 0x51, 0x52, 0xff, 0xef, 0xa0, 0x52, 0xb5, 0x79, 0x17, 0x5e, 0x2f, 0xde, 0xd6, 0x3c, 0x2d, 0xa0, 0x43, 0xb4, 0x0b, 0x19 } }, + { { 0xc0, 0x61, 0x48, 0x48, 0x17, 0xf4, 0x9e, 0x18, 0x51, 0x2d, 0xea, 0x2f, 0xf2, 0xf2, 0xe0, 0xa3, 0x14, 0xb7, 0x8b, 0x3a, 0x30, 0xf5, 0x81, 0xc1, 0x5d, 0x71, 0x39, 0x62, 0x55, 0x1f, 0x60, 0x5a } } }, + { { { 0xe5, 0x89, 0x8a, 0x76, 0x6c, 0xdb, 0x4d, 0x0a, 0x5b, 0x72, 0x9d, 0x59, 0x6e, 0x63, 0x63, 0x18, 0x7c, 0xe3, 0xfa, 0xe2, 0xdb, 0xa1, 0x8d, 0xf4, 0xa5, 0xd7, 0x16, 0xb2, 0xd0, 0xb3, 0x3f, 0x39 } }, + { { 0xce, 0x60, 0x09, 0x6c, 0xf5, 0x76, 0x17, 0x24, 0x80, 0x3a, 0x96, 0xc7, 0x94, 0x2e, 0xf7, 0x6b, 0xef, 0xb5, 0x05, 0x96, 0xef, 0xd3, 0x7b, 0x51, 0xda, 0x05, 0x44, 0x67, 0xbc, 0x07, 0x21, 0x4e } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xe9, 0x73, 0x6f, 0x21, 0xb9, 0xde, 0x22, 0x7d, 0xeb, 0x97, 0x31, 0x10, 0xa3, 0xea, 0xe1, 0xc6, 0x37, 0xeb, 0x8f, 0x43, 0x58, 0xde, 0x41, 0x64, 0x0e, 0x3e, 0x07, 0x99, 0x3d, 0xf1, 0xdf, 0x1e } }, + { { 0xf8, 0xad, 0x43, 0xc2, 0x17, 0x06, 0xe2, 0xe4, 0xa9, 0x86, 0xcd, 0x18, 0xd7, 0x78, 0xc8, 0x74, 0x66, 0xd2, 0x09, 0x18, 0xa5, 0xf1, 0xca, 0xa6, 0x62, 0x92, 0xc1, 0xcb, 0x00, 0xeb, 0x42, 0x2e } } }, + { { { 0x7b, 0x34, 0x24, 0x4c, 0xcf, 0x38, 0xe5, 0x6c, 0x0a, 0x01, 0x2c, 0x22, 0x0b, 0x24, 0x38, 0xad, 0x24, 0x7e, 0x19, 0xf0, 0x6c, 0xf9, 0x31, 0xf4, 0x35, 0x11, 0xf6, 0x46, 0x33, 0x3a, 0x23, 0x59 } }, + { { 0x20, 0x0b, 0xa1, 0x08, 0x19, 0xad, 0x39, 0x54, 0xea, 0x3e, 0x23, 0x09, 0xb6, 0xe2, 0xd2, 0xbc, 0x4d, 0xfc, 0x9c, 0xf0, 0x13, 0x16, 0x22, 0x3f, 0xb9, 0xd2, 0x11, 0x86, 0x90, 0x55, 0xce, 0x3c } } }, + { { { 0xc4, 0x0b, 0x4b, 0x62, 0x99, 0x37, 0x84, 0x3f, 0x74, 0xa2, 0xf9, 0xce, 0xe2, 0x0b, 0x0f, 0x2a, 0x3d, 0xa3, 0xe3, 0xdb, 0x5a, 0x9d, 0x93, 0xcc, 0xa5, 0xef, 0x82, 0x91, 0x1d, 0xe6, 0x6c, 0x68 } }, + { { 0xa3, 0x64, 0x17, 0x9b, 0x8b, 0xc8, 0x3a, 0x61, 0xe6, 0x9d, 0xc6, 0xed, 0x7b, 0x03, 0x52, 0x26, 0x9d, 0x3a, 0xb3, 0x13, 0xcc, 0x8a, 0xfd, 0x2c, 0x1a, 0x1d, 0xed, 0x13, 0xd0, 0x55, 0x57, 0x0e } } }, + { { { 0x1a, 0xea, 0xbf, 0xfd, 0x4a, 0x3c, 0x8e, 0xec, 0x29, 0x7e, 0x77, 0x77, 0x12, 0x99, 0xd7, 0x84, 0xf9, 0x55, 0x7f, 0xf1, 0x8b, 0xb4, 0xd2, 0x95, 0xa3, 0x8d, 0xf0, 0x8a, 0xa7, 0xeb, 0x82, 0x4b } }, + { { 0x2c, 0x28, 0xf4, 0x3a, 0xf6, 0xde, 0x0a, 0xe0, 0x41, 0x44, 0x23, 0xf8, 0x3f, 0x03, 0x64, 0x9f, 0xc3, 0x55, 0x4c, 0xc6, 0xc1, 0x94, 0x1c, 0x24, 0x5d, 0x5f, 0x92, 0x45, 0x96, 0x57, 0x37, 0x14 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xc1, 0xcd, 0x90, 0x66, 0xb9, 0x76, 0xa0, 0x5b, 0xa5, 0x85, 0x75, 0x23, 0xf9, 0x89, 0xa5, 0x82, 0xb2, 0x6f, 0xb1, 0xeb, 0xc4, 0x69, 0x6f, 0x18, 0x5a, 0xed, 0x94, 0x3d, 0x9d, 0xd9, 0x2c, 0x1a } }, + { { 0x35, 0xb0, 0xe6, 0x73, 0x06, 0xb7, 0x37, 0xe0, 0xf8, 0xb0, 0x22, 0xe8, 0xd2, 0xed, 0x0b, 0xef, 0xe6, 0xc6, 0x5a, 0x99, 0x9e, 0x1a, 0x9f, 0x04, 0x97, 0xe4, 0x4d, 0x0b, 0xbe, 0xba, 0x44, 0x40 } } }, + { { { 0xc1, 0x56, 0x96, 0x91, 0x5f, 0x1f, 0xbb, 0x54, 0x6f, 0x88, 0x89, 0x0a, 0xb2, 0xd6, 0x41, 0x42, 0x6a, 0x82, 0xee, 0x14, 0xaa, 0x76, 0x30, 0x65, 0x0f, 0x67, 0x39, 0xa6, 0x51, 0x7c, 0x49, 0x24 } }, + { { 0x35, 0xa3, 0x78, 0xd1, 0x11, 0x0f, 0x75, 0xd3, 0x70, 0x46, 0xdb, 0x20, 0x51, 0xcb, 0x92, 0x80, 0x54, 0x10, 0x74, 0x36, 0x86, 0xa9, 0xd7, 0xa3, 0x08, 0x78, 0xf1, 0x01, 0x29, 0xf8, 0x80, 0x3b } } }, + { { { 0xdb, 0xa7, 0x9d, 0x9d, 0xbf, 0xa0, 0xcc, 0xed, 0x53, 0xa2, 0xa2, 0x19, 0x39, 0x48, 0x83, 0x19, 0x37, 0x58, 0xd1, 0x04, 0x28, 0x40, 0xf7, 0x8a, 0xc2, 0x08, 0xb7, 0xa5, 0x42, 0xcf, 0x53, 0x4c } }, + { { 0xa7, 0xbb, 0xf6, 0x8e, 0xad, 0xdd, 0xf7, 0x90, 0xdd, 0x5f, 0x93, 0x89, 0xae, 0x04, 0x37, 0xe6, 0x9a, 0xb7, 0xe8, 0xc0, 0xdf, 0x16, 0x2a, 0xbf, 0xc4, 0x3a, 0x3c, 0x41, 0xd5, 0x89, 0x72, 0x5a } } }, + { { { 0x1f, 0x96, 0xff, 0x34, 0x2c, 0x13, 0x21, 0xcb, 0x0a, 0x89, 0x85, 0xbe, 0xb3, 0x70, 0x9e, 0x1e, 0xde, 0x97, 0xaf, 0x96, 0x30, 0xf7, 0x48, 0x89, 0x40, 0x8d, 0x07, 0xf1, 0x25, 0xf0, 0x30, 0x58 } }, + { { 0x1e, 0xd4, 0x93, 0x57, 0xe2, 0x17, 0xe7, 0x9d, 0xab, 0x3c, 0x55, 0x03, 0x82, 0x2f, 0x2b, 0xdb, 0x56, 0x1e, 0x30, 0x2e, 0x24, 0x47, 0x6e, 0xe6, 0xff, 0x33, 0x24, 0x2c, 0x75, 0x51, 0xd4, 0x67 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0x2b, 0x06, 0xd9, 0xa1, 0x5d, 0xe1, 0xf4, 0xd1, 0x1e, 0x3c, 0x9a, 0xc6, 0x29, 0x2b, 0x13, 0x13, 0x78, 0xc0, 0xd8, 0x16, 0x17, 0x2d, 0x9e, 0xa9, 0xc9, 0x79, 0x57, 0xab, 0x24, 0x91, 0x92, 0x19 } }, + { { 0x69, 0xfb, 0xa1, 0x9c, 0xa6, 0x75, 0x49, 0x7d, 0x60, 0x73, 0x40, 0x42, 0xc4, 0x13, 0x0a, 0x95, 0x79, 0x1e, 0x04, 0x83, 0x94, 0x99, 0x9b, 0x1e, 0x0c, 0xe8, 0x1f, 0x54, 0xef, 0xcb, 0xc0, 0x52 } } }, + { { { 0x14, 0x89, 0x73, 0xa1, 0x37, 0x87, 0x6a, 0x7a, 0xcf, 0x1d, 0xd9, 0x2e, 0x1a, 0x67, 0xed, 0x74, 0xc0, 0xf0, 0x9c, 0x33, 0xdd, 0xdf, 0x08, 0xbf, 0x7b, 0xd1, 0x66, 0xda, 0xe6, 0xc9, 0x49, 0x08 } }, + { { 0xe9, 0xdd, 0x5e, 0x55, 0xb0, 0x0a, 0xde, 0x21, 0x4c, 0x5a, 0x2e, 0xd4, 0x80, 0x3a, 0x57, 0x92, 0x7a, 0xf1, 0xc4, 0x2c, 0x40, 0xaf, 0x2f, 0xc9, 0x92, 0x03, 0xe5, 0x5a, 0xbc, 0xdc, 0xf4, 0x09 } } }, + { { { 0xf3, 0xe1, 0x2b, 0x7c, 0x05, 0x86, 0x80, 0x93, 0x4a, 0xad, 0xb4, 0x8f, 0x7e, 0x99, 0x0c, 0xfd, 0xcd, 0xef, 0xd1, 0xff, 0x2c, 0x69, 0x34, 0x13, 0x41, 0x64, 0xcf, 0x3b, 0xd0, 0x90, 0x09, 0x1e } }, + { { 0x9d, 0x45, 0xd6, 0x80, 0xe6, 0x45, 0xaa, 0xf4, 0x15, 0xaa, 0x5c, 0x34, 0x87, 0x99, 0xa2, 0x8c, 0x26, 0x84, 0x62, 0x7d, 0xb6, 0x29, 0xc0, 0x52, 0xea, 0xf5, 0x81, 0x18, 0x0f, 0x35, 0xa9, 0x0e } } }, + { { { 0xe7, 0x20, 0x72, 0x7c, 0x6d, 0x94, 0x5f, 0x52, 0x44, 0x54, 0xe3, 0xf1, 0xb2, 0xb0, 0x36, 0x46, 0x0f, 0xae, 0x92, 0xe8, 0x70, 0x9d, 0x6e, 0x79, 0xb1, 0xad, 0x37, 0xa9, 0x5f, 0xc0, 0xde, 0x03 } }, + { { 0x15, 0x55, 0x37, 0xc6, 0x1c, 0x27, 0x1c, 0x6d, 0x14, 0x4f, 0xca, 0xa4, 0xc4, 0x88, 0x25, 0x46, 0x39, 0xfc, 0x5a, 0xe5, 0xfe, 0x29, 0x11, 0x69, 0xf5, 0x72, 0x84, 0x4d, 0x78, 0x9f, 0x94, 0x15 } } }, + { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + { { { 0xec, 0xd3, 0xff, 0x57, 0x0b, 0xb0, 0xb2, 0xdc, 0xf8, 0x4f, 0xe2, 0x12, 0xd5, 0x36, 0xbe, 0x6b, 0x09, 0x43, 0x6d, 0xa3, 0x4d, 0x90, 0x2d, 0xb8, 0x74, 0xe8, 0x71, 0x45, 0x19, 0x8b, 0x0c, 0x6a } }, + { { 0xb8, 0x42, 0x1c, 0x03, 0xad, 0x2c, 0x03, 0x8e, 0xac, 0xd7, 0x98, 0x29, 0x13, 0xc6, 0x02, 0x29, 0xb5, 0xd4, 0xe7, 0xcf, 0xcc, 0x8b, 0x83, 0xec, 0x35, 0xc7, 0x9c, 0x74, 0xb7, 0xad, 0x85, 0x5f } } }, + { { { 0x78, 0x84, 0xe1, 0x56, 0x45, 0x69, 0x68, 0x5a, 0x4f, 0xb8, 0xb1, 0x29, 0xff, 0x33, 0x03, 0x31, 0xb7, 0xcb, 0x96, 0x25, 0xe6, 0xe6, 0x41, 0x98, 0x1a, 0xbb, 0x03, 0x56, 0xf2, 0xb2, 0x91, 0x34 } }, + { { 0x2c, 0x6c, 0xf7, 0x66, 0xa4, 0x62, 0x6b, 0x39, 0xb3, 0xba, 0x65, 0xd3, 0x1c, 0xf8, 0x11, 0xaa, 0xbe, 0xdc, 0x80, 0x59, 0x87, 0xf5, 0x7b, 0xe5, 0xe3, 0xb3, 0x3e, 0x39, 0xda, 0xbe, 0x88, 0x09 } } }, + { { { 0x8b, 0xf1, 0xa0, 0xf5, 0xdc, 0x29, 0xb4, 0xe2, 0x07, 0xc6, 0x7a, 0x00, 0xd0, 0x89, 0x17, 0x51, 0xd4, 0xbb, 0xd4, 0x22, 0xea, 0x7e, 0x7d, 0x7c, 0x24, 0xea, 0xf2, 0xe8, 0x22, 0x12, 0x95, 0x06 } }, + { { 0xda, 0x7c, 0xa4, 0x0c, 0xf4, 0xba, 0x6e, 0xe1, 0x89, 0xb5, 0x59, 0xca, 0xf1, 0xc0, 0x29, 0x36, 0x09, 0x44, 0xe2, 0x7f, 0xd1, 0x63, 0x15, 0x99, 0xea, 0x25, 0xcf, 0x0c, 0x9d, 0xc0, 0x44, 0x6f } } }, + { { { 0x1d, 0x86, 0x4e, 0xcf, 0xf7, 0x37, 0x10, 0x25, 0x8f, 0x12, 0xfb, 0x19, 0xfb, 0xe0, 0xed, 0x10, 0xc8, 0xe2, 0xf5, 0x75, 0xb1, 0x33, 0xc0, 0x96, 0x0d, 0xfb, 0x15, 0x6c, 0x0d, 0x07, 0x5f, 0x05 } }, + { { 0x69, 0x3e, 0x47, 0x97, 0x2c, 0xaf, 0x52, 0x7c, 0x78, 0x83, 0xad, 0x1b, 0x39, 0x82, 0x2f, 0x02, 0x6f, 0x47, 0xdb, 0x2a, 0xb0, 0xe1, 0x91, 0x99, 0x55, 0xb8, 0x99, 0x3a, 0xa0, 0x44, 0x11, 0x51 } } } }; ZT_INLINE void p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p) { @@ -2963,8 +2027,7 @@ void ge25519_pack(unsigned char r[32], const ge25519_p3 *p) r[31] ^= fe25519_getparity(&tx) << 7; } -ZT_INLINE void ge25519_double_scalarmult_vartime( - ge25519_p3 *r, const ge25519_p3 *p1, const sc25519 *s1, const ge25519_p3 *p2, const sc25519 *s2) +ZT_INLINE void ge25519_double_scalarmult_vartime(ge25519_p3 *r, const ge25519_p3 *p1, const sc25519 *s1, const ge25519_p3 *p2, const sc25519 *s2) { ge25519_p1p1 tp1p1; ge25519_p3 pre[16]; @@ -3030,9 +2093,7 @@ void ge25519_scalarmult_base(ge25519_p3 *r, const sc25519 *s) } } -ZT_INLINE void get_hram( - unsigned char *hram, const unsigned char *sm, const unsigned char *pk, unsigned char *playground, - unsigned long long smlen) +ZT_INLINE void get_hram(unsigned char *hram, const unsigned char *sm, const unsigned char *pk, unsigned char *playground, unsigned long long smlen) { for (int i = 0; i < 32; ++i) playground[i] = sm[i]; @@ -3062,16 +2123,9 @@ void C25519::generateC25519(uint8_t pub[ZT_C25519_ECDH_PUBLIC_KEY_SIZE], uint8_t s_calcPubDH(pub, priv); } -void C25519::agree( - const uint8_t mine[ZT_C25519_ECDH_PRIVATE_KEY_SIZE], const uint8_t their[ZT_C25519_ECDH_PUBLIC_KEY_SIZE], - uint8_t rawkey[ZT_C25519_ECDH_SHARED_SECRET_SIZE]) -{ - crypto_scalarmult(rawkey, mine, their); -} +void C25519::agree(const uint8_t mine[ZT_C25519_ECDH_PRIVATE_KEY_SIZE], const uint8_t their[ZT_C25519_ECDH_PUBLIC_KEY_SIZE], uint8_t rawkey[ZT_C25519_ECDH_SHARED_SECRET_SIZE]) { crypto_scalarmult(rawkey, mine, their); } -void C25519::sign( - const uint8_t myPrivate[ZT_C25519_COMBINED_PRIVATE_KEY_SIZE], - const uint8_t myPublic[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], const void *msg, unsigned int len, void *signature) +void C25519::sign(const uint8_t myPrivate[ZT_C25519_COMBINED_PRIVATE_KEY_SIZE], const uint8_t myPublic[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], const void *msg, unsigned int len, void *signature) { unsigned char digest[64]; // we sign the first 32 bytes of SHA-512(msg) SHA512(digest, msg, len); @@ -3119,9 +2173,7 @@ void C25519::sign( sig[32 + i] = s[i]; } -bool C25519::verify( - const uint8_t their[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], const void *msg, unsigned int len, const void *signature, - const unsigned int siglen) +bool C25519::verify(const uint8_t their[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], const void *msg, unsigned int len, const void *signature, const unsigned int siglen) { if (siglen < 64) return false; diff --git a/core/C25519.hpp b/core/C25519.hpp index 3429d6003..a7e98946d 100644 --- a/core/C25519.hpp +++ b/core/C25519.hpp @@ -40,14 +40,12 @@ class C25519 { /** * Generate a set of two 25519 keys: a C25519 ECDH key pair and an Ed25519 EDDSA key pair. */ - static void generateCombined( - uint8_t pub[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], uint8_t priv[ZT_C25519_COMBINED_PRIVATE_KEY_SIZE]); + static void generateCombined(uint8_t pub[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], uint8_t priv[ZT_C25519_COMBINED_PRIVATE_KEY_SIZE]); /** * Generate a C25519 ECDH key pair only. */ - static void - generateC25519(uint8_t pub[ZT_C25519_ECDH_PUBLIC_KEY_SIZE], uint8_t priv[ZT_C25519_ECDH_PRIVATE_KEY_SIZE]); + static void generateC25519(uint8_t pub[ZT_C25519_ECDH_PUBLIC_KEY_SIZE], uint8_t priv[ZT_C25519_ECDH_PRIVATE_KEY_SIZE]); /** * Generate a key pair satisfying a condition @@ -62,9 +60,7 @@ class C25519 { * @return Key pair where cond(kp) returns true * @tparam F Type of 'cond' */ - template - static ZT_INLINE void generateSatisfying( - F cond, uint8_t pub[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], uint8_t priv[ZT_C25519_COMBINED_PRIVATE_KEY_SIZE]) + template static ZT_INLINE void generateSatisfying(F cond, uint8_t pub[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], uint8_t priv[ZT_C25519_COMBINED_PRIVATE_KEY_SIZE]) { Utils::getSecureRandom(priv, ZT_C25519_COMBINED_PRIVATE_KEY_SIZE); s_calcPubED(pub, priv); // do Ed25519 key -- bytes 32-63 of pub and priv @@ -85,9 +81,7 @@ class C25519 { * @param their Their public key * @param rawkey Buffer to receive raw (not hashed) agreed upon key */ - static void agree( - const uint8_t mine[ZT_C25519_ECDH_PRIVATE_KEY_SIZE], const uint8_t their[ZT_C25519_ECDH_PUBLIC_KEY_SIZE], - uint8_t rawkey[ZT_C25519_ECDH_SHARED_SECRET_SIZE]); + static void agree(const uint8_t mine[ZT_C25519_ECDH_PRIVATE_KEY_SIZE], const uint8_t their[ZT_C25519_ECDH_PUBLIC_KEY_SIZE], uint8_t rawkey[ZT_C25519_ECDH_SHARED_SECRET_SIZE]); /** * Sign a message with a sender's key pair @@ -106,9 +100,7 @@ class C25519 { * @param len Length of message in bytes * @param signature Buffer to fill with signature -- MUST be 96 bytes in length */ - static void sign( - const uint8_t myPrivate[ZT_C25519_COMBINED_PRIVATE_KEY_SIZE], - const uint8_t myPublic[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], const void *msg, unsigned int len, void *signature); + static void sign(const uint8_t myPrivate[ZT_C25519_COMBINED_PRIVATE_KEY_SIZE], const uint8_t myPublic[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], const void *msg, unsigned int len, void *signature); /** * Verify a message's signature @@ -120,9 +112,7 @@ class C25519 { * @param siglen Length of signature in bytes * @return True if signature is valid and the message is authentic and unmodified */ - static bool verify( - const uint8_t their[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], const void *msg, unsigned int len, - const void *signature, unsigned int siglen); + static bool verify(const uint8_t their[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE], const void *msg, unsigned int len, const void *signature, unsigned int siglen); private: // derive first 32 bytes of kp.pub from first 32 bytes of kp.priv diff --git a/core/CAPI.cpp b/core/CAPI.cpp index 7cebd8b5c..5212788e2 100644 --- a/core/CAPI.cpp +++ b/core/CAPI.cpp @@ -77,8 +77,7 @@ ZT_MAYBE_UNUSED void ZT_version(int *major, int *minor, int *revision, int *buil /********************************************************************************************************************/ -ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_new( - ZT_Node **node, int64_t clock, int64_t ticks, void *tptr, void *uptr, const struct ZT_Node_Callbacks *callbacks) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_new(ZT_Node **node, int64_t clock, int64_t ticks, void *tptr, void *uptr, const struct ZT_Node_Callbacks *callbacks) { *node = nullptr; try { @@ -108,16 +107,12 @@ ZT_MAYBE_UNUSED void ZT_Node_delete(ZT_Node *node, int64_t clock, int64_t ticks, } } -ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processWirePacket( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, int64_t localSocket, const ZT_InetAddress *remoteAddress, - const void *packetData, unsigned int packetLength, int isZtBuffer, volatile int64_t *) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processWirePacket(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, int64_t localSocket, const ZT_InetAddress *remoteAddress, const void *packetData, unsigned int packetLength, int isZtBuffer, volatile int64_t *) { try { ZeroTier::CallContext cc(clock, ticks, tptr); - ZeroTier::SharedPtr buf( - (isZtBuffer) ? ZT_PTRTOBUF(packetData) : new ZeroTier::Buf(packetData, packetLength & ZT_BUF_MEM_MASK)); - reinterpret_cast(node)->context().vl1->onRemotePacket( - cc, localSocket, *ZeroTier::asInetAddress(remoteAddress), buf, packetLength); + ZeroTier::SharedPtr buf((isZtBuffer) ? ZT_PTRTOBUF(packetData) : new ZeroTier::Buf(packetData, packetLength & ZT_BUF_MEM_MASK)); + reinterpret_cast(node)->context().vl1->onRemotePacket(cc, localSocket, *ZeroTier::asInetAddress(remoteAddress), buf, packetLength); } catch (std::bad_alloc &exc) { return ZT_RESULT_FATAL_ERROR_OUT_OF_MEMORY; @@ -129,20 +124,15 @@ ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processWirePacket( return ZT_RESULT_OK; } -ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processVirtualNetworkFrame( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t sourceMac, uint64_t destMac, - unsigned int etherType, unsigned int vlanId, const void *frameData, unsigned int frameLength, int isZtBuffer, - volatile int64_t *) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processVirtualNetworkFrame(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t sourceMac, uint64_t destMac, unsigned int etherType, unsigned int vlanId, const void *frameData, unsigned int frameLength, int isZtBuffer, volatile int64_t *) { try { ZeroTier::CallContext cc(clock, ticks, tptr); const ZeroTier::Context &ctx = reinterpret_cast(node)->context(); ZeroTier::SharedPtr network(ctx.networks->get(nwid)); if (likely(network)) { - ZeroTier::SharedPtr buf( - (isZtBuffer) ? ZT_PTRTOBUF(frameData) : new ZeroTier::Buf(frameData, frameLength & ZT_BUF_MEM_MASK)); - ctx.vl2->onLocalEthernet( - cc, network, ZeroTier::MAC(sourceMac), ZeroTier::MAC(destMac), etherType, vlanId, buf, frameLength); + ZeroTier::SharedPtr buf((isZtBuffer) ? ZT_PTRTOBUF(frameData) : new ZeroTier::Buf(frameData, frameLength & ZT_BUF_MEM_MASK)); + ctx.vl2->onLocalEthernet(cc, network, ZeroTier::MAC(sourceMac), ZeroTier::MAC(destMac), etherType, vlanId, buf, frameLength); return ZT_RESULT_OK; } else { @@ -157,8 +147,7 @@ ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processVirtualNetworkFrame( } } -ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processBackgroundTasks( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, volatile int64_t *nextBackgroundTaskDeadline) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processBackgroundTasks(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, volatile int64_t *nextBackgroundTaskDeadline) { try { ZeroTier::CallContext cc(clock, ticks, tptr); @@ -172,9 +161,7 @@ ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_processBackgroundTasks( } } -ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_join( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void *uptr, uint64_t nwid, - const ZT_Fingerprint *controllerFingerprint) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_join(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void *uptr, uint64_t nwid, const ZT_Fingerprint *controllerFingerprint) { try { ZeroTier::CallContext cc(clock, ticks, tptr); @@ -188,8 +175,7 @@ ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_join( } } -ZT_MAYBE_UNUSED enum ZT_ResultCode -ZT_Node_leave(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void **uptr, uint64_t nwid) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_leave(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void **uptr, uint64_t nwid) { try { ZeroTier::CallContext cc(clock, ticks, tptr); @@ -203,9 +189,7 @@ ZT_Node_leave(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void **up } } -ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_multicastSubscribe( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t multicastGroup, - unsigned long multicastAdi) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_multicastSubscribe(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi) { try { ZeroTier::CallContext cc(clock, ticks, tptr); @@ -219,9 +203,7 @@ ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_multicastSubscribe( } } -ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_multicastUnsubscribe( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t multicastGroup, - unsigned long multicastAdi) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_multicastUnsubscribe(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi) { try { ZeroTier::CallContext cc(clock, ticks, tptr); @@ -235,15 +217,9 @@ ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_multicastUnsubscribe( } } -ZT_MAYBE_UNUSED uint64_t ZT_Node_address(ZT_Node *node) -{ - return reinterpret_cast(node)->context().identity.address().toInt(); -} +ZT_MAYBE_UNUSED uint64_t ZT_Node_address(ZT_Node *node) { return reinterpret_cast(node)->context().identity.address().toInt(); } -ZT_MAYBE_UNUSED const ZT_Identity *ZT_Node_identity(ZT_Node *node) -{ - return (const ZT_Identity *)(&(reinterpret_cast(node)->identity())); -} +ZT_MAYBE_UNUSED const ZT_Identity *ZT_Node_identity(ZT_Node *node) { return (const ZT_Identity *)(&(reinterpret_cast(node)->identity())); } ZT_MAYBE_UNUSED void ZT_Node_status(ZT_Node *node, int64_t, int64_t, void *, ZT_NodeStatus *status) { @@ -294,8 +270,7 @@ ZT_MAYBE_UNUSED void ZT_Node_setNetworkUserPtr(ZT_Node *node, uint64_t nwid, voi } } -ZT_MAYBE_UNUSED void ZT_Node_setInterfaceAddresses( - ZT_Node *node, int64_t, int64_t, void *, const ZT_InterfaceAddress *addrs, unsigned int addrCount) +ZT_MAYBE_UNUSED void ZT_Node_setInterfaceAddresses(ZT_Node *node, int64_t, int64_t, void *, const ZT_InterfaceAddress *addrs, unsigned int addrCount) { try { reinterpret_cast(node)->setInterfaceAddresses(addrs, addrCount); @@ -304,9 +279,7 @@ ZT_MAYBE_UNUSED void ZT_Node_setInterfaceAddresses( } } -ZT_MAYBE_UNUSED enum ZT_CertificateError ZT_Node_addCertificate( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, unsigned int localTrust, const ZT_Certificate *cert, - const void *certData, unsigned int certSize) +ZT_MAYBE_UNUSED enum ZT_CertificateError ZT_Node_addCertificate(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, unsigned int localTrust, const ZT_Certificate *cert, const void *certData, unsigned int certSize) { try { ZeroTier::CallContext cc(clock, ticks, tptr); @@ -317,8 +290,7 @@ ZT_MAYBE_UNUSED enum ZT_CertificateError ZT_Node_addCertificate( } } -ZT_MAYBE_UNUSED enum ZT_ResultCode -ZT_Node_deleteCertificate(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, const void *serialNo) +ZT_MAYBE_UNUSED enum ZT_ResultCode ZT_Node_deleteCertificate(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, const void *serialNo) { try { ZeroTier::CallContext cc(clock, ticks, tptr); @@ -339,9 +311,7 @@ ZT_MAYBE_UNUSED ZT_CertificateList *ZT_Node_listCertificates(ZT_Node *node, int6 } } -ZT_MAYBE_UNUSED int ZT_Node_sendUserMessage( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t dest, uint64_t typeId, const void *data, - unsigned int len) +ZT_MAYBE_UNUSED int ZT_Node_sendUserMessage(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t dest, uint64_t typeId, const void *data, unsigned int len) { try { ZeroTier::CallContext cc(clock, ticks, tptr); @@ -363,18 +333,14 @@ ZT_MAYBE_UNUSED void ZT_Node_setController(ZT_Node *node, void *networkControlle /********************************************************************************************************************/ -ZT_MAYBE_UNUSED ZT_Locator *ZT_Locator_create( - int64_t rev, const ZT_Endpoint *endpoints, const ZT_EndpointAttributes *, unsigned int endpointCount, - const ZT_Identity *signer) +ZT_MAYBE_UNUSED ZT_Locator *ZT_Locator_create(int64_t rev, const ZT_Endpoint *endpoints, const ZT_EndpointAttributes *, unsigned int endpointCount, const ZT_Identity *signer) { try { if ((!endpoints) || (endpointCount == 0) || (!signer)) return nullptr; ZeroTier::Locator *loc = new ZeroTier::Locator(); for (unsigned int i = 0; i < endpointCount; ++i) - loc->add( - reinterpret_cast(endpoints)[i], - ZeroTier::Locator::EndpointAttributes::DEFAULT); + loc->add(reinterpret_cast(endpoints)[i], ZeroTier::Locator::EndpointAttributes::DEFAULT); if (!loc->sign(rev, *reinterpret_cast(signer))) { delete loc; return nullptr; @@ -462,10 +428,7 @@ ZT_MAYBE_UNUSED int ZT_Locator_equals(const ZT_Locator *a, const ZT_Locator *b) return 0; } -ZT_MAYBE_UNUSED unsigned int ZT_Locator_endpointCount(const ZT_Locator *loc) -{ - return (loc) ? (unsigned int)(reinterpret_cast(loc)->endpoints().size()) : 0; -} +ZT_MAYBE_UNUSED unsigned int ZT_Locator_endpointCount(const ZT_Locator *loc) { return (loc) ? (unsigned int)(reinterpret_cast(loc)->endpoints().size()) : 0; } ZT_MAYBE_UNUSED const ZT_Endpoint *ZT_Locator_endpoint(const ZT_Locator *loc, const unsigned int ep) { @@ -480,10 +443,7 @@ ZT_MAYBE_UNUSED int ZT_Locator_verify(const ZT_Locator *loc, const ZT_Identity * { if ((!loc) || (!signer)) return 0; - return reinterpret_cast(loc)->verify( - *reinterpret_cast(signer)) - ? 1 - : 0; + return reinterpret_cast(loc)->verify(*reinterpret_cast(signer)) ? 1 : 0; } ZT_MAYBE_UNUSED void ZT_Locator_delete(const ZT_Locator *loc) @@ -512,8 +472,7 @@ ZT_MAYBE_UNUSED ZT_Identity *ZT_Identity_clone(const ZT_Identity *id) { if (id) { try { - return reinterpret_cast( - new ZeroTier::Identity(*reinterpret_cast(id))); + return reinterpret_cast(new ZeroTier::Identity(*reinterpret_cast(id))); } catch (...) { return nullptr; @@ -546,8 +505,7 @@ ZT_MAYBE_UNUSED int ZT_Identity_validate(const ZT_Identity *id) return reinterpret_cast(id)->locallyValidate() ? 1 : 0; } -ZT_MAYBE_UNUSED unsigned int ZT_Identity_sign( - const ZT_Identity *id, const void *data, unsigned int len, void *signature, unsigned int signatureBufferLength) +ZT_MAYBE_UNUSED unsigned int ZT_Identity_sign(const ZT_Identity *id, const void *data, unsigned int len, void *signature, unsigned int signatureBufferLength) { if (!id) return 0; @@ -556,8 +514,7 @@ ZT_MAYBE_UNUSED unsigned int ZT_Identity_sign( return reinterpret_cast(id)->sign(data, len, signature, signatureBufferLength); } -ZT_MAYBE_UNUSED int ZT_Identity_verify( - const ZT_Identity *id, const void *data, unsigned int len, const void *signature, unsigned int sigLen) +ZT_MAYBE_UNUSED int ZT_Identity_verify(const ZT_Identity *id, const void *data, unsigned int len, const void *signature, unsigned int sigLen) { if ((!id) || (!signature) || (!sigLen)) return 0; @@ -607,8 +564,7 @@ ZT_MAYBE_UNUSED int ZT_Identity_compare(const ZT_Identity *a, const ZT_Identity if (*reinterpret_cast(a) < *reinterpret_cast(b)) { return -1; } - else if ( - *reinterpret_cast(b) < *reinterpret_cast(a)) { + else if (*reinterpret_cast(b) < *reinterpret_cast(a)) { return 1; } else { @@ -635,30 +591,22 @@ ZT_MAYBE_UNUSED void ZT_Identity_delete(const ZT_Identity *id) /********************************************************************************************************************/ -ZT_MAYBE_UNUSED int ZT_Certificate_newKeyPair( - const enum ZT_CertificatePublicKeyAlgorithm type, uint8_t publicKey[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], - int *const publicKeySize, uint8_t privateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE], int *const privateKeySize) +ZT_MAYBE_UNUSED int ZT_Certificate_newKeyPair(const enum ZT_CertificatePublicKeyAlgorithm type, uint8_t publicKey[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], int *const publicKeySize, uint8_t privateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE], int *const privateKeySize) { try { - return ZeroTier::Certificate::newKeyPair(type, publicKey, publicKeySize, privateKey, privateKeySize) - ? ZT_RESULT_OK - : ZT_RESULT_ERROR_BAD_PARAMETER; + return ZeroTier::Certificate::newKeyPair(type, publicKey, publicKeySize, privateKey, privateKeySize) ? ZT_RESULT_OK : ZT_RESULT_ERROR_BAD_PARAMETER; } catch (...) { return ZT_RESULT_FATAL_ERROR_INTERNAL; } } -ZT_MAYBE_UNUSED int ZT_Certificate_newCSR( - const ZT_Certificate_Subject *subject, const void *const certificatePrivateKey, const int certificatePrivateKeySize, - const void *const uniqueIdPrivateKey, const int uniqueIdPrivateKeySize, void *const csr, int *const csrSize) +ZT_MAYBE_UNUSED int ZT_Certificate_newCSR(const ZT_Certificate_Subject *subject, const void *const certificatePrivateKey, const int certificatePrivateKeySize, const void *const uniqueIdPrivateKey, const int uniqueIdPrivateKeySize, void *const csr, int *const csrSize) { try { if ((!subject) || (!certificatePrivateKey) || (certificatePrivateKeySize <= 0)) return ZT_RESULT_ERROR_BAD_PARAMETER; - const ZeroTier::Vector csrV(ZeroTier::Certificate::createCSR( - *subject, certificatePrivateKey, (unsigned int)certificatePrivateKeySize, uniqueIdPrivateKey, - (unsigned int)uniqueIdPrivateKeySize)); + const ZeroTier::Vector csrV(ZeroTier::Certificate::createCSR(*subject, certificatePrivateKey, (unsigned int)certificatePrivateKeySize, uniqueIdPrivateKey, (unsigned int)uniqueIdPrivateKeySize)); if (csrV.empty() || ((int)csrV.size() > *csrSize)) return ZT_RESULT_ERROR_BAD_PARAMETER; ZeroTier::Utils::copy(csr, csrV.data(), (unsigned int)csrV.size()); @@ -670,9 +618,7 @@ ZT_MAYBE_UNUSED int ZT_Certificate_newCSR( } } -ZT_MAYBE_UNUSED ZT_Certificate *ZT_Certificate_sign( - const ZT_Certificate *cert, const uint8_t issuer[ZT_CERTIFICATE_HASH_SIZE], const void *issuerPrivateKey, - int issuerPrivateKeySize) +ZT_MAYBE_UNUSED ZT_Certificate *ZT_Certificate_sign(const ZT_Certificate *cert, const uint8_t issuer[ZT_CERTIFICATE_HASH_SIZE], const void *issuerPrivateKey, int issuerPrivateKeySize) { try { ZeroTier::Certificate *const c = new ZeroTier::Certificate(*cert); @@ -688,8 +634,7 @@ ZT_MAYBE_UNUSED ZT_Certificate *ZT_Certificate_sign( return nullptr; } -ZT_MAYBE_UNUSED enum ZT_CertificateError -ZT_Certificate_decode(const ZT_Certificate **decodedCert, const void *cert, int certSize, int verify) +ZT_MAYBE_UNUSED enum ZT_CertificateError ZT_Certificate_decode(const ZT_Certificate **decodedCert, const void *cert, int certSize, int verify) { try { if ((!decodedCert) || (!cert) || (certSize <= 0)) @@ -787,10 +732,7 @@ ZT_MAYBE_UNUSED int ZT_Endpoint_fromBytes(ZT_Endpoint *ep, const void *bytes, un { if ((!ep) || (!bytes) || (!len)) return ZT_RESULT_ERROR_BAD_PARAMETER; - return (reinterpret_cast(ep)->unmarshal(reinterpret_cast(bytes), (int)len) - > 0) - ? 0 - : ZT_RESULT_ERROR_BAD_PARAMETER; + return (reinterpret_cast(ep)->unmarshal(reinterpret_cast(bytes), (int)len) > 0) ? 0 : ZT_RESULT_ERROR_BAD_PARAMETER; } /********************************************************************************************************************/ @@ -849,8 +791,7 @@ ZT_MAYBE_UNUSED void ZT_InetAddress_set(ZT_InetAddress *ia, const void *saddr) (*reinterpret_cast(ia)) = reinterpret_cast(saddr); } -ZT_MAYBE_UNUSED void -ZT_InetAddress_setIpBytes(ZT_InetAddress *ia, const void *ipBytes, unsigned int ipLen, unsigned int port) +ZT_MAYBE_UNUSED void ZT_InetAddress_setIpBytes(ZT_InetAddress *ia, const void *ipBytes, unsigned int ipLen, unsigned int port) { if (likely(ia != nullptr)) reinterpret_cast(ia)->set(ipBytes, ipLen, port); @@ -894,14 +835,8 @@ ZT_MAYBE_UNUSED unsigned int ZT_InetAddress_ipBytes(const ZT_InetAddress *ia, vo { if (ia) { switch (reinterpret_cast(ia)->as.sa.sa_family) { - case AF_INET: - ZeroTier::Utils::copy<4>( - buf, &(reinterpret_cast(ia)->as.sa_in.sin_addr.s_addr)); - return 4; - case AF_INET6: - ZeroTier::Utils::copy<16>( - buf, reinterpret_cast(ia)->as.sa_in6.sin6_addr.s6_addr); - return 16; + case AF_INET: ZeroTier::Utils::copy<4>(buf, &(reinterpret_cast(ia)->as.sa_in.sin_addr.s_addr)); return 4; + case AF_INET6: ZeroTier::Utils::copy<16>(buf, reinterpret_cast(ia)->as.sa_in6.sin6_addr.s6_addr); return 16; } } return 0; @@ -918,13 +853,10 @@ ZT_MAYBE_UNUSED int ZT_InetAddress_compare(const ZT_InetAddress *a, const ZT_Ine { if (a) { if (b) { - if (*reinterpret_cast(a) - < *reinterpret_cast(b)) { + if (*reinterpret_cast(a) < *reinterpret_cast(b)) { return -1; } - else if ( - *reinterpret_cast(b) - < *reinterpret_cast(a)) { + else if (*reinterpret_cast(b) < *reinterpret_cast(a)) { return 1; } else { @@ -945,9 +877,7 @@ ZT_MAYBE_UNUSED int ZT_InetAddress_compare(const ZT_InetAddress *a, const ZT_Ine /********************************************************************************************************************/ -ZT_MAYBE_UNUSED int ZT_Dictionary_parse( - const void *const dict, const unsigned int len, void *const arg, - void (*f)(void *, const char *, unsigned int, const void *, unsigned int)) +ZT_MAYBE_UNUSED int ZT_Dictionary_parse(const void *const dict, const unsigned int len, void *const arg, void (*f)(void *, const char *, unsigned int, const void *, unsigned int)) { ZeroTier::Dictionary d; if (d.decode(dict, len)) { diff --git a/core/CapabilityCredential.cpp b/core/CapabilityCredential.cpp index 7434c4d0d..7b28a0123 100644 --- a/core/CapabilityCredential.cpp +++ b/core/CapabilityCredential.cpp @@ -19,14 +19,7 @@ namespace ZeroTier { -CapabilityCredential::CapabilityCredential( - const uint32_t id, const uint64_t nwid, const int64_t timestamp, const ZT_VirtualNetworkRule *const rules, - const unsigned int ruleCount) noexcept - : m_nwid(nwid) - , m_timestamp(timestamp) - , m_id(id) - , m_ruleCount((ruleCount < ZT_MAX_CAPABILITY_RULES) ? ruleCount : ZT_MAX_CAPABILITY_RULES) - , m_signatureLength(0) +CapabilityCredential::CapabilityCredential(const uint32_t id, const uint64_t nwid, const int64_t timestamp, const ZT_VirtualNetworkRule *const rules, const unsigned int ruleCount) noexcept : m_nwid(nwid), m_timestamp(timestamp), m_id(id), m_ruleCount((ruleCount < ZT_MAX_CAPABILITY_RULES) ? ruleCount : ZT_MAX_CAPABILITY_RULES), m_signatureLength(0) { Utils::zero(m_rules); if (m_ruleCount > 0) @@ -151,8 +144,7 @@ int CapabilityCredential::unmarshal(const uint8_t *data, int len) noexcept return p; } -int CapabilityCredential::marshalVirtualNetworkRules( - uint8_t *data, const ZT_VirtualNetworkRule *const rules, const unsigned int ruleCount) noexcept +int CapabilityCredential::marshalVirtualNetworkRules(uint8_t *data, const ZT_VirtualNetworkRule *const rules, const unsigned int ruleCount) noexcept { int p = 0; for (unsigned int i = 0; i < ruleCount; ++i) { @@ -274,8 +266,7 @@ int CapabilityCredential::marshalVirtualNetworkRules( data[p++] = 19; Utils::storeBigEndian(data + p, rules[i].v.intRange.start); p += 8; - Utils::storeBigEndian( - data + p, rules[i].v.intRange.start + (uint64_t)rules[i].v.intRange.end); + Utils::storeBigEndian(data + p, rules[i].v.intRange.start + (uint64_t)rules[i].v.intRange.end); p += 8; Utils::storeBigEndian(data + p, rules[i].v.intRange.idx); p += 2; @@ -286,9 +277,7 @@ int CapabilityCredential::marshalVirtualNetworkRules( return p; } -int CapabilityCredential::unmarshalVirtualNetworkRules( - const uint8_t *const data, const int len, ZT_VirtualNetworkRule *const rules, unsigned int &ruleCount, - const unsigned int maxRuleCount) noexcept +int CapabilityCredential::unmarshalVirtualNetworkRules(const uint8_t *const data, const int len, ZT_VirtualNetworkRule *const rules, unsigned int &ruleCount, const unsigned int maxRuleCount) noexcept { int p = 0; unsigned int rc = 0; @@ -432,8 +421,7 @@ int CapabilityCredential::unmarshalVirtualNetworkRules( return -1; rules[ruleCount].v.intRange.start = Utils::loadBigEndian(data + p); p += 8; - rules[ruleCount].v.intRange.end = - (uint32_t)(Utils::loadBigEndian(data + p) - rules[ruleCount].v.intRange.start); + rules[ruleCount].v.intRange.end = (uint32_t)(Utils::loadBigEndian(data + p) - rules[ruleCount].v.intRange.start); p += 8; rules[ruleCount].v.intRange.idx = Utils::loadBigEndian(data + p); p += 2; diff --git a/core/CapabilityCredential.hpp b/core/CapabilityCredential.hpp index e8f5c024a..8ae4e5069 100644 --- a/core/CapabilityCredential.hpp +++ b/core/CapabilityCredential.hpp @@ -22,9 +22,7 @@ #include "Utils.hpp" #define ZT_VIRTUALNETWORKRULE_MARSHAL_SIZE_MAX 21 -#define ZT_CAPABILITY_MARSHAL_SIZE_MAX \ - (8 + 8 + 4 + 1 + 2 + (ZT_VIRTUALNETWORKRULE_MARSHAL_SIZE_MAX * ZT_MAX_CAPABILITY_RULES) + 2 \ - + (5 + 5 + 1 + 2 + ZT_SIGNATURE_BUFFER_SIZE)) +#define ZT_CAPABILITY_MARSHAL_SIZE_MAX (8 + 8 + 4 + 1 + 2 + (ZT_VIRTUALNETWORKRULE_MARSHAL_SIZE_MAX * ZT_MAX_CAPABILITY_RULES) + 2 + (5 + 5 + 1 + 2 + ZT_SIGNATURE_BUFFER_SIZE)) namespace ZeroTier { @@ -64,9 +62,7 @@ class CapabilityCredential : public Credential { * @param rules Network flow rules for this capability * @param ruleCount Number of flow rules */ - CapabilityCredential( - const uint32_t id, const uint64_t nwid, const int64_t timestamp, const ZT_VirtualNetworkRule *const rules, - const unsigned int ruleCount) noexcept; + CapabilityCredential(const uint32_t id, const uint64_t nwid, const int64_t timestamp, const ZT_VirtualNetworkRule *const rules, const unsigned int ruleCount) noexcept; /** * @return Rules -- see ruleCount() for size of array @@ -114,10 +110,7 @@ class CapabilityCredential : public Credential { * * @param RR Runtime environment to provide for peer lookup, etc. */ - ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const noexcept - { - return s_verify(ctx, cc, *this); - } + ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const noexcept { return s_verify(ctx, cc, *this); } static constexpr int marshalSizeMax() noexcept { return ZT_CAPABILITY_MARSHAL_SIZE_MAX; } @@ -132,8 +125,7 @@ class CapabilityCredential : public Credential { * @param ruleCount Number of rules * @return Number of bytes written or -1 on error */ - static int - marshalVirtualNetworkRules(uint8_t *data, const ZT_VirtualNetworkRule *rules, unsigned int ruleCount) noexcept; + static int marshalVirtualNetworkRules(uint8_t *data, const ZT_VirtualNetworkRule *rules, unsigned int ruleCount) noexcept; /** * Unmarshal a set of virtual network rules @@ -145,22 +137,14 @@ class CapabilityCredential : public Credential { * @param maxRuleCount Capacity of rules buffer * @return Number of bytes unmarshaled or -1 on error */ - static int unmarshalVirtualNetworkRules( - const uint8_t *data, int len, ZT_VirtualNetworkRule *rules, unsigned int &ruleCount, - unsigned int maxRuleCount) noexcept; + static int unmarshalVirtualNetworkRules(const uint8_t *data, int len, ZT_VirtualNetworkRule *rules, unsigned int &ruleCount, unsigned int maxRuleCount) noexcept; // Provides natural sort order by ID ZT_INLINE bool operator<(const CapabilityCredential &c) const noexcept { return (m_id < c.m_id); } - ZT_INLINE bool operator==(const CapabilityCredential &c) const noexcept - { - return (memcmp(this, &c, sizeof(CapabilityCredential)) == 0); - } + ZT_INLINE bool operator==(const CapabilityCredential &c) const noexcept { return (memcmp(this, &c, sizeof(CapabilityCredential)) == 0); } - ZT_INLINE bool operator!=(const CapabilityCredential &c) const noexcept - { - return (memcmp(this, &c, sizeof(CapabilityCredential)) != 0); - } + ZT_INLINE bool operator!=(const CapabilityCredential &c) const noexcept { return (memcmp(this, &c, sizeof(CapabilityCredential)) != 0); } private: uint64_t m_nwid; diff --git a/core/Certificate.cpp b/core/Certificate.cpp index 50ab4f514..749aa47b2 100644 --- a/core/Certificate.cpp +++ b/core/Certificate.cpp @@ -47,9 +47,7 @@ Certificate &Certificate::operator=(const ZT_Certificate &cert) for (unsigned int i = 0; i < cert.subject.identityCount; ++i) { if (cert.subject.identities[i].identity) { if (cert.subject.identities[i].locator) { - addSubjectIdentity( - *reinterpret_cast(cert.subject.identities[i].identity), - *reinterpret_cast(cert.subject.identities[i].locator)); + addSubjectIdentity(*reinterpret_cast(cert.subject.identities[i].identity), *reinterpret_cast(cert.subject.identities[i].locator)); } else { addSubjectIdentity(*reinterpret_cast(cert.subject.identities[i].identity)); @@ -81,8 +79,7 @@ Certificate &Certificate::operator=(const ZT_Certificate &cert) Utils::copy(&(this->subject.name), &(cert.subject.name)); Utils::copysubject.uniqueId)>(this->subject.uniqueId, cert.subject.uniqueId); - Utils::copysubject.uniqueIdSignature)>( - this->subject.uniqueIdSignature, cert.subject.uniqueIdSignature); + Utils::copysubject.uniqueIdSignature)>(this->subject.uniqueIdSignature, cert.subject.uniqueIdSignature); this->subject.uniqueIdSize = cert.subject.uniqueIdSize; this->subject.uniqueIdSignatureSize = cert.subject.uniqueIdSignatureSize; @@ -334,9 +331,7 @@ bool Certificate::decode(const void *const data, const unsigned int len) return true; } -bool Certificate::sign( - const uint8_t issuer[ZT_CERTIFICATE_HASH_SIZE], const void *const issuerPrivateKey, - const unsigned int issuerPrivateKeySize) +bool Certificate::sign(const uint8_t issuer[ZT_CERTIFICATE_HASH_SIZE], const void *const issuerPrivateKey, const unsigned int issuerPrivateKeySize) { if ((!issuerPrivateKey) || (issuerPrivateKeySize == 0)) return false; @@ -345,9 +340,7 @@ bool Certificate::sign( default: return false; case ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384: if (issuerPrivateKeySize == (1 + ZT_ECC384_PUBLIC_KEY_SIZE + ZT_ECC384_PRIVATE_KEY_SIZE)) { - if ((!issuer) - || ((this->publicKeySize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) - && (memcmp(issuerPrivateKey, this->publicKey, ZT_ECC384_PUBLIC_KEY_SIZE + 1) == 0))) { + if ((!issuer) || ((this->publicKeySize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) && (memcmp(issuerPrivateKey, this->publicKey, ZT_ECC384_PUBLIC_KEY_SIZE + 1) == 0))) { // If public key and issuer public key match, this is a self-signed certificate. // This can also be specified by signing with issuer set to NULL. Utils::fillissuer), 0xff>(this->issuer); @@ -356,18 +349,15 @@ bool Certificate::sign( else { // Otherwise set the issuer and issuer public key. Utils::copyissuer)>(this->issuer, issuer); - Utils::copy<1 + ZT_ECC384_PUBLIC_KEY_SIZE>( - this->issuerPublicKey, - issuerPrivateKey); // private is prefixed with public + Utils::copy<1 + ZT_ECC384_PUBLIC_KEY_SIZE>(this->issuerPublicKey, + issuerPrivateKey); // private is prefixed with public this->issuerPublicKeySize = 1 + ZT_ECC384_PUBLIC_KEY_SIZE; } const Vector enc(encode(true)); SHA384(this->serialNo, enc.data(), (unsigned int)enc.size()); - ECC384ECDSASign( - reinterpret_cast(issuerPrivateKey) + 1 + ZT_ECC384_PUBLIC_KEY_SIZE, this->serialNo, - this->signature); + ECC384ECDSASign(reinterpret_cast(issuerPrivateKey) + 1 + ZT_ECC384_PUBLIC_KEY_SIZE, this->serialNo, this->signature); this->signatureSize = ZT_ECC384_SIGNATURE_SIZE; return true; @@ -392,14 +382,10 @@ ZT_CertificateError Certificate::verify(const int64_t clock, const bool checkSig return ZT_CERTIFICATE_ERROR_INVALID_FORMAT; } if (checkSignatures) { - if (!reinterpret_cast(this->subject.identities[i].identity) - ->locallyValidate()) { + if (!reinterpret_cast(this->subject.identities[i].identity)->locallyValidate()) { return ZT_CERTIFICATE_ERROR_INVALID_IDENTITY; } - if ((this->subject.identities[i].locator) - && (!reinterpret_cast(this->subject.identities[i].locator) - ->verify( - *reinterpret_cast(this->subject.identities[i].identity)))) { + if ((this->subject.identities[i].locator) && (!reinterpret_cast(this->subject.identities[i].locator)->verify(*reinterpret_cast(this->subject.identities[i].identity)))) { return ZT_CERTIFICATE_ERROR_INVALID_COMPONENT_SIGNATURE; } } @@ -435,11 +421,7 @@ ZT_CertificateError Certificate::verify(const int64_t clock, const bool checkSig } } - if ((this->subject.uniqueIdSize > sizeof(this->subject.uniqueId)) - || (this->subject.uniqueIdSignatureSize > sizeof(this->subject.uniqueIdSignature)) - || (this->issuerPublicKeySize > sizeof(this->issuerPublicKey)) - || (this->publicKeySize > sizeof(this->publicKey)) - || (this->subjectSignatureSize > sizeof(this->subjectSignature))) { + if ((this->subject.uniqueIdSize > sizeof(this->subject.uniqueId)) || (this->subject.uniqueIdSignatureSize > sizeof(this->subject.uniqueIdSignature)) || (this->issuerPublicKeySize > sizeof(this->issuerPublicKey)) || (this->publicKeySize > sizeof(this->publicKey)) || (this->subjectSignatureSize > sizeof(this->subjectSignature))) { return ZT_CERTIFICATE_ERROR_INVALID_FORMAT; } if ((this->extendedAttributesSize > 0) && (!this->extendedAttributes)) { @@ -469,8 +451,7 @@ ZT_CertificateError Certificate::verify(const int64_t clock, const bool checkSig if (this->issuerPublicKeySize > 0) { switch (this->issuerPublicKey[0]) { case ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384: - if ((this->issuerPublicKeySize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) - && (this->signatureSize == ZT_ECC384_SIGNATURE_SIZE)) { + if ((this->issuerPublicKeySize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) && (this->signatureSize == ZT_ECC384_SIGNATURE_SIZE)) { if (!ECC384ECDSAVerify(this->issuerPublicKey + 1, this->serialNo, this->signature)) { return ZT_CERTIFICATE_ERROR_INVALID_PRIMARY_SIGNATURE; } @@ -493,8 +474,7 @@ ZT_CertificateError Certificate::verify(const int64_t clock, const bool checkSig switch (this->publicKey[0]) { case ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384: - if ((this->publicKeySize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) - && (this->subjectSignatureSize == ZT_ECC384_SIGNATURE_SIZE)) { + if ((this->publicKeySize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) && (this->subjectSignatureSize == ZT_ECC384_SIGNATURE_SIZE)) { uint8_t h[ZT_SHA384_DIGEST_SIZE]; SHA384(h, enc.data(), (unsigned int)enc.size()); if (!ECC384ECDSAVerify(this->publicKey + 1, h, this->subjectSignature)) { @@ -520,8 +500,7 @@ ZT_CertificateError Certificate::verify(const int64_t clock, const bool checkSig if (this->publicKeySize > 0) { switch (this->publicKey[0]) { case ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384: - if ((this->publicKeySize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) - && (this->signatureSize == ZT_ECC384_SIGNATURE_SIZE)) { + if ((this->publicKeySize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) && (this->signatureSize == ZT_ECC384_SIGNATURE_SIZE)) { if (!ECC384ECDSAVerify(this->publicKey + 1, this->serialNo, this->signature)) { return ZT_CERTIFICATE_ERROR_INVALID_PRIMARY_SIGNATURE; } @@ -546,20 +525,16 @@ ZT_CertificateError Certificate::verify(const int64_t clock, const bool checkSig switch (this->subject.uniqueId[0]) { case ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_NONE: break; case ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384: - if ((this->subject.uniqueIdSize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) - && (this->subject.uniqueIdSignatureSize == ZT_ECC384_SIGNATURE_SIZE)) { + if ((this->subject.uniqueIdSize == (ZT_ECC384_PUBLIC_KEY_SIZE + 1)) && (this->subject.uniqueIdSignatureSize == ZT_ECC384_SIGNATURE_SIZE)) { d.clear(); m_encodeSubject(this->subject, d, true); d.encode(enc); - static_assert( - ZT_ECC384_SIGNATURE_HASH_SIZE == ZT_SHA384_DIGEST_SIZE, - "ECC384 should take 384-bit hash"); + static_assert(ZT_ECC384_SIGNATURE_HASH_SIZE == ZT_SHA384_DIGEST_SIZE, "ECC384 should take 384-bit hash"); uint8_t h[ZT_SHA384_DIGEST_SIZE]; SHA384(h, enc.data(), (unsigned int)enc.size()); - if (!ECC384ECDSAVerify( - this->subject.uniqueId + 1, h, this->subject.uniqueIdSignature)) { + if (!ECC384ECDSAVerify(this->subject.uniqueId + 1, h, this->subject.uniqueIdSignature)) { return ZT_CERTIFICATE_ERROR_INVALID_UNIQUE_ID_PROOF; } } @@ -588,9 +563,7 @@ ZT_CertificateError Certificate::verify(const int64_t clock, const bool checkSig return ZT_CERTIFICATE_ERROR_NONE; } -bool Certificate::newKeyPair( - const ZT_CertificatePublicKeyAlgorithm type, uint8_t publicKey[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], - int *const publicKeySize, uint8_t privateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE], int *const privateKeySize) +bool Certificate::newKeyPair(const ZT_CertificatePublicKeyAlgorithm type, uint8_t publicKey[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], int *const publicKeySize, uint8_t privateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE], int *const privateKeySize) { switch (type) { case ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384: @@ -605,19 +578,14 @@ bool Certificate::newKeyPair( return false; } -Vector Certificate::createCSR( - const ZT_Certificate_Subject &s, const void *const certificatePrivateKey, - const unsigned int certificatePrivateKeySize, const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize) +Vector Certificate::createCSR(const ZT_Certificate_Subject &s, const void *const certificatePrivateKey, const unsigned int certificatePrivateKeySize, const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize) { Vector enc; ZT_Certificate_Subject sc; Utils::copy(&sc, &s); - if ((!certificatePrivateKey) - || (certificatePrivateKeySize != (1 + ZT_ECC384_PUBLIC_KEY_SIZE + ZT_ECC384_PRIVATE_KEY_SIZE)) - || (reinterpret_cast(certificatePrivateKey)[0] - != ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384)) + if ((!certificatePrivateKey) || (certificatePrivateKeySize != (1 + ZT_ECC384_PUBLIC_KEY_SIZE + ZT_ECC384_PRIVATE_KEY_SIZE)) || (reinterpret_cast(certificatePrivateKey)[0] != ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384)) return enc; if (m_setSubjectUniqueId(sc, uniqueIdPrivate, uniqueIdPrivateSize)) { @@ -627,9 +595,7 @@ Vector Certificate::createCSR( uint8_t subjectHash[ZT_SHA384_DIGEST_SIZE], subjectSig[ZT_ECC384_SIGNATURE_SIZE]; SHA384(subjectHash, enc.data(), (unsigned int)enc.size()); - ECC384ECDSASign( - reinterpret_cast(certificatePrivateKey) + 1 + ZT_ECC384_PUBLIC_KEY_SIZE, subjectHash, - subjectSig); + ECC384ECDSASign(reinterpret_cast(certificatePrivateKey) + 1 + ZT_ECC384_PUBLIC_KEY_SIZE, subjectHash, subjectSig); d.add("pK", reinterpret_cast(certificatePrivateKey), (1 + ZT_ECC384_PUBLIC_KEY_SIZE)); d.add("sS", subjectSig, ZT_ECC384_SIGNATURE_SIZE); @@ -655,14 +621,10 @@ void Certificate::m_clear() m_extendedAttributes.clear(); } -bool Certificate::m_setSubjectUniqueId( - ZT_Certificate_Subject &s, const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize) +bool Certificate::m_setSubjectUniqueId(ZT_Certificate_Subject &s, const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize) { if (uniqueIdPrivateSize > 0) { - if ((uniqueIdPrivate != nullptr) - && (uniqueIdPrivateSize == (1 + ZT_ECC384_PUBLIC_KEY_SIZE + ZT_ECC384_PRIVATE_KEY_SIZE)) - && (reinterpret_cast(uniqueIdPrivate)[0] - == (uint8_t)ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384)) { + if ((uniqueIdPrivate != nullptr) && (uniqueIdPrivateSize == (1 + ZT_ECC384_PUBLIC_KEY_SIZE + ZT_ECC384_PRIVATE_KEY_SIZE)) && (reinterpret_cast(uniqueIdPrivate)[0] == (uint8_t)ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384)) { Utils::copy<1 + ZT_ECC384_PUBLIC_KEY_SIZE>(s.uniqueId, uniqueIdPrivate); s.uniqueIdSize = 1 + ZT_ECC384_PUBLIC_KEY_SIZE; // private is prefixed with public @@ -674,9 +636,7 @@ bool Certificate::m_setSubjectUniqueId( uint8_t h[ZT_SHA384_DIGEST_SIZE]; SHA384(h, enc.data(), (unsigned int)enc.size()); - ECC384ECDSASign( - reinterpret_cast(uniqueIdPrivate) + 1 + ZT_ECC384_PUBLIC_KEY_SIZE, h, - s.uniqueIdSignature); + ECC384ECDSASign(reinterpret_cast(uniqueIdPrivate) + 1 + ZT_ECC384_PUBLIC_KEY_SIZE, h, s.uniqueIdSignature); s.uniqueIdSignatureSize = ZT_ECC384_SIGNATURE_SIZE; } else { @@ -702,13 +662,9 @@ void Certificate::m_encodeSubject(const ZT_Certificate_Subject &s, Dictionary &d d.add("s.i$", (uint64_t)s.identityCount); for (unsigned int i = 0; i < s.identityCount; ++i) { if (s.identities[i].identity) - d.addO( - Dictionary::arraySubscript(tmp, sizeof(tmp), "s.i$.i", i), - *reinterpret_cast(s.identities[i].identity)); + d.addO(Dictionary::arraySubscript(tmp, sizeof(tmp), "s.i$.i", i), *reinterpret_cast(s.identities[i].identity)); if (s.identities[i].locator) - d.addO( - Dictionary::arraySubscript(tmp, sizeof(tmp), "s.i$.l", i), - *reinterpret_cast(s.identities[i].locator)); + d.addO(Dictionary::arraySubscript(tmp, sizeof(tmp), "s.i$.l", i), *reinterpret_cast(s.identities[i].locator)); } } diff --git a/core/Certificate.hpp b/core/Certificate.hpp index f8d3171aa..415dd1ec4 100644 --- a/core/Certificate.hpp +++ b/core/Certificate.hpp @@ -121,10 +121,7 @@ class Certificate : public ZT_Certificate { * @param uniqueIdPrivateSize Size of private key * @return True on success */ - ZT_INLINE bool setSubjectUniqueId(const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize) - { - return m_setSubjectUniqueId(this->subject, uniqueIdPrivate, uniqueIdPrivateSize); - } + ZT_INLINE bool setSubjectUniqueId(const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize) { return m_setSubjectUniqueId(this->subject, uniqueIdPrivate, uniqueIdPrivateSize); } /** * Marshal this certificate in binary form @@ -153,9 +150,7 @@ class Certificate : public ZT_Certificate { * * @return True on success */ - bool sign( - const uint8_t issuer[ZT_CERTIFICATE_HASH_SIZE], const void *issuerPrivateKey, - unsigned int issuerPrivateKeySize); + bool sign(const uint8_t issuer[ZT_CERTIFICATE_HASH_SIZE], const void *issuerPrivateKey, unsigned int issuerPrivateKeySize); /** * Verify self-contained signatures and validity of certificate structure @@ -175,11 +170,7 @@ class Certificate : public ZT_Certificate { * @param clock Current real world time in milliseconds since epoch * @return True if certificate is not expired or outside window */ - ZT_INLINE bool verifyTimeWindow(int64_t clock) const noexcept - { - return ( - (clock >= this->validity[0]) && (clock <= this->validity[1]) && (this->validity[0] <= this->validity[1])); - } + ZT_INLINE bool verifyTimeWindow(int64_t clock) const noexcept { return ((clock >= this->validity[0]) && (clock <= this->validity[1]) && (this->validity[0] <= this->validity[1])); } /** * Create a new certificate public/private key pair @@ -191,9 +182,7 @@ class Certificate : public ZT_Certificate { * @param privateKeySize Result parameter: set to size of private key * @return True on success */ - static bool newKeyPair( - const ZT_CertificatePublicKeyAlgorithm type, uint8_t publicKey[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], - int *const publicKeySize, uint8_t privateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE], int *const privateKeySize); + static bool newKeyPair(const ZT_CertificatePublicKeyAlgorithm type, uint8_t publicKey[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], int *const publicKeySize, uint8_t privateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE], int *const privateKeySize); /** * Create a CSR that encodes the subject of this certificate @@ -205,49 +194,25 @@ class Certificate : public ZT_Certificate { * @param uniqueIdPrivateSize Size of unique ID private key * @return Encoded subject (without any unique ID fields) or empty vector on error */ - static Vector createCSR( - const ZT_Certificate_Subject &s, const void *certificatePrivateKey, unsigned int certificatePrivateKeySize, - const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize); + static Vector createCSR(const ZT_Certificate_Subject &s, const void *certificatePrivateKey, unsigned int certificatePrivateKeySize, const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize); - ZT_INLINE unsigned long hashCode() const noexcept - { - return (unsigned long)Utils::loadMachineEndian(this->serialNo); - } + ZT_INLINE unsigned long hashCode() const noexcept { return (unsigned long)Utils::loadMachineEndian(this->serialNo); } - ZT_INLINE bool operator==(const ZT_Certificate &c) const noexcept - { - return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) == 0; - } + ZT_INLINE bool operator==(const ZT_Certificate &c) const noexcept { return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) == 0; } - ZT_INLINE bool operator!=(const ZT_Certificate &c) const noexcept - { - return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) != 0; - } + ZT_INLINE bool operator!=(const ZT_Certificate &c) const noexcept { return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) != 0; } - ZT_INLINE bool operator<(const ZT_Certificate &c) const noexcept - { - return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) < 0; - } + ZT_INLINE bool operator<(const ZT_Certificate &c) const noexcept { return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) < 0; } - ZT_INLINE bool operator<=(const ZT_Certificate &c) const noexcept - { - return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) <= 0; - } + ZT_INLINE bool operator<=(const ZT_Certificate &c) const noexcept { return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) <= 0; } - ZT_INLINE bool operator>(const ZT_Certificate &c) const noexcept - { - return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) > 0; - } + ZT_INLINE bool operator>(const ZT_Certificate &c) const noexcept { return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) > 0; } - ZT_INLINE bool operator>=(const ZT_Certificate &c) const noexcept - { - return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) >= 0; - } + ZT_INLINE bool operator>=(const ZT_Certificate &c) const noexcept { return memcmp(this->serialNo, c.serialNo, ZT_SHA384_DIGEST_SIZE) >= 0; } private: void m_clear(); - static bool - m_setSubjectUniqueId(ZT_Certificate_Subject &s, const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize); + static bool m_setSubjectUniqueId(ZT_Certificate_Subject &s, const void *uniqueIdPrivate, unsigned int uniqueIdPrivateSize); static void m_encodeSubject(const ZT_Certificate_Subject &s, Dictionary &d, bool omitUniqueIdProofSignature); // These hold any identity or locator objects that are owned by and should diff --git a/core/Containers.hpp b/core/Containers.hpp index 0b083393b..93dd00f62 100644 --- a/core/Containers.hpp +++ b/core/Containers.hpp @@ -51,37 +51,21 @@ template class List : public std::list { struct intl_MapHasher { template std::size_t operator()(const O &obj) const noexcept { return (std::size_t)obj.hashCode(); } - std::size_t operator()(const Vector &bytes) const noexcept - { - return (std::size_t)Utils::fnv1a32(bytes.data(), (unsigned int)bytes.size()); - } + std::size_t operator()(const Vector &bytes) const noexcept { return (std::size_t)Utils::fnv1a32(bytes.data(), (unsigned int)bytes.size()); } - std::size_t operator()(const uint64_t i) const noexcept - { - return (std::size_t)Utils::hash64(i ^ Utils::s_mapNonce); - } + std::size_t operator()(const uint64_t i) const noexcept { return (std::size_t)Utils::hash64(i ^ Utils::s_mapNonce); } - std::size_t operator()(const int64_t i) const noexcept - { - return (std::size_t)Utils::hash64((uint64_t)i ^ Utils::s_mapNonce); - } + std::size_t operator()(const int64_t i) const noexcept { return (std::size_t)Utils::hash64((uint64_t)i ^ Utils::s_mapNonce); } - std::size_t operator()(const uint32_t i) const noexcept - { - return (std::size_t)Utils::hash32(i ^ (uint32_t)Utils::s_mapNonce); - } + std::size_t operator()(const uint32_t i) const noexcept { return (std::size_t)Utils::hash32(i ^ (uint32_t)Utils::s_mapNonce); } - std::size_t operator()(const int32_t i) const noexcept - { - return (std::size_t)Utils::hash32((uint32_t)i ^ (uint32_t)Utils::s_mapNonce); - } + std::size_t operator()(const int32_t i) const noexcept { return (std::size_t)Utils::hash32((uint32_t)i ^ (uint32_t)Utils::s_mapNonce); } }; template class Map : public std::unordered_map { }; -template -class MultiMap : public std::unordered_multimap> { +template class MultiMap : public std::unordered_multimap> { }; #else @@ -134,25 +118,13 @@ struct H384 { ZT_INLINE unsigned long hashCode() const noexcept { return (unsigned long)data[0]; } - ZT_INLINE operator bool() const noexcept - { - return ( - (data[0] != 0) && (data[1] != 0) && (data[2] != 0) && (data[3] != 0) && (data[4] != 0) && (data[5] != 0)); - } + ZT_INLINE operator bool() const noexcept { return ((data[0] != 0) && (data[1] != 0) && (data[2] != 0) && (data[3] != 0) && (data[4] != 0) && (data[5] != 0)); } - ZT_INLINE bool operator==(const H384 &b) const noexcept - { - return ( - (data[0] == b.data[0]) && (data[1] == b.data[1]) && (data[2] == b.data[2]) && (data[3] == b.data[3]) - && (data[4] == b.data[4]) && (data[5] == b.data[5])); - } + ZT_INLINE bool operator==(const H384 &b) const noexcept { return ((data[0] == b.data[0]) && (data[1] == b.data[1]) && (data[2] == b.data[2]) && (data[3] == b.data[3]) && (data[4] == b.data[4]) && (data[5] == b.data[5])); } ZT_INLINE bool operator!=(const H384 &b) const noexcept { return !(*this == b); } - ZT_INLINE bool operator<(const H384 &b) const noexcept - { - return std::lexicographical_compare(data, data + 6, b.data, b.data + 6); - } + ZT_INLINE bool operator<(const H384 &b) const noexcept { return std::lexicographical_compare(data, data + 6, b.data, b.data + 6); } ZT_INLINE bool operator<=(const H384 &b) const noexcept { return !(b < *this); } diff --git a/core/Context.hpp b/core/Context.hpp index fbc81131f..5010f0dc5 100644 --- a/core/Context.hpp +++ b/core/Context.hpp @@ -40,20 +40,7 @@ class Network; */ class Context { public: - ZT_INLINE Context(Node *const n) noexcept - : instanceId(Utils::getSecureRandomU64()) - , node(n) - , uPtr(nullptr) - , localNetworkController(nullptr) - , store(nullptr) - , networks(nullptr) - , t(nullptr) - , expect(nullptr) - , vl2(nullptr) - , vl1(nullptr) - , topology(nullptr) - , sa(nullptr) - , ts(nullptr) + ZT_INLINE Context(Node *const n) noexcept : instanceId(Utils::getSecureRandomU64()), node(n), uPtr(nullptr), localNetworkController(nullptr), store(nullptr), networks(nullptr), t(nullptr), expect(nullptr), vl2(nullptr), vl1(nullptr), topology(nullptr), sa(nullptr), ts(nullptr) { publicIdentityStr[0] = 0; secretIdentityStr[0] = 0; diff --git a/core/Credential.cpp b/core/Credential.cpp index f91f03ced..82a9dad02 100644 --- a/core/Credential.cpp +++ b/core/Credential.cpp @@ -43,8 +43,7 @@ namespace ZeroTier { -template -static ZT_INLINE Credential::VerifyResult p_credVerify(const Context &ctx, const CallContext &cc, CRED credential) +template static ZT_INLINE Credential::VerifyResult p_credVerify(const Context &ctx, const CallContext &cc, CRED credential) { uint8_t tmp[ZT_BUF_MEM_SIZE + 16]; @@ -61,10 +60,7 @@ static ZT_INLINE Credential::VerifyResult p_credVerify(const Context &ctx, const int l = credential.marshal(tmp, true); if (l <= 0) return Credential::VERIFY_BAD_SIGNATURE; - return ( - peer->identity().verify(tmp, (unsigned int)l, credential.signature(), credential.signatureLength()) - ? Credential::VERIFY_OK - : Credential::VERIFY_BAD_SIGNATURE); + return (peer->identity().verify(tmp, (unsigned int)l, credential.signature(), credential.signatureLength()) ? Credential::VERIFY_OK : Credential::VERIFY_BAD_SIGNATURE); } catch (...) { } @@ -72,32 +68,15 @@ static ZT_INLINE Credential::VerifyResult p_credVerify(const Context &ctx, const return Credential::VERIFY_BAD_SIGNATURE; } -Credential::VerifyResult -Credential::s_verify(const Context &ctx, const CallContext &cc, const RevocationCredential &credential) -{ - return p_credVerify(ctx, cc, credential); -} +Credential::VerifyResult Credential::s_verify(const Context &ctx, const CallContext &cc, const RevocationCredential &credential) { return p_credVerify(ctx, cc, credential); } -Credential::VerifyResult -Credential::s_verify(const Context &ctx, const CallContext &cc, const TagCredential &credential) -{ - return p_credVerify(ctx, cc, credential); -} +Credential::VerifyResult Credential::s_verify(const Context &ctx, const CallContext &cc, const TagCredential &credential) { return p_credVerify(ctx, cc, credential); } -Credential::VerifyResult -Credential::s_verify(const Context &ctx, const CallContext &cc, const CapabilityCredential &credential) -{ - return p_credVerify(ctx, cc, credential); -} +Credential::VerifyResult Credential::s_verify(const Context &ctx, const CallContext &cc, const CapabilityCredential &credential) { return p_credVerify(ctx, cc, credential); } -Credential::VerifyResult -Credential::s_verify(const Context &ctx, const CallContext &cc, const OwnershipCredential &credential) -{ - return p_credVerify(ctx, cc, credential); -} +Credential::VerifyResult Credential::s_verify(const Context &ctx, const CallContext &cc, const OwnershipCredential &credential) { return p_credVerify(ctx, cc, credential); } -Credential::VerifyResult -Credential::s_verify(const Context &ctx, const CallContext &cc, const MembershipCredential &credential) +Credential::VerifyResult Credential::s_verify(const Context &ctx, const CallContext &cc, const MembershipCredential &credential) { // Sanity check network ID. if ((!credential.m_signedBy) || (credential.m_signedBy != Network::controllerFor(credential.m_networkId))) @@ -111,9 +90,7 @@ Credential::s_verify(const Context &ctx, const CallContext &cc, const Membership // Now verify the controller's signature. uint64_t buf[ZT_MEMBERSHIP_CREDENTIAL_MARSHAL_SIZE_MAX / 8]; const unsigned int bufSize = credential.m_fillSigningBuf(buf); - return peer->identity().verify(buf, bufSize, credential.m_signature, credential.m_signatureLength) - ? Credential::VERIFY_OK - : Credential::VERIFY_BAD_SIGNATURE; + return peer->identity().verify(buf, bufSize, credential.m_signature, credential.m_signatureLength) ? Credential::VERIFY_OK : Credential::VERIFY_BAD_SIGNATURE; } } // namespace ZeroTier diff --git a/core/Defragmenter.hpp b/core/Defragmenter.hpp index 91d4a12eb..198e3d645 100644 --- a/core/Defragmenter.hpp +++ b/core/Defragmenter.hpp @@ -40,17 +40,12 @@ namespace ZeroTier { * the ones used throughout the ZeroTier core. * * @tparam MF Maximum number of fragments that each message can possess (default: ZT_MAX_PACKET_FRAGMENTS) - * @tparam MFP Maximum number of incoming fragments per path (if paths are specified) (default: - * ZT_MAX_INCOMING_FRAGMENTS_PER_PATH) + * @tparam MFP Maximum number of incoming fragments per path (if paths are specified) (default: ZT_MAX_INCOMING_FRAGMENTS_PER_PATH) * @tparam GCS Garbage collection target size for the incoming message queue (default: ZT_MAX_PACKET_FRAGMENTS * 2) * @tparam GCT Garbage collection trigger threshold, usually 2X GCS (default: ZT_MAX_PACKET_FRAGMENTS * 4) * @tparam P Type for pointer to a path object (default: SharedPtr) */ -template < - unsigned int MF = ZT_MAX_PACKET_FRAGMENTS, unsigned int MFP = ZT_MAX_INCOMING_FRAGMENTS_PER_PATH, - unsigned int GCS = (ZT_MAX_PACKET_FRAGMENTS * 2), unsigned int GCT = (ZT_MAX_PACKET_FRAGMENTS * 4), - typename P = SharedPtr> -class Defragmenter { +template > class Defragmenter { public: /** * Return values from assemble() @@ -136,10 +131,7 @@ class Defragmenter { * @param via If non-NULL this is the path on which this message fragment was received * @return Result code */ - ZT_INLINE ResultCode assemble( - const uint64_t messageId, FCV &message, SharedPtr &fragment, - const unsigned int fragmentDataIndex, const unsigned int fragmentDataSize, const unsigned int fragmentNo, - const unsigned int totalFragmentsExpected, const int64_t ts, const P &via) + ZT_INLINE ResultCode assemble(const uint64_t messageId, FCV &message, SharedPtr &fragment, const unsigned int fragmentDataIndex, const unsigned int fragmentDataSize, const unsigned int fragmentNo, const unsigned int totalFragmentsExpected, const int64_t ts, const P &via) { // Sanity checks for malformed fragments or invalid input parameters. if ((fragmentNo >= totalFragmentsExpected) || (totalFragmentsExpected > MF) || (totalFragmentsExpected == 0)) @@ -296,16 +288,7 @@ class Defragmenter { struct p_E { ZT_INLINE p_E() noexcept : id(0), lastUsed(0), totalFragmentsExpected(0), fragmentsReceived(0) {} - ZT_INLINE p_E(const p_E &e) noexcept - : id(e.id) - , lastUsed(e.lastUsed) - , totalFragmentsExpected(e.totalFragmentsExpected) - , fragmentsReceived(e.fragmentsReceived) - , via(e.via) - , message(e.message) - , lock() - { - } + ZT_INLINE p_E(const p_E &e) noexcept : id(e.id), lastUsed(e.lastUsed), totalFragmentsExpected(e.totalFragmentsExpected), fragmentsReceived(e.fragmentsReceived), via(e.via), message(e.message), lock() {} ZT_INLINE ~p_E() { diff --git a/core/Dictionary.hpp b/core/Dictionary.hpp index bd8143e7c..b1dd46c18 100644 --- a/core/Dictionary.hpp +++ b/core/Dictionary.hpp @@ -286,40 +286,19 @@ class Dictionary { out.push_back((uint8_t)'\n'); } - template ZT_INLINE static void append(V &out, const char *const k, const int64_t v) - { - append(out, k, (uint64_t)v); - } + template ZT_INLINE static void append(V &out, const char *const k, const int64_t v) { append(out, k, (uint64_t)v); } - template ZT_INLINE static void append(V &out, const char *const k, const uint32_t v) - { - append(out, k, (uint64_t)v); - } + template ZT_INLINE static void append(V &out, const char *const k, const uint32_t v) { append(out, k, (uint64_t)v); } - template ZT_INLINE static void append(V &out, const char *const k, const int32_t v) - { - append(out, k, (uint64_t)v); - } + template ZT_INLINE static void append(V &out, const char *const k, const int32_t v) { append(out, k, (uint64_t)v); } - template ZT_INLINE static void append(V &out, const char *const k, const uint16_t v) - { - append(out, k, (uint64_t)v); - } + template ZT_INLINE static void append(V &out, const char *const k, const uint16_t v) { append(out, k, (uint64_t)v); } - template ZT_INLINE static void append(V &out, const char *const k, const int16_t v) - { - append(out, k, (uint64_t)v); - } + template ZT_INLINE static void append(V &out, const char *const k, const int16_t v) { append(out, k, (uint64_t)v); } - template ZT_INLINE static void append(V &out, const char *const k, const uint8_t v) - { - append(out, k, (uint64_t)v); - } + template ZT_INLINE static void append(V &out, const char *const k, const uint8_t v) { append(out, k, (uint64_t)v); } - template ZT_INLINE static void append(V &out, const char *const k, const int8_t v) - { - append(out, k, (uint64_t)v); - } + template ZT_INLINE static void append(V &out, const char *const k, const int8_t v) { append(out, k, (uint64_t)v); } /** * Append a key=value pair to a buffer (vector or FCV) @@ -346,8 +325,7 @@ class Dictionary { * @param v Value * @param vlen Value length in bytes */ - template - ZT_INLINE static void append(V &out, const char *const k, const void *const v, const unsigned int vlen) + template ZT_INLINE static void append(V &out, const char *const k, const void *const v, const unsigned int vlen) { s_appendKey(out, k); for (unsigned int i = 0; i < vlen; ++i) @@ -362,10 +340,7 @@ class Dictionary { * @param k Key (must be <= 8 characters) * @param pid Packet ID */ - template static ZT_INLINE void appendPacketId(V &out, const char *const k, const uint64_t pid) - { - append(out, k, &pid, 8); - } + template static ZT_INLINE void appendPacketId(V &out, const char *const k, const uint64_t pid) { append(out, k, &pid, 8); } /** * Append key=value with any object implementing the correct marshal interface diff --git a/core/ECC384.cpp b/core/ECC384.cpp index 8d569e2e7..a06fa3ccb 100644 --- a/core/ECC384.cpp +++ b/core/ECC384.cpp @@ -37,16 +37,10 @@ struct EccPoint { }; // ECC curve NIST P-384 -const uint64_t curve_p[ECC_CURVE_DIGITS] = { 0x00000000FFFFFFFF, 0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFE, - 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF }; -const uint64_t curve_b[ECC_CURVE_DIGITS] = { 0x2A85C8EDD3EC2AEF, 0xC656398D8A2ED19D, 0x0314088F5013875A, - 0x181D9C6EFE814112, 0x988E056BE3F82D19, 0xB3312FA7E23EE7E4 }; -const EccPoint curve_G = { { 0x3A545E3872760AB7, 0x5502F25DBF55296C, 0x59F741E082542A38, 0x6E1D3B628BA79B98, - 0x8EB1C71EF320AD74, 0xAA87CA22BE8B0537 }, - { 0x7A431D7C90EA0E5F, 0x0A60B1CE1D7E819D, 0xE9DA3113B5F0B8C0, 0xF8F41DBD289A147C, - 0x5D9E98BF9292DC29, 0x3617DE4A96262C6F } }; -const uint64_t curve_n[ECC_CURVE_DIGITS] = { 0xECEC196ACCC52973, 0x581A0DB248B0A77A, 0xC7634D81F4372DDF, - 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF }; +const uint64_t curve_p[ECC_CURVE_DIGITS] = { 0x00000000FFFFFFFF, 0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFE, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF }; +const uint64_t curve_b[ECC_CURVE_DIGITS] = { 0x2A85C8EDD3EC2AEF, 0xC656398D8A2ED19D, 0x0314088F5013875A, 0x181D9C6EFE814112, 0x988E056BE3F82D19, 0xB3312FA7E23EE7E4 }; +const EccPoint curve_G = { { 0x3A545E3872760AB7, 0x5502F25DBF55296C, 0x59F741E082542A38, 0x6E1D3B628BA79B98, 0x8EB1C71EF320AD74, 0xAA87CA22BE8B0537 }, { 0x7A431D7C90EA0E5F, 0x0A60B1CE1D7E819D, 0xE9DA3113B5F0B8C0, 0xF8F41DBD289A147C, 0x5D9E98BF9292DC29, 0x3617DE4A96262C6F } }; +const uint64_t curve_n[ECC_CURVE_DIGITS] = { 0xECEC196ACCC52973, 0x581A0DB248B0A77A, 0xC7634D81F4372DDF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF }; ZT_INLINE unsigned int vli_numBits(const uint64_t *const p_vli) { @@ -67,8 +61,8 @@ ZT_INLINE int vli_cmp(const uint64_t *const p_left, const uint64_t *const p_righ { int comp = 0; for (int i = ECC_CURVE_DIGITS - 1; i >= 0; --i) { - comp += (int)((p_left[i] > p_right[i])&&(comp == 0)); // should be constant time - comp -= (int)((p_left[i] < p_right[i])&&(comp == 0)); + comp += (int)((p_left[i] > p_right[i]) && (comp == 0)); // should be constant time + comp -= (int)((p_left[i] < p_right[i]) && (comp == 0)); } return comp; } @@ -165,8 +159,7 @@ ZT_INLINE void vli_square(uint64_t *const p_result, const uint64_t *const p_left uint128_t mul_64_64(uint64_t p_left, uint64_t p_right) { - uint64_t a0 = p_left & 0xffffffffull, a1 = p_left >> 32, b0 = p_right & 0xffffffffull, b1 = p_right >> 32, - m0 = a0 * b0, m1 = a0 * b1, m2 = a1 * b0, m3 = a1 * b1; + uint64_t a0 = p_left & 0xffffffffull, a1 = p_left >> 32, b0 = p_right & 0xffffffffull, b1 = p_right >> 32, m0 = a0 * b0, m1 = a0 * b1, m2 = a1 * b0, m3 = a1 * b1; uint128_t l_result; m2 += (m0 >> 32); m2 += m1; @@ -230,16 +223,14 @@ ZT_INLINE void vli_square(uint64_t *const p_result, uint64_t *const p_left) #endif /* ZT_HAVE_UINT128 */ -void vli_modAdd( - uint64_t *const p_result, uint64_t *const p_left, const uint64_t *const p_right, const uint64_t *const p_mod) +void vli_modAdd(uint64_t *const p_result, uint64_t *const p_left, const uint64_t *const p_right, const uint64_t *const p_mod) { if ((vli_add(p_result, p_left, p_right) != 0ULL) || vli_cmp(p_result, p_mod) >= 0) { vli_sub(p_result, p_result, p_mod); } } -void vli_modSub( - uint64_t *const p_result, uint64_t *const p_left, const uint64_t *const p_right, const uint64_t *const p_mod) +void vli_modSub(uint64_t *const p_result, uint64_t *const p_left, const uint64_t *const p_right, const uint64_t *const p_mod) { if (vli_sub(p_result, p_left, p_right) != 0ULL) { vli_add(p_result, p_result, p_mod); @@ -373,10 +364,7 @@ void vli_modInv(uint64_t *const p_result, uint64_t *const p_input, const uint64_ } } -ZT_INLINE bool EccPoint_isZero(const EccPoint *const p_point) -{ - return (vli_isZero(p_point->x) && vli_isZero(p_point->y)); -} +ZT_INLINE bool EccPoint_isZero(const EccPoint *const p_point) { return (vli_isZero(p_point->x) && vli_isZero(p_point->y)); } void EccPoint_double_jacobian(uint64_t *const X1, uint64_t *const Y1, uint64_t *const Z1) { @@ -422,8 +410,7 @@ ZT_INLINE void apply_z(uint64_t *const X1, uint64_t *const Y1, uint64_t *const Z vli_modMult_fast(Y1, Y1, t1); } -void XYcZ_initial_double( - uint64_t *const X1, uint64_t *const Y1, uint64_t *const X2, uint64_t *const Y2, uint64_t *const p_initialZ) +void XYcZ_initial_double(uint64_t *const X1, uint64_t *const Y1, uint64_t *const X2, uint64_t *const Y2, uint64_t *const p_initialZ) { uint64_t z[ECC_CURVE_DIGITS]; vli_set(X2, X1); @@ -483,8 +470,7 @@ void XYcZ_addC(uint64_t *const X1, uint64_t *const Y1, uint64_t *const X2, uint6 vli_set(X1, t7); } -void EccPoint_mult( - EccPoint *const p_result, const EccPoint *const p_point, uint64_t *const p_scalar, uint64_t *const p_initialZ) +void EccPoint_mult(EccPoint *const p_result, const EccPoint *const p_point, uint64_t *const p_scalar, uint64_t *const p_initialZ) { uint64_t Rx[2][ECC_CURVE_DIGITS], Ry[2][ECC_CURVE_DIGITS], z[ECC_CURVE_DIGITS]; vli_set(Rx[1], p_point->x); @@ -513,9 +499,7 @@ ZT_INLINE void ECC_CURVE_BYTES2native(uint64_t p_native[ECC_CURVE_DIGITS], const { for (unsigned int i = 0; i < ECC_CURVE_DIGITS; ++i) { const uint8_t *const p_digit = p_bytes + 8 * (ECC_CURVE_DIGITS - 1 - i); - p_native[i] = ((uint64_t)p_digit[0] << 56) | ((uint64_t)p_digit[1] << 48) | ((uint64_t)p_digit[2] << 40) - | ((uint64_t)p_digit[3] << 32) | ((uint64_t)p_digit[4] << 24) | ((uint64_t)p_digit[5] << 16) - | ((uint64_t)p_digit[6] << 8) | (uint64_t)p_digit[7]; + p_native[i] = ((uint64_t)p_digit[0] << 56) | ((uint64_t)p_digit[1] << 48) | ((uint64_t)p_digit[2] << 40) | ((uint64_t)p_digit[3] << 32) | ((uint64_t)p_digit[4] << 24) | ((uint64_t)p_digit[5] << 16) | ((uint64_t)p_digit[6] << 8) | (uint64_t)p_digit[7]; } } @@ -582,9 +566,7 @@ ZT_INLINE bool ecc_make_key(uint8_t p_publicKey[ECC_CURVE_BYTES + 1], uint8_t p_ return true; } -ZT_INLINE bool ecdh_shared_secret( - const uint8_t p_publicKey[ECC_CURVE_BYTES + 1], const uint8_t p_privateKey[ECC_CURVE_BYTES], - uint8_t p_secret[ECC_CURVE_BYTES]) +ZT_INLINE bool ecdh_shared_secret(const uint8_t p_publicKey[ECC_CURVE_BYTES + 1], const uint8_t p_privateKey[ECC_CURVE_BYTES], uint8_t p_secret[ECC_CURVE_BYTES]) { EccPoint l_public; uint64_t l_private[ECC_CURVE_DIGITS]; @@ -644,9 +626,7 @@ void vli_modMult(uint64_t *const p_result, uint64_t *const p_left, uint64_t *con vli_set(p_result, l_product); } -ZT_INLINE bool ecdsa_sign( - const uint8_t p_privateKey[ECC_CURVE_BYTES], const uint8_t p_hash[ECC_CURVE_BYTES], - uint8_t p_signature[ECC_CURVE_BYTES * 2]) +ZT_INLINE bool ecdsa_sign(const uint8_t p_privateKey[ECC_CURVE_BYTES], const uint8_t p_hash[ECC_CURVE_BYTES], uint8_t p_signature[ECC_CURVE_BYTES * 2]) { uint64_t k[ECC_CURVE_DIGITS], l_tmp[ECC_CURVE_DIGITS], l_s[ECC_CURVE_DIGITS]; EccPoint p; @@ -677,13 +657,9 @@ ZT_INLINE bool ecdsa_sign( return true; } -ZT_INLINE bool ecdsa_verify( - const uint8_t p_publicKey[ECC_CURVE_BYTES + 1], const uint8_t p_hash[ECC_CURVE_BYTES], - const uint8_t p_signature[ECC_CURVE_BYTES * 2]) +ZT_INLINE bool ecdsa_verify(const uint8_t p_publicKey[ECC_CURVE_BYTES + 1], const uint8_t p_hash[ECC_CURVE_BYTES], const uint8_t p_signature[ECC_CURVE_BYTES * 2]) { - uint64_t u1[ECC_CURVE_DIGITS], u2[ECC_CURVE_DIGITS], z[ECC_CURVE_DIGITS], rx[ECC_CURVE_DIGITS], - ry[ECC_CURVE_DIGITS], tx[ECC_CURVE_DIGITS], ty[ECC_CURVE_DIGITS], tz[ECC_CURVE_DIGITS], l_r[ECC_CURVE_DIGITS], - l_s[ECC_CURVE_DIGITS]; + uint64_t u1[ECC_CURVE_DIGITS], u2[ECC_CURVE_DIGITS], z[ECC_CURVE_DIGITS], rx[ECC_CURVE_DIGITS], ry[ECC_CURVE_DIGITS], tx[ECC_CURVE_DIGITS], ty[ECC_CURVE_DIGITS], tz[ECC_CURVE_DIGITS], l_r[ECC_CURVE_DIGITS], l_s[ECC_CURVE_DIGITS]; EccPoint l_public, l_sum; ecc_point_decompress(&l_public, p_publicKey); @@ -708,8 +684,7 @@ ZT_INLINE bool ecdsa_verify( apply_z(l_sum.x, l_sum.y, z); const EccPoint *const l_points[4] = { NULL, &curve_G, &l_public, &l_sum }; unsigned int l_numBits = std::max(vli_numBits(u1), vli_numBits(u2)); - const EccPoint *const l_point = - l_points[(!!vli_testBit(u1, l_numBits - 1)) | ((!!vli_testBit(u2, l_numBits - 1)) << 1)]; + const EccPoint *const l_point = l_points[(!!vli_testBit(u1, l_numBits - 1)) | ((!!vli_testBit(u2, l_numBits - 1)) << 1)]; vli_set(rx, l_point->x); vli_set(ry, l_point->y); vli_clear(z); @@ -749,9 +724,7 @@ void ECC384GenerateKey(uint8_t pub[ZT_ECC384_PUBLIC_KEY_SIZE], uint8_t priv[ZT_E } } -void ECC384ECDSASign( - const uint8_t priv[ZT_ECC384_PRIVATE_KEY_SIZE], const uint8_t hash[ZT_ECC384_SIGNATURE_HASH_SIZE], - uint8_t sig[ZT_ECC384_SIGNATURE_SIZE]) +void ECC384ECDSASign(const uint8_t priv[ZT_ECC384_PRIVATE_KEY_SIZE], const uint8_t hash[ZT_ECC384_SIGNATURE_HASH_SIZE], uint8_t sig[ZT_ECC384_SIGNATURE_SIZE]) { if (unlikely(!ecdsa_sign(priv, hash, sig))) { fprintf(stderr, "FATAL: ecdsa_sign() failed!" ZT_EOL_S); @@ -759,18 +732,8 @@ void ECC384ECDSASign( } } -bool ECC384ECDSAVerify( - const uint8_t pub[ZT_ECC384_PUBLIC_KEY_SIZE], const uint8_t hash[ZT_ECC384_SIGNATURE_HASH_SIZE], - const uint8_t sig[ZT_ECC384_SIGNATURE_SIZE]) -{ - return (ecdsa_verify(pub, hash, sig) != 0); -} +bool ECC384ECDSAVerify(const uint8_t pub[ZT_ECC384_PUBLIC_KEY_SIZE], const uint8_t hash[ZT_ECC384_SIGNATURE_HASH_SIZE], const uint8_t sig[ZT_ECC384_SIGNATURE_SIZE]) { return (ecdsa_verify(pub, hash, sig) != 0); } -bool ECC384ECDH( - const uint8_t theirPub[ZT_ECC384_PUBLIC_KEY_SIZE], const uint8_t ourPriv[ZT_ECC384_PRIVATE_KEY_SIZE], - uint8_t secret[ZT_ECC384_SHARED_SECRET_SIZE]) -{ - return (ecdh_shared_secret(theirPub, ourPriv, secret) != 0); -} +bool ECC384ECDH(const uint8_t theirPub[ZT_ECC384_PUBLIC_KEY_SIZE], const uint8_t ourPriv[ZT_ECC384_PRIVATE_KEY_SIZE], uint8_t secret[ZT_ECC384_SHARED_SECRET_SIZE]) { return (ecdh_shared_secret(theirPub, ourPriv, secret) != 0); } } // namespace ZeroTier diff --git a/core/ECC384.hpp b/core/ECC384.hpp index 3c04d1da0..1b4531da4 100644 --- a/core/ECC384.hpp +++ b/core/ECC384.hpp @@ -77,9 +77,7 @@ void ECC384GenerateKey(uint8_t pub[ZT_ECC384_PUBLIC_KEY_SIZE], uint8_t priv[ZT_E * @param hash 48-byte hash * @param sig Buffer to receive signature */ -void ECC384ECDSASign( - const uint8_t priv[ZT_ECC384_PRIVATE_KEY_SIZE], const uint8_t hash[ZT_ECC384_SIGNATURE_HASH_SIZE], - uint8_t sig[ZT_ECC384_SIGNATURE_SIZE]); +void ECC384ECDSASign(const uint8_t priv[ZT_ECC384_PRIVATE_KEY_SIZE], const uint8_t hash[ZT_ECC384_SIGNATURE_HASH_SIZE], uint8_t sig[ZT_ECC384_SIGNATURE_SIZE]); /** * Verify a signature @@ -89,9 +87,7 @@ void ECC384ECDSASign( * @param sig Signature to check * @return True if signature is valid */ -bool ECC384ECDSAVerify( - const uint8_t pub[ZT_ECC384_PUBLIC_KEY_SIZE], const uint8_t hash[ZT_ECC384_SIGNATURE_HASH_SIZE], - const uint8_t sig[ZT_ECC384_SIGNATURE_SIZE]); +bool ECC384ECDSAVerify(const uint8_t pub[ZT_ECC384_PUBLIC_KEY_SIZE], const uint8_t hash[ZT_ECC384_SIGNATURE_HASH_SIZE], const uint8_t sig[ZT_ECC384_SIGNATURE_SIZE]); /** * Perform ECDH key agreement @@ -103,9 +99,7 @@ bool ECC384ECDSAVerify( * @param ourPriv Local private key * @param secret Buffer to receive 48-byte secret */ -bool ECC384ECDH( - const uint8_t theirPub[ZT_ECC384_PUBLIC_KEY_SIZE], const uint8_t ourPriv[ZT_ECC384_PRIVATE_KEY_SIZE], - uint8_t secret[ZT_ECC384_SHARED_SECRET_SIZE]); +bool ECC384ECDH(const uint8_t theirPub[ZT_ECC384_PUBLIC_KEY_SIZE], const uint8_t ourPriv[ZT_ECC384_PRIVATE_KEY_SIZE], uint8_t secret[ZT_ECC384_SHARED_SECRET_SIZE]); } // namespace ZeroTier diff --git a/core/Endpoint.hpp b/core/Endpoint.hpp index b507115fb..a6186d7eb 100644 --- a/core/Endpoint.hpp +++ b/core/Endpoint.hpp @@ -27,16 +27,11 @@ namespace ZeroTier { -static_assert( - (ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > ZT_INETADDRESS_MARSHAL_SIZE_MAX, - "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); -static_assert( - (ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > sizeof(ZT_Fingerprint), "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); -static_assert( - (ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > sizeof(InetAddress), "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); +static_assert((ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > ZT_INETADDRESS_MARSHAL_SIZE_MAX, "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); +static_assert((ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > sizeof(ZT_Fingerprint), "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); +static_assert((ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > sizeof(InetAddress), "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); static_assert((ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > sizeof(MAC), "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); -static_assert( - (ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > sizeof(Fingerprint), "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); +static_assert((ZT_ENDPOINT_MARSHAL_SIZE_MAX - 1) > sizeof(Fingerprint), "ZT_ENDPOINT_MARSHAL_SIZE_MAX not large enough"); /** * Endpoint variant specifying some form of network endpoint. diff --git a/core/Expect.hpp b/core/Expect.hpp index f6cf6f038..8d52d2659 100644 --- a/core/Expect.hpp +++ b/core/Expect.hpp @@ -46,11 +46,7 @@ class Expect { * @param packetId Packet ID of packet being sent (be sure it's post-armor()) * @param now Current time */ - ZT_INLINE void sending(const uint64_t packetId, const int64_t now) noexcept - { - m_packetIdSent[Utils::hash64(packetId ^ Utils::s_mapNonce) % ZT_EXPECT_BUCKETS] = - (uint32_t)(now / ZT_EXPECT_TTL); - } + ZT_INLINE void sending(const uint64_t packetId, const int64_t now) noexcept { m_packetIdSent[Utils::hash64(packetId ^ Utils::s_mapNonce) % ZT_EXPECT_BUCKETS] = (uint32_t)(now / ZT_EXPECT_TTL); } /** * Check if an OK is expected and if so reset the corresponding bucket. @@ -63,15 +59,7 @@ class Expect { * @param now Current time * @return True if we're expecting a reply (and a reset occurred) */ - ZT_INLINE bool expecting(const uint64_t inRePacketId, const int64_t now) noexcept - { - return ( - ((now / ZT_EXPECT_TTL) - - (int64_t) - m_packetIdSent[(unsigned long)Utils::hash64(inRePacketId ^ Utils::s_mapNonce) % ZT_EXPECT_BUCKETS] - .exchange(0)) - <= 1); - } + ZT_INLINE bool expecting(const uint64_t inRePacketId, const int64_t now) noexcept { return (((now / ZT_EXPECT_TTL) - (int64_t)m_packetIdSent[(unsigned long)Utils::hash64(inRePacketId ^ Utils::s_mapNonce) % ZT_EXPECT_BUCKETS].exchange(0)) <= 1); } private: // Each bucket contains a timestamp in units of the max expect duration. diff --git a/core/FCV.hpp b/core/FCV.hpp index 04a9d00e9..ad0e161e5 100644 --- a/core/FCV.hpp +++ b/core/FCV.hpp @@ -262,10 +262,7 @@ template class FCV { ZT_INLINE bool operator!=(const FCV &v) const noexcept { return *this != v; } - ZT_INLINE bool operator<(const FCV &v) const noexcept - { - return std::lexicographical_compare(begin(), end(), v.begin(), v.end()); - } + ZT_INLINE bool operator<(const FCV &v) const noexcept { return std::lexicographical_compare(begin(), end(), v.begin(), v.end()); } ZT_INLINE bool operator>(const FCV &v) const noexcept { return (v < *this); } diff --git a/core/Fingerprint.hpp b/core/Fingerprint.hpp index ed428ae24..8153a2a95 100644 --- a/core/Fingerprint.hpp +++ b/core/Fingerprint.hpp @@ -53,9 +53,7 @@ class Fingerprint Address(this->address).toString(s); if (haveHash()) { s[ZT_ADDRESS_LENGTH_HEX] = '-'; - Utils::b32e( - this->hash, ZT_FINGERPRINT_HASH_SIZE, s + (ZT_ADDRESS_LENGTH_HEX + 1), - ZT_FINGERPRINT_STRING_SIZE_MAX - (ZT_ADDRESS_LENGTH_HEX + 1)); + Utils::b32e(this->hash, ZT_FINGERPRINT_HASH_SIZE, s + (ZT_ADDRESS_LENGTH_HEX + 1), ZT_FINGERPRINT_STRING_SIZE_MAX - (ZT_ADDRESS_LENGTH_HEX + 1)); } return s; } @@ -84,8 +82,7 @@ class Fingerprint a[ZT_ADDRESS_LENGTH_HEX] = 0; this->address = Utils::hexStrToU64(a) & ZT_ADDRESS_MASK; if (l > (ZT_ADDRESS_LENGTH_HEX + 1)) { - if (Utils::b32d(s + (ZT_ADDRESS_LENGTH_HEX + 1), this->hash, ZT_FINGERPRINT_HASH_SIZE) - != ZT_FINGERPRINT_HASH_SIZE) + if (Utils::b32d(s + (ZT_ADDRESS_LENGTH_HEX + 1), this->hash, ZT_FINGERPRINT_HASH_SIZE) != ZT_FINGERPRINT_HASH_SIZE) return false; } else { @@ -118,29 +115,15 @@ class Fingerprint return ZT_FINGERPRINT_MARSHAL_SIZE; } - ZT_INLINE bool operator==(const ZT_Fingerprint &h) const noexcept - { - return ((this->address == h.address) && (memcmp(this->hash, h.hash, ZT_FINGERPRINT_HASH_SIZE) == 0)); - } + ZT_INLINE bool operator==(const ZT_Fingerprint &h) const noexcept { return ((this->address == h.address) && (memcmp(this->hash, h.hash, ZT_FINGERPRINT_HASH_SIZE) == 0)); } ZT_INLINE bool operator!=(const ZT_Fingerprint &h) const noexcept { return !(*this == h); } - ZT_INLINE bool operator<(const ZT_Fingerprint &h) const noexcept - { - return ( - (this->address < h.address) - || ((this->address == h.address) && (memcmp(this->hash, h.hash, ZT_FINGERPRINT_HASH_SIZE) < 0))); - } + ZT_INLINE bool operator<(const ZT_Fingerprint &h) const noexcept { return ((this->address < h.address) || ((this->address == h.address) && (memcmp(this->hash, h.hash, ZT_FINGERPRINT_HASH_SIZE) < 0))); } - ZT_INLINE bool operator>(const ZT_Fingerprint &h) const noexcept - { - return (*reinterpret_cast(&h) < *this); - } + ZT_INLINE bool operator>(const ZT_Fingerprint &h) const noexcept { return (*reinterpret_cast(&h) < *this); } - ZT_INLINE bool operator<=(const ZT_Fingerprint &h) const noexcept - { - return !(*reinterpret_cast(&h) < *this); - } + ZT_INLINE bool operator<=(const ZT_Fingerprint &h) const noexcept { return !(*reinterpret_cast(&h) < *this); } ZT_INLINE bool operator>=(const ZT_Fingerprint &h) const noexcept { return !(*this < h); } }; diff --git a/core/Identity.cpp b/core/Identity.cpp index d0992e123..b5f1b687d 100644 --- a/core/Identity.cpp +++ b/core/Identity.cpp @@ -30,9 +30,7 @@ namespace { // This is the memory-intensive hash function used to compute v0 identities from v0 public keys. #define ZT_V0_IDENTITY_GEN_MEMORY 2097152 -void identityV0ProofOfWorkFrankenhash( - const void *const restrict c25519CombinedPublicKey, void *const restrict digest, - void *const restrict genmem) noexcept +void identityV0ProofOfWorkFrankenhash(const void *const restrict c25519CombinedPublicKey, void *const restrict digest, void *const restrict genmem) noexcept { // Digest publicKey[] to obtain initial digest SHA512(digest, c25519CombinedPublicKey, ZT_C25519_COMBINED_PUBLIC_KEY_SIZE); @@ -58,9 +56,8 @@ void identityV0ProofOfWorkFrankenhash( // Render final digest using genmem as a lookup table for (unsigned long i = 0; i < (ZT_V0_IDENTITY_GEN_MEMORY / sizeof(uint64_t));) { - unsigned long idx1 = (unsigned long)(Utils::ntoh(((uint64_t *)genmem)[i++]) % (64 / sizeof(uint64_t))); - unsigned long idx2 = - (unsigned long)(Utils::ntoh(((uint64_t *)genmem)[i++]) % (ZT_V0_IDENTITY_GEN_MEMORY / sizeof(uint64_t))); + unsigned long idx1 = (unsigned long)(Utils::ntoh(((uint64_t *)genmem)[i++]) % (64 / sizeof(uint64_t))); + unsigned long idx2 = (unsigned long)(Utils::ntoh(((uint64_t *)genmem)[i++]) % (ZT_V0_IDENTITY_GEN_MEMORY / sizeof(uint64_t))); uint64_t tmp = ((uint64_t *)genmem)[idx2]; ((uint64_t *)genmem)[idx2] = ((uint64_t *)digest)[idx1]; ((uint64_t *)digest)[idx1] = tmp; @@ -69,11 +66,7 @@ void identityV0ProofOfWorkFrankenhash( } struct identityV0ProofOfWorkCriteria { - ZT_INLINE identityV0ProofOfWorkCriteria(unsigned char *restrict sb, char *restrict gm) noexcept - : digest(sb) - , genmem(gm) - { - } + ZT_INLINE identityV0ProofOfWorkCriteria(unsigned char *restrict sb, char *restrict gm) noexcept : digest(sb), genmem(gm) {} ZT_INLINE bool operator()(const uint8_t pub[ZT_C25519_COMBINED_PUBLIC_KEY_SIZE]) const noexcept { @@ -132,20 +125,18 @@ bool Identity::generate(const Type t) case P384: for (;;) { C25519::generateCombined(m_pub + 7, m_priv); - ECC384GenerateKey( - m_pub + 7 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE, m_priv + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE); + ECC384GenerateKey(m_pub + 7 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE, m_priv + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE); uint64_t challenge[4]; v1ChallengeFromPub(m_pub, challenge); - const uint64_t proof = - MIMC52::delay(reinterpret_cast(challenge), ZT_IDENTITY_TYPE1_MIMC52_ROUNDS); - m_pub[0] = (uint8_t)(proof >> 48U); - m_pub[1] = (uint8_t)(proof >> 40U); - m_pub[2] = (uint8_t)(proof >> 32U); - m_pub[3] = (uint8_t)(proof >> 24U); - m_pub[4] = (uint8_t)(proof >> 16U); - m_pub[5] = (uint8_t)(proof >> 8U); - m_pub[6] = (uint8_t)proof; + const uint64_t proof = MIMC52::delay(reinterpret_cast(challenge), ZT_IDENTITY_TYPE1_MIMC52_ROUNDS); + m_pub[0] = (uint8_t)(proof >> 48U); + m_pub[1] = (uint8_t)(proof >> 40U); + m_pub[2] = (uint8_t)(proof >> 32U); + m_pub[3] = (uint8_t)(proof >> 24U); + m_pub[4] = (uint8_t)(proof >> 16U); + m_pub[5] = (uint8_t)(proof >> 8U); + m_pub[6] = (uint8_t)proof; m_computeHash(); const Address addr(m_fp.hash); @@ -181,11 +172,7 @@ bool Identity::locallyValidate() const noexcept if (Address(m_fp.hash) == m_fp.address) { uint64_t challenge[4]; v1ChallengeFromPub(m_pub, challenge); - return MIMC52::verify( - reinterpret_cast(challenge), ZT_IDENTITY_TYPE1_MIMC52_ROUNDS, - ((uint64_t)m_pub[0] << 48U) | ((uint64_t)m_pub[1] << 40U) | ((uint64_t)m_pub[2] << 32U) - | ((uint64_t)m_pub[3] << 24U) | ((uint64_t)m_pub[4] << 16U) | ((uint64_t)m_pub[5] << 8U) - | (uint64_t)m_pub[6]); + return MIMC52::verify(reinterpret_cast(challenge), ZT_IDENTITY_TYPE1_MIMC52_ROUNDS, ((uint64_t)m_pub[0] << 48U) | ((uint64_t)m_pub[1] << 40U) | ((uint64_t)m_pub[2] << 32U) | ((uint64_t)m_pub[3] << 24U) | ((uint64_t)m_pub[4] << 16U) | ((uint64_t)m_pub[5] << 8U) | (uint64_t)m_pub[6]); } return false; } @@ -200,9 +187,7 @@ void Identity::hashWithPrivate(uint8_t h[ZT_FINGERPRINT_HASH_SIZE]) const { if (m_hasPrivate) { switch (m_type) { - case C25519: - SHA384(h, m_pub, ZT_C25519_COMBINED_PUBLIC_KEY_SIZE, m_priv, ZT_C25519_COMBINED_PRIVATE_KEY_SIZE); - return; + case C25519: SHA384(h, m_pub, ZT_C25519_COMBINED_PUBLIC_KEY_SIZE, m_priv, ZT_C25519_COMBINED_PRIVATE_KEY_SIZE); return; case P384: SHA384(h, m_pub, sizeof(m_pub), m_priv, sizeof(m_priv)); return; } @@ -270,9 +255,7 @@ bool Identity::agree(const Identity &id, uint8_t key[ZT_SYMMETRIC_KEY_SIZE]) con // or something. For those who don't trust P384 this means the privacy of // your traffic is also protected by C25519. C25519::agree(m_priv, id.m_pub, rawkey); - ECC384ECDH( - id.m_pub + 7 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE, m_priv + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE, - rawkey + ZT_C25519_ECDH_SHARED_SECRET_SIZE); + ECC384ECDH(id.m_pub + 7 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE, m_priv + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE, rawkey + ZT_C25519_ECDH_SHARED_SECRET_SIZE); SHA384(key, rawkey, ZT_C25519_ECDH_SHARED_SECRET_SIZE + ZT_ECC384_SHARED_SECRET_SIZE); return true; } @@ -304,15 +287,13 @@ char *Identity::toString(bool includePrivate, char buf[ZT_IDENTITY_STRING_BUFFER case P384: { *(p++) = '1'; *(p++) = ':'; - int el = - Utils::b32e(m_pub, sizeof(m_pub), p, (int)(ZT_IDENTITY_STRING_BUFFER_LENGTH - (uintptr_t)(p - buf))); + int el = Utils::b32e(m_pub, sizeof(m_pub), p, (int)(ZT_IDENTITY_STRING_BUFFER_LENGTH - (uintptr_t)(p - buf))); if (el <= 0) return nullptr; p += el; if ((m_hasPrivate) && (includePrivate)) { *(p++) = ':'; - el = Utils::b32e( - m_priv, sizeof(m_priv), p, (int)(ZT_IDENTITY_STRING_BUFFER_LENGTH - (uintptr_t)(p - buf))); + el = Utils::b32e(m_priv, sizeof(m_priv), p, (int)(ZT_IDENTITY_STRING_BUFFER_LENGTH - (uintptr_t)(p - buf))); if (el <= 0) return nullptr; p += el; @@ -358,8 +339,7 @@ bool Identity::fromString(const char *str) case 2: switch (m_type) { case C25519: - if (Utils::unhex(f, strlen(f), m_pub, ZT_C25519_COMBINED_PUBLIC_KEY_SIZE) - != ZT_C25519_COMBINED_PUBLIC_KEY_SIZE) + if (Utils::unhex(f, strlen(f), m_pub, ZT_C25519_COMBINED_PUBLIC_KEY_SIZE) != ZT_C25519_COMBINED_PUBLIC_KEY_SIZE) return false; break; @@ -374,8 +354,7 @@ bool Identity::fromString(const char *str) if (strlen(f) > 1) { switch (m_type) { case C25519: - if (Utils::unhex(f, strlen(f), m_priv, ZT_C25519_COMBINED_PRIVATE_KEY_SIZE) - != ZT_C25519_COMBINED_PRIVATE_KEY_SIZE) { + if (Utils::unhex(f, strlen(f), m_priv, ZT_C25519_COMBINED_PRIVATE_KEY_SIZE) != ZT_C25519_COMBINED_PRIVATE_KEY_SIZE) { return false; } else { @@ -413,10 +392,8 @@ int Identity::marshal(uint8_t data[ZT_IDENTITY_MARSHAL_SIZE_MAX], const bool inc Utils::copy(data + ZT_ADDRESS_LENGTH + 1, m_pub); if ((includePrivate) && (m_hasPrivate)) { data[ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE] = ZT_C25519_COMBINED_PRIVATE_KEY_SIZE; - Utils::copy( - data + ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1, m_priv); - return ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1 - + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE; + Utils::copy(data + ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1, m_priv); + return ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1 + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE; } data[ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE] = 0; return ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1; @@ -425,12 +402,9 @@ int Identity::marshal(uint8_t data[ZT_IDENTITY_MARSHAL_SIZE_MAX], const bool inc data[ZT_ADDRESS_LENGTH] = (uint8_t)P384; Utils::copy(data + ZT_ADDRESS_LENGTH + 1, m_pub); if ((includePrivate) && (m_hasPrivate)) { - data[ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE] = - ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE; - Utils::copy( - data + ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1, m_priv); - return ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1 - + ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE; + data[ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE] = ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE; + Utils::copy(data + ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1, m_priv); + return ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1 + ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE; } data[ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE] = 0; return ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1; @@ -457,15 +431,11 @@ int Identity::unmarshal(const uint8_t *data, const int len) noexcept privlen = data[ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE]; if (privlen == ZT_C25519_COMBINED_PRIVATE_KEY_SIZE) { - if (len - < (ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1 - + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE)) + if (len < (ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1 + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE)) return -1; m_hasPrivate = true; - Utils::copy( - m_priv, data + ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1); - return ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1 - + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE; + Utils::copy(m_priv, data + ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1); + return ZT_ADDRESS_LENGTH + 1 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + 1 + ZT_C25519_COMBINED_PRIVATE_KEY_SIZE; } else if (privlen == 0) { m_hasPrivate = false; @@ -488,15 +458,11 @@ int Identity::unmarshal(const uint8_t *data, const int len) noexcept return ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1; } else if (privlen == ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE) { - if (len - < (ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1 - + ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE)) + if (len < (ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1 + ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE)) return -1; m_hasPrivate = true; - Utils::copy( - &m_priv, data + ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1); - return ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1 - + ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE; + Utils::copy(&m_priv, data + ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1); + return ZT_ADDRESS_LENGTH + 1 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + 1 + ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE; } break; } diff --git a/core/Identity.hpp b/core/Identity.hpp index b8a62300e..d9ac7da1c 100644 --- a/core/Identity.hpp +++ b/core/Identity.hpp @@ -27,9 +27,8 @@ #define ZT_IDENTITY_STRING_BUFFER_LENGTH 1024 #define ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE (7 + ZT_C25519_COMBINED_PUBLIC_KEY_SIZE + ZT_ECC384_PUBLIC_KEY_SIZE) #define ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE (ZT_C25519_COMBINED_PRIVATE_KEY_SIZE + ZT_ECC384_PRIVATE_KEY_SIZE) -#define ZT_IDENTITY_MARSHAL_SIZE_MAX \ - (ZT_ADDRESS_LENGTH + 4 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE) -#define ZT_IDENTITY_TYPE1_MIMC52_ROUNDS 262144 +#define ZT_IDENTITY_MARSHAL_SIZE_MAX (ZT_ADDRESS_LENGTH + 4 + ZT_IDENTITY_P384_COMPOUND_PUBLIC_KEY_SIZE + ZT_IDENTITY_P384_COMPOUND_PRIVATE_KEY_SIZE) +#define ZT_IDENTITY_TYPE1_MIMC52_ROUNDS 262144 namespace ZeroTier { @@ -83,6 +82,9 @@ class Identity : public TriviallyCopyable { return *this; } + static ZT_INLINE Identity *from(ZT_Identity *const id) noexcept { return reinterpret_cast(id); } + static ZT_INLINE const Identity *from(const ZT_Identity *const id) noexcept { return reinterpret_cast(id); } + /** * Set identity to NIL value (all zero) */ diff --git a/core/InetAddress.cpp b/core/InetAddress.cpp index 9ce94bc9a..60d93b619 100644 --- a/core/InetAddress.cpp +++ b/core/InetAddress.cpp @@ -20,19 +20,12 @@ namespace ZeroTier { -static_assert( - ZT_SOCKADDR_STORAGE_SIZE == sizeof(sockaddr_storage), - "ZT_SOCKADDR_STORAGE_SIZE is incorrect on this platform, must be size of sockaddr_storage"); -static_assert( - ZT_SOCKADDR_STORAGE_SIZE == sizeof(InetAddress), - "ZT_SOCKADDR_STORAGE_SIZE should equal InetAddress, which must equal size of sockaddr_storage"); -static_assert( - ZT_SOCKADDR_STORAGE_SIZE == sizeof(ZT_InetAddress), - "ZT_SOCKADDR_STORAGE_SIZE should equal ZT_InetAddress, which must equal size of sockaddr_storage"); +static_assert(ZT_SOCKADDR_STORAGE_SIZE == sizeof(sockaddr_storage), "ZT_SOCKADDR_STORAGE_SIZE is incorrect on this platform, must be size of sockaddr_storage"); +static_assert(ZT_SOCKADDR_STORAGE_SIZE == sizeof(InetAddress), "ZT_SOCKADDR_STORAGE_SIZE should equal InetAddress, which must equal size of sockaddr_storage"); +static_assert(ZT_SOCKADDR_STORAGE_SIZE == sizeof(ZT_InetAddress), "ZT_SOCKADDR_STORAGE_SIZE should equal ZT_InetAddress, which must equal size of sockaddr_storage"); const InetAddress InetAddress::LO4((const void *)("\x7f\x00\x00\x01"), 4, 0); -const InetAddress - InetAddress::LO6((const void *)("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"), 16, 0); +const InetAddress InetAddress::LO6((const void *)("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"), 16, 0); const InetAddress InetAddress::NIL; InetAddress::IpScope InetAddress::ipScope() const noexcept @@ -44,18 +37,18 @@ InetAddress::IpScope InetAddress::ipScope() const noexcept case 0x00: return ZT_IP_SCOPE_NONE; // 0.0.0.0/8 (reserved, never used) case 0x06: return ZT_IP_SCOPE_PSEUDOPRIVATE; // 6.0.0.0/8 (US Army) case 0x0a: return ZT_IP_SCOPE_PRIVATE; // 10.0.0.0/8 - case 0x15: // return IP_SCOPE_PSEUDOPRIVATE; // 21.0.0.0/8 (US DDN-RVN) - case 0x16: // return IP_SCOPE_PSEUDOPRIVATE; // 22.0.0.0/8 (US DISA) - case 0x19: // return IP_SCOPE_PSEUDOPRIVATE; // 25.0.0.0/8 (UK Ministry of - // Defense) - case 0x1a: // return IP_SCOPE_PSEUDOPRIVATE; // 26.0.0.0/8 (US DISA) - case 0x1c: // return IP_SCOPE_PSEUDOPRIVATE; // 28.0.0.0/8 (US DSI-North) - case 0x1d: // return IP_SCOPE_PSEUDOPRIVATE; // 29.0.0.0/8 (US DISA) - case 0x1e: // return IP_SCOPE_PSEUDOPRIVATE; // 30.0.0.0/8 (US DISA) - case 0x33: // return IP_SCOPE_PSEUDOPRIVATE; // 51.0.0.0/8 (UK Department of - // Social Security) - case 0x37: // return IP_SCOPE_PSEUDOPRIVATE; // 55.0.0.0/8 (US DoD) - case 0x38: // 56.0.0.0/8 (US Postal Service) + case 0x15: // return IP_SCOPE_PSEUDOPRIVATE; // 21.0.0.0/8 (US DDN-RVN) + case 0x16: // return IP_SCOPE_PSEUDOPRIVATE; // 22.0.0.0/8 (US DISA) + case 0x19: // return IP_SCOPE_PSEUDOPRIVATE; // 25.0.0.0/8 (UK Ministry of + // Defense) + case 0x1a: // return IP_SCOPE_PSEUDOPRIVATE; // 26.0.0.0/8 (US DISA) + case 0x1c: // return IP_SCOPE_PSEUDOPRIVATE; // 28.0.0.0/8 (US DSI-North) + case 0x1d: // return IP_SCOPE_PSEUDOPRIVATE; // 29.0.0.0/8 (US DISA) + case 0x1e: // return IP_SCOPE_PSEUDOPRIVATE; // 30.0.0.0/8 (US DISA) + case 0x33: // return IP_SCOPE_PSEUDOPRIVATE; // 51.0.0.0/8 (UK Department of + // Social Security) + case 0x37: // return IP_SCOPE_PSEUDOPRIVATE; // 55.0.0.0/8 (US DoD) + case 0x38: // 56.0.0.0/8 (US Postal Service) return ZT_IP_SCOPE_PSEUDOPRIVATE; case 0x64: if ((ip & 0xffc00000) == 0x64400000) @@ -226,8 +219,7 @@ InetAddress InetAddress::netmask() const noexcept uint64_t nm[2]; const unsigned int bits = netmaskBits(); if (bits) { - nm[0] = Utils::hton( - (uint64_t)((bits >= 64) ? 0xffffffffffffffffULL : (0xffffffffffffffffULL << (64 - bits)))); + nm[0] = Utils::hton((uint64_t)((bits >= 64) ? 0xffffffffffffffffULL : (0xffffffffffffffffULL << (64 - bits)))); nm[1] = Utils::hton((uint64_t)((bits <= 64) ? 0ULL : (0xffffffffffffffffULL << (128 - bits)))); } else { @@ -259,8 +251,7 @@ InetAddress InetAddress::network() const noexcept uint64_t nm[2]; const unsigned int bits = netmaskBits(); Utils::copy<16>(nm, reinterpret_cast(&r)->sin6_addr.s6_addr); - nm[0] &= - Utils::hton((uint64_t)((bits >= 64) ? 0xffffffffffffffffULL : (0xffffffffffffffffULL << (64 - bits)))); + nm[0] &= Utils::hton((uint64_t)((bits >= 64) ? 0xffffffffffffffffULL : (0xffffffffffffffffULL << (64 - bits)))); nm[1] &= Utils::hton((uint64_t)((bits <= 64) ? 0ULL : (0xffffffffffffffffULL << (128 - bits)))); Utils::copy<16>(r.as.sa_in6.sin6_addr.s6_addr, nm); } break; @@ -298,9 +289,7 @@ bool InetAddress::containsAddress(const InetAddress &addr) const noexcept const unsigned int bits = netmaskBits(); if (bits == 0) return true; - return ( - (Utils::ntoh((uint32_t)addr.as.sa_in.sin_addr.s_addr) >> (32 - bits)) - == (Utils::ntoh((uint32_t)as.sa_in.sin_addr.s_addr) >> (32 - bits))); + return ((Utils::ntoh((uint32_t)addr.as.sa_in.sin_addr.s_addr) >> (32 - bits)) == (Utils::ntoh((uint32_t)as.sa_in.sin_addr.s_addr) >> (32 - bits))); } case AF_INET6: { const InetAddress mask(netmask()); @@ -427,9 +416,8 @@ InetAddress InetAddress::makeIpv6LinkLocal(const MAC &mac) noexcept InetAddress InetAddress::makeIpv6rfc4193(uint64_t nwid, uint64_t zeroTierAddress) noexcept { InetAddress r; - r.as.sa_in6.sin6_family = AF_INET6; - r.as.sa_in6.sin6_port = - ZT_CONST_TO_BE_UINT16(88); // /88 includes 0xfd + network ID, discriminating by device ID below that + r.as.sa_in6.sin6_family = AF_INET6; + r.as.sa_in6.sin6_port = ZT_CONST_TO_BE_UINT16(88); // /88 includes 0xfd + network ID, discriminating by device ID below that r.as.sa_in6.sin6_addr.s6_addr[0] = 0xfd; r.as.sa_in6.sin6_addr.s6_addr[1] = (uint8_t)(nwid >> 56U); r.as.sa_in6.sin6_addr.s6_addr[2] = (uint8_t)(nwid >> 48U); diff --git a/core/InetAddress.hpp b/core/InetAddress.hpp index 6e69917f0..c6bce4aea 100644 --- a/core/InetAddress.hpp +++ b/core/InetAddress.hpp @@ -77,10 +77,7 @@ struct InetAddress : public TriviallyCopyable { explicit ZT_INLINE InetAddress(const sockaddr_in6 *const sa) noexcept { *this = sa; } - ZT_INLINE InetAddress(const void *const ipBytes, const unsigned int ipLen, const unsigned int port) noexcept - { - this->set(ipBytes, ipLen, port); - } + ZT_INLINE InetAddress(const void *const ipBytes, const unsigned int ipLen, const unsigned int port) noexcept { this->set(ipBytes, ipLen, port); } ZT_INLINE InetAddress(const uint32_t ipv4, const unsigned int port) noexcept { this->set(&ipv4, 4, port); } @@ -387,14 +384,10 @@ struct InetAddress : public TriviallyCopyable { ZT_INLINE unsigned long hashCode() const noexcept { if (as.ss.ss_family == AF_INET) { - return (unsigned long)Utils::hash32( - ((uint32_t)as.sa_in.sin_addr.s_addr + (uint32_t)as.sa_in.sin_port) ^ (uint32_t)Utils::s_mapNonce); + return (unsigned long)Utils::hash32(((uint32_t)as.sa_in.sin_addr.s_addr + (uint32_t)as.sa_in.sin_port) ^ (uint32_t)Utils::s_mapNonce); } else if (as.ss.ss_family == AF_INET6) { - return (unsigned long)Utils::hash64( - (Utils::loadMachineEndian(as.sa_in6.sin6_addr.s6_addr) - + Utils::loadMachineEndian(as.sa_in6.sin6_addr.s6_addr + 8) + (uint64_t)as.sa_in6.sin6_port) - ^ Utils::s_mapNonce); + return (unsigned long)Utils::hash64((Utils::loadMachineEndian(as.sa_in6.sin6_addr.s6_addr) + Utils::loadMachineEndian(as.sa_in6.sin6_addr.s6_addr + 8) + (uint64_t)as.sa_in6.sin6_port) ^ Utils::s_mapNonce); } return Utils::fnv1a32(this, sizeof(InetAddress)); } @@ -424,13 +417,9 @@ struct InetAddress : public TriviallyCopyable { { if (as.ss.ss_family == a.as.ss.ss_family) { if (as.ss.ss_family == AF_INET) - return ( - (as.sa_in.sin_port == a.as.sa_in.sin_port) - && (as.sa_in.sin_addr.s_addr == a.as.sa_in.sin_addr.s_addr)); + return ((as.sa_in.sin_port == a.as.sa_in.sin_port) && (as.sa_in.sin_addr.s_addr == a.as.sa_in.sin_addr.s_addr)); if (as.ss.ss_family == AF_INET6) - return ( - (as.sa_in6.sin6_port == a.as.sa_in6.sin6_port) - && (memcmp(as.sa_in6.sin6_addr.s6_addr, a.as.sa_in6.sin6_addr.s6_addr, 16) == 0)); + return ((as.sa_in6.sin6_port == a.as.sa_in6.sin6_port) && (memcmp(as.sa_in6.sin6_addr.s6_addr, a.as.sa_in6.sin6_addr.s6_addr, 16) == 0)); return memcmp(this, &a, sizeof(InetAddress)) == 0; } return false; @@ -443,8 +432,7 @@ struct InetAddress : public TriviallyCopyable { const uint16_t p0 = Utils::ntoh((uint16_t)as.sa_in.sin_port); const uint16_t p1 = Utils::ntoh((uint16_t)a.as.sa_in.sin_port); if (p0 == p1) - return Utils::ntoh((uint32_t)as.sa_in.sin_addr.s_addr) - < Utils::ntoh((uint32_t)a.as.sa_in.sin_addr.s_addr); + return Utils::ntoh((uint32_t)as.sa_in.sin_addr.s_addr) < Utils::ntoh((uint32_t)a.as.sa_in.sin_addr.s_addr); return p0 < p1; } if (as.ss.ss_family == AF_INET6) { @@ -534,52 +522,25 @@ struct InetAddress : public TriviallyCopyable { } as; }; -static ZT_INLINE InetAddress *asInetAddress(sockaddr_in *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE InetAddress *asInetAddress(sockaddr_in *const p) noexcept { return reinterpret_cast(p); } -static ZT_INLINE InetAddress *asInetAddress(sockaddr_in6 *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE InetAddress *asInetAddress(sockaddr_in6 *const p) noexcept { return reinterpret_cast(p); } static ZT_INLINE InetAddress *asInetAddress(sockaddr *const p) noexcept { return reinterpret_cast(p); } -static ZT_INLINE InetAddress *asInetAddress(sockaddr_storage *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE InetAddress *asInetAddress(sockaddr_storage *const p) noexcept { return reinterpret_cast(p); } -static ZT_INLINE InetAddress *asInetAddress(ZT_InetAddress *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE InetAddress *asInetAddress(ZT_InetAddress *const p) noexcept { return reinterpret_cast(p); } -static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_in *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_in *const p) noexcept { return reinterpret_cast(p); } -static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_in6 *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_in6 *const p) noexcept { return reinterpret_cast(p); } -static ZT_INLINE const InetAddress *asInetAddress(const sockaddr *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE const InetAddress *asInetAddress(const sockaddr *const p) noexcept { return reinterpret_cast(p); } -static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_storage *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_storage *const p) noexcept { return reinterpret_cast(p); } -static ZT_INLINE const InetAddress *asInetAddress(const ZT_InetAddress *const p) noexcept -{ - return reinterpret_cast(p); -} +static ZT_INLINE const InetAddress *asInetAddress(const ZT_InetAddress *const p) noexcept { return reinterpret_cast(p); } static ZT_INLINE InetAddress &asInetAddress(sockaddr_in &p) noexcept { return *reinterpret_cast(&p); } @@ -587,37 +548,19 @@ static ZT_INLINE InetAddress &asInetAddress(sockaddr_in6 &p) noexcept { return * static ZT_INLINE InetAddress &asInetAddress(sockaddr &p) noexcept { return *reinterpret_cast(&p); } -static ZT_INLINE InetAddress &asInetAddress(sockaddr_storage &p) noexcept -{ - return *reinterpret_cast(&p); -} +static ZT_INLINE InetAddress &asInetAddress(sockaddr_storage &p) noexcept { return *reinterpret_cast(&p); } static ZT_INLINE InetAddress &asInetAddress(ZT_InetAddress &p) noexcept { return *reinterpret_cast(&p); } -static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_in &p) noexcept -{ - return *reinterpret_cast(&p); -} +static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_in &p) noexcept { return *reinterpret_cast(&p); } -static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_in6 &p) noexcept -{ - return *reinterpret_cast(&p); -} +static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_in6 &p) noexcept { return *reinterpret_cast(&p); } -static ZT_INLINE const InetAddress &asInetAddress(const sockaddr &p) noexcept -{ - return *reinterpret_cast(&p); -} +static ZT_INLINE const InetAddress &asInetAddress(const sockaddr &p) noexcept { return *reinterpret_cast(&p); } -static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_storage &p) noexcept -{ - return *reinterpret_cast(&p); -} +static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_storage &p) noexcept { return *reinterpret_cast(&p); } -static ZT_INLINE const InetAddress &asInetAddress(const ZT_InetAddress &p) noexcept -{ - return *reinterpret_cast(&p); -} +static ZT_INLINE const InetAddress &asInetAddress(const ZT_InetAddress &p) noexcept { return *reinterpret_cast(&p); } } // namespace ZeroTier diff --git a/core/LZ4.cpp b/core/LZ4.cpp index e002d51fc..2418a4d3a 100644 --- a/core/LZ4.cpp +++ b/core/LZ4.cpp @@ -243,9 +243,7 @@ FORCE_INLINE unsigned LZ4_NbCommonBytes(reg_t val) #elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 3))) && !defined(LZ4_FORCE_SW_BITCOUNT) return (__builtin_ctzll((U64)val) >> 3); #else - static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, - 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, - 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 }; + static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 }; return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58]; #endif } @@ -257,8 +255,7 @@ FORCE_INLINE unsigned LZ4_NbCommonBytes(reg_t val) #elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 3))) && !defined(LZ4_FORCE_SW_BITCOUNT) return (__builtin_ctz((U32)val) >> 3); #else - static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, - 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 }; + static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 }; return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27]; #endif } @@ -384,8 +381,7 @@ FORCE_INLINE U32 LZ4_hashPosition(const void *const p, tableType_t const tableTy return LZ4_hash4(LZ4_read32(p), tableType); } -FORCE_INLINE void -LZ4_putPositionOnHash(const BYTE *p, U32 h, void *tableBase, tableType_t const tableType, const BYTE *srcBase) +FORCE_INLINE void LZ4_putPositionOnHash(const BYTE *p, U32 h, void *tableBase, tableType_t const tableType, const BYTE *srcBase) { switch (tableType) { case byPtr: { @@ -434,10 +430,7 @@ FORCE_INLINE const BYTE *LZ4_getPosition(const BYTE *p, void *tableBase, tableTy return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase); } -FORCE_INLINE int LZ4_compress_generic( - LZ4_stream_t_internal *const cctx, const char *const source, char *const dest, const int inputSize, - const int maxOutputSize, const limitedOutput_directive outputLimited, const tableType_t tableType, - const dict_directive dict, const dictIssue_directive dictIssue, const U32 acceleration) +FORCE_INLINE int LZ4_compress_generic(LZ4_stream_t_internal *const cctx, const char *const source, char *const dest, const int inputSize, const int maxOutputSize, const limitedOutput_directive outputLimited, const tableType_t tableType, const dict_directive dict, const dictIssue_directive dictIssue, const U32 acceleration) { const BYTE *ip = (const BYTE *)source; const BYTE *base; @@ -518,9 +511,7 @@ FORCE_INLINE int LZ4_compress_generic( forwardH = LZ4_hashPosition(forwardIp, tableType); LZ4_putPositionOnHash(ip, h, cctx->hashTable, tableType, base); - } while (((dictIssue == dictSmall) ? (match < lowRefLimit) : 0) - || ((tableType == byU16) ? 0 : (match + MAX_DISTANCE < ip)) - || (LZ4_read32(match + refDelta) != LZ4_read32(ip))); + } while (((dictIssue == dictSmall) ? (match < lowRefLimit) : 0) || ((tableType == byU16) ? 0 : (match + MAX_DISTANCE < ip)) || (LZ4_read32(match + refDelta) != LZ4_read32(ip))); } /* Catch up */ @@ -617,8 +608,7 @@ FORCE_INLINE int LZ4_compress_generic( } } LZ4_putPosition(ip, cctx->hashTable, tableType, base); - if (((dictIssue == dictSmall) ? (match >= lowRefLimit) : 1) && (match + MAX_DISTANCE >= ip) - && (LZ4_read32(match + refDelta) == LZ4_read32(ip))) { + if (((dictIssue == dictSmall) ? (match >= lowRefLimit) : 1) && (match + MAX_DISTANCE >= ip) && (LZ4_read32(match + refDelta) == LZ4_read32(ip))) { token = op++; *token = 0; goto _next_match; @@ -653,8 +643,7 @@ _last_literals: return (int)(((char *)op) - dest); } -ZT_INLINE int LZ4_compress_fast_extState( - void *state, const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration) +ZT_INLINE int LZ4_compress_fast_extState(void *state, const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration) { LZ4_stream_t_internal *ctx = &((LZ4_stream_t *)state)->internal_donotuse; LZ4_resetStream((LZ4_stream_t *)state); @@ -662,29 +651,22 @@ ZT_INLINE int LZ4_compress_fast_extState( if (maxOutputSize >= LZ4_compressBound(inputSize)) { if (inputSize < LZ4_64Klimit) - return LZ4_compress_generic( - ctx, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue, acceleration); + return LZ4_compress_generic(ctx, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue, acceleration); else - return LZ4_compress_generic( - ctx, source, dest, inputSize, 0, notLimited, (sizeof(void *) == 8) ? byU32 : byPtr, noDict, noDictIssue, - acceleration); + return LZ4_compress_generic(ctx, source, dest, inputSize, 0, notLimited, (sizeof(void *) == 8) ? byU32 : byPtr, noDict, noDictIssue, acceleration); } else { if (inputSize < LZ4_64Klimit) - return LZ4_compress_generic( - ctx, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); + return LZ4_compress_generic(ctx, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); else - return LZ4_compress_generic( - ctx, source, dest, inputSize, maxOutputSize, limitedOutput, (sizeof(void *) == 8) ? byU32 : byPtr, - noDict, noDictIssue, acceleration); + return LZ4_compress_generic(ctx, source, dest, inputSize, maxOutputSize, limitedOutput, (sizeof(void *) == 8) ? byU32 : byPtr, noDict, noDictIssue, acceleration); } } FORCE_INLINE void LZ4_resetStream(LZ4_stream_t *LZ4_stream) { Utils::zero(LZ4_stream); } FORCE_INLINE int LZ4_decompress_generic( - const char *const source, char *const dest, int inputSize, - int outputSize, /* If endOnInput==endOnInputSize, this value is the max size of Output Buffer. */ + const char *const source, char *const dest, int inputSize, int outputSize, /* If endOnInput==endOnInputSize, this value is the max size of Output Buffer. */ int endOnInput, /* endOnOutputSize, endOnInputSize */ int partialDecoding, /* full, partial */ @@ -742,9 +724,7 @@ FORCE_INLINE int LZ4_decompress_generic( /* copy literals */ cpy = op + length; - if (((endOnInput) - && ((cpy > (partialDecoding ? oexit : oend - MFLIMIT)) || (ip + length > iend - (2 + 1 + LASTLITERALS)))) - || ((!endOnInput) && (cpy > oend - WILDCOPYLENGTH))) { + if (((endOnInput) && ((cpy > (partialDecoding ? oexit : oend - MFLIMIT)) || (ip + length > iend - (2 + 1 + LASTLITERALS)))) || ((!endOnInput) && (cpy > oend - WILDCOPYLENGTH))) { if (partialDecoding) { if (cpy > oend) goto _output_error; /* Error : write attempt beyond end of output buffer */ @@ -887,10 +867,6 @@ int LZ4_compress_fast(const char *source, char *dest, int inputSize, int maxOutp return result; } -int LZ4_decompress_safe(const char *source, char *dest, int compressedSize, int maxDecompressedSize) noexcept -{ - return LZ4_decompress_generic( - source, dest, compressedSize, maxDecompressedSize, endOnInputSize, full, 0, noDict, (BYTE *)dest, NULL, 0); -} +int LZ4_decompress_safe(const char *source, char *dest, int compressedSize, int maxDecompressedSize) noexcept { return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, full, 0, noDict, (BYTE *)dest, NULL, 0); } } // namespace ZeroTier diff --git a/core/Locator.cpp b/core/Locator.cpp index 06101457e..b0725da2e 100644 --- a/core/Locator.cpp +++ b/core/Locator.cpp @@ -19,8 +19,7 @@ namespace ZeroTier { -const SharedPtr - Locator::EndpointAttributes::DEFAULT(new Locator::EndpointAttributes()); +const SharedPtr Locator::EndpointAttributes::DEFAULT(new Locator::EndpointAttributes()); Locator::Locator(const char *const str) noexcept : __refCount(0) { @@ -34,16 +33,14 @@ Locator::Locator(const char *const str) noexcept : __refCount(0) bool Locator::add(const Endpoint &ep, const SharedPtr &a) { - for (Vector>>::iterator i(m_endpoints.begin()); - i != m_endpoints.end(); ++i) { + for (Vector>>::iterator i(m_endpoints.begin()); i != m_endpoints.end(); ++i) { if (i->first == ep) { i->second = ((a) && (a->data[0] != 0)) ? a : EndpointAttributes::DEFAULT; return true; } } if (m_endpoints.size() < ZT_LOCATOR_MAX_ENDPOINTS) { - m_endpoints.push_back(std::pair>( - ep, ((a) && (a->data[0] != 0)) ? a : EndpointAttributes::DEFAULT)); + m_endpoints.push_back(std::pair>(ep, ((a) && (a->data[0] != 0)) ? a : EndpointAttributes::DEFAULT)); return true; } return false; @@ -83,15 +80,11 @@ bool Locator::verify(const Identity &id) const noexcept char *Locator::toString(char s[ZT_LOCATOR_STRING_SIZE_MAX]) const noexcept { - static_assert( - ZT_LOCATOR_STRING_SIZE_MAX > ((((ZT_LOCATOR_MARSHAL_SIZE_MAX / 5) + 1) * 8) + ZT_ADDRESS_LENGTH_HEX + 1), - "overflow"); + static_assert(ZT_LOCATOR_STRING_SIZE_MAX > ((((ZT_LOCATOR_MARSHAL_SIZE_MAX / 5) + 1) * 8) + ZT_ADDRESS_LENGTH_HEX + 1), "overflow"); uint8_t bin[ZT_LOCATOR_MARSHAL_SIZE_MAX]; m_signer.toString(s); s[ZT_ADDRESS_LENGTH_HEX] = '@'; - Utils::b32e( - bin, marshal(bin, false), s + (ZT_ADDRESS_LENGTH_HEX + 1), - ZT_LOCATOR_STRING_SIZE_MAX - (ZT_ADDRESS_LENGTH_HEX + 1)); + Utils::b32e(bin, marshal(bin, false), s + (ZT_ADDRESS_LENGTH_HEX + 1), ZT_LOCATOR_STRING_SIZE_MAX - (ZT_ADDRESS_LENGTH_HEX + 1)); return s; } @@ -116,8 +109,7 @@ int Locator::marshal(uint8_t data[ZT_LOCATOR_MARSHAL_SIZE_MAX], const bool exclu Utils::storeBigEndian(data + p, (uint16_t)m_endpoints.size()); p += 2; - for (Vector>>::const_iterator e(m_endpoints.begin()); - e != m_endpoints.end(); ++e) { + for (Vector>>::const_iterator e(m_endpoints.begin()); e != m_endpoints.end(); ++e) { int l = e->first.marshal(data + p); if (l <= 0) return -1; @@ -206,12 +198,7 @@ int Locator::unmarshal(const uint8_t *data, const int len) noexcept struct p_SortByEndpoint { // There can't be more than one of the same endpoint, so only need to sort // by endpoint. - ZT_INLINE bool operator()( - const std::pair> &a, - const std::pair> &b) const noexcept - { - return a.first < b.first; - } + ZT_INLINE bool operator()(const std::pair> &a, const std::pair> &b) const noexcept { return a.first < b.first; } }; void Locator::m_sortEndpoints() noexcept { std::sort(m_endpoints.begin(), m_endpoints.end(), p_SortByEndpoint()); } diff --git a/core/Locator.hpp b/core/Locator.hpp index 20e0ecfd9..c8622eb8b 100644 --- a/core/Locator.hpp +++ b/core/Locator.hpp @@ -35,10 +35,7 @@ */ #define ZT_LOCATOR_MAX_ENDPOINTS 16 -#define ZT_LOCATOR_MARSHAL_SIZE_MAX \ - (8 + ZT_ADDRESS_LENGTH + 2 \ - + (ZT_LOCATOR_MAX_ENDPOINTS * (ZT_ENDPOINT_MARSHAL_SIZE_MAX + ZT_LOCATOR_MAX_ENDPOINT_ATTRIBUTES_SIZE)) + 2 + 2 \ - + ZT_SIGNATURE_BUFFER_SIZE) +#define ZT_LOCATOR_MARSHAL_SIZE_MAX (8 + ZT_ADDRESS_LENGTH + 2 + (ZT_LOCATOR_MAX_ENDPOINTS * (ZT_ENDPOINT_MARSHAL_SIZE_MAX + ZT_LOCATOR_MAX_ENDPOINT_ATTRIBUTES_SIZE)) + 2 + 2 + ZT_SIGNATURE_BUFFER_SIZE) /** * Maximum size of a string format Locator (this is way larger than needed) @@ -83,15 +80,9 @@ class Locator { ZT_INLINE EndpointAttributes() noexcept { Utils::zero(data); } - ZT_INLINE bool operator==(const EndpointAttributes &a) const noexcept - { - return ((data[0] == a.data[0]) && (memcmp(data, a.data, data[0]) == 0)); - } + ZT_INLINE bool operator==(const EndpointAttributes &a) const noexcept { return ((data[0] == a.data[0]) && (memcmp(data, a.data, data[0]) == 0)); } - ZT_INLINE bool operator<(const EndpointAttributes &a) const noexcept - { - return ((data[0] < a.data[0]) || ((data[0] == a.data[0]) && (memcmp(data, a.data, data[0]) < 0))); - } + ZT_INLINE bool operator<(const EndpointAttributes &a) const noexcept { return ((data[0] < a.data[0]) || ((data[0] == a.data[0]) && (memcmp(data, a.data, data[0]) < 0))); } ZT_INLINE bool operator!=(const EndpointAttributes &a) const noexcept { return !(*this == a); } @@ -107,17 +98,13 @@ class Locator { ZT_INLINE Locator() noexcept : m_revision(0) {} - ZT_INLINE Locator(const Locator &l) noexcept - : m_revision(l.m_revision) - , m_signer(l.m_signer) - , m_endpoints(l.m_endpoints) - , m_signature(l.m_signature) - , __refCount(0) - { - } + ZT_INLINE Locator(const Locator &l) noexcept : m_revision(l.m_revision), m_signer(l.m_signer), m_endpoints(l.m_endpoints), m_signature(l.m_signature), __refCount(0) {} explicit Locator(const char *const str) noexcept; + static ZT_INLINE Locator *from(ZT_Locator *const loc) noexcept { return reinterpret_cast(loc); } + static ZT_INLINE const Locator *from(const ZT_Locator *const loc) noexcept { return reinterpret_cast(loc); } + /** * @return Timestamp (a.k.a. revision number) set by Location signer */ @@ -131,10 +118,7 @@ class Locator { /** * @return Endpoints specified in locator */ - ZT_INLINE const Vector>> &endpoints() const noexcept - { - return m_endpoints; - } + ZT_INLINE const Vector>> &endpoints() const noexcept { return m_endpoints; } /** * @return Signature data @@ -204,8 +188,7 @@ class Locator { ZT_INLINE bool operator==(const Locator &l) const noexcept { const unsigned long es = (unsigned long)m_endpoints.size(); - if ((m_revision == l.m_revision) && (m_signer == l.m_signer) && (es == (unsigned long)l.m_endpoints.size()) - && (m_signature == l.m_signature)) { + if ((m_revision == l.m_revision) && (m_signer == l.m_signer) && (es == (unsigned long)l.m_endpoints.size()) && (m_signature == l.m_signature)) { for (unsigned long i = 0; i < es; ++i) { if (m_endpoints[i].first != l.m_endpoints[i].first) return false; diff --git a/core/MAC.hpp b/core/MAC.hpp index 30a37d7e8..fb3da1456 100644 --- a/core/MAC.hpp +++ b/core/MAC.hpp @@ -30,12 +30,7 @@ class MAC : public TriviallyCopyable { ZT_INLINE MAC() noexcept : m_mac(0ULL) {} ZT_INLINE - MAC(const uint8_t a, const uint8_t b, const uint8_t c, const uint8_t d, const uint8_t e, const uint8_t f) noexcept - : m_mac( - (((uint64_t)a) << 40U) | (((uint64_t)b) << 32U) | (((uint64_t)c) << 24U) | (((uint64_t)d) << 16U) - | (((uint64_t)e) << 8U) | ((uint64_t)f)) - { - } + MAC(const uint8_t a, const uint8_t b, const uint8_t c, const uint8_t d, const uint8_t e, const uint8_t f) noexcept : m_mac((((uint64_t)a) << 40U) | (((uint64_t)b) << 32U) | (((uint64_t)c) << 24U) | (((uint64_t)d) << 16U) | (((uint64_t)e) << 8U) | ((uint64_t)f)) {} explicit ZT_INLINE MAC(const uint64_t m) noexcept : m_mac(m) {} @@ -57,11 +52,7 @@ class MAC : public TriviallyCopyable { * @param bits Raw MAC in big-endian byte order * @param len Length, must be >= 6 or result is zero */ - ZT_INLINE void setTo(const uint8_t b[6]) noexcept - { - m_mac = ((uint64_t)b[0] << 40U) | ((uint64_t)b[1] << 32U) | ((uint64_t)b[2] << 24U) | ((uint64_t)b[3] << 16U) - | ((uint64_t)b[4] << 8U) | (uint64_t)b[5]; - } + ZT_INLINE void setTo(const uint8_t b[6]) noexcept { m_mac = ((uint64_t)b[0] << 40U) | ((uint64_t)b[1] << 32U) | ((uint64_t)b[2] << 24U) | ((uint64_t)b[3] << 16U) | ((uint64_t)b[4] << 8U) | (uint64_t)b[5]; } /** * @param buf Destination buffer for MAC in big-endian byte order @@ -115,8 +106,7 @@ class MAC : public TriviallyCopyable { ZT_INLINE Address toAddress(uint64_t nwid) const noexcept { uint64_t a = m_mac & 0xffffffffffULL; // least significant 40 bits of MAC are formed from address - a ^= ((nwid >> 8U) & 0xffU) - << 32U; // ... XORed with bits 8-48 of the nwid in little-endian byte order, so unmask it + a ^= ((nwid >> 8U) & 0xffU) << 32U; // ... XORed with bits 8-48 of the nwid in little-endian byte order, so unmask it a ^= ((nwid >> 16U) & 0xffU) << 24U; a ^= ((nwid >> 24U) & 0xffU) << 16U; a ^= ((nwid >> 32U) & 0xffU) << 8U; @@ -130,20 +120,16 @@ class MAC : public TriviallyCopyable { */ static ZT_INLINE unsigned char firstOctetForNetwork(uint64_t nwid) noexcept { - const uint8_t a = - ((uint8_t)(nwid & 0xfeU) | 0x02U); // locally administered, not multicast, from LSB of network ID - return ((a == 0x52) ? 0x32 : a); // blacklist 0x52 since it's used by KVM, libvirt, and other popular - // virtualization engines... seems de-facto standard on Linux + const uint8_t a = ((uint8_t)(nwid & 0xfeU) | 0x02U); // locally administered, not multicast, from LSB of network ID + return ((a == 0x52) ? 0x32 : a); // blacklist 0x52 since it's used by KVM, libvirt, and other popular + // virtualization engines... seems de-facto standard on Linux } /** * @param i Value from 0 to 5 (inclusive) * @return Byte at said position (address interpreted in big-endian order) */ - ZT_INLINE uint8_t operator[](unsigned int i) const noexcept - { - return (uint8_t)(m_mac >> (unsigned int)(40 - (i * 8))); - } + ZT_INLINE uint8_t operator[](unsigned int i) const noexcept { return (uint8_t)(m_mac >> (unsigned int)(40 - (i * 8))); } /** * @return 6, which is the number of bytes in a MAC, for container compliance diff --git a/core/MIMC52.cpp b/core/MIMC52.cpp index c28a80541..4b0313879 100644 --- a/core/MIMC52.cpp +++ b/core/MIMC52.cpp @@ -21,163 +21,56 @@ namespace { // Largest 1024 primes of form 6k + 5 and less than 2^52. Only the least significant 32 // bits need to be here, as the most significant bits are all 1. const uint32_t ZT_MIMC52_PRIMES[1024] = { - 4294895267, 4294895477, 4294895513, 4294895519, 4294895543, 4294895567, 4294895657, 4294895711, 4294895777, - 4294895861, 4294895909, 4294895921, 4294895969, 4294896011, 4294896149, 4294896227, 4294896401, 4294896473, - 4294896527, 4294896563, 4294896653, 4294896731, 4294896863, 4294896899, 4294896983, 4294897037, 4294897103, - 4294897331, 4294897349, 4294897451, 4294897571, 4294897661, 4294897703, 4294897757, 4294897793, 4294897811, - 4294897817, 4294897829, 4294897877, 4294897919, 4294897991, 4294898027, 4294898129, 4294898153, 4294898231, - 4294898273, 4294898279, 4294898291, 4294898363, 4294898369, 4294898417, 4294898423, 4294898453, 4294898489, - 4294898573, 4294898579, 4294898639, 4294898693, 4294898747, 4294898759, 4294898867, 4294898879, 4294898909, - 4294898921, 4294898933, 4294899011, 4294899041, 4294899047, 4294899203, 4294899221, 4294899227, 4294899287, - 4294899341, 4294899431, 4294899509, 4294899533, 4294899539, 4294899551, 4294899629, 4294899791, 4294899809, - 4294899971, 4294900001, 4294900007, 4294900013, 4294900307, 4294900331, 4294900427, 4294900469, 4294900481, - 4294900541, 4294900583, 4294900781, 4294900853, 4294900931, 4294900991, 4294901033, 4294901087, 4294901159, - 4294901267, 4294901393, 4294901411, 4294901489, 4294901657, 4294902011, 4294902071, 4294902101, 4294902107, - 4294902353, 4294902377, 4294902599, 4294902647, 4294902743, 4294902869, 4294902977, 4294903067, 4294903103, - 4294903259, 4294903289, 4294903397, 4294903421, 4294903493, 4294903577, 4294903631, 4294903637, 4294903733, - 4294903799, 4294903823, 4294904003, 4294904033, 4294904081, 4294904129, 4294904279, 4294904297, 4294904303, - 4294904333, 4294904351, 4294904381, 4294904453, 4294904519, 4294904561, 4294904639, 4294904657, 4294904747, - 4294904807, 4294904843, 4294905089, 4294905149, 4294905293, 4294905299, 4294905311, 4294905443, 4294905479, - 4294905539, 4294905623, 4294905641, 4294905671, 4294905707, 4294905887, 4294905977, 4294906091, 4294906103, - 4294906139, 4294906157, 4294906223, 4294906259, 4294906487, 4294906493, 4294906523, 4294906547, 4294906553, - 4294906571, 4294906577, 4294906589, 4294906703, 4294906733, 4294906763, 4294906841, 4294906859, 4294906937, - 4294907057, 4294907063, 4294907141, 4294907231, 4294907249, 4294907261, 4294907267, 4294907387, 4294907417, - 4294907567, 4294907603, 4294907699, 4294907789, 4294907849, 4294907873, 4294907879, 4294908023, 4294908071, - 4294908119, 4294908209, 4294908227, 4294908329, 4294908491, 4294908503, 4294908569, 4294908653, 4294908713, - 4294908719, 4294908791, 4294908839, 4294908869, 4294908989, 4294909031, 4294909067, 4294909109, 4294909253, - 4294909529, 4294909589, 4294909643, 4294909739, 4294909799, 4294909811, 4294909853, 4294910003, 4294910039, - 4294910189, 4294910201, 4294910219, 4294910273, 4294910333, 4294910369, 4294910393, 4294910471, 4294910549, - 4294910651, 4294910669, 4294910681, 4294910711, 4294910753, 4294910801, 4294910981, 4294911053, 4294911143, - 4294911227, 4294911239, 4294911359, 4294911383, 4294911407, 4294911521, 4294911551, 4294911611, 4294911641, - 4294911689, 4294911719, 4294911869, 4294912109, 4294912133, 4294912151, 4294912187, 4294912223, 4294912331, - 4294912439, 4294912607, 4294912703, 4294912859, 4294912871, 4294912907, 4294912961, 4294913003, 4294913111, - 4294913309, 4294913333, 4294913357, 4294913399, 4294913411, 4294913459, 4294913501, 4294913531, 4294913591, - 4294913609, 4294913663, 4294913783, 4294913819, 4294913903, 4294914137, 4294914413, 4294914473, 4294914497, - 4294914527, 4294914551, 4294914593, 4294914611, 4294914659, 4294914671, 4294914743, 4294914863, 4294914917, - 4294915061, 4294915103, 4294915139, 4294915217, 4294915223, 4294915253, 4294915283, 4294915373, 4294915433, - 4294915607, 4294916069, 4294916213, 4294916267, 4294916303, 4294916393, 4294916441, 4294916477, 4294916507, - 4294916573, 4294916633, 4294916687, 4294916783, 4294916837, 4294916897, 4294916921, 4294917029, 4294917047, - 4294917101, 4294917203, 4294917287, 4294917299, 4294917389, 4294917437, 4294917527, 4294917557, 4294917611, - 4294917617, 4294917689, 4294917821, 4294917857, 4294917917, 4294917941, 4294918169, 4294918187, 4294918307, - 4294918409, 4294918433, 4294918481, 4294918703, 4294918709, 4294918733, 4294918799, 4294918871, 4294919009, - 4294919249, 4294919279, 4294919291, 4294919363, 4294919381, 4294919441, 4294919447, 4294919549, 4294919579, - 4294919633, 4294919657, 4294919669, 4294919693, 4294919711, 4294920029, 4294920059, 4294920089, 4294920197, - 4294920239, 4294920257, 4294920263, 4294920269, 4294920341, 4294920353, 4294920407, 4294920503, 4294920599, - 4294920647, 4294920743, 4294920803, 4294920809, 4294920881, 4294920899, 4294920983, 4294921043, 4294921139, - 4294921151, 4294921181, 4294921229, 4294921289, 4294921331, 4294921343, 4294921391, 4294921469, 4294921709, - 4294921721, 4294921823, 4294921847, 4294921889, 4294922057, 4294922171, 4294922201, 4294922237, 4294922309, - 4294922399, 4294922447, 4294922507, 4294922513, 4294922549, 4294922609, 4294922663, 4294922861, 4294922933, - 4294923101, 4294923191, 4294923209, 4294923221, 4294923251, 4294923263, 4294923359, 4294923371, 4294923377, - 4294923461, 4294923521, 4294923953, 4294924001, 4294924091, 4294924121, 4294924319, 4294924397, 4294924571, - 4294924583, 4294924751, 4294924817, 4294924823, 4294924847, 4294924877, 4294925003, 4294925027, 4294925117, - 4294925237, 4294925243, 4294925297, 4294925369, 4294925627, 4294925639, 4294925729, 4294925747, 4294925873, - 4294925891, 4294925933, 4294926047, 4294926059, 4294926209, 4294926221, 4294926233, 4294926257, 4294926329, - 4294926371, 4294926401, 4294926413, 4294926437, 4294926563, 4294926569, 4294926917, 4294926923, 4294926947, - 4294926971, 4294927067, 4294927073, 4294927151, 4294927349, 4294927367, 4294927403, 4294927481, 4294927523, - 4294927553, 4294927589, 4294927649, 4294927673, 4294927727, 4294927739, 4294927763, 4294927889, 4294928183, - 4294928207, 4294928249, 4294928327, 4294928351, 4294928399, 4294928483, 4294928489, 4294928543, 4294928597, - 4294928951, 4294928963, 4294928981, 4294929017, 4294929059, 4294929161, 4294929197, 4294929233, 4294929269, - 4294929311, 4294929323, 4294929341, 4294929383, 4294929401, 4294929497, 4294929509, 4294929581, 4294929707, - 4294929743, 4294930043, 4294930121, 4294930193, 4294930223, 4294930349, 4294930403, 4294930571, 4294930613, - 4294930721, 4294930751, 4294930877, 4294930931, 4294930961, 4294930967, 4294930973, 4294931021, 4294931051, - 4294931057, 4294931063, 4294931219, 4294931273, 4294931339, 4294931423, 4294931441, 4294931453, 4294931567, - 4294931639, 4294931717, 4294931897, 4294931969, 4294932023, 4294932053, 4294932239, 4294932299, 4294932443, - 4294932671, 4294932677, 4294932731, 4294932743, 4294932767, 4294932773, 4294932779, 4294932881, 4294932899, - 4294932929, 4294933067, 4294933277, 4294933307, 4294933343, 4294933451, 4294933523, 4294933763, 4294933793, - 4294933829, 4294933847, 4294933871, 4294933997, 4294934033, 4294934111, 4294934207, 4294934243, 4294934267, - 4294934279, 4294934291, 4294934327, 4294934363, 4294934423, 4294934489, 4294934561, 4294934867, 4294934921, - 4294934969, 4294935137, 4294935239, 4294935299, 4294935431, 4294935539, 4294935629, 4294935701, 4294935791, - 4294935797, 4294935803, 4294935959, 4294936001, 4294936007, 4294936037, 4294936079, 4294936127, 4294936163, - 4294936247, 4294936307, 4294936331, 4294936409, 4294936451, 4294936601, 4294936607, 4294936619, 4294936667, - 4294936709, 4294936733, 4294936751, 4294936763, 4294936829, 4294936937, 4294936997, 4294937027, 4294937051, - 4294937093, 4294937177, 4294937213, 4294937291, 4294937381, 4294937417, 4294937429, 4294937681, 4294937693, - 4294937753, 4294937771, 4294937813, 4294937837, 4294937891, 4294937969, 4294938071, 4294938101, 4294938323, - 4294938371, 4294938401, 4294938467, 4294938473, 4294938521, 4294938599, 4294938731, 4294938779, 4294938833, - 4294938899, 4294938977, 4294938983, 4294939067, 4294939127, 4294939223, 4294939277, 4294939331, 4294939337, - 4294939391, 4294939457, 4294939559, 4294939673, 4294939691, 4294939901, 4294939991, 4294940087, 4294940093, - 4294940189, 4294940213, 4294940417, 4294940657, 4294940699, 4294940753, 4294940801, 4294940873, 4294940951, - 4294941047, 4294941143, 4294941161, 4294941227, 4294941281, 4294941377, 4294941509, 4294941551, 4294941701, - 4294941731, 4294941767, 4294941911, 4294941923, 4294942043, 4294942139, 4294942313, 4294942343, 4294942373, - 4294942427, 4294942529, 4294942601, 4294942649, 4294942673, 4294942679, 4294942733, 4294942769, 4294942811, - 4294942961, 4294943129, 4294943141, 4294943219, 4294943369, 4294943423, 4294943471, 4294943651, 4294943687, - 4294943717, 4294943729, 4294943747, 4294943759, 4294943813, 4294943819, 4294943891, 4294944077, 4294944191, - 4294944233, 4294944239, 4294944353, 4294944389, 4294944581, 4294944623, 4294944629, 4294944659, 4294944821, - 4294945031, 4294945157, 4294945211, 4294945229, 4294945301, 4294945337, 4294945343, 4294945511, 4294945547, - 4294945667, 4294945709, 4294945757, 4294945841, 4294945991, 4294946033, 4294946099, 4294946153, 4294946477, - 4294946687, 4294946747, 4294946957, 4294946993, 4294947023, 4294947131, 4294947167, 4294947287, 4294947311, - 4294947413, 4294947581, 4294947599, 4294947671, 4294947851, 4294947959, 4294948067, 4294948073, 4294948193, - 4294948259, 4294948421, 4294948451, 4294948613, 4294948673, 4294948883, 4294949027, 4294949057, 4294949069, - 4294949519, 4294949531, 4294949603, 4294949609, 4294949627, 4294949693, 4294949729, 4294949741, 4294949807, - 4294949921, 4294949939, 4294949981, 4294949993, 4294950083, 4294950173, 4294950197, 4294950251, 4294950287, - 4294950317, 4294950323, 4294950329, 4294950581, 4294950593, 4294950617, 4294950629, 4294950713, 4294950929, - 4294951151, 4294951163, 4294951169, 4294951379, 4294951583, 4294951613, 4294951853, 4294951907, 4294951913, - 4294951937, 4294951961, 4294952063, 4294952183, 4294952393, 4294952543, 4294952549, 4294952597, 4294952627, - 4294952687, 4294952723, 4294952729, 4294952789, 4294952819, 4294952873, 4294952891, 4294952903, 4294952969, - 4294952999, 4294953023, 4294953107, 4294953173, 4294953281, 4294953341, 4294953431, 4294953599, 4294953689, - 4294953719, 4294953827, 4294953887, 4294953977, 4294954073, 4294954079, 4294954157, 4294954217, 4294954283, - 4294954607, 4294954667, 4294954859, 4294954901, 4294954973, 4294955081, 4294955237, 4294955273, 4294955327, - 4294955441, 4294955507, 4294955591, 4294955789, 4294955831, 4294955837, 4294955927, 4294955963, 4294955969, - 4294955987, 4294956041, 4294956047, 4294956197, 4294956323, 4294956359, 4294956551, 4294956593, 4294956623, - 4294956629, 4294956641, 4294956719, 4294956761, 4294956767, 4294956797, 4294956821, 4294956833, 4294957037, - 4294957079, 4294957103, 4294957181, 4294957349, 4294957379, 4294957433, 4294957463, 4294957511, 4294957577, - 4294957727, 4294957859, 4294957877, 4294958039, 4294958153, 4294958309, 4294958417, 4294958441, 4294958693, - 4294958717, 4294958753, 4294958903, 4294958909, 4294959017, 4294959071, 4294959107, 4294959161, 4294959257, - 4294959299, 4294959329, 4294959431, 4294959593, 4294959599, 4294959659, 4294959893, 4294959917, 4294959983, - 4294960001, 4294960031, 4294960061, 4294960079, 4294960097, 4294960271, 4294960283, 4294960349, 4294960367, - 4294960421, 4294960529, 4294960541, 4294960583, 4294960613, 4294960673, 4294960691, 4294960697, 4294960787, - 4294960919, 4294961003, 4294961039, 4294961153, 4294961159, 4294961171, 4294961321, 4294961411, 4294961471, - 4294961507, 4294961537, 4294961669, 4294961717, 4294961741, 4294961873, 4294962059, 4294962137, 4294962167, - 4294962263, 4294962281, 4294962311, 4294962341, 4294962413, 4294962521, 4294962563, 4294962761, 4294962893, - 4294963103, 4294963163, 4294963223, 4294963313, 4294963349, 4294963427, 4294963547, 4294963559, 4294963721, - 4294963799, 4294963817, 4294963901, 4294963919, 4294964021, 4294964279, 4294964297, 4294964363, 4294964387, - 4294964411, 4294964567, 4294964603, 4294964687, 4294964777, 4294965041, 4294965071, 4294965119, 4294965221, - 4294965251, 4294965287, 4294965413, 4294965569, 4294965647, 4294965671, 4294965689, 4294965779, 4294965839, - 4294965893, 4294966091, 4294966109, 4294966127, 4294966157, 4294966187, 4294966199, 4294966211, 4294966403, - 4294966457, 4294966499, 4294966541, 4294966637, 4294966661, 4294966739, 4294966823, 4294966883, 4294966901, - 4294966961, 4294967027, 4294967087, 4294967099, 4294967123, 4294967153, 4294967249 + 4294895267, 4294895477, 4294895513, 4294895519, 4294895543, 4294895567, 4294895657, 4294895711, 4294895777, 4294895861, 4294895909, 4294895921, 4294895969, 4294896011, 4294896149, 4294896227, 4294896401, 4294896473, 4294896527, 4294896563, 4294896653, 4294896731, 4294896863, 4294896899, 4294896983, 4294897037, 4294897103, 4294897331, 4294897349, + 4294897451, 4294897571, 4294897661, 4294897703, 4294897757, 4294897793, 4294897811, 4294897817, 4294897829, 4294897877, 4294897919, 4294897991, 4294898027, 4294898129, 4294898153, 4294898231, 4294898273, 4294898279, 4294898291, 4294898363, 4294898369, 4294898417, 4294898423, 4294898453, 4294898489, 4294898573, 4294898579, 4294898639, 4294898693, + 4294898747, 4294898759, 4294898867, 4294898879, 4294898909, 4294898921, 4294898933, 4294899011, 4294899041, 4294899047, 4294899203, 4294899221, 4294899227, 4294899287, 4294899341, 4294899431, 4294899509, 4294899533, 4294899539, 4294899551, 4294899629, 4294899791, 4294899809, 4294899971, 4294900001, 4294900007, 4294900013, 4294900307, 4294900331, + 4294900427, 4294900469, 4294900481, 4294900541, 4294900583, 4294900781, 4294900853, 4294900931, 4294900991, 4294901033, 4294901087, 4294901159, 4294901267, 4294901393, 4294901411, 4294901489, 4294901657, 4294902011, 4294902071, 4294902101, 4294902107, 4294902353, 4294902377, 4294902599, 4294902647, 4294902743, 4294902869, 4294902977, 4294903067, + 4294903103, 4294903259, 4294903289, 4294903397, 4294903421, 4294903493, 4294903577, 4294903631, 4294903637, 4294903733, 4294903799, 4294903823, 4294904003, 4294904033, 4294904081, 4294904129, 4294904279, 4294904297, 4294904303, 4294904333, 4294904351, 4294904381, 4294904453, 4294904519, 4294904561, 4294904639, 4294904657, 4294904747, 4294904807, + 4294904843, 4294905089, 4294905149, 4294905293, 4294905299, 4294905311, 4294905443, 4294905479, 4294905539, 4294905623, 4294905641, 4294905671, 4294905707, 4294905887, 4294905977, 4294906091, 4294906103, 4294906139, 4294906157, 4294906223, 4294906259, 4294906487, 4294906493, 4294906523, 4294906547, 4294906553, 4294906571, 4294906577, 4294906589, + 4294906703, 4294906733, 4294906763, 4294906841, 4294906859, 4294906937, 4294907057, 4294907063, 4294907141, 4294907231, 4294907249, 4294907261, 4294907267, 4294907387, 4294907417, 4294907567, 4294907603, 4294907699, 4294907789, 4294907849, 4294907873, 4294907879, 4294908023, 4294908071, 4294908119, 4294908209, 4294908227, 4294908329, 4294908491, + 4294908503, 4294908569, 4294908653, 4294908713, 4294908719, 4294908791, 4294908839, 4294908869, 4294908989, 4294909031, 4294909067, 4294909109, 4294909253, 4294909529, 4294909589, 4294909643, 4294909739, 4294909799, 4294909811, 4294909853, 4294910003, 4294910039, 4294910189, 4294910201, 4294910219, 4294910273, 4294910333, 4294910369, 4294910393, + 4294910471, 4294910549, 4294910651, 4294910669, 4294910681, 4294910711, 4294910753, 4294910801, 4294910981, 4294911053, 4294911143, 4294911227, 4294911239, 4294911359, 4294911383, 4294911407, 4294911521, 4294911551, 4294911611, 4294911641, 4294911689, 4294911719, 4294911869, 4294912109, 4294912133, 4294912151, 4294912187, 4294912223, 4294912331, + 4294912439, 4294912607, 4294912703, 4294912859, 4294912871, 4294912907, 4294912961, 4294913003, 4294913111, 4294913309, 4294913333, 4294913357, 4294913399, 4294913411, 4294913459, 4294913501, 4294913531, 4294913591, 4294913609, 4294913663, 4294913783, 4294913819, 4294913903, 4294914137, 4294914413, 4294914473, 4294914497, 4294914527, 4294914551, + 4294914593, 4294914611, 4294914659, 4294914671, 4294914743, 4294914863, 4294914917, 4294915061, 4294915103, 4294915139, 4294915217, 4294915223, 4294915253, 4294915283, 4294915373, 4294915433, 4294915607, 4294916069, 4294916213, 4294916267, 4294916303, 4294916393, 4294916441, 4294916477, 4294916507, 4294916573, 4294916633, 4294916687, 4294916783, + 4294916837, 4294916897, 4294916921, 4294917029, 4294917047, 4294917101, 4294917203, 4294917287, 4294917299, 4294917389, 4294917437, 4294917527, 4294917557, 4294917611, 4294917617, 4294917689, 4294917821, 4294917857, 4294917917, 4294917941, 4294918169, 4294918187, 4294918307, 4294918409, 4294918433, 4294918481, 4294918703, 4294918709, 4294918733, + 4294918799, 4294918871, 4294919009, 4294919249, 4294919279, 4294919291, 4294919363, 4294919381, 4294919441, 4294919447, 4294919549, 4294919579, 4294919633, 4294919657, 4294919669, 4294919693, 4294919711, 4294920029, 4294920059, 4294920089, 4294920197, 4294920239, 4294920257, 4294920263, 4294920269, 4294920341, 4294920353, 4294920407, 4294920503, + 4294920599, 4294920647, 4294920743, 4294920803, 4294920809, 4294920881, 4294920899, 4294920983, 4294921043, 4294921139, 4294921151, 4294921181, 4294921229, 4294921289, 4294921331, 4294921343, 4294921391, 4294921469, 4294921709, 4294921721, 4294921823, 4294921847, 4294921889, 4294922057, 4294922171, 4294922201, 4294922237, 4294922309, 4294922399, + 4294922447, 4294922507, 4294922513, 4294922549, 4294922609, 4294922663, 4294922861, 4294922933, 4294923101, 4294923191, 4294923209, 4294923221, 4294923251, 4294923263, 4294923359, 4294923371, 4294923377, 4294923461, 4294923521, 4294923953, 4294924001, 4294924091, 4294924121, 4294924319, 4294924397, 4294924571, 4294924583, 4294924751, 4294924817, + 4294924823, 4294924847, 4294924877, 4294925003, 4294925027, 4294925117, 4294925237, 4294925243, 4294925297, 4294925369, 4294925627, 4294925639, 4294925729, 4294925747, 4294925873, 4294925891, 4294925933, 4294926047, 4294926059, 4294926209, 4294926221, 4294926233, 4294926257, 4294926329, 4294926371, 4294926401, 4294926413, 4294926437, 4294926563, + 4294926569, 4294926917, 4294926923, 4294926947, 4294926971, 4294927067, 4294927073, 4294927151, 4294927349, 4294927367, 4294927403, 4294927481, 4294927523, 4294927553, 4294927589, 4294927649, 4294927673, 4294927727, 4294927739, 4294927763, 4294927889, 4294928183, 4294928207, 4294928249, 4294928327, 4294928351, 4294928399, 4294928483, 4294928489, + 4294928543, 4294928597, 4294928951, 4294928963, 4294928981, 4294929017, 4294929059, 4294929161, 4294929197, 4294929233, 4294929269, 4294929311, 4294929323, 4294929341, 4294929383, 4294929401, 4294929497, 4294929509, 4294929581, 4294929707, 4294929743, 4294930043, 4294930121, 4294930193, 4294930223, 4294930349, 4294930403, 4294930571, 4294930613, + 4294930721, 4294930751, 4294930877, 4294930931, 4294930961, 4294930967, 4294930973, 4294931021, 4294931051, 4294931057, 4294931063, 4294931219, 4294931273, 4294931339, 4294931423, 4294931441, 4294931453, 4294931567, 4294931639, 4294931717, 4294931897, 4294931969, 4294932023, 4294932053, 4294932239, 4294932299, 4294932443, 4294932671, 4294932677, + 4294932731, 4294932743, 4294932767, 4294932773, 4294932779, 4294932881, 4294932899, 4294932929, 4294933067, 4294933277, 4294933307, 4294933343, 4294933451, 4294933523, 4294933763, 4294933793, 4294933829, 4294933847, 4294933871, 4294933997, 4294934033, 4294934111, 4294934207, 4294934243, 4294934267, 4294934279, 4294934291, 4294934327, 4294934363, + 4294934423, 4294934489, 4294934561, 4294934867, 4294934921, 4294934969, 4294935137, 4294935239, 4294935299, 4294935431, 4294935539, 4294935629, 4294935701, 4294935791, 4294935797, 4294935803, 4294935959, 4294936001, 4294936007, 4294936037, 4294936079, 4294936127, 4294936163, 4294936247, 4294936307, 4294936331, 4294936409, 4294936451, 4294936601, + 4294936607, 4294936619, 4294936667, 4294936709, 4294936733, 4294936751, 4294936763, 4294936829, 4294936937, 4294936997, 4294937027, 4294937051, 4294937093, 4294937177, 4294937213, 4294937291, 4294937381, 4294937417, 4294937429, 4294937681, 4294937693, 4294937753, 4294937771, 4294937813, 4294937837, 4294937891, 4294937969, 4294938071, 4294938101, + 4294938323, 4294938371, 4294938401, 4294938467, 4294938473, 4294938521, 4294938599, 4294938731, 4294938779, 4294938833, 4294938899, 4294938977, 4294938983, 4294939067, 4294939127, 4294939223, 4294939277, 4294939331, 4294939337, 4294939391, 4294939457, 4294939559, 4294939673, 4294939691, 4294939901, 4294939991, 4294940087, 4294940093, 4294940189, + 4294940213, 4294940417, 4294940657, 4294940699, 4294940753, 4294940801, 4294940873, 4294940951, 4294941047, 4294941143, 4294941161, 4294941227, 4294941281, 4294941377, 4294941509, 4294941551, 4294941701, 4294941731, 4294941767, 4294941911, 4294941923, 4294942043, 4294942139, 4294942313, 4294942343, 4294942373, 4294942427, 4294942529, 4294942601, + 4294942649, 4294942673, 4294942679, 4294942733, 4294942769, 4294942811, 4294942961, 4294943129, 4294943141, 4294943219, 4294943369, 4294943423, 4294943471, 4294943651, 4294943687, 4294943717, 4294943729, 4294943747, 4294943759, 4294943813, 4294943819, 4294943891, 4294944077, 4294944191, 4294944233, 4294944239, 4294944353, 4294944389, 4294944581, + 4294944623, 4294944629, 4294944659, 4294944821, 4294945031, 4294945157, 4294945211, 4294945229, 4294945301, 4294945337, 4294945343, 4294945511, 4294945547, 4294945667, 4294945709, 4294945757, 4294945841, 4294945991, 4294946033, 4294946099, 4294946153, 4294946477, 4294946687, 4294946747, 4294946957, 4294946993, 4294947023, 4294947131, 4294947167, + 4294947287, 4294947311, 4294947413, 4294947581, 4294947599, 4294947671, 4294947851, 4294947959, 4294948067, 4294948073, 4294948193, 4294948259, 4294948421, 4294948451, 4294948613, 4294948673, 4294948883, 4294949027, 4294949057, 4294949069, 4294949519, 4294949531, 4294949603, 4294949609, 4294949627, 4294949693, 4294949729, 4294949741, 4294949807, + 4294949921, 4294949939, 4294949981, 4294949993, 4294950083, 4294950173, 4294950197, 4294950251, 4294950287, 4294950317, 4294950323, 4294950329, 4294950581, 4294950593, 4294950617, 4294950629, 4294950713, 4294950929, 4294951151, 4294951163, 4294951169, 4294951379, 4294951583, 4294951613, 4294951853, 4294951907, 4294951913, 4294951937, 4294951961, + 4294952063, 4294952183, 4294952393, 4294952543, 4294952549, 4294952597, 4294952627, 4294952687, 4294952723, 4294952729, 4294952789, 4294952819, 4294952873, 4294952891, 4294952903, 4294952969, 4294952999, 4294953023, 4294953107, 4294953173, 4294953281, 4294953341, 4294953431, 4294953599, 4294953689, 4294953719, 4294953827, 4294953887, 4294953977, + 4294954073, 4294954079, 4294954157, 4294954217, 4294954283, 4294954607, 4294954667, 4294954859, 4294954901, 4294954973, 4294955081, 4294955237, 4294955273, 4294955327, 4294955441, 4294955507, 4294955591, 4294955789, 4294955831, 4294955837, 4294955927, 4294955963, 4294955969, 4294955987, 4294956041, 4294956047, 4294956197, 4294956323, 4294956359, + 4294956551, 4294956593, 4294956623, 4294956629, 4294956641, 4294956719, 4294956761, 4294956767, 4294956797, 4294956821, 4294956833, 4294957037, 4294957079, 4294957103, 4294957181, 4294957349, 4294957379, 4294957433, 4294957463, 4294957511, 4294957577, 4294957727, 4294957859, 4294957877, 4294958039, 4294958153, 4294958309, 4294958417, 4294958441, + 4294958693, 4294958717, 4294958753, 4294958903, 4294958909, 4294959017, 4294959071, 4294959107, 4294959161, 4294959257, 4294959299, 4294959329, 4294959431, 4294959593, 4294959599, 4294959659, 4294959893, 4294959917, 4294959983, 4294960001, 4294960031, 4294960061, 4294960079, 4294960097, 4294960271, 4294960283, 4294960349, 4294960367, 4294960421, + 4294960529, 4294960541, 4294960583, 4294960613, 4294960673, 4294960691, 4294960697, 4294960787, 4294960919, 4294961003, 4294961039, 4294961153, 4294961159, 4294961171, 4294961321, 4294961411, 4294961471, 4294961507, 4294961537, 4294961669, 4294961717, 4294961741, 4294961873, 4294962059, 4294962137, 4294962167, 4294962263, 4294962281, 4294962311, + 4294962341, 4294962413, 4294962521, 4294962563, 4294962761, 4294962893, 4294963103, 4294963163, 4294963223, 4294963313, 4294963349, 4294963427, 4294963547, 4294963559, 4294963721, 4294963799, 4294963817, 4294963901, 4294963919, 4294964021, 4294964279, 4294964297, 4294964363, 4294964387, 4294964411, 4294964567, 4294964603, 4294964687, 4294964777, + 4294965041, 4294965071, 4294965119, 4294965221, 4294965251, 4294965287, 4294965413, 4294965569, 4294965647, 4294965671, 4294965689, 4294965779, 4294965839, 4294965893, 4294966091, 4294966109, 4294966127, 4294966157, 4294966187, 4294966199, 4294966211, 4294966403, 4294966457, 4294966499, 4294966541, 4294966637, 4294966661, 4294966739, 4294966823, + 4294966883, 4294966901, 4294966961, 4294967027, 4294967087, 4294967099, 4294967123, 4294967153, 4294967249 }; -#ifdef ZT_NO_IEEE_DOUBLE - -/* Integer 64-bit modular multiply for systems without an IEEE FPU. This is - * much slower on systems that can use the FPU hack. */ -static uint64_t mulmod64(uint64_t a, uint64_t b, const uint64_t m) -{ - uint64_t res = 0; - while ((a)) { - if ((a << 63U)) - res = (res + b) % m; - a >>= 1U; - b = (b << 1U) % m; - } - return res; -} - -#define mulmod52(a, b, m, mf) mulmod64((a), (b), (m)) - -#else - -/* If we have IEEE double precision FPU support, we can do this trick to - * execute a 52-bit mulmod faster than the integer ALU. This trick is why - * this is a 52-bit work function and not a 64-bit work function, as it - * performs fairly equally across CPUs. */ -ZT_INLINE uint64_t mulmod52(uint64_t a, const uint64_t b, const uint64_t m, const double mf) -{ - return ((a * b) - (((uint64_t)(((double)a * (double)b) / mf) - 1ULL) * m)) % m; -} - -#endif +#define mulmod52(a, b, m) (((a * b) - (((uint64_t)(((double)a * (double)b) / (double)m) - 1ULL) * m)) % m) // Compute a^e%m (mf is m in floating point form to avoid repeated conversion) -ZT_INLINE uint64_t modpow52(uint64_t a, uint64_t e, const uint64_t m, const double mf) +ZT_INLINE uint64_t modpow52(uint64_t a, uint64_t e, const uint64_t m) noexcept { uint64_t res = 1ULL; for (;;) { if ((e << 63U)) { - res = mulmod52(res, a, m, mf); + res = mulmod52(res, a, m); } if (likely((e >>= 1U) != 0)) { - a = mulmod52(a, a, m, mf); + a = mulmod52(a, a, m); } else { break; @@ -215,15 +108,13 @@ uint64_t delay(const uint8_t challenge[32], const unsigned long rounds) uint64_t k[34]; fillK(k, challenge); - const uint64_t p = 0x000fffff00000000ULL | (uint64_t)ZT_MIMC52_PRIMES[((unsigned long)k[32]) & 1023]; - const uint64_t e = ((p * 2ULL) - 1ULL) / 3ULL; - const uint64_t m52 = 0xfffffffffffffULL; - const double pf = (double)p; + const uint64_t p = 0x000fffff00000000ULL | (uint64_t)ZT_MIMC52_PRIMES[((unsigned long)k[32]) & 1023]; + const uint64_t e = ((p * 2ULL) - 1ULL) / 3ULL; uint64_t x = k[33] % p; for (unsigned long r = 0, kn = rounds; r < rounds; ++r) { - x = (x - k[--kn & 31]) & m52; - x = modpow52(x, e, p, pf); + x = (x - k[--kn & 31]) & 0xfffffffffffffULL; + x = modpow52(x, e, p); } return x; @@ -233,17 +124,12 @@ bool verify(const uint8_t challenge[32], const unsigned long rounds, uint64_t pr { uint64_t k[34]; fillK(k, challenge); - - const uint64_t p = 0x000fffff00000000ULL | (uint64_t)ZT_MIMC52_PRIMES[((unsigned long)k[32]) & 1023]; - const uint64_t m52 = 0xfffffffffffffULL; - const double pf = (double)p; - + const uint64_t p = 0x000fffff00000000ULL | (uint64_t)ZT_MIMC52_PRIMES[((unsigned long)k[32]) & 1023]; for (unsigned long r = 0; r < rounds; ++r) { const uint64_t kk = k[r & 31]; - proof = mulmod52(mulmod52(proof, proof, p, pf), proof, p, pf); // y = y ^ 3 - proof = (proof + kk) & m52; + proof = mulmod52(mulmod52(proof, proof, p), proof, p); // y = y ^ 3 + proof = (proof + kk) & 0xfffffffffffffULL; } - return ((proof % p) == (k[33] % p)); } diff --git a/core/Member.cpp b/core/Member.cpp index a56b27833..5aded1e51 100644 --- a/core/Member.cpp +++ b/core/Member.cpp @@ -21,16 +21,9 @@ namespace ZeroTier { -Member::Member() - : m_comRevocationThreshold(0) - , m_lastPushedCredentials(0) - , m_comAgreementLocalTimestamp(0) - , m_comAgreementRemoteTimestamp(0) -{ -} +Member::Member() : m_comRevocationThreshold(0), m_lastPushedCredentials(0), m_comAgreementLocalTimestamp(0), m_comAgreementRemoteTimestamp(0) {} -void Member::pushCredentials( - const Context &ctx, const CallContext &cc, const SharedPtr &to, const NetworkConfig &nconf) +void Member::pushCredentials(const Context &ctx, const CallContext &cc, const SharedPtr &to, const NetworkConfig &nconf) { if (!nconf.com) // sanity check return; @@ -124,77 +117,51 @@ void Member::clean(const NetworkConfig &nconf) m_cleanCredImpl(nconf, m_remoteCoos); } -Member::AddCredentialResult Member::addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const MembershipCredential &com) +Member::AddCredentialResult Member::addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const MembershipCredential &com) { const int64_t newts = com.timestamp(); if (newts <= m_comRevocationThreshold) { - ctx.t->credentialRejected( - cc, 0xd9992121, com.networkId(), sourcePeerIdentity, com.id(), com.timestamp(), ZT_CREDENTIAL_TYPE_COM, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_REVOKED); + ctx.t->credentialRejected(cc, 0xd9992121, com.networkId(), sourcePeerIdentity, com.id(), com.timestamp(), ZT_CREDENTIAL_TYPE_COM, ZT_TRACE_CREDENTIAL_REJECTION_REASON_REVOKED); return ADD_REJECTED; } const int64_t oldts = m_com.timestamp(); if (newts < oldts) { - ctx.t->credentialRejected( - cc, 0xd9928192, com.networkId(), sourcePeerIdentity, com.id(), com.timestamp(), ZT_CREDENTIAL_TYPE_COM, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_OLDER_THAN_LATEST); + ctx.t->credentialRejected(cc, 0xd9928192, com.networkId(), sourcePeerIdentity, com.id(), com.timestamp(), ZT_CREDENTIAL_TYPE_COM, ZT_TRACE_CREDENTIAL_REJECTION_REASON_OLDER_THAN_LATEST); return ADD_REJECTED; } if ((newts == oldts) && (m_com == com)) return ADD_ACCEPTED_REDUNDANT; switch (com.verify(ctx, cc)) { - default: - ctx.t->credentialRejected( - cc, 0x0f198241, com.networkId(), sourcePeerIdentity, com.id(), com.timestamp(), ZT_CREDENTIAL_TYPE_COM, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID); - return Member::ADD_REJECTED; + default: ctx.t->credentialRejected(cc, 0x0f198241, com.networkId(), sourcePeerIdentity, com.id(), com.timestamp(), ZT_CREDENTIAL_TYPE_COM, ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID); return Member::ADD_REJECTED; case Credential::VERIFY_OK: m_com = com; return ADD_ACCEPTED_NEW; - case Credential::VERIFY_BAD_SIGNATURE: - ctx.t->credentialRejected( - cc, 0xbaf0aaaa, com.networkId(), sourcePeerIdentity, com.id(), com.timestamp(), ZT_CREDENTIAL_TYPE_COM, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_SIGNATURE_VERIFICATION_FAILED); - return ADD_REJECTED; + case Credential::VERIFY_BAD_SIGNATURE: ctx.t->credentialRejected(cc, 0xbaf0aaaa, com.networkId(), sourcePeerIdentity, com.id(), com.timestamp(), ZT_CREDENTIAL_TYPE_COM, ZT_TRACE_CREDENTIAL_REJECTION_REASON_SIGNATURE_VERIFICATION_FAILED); return ADD_REJECTED; case Credential::VERIFY_NEED_IDENTITY: return ADD_DEFERRED_FOR_WHOIS; } } // 3/5 of the credential types have identical addCredential() code -template -static ZT_INLINE Member::AddCredentialResult _addCredImpl( - Map &remoteCreds, const Map &revocations, const Context &ctx, const CallContext &cc, - const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const C &cred) +template static ZT_INLINE Member::AddCredentialResult _addCredImpl(Map &remoteCreds, const Map &revocations, const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const C &cred) { typename Map::const_iterator rc(remoteCreds.find(cred.id())); if (rc != remoteCreds.end()) { if (rc->second.revision() > cred.revision()) { - ctx.t->credentialRejected( - cc, 0x40000001, nconf.networkId, sourcePeerIdentity, cred.id(), cred.revision(), C::credentialType(), - ZT_TRACE_CREDENTIAL_REJECTION_REASON_OLDER_THAN_LATEST); + ctx.t->credentialRejected(cc, 0x40000001, nconf.networkId, sourcePeerIdentity, cred.id(), cred.revision(), C::credentialType(), ZT_TRACE_CREDENTIAL_REJECTION_REASON_OLDER_THAN_LATEST); return Member::ADD_REJECTED; } if (rc->second == cred) return Member::ADD_ACCEPTED_REDUNDANT; } - typename Map::const_iterator rt( - revocations.find(Member::credentialKey(C::credentialType(), cred.id()))); + typename Map::const_iterator rt(revocations.find(Member::credentialKey(C::credentialType(), cred.id()))); if ((rt != revocations.end()) && (rt->second >= cred.revision())) { - ctx.t->credentialRejected( - cc, 0x24248124, nconf.networkId, sourcePeerIdentity, cred.id(), cred.revision(), C::credentialType(), - ZT_TRACE_CREDENTIAL_REJECTION_REASON_REVOKED); + ctx.t->credentialRejected(cc, 0x24248124, nconf.networkId, sourcePeerIdentity, cred.id(), cred.revision(), C::credentialType(), ZT_TRACE_CREDENTIAL_REJECTION_REASON_REVOKED); return Member::ADD_REJECTED; } switch (cred.verify(ctx, cc)) { - default: - ctx.t->credentialRejected( - cc, 0x01feba012, nconf.networkId, sourcePeerIdentity, cred.id(), cred.revision(), C::credentialType(), - ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID); - return Member::ADD_REJECTED; + default: ctx.t->credentialRejected(cc, 0x01feba012, nconf.networkId, sourcePeerIdentity, cred.id(), cred.revision(), C::credentialType(), ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID); return Member::ADD_REJECTED; case 0: if (rc == remoteCreds.end()) remoteCreds[cred.id()] = cred; @@ -203,38 +170,17 @@ static ZT_INLINE Member::AddCredentialResult _addCredImpl( } } -Member::AddCredentialResult Member::addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const TagCredential &tag) -{ - return _addCredImpl(m_remoteTags, m_revocations, ctx, cc, sourcePeerIdentity, nconf, tag); -} +Member::AddCredentialResult Member::addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const TagCredential &tag) { return _addCredImpl(m_remoteTags, m_revocations, ctx, cc, sourcePeerIdentity, nconf, tag); } -Member::AddCredentialResult Member::addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const CapabilityCredential &cap) -{ - return _addCredImpl(m_remoteCaps, m_revocations, ctx, cc, sourcePeerIdentity, nconf, cap); -} +Member::AddCredentialResult Member::addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const CapabilityCredential &cap) { return _addCredImpl(m_remoteCaps, m_revocations, ctx, cc, sourcePeerIdentity, nconf, cap); } -Member::AddCredentialResult Member::addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const OwnershipCredential &coo) -{ - return _addCredImpl(m_remoteCoos, m_revocations, ctx, cc, sourcePeerIdentity, nconf, coo); -} +Member::AddCredentialResult Member::addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const OwnershipCredential &coo) { return _addCredImpl(m_remoteCoos, m_revocations, ctx, cc, sourcePeerIdentity, nconf, coo); } -Member::AddCredentialResult Member::addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const RevocationCredential &rev) +Member::AddCredentialResult Member::addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const RevocationCredential &rev) { int64_t *rt; switch (rev.verify(ctx, cc)) { - default: - ctx.t->credentialRejected( - cc, 0x938ff009, nconf.networkId, sourcePeerIdentity, rev.id(), 0, ZT_CREDENTIAL_TYPE_REVOCATION, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID); - return ADD_REJECTED; + default: ctx.t->credentialRejected(cc, 0x938ff009, nconf.networkId, sourcePeerIdentity, rev.id(), 0, ZT_CREDENTIAL_TYPE_REVOCATION, ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID); return ADD_REJECTED; case 0: { const ZT_CredentialType ct = rev.typeBeingRevoked(); switch (ct) { @@ -254,23 +200,13 @@ Member::AddCredentialResult Member::addCredential( return ADD_ACCEPTED_NEW; } return ADD_ACCEPTED_REDUNDANT; - default: - ctx.t->credentialRejected( - cc, 0x0bbbb1a4, nconf.networkId, sourcePeerIdentity, rev.id(), 0, ZT_CREDENTIAL_TYPE_REVOCATION, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID); - return ADD_REJECTED; + default: ctx.t->credentialRejected(cc, 0x0bbbb1a4, nconf.networkId, sourcePeerIdentity, rev.id(), 0, ZT_CREDENTIAL_TYPE_REVOCATION, ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID); return ADD_REJECTED; } } case 1: return ADD_DEFERRED_FOR_WHOIS; } } -bool Member::m_isUnspoofableAddress(const NetworkConfig &nconf, const InetAddress &ip) const noexcept -{ - return ( - ip.isV6() && nconf.ndpEmulation() - && ((ip == InetAddress::makeIpv66plane(nconf.networkId, m_com.issuedTo().address)) - || (ip == InetAddress::makeIpv6rfc4193(nconf.networkId, m_com.issuedTo().address)))); -} +bool Member::m_isUnspoofableAddress(const NetworkConfig &nconf, const InetAddress &ip) const noexcept { return (ip.isV6() && nconf.ndpEmulation() && ((ip == InetAddress::makeIpv66plane(nconf.networkId, m_com.issuedTo().address)) || (ip == InetAddress::makeIpv6rfc4193(nconf.networkId, m_com.issuedTo().address)))); } } // namespace ZeroTier diff --git a/core/Member.hpp b/core/Member.hpp index af693a8f8..8045bae8e 100644 --- a/core/Member.hpp +++ b/core/Member.hpp @@ -48,8 +48,7 @@ class Member { * @param to Peer identity * @param nconf My network config */ - void - pushCredentials(const Context &ctx, const CallContext &cc, const SharedPtr &to, const NetworkConfig &nconf); + void pushCredentials(const Context &ctx, const CallContext &cc, const SharedPtr &to, const NetworkConfig &nconf); /** * @return Time we last pushed credentials to this member @@ -66,9 +65,7 @@ class Member { ZT_INLINE const TagCredential *getTag(const NetworkConfig &nconf, const uint32_t id) const noexcept { Map::const_iterator t(m_remoteTags.find(id)); - return ( - ((t != m_remoteTags.end()) && (m_isCredentialTimestampValid(nconf, t->second))) ? &(t->second) - : (TagCredential *)0); + return (((t != m_remoteTags.end()) && (m_isCredentialTimestampValid(nconf, t->second))) ? &(t->second) : (TagCredential *)0); } /** @@ -81,10 +78,7 @@ class Member { /** * Generates a key for internal use in indexing credentials by type and credential ID */ - static ZT_INLINE uint64_t credentialKey(const ZT_CredentialType &t, const uint32_t i) noexcept - { - return (((uint64_t)t << 32U) | (uint64_t)i); - } + static ZT_INLINE uint64_t credentialKey(const ZT_CredentialType &t, const uint32_t i) noexcept { return (((uint64_t)t << 32U) | (uint64_t)i); } /** * Check whether the peer represented by this Membership owns a given address @@ -112,8 +106,7 @@ class Member { */ ZT_INLINE bool certificateOfMembershipAgress(const MembershipCredential &localCom, const Identity &remoteIdentity) { - if ((m_comAgreementLocalTimestamp == localCom.timestamp()) - && (m_comAgreementRemoteTimestamp == m_com.timestamp())) + if ((m_comAgreementLocalTimestamp == localCom.timestamp()) && (m_comAgreementRemoteTimestamp == m_com.timestamp())) return true; if (m_com.agreesWith(localCom)) { // SECURITY: newer network controllers embed the full fingerprint into the COM. If we are @@ -143,21 +136,11 @@ class Member { return false; } - AddCredentialResult addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const MembershipCredential &com); - AddCredentialResult addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const TagCredential &tag); - AddCredentialResult addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const CapabilityCredential &cap); - AddCredentialResult addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const OwnershipCredential &coo); - AddCredentialResult addCredential( - const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, - const RevocationCredential &rev); + AddCredentialResult addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const MembershipCredential &com); + AddCredentialResult addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const TagCredential &tag); + AddCredentialResult addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const CapabilityCredential &cap); + AddCredentialResult addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const OwnershipCredential &coo); + AddCredentialResult addCredential(const Context &ctx, const CallContext &cc, const Identity &sourcePeerIdentity, const NetworkConfig &nconf, const RevocationCredential &rev); private: // This returns true if a resource is an IPv6 NDP-emulated address. These embed the ZT @@ -169,14 +152,11 @@ class Member { // This compares the remote credential's timestamp to the timestamp in our network config // plus or minus the permitted maximum timestamp delta. - template - ZT_INLINE bool m_isCredentialTimestampValid(const NetworkConfig &nconf, const C &remoteCredential) const noexcept + template ZT_INLINE bool m_isCredentialTimestampValid(const NetworkConfig &nconf, const C &remoteCredential) const noexcept { const int64_t ts = remoteCredential.revision(); - if (((ts >= nconf.timestamp) ? (ts - nconf.timestamp) : (nconf.timestamp - ts)) - <= nconf.credentialTimeMaxDelta) { - Map::const_iterator threshold( - m_revocations.find(credentialKey(C::credentialType(), remoteCredential.id()))); + if (((ts >= nconf.timestamp) ? (ts - nconf.timestamp) : (nconf.timestamp - ts)) <= nconf.credentialTimeMaxDelta) { + Map::const_iterator threshold(m_revocations.find(credentialKey(C::credentialType(), remoteCredential.id()))); return ((threshold == m_revocations.end()) || (ts > threshold->second)); } return false; @@ -215,12 +195,7 @@ class Member { public: class CapabilityIterator { public: - ZT_INLINE CapabilityIterator(Member &m, const NetworkConfig &nconf) noexcept - : m_hti(m.m_remoteCaps.begin()) - , m_parent(m) - , m_nconf(nconf) - { - } + ZT_INLINE CapabilityIterator(Member &m, const NetworkConfig &nconf) noexcept : m_hti(m.m_remoteCaps.begin()), m_parent(m), m_nconf(nconf) {} ZT_INLINE CapabilityCredential *next() noexcept { diff --git a/core/MembershipCredential.cpp b/core/MembershipCredential.cpp index 7d5f7fcbb..f14925fed 100644 --- a/core/MembershipCredential.cpp +++ b/core/MembershipCredential.cpp @@ -42,14 +42,10 @@ bool MembershipCredential::agreesWith(const MembershipCredential &other) const n } // us <> them - for (FCV::const_iterator i( - m_additionalQualifiers.begin()); - i != m_additionalQualifiers.end(); ++i) { + for (FCV::const_iterator i(m_additionalQualifiers.begin()); i != m_additionalQualifiers.end(); ++i) { if (i->delta != 0xffffffffffffffffULL) { const uint64_t *v2 = nullptr; - for (FCV::const_iterator j( - other.m_additionalQualifiers.begin()); - j != other.m_additionalQualifiers.end(); ++i) { + for (FCV::const_iterator j(other.m_additionalQualifiers.begin()); j != other.m_additionalQualifiers.end(); ++i) { if (j->id == i->id) { v2 = &(j->value); break; @@ -69,14 +65,10 @@ bool MembershipCredential::agreesWith(const MembershipCredential &other) const n } // them <> us (we need a second pass in case they have qualifiers we don't or vice versa) - for (FCV::const_iterator i( - other.m_additionalQualifiers.begin()); - i != other.m_additionalQualifiers.end(); ++i) { + for (FCV::const_iterator i(other.m_additionalQualifiers.begin()); i != other.m_additionalQualifiers.end(); ++i) { if (i->delta != 0xffffffffffffffffULL) { const uint64_t *v2 = nullptr; - for (FCV::const_iterator j( - m_additionalQualifiers.begin()); - j != m_additionalQualifiers.end(); ++i) { + for (FCV::const_iterator j(m_additionalQualifiers.begin()); j != m_additionalQualifiers.end(); ++i) { if (j->id == i->id) { v2 = &(j->value); break; @@ -138,8 +130,7 @@ int MembershipCredential::marshal(uint8_t data[ZT_MEMBERSHIP_CREDENTIAL_MARSHAL_ Utils::storeBigEndian(data + 1, 9); for (int k = 0; k < 6; ++k) { Utils::storeBigEndian(data + p, (uint64_t)k + 3); - Utils::storeMachineEndian( - data + p + 8, Utils::loadMachineEndian(m_issuedTo.hash + (k * 8))); + Utils::storeMachineEndian(data + p + 8, Utils::loadMachineEndian(m_issuedTo.hash + (k * 8))); Utils::storeMachineEndian(data + p + 16, 0xffffffffffffffffULL); p += 24; } @@ -282,9 +273,7 @@ unsigned int MembershipCredential::m_fillSigningBuf(uint64_t *buf) const noexcep buf[p++] = informational; } - for (FCV::const_iterator i( - m_additionalQualifiers.begin()); - i != m_additionalQualifiers.end(); ++i) { // NOLINT(modernize-loop-convert) + for (FCV::const_iterator i(m_additionalQualifiers.begin()); i != m_additionalQualifiers.end(); ++i) { // NOLINT(modernize-loop-convert) buf[p++] = Utils::hton(i->id); buf[p++] = Utils::hton(i->value); buf[p++] = Utils::hton(i->delta); diff --git a/core/MembershipCredential.hpp b/core/MembershipCredential.hpp index 1ed082344..4f7fd7962 100644 --- a/core/MembershipCredential.hpp +++ b/core/MembershipCredential.hpp @@ -30,8 +30,7 @@ #define ZT_MEMBERSHIP_CREDENTIAL_MAX_ADDITIONAL_QUALIFIERS 8 // version + qualifier count + three required qualifiers + additional qualifiers + -#define ZT_MEMBERSHIP_CREDENTIAL_MARSHAL_SIZE_MAX \ - (1 + 2 + (3 * 3 * 8) + (ZT_MEMBERSHIP_CREDENTIAL_MAX_ADDITIONAL_QUALIFIERS * 3 * 8) + 144 + 5 + 2 + 96) +#define ZT_MEMBERSHIP_CREDENTIAL_MARSHAL_SIZE_MAX (1 + 2 + (3 * 3 * 8) + (ZT_MEMBERSHIP_CREDENTIAL_MAX_ADDITIONAL_QUALIFIERS * 3 * 8) + 144 + 5 + 2 + 96) namespace ZeroTier { @@ -116,8 +115,7 @@ class MembershipCredential : public Credential { * @param nwid Network ID * @param issuedTo Certificate recipient */ - MembershipCredential( - int64_t timestamp, int64_t timestampMaxDelta, uint64_t nwid, const Identity &issuedTo) noexcept; + MembershipCredential(int64_t timestamp, int64_t timestampMaxDelta, uint64_t nwid, const Identity &issuedTo) noexcept; /** * @return True if there's something here @@ -180,10 +178,7 @@ class MembershipCredential : public Credential { * @param RR Runtime environment for looking up peers * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call */ - ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const - { - return s_verify(ctx, cc, *this); - } + ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const { return s_verify(ctx, cc, *this); } static constexpr int marshalSizeMax() noexcept { return ZT_MEMBERSHIP_CREDENTIAL_MARSHAL_SIZE_MAX; } @@ -196,12 +191,7 @@ class MembershipCredential : public Credential { struct p_Qualifier { ZT_INLINE p_Qualifier() noexcept : id(0), value(0), delta(0) {} - ZT_INLINE p_Qualifier(const uint64_t id_, const uint64_t value_, const uint64_t delta_) noexcept - : id(id_) - , value(value_) - , delta(delta_) - { - } + ZT_INLINE p_Qualifier(const uint64_t id_, const uint64_t value_, const uint64_t delta_) noexcept : id(id_), value(value_), delta(delta_) {} uint64_t id; uint64_t value; diff --git a/core/Meter.hpp b/core/Meter.hpp index 83c5452bd..1cde94441 100644 --- a/core/Meter.hpp +++ b/core/Meter.hpp @@ -56,8 +56,7 @@ template class Meter { // to it. const unsigned long bucket = ((unsigned long)(ts / TUNIT)) % LSIZE; if (unlikely(m_bucket.exchange(bucket, std::memory_order_relaxed) != bucket)) { - m_totalExclCounts.fetch_add( - m_counts[bucket].exchange(count, std::memory_order_relaxed), std::memory_order_relaxed); + m_totalExclCounts.fetch_add(m_counts[bucket].exchange(count, std::memory_order_relaxed), std::memory_order_relaxed); } else { m_counts[bucket].fetch_add(count, std::memory_order_relaxed); diff --git a/core/MulticastGroup.hpp b/core/MulticastGroup.hpp index e3672a722..28d0eb6b2 100644 --- a/core/MulticastGroup.hpp +++ b/core/MulticastGroup.hpp @@ -63,8 +63,7 @@ class MulticastGroup : public TriviallyCopyable { // multicast address directly from the IP address, and it gives us // 24 bits of uniqueness. Collisions aren't likely to be common enough // to care about. - const uint8_t *const a = - reinterpret_cast(ip.rawIpData()); // NOLINT(hicpp-use-auto,modernize-use-auto) + const uint8_t *const a = reinterpret_cast(ip.rawIpData()); // NOLINT(hicpp-use-auto,modernize-use-auto) return MulticastGroup(MAC(0x33, 0x33, 0xff, a[13], a[14], a[15]), 0); } return MulticastGroup(); // NOLINT(modernize-return-braced-init-list) @@ -81,15 +80,9 @@ class MulticastGroup : public TriviallyCopyable { */ ZT_INLINE uint32_t adi() const { return m_adi; } - ZT_INLINE bool operator==(const MulticastGroup &g) const noexcept - { - return ((m_mac == g.m_mac) && (m_adi == g.m_adi)); - } + ZT_INLINE bool operator==(const MulticastGroup &g) const noexcept { return ((m_mac == g.m_mac) && (m_adi == g.m_adi)); } - ZT_INLINE bool operator!=(const MulticastGroup &g) const noexcept - { - return ((m_mac != g.m_mac) || (m_adi != g.m_adi)); - } + ZT_INLINE bool operator!=(const MulticastGroup &g) const noexcept { return ((m_mac != g.m_mac) || (m_adi != g.m_adi)); } ZT_INLINE bool operator<(const MulticastGroup &g) const noexcept { diff --git a/core/Mutex.hpp b/core/Mutex.hpp index 338fe59a4..d94b4fcbc 100644 --- a/core/Mutex.hpp +++ b/core/Mutex.hpp @@ -128,10 +128,7 @@ class RWMutex { class RMaybeWLock { public: explicit ZT_INLINE RMaybeWLock(RWMutex &m) noexcept : _m(&m), _w(false) { m.rlock(); } - explicit ZT_INLINE RMaybeWLock(const RWMutex &m) noexcept : _m(const_cast(&m)), _w(false) - { - _m->rlock(); - } + explicit ZT_INLINE RMaybeWLock(const RWMutex &m) noexcept : _m(const_cast(&m)), _w(false) { _m->rlock(); } ZT_INLINE void writing() noexcept { if (!_w) { diff --git a/core/Network.cpp b/core/Network.cpp index f628d6305..7f38332b1 100644 --- a/core/Network.cpp +++ b/core/Network.cpp @@ -60,21 +60,14 @@ bool _ipv6GetPayload(const uint8_t *frameData, unsigned int frameLen, unsigned i return false; // overflow == invalid } -enum _doZtFilterResult { - DOZTFILTER_NO_MATCH, - DOZTFILTER_DROP, - DOZTFILTER_REDIRECT, - DOZTFILTER_ACCEPT, - DOZTFILTER_SUPER_ACCEPT -}; +enum _doZtFilterResult { DOZTFILTER_NO_MATCH, DOZTFILTER_DROP, DOZTFILTER_REDIRECT, DOZTFILTER_ACCEPT, DOZTFILTER_SUPER_ACCEPT }; ZT_INLINE _doZtFilterResult _doZtFilter( const Context &ctx, Trace::RuleResultLog &rrl, const NetworkConfig &nconf, const Member *membership, // can be NULL const bool inbound, const Address &ztSource, Address &ztDest, // MUTABLE -- is changed on REDIRECT actions - const MAC &macSource, const MAC &macDest, const uint8_t *const frameData, const unsigned int frameLen, - const unsigned int etherType, const unsigned int vlanId, + const MAC &macSource, const MAC &macDest, const uint8_t *const frameData, const unsigned int frameLen, const unsigned int etherType, const unsigned int vlanId, const ZT_VirtualNetworkRule *rules, // cannot be NULL const unsigned int ruleCount, Address &cc, // MUTABLE -- set to TEE destination if TEE action is taken or left alone otherwise @@ -99,9 +92,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( if (thisSetMatches) { switch (rt) { case ZT_NETWORK_RULE_ACTION_PRIORITY: - qosBucket = (rules[rn].v.qosBucket >= 0 && rules[rn].v.qosBucket <= 8) - ? rules[rn].v.qosBucket - : 4; // 4 = default bucket (no priority) + qosBucket = (rules[rn].v.qosBucket >= 0 && rules[rn].v.qosBucket <= 8) ? rules[rn].v.qosBucket : 4; // 4 = default bucket (no priority) return DOZTFILTER_ACCEPT; case ZT_NETWORK_RULE_ACTION_DROP: return DOZTFILTER_DROP; @@ -133,11 +124,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( } else { cc = fwdAddr; - ccLength = (rules[rn].v.fwd.length != 0) - ? ((frameLen < (unsigned int)rules[rn].v.fwd.length) - ? frameLen - : (unsigned int)rules[rn].v.fwd.length) - : frameLen; + ccLength = (rules[rn].v.fwd.length != 0) ? ((frameLen < (unsigned int)rules[rn].v.fwd.length) ? frameLen : (unsigned int)rules[rn].v.fwd.length) : frameLen; ccWatch = (rt == ZT_NETWORK_RULE_ACTION_WATCH); } } @@ -180,19 +167,12 @@ ZT_INLINE _doZtFilterResult _doZtFilter( } // If this was not an ACTION evaluate next MATCH and update thisSetMatches with (AND [result]) - uint8_t thisRuleMatches = 0; - uint64_t ownershipVerificationMask = - 1; // this magic value means it hasn't been computed yet -- this is done lazily the first time it's needed + uint8_t thisRuleMatches = 0; + uint64_t ownershipVerificationMask = 1; // this magic value means it hasn't been computed yet -- this is done lazily the first time it's needed switch (rt) { - case ZT_NETWORK_RULE_MATCH_SOURCE_ZEROTIER_ADDRESS: - thisRuleMatches = (uint8_t)(rules[rn].v.zt == ztSource.toInt()); - break; - case ZT_NETWORK_RULE_MATCH_DEST_ZEROTIER_ADDRESS: - thisRuleMatches = (uint8_t)(rules[rn].v.zt == ztDest.toInt()); - break; - case ZT_NETWORK_RULE_MATCH_VLAN_ID: - thisRuleMatches = (uint8_t)(rules[rn].v.vlanId == (uint16_t)vlanId); - break; + case ZT_NETWORK_RULE_MATCH_SOURCE_ZEROTIER_ADDRESS: thisRuleMatches = (uint8_t)(rules[rn].v.zt == ztSource.toInt()); break; + case ZT_NETWORK_RULE_MATCH_DEST_ZEROTIER_ADDRESS: thisRuleMatches = (uint8_t)(rules[rn].v.zt == ztDest.toInt()); break; + case ZT_NETWORK_RULE_MATCH_VLAN_ID: thisRuleMatches = (uint8_t)(rules[rn].v.vlanId == (uint16_t)vlanId); break; case ZT_NETWORK_RULE_MATCH_VLAN_PCP: // NOT SUPPORTED YET thisRuleMatches = (uint8_t)(rules[rn].v.vlanPcp == 0); @@ -201,15 +181,11 @@ ZT_INLINE _doZtFilterResult _doZtFilter( // NOT SUPPORTED YET thisRuleMatches = (uint8_t)(rules[rn].v.vlanDei == 0); break; - case ZT_NETWORK_RULE_MATCH_MAC_SOURCE: - thisRuleMatches = (uint8_t)(MAC(rules[rn].v.mac) == macSource); - break; + case ZT_NETWORK_RULE_MATCH_MAC_SOURCE: thisRuleMatches = (uint8_t)(MAC(rules[rn].v.mac) == macSource); break; case ZT_NETWORK_RULE_MATCH_MAC_DEST: thisRuleMatches = (uint8_t)(MAC(rules[rn].v.mac) == macDest); break; case ZT_NETWORK_RULE_MATCH_IPV4_SOURCE: if ((etherType == ZT_ETHERTYPE_IPV4) && (frameLen >= 20)) { - thisRuleMatches = - (uint8_t)(InetAddress((const void *)&(rules[rn].v.ipv4.ip), 4, rules[rn].v.ipv4.mask) - .containsAddress(InetAddress((const void *)(frameData + 12), 4, 0))); + thisRuleMatches = (uint8_t)(InetAddress((const void *)&(rules[rn].v.ipv4.ip), 4, rules[rn].v.ipv4.mask).containsAddress(InetAddress((const void *)(frameData + 12), 4, 0))); } else { thisRuleMatches = 0; @@ -217,9 +193,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( break; case ZT_NETWORK_RULE_MATCH_IPV4_DEST: if ((etherType == ZT_ETHERTYPE_IPV4) && (frameLen >= 20)) { - thisRuleMatches = - (uint8_t)(InetAddress((const void *)&(rules[rn].v.ipv4.ip), 4, rules[rn].v.ipv4.mask) - .containsAddress(InetAddress((const void *)(frameData + 16), 4, 0))); + thisRuleMatches = (uint8_t)(InetAddress((const void *)&(rules[rn].v.ipv4.ip), 4, rules[rn].v.ipv4.mask).containsAddress(InetAddress((const void *)(frameData + 16), 4, 0))); } else { thisRuleMatches = 0; @@ -227,9 +201,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( break; case ZT_NETWORK_RULE_MATCH_IPV6_SOURCE: if ((etherType == ZT_ETHERTYPE_IPV6) && (frameLen >= 40)) { - thisRuleMatches = - (uint8_t)(InetAddress((const void *)rules[rn].v.ipv6.ip, 16, rules[rn].v.ipv6.mask) - .containsAddress(InetAddress((const void *)(frameData + 8), 16, 0))); + thisRuleMatches = (uint8_t)(InetAddress((const void *)rules[rn].v.ipv6.ip, 16, rules[rn].v.ipv6.mask).containsAddress(InetAddress((const void *)(frameData + 8), 16, 0))); } else { thisRuleMatches = 0; @@ -237,9 +209,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( break; case ZT_NETWORK_RULE_MATCH_IPV6_DEST: if ((etherType == ZT_ETHERTYPE_IPV6) && (frameLen >= 40)) { - thisRuleMatches = - (uint8_t)(InetAddress((const void *)rules[rn].v.ipv6.ip, 16, rules[rn].v.ipv6.mask) - .containsAddress(InetAddress((const void *)(frameData + 24), 16, 0))); + thisRuleMatches = (uint8_t)(InetAddress((const void *)rules[rn].v.ipv6.ip, 16, rules[rn].v.ipv6.mask).containsAddress(InetAddress((const void *)(frameData + 24), 16, 0))); } else { thisRuleMatches = 0; @@ -248,14 +218,11 @@ ZT_INLINE _doZtFilterResult _doZtFilter( case ZT_NETWORK_RULE_MATCH_IP_TOS: if ((etherType == ZT_ETHERTYPE_IPV4) && (frameLen >= 20)) { const uint8_t tosMasked = frameData[1] & rules[rn].v.ipTos.mask; - thisRuleMatches = - (uint8_t)((tosMasked >= rules[rn].v.ipTos.value[0]) && (tosMasked <= rules[rn].v.ipTos.value[1])); + thisRuleMatches = (uint8_t)((tosMasked >= rules[rn].v.ipTos.value[0]) && (tosMasked <= rules[rn].v.ipTos.value[1])); } else if ((etherType == ZT_ETHERTYPE_IPV6) && (frameLen >= 40)) { - const uint8_t tosMasked = - (((frameData[0] << 4U) & 0xf0U) | ((frameData[1] >> 4U) & 0x0fU)) & rules[rn].v.ipTos.mask; - thisRuleMatches = - (uint8_t)((tosMasked >= rules[rn].v.ipTos.value[0]) && (tosMasked <= rules[rn].v.ipTos.value[1])); + const uint8_t tosMasked = (((frameData[0] << 4U) & 0xf0U) | ((frameData[1] >> 4U) & 0x0fU)) & rules[rn].v.ipTos.mask; + thisRuleMatches = (uint8_t)((tosMasked >= rules[rn].v.ipTos.value[0]) && (tosMasked <= rules[rn].v.ipTos.value[1])); } else { thisRuleMatches = 0; @@ -278,9 +245,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( thisRuleMatches = 0; } break; - case ZT_NETWORK_RULE_MATCH_ETHERTYPE: - thisRuleMatches = (uint8_t)(rules[rn].v.etherType == (uint16_t)etherType); - break; + case ZT_NETWORK_RULE_MATCH_ETHERTYPE: thisRuleMatches = (uint8_t)(rules[rn].v.etherType == (uint16_t)etherType); break; case ZT_NETWORK_RULE_MATCH_ICMP: if ((etherType == ZT_ETHERTYPE_IPV4) && (frameLen >= 20)) { if (frameData[9] == 0x01) { // IP protocol == ICMP @@ -346,17 +311,14 @@ ZT_INLINE _doZtFilterResult _doZtFilter( case 0x84: // SCTP case 0x88: // UDPLite if (frameLen > (headerLen + 4)) { - unsigned int pos = - headerLen + ((rt == ZT_NETWORK_RULE_MATCH_IP_DEST_PORT_RANGE) ? 2 : 0); - p = (int)(frameData[pos++] << 8U); + unsigned int pos = headerLen + ((rt == ZT_NETWORK_RULE_MATCH_IP_DEST_PORT_RANGE) ? 2 : 0); + p = (int)(frameData[pos++] << 8U); p |= (int)frameData[pos]; } break; } - thisRuleMatches = - (p >= 0) ? (uint8_t)((p >= (int)rules[rn].v.port[0]) && (p <= (int)rules[rn].v.port[1])) - : (uint8_t)0; + thisRuleMatches = (p >= 0) ? (uint8_t)((p >= (int)rules[rn].v.port[0]) && (p <= (int)rules[rn].v.port[1])) : (uint8_t)0; } else if (etherType == ZT_ETHERTYPE_IPV6) { unsigned int pos = 0, proto = 0; @@ -376,9 +338,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( } break; } - thisRuleMatches = - (p > 0) ? (uint8_t)((p >= (int)rules[rn].v.port[0]) && (p <= (int)rules[rn].v.port[1])) - : (uint8_t)0; + thisRuleMatches = (p > 0) ? (uint8_t)((p >= (int)rules[rn].v.port[0]) && (p <= (int)rules[rn].v.port[1])) : (uint8_t)0; } else { thisRuleMatches = 0; @@ -403,8 +363,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( else if ((etherType == ZT_ETHERTYPE_IPV6) && (frameLen >= 40)) { // IPv6 NDP requires special handling, since the src and dest IPs in the packet are empty or // link-local. - if ((frameLen >= (40 + 8 + 16)) && (frameData[6] == 0x3a) - && ((frameData[40] == 0x87) || (frameData[40] == 0x88))) { + if ((frameLen >= (40 + 8 + 16)) && (frameData[6] == 0x3a) && ((frameData[40] == 0x87) || (frameData[40] == 0x88))) { if (frameData[40] == 0x87) { // Neighbor solicitations contain no reliable source address, so we implement a small // hack by considering them authenticated. Otherwise you would pretty much have to do @@ -458,24 +417,16 @@ ZT_INLINE _doZtFilterResult _doZtFilter( } thisRuleMatches = (uint8_t)((cf & rules[rn].v.characteristics) != 0); } break; - case ZT_NETWORK_RULE_MATCH_FRAME_SIZE_RANGE: - thisRuleMatches = (uint8_t)((frameLen >= (unsigned int)rules[rn].v.frameSize[0]) && (frameLen <= (unsigned int)rules[rn].v.frameSize[1])); - break; - case ZT_NETWORK_RULE_MATCH_RANDOM: - thisRuleMatches = - (uint8_t)((uint32_t)(Utils::random() & 0xffffffffULL) <= rules[rn].v.randomProbability); - break; + case ZT_NETWORK_RULE_MATCH_FRAME_SIZE_RANGE: thisRuleMatches = (uint8_t)((frameLen >= (unsigned int)rules[rn].v.frameSize[0]) && (frameLen <= (unsigned int)rules[rn].v.frameSize[1])); break; + case ZT_NETWORK_RULE_MATCH_RANDOM: thisRuleMatches = (uint8_t)((uint32_t)(Utils::random() & 0xffffffffULL) <= rules[rn].v.randomProbability); break; case ZT_NETWORK_RULE_MATCH_TAGS_DIFFERENCE: case ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_AND: case ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_OR: case ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_XOR: case ZT_NETWORK_RULE_MATCH_TAGS_EQUAL: { - const TagCredential *const localTag = std::lower_bound( - &(nconf.tags[0]), &(nconf.tags[nconf.tagCount]), rules[rn].v.tag.id, - TagCredential::IdComparePredicate()); + const TagCredential *const localTag = std::lower_bound(&(nconf.tags[0]), &(nconf.tags[nconf.tagCount]), rules[rn].v.tag.id, TagCredential::IdComparePredicate()); if ((localTag != &(nconf.tags[nconf.tagCount])) && (localTag->id() == rules[rn].v.tag.id)) { - const TagCredential *const remoteTag = - ((membership) ? membership->getTag(nconf, rules[rn].v.tag.id) : (const TagCredential *)0); + const TagCredential *const remoteTag = ((membership) ? membership->getTag(nconf, rules[rn].v.tag.id) : (const TagCredential *)0); if (remoteTag) { const uint32_t ltv = localTag->value(); const uint32_t rtv = remoteTag->value(); @@ -493,8 +444,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( thisRuleMatches = (uint8_t)((ltv ^ rtv) == rules[rn].v.tag.value); } else if (rt == ZT_NETWORK_RULE_MATCH_TAGS_EQUAL) { - thisRuleMatches = - (uint8_t)((ltv == rules[rn].v.tag.value) && (rtv == rules[rn].v.tag.value)); + thisRuleMatches = (uint8_t)((ltv == rules[rn].v.tag.value) && (rtv == rules[rn].v.tag.value)); } else { // sanity check, can't really happen thisRuleMatches = 0; @@ -523,11 +473,8 @@ ZT_INLINE _doZtFilterResult _doZtFilter( if (superAccept) { thisRuleMatches = 1; } - else if ( - ((rt == ZT_NETWORK_RULE_MATCH_TAG_SENDER) && (inbound)) - || ((rt == ZT_NETWORK_RULE_MATCH_TAG_RECEIVER) && (!inbound))) { - const TagCredential *const remoteTag = - ((membership) ? membership->getTag(nconf, rules[rn].v.tag.id) : (const TagCredential *)0); + else if (((rt == ZT_NETWORK_RULE_MATCH_TAG_SENDER) && (inbound)) || ((rt == ZT_NETWORK_RULE_MATCH_TAG_RECEIVER) && (!inbound))) { + const TagCredential *const remoteTag = ((membership) ? membership->getTag(nconf, rules[rn].v.tag.id) : (const TagCredential *)0); if (remoteTag) { thisRuleMatches = (uint8_t)(remoteTag->value() == rules[rn].v.tag.value); } @@ -543,9 +490,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( } } else { // sender and outbound or receiver and inbound - const TagCredential *const localTag = std::lower_bound( - &(nconf.tags[0]), &(nconf.tags[nconf.tagCount]), rules[rn].v.tag.id, - TagCredential::IdComparePredicate()); + const TagCredential *const localTag = std::lower_bound(&(nconf.tags[0]), &(nconf.tags[nconf.tagCount]), rules[rn].v.tag.id, TagCredential::IdComparePredicate()); if ((localTag != &(nconf.tags[nconf.tagCount])) && (localTag->id() == rules[rn].v.tag.id)) { thisRuleMatches = (uint8_t)(localTag->value() == rules[rn].v.tag.value); } @@ -587,10 +532,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( // The result of an unsupported MATCH is configurable at the network // level via a flag. - default: - thisRuleMatches = - (uint8_t)((nconf.flags & ZT_NETWORKCONFIG_FLAG_RULES_RESULT_OF_UNSUPPORTED_MATCH) != 0); - break; + default: thisRuleMatches = (uint8_t)((nconf.flags & ZT_NETWORKCONFIG_FLAG_RULES_RESULT_OF_UNSUPPORTED_MATCH) != 0); break; } rrl.log(rn, thisRuleMatches, thisSetMatches); @@ -608,17 +550,7 @@ ZT_INLINE _doZtFilterResult _doZtFilter( const ZeroTier::MulticastGroup Network::BROADCAST(ZeroTier::MAC(0xffffffffffffULL), 0); -Network::Network( - const Context &ctx, const CallContext &cc, uint64_t nwid, const Fingerprint &controllerFingerprint, void *uptr, - const NetworkConfig *nconf) - : m_ctx(ctx) - , m_uPtr(uptr) - , m_id(nwid) - , m_mac(ctx.identity.address(), nwid) - , m_portInitialized(false) - , m_destroyed(false) - , m_lastConfigUpdate(0) - , _netconfFailure(NETCONF_FAILURE_NONE) +Network::Network(const Context &ctx, const CallContext &cc, uint64_t nwid, const Fingerprint &controllerFingerprint, void *uptr, const NetworkConfig *nconf) : m_ctx(ctx), m_uPtr(uptr), m_id(nwid), m_mac(ctx.identity.address(), nwid), m_portInitialized(false), m_destroyed(false), m_lastConfigUpdate(0), _netconfFailure(NETCONF_FAILURE_NONE) { if (controllerFingerprint) m_controllerFingerprint = controllerFingerprint; @@ -662,9 +594,7 @@ Network::Network( if (!m_portInitialized) { ZT_VirtualNetworkConfig ctmp; m_externalConfig(&ctmp); - m_ctx.cb.virtualNetworkConfigFunction( - reinterpret_cast(m_ctx.node), m_ctx.uPtr, cc.tPtr, m_id, &m_uPtr, - ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP, &ctmp); + m_ctx.cb.virtualNetworkConfigFunction(reinterpret_cast(m_ctx.node), m_ctx.uPtr, cc.tPtr, m_id, &m_uPtr, ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP, &ctmp); m_portInitialized = true; } } @@ -685,16 +615,11 @@ Network::~Network() // *)0,_id,&_uPtr,ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY,&ctmp); } else { - m_ctx.cb.virtualNetworkConfigFunction( - reinterpret_cast(m_ctx.node), m_ctx.uPtr, nullptr, m_id, &m_uPtr, - ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN, &ctmp); + m_ctx.cb.virtualNetworkConfigFunction(reinterpret_cast(m_ctx.node), m_ctx.uPtr, nullptr, m_id, &m_uPtr, ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN, &ctmp); } } -bool Network::filterOutgoingPacket( - const CallContext &cc, const bool noTee, const Address &ztSource, const Address &ztDest, const MAC &macSource, - const MAC &macDest, const uint8_t *frameData, const unsigned int frameLen, const unsigned int etherType, - const unsigned int vlanId, uint8_t &qosBucket) +bool Network::filterOutgoingPacket(const CallContext &cc, const bool noTee, const Address &ztSource, const Address &ztDest, const MAC &macSource, const MAC &macDest, const uint8_t *frameData, const unsigned int frameLen, const unsigned int etherType, const unsigned int vlanId, uint8_t &qosBucket) { Trace::RuleResultLog rrl, crrl; Address ztFinalDest(ztDest); @@ -716,19 +641,14 @@ bool Network::filterOutgoingPacket( membership = nullptr; } - switch (_doZtFilter( - m_ctx, rrl, m_config, membership, false, ztSource, ztFinalDest, macSource, macDest, frameData, frameLen, - etherType, vlanId, m_config.rules, m_config.ruleCount, ccNodeAddress, ccLength, ccWatch, qosBucket)) { + switch (_doZtFilter(m_ctx, rrl, m_config, membership, false, ztSource, ztFinalDest, macSource, macDest, frameData, frameLen, etherType, vlanId, m_config.rules, m_config.ruleCount, ccNodeAddress, ccLength, ccWatch, qosBucket)) { case DOZTFILTER_NO_MATCH: { for (unsigned int c = 0; c < m_config.capabilityCount; ++c) { ztFinalDest = ztDest; // sanity check, shouldn't be possible if there was no match Address cc2; unsigned int ccLength2 = 0; bool ccWatch2 = false; - switch (_doZtFilter( - m_ctx, crrl, m_config, membership, false, ztSource, ztFinalDest, macSource, macDest, frameData, - frameLen, etherType, vlanId, m_config.capabilities[c].rules(), m_config.capabilities[c].ruleCount(), - cc2, ccLength2, ccWatch2, qosBucket)) { + switch (_doZtFilter(m_ctx, crrl, m_config, membership, false, ztSource, ztFinalDest, macSource, macDest, frameData, frameLen, etherType, vlanId, m_config.capabilities[c].rules(), m_config.capabilities[c].ruleCount(), cc2, ccLength2, ccWatch2, qosBucket)) { case DOZTFILTER_NO_MATCH: case DOZTFILTER_DROP: // explicit DROP in a capability just terminates its evaluation and is an // anti-pattern @@ -763,11 +683,7 @@ bool Network::filterOutgoingPacket( } } break; - case DOZTFILTER_DROP: - m_ctx.t->networkFilter( - cc, 0xadea5a2a, m_id, rrl.l, nullptr, 0, 0, ztSource, ztDest, macSource, macDest, (uint16_t)frameLen, - frameData, (uint16_t)etherType, (uint16_t)vlanId, noTee, false, 0); - return false; + case DOZTFILTER_DROP: m_ctx.t->networkFilter(cc, 0xadea5a2a, m_id, rrl.l, nullptr, 0, 0, ztSource, ztDest, macSource, macDest, (uint16_t)frameLen, frameData, (uint16_t)etherType, (uint16_t)vlanId, noTee, false, 0); return false; case DOZTFILTER_REDIRECT: // interpreted as ACCEPT but ztFinalDest will have been changed in _doZtFilter() case DOZTFILTER_ACCEPT: accept = 1; break; @@ -812,23 +728,16 @@ bool Network::filterOutgoingPacket( if (localCapabilityIndex >= 0) { const CapabilityCredential &cap = m_config.capabilities[localCapabilityIndex]; - m_ctx.t->networkFilter( - cc, 0x56ff1a93, m_id, rrl.l, crrl.l, cap.id(), cap.timestamp(), ztSource, ztDest, macSource, macDest, - (uint16_t)frameLen, frameData, (uint16_t)etherType, (uint16_t)vlanId, noTee, false, accept); + m_ctx.t->networkFilter(cc, 0x56ff1a93, m_id, rrl.l, crrl.l, cap.id(), cap.timestamp(), ztSource, ztDest, macSource, macDest, (uint16_t)frameLen, frameData, (uint16_t)etherType, (uint16_t)vlanId, noTee, false, accept); } else { - m_ctx.t->networkFilter( - cc, 0x112fbbab, m_id, rrl.l, nullptr, 0, 0, ztSource, ztDest, macSource, macDest, (uint16_t)frameLen, - frameData, (uint16_t)etherType, (uint16_t)vlanId, noTee, false, accept); + m_ctx.t->networkFilter(cc, 0x112fbbab, m_id, rrl.l, nullptr, 0, 0, ztSource, ztDest, macSource, macDest, (uint16_t)frameLen, frameData, (uint16_t)etherType, (uint16_t)vlanId, noTee, false, accept); } return (accept != 0); } -int Network::filterIncomingPacket( - const CallContext &cc, const SharedPtr &sourcePeer, const Address &ztDest, const MAC &macSource, - const MAC &macDest, const uint8_t *frameData, const unsigned int frameLen, const unsigned int etherType, - const unsigned int vlanId) +int Network::filterIncomingPacket(const CallContext &cc, const SharedPtr &sourcePeer, const Address &ztDest, const MAC &macSource, const MAC &macDest, const uint8_t *frameData, const unsigned int frameLen, const unsigned int etherType, const unsigned int vlanId) { Address ztFinalDest(ztDest); Trace::RuleResultLog rrl, crrl; @@ -845,9 +754,7 @@ int Network::filterIncomingPacket( Member &membership = m_memberships[sourcePeer->address()]; - switch (_doZtFilter( - m_ctx, rrl, m_config, &membership, true, sourcePeer->address(), ztFinalDest, macSource, macDest, frameData, - frameLen, etherType, vlanId, m_config.rules, m_config.ruleCount, ccNodeAddress, ccLength, ccWatch, qosBucket)) { + switch (_doZtFilter(m_ctx, rrl, m_config, &membership, true, sourcePeer->address(), ztFinalDest, macSource, macDest, frameData, frameLen, etherType, vlanId, m_config.rules, m_config.ruleCount, ccNodeAddress, ccLength, ccWatch, qosBucket)) { case DOZTFILTER_NO_MATCH: { Member::CapabilityIterator mci(membership, m_config); while ((c = mci.next())) { @@ -855,10 +762,7 @@ int Network::filterIncomingPacket( Address cc2; unsigned int ccLength2 = 0; bool ccWatch2 = false; - switch (_doZtFilter( - m_ctx, crrl, m_config, &membership, true, sourcePeer->address(), ztFinalDest, macSource, macDest, - frameData, frameLen, etherType, vlanId, c->rules(), c->ruleCount(), cc2, ccLength2, ccWatch2, - qosBucket)) { + switch (_doZtFilter(m_ctx, crrl, m_config, &membership, true, sourcePeer->address(), ztFinalDest, macSource, macDest, frameData, frameLen, etherType, vlanId, c->rules(), c->ruleCount(), cc2, ccLength2, ccWatch2, qosBucket)) { case DOZTFILTER_NO_MATCH: case DOZTFILTER_DROP: // explicit DROP in a capability just terminates its evaluation and is an // anti-pattern @@ -969,8 +873,7 @@ void Network::multicastUnsubscribe(const MulticastGroup &mg) m_myMulticastGroups.erase(i); } -uint64_t Network::handleConfigChunk( - const CallContext &cc, uint64_t packetId, const SharedPtr &source, const Buf &chunk, int ptr, int size) +uint64_t Network::handleConfigChunk(const CallContext &cc, uint64_t packetId, const SharedPtr &source, const Buf &chunk, int ptr, int size) { // If the controller's full fingerprint is known or was explicitly specified on join(), // require that the controller's identity match. Otherwise learn it. @@ -1124,9 +1027,7 @@ int Network::setConfiguration(const CallContext &cc, const NetworkConfig &nconf, try { if ((nconf.issuedTo != m_ctx.identity.address()) || (nconf.networkId != m_id)) return 0; // invalid config that is not for us or not for this network - if ((!Utils::allZero(nconf.issuedToFingerprintHash, ZT_FINGERPRINT_HASH_SIZE)) - && (memcmp(nconf.issuedToFingerprintHash, m_ctx.identity.fingerprint().hash, ZT_FINGERPRINT_HASH_SIZE) - != 0)) + if ((!Utils::allZero(nconf.issuedToFingerprintHash, ZT_FINGERPRINT_HASH_SIZE)) && (memcmp(nconf.issuedToFingerprintHash, m_ctx.identity.fingerprint().hash, ZT_FINGERPRINT_HASH_SIZE) != 0)) return 0; // full identity hash is present and does not match if (m_config == nconf) @@ -1147,11 +1048,7 @@ int Network::setConfiguration(const CallContext &cc, const NetworkConfig &nconf, m_externalConfig(&ctmp); } - m_ctx.cb.virtualNetworkConfigFunction( - reinterpret_cast(m_ctx.node), m_ctx.uPtr, cc.tPtr, nconf.networkId, &m_uPtr, - (oldPortInitialized) ? ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE - : ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP, - &ctmp); + m_ctx.cb.virtualNetworkConfigFunction(reinterpret_cast(m_ctx.node), m_ctx.uPtr, cc.tPtr, nconf.networkId, &m_uPtr, (oldPortInitialized) ? ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE : ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP, &ctmp); if (saveToDisk) { try { @@ -1258,8 +1155,7 @@ void Network::learnBridgeRoute(const MAC &mac, const Address &addr) } } -Member::AddCredentialResult -Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const MembershipCredential &com) +Member::AddCredentialResult Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const MembershipCredential &com) { if (com.networkId() != m_id) return Member::ADD_REJECTED; @@ -1267,8 +1163,7 @@ Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity return m_memberships[com.issuedTo().address].addCredential(m_ctx, cc, sourcePeerIdentity, m_config, com); } -Member::AddCredentialResult -Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const CapabilityCredential &cap) +Member::AddCredentialResult Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const CapabilityCredential &cap) { if (cap.networkId() != m_id) return Member::ADD_REJECTED; @@ -1276,8 +1171,7 @@ Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity return m_memberships[cap.issuedTo()].addCredential(m_ctx, cc, sourcePeerIdentity, m_config, cap); } -Member::AddCredentialResult -Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const TagCredential &tag) +Member::AddCredentialResult Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const TagCredential &tag) { if (tag.networkId() != m_id) return Member::ADD_REJECTED; @@ -1285,8 +1179,7 @@ Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity return m_memberships[tag.issuedTo()].addCredential(m_ctx, cc, sourcePeerIdentity, m_config, tag); } -Member::AddCredentialResult -Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const RevocationCredential &rev) +Member::AddCredentialResult Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const RevocationCredential &rev) { if (rev.networkId() != m_id) return Member::ADD_REJECTED; @@ -1320,8 +1213,7 @@ Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity return result; } -Member::AddCredentialResult -Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const OwnershipCredential &coo) +Member::AddCredentialResult Network::addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const OwnershipCredential &coo) { if (coo.networkId() != m_id) return Member::ADD_REJECTED; @@ -1494,9 +1386,8 @@ void Network::m_requestConfiguration(const CallContext &cc) const Address ctrl(controller()); Dictionary rmd; - rmd.add( - ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_VENDOR, - (uint64_t)1); // 1 == ZeroTier, no other vendors at the moment + rmd.add(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_VENDOR, + (uint64_t)1); // 1 == ZeroTier, no other vendors at the moment rmd.add(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_PROTOCOL_VERSION, (uint64_t)ZT_PROTO_VERSION); rmd.add(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_MAJOR_VERSION, (uint64_t)ZEROTIER_VERSION_MAJOR); rmd.add(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_MINOR_VERSION, (uint64_t)ZEROTIER_VERSION_MINOR); @@ -1544,8 +1435,7 @@ ZT_VirtualNetworkStatus Network::m_status() const switch (_netconfFailure) { case NETCONF_FAILURE_ACCESS_DENIED: return ZT_NETWORK_STATUS_ACCESS_DENIED; case NETCONF_FAILURE_NOT_FOUND: return ZT_NETWORK_STATUS_NOT_FOUND; - case NETCONF_FAILURE_NONE: - return ((m_config) ? ZT_NETWORK_STATUS_OK : ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION); + case NETCONF_FAILURE_NONE: return ((m_config) ? ZT_NETWORK_STATUS_OK : ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION); default: return ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION; } } @@ -1560,8 +1450,7 @@ void Network::m_externalConfig(ZT_VirtualNetworkConfig *ec) const else ec->name[0] = (char)0; ec->status = m_status(); - ec->type = (m_config) ? (m_config.isPrivate() ? ZT_NETWORK_TYPE_PRIVATE : ZT_NETWORK_TYPE_PUBLIC) - : ZT_NETWORK_TYPE_PRIVATE; + ec->type = (m_config) ? (m_config.isPrivate() ? ZT_NETWORK_TYPE_PRIVATE : ZT_NETWORK_TYPE_PUBLIC) : ZT_NETWORK_TYPE_PRIVATE; ec->mtu = (m_config) ? m_config.mtu : ZT_DEFAULT_MTU; Vector
ab; for (unsigned int i = 0; i < m_config.specialistCount; ++i) { @@ -1614,8 +1503,7 @@ push time if ((!announce)&&(force)) announce = true; if ((announce)&&(m->isAllow */ } -void Network::m_announceMulticastGroupsTo( - void *tPtr, const Address &peer, const Vector &allMulticastGroups) +void Network::m_announceMulticastGroupsTo(void *tPtr, const Address &peer, const Vector &allMulticastGroups) { #if 0 // Assumes _myMulticastGroups_l and _memberships_l are locked @@ -1647,8 +1535,7 @@ Vector Network::m_allMulticastGroups() const Vector mgs; mgs.reserve(m_myMulticastGroups.size() + m_multicastGroupsBehindMe.size() + 1); mgs.insert(mgs.end(), m_myMulticastGroups.begin(), m_myMulticastGroups.end()); - for (Map::const_iterator i(m_multicastGroupsBehindMe.begin()); - i != m_multicastGroupsBehindMe.end(); ++i) + for (Map::const_iterator i(m_multicastGroupsBehindMe.begin()); i != m_multicastGroupsBehindMe.end(); ++i) mgs.push_back(i->first); if ((m_config) && (m_config.enableBroadcast())) mgs.push_back(Network::BROADCAST); diff --git a/core/Network.hpp b/core/Network.hpp index 4de3f4f01..fe4eb1017 100644 --- a/core/Network.hpp +++ b/core/Network.hpp @@ -64,9 +64,7 @@ class Network { * @param uptr Arbitrary pointer used by externally-facing API (for user use) * @param nconf Network config, if known */ - Network( - const Context &ctx, const CallContext &cc, uint64_t nwid, const Fingerprint &controllerFingerprint, void *uptr, - const NetworkConfig *nconf); + Network(const Context &ctx, const CallContext &cc, uint64_t nwid, const Fingerprint &controllerFingerprint, void *uptr, const NetworkConfig *nconf); ~Network(); @@ -105,10 +103,7 @@ class Network { * @param vlanId 16-bit VLAN ID * @return True if packet should be sent, false if dropped or redirected */ - bool filterOutgoingPacket( - const CallContext &cc, bool noTee, const Address &ztSource, const Address &ztDest, const MAC &macSource, - const MAC &macDest, const uint8_t *frameData, unsigned int frameLen, unsigned int etherType, - unsigned int vlanId, uint8_t &qosBucket); + bool filterOutgoingPacket(const CallContext &cc, bool noTee, const Address &ztSource, const Address &ztDest, const MAC &macSource, const MAC &macDest, const uint8_t *frameData, unsigned int frameLen, unsigned int etherType, unsigned int vlanId, uint8_t &qosBucket); /** * Apply filters to an incoming packet @@ -128,10 +123,7 @@ class Network { * @param vlanId 16-bit VLAN ID * @return 0 == drop, 1 == accept, 2 == accept even if bridged */ - int filterIncomingPacket( - const CallContext &cc, const SharedPtr &sourcePeer, const Address &ztDest, const MAC &macSource, - const MAC &macDest, const uint8_t *frameData, unsigned int frameLen, unsigned int etherType, - unsigned int vlanId); + int filterIncomingPacket(const CallContext &cc, const SharedPtr &sourcePeer, const Address &ztDest, const MAC &macSource, const MAC &macDest, const uint8_t *frameData, unsigned int frameLen, unsigned int etherType, unsigned int vlanId); /** * Subscribe to a multicast group @@ -162,8 +154,7 @@ class Network { * @param size Size of data in chunk buffer (total, not relative to ptr) * @return Update ID if update was fully assembled and accepted or 0 otherwise */ - uint64_t handleConfigChunk( - const CallContext &cc, uint64_t packetId, const SharedPtr &source, const Buf &chunk, int ptr, int size); + uint64_t handleConfigChunk(const CallContext &cc, uint64_t packetId, const SharedPtr &source, const Buf &chunk, int ptr, int size); /** * Set network configuration @@ -238,32 +229,27 @@ class Network { /** * Validate a credential and learn it if it passes certificate and other checks */ - Member::AddCredentialResult - addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const MembershipCredential &com); + Member::AddCredentialResult addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const MembershipCredential &com); /** * Validate a credential and learn it if it passes certificate and other checks */ - Member::AddCredentialResult - addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const CapabilityCredential &cap); + Member::AddCredentialResult addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const CapabilityCredential &cap); /** * Validate a credential and learn it if it passes certificate and other checks */ - Member::AddCredentialResult - addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const TagCredential &tag); + Member::AddCredentialResult addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const TagCredential &tag); /** * Validate a credential and learn it if it passes certificate and other checks */ - Member::AddCredentialResult - addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const RevocationCredential &rev); + Member::AddCredentialResult addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const RevocationCredential &rev); /** * Validate a credential and learn it if it passes certificate and other checks */ - Member::AddCredentialResult - addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const OwnershipCredential &coo); + Member::AddCredentialResult addCredential(const CallContext &cc, const Identity &sourcePeerIdentity, const OwnershipCredential &coo); /** * Push credentials to a peer if timeouts indicate that we should do so @@ -295,8 +281,7 @@ class Network { template ZT_INLINE void eachMember(F f) { Mutex::Lock ml(m_memberships_l); - for (Map::iterator i(m_memberships.begin()); i != m_memberships.end(); - ++i) { // NOLINT(modernize-loop-convert,hicpp-use-auto,modernize-use-auto) + for (Map::iterator i(m_memberships.begin()); i != m_memberships.end(); ++i) { // NOLINT(modernize-loop-convert,hicpp-use-auto,modernize-use-auto) if (!f(i->first, i->second)) break; } @@ -326,18 +311,13 @@ class Network { Vector m_myMulticastGroups; // multicast groups that we belong to (according to tap) Map m_multicastGroupsBehindMe; // multicast groups that seem to be behind us and when we // last saw them (if we are a bridge) - Map m_remoteBridgeRoutes; // remote addresses where given MACs are reachable (for tracking devices - // behind remote bridges) + Map m_remoteBridgeRoutes; // remote addresses where given MACs are reachable (for tracking devices + // behind remote bridges) NetworkConfig m_config; std::atomic m_lastConfigUpdate; - volatile enum { - NETCONF_FAILURE_NONE, - NETCONF_FAILURE_ACCESS_DENIED, - NETCONF_FAILURE_NOT_FOUND, - NETCONF_FAILURE_INIT_FAILED - } _netconfFailure; + volatile enum { NETCONF_FAILURE_NONE, NETCONF_FAILURE_ACCESS_DENIED, NETCONF_FAILURE_NOT_FOUND, NETCONF_FAILURE_INIT_FAILED } _netconfFailure; Map m_memberships; diff --git a/core/NetworkConfig.cpp b/core/NetworkConfig.cpp index b30606fe6..4e15e9137 100644 --- a/core/NetworkConfig.cpp +++ b/core/NetworkConfig.cpp @@ -32,8 +32,7 @@ bool NetworkConfig::toDictionary(Dictionary &d) const d.add(ZT_NETWORKCONFIG_DICT_KEY_CREDENTIAL_TIME_MAX_DELTA, this->credentialTimeMaxDelta); d.add(ZT_NETWORKCONFIG_DICT_KEY_REVISION, this->revision); d.add(ZT_NETWORKCONFIG_DICT_KEY_ISSUED_TO, this->issuedTo.toString((char *)tmp)); - d.add( - ZT_NETWORKCONFIG_DICT_KEY_ISSUED_TO_IDENTITY_HASH, this->issuedToFingerprintHash, ZT_FINGERPRINT_HASH_SIZE); + d.add(ZT_NETWORKCONFIG_DICT_KEY_ISSUED_TO_IDENTITY_HASH, this->issuedToFingerprintHash, ZT_FINGERPRINT_HASH_SIZE); d.add(ZT_NETWORKCONFIG_DICT_KEY_FLAGS, this->flags); d.add(ZT_NETWORKCONFIG_DICT_KEY_MULTICAST_LIMIT, (uint64_t)this->multicastLimit); d.add(ZT_NETWORKCONFIG_DICT_KEY_TYPE, (uint64_t)this->type); @@ -146,8 +145,7 @@ bool NetworkConfig::fromDictionary(const Dictionary &d) } else { this->flags = d.getUI(ZT_NETWORKCONFIG_DICT_KEY_FLAGS, 0); - this->type = - (ZT_VirtualNetworkType)d.getUI(ZT_NETWORKCONFIG_DICT_KEY_TYPE, (uint64_t)ZT_NETWORK_TYPE_PRIVATE); + this->type = (ZT_VirtualNetworkType)d.getUI(ZT_NETWORKCONFIG_DICT_KEY_TYPE, (uint64_t)ZT_NETWORK_TYPE_PRIVATE); blob = &(d[ZT_NETWORKCONFIG_DICT_KEY_COM]); if (!blob->empty()) { @@ -209,9 +207,7 @@ bool NetworkConfig::fromDictionary(const Dictionary &d) } catch (...) { } - std::sort( - &(this->certificatesOfOwnership[0]), - &(this->certificatesOfOwnership[this->certificateOfOwnershipCount])); + std::sort(&(this->certificatesOfOwnership[0]), &(this->certificatesOfOwnership[this->certificateOfOwnershipCount])); } blob = &(d[ZT_NETWORKCONFIG_DICT_KEY_SPECIALISTS]); @@ -227,15 +223,13 @@ bool NetworkConfig::fromDictionary(const Dictionary &d) if (!blob->empty()) { unsigned int p = 0; while ((p < blob->size()) && (routeCount < ZT_MAX_NETWORK_ROUTES)) { - int l = asInetAddress(this->routes[this->routeCount].target) - .unmarshal(blob->data(), (int)(blob->size() - p)); + int l = asInetAddress(this->routes[this->routeCount].target).unmarshal(blob->data(), (int)(blob->size() - p)); if (l < 0) return false; p += l; if (p >= blob->size()) return false; - l = asInetAddress(this->routes[this->routeCount].via) - .unmarshal(blob->data(), (int)(blob->size() - p)); + l = asInetAddress(this->routes[this->routeCount].via).unmarshal(blob->data(), (int)(blob->size() - p)); if (l < 0) return false; p += l; @@ -264,9 +258,7 @@ bool NetworkConfig::fromDictionary(const Dictionary &d) blob = &(d[ZT_NETWORKCONFIG_DICT_KEY_RULES]); if (!blob->empty()) { this->ruleCount = 0; - if (CapabilityCredential::unmarshalVirtualNetworkRules( - blob->data(), (int)blob->size(), this->rules, this->ruleCount, ZT_MAX_NETWORK_RULES) - < 0) + if (CapabilityCredential::unmarshalVirtualNetworkRules(blob->data(), (int)blob->size(), this->rules, this->ruleCount, ZT_MAX_NETWORK_RULES) < 0) return false; } } diff --git a/core/NetworkConfig.hpp b/core/NetworkConfig.hpp index 74f8717ec..9a994d585 100644 --- a/core/NetworkConfig.hpp +++ b/core/NetworkConfig.hpp @@ -145,10 +145,7 @@ namespace ZeroTier { * Network configuration received from network controller nodes */ struct NetworkConfig : TriviallyCopyable { - ZT_INLINE NetworkConfig() noexcept - { - memoryZero(this); - } // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init) + ZT_INLINE NetworkConfig() noexcept { memoryZero(this); } // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init) /** * Write this network config to a dictionary for transport @@ -169,18 +166,12 @@ struct NetworkConfig : TriviallyCopyable { /** * @return True if broadcast (ff:ff:ff:ff:ff:ff) address should work on this network */ - ZT_INLINE bool enableBroadcast() const noexcept - { - return ((this->flags & ZT_NETWORKCONFIG_FLAG_ENABLE_BROADCAST) != 0); - } + ZT_INLINE bool enableBroadcast() const noexcept { return ((this->flags & ZT_NETWORKCONFIG_FLAG_ENABLE_BROADCAST) != 0); } /** * @return True if IPv6 NDP emulation should be allowed for certain "magic" IPv6 address patterns */ - ZT_INLINE bool ndpEmulation() const noexcept - { - return ((this->flags & ZT_NETWORKCONFIG_FLAG_ENABLE_IPV6_NDP_EMULATION) != 0); - } + ZT_INLINE bool ndpEmulation() const noexcept { return ((this->flags & ZT_NETWORKCONFIG_FLAG_ENABLE_IPV6_NDP_EMULATION) != 0); } /** * @return Network type is public (no access control) @@ -199,21 +190,14 @@ struct NetworkConfig : TriviallyCopyable { ZT_INLINE bool permitsBridging(const Address &fromPeer) const noexcept { for (unsigned int i = 0; i < specialistCount; ++i) { - if ((fromPeer.toInt() == (specialists[i] & ZT_ADDRESS_MASK)) - && ((specialists[i] & ZT_NETWORKCONFIG_SPECIALIST_TYPE_ACTIVE_BRIDGE) != 0)) + if ((fromPeer.toInt() == (specialists[i] & ZT_ADDRESS_MASK)) && ((specialists[i] & ZT_NETWORKCONFIG_SPECIALIST_TYPE_ACTIVE_BRIDGE) != 0)) return true; } return false; } - ZT_INLINE operator bool() const noexcept - { - return (networkId != 0); - } // NOLINT(google-explicit-constructor,hicpp-explicit-conversions) - ZT_INLINE bool operator==(const NetworkConfig &nc) const noexcept - { - return (memcmp(this, &nc, sizeof(NetworkConfig)) == 0); - } + ZT_INLINE operator bool() const noexcept { return (networkId != 0); } // NOLINT(google-explicit-constructor,hicpp-explicit-conversions) + ZT_INLINE bool operator==(const NetworkConfig &nc) const noexcept { return (memcmp(this, &nc, sizeof(NetworkConfig)) == 0); } ZT_INLINE bool operator!=(const NetworkConfig &nc) const noexcept { return (!(*this == nc)); } diff --git a/core/NetworkController.hpp b/core/NetworkController.hpp index 02b301b53..8ee5876ae 100644 --- a/core/NetworkController.hpp +++ b/core/NetworkController.hpp @@ -30,12 +30,7 @@ struct InetAddress; */ class NetworkController { public: - enum ErrorCode { - NC_ERROR_NONE = 0, - NC_ERROR_OBJECT_NOT_FOUND = 1, - NC_ERROR_ACCESS_DENIED = 2, - NC_ERROR_INTERNAL_SERVER_ERROR = 3 - }; + enum ErrorCode { NC_ERROR_NONE = 0, NC_ERROR_OBJECT_NOT_FOUND = 1, NC_ERROR_ACCESS_DENIED = 2, NC_ERROR_INTERNAL_SERVER_ERROR = 3 }; /** * Interface for sender used to send pushes and replies @@ -52,9 +47,7 @@ class NetworkController { * @param nc Network configuration to send * @param sendLegacyFormatConfig If true, send an old-format network config */ - virtual void ncSendConfig( - void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, - const Address &destination, const NetworkConfig &nc, bool sendLegacyFormatConfig) = 0; + virtual void ncSendConfig(void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, const NetworkConfig &nc, bool sendLegacyFormatConfig) = 0; /** * Send revocation to a node @@ -62,8 +55,7 @@ class NetworkController { * @param destination Destination node address * @param rev Revocation to send */ - virtual void ncSendRevocation( - void *tPtr, int64_t clock, int64_t ticks, const Address &destination, const RevocationCredential &rev) = 0; + virtual void ncSendRevocation(void *tPtr, int64_t clock, int64_t ticks, const Address &destination, const RevocationCredential &rev) = 0; /** * Send a network configuration request error @@ -73,9 +65,7 @@ class NetworkController { * @param destination Destination peer Address * @param errorCode Error code */ - virtual void ncSendError( - void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, - const Address &destination, NetworkController::ErrorCode errorCode) = 0; + virtual void ncSendError(void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, NetworkController::ErrorCode errorCode) = 0; }; NetworkController() {} @@ -99,9 +89,7 @@ class NetworkController { * @param metaData Meta-data bundled with request (if any) * @return Returns NETCONF_QUERY_OK if result 'nc' is valid, or an error code on error */ - virtual void request( - uint64_t nwid, const InetAddress &fromAddr, uint64_t requestPacketId, const Identity &identity, - const Dictionary &metaData) = 0; + virtual void request(uint64_t nwid, const InetAddress &fromAddr, uint64_t requestPacketId, const Identity &identity, const Dictionary &metaData) = 0; }; } // namespace ZeroTier diff --git a/core/Node.cpp b/core/Node.cpp index 441a36615..b5f404048 100644 --- a/core/Node.cpp +++ b/core/Node.cpp @@ -35,15 +35,7 @@ namespace ZeroTier { namespace { struct _NodeObjects { - ZT_INLINE _NodeObjects(Context &ctx, const CallContext &cc) - : networks() - , t(ctx) - , expect() - , vl2(ctx) - , vl1(ctx) - , topology(ctx, cc) - , sa(ctx) - , ts() + ZT_INLINE _NodeObjects(Context &ctx, const CallContext &cc) : networks(), t(ctx), expect(), vl2(ctx), vl1(ctx), topology(ctx, cc), sa(ctx), ts() { ctx.networks = &networks; ctx.t = &t; @@ -67,15 +59,7 @@ struct _NodeObjects { } // anonymous namespace -Node::Node(void *uPtr, const struct ZT_Node_Callbacks *callbacks, const CallContext &cc) - : m_ctx(this) - , m_store(m_ctx) - , m_objects(nullptr) - , m_lastPeerPulse(0) - , m_lastHousekeepingRun(0) - , m_lastNetworkHousekeepingRun(0) - , m_lastTrustStoreUpdate(0) - , m_online(false) +Node::Node(void *uPtr, const struct ZT_Node_Callbacks *callbacks, const CallContext &cc) : m_ctx(this), m_store(m_ctx), m_objects(nullptr), m_lastPeerPulse(0), m_lastHousekeepingRun(0), m_lastNetworkHousekeepingRun(0), m_lastTrustStoreUpdate(0), m_online(false) { ZT_SPEW("Node starting up!"); @@ -99,20 +83,14 @@ Node::Node(void *uPtr, const struct ZT_Node_Callbacks *callbacks, const CallCont m_ctx.identity.generate(Identity::C25519); m_ctx.identity.toString(false, m_ctx.publicIdentityStr); m_ctx.identity.toString(true, m_ctx.secretIdentityStr); - m_store.put( - cc, ZT_STATE_OBJECT_IDENTITY_SECRET, Utils::ZERO256, 0, m_ctx.secretIdentityStr, - (unsigned int)strlen(m_ctx.secretIdentityStr)); - m_store.put( - cc, ZT_STATE_OBJECT_IDENTITY_PUBLIC, Utils::ZERO256, 0, m_ctx.publicIdentityStr, - (unsigned int)strlen(m_ctx.publicIdentityStr)); + m_store.put(cc, ZT_STATE_OBJECT_IDENTITY_SECRET, Utils::ZERO256, 0, m_ctx.secretIdentityStr, (unsigned int)strlen(m_ctx.secretIdentityStr)); + m_store.put(cc, ZT_STATE_OBJECT_IDENTITY_PUBLIC, Utils::ZERO256, 0, m_ctx.publicIdentityStr, (unsigned int)strlen(m_ctx.publicIdentityStr)); ZT_SPEW("no pre-existing identity found, created %s", m_ctx.identity.toString().c_str()); } else { data = m_store.get(cc, ZT_STATE_OBJECT_IDENTITY_PUBLIC, Utils::ZERO256, 0); if ((data.empty()) || (memcmp(data.data(), m_ctx.publicIdentityStr, strlen(m_ctx.publicIdentityStr)) != 0)) - m_store.put( - cc, ZT_STATE_OBJECT_IDENTITY_PUBLIC, Utils::ZERO256, 0, m_ctx.publicIdentityStr, - (unsigned int)strlen(m_ctx.publicIdentityStr)); + m_store.put(cc, ZT_STATE_OBJECT_IDENTITY_PUBLIC, Utils::ZERO256, 0, m_ctx.publicIdentityStr, (unsigned int)strlen(m_ctx.publicIdentityStr)); } uint8_t localSecretCipherKey[ZT_FINGERPRINT_HASH_SIZE]; @@ -218,9 +196,7 @@ ZT_ResultCode Node::processBackgroundTasks(const CallContext &cc, volatile int64 for (Vector>::iterator p(allPeers.begin()); p != allPeers.end(); ++p) { (*p)->pulse(m_ctx, cc); if (!online) { - online = - ((std::binary_search(rootPeers.begin(), rootPeers.end(), *p) || rootPeers.empty()) - && (*p)->directlyConnected()); + online = ((std::binary_search(rootPeers.begin(), rootPeers.end(), *p) || rootPeers.empty()) && (*p)->directlyConnected()); } } @@ -294,9 +270,7 @@ ZT_ResultCode Node::leave(uint64_t nwid, void **uptr, const CallContext &cc) if (uptr) *uptr = *network->userPtr(); network->externalConfig(&ctmp); - m_ctx.cb.virtualNetworkConfigFunction( - reinterpret_cast(this), m_ctx.uPtr, cc.tPtr, nwid, network->userPtr(), - ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY, &ctmp); + m_ctx.cb.virtualNetworkConfigFunction(reinterpret_cast(this), m_ctx.uPtr, cc.tPtr, nwid, network->userPtr(), ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY, &ctmp); network->destroy(); return ZT_RESULT_OK; } @@ -305,8 +279,7 @@ ZT_ResultCode Node::leave(uint64_t nwid, void **uptr, const CallContext &cc) } } -ZT_ResultCode -Node::multicastSubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi) +ZT_ResultCode Node::multicastSubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi) { ZT_SPEW("multicast subscribe to %s:%lu", MAC(multicastGroup).toString().c_str(), multicastAdi); const SharedPtr nw(m_ctx.networks->get(nwid)); @@ -319,8 +292,7 @@ Node::multicastSubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicas } } -ZT_ResultCode -Node::multicastUnsubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi) +ZT_ResultCode Node::multicastUnsubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi) { ZT_SPEW("multicast unsubscribe from %s:%lu", MAC(multicastGroup).toString().c_str(), multicastAdi); const SharedPtr nw(m_ctx.networks->get(nwid)); @@ -357,10 +329,7 @@ static void p_peerListFreeFunction(const void *pl) } struct p_sortPeerPtrsByAddress { - ZT_INLINE bool operator()(const SharedPtr &a, const SharedPtr &b) const noexcept - { - return (a->address() < b->address()); - } + ZT_INLINE bool operator()(const SharedPtr &a, const SharedPtr &b) const noexcept { return (a->address() < b->address()); } }; ZT_PeerList *Node::peers(const CallContext &cc) const @@ -468,8 +437,7 @@ ZT_VirtualNetworkList *Node::networks() const { Mutex::Lock l(m_allNetworks_l); - char *const buf = - (char *)::malloc(sizeof(ZT_VirtualNetworkList) + (sizeof(ZT_VirtualNetworkConfig) * m_allNetworks.size())); + char *const buf = (char *)::malloc(sizeof(ZT_VirtualNetworkList) + (sizeof(ZT_VirtualNetworkConfig) * m_allNetworks.size())); if (!buf) return nullptr; ZT_VirtualNetworkList *nl = (ZT_VirtualNetworkList *)buf; @@ -500,8 +468,7 @@ void Node::setInterfaceAddresses(const ZT_InterfaceAddress *addrs, unsigned int for (unsigned int i = 0; i < addrCount; ++i) { bool dupe = false; for (unsigned int j = 0; j < i; ++j) { - if (*(reinterpret_cast(&addrs[j].address)) - == *(reinterpret_cast(&addrs[i].address))) { + if (*(reinterpret_cast(&addrs[j].address)) == *(reinterpret_cast(&addrs[i].address))) { dupe = true; break; } @@ -511,9 +478,7 @@ void Node::setInterfaceAddresses(const ZT_InterfaceAddress *addrs, unsigned int } } -ZT_CertificateError Node::addCertificate( - const CallContext &cc, unsigned int localTrust, const ZT_Certificate *cert, const void *certData, - unsigned int certSize) +ZT_CertificateError Node::addCertificate(const CallContext &cc, unsigned int localTrust, const ZT_Certificate *cert, const void *certData, unsigned int certSize) { Certificate c; if (cert) { @@ -528,8 +493,7 @@ ZT_CertificateError Node::addCertificate( m_ctx.ts->add(c, localTrust); m_ctx.ts->update(cc.clock, nullptr); SharedPtr ent(m_ctx.ts->get(c.getSerialNo())); - return (ent) ? ent->error() - : ZT_CERTIFICATE_ERROR_INVALID_FORMAT; // should never be null, but if so it means invalid + return (ent) ? ent->error() : ZT_CERTIFICATE_ERROR_INVALID_FORMAT; // should never be null, but if so it means invalid } ZT_ResultCode Node::deleteCertificate(const CallContext &cc, const void *serialNo) @@ -550,29 +514,24 @@ struct p_certificateListInternal { static void p_freeCertificateList(const void *cl) { if (cl) { - reinterpret_cast( - reinterpret_cast(cl) + sizeof(ZT_CertificateList)) - ->~p_certificateListInternal(); + reinterpret_cast(reinterpret_cast(cl) + sizeof(ZT_CertificateList))->~p_certificateListInternal(); free(const_cast(cl)); } } ZT_CertificateList *Node::listCertificates() { - ZT_CertificateList *const cl = - (ZT_CertificateList *)malloc(sizeof(ZT_CertificateList) + sizeof(p_certificateListInternal)); + ZT_CertificateList *const cl = (ZT_CertificateList *)malloc(sizeof(ZT_CertificateList) + sizeof(p_certificateListInternal)); if (!cl) return nullptr; - p_certificateListInternal *const clint = - reinterpret_cast(reinterpret_cast(cl) + sizeof(ZT_CertificateList)); + p_certificateListInternal *const clint = reinterpret_cast(reinterpret_cast(cl) + sizeof(ZT_CertificateList)); new (clint) p_certificateListInternal; clint->entries = m_ctx.ts->all(false); clint->c.reserve(clint->entries.size()); clint->t.reserve(clint->entries.size()); - for (Vector>::const_iterator i(clint->entries.begin()); i != clint->entries.end(); - ++i) { + for (Vector>::const_iterator i(clint->entries.begin()); i != clint->entries.end(); ++i) { clint->c.push_back(&((*i)->certificate())); clint->t.push_back((*i)->localTrust()); } @@ -585,8 +544,7 @@ ZT_CertificateList *Node::listCertificates() return cl; } -int Node::sendUserMessage( - const CallContext &cc, uint64_t dest, uint64_t /*typeId*/, const void * /*data*/, unsigned int /*len*/) +int Node::sendUserMessage(const CallContext &cc, uint64_t dest, uint64_t /*typeId*/, const void * /*data*/, unsigned int /*len*/) { try { if (m_ctx.identity.address().toInt() != dest) { @@ -626,11 +584,7 @@ bool Node::filterPotentialPath(void *tPtr, const Identity &id, int64_t localSock } if (m_ctx.cb.pathCheckFunction) { - return ( - m_ctx.cb.pathCheckFunction( - reinterpret_cast(this), m_ctx.uPtr, tPtr, id.address().toInt(), (const ZT_Identity *)&id, - localSocket, reinterpret_cast(&remoteAddress)) - != 0); + return (m_ctx.cb.pathCheckFunction(reinterpret_cast(this), m_ctx.uPtr, tPtr, id.address().toInt(), (const ZT_Identity *)&id, localSocket, reinterpret_cast(&remoteAddress)) != 0); } return true; @@ -639,20 +593,14 @@ bool Node::filterPotentialPath(void *tPtr, const Identity &id, int64_t localSock bool Node::externalPathLookup(void *tPtr, const Identity &id, int family, InetAddress &addr) { if (m_ctx.cb.pathLookupFunction) { - return ( - m_ctx.cb.pathLookupFunction( - reinterpret_cast(this), m_ctx.uPtr, tPtr, id.address().toInt(), - reinterpret_cast(&id), family, reinterpret_cast(&addr)) - == ZT_RESULT_OK); + return (m_ctx.cb.pathLookupFunction(reinterpret_cast(this), m_ctx.uPtr, tPtr, id.address().toInt(), reinterpret_cast(&id), family, reinterpret_cast(&addr)) == ZT_RESULT_OK); } return false; } // Implementation of NetworkController::Sender ------------------------------------------------------------------------ -void Node::ncSendConfig( - void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, - const NetworkConfig &nc, bool sendLegacyFormatConfig) +void Node::ncSendConfig(void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, const NetworkConfig &nc, bool sendLegacyFormatConfig) { if (destination == m_ctx.identity.address()) { SharedPtr n(m_ctx.networks->get(nwid)); @@ -704,8 +652,7 @@ void Node::ncSendConfig( } } -void Node::ncSendRevocation( - void *tPtr, int64_t clock, int64_t ticks, const Address &destination, const RevocationCredential &rev) +void Node::ncSendRevocation(void *tPtr, int64_t clock, int64_t ticks, const Address &destination, const RevocationCredential &rev) { if (destination == m_ctx.identity.address()) { SharedPtr n(m_ctx.networks->get(rev.networkId())); @@ -729,9 +676,7 @@ void Node::ncSendRevocation( } } -void Node::ncSendError( - void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, - NetworkController::ErrorCode errorCode) +void Node::ncSendError(void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, NetworkController::ErrorCode errorCode) { if (destination == m_ctx.identity.address()) { SharedPtr n(m_ctx.networks->get(nwid)); diff --git a/core/Node.hpp b/core/Node.hpp index ce9df1b32..fb3cb3617 100644 --- a/core/Node.hpp +++ b/core/Node.hpp @@ -55,11 +55,9 @@ class Node : public NetworkController::Sender { ZT_ResultCode leave(uint64_t nwid, void **uptr, const CallContext &cc); - ZT_ResultCode - multicastSubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi); + ZT_ResultCode multicastSubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi); - ZT_ResultCode - multicastUnsubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi); + ZT_ResultCode multicastUnsubscribe(const CallContext &cc, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi); void status(ZT_NodeStatus *status) const; @@ -73,9 +71,7 @@ class Node : public NetworkController::Sender { void setInterfaceAddresses(const ZT_InterfaceAddress *addrs, unsigned int addrCount); - ZT_CertificateError addCertificate( - const CallContext &cc, unsigned int localTrust, const ZT_Certificate *cert, const void *certData, - unsigned int certSize); + ZT_CertificateError addCertificate(const CallContext &cc, unsigned int localTrust, const ZT_Certificate *cert, const void *certData, unsigned int certSize); ZT_ResultCode deleteCertificate(const CallContext &cc, const void *serialNo); @@ -93,11 +89,7 @@ class Node : public NetworkController::Sender { * @param md Event data or NULL if none * @param mdSize Size of event data */ - ZT_INLINE void postEvent( - void *const tPtr, const ZT_Event ev, const void *const md = nullptr, const unsigned int mdSize = 0) noexcept - { - m_ctx.cb.eventCallback(reinterpret_cast(this), m_ctx.uPtr, tPtr, ev, md, mdSize); - } + ZT_INLINE void postEvent(void *const tPtr, const ZT_Event ev, const void *const md = nullptr, const unsigned int mdSize = 0) noexcept { m_ctx.cb.eventCallback(reinterpret_cast(this), m_ctx.uPtr, tPtr, ev, md, mdSize); } /** * Check whether a path should be used for ZeroTier traffic @@ -128,14 +120,9 @@ class Node : public NetworkController::Sender { ZT_INLINE const Context &context() const noexcept { return m_ctx; } // Implementation of NetworkController::Sender interface - virtual void ncSendConfig( - void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, - const NetworkConfig &nc, bool sendLegacyFormatConfig); - virtual void ncSendRevocation( - void *tPtr, int64_t clock, int64_t ticks, const Address &destination, const RevocationCredential &rev); - virtual void ncSendError( - void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, - NetworkController::ErrorCode errorCode); + virtual void ncSendConfig(void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, const NetworkConfig &nc, bool sendLegacyFormatConfig); + virtual void ncSendRevocation(void *tPtr, int64_t clock, int64_t ticks, const Address &destination, const RevocationCredential &rev); + virtual void ncSendError(void *tPtr, int64_t clock, int64_t ticks, uint64_t nwid, uint64_t requestPacketId, const Address &destination, NetworkController::ErrorCode errorCode); private: Context m_ctx; diff --git a/core/OS.hpp b/core/OS.hpp index f5a8b237d..49cf78f1b 100644 --- a/core/OS.hpp +++ b/core/OS.hpp @@ -17,9 +17,7 @@ /* Uncomment this to force a whole lot of debug output. */ #define ZT_DEBUG_SPEW -#if !defined(__GNUC__) \ - && (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) \ - || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || defined(__INTEL_COMPILER) || defined(__clang__)) +#if !defined(__GNUC__) && (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || defined(__INTEL_COMPILER) || defined(__clang__)) #define __GNUC__ 3 #endif @@ -72,18 +70,14 @@ #include #include -#if ( \ - defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || defined(__AMD64) \ - || defined(__AMD64__) || defined(_M_X64)) +#if (defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || defined(__AMD64) || defined(__AMD64__) || defined(_M_X64)) #define ZT_ARCH_X64 1 -#include #include #include +#include #include #endif -#if defined(ZT_ARCH_X64) || defined(i386) || defined(__i386) || defined(__i386__) || defined(__i486__) \ - || defined(__i586__) || defined(__i686__) || defined(_M_IX86) || defined(__X86__) || defined(_X86_) \ - || defined(__I86__) || defined(__INTEL__) || defined(__386) +#if defined(ZT_ARCH_X64) || defined(i386) || defined(__i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86) || defined(__X86__) || defined(_X86_) || defined(__I86__) || defined(__INTEL__) || defined(__386) #define ZT_ARCH_X86 1 #endif @@ -275,8 +269,7 @@ typedef unsigned uint128_t __attribute__((mode(TI))); #define ZT_VA_ARGS(...) , ##__VA_ARGS__ #ifdef ZT_DEBUG_SPEW -#define ZT_SPEW(f, ...) \ - fprintf(stderr, "%s:%d(%s): " f ZT_EOL_S, __FILE__, __LINE__, __FUNCTION__ ZT_VA_ARGS(__VA_ARGS__)) +#define ZT_SPEW(f, ...) fprintf(stderr, "%s:%d(%s): " f ZT_EOL_S, __FILE__, __LINE__, __FUNCTION__ ZT_VA_ARGS(__VA_ARGS__)) #else #define ZT_SPEW(f, ...) #endif diff --git a/core/OwnershipCredential.cpp b/core/OwnershipCredential.cpp index 4045dc375..f36058a05 100644 --- a/core/OwnershipCredential.cpp +++ b/core/OwnershipCredential.cpp @@ -21,14 +21,12 @@ void OwnershipCredential::addThing(const InetAddress &ip) return; if (ip.as.sa.sa_family == AF_INET) { m_thingTypes[m_thingCount] = THING_IPV4_ADDRESS; - Utils::copy<4>( - m_thingValues[m_thingCount], &(reinterpret_cast(&ip)->sin_addr.s_addr)); + Utils::copy<4>(m_thingValues[m_thingCount], &(reinterpret_cast(&ip)->sin_addr.s_addr)); ++m_thingCount; } else if (ip.as.sa.sa_family == AF_INET6) { m_thingTypes[m_thingCount] = THING_IPV6_ADDRESS; - Utils::copy<16>( - m_thingValues[m_thingCount], reinterpret_cast(&ip)->sin6_addr.s6_addr); + Utils::copy<16>(m_thingValues[m_thingCount], reinterpret_cast(&ip)->sin6_addr.s6_addr); ++m_thingCount; } } diff --git a/core/OwnershipCredential.hpp b/core/OwnershipCredential.hpp index f82cfe7a0..921a2ccd4 100644 --- a/core/OwnershipCredential.hpp +++ b/core/OwnershipCredential.hpp @@ -28,9 +28,7 @@ // Maximum size of a thing's value field in bytes #define ZT_CERTIFICATEOFOWNERSHIP_MAX_THING_VALUE_SIZE 16 -#define ZT_CERTIFICATEOFOWNERSHIP_MARSHAL_SIZE_MAX \ - (8 + 8 + 8 + 4 + 2 + ((1 + ZT_CERTIFICATEOFOWNERSHIP_MAX_THING_VALUE_SIZE) * ZT_CERTIFICATEOFOWNERSHIP_MAX_THINGS) \ - + 5 + 5 + 1 + 2 + ZT_SIGNATURE_BUFFER_SIZE + 2) +#define ZT_CERTIFICATEOFOWNERSHIP_MARSHAL_SIZE_MAX (8 + 8 + 8 + 4 + 2 + ((1 + ZT_CERTIFICATEOFOWNERSHIP_MAX_THING_VALUE_SIZE) * ZT_CERTIFICATEOFOWNERSHIP_MAX_THINGS) + 5 + 5 + 1 + 2 + ZT_SIGNATURE_BUFFER_SIZE + 2) namespace ZeroTier { @@ -87,11 +85,9 @@ class OwnershipCredential : public Credential { ZT_INLINE bool owns(const InetAddress &ip) const noexcept { if (ip.as.sa.sa_family == AF_INET) - return this->_owns( - THING_IPV4_ADDRESS, &(reinterpret_cast(&ip)->sin_addr.s_addr), 4); + return this->_owns(THING_IPV4_ADDRESS, &(reinterpret_cast(&ip)->sin_addr.s_addr), 4); else if (ip.as.sa.sa_family == AF_INET6) - return this->_owns( - THING_IPV6_ADDRESS, reinterpret_cast(&ip)->sin6_addr.s6_addr, 16); + return this->_owns(THING_IPV6_ADDRESS, reinterpret_cast(&ip)->sin6_addr.s6_addr, 16); else return false; } @@ -134,10 +130,7 @@ class OwnershipCredential : public Credential { * * @return Credential verification result: OK, bad signature, or identity needed */ - ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const - { - return s_verify(ctx, cc, *this); - } + ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const { return s_verify(ctx, cc, *this); } static constexpr int marshalSizeMax() noexcept { return ZT_CERTIFICATEOFOWNERSHIP_MARSHAL_SIZE_MAX; } @@ -147,15 +140,9 @@ class OwnershipCredential : public Credential { // Provides natural sort order by ID ZT_INLINE bool operator<(const OwnershipCredential &coo) const noexcept { return (m_id < coo.m_id); } - ZT_INLINE bool operator==(const OwnershipCredential &coo) const noexcept - { - return (memcmp(this, &coo, sizeof(OwnershipCredential)) == 0); - } + ZT_INLINE bool operator==(const OwnershipCredential &coo) const noexcept { return (memcmp(this, &coo, sizeof(OwnershipCredential)) == 0); } - ZT_INLINE bool operator!=(const OwnershipCredential &coo) const noexcept - { - return (memcmp(this, &coo, sizeof(OwnershipCredential)) != 0); - } + ZT_INLINE bool operator!=(const OwnershipCredential &coo) const noexcept { return (memcmp(this, &coo, sizeof(OwnershipCredential)) != 0); } private: ZT_INLINE bool _owns(const Thing &t, const void *v, unsigned int l) const noexcept diff --git a/core/Path.cpp b/core/Path.cpp index 87828eb9f..50fb23598 100644 --- a/core/Path.cpp +++ b/core/Path.cpp @@ -20,11 +20,7 @@ namespace ZeroTier { bool Path::send(const Context &ctx, const CallContext &cc, const void *const data, const unsigned int len) noexcept { - if (likely( - ctx.cb.wirePacketSendFunction( - reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, m_localSocket, - reinterpret_cast(&m_addr), data, len, 0) - == 0)) { + if (likely(ctx.cb.wirePacketSendFunction(reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, m_localSocket, reinterpret_cast(&m_addr), data, len, 0) == 0)) { m_lastOut = cc.ticks; m_outMeter.log(cc.ticks, len); return true; diff --git a/core/Path.hpp b/core/Path.hpp index 20de94cfd..787ff7b91 100644 --- a/core/Path.hpp +++ b/core/Path.hpp @@ -36,8 +36,7 @@ class Path { friend class SharedPtr; // Allow defragmenter to access fragment-in-flight info stored in Path for performance reasons. - template - friend class Defragmenter; + template friend class Defragmenter; public: /** @@ -52,17 +51,14 @@ class Path { const unsigned int family = ip.as.sa.sa_family; if (family == AF_INET) { const uint16_t p = (uint16_t)ip.as.sa_in.sin_port; - m_hashCode = - Utils::hash64((((uint64_t)ip.as.sa_in.sin_addr.s_addr) << 16U) ^ ((uint64_t)p) ^ Utils::s_mapNonce); - m_ipv6Net64 = 0; // 0 for IPv4, never 0 for IPv6 - m_port = p; + m_hashCode = Utils::hash64((((uint64_t)ip.as.sa_in.sin_addr.s_addr) << 16U) ^ ((uint64_t)p) ^ Utils::s_mapNonce); + m_ipv6Net64 = 0; // 0 for IPv4, never 0 for IPv6 + m_port = p; } else { if (likely(family == AF_INET6)) { - const uint64_t a = Utils::loadMachineEndian( - reinterpret_cast(ip.as.sa_in6.sin6_addr.s6_addr)); - const uint64_t b = Utils::loadMachineEndian( - reinterpret_cast(ip.as.sa_in6.sin6_addr.s6_addr) + 8); + const uint64_t a = Utils::loadMachineEndian(reinterpret_cast(ip.as.sa_in6.sin6_addr.s6_addr)); + const uint64_t b = Utils::loadMachineEndian(reinterpret_cast(ip.as.sa_in6.sin6_addr.s6_addr) + 8); const uint16_t p = ip.as.sa_in6.sin6_port; m_hashCode = Utils::hash64(a ^ b ^ ((uint64_t)p) ^ Utils::s_mapNonce); m_ipv6Net64 = a; // IPv6 /64 @@ -79,10 +75,7 @@ class Path { ZT_INLINE unsigned long hashCode() const noexcept { return (unsigned long)m_hashCode; } - ZT_INLINE bool operator==(const Key &k) const noexcept - { - return (m_hashCode == k.m_hashCode) && (m_ipv6Net64 == k.m_ipv6Net64) && (m_port == k.m_port); - } + ZT_INLINE bool operator==(const Key &k) const noexcept { return (m_hashCode == k.m_hashCode) && (m_ipv6Net64 == k.m_ipv6Net64) && (m_port == k.m_port); } ZT_INLINE bool operator!=(const Key &k) const noexcept { return (!(*this == k)); } @@ -114,14 +107,7 @@ class Path { uint16_t m_port; }; - ZT_INLINE Path(const int64_t l, const InetAddress &r) noexcept - : m_localSocket(l) - , m_lastIn(0) - , m_lastOut(0) - , m_latency(-1) - , m_addr(r) - { - } + ZT_INLINE Path(const int64_t l, const InetAddress &r) noexcept : m_localSocket(l), m_lastIn(0), m_lastOut(0), m_latency(-1), m_addr(r) {} /** * Send a packet via this path (last out time is also updated) @@ -182,10 +168,7 @@ class Path { * * @param now Current time */ - ZT_INLINE bool alive(const CallContext &cc) const noexcept - { - return ((cc.ticks - m_lastIn.load(std::memory_order_relaxed)) < ZT_PATH_ALIVE_TIMEOUT); - } + ZT_INLINE bool alive(const CallContext &cc) const noexcept { return ((cc.ticks - m_lastIn.load(std::memory_order_relaxed)) < ZT_PATH_ALIVE_TIMEOUT); } /** * @return Physical address diff --git a/core/Peer.cpp b/core/Peer.cpp index 02e29b11b..fb2ac508d 100644 --- a/core/Peer.cpp +++ b/core/Peer.cpp @@ -28,23 +28,7 @@ namespace ZeroTier { // An arbitrary byte to send in single byte probes, incremented on each probe. static uint8_t s_arbitraryByte = (uint8_t)Utils::random(); -Peer::Peer() - : m_key((uintptr_t)&m_identityKey) - , m_keyRenegotiationNeeded(false) - , m_lastReceive(0) - , m_lastSend(0) - , m_lastSentHello(0) - , m_lastWhoisRequestReceived(0) - , m_lastEchoRequestReceived(0) - , m_lastProbeReceived(0) - , m_alivePathCount(0) - , m_bestPath(0) - , m_vProto(0) - , m_vMajor(0) - , m_vMinor(0) - , m_vRevision(0) -{ -} +Peer::Peer() : m_key((uintptr_t)&m_identityKey), m_keyRenegotiationNeeded(false), m_lastReceive(0), m_lastSend(0), m_lastSentHello(0), m_lastWhoisRequestReceived(0), m_lastEchoRequestReceived(0), m_lastProbeReceived(0), m_alivePathCount(0), m_bestPath(0), m_vProto(0), m_vMajor(0), m_vMinor(0), m_vRevision(0) {} Peer::~Peer() { Utils::burn(m_helloMacKey, sizeof(m_helloMacKey)); } @@ -65,10 +49,7 @@ bool Peer::init(const Context &ctx, const CallContext &cc, const Identity &peerI return true; } -void Peer::received( - const Context &ctx, const CallContext &cc, const SharedPtr &path, const unsigned int hops, - const uint64_t packetId, const unsigned int payloadLength, const Protocol::Verb verb, - const Protocol::Verb /*inReVerb*/) +void Peer::received(const Context &ctx, const CallContext &cc, const SharedPtr &path, const unsigned int hops, const uint64_t packetId, const unsigned int payloadLength, const Protocol::Verb verb, const Protocol::Verb /*inReVerb*/) { m_lastReceive.store(cc.ticks, std::memory_order_relaxed); m_inMeter.log(cc.ticks, payloadLength); @@ -118,16 +99,14 @@ void Peer::received( m_prioritizePaths(cc); - ctx.t->learnedNewPath( - cc, 0x582fabdd, packetId, m_id, path->address(), (old) ? old->address() : InetAddress()); + ctx.t->learnedNewPath(cc, 0x582fabdd, packetId, m_id, path->address(), (old) ? old->address() : InetAddress()); } else { int64_t < = m_lastTried[Endpoint(path->address())]; if ((cc.ticks - lt) < ZT_PATH_MIN_TRY_INTERVAL) { lt = cc.ticks; path->sent(cc, m_hello(ctx, cc, path->localSocket(), path->address(), false)); - ctx.t->tryingNewPath( - cc, 0xb7747ddd, m_id, path->address(), path->address(), packetId, (uint8_t)verb, m_id); + ctx.t->tryingNewPath(cc, 0xb7747ddd, m_id, path->address(), path->address(), packetId, (uint8_t)verb, m_id); } } } @@ -165,12 +144,7 @@ void Peer::pulse(const Context &ctx, const CallContext &cc) // Determine if we need a new ephemeral key pair and if a new HELLO needs // to be sent. The latter happens every ZT_PEER_HELLO_INTERVAL or if a new // ephemeral key pair is generated. - bool needHello = - (((m_vProto >= 20) - && (m_keyRenegotiationNeeded || (key == &m_identityKey) - || ((cc.ticks - key->timestamp()) >= (ZT_SYMMETRIC_KEY_TTL / 2)) - || (key->odometer() > (ZT_SYMMETRIC_KEY_TTL_MESSAGES / 2)))) - || ((cc.ticks - m_lastSentHello) >= ZT_PEER_HELLO_INTERVAL)); + bool needHello = (((m_vProto >= 20) && (m_keyRenegotiationNeeded || (key == &m_identityKey) || ((cc.ticks - key->timestamp()) >= (ZT_SYMMETRIC_KEY_TTL / 2)) || (key->odometer() > (ZT_SYMMETRIC_KEY_TTL_MESSAGES / 2)))) || ((cc.ticks - m_lastSentHello) >= ZT_PEER_HELLO_INTERVAL)); // Prioritize paths and more importantly for here forget dead ones. m_prioritizePaths(cc); @@ -182,16 +156,13 @@ void Peer::pulse(const Context &ctx, const CallContext &cc) // callback (if one was supplied). if (m_locator) { - for (Vector>>::const_iterator ep( - m_locator->endpoints().begin()); - ep != m_locator->endpoints().end(); ++ep) { + for (Vector>>::const_iterator ep(m_locator->endpoints().begin()); ep != m_locator->endpoints().end(); ++ep) { if (ep->first.type == ZT_ENDPOINT_TYPE_IP_UDP) { if (ctx.node->filterPotentialPath(cc.tPtr, m_id, -1, ep->first.ip())) { int64_t < = m_lastTried[ep->first]; if ((cc.ticks - lt) > ZT_PATH_MIN_TRY_INTERVAL) { lt = cc.ticks; - ctx.t->tryingNewPath( - cc, 0x84b22322, m_id, ep->first.ip(), InetAddress::NIL, 0, 0, Identity::NIL); + ctx.t->tryingNewPath(cc, 0x84b22322, m_id, ep->first.ip(), InetAddress::NIL, 0, 0, Identity::NIL); sent(cc, m_sendProbe(ctx, cc, -1, ep->first.ip(), nullptr, 0)); } } @@ -297,9 +268,8 @@ void Peer::pulse(const Context &ctx, const CallContext &cc) // if needHello is true and sending small keepalives to others. for (unsigned int i = 0; i < m_alivePathCount; ++i) { if (needHello) { - needHello = false; - const unsigned int bytes = - m_hello(ctx, cc, m_paths[i]->localSocket(), m_paths[i]->address(), m_keyRenegotiationNeeded); + needHello = false; + const unsigned int bytes = m_hello(ctx, cc, m_paths[i]->localSocket(), m_paths[i]->address(), m_keyRenegotiationNeeded); if (bytes) { m_paths[i]->sent(cc, bytes); sent(cc, bytes); @@ -320,8 +290,7 @@ void Peer::pulse(const Context &ctx, const CallContext &cc) if (root) { const SharedPtr via(root->path(cc)); if (via) { - const unsigned int bytes = - m_hello(ctx, cc, via->localSocket(), via->address(), m_keyRenegotiationNeeded); + const unsigned int bytes = m_hello(ctx, cc, via->localSocket(), via->address(), m_keyRenegotiationNeeded); if (bytes) { via->sent(cc, bytes); root->relayed(cc, bytes); @@ -363,9 +332,7 @@ void Peer::contact(const Context &ctx, const CallContext &cc, const Endpoint &ep // For IPv4 addresses we send a tiny packet with a low TTL, which helps to // traverse some NAT types. It has no effect otherwise. if (ep.isInetAddr() && ep.ip().isV4()) { - ctx.cb.wirePacketSendFunction( - reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, -1, - reinterpret_cast(&ep.ip()), &s_arbitraryByte, 1, 2); + ctx.cb.wirePacketSendFunction(reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, -1, reinterpret_cast(&ep.ip()), &s_arbitraryByte, 1, 2); ++s_arbitraryByte; } @@ -381,17 +348,13 @@ void Peer::contact(const Context &ctx, const CallContext &cc, const Endpoint &ep m_tryQueue.push_back(p_TryQueueItem(ep, -tries)); } -void Peer::resetWithinScope( - const Context &ctx, const CallContext &cc, InetAddress::IpScope scope, int inetAddressFamily) +void Peer::resetWithinScope(const Context &ctx, const CallContext &cc, InetAddress::IpScope scope, int inetAddressFamily) { RWMutex::Lock l(m_lock); unsigned int pc = 0; for (unsigned int i = 0; i < m_alivePathCount; ++i) { - if ((m_paths[i]) - && (((int)m_paths[i]->address().as.sa.sa_family == inetAddressFamily) - && (m_paths[i]->address().ipScope() == scope))) { - const unsigned int bytes = - m_sendProbe(ctx, cc, m_paths[i]->localSocket(), m_paths[i]->address(), nullptr, 0); + if ((m_paths[i]) && (((int)m_paths[i]->address().as.sa.sa_family == inetAddressFamily) && (m_paths[i]->address().ipScope() == scope))) { + const unsigned int bytes = m_sendProbe(ctx, cc, m_paths[i]->localSocket(), m_paths[i]->address(), nullptr, 0); m_paths[i]->sent(cc, bytes); sent(cc, bytes); } @@ -486,9 +449,7 @@ int Peer::unmarshal(const Context &ctx, const int64_t ticks, const uint8_t *rest bool identityKeyRestored = false; if (Address(data + 1) == ctx.identity.address()) { uint8_t k[ZT_SYMMETRIC_KEY_SIZE]; - static_assert( - ZT_SYMMETRIC_KEY_SIZE == 48, - "marshal() and unmarshal() must be revisited if ZT_SYMMETRIC_KEY_SIZE is changed"); + static_assert(ZT_SYMMETRIC_KEY_SIZE == 48, "marshal() and unmarshal() must be revisited if ZT_SYMMETRIC_KEY_SIZE is changed"); ctx.localSecretCipher.decrypt(data + 1 + ZT_ADDRESS_LENGTH, k); ctx.localSecretCipher.decrypt(data + 1 + ZT_ADDRESS_LENGTH + 16, k + 16); ctx.localSecretCipher.decrypt(data + 1 + ZT_ADDRESS_LENGTH + 32, k + 32); @@ -591,9 +552,7 @@ void Peer::m_prioritizePaths(const CallContext &cc) m_bestPath.store((m_alivePathCount != 0) ? (uintptr_t)m_paths[0].ptr() : (uintptr_t)0, std::memory_order_release); } -unsigned int Peer::m_sendProbe( - const Context &ctx, const CallContext &cc, int64_t localSocket, const InetAddress &atAddress, const uint16_t *ports, - const unsigned int numPorts) +unsigned int Peer::m_sendProbe(const Context &ctx, const CallContext &cc, int64_t localSocket, const InetAddress &atAddress, const uint16_t *ports, const unsigned int numPorts) { // Assumes m_lock is locked @@ -602,8 +561,7 @@ unsigned int Peer::m_sendProbe( // some future attacker compromises it. uint8_t p[ZT_PROTO_MIN_PACKET_LENGTH]; - Utils::storeMachineEndian( - p + ZT_PROTO_PACKET_ID_INDEX, m_identityKey.nextMessage(ctx.identity.address(), m_id.address())); + Utils::storeMachineEndian(p + ZT_PROTO_PACKET_ID_INDEX, m_identityKey.nextMessage(ctx.identity.address(), m_id.address())); m_id.address().copyTo(p + ZT_PROTO_PACKET_DESTINATION_INDEX); ctx.identity.address().copyTo(p + ZT_PROTO_PACKET_SOURCE_INDEX); p[ZT_PROTO_PACKET_FLAGS_INDEX] = 0; @@ -615,16 +573,12 @@ unsigned int Peer::m_sendProbe( InetAddress tmp(atAddress); for (unsigned int i = 0; i < numPorts; ++i) { tmp.setPort(ports[i]); - ctx.cb.wirePacketSendFunction( - reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, -1, - reinterpret_cast(&tmp), p, ZT_PROTO_MIN_PACKET_LENGTH, 0); + ctx.cb.wirePacketSendFunction(reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, -1, reinterpret_cast(&tmp), p, ZT_PROTO_MIN_PACKET_LENGTH, 0); } return ZT_PROTO_MIN_PACKET_LENGTH * numPorts; } else { - ctx.cb.wirePacketSendFunction( - reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, -1, - reinterpret_cast(&atAddress), p, ZT_PROTO_MIN_PACKET_LENGTH, 0); + ctx.cb.wirePacketSendFunction(reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, -1, reinterpret_cast(&atAddress), p, ZT_PROTO_MIN_PACKET_LENGTH, 0); return ZT_PROTO_MIN_PACKET_LENGTH; } } @@ -643,9 +597,7 @@ void Peer::m_deriveSecondaryIdentityKeys() noexcept KBKDFHMACSHA384(m_identityKey.key(), ZT_KBKDF_LABEL_PACKET_HMAC, 0, 0, m_helloMacKey); } -unsigned int Peer::m_hello( - const Context &ctx, const CallContext &cc, int64_t localSocket, const InetAddress &atAddress, - const bool forceNewKey) +unsigned int Peer::m_hello(const Context &ctx, const CallContext &cc, int64_t localSocket, const InetAddress &atAddress, const bool forceNewKey) { // assumes m_lock is at least locked for reading @@ -694,7 +646,7 @@ unsigned int Peer::m_hello( // Initialize packet and add basic fields like identity and sent-to address. Buf outp; const uint64_t packetId = m_identityKey.nextMessage(ctx.identity.address(), m_id.address()); - int ii = Protocol::newPacket(outp, packetId, m_id.address(), ctx.identity.address(), Protocol::VERB_HELLO); + int ii = Protocol::newPacket(outp, packetId, m_id.address(), ctx.identity.address(), Protocol::VERB_HELLO); outp.wI8(ii, ZT_PROTO_VERSION); outp.wI8(ii, ZEROTIER_VERSION_MAJOR); outp.wI8(ii, ZEROTIER_VERSION_MINOR); @@ -746,19 +698,12 @@ unsigned int Peer::m_hello( Protocol::salsa2012DeriveKey(m_identityKey.key(), perPacketKey, outp, ii); Salsa20(perPacketKey, &packetId).crypt12(Utils::ZERO256, polyKey, sizeof(polyKey)); Poly1305 p1305(polyKey); - p1305.update( - outp.unsafeData + ZT_PROTO_PACKET_ENCRYPTED_SECTION_START, ii - ZT_PROTO_PACKET_ENCRYPTED_SECTION_START); + p1305.update(outp.unsafeData + ZT_PROTO_PACKET_ENCRYPTED_SECTION_START, ii - ZT_PROTO_PACKET_ENCRYPTED_SECTION_START); uint64_t polyMac[2]; p1305.finish(polyMac); Utils::storeMachineEndian(outp.unsafeData + ZT_PROTO_PACKET_MAC_INDEX, polyMac[0]); - return (likely( - ctx.cb.wirePacketSendFunction( - reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, localSocket, - reinterpret_cast(&atAddress), outp.unsafeData, ii, 0) - == 0)) - ? (unsigned int)ii - : 0U; + return (likely(ctx.cb.wirePacketSendFunction(reinterpret_cast(ctx.node), ctx.uPtr, cc.tPtr, localSocket, reinterpret_cast(&atAddress), outp.unsafeData, ii, 0) == 0)) ? (unsigned int)ii : 0U; } } // namespace ZeroTier diff --git a/core/Peer.hpp b/core/Peer.hpp index c925a3882..0553ae3f7 100644 --- a/core/Peer.hpp +++ b/core/Peer.hpp @@ -31,9 +31,7 @@ #include "SymmetricKey.hpp" #include "Utils.hpp" -#define ZT_PEER_MARSHAL_SIZE_MAX \ - (1 + ZT_ADDRESS_LENGTH + ZT_SYMMETRIC_KEY_SIZE + ZT_IDENTITY_MARSHAL_SIZE_MAX + 1 + ZT_LOCATOR_MARSHAL_SIZE_MAX \ - + (2 * 4) + 2) +#define ZT_PEER_MARSHAL_SIZE_MAX (1 + ZT_ADDRESS_LENGTH + ZT_SYMMETRIC_KEY_SIZE + ZT_IDENTITY_MARSHAL_SIZE_MAX + 1 + ZT_LOCATOR_MARSHAL_SIZE_MAX + (2 * 4) + 2) #define ZT_PEER_DEDUP_BUFFER_SIZE 1024 #define ZT_PEER_DEDUP_BUFFER_MASK 1023U @@ -121,9 +119,7 @@ class Peer { * @param verb Packet verb * @param inReVerb In-reply verb for OK or ERROR verbs */ - void received( - const Context &ctx, const CallContext &cc, const SharedPtr &path, unsigned int hops, uint64_t packetId, - unsigned int payloadLength, Protocol::Verb verb, Protocol::Verb inReVerb); + void received(const Context &ctx, const CallContext &cc, const SharedPtr &path, unsigned int hops, uint64_t packetId, unsigned int payloadLength, Protocol::Verb verb, Protocol::Verb inReVerb); /** * Log sent data @@ -141,20 +137,14 @@ class Peer { * * @param bytes Number of bytes relayed */ - ZT_INLINE void relayed(const CallContext &cc, const unsigned int bytes) noexcept - { - m_relayedMeter.log(cc.ticks, bytes); - } + ZT_INLINE void relayed(const CallContext &cc, const unsigned int bytes) noexcept { m_relayedMeter.log(cc.ticks, bytes); } /** * Get the current best direct path or NULL if none * * @return Current best path or NULL if there is no direct path */ - ZT_INLINE SharedPtr path(const CallContext &cc) noexcept - { - return SharedPtr(reinterpret_cast(m_bestPath.load(std::memory_order_acquire))); - } + ZT_INLINE SharedPtr path(const CallContext &cc) noexcept { return SharedPtr(reinterpret_cast(m_bestPath.load(std::memory_order_acquire))); } /** * Send data to this peer over a specific path only @@ -163,9 +153,7 @@ class Peer { * @param len Length in bytes * @param via Path over which to send data (may or may not be an already-learned path for this peer) */ - ZT_INLINE void send( - const Context &ctx, const CallContext &cc, const void *data, unsigned int len, - const SharedPtr &via) noexcept + ZT_INLINE void send(const Context &ctx, const CallContext &cc, const void *data, unsigned int len, const SharedPtr &via) noexcept { via->send(ctx, cc, data, len); sent(cc, len); @@ -267,10 +255,7 @@ class Peer { /** * @return Current best key: either the latest ephemeral or the identity key */ - ZT_INLINE SymmetricKey &key() noexcept - { - return *reinterpret_cast(m_key.load(std::memory_order_relaxed)); - } + ZT_INLINE SymmetricKey &key() noexcept { return *reinterpret_cast(m_key.load(std::memory_order_relaxed)); } /** * Get keys other than a key we have already tried. @@ -283,8 +268,7 @@ class Peer { * @param notYetTried All keys known (long lived or session) other than alreadyTried * @return Number of pointers written to notYetTried[] */ - ZT_INLINE int getOtherKeys( - const SymmetricKey *const alreadyTried, SymmetricKey *notYetTried[ZT_PEER_EPHEMERAL_KEY_COUNT_MAX]) noexcept + ZT_INLINE int getOtherKeys(const SymmetricKey *const alreadyTried, SymmetricKey *notYetTried[ZT_PEER_EPHEMERAL_KEY_COUNT_MAX]) noexcept { RWMutex::RLock l(m_lock); int cnt = 0; @@ -320,8 +304,7 @@ class Peer { * @param vmin Minor version * @param vrev Revision */ - ZT_INLINE void - setRemoteVersion(unsigned int vproto, unsigned int vmaj, unsigned int vmin, unsigned int vrev) noexcept + ZT_INLINE void setRemoteVersion(unsigned int vproto, unsigned int vmaj, unsigned int vmin, unsigned int vrev) noexcept { RWMutex::Lock l(m_lock); m_vProto = (uint16_t)vproto; @@ -423,12 +406,7 @@ class Peer { * @param packetId Packet ID to check/flag * @return True if this is a duplicate */ - ZT_INLINE bool deduplicateIncomingPacket(const uint64_t packetId) noexcept - { - return m_dedup[Utils::hash32((uint32_t)packetId) & ZT_PEER_DEDUP_BUFFER_MASK].exchange( - packetId, std::memory_order_relaxed) - == packetId; - } + ZT_INLINE bool deduplicateIncomingPacket(const uint64_t packetId) noexcept { return m_dedup[Utils::hash32((uint32_t)packetId) & ZT_PEER_DEDUP_BUFFER_MASK].exchange(packetId, std::memory_order_relaxed) == packetId; } private: struct p_EphemeralPublic { @@ -437,9 +415,7 @@ class Peer { uint8_t p384Public[ZT_ECC384_PUBLIC_KEY_SIZE]; }; - static_assert( - sizeof(p_EphemeralPublic) == (1 + ZT_C25519_ECDH_PUBLIC_KEY_SIZE + ZT_ECC384_PUBLIC_KEY_SIZE), - "p_EphemeralPublic has extra padding"); + static_assert(sizeof(p_EphemeralPublic) == (1 + ZT_C25519_ECDH_PUBLIC_KEY_SIZE + ZT_ECC384_PUBLIC_KEY_SIZE), "p_EphemeralPublic has extra padding"); struct p_EphemeralPrivate { ZT_INLINE p_EphemeralPrivate() noexcept : creationTime(-1) {} @@ -462,12 +438,9 @@ class Peer { }; void m_prioritizePaths(const CallContext &cc); - unsigned int m_sendProbe( - const Context &ctx, const CallContext &cc, int64_t localSocket, const InetAddress &atAddress, - const uint16_t *ports, unsigned int numPorts); + unsigned int m_sendProbe(const Context &ctx, const CallContext &cc, int64_t localSocket, const InetAddress &atAddress, const uint16_t *ports, unsigned int numPorts); void m_deriveSecondaryIdentityKeys() noexcept; - unsigned int m_hello( - const Context &ctx, const CallContext &cc, int64_t localSocket, const InetAddress &atAddress, bool forceNewKey); + unsigned int m_hello(const Context &ctx, const CallContext &cc, int64_t localSocket, const InetAddress &atAddress, bool forceNewKey); // Guards all fields except those otherwise indicated (and atomics of course). RWMutex m_lock; diff --git a/core/Poly1305.cpp b/core/Poly1305.cpp index c59739b74..8558f8d90 100644 --- a/core/Poly1305.cpp +++ b/core/Poly1305.cpp @@ -309,21 +309,11 @@ void poly1305_blocks(poly1305_state_internal_t *st, const unsigned char *m, size h4 += (U8TO32(m + 12) >> 8) | hibit; /* h *= r */ - unsigned long long d0 = ((unsigned long long)h0 * r0) + ((unsigned long long)h1 * s4) - + ((unsigned long long)h2 * s3) + ((unsigned long long)h3 * s2) - + ((unsigned long long)h4 * s1); - unsigned long long d1 = ((unsigned long long)h0 * r1) + ((unsigned long long)h1 * r0) - + ((unsigned long long)h2 * s4) + ((unsigned long long)h3 * s3) - + ((unsigned long long)h4 * s2); - unsigned long long d2 = ((unsigned long long)h0 * r2) + ((unsigned long long)h1 * r1) - + ((unsigned long long)h2 * r0) + ((unsigned long long)h3 * s4) - + ((unsigned long long)h4 * s3); - unsigned long long d3 = ((unsigned long long)h0 * r3) + ((unsigned long long)h1 * r2) - + ((unsigned long long)h2 * r1) + ((unsigned long long)h3 * r0) - + ((unsigned long long)h4 * s4); - unsigned long long d4 = ((unsigned long long)h0 * r4) + ((unsigned long long)h1 * r3) - + ((unsigned long long)h2 * r2) + ((unsigned long long)h3 * r1) - + ((unsigned long long)h4 * r0); + unsigned long long d0 = ((unsigned long long)h0 * r0) + ((unsigned long long)h1 * s4) + ((unsigned long long)h2 * s3) + ((unsigned long long)h3 * s2) + ((unsigned long long)h4 * s1); + unsigned long long d1 = ((unsigned long long)h0 * r1) + ((unsigned long long)h1 * r0) + ((unsigned long long)h2 * s4) + ((unsigned long long)h3 * s3) + ((unsigned long long)h4 * s2); + unsigned long long d2 = ((unsigned long long)h0 * r2) + ((unsigned long long)h1 * r1) + ((unsigned long long)h2 * r0) + ((unsigned long long)h3 * s4) + ((unsigned long long)h4 * s3); + unsigned long long d3 = ((unsigned long long)h0 * r3) + ((unsigned long long)h1 * r2) + ((unsigned long long)h2 * r1) + ((unsigned long long)h3 * r0) + ((unsigned long long)h4 * s4); + unsigned long long d4 = ((unsigned long long)h0 * r4) + ((unsigned long long)h1 * r3) + ((unsigned long long)h2 * r2) + ((unsigned long long)h3 * r1) + ((unsigned long long)h4 * r0); /* (partial) h %= p */ unsigned long c = (unsigned long)(d0 >> 26); @@ -511,15 +501,8 @@ void Poly1305::init(const void *key) noexcept poly1305_init(reinterpret_cast(&ctx), reinterpret_cast(key)); } -void Poly1305::update(const void *data, unsigned int len) noexcept -{ - poly1305_update( - reinterpret_cast(&ctx), reinterpret_cast(data), (size_t)len); -} +void Poly1305::update(const void *data, unsigned int len) noexcept { poly1305_update(reinterpret_cast(&ctx), reinterpret_cast(data), (size_t)len); } -void Poly1305::finish(void *auth) noexcept -{ - poly1305_finish(reinterpret_cast(&ctx), reinterpret_cast(auth)); -} +void Poly1305::finish(void *auth) noexcept { poly1305_finish(reinterpret_cast(&ctx), reinterpret_cast(auth)); } } // namespace ZeroTier diff --git a/core/Poly1305.hpp b/core/Poly1305.hpp index 7ce05bd88..194e12692 100644 --- a/core/Poly1305.hpp +++ b/core/Poly1305.hpp @@ -34,8 +34,7 @@ class Poly1305 { void update(const void *data, unsigned int len) noexcept; void finish(void *auth) noexcept; - static ZT_INLINE void - compute(void *const auth, const void *const data, const unsigned int len, const void *const key) noexcept + static ZT_INLINE void compute(void *const auth, const void *const data, const unsigned int len, const void *const key) noexcept { Poly1305 p(key); p.update(data, len); diff --git a/core/Protocol.hpp b/core/Protocol.hpp index 2e775fbed..d16bb26d3 100644 --- a/core/Protocol.hpp +++ b/core/Protocol.hpp @@ -253,9 +253,7 @@ #define ZT_PROTO_HELLO_NODE_META_EPHEMERAL_ACK "E" static_assert(ZT_PROTO_MAX_PACKET_LENGTH < ZT_BUF_MEM_SIZE, "maximum packet length won't fit in Buf"); -static_assert( - ZT_PROTO_PACKET_ENCRYPTED_SECTION_START == (ZT_PROTO_MIN_PACKET_LENGTH - 1), - "encrypted packet section must start right before protocol verb at one less than minimum packet size"); +static_assert(ZT_PROTO_PACKET_ENCRYPTED_SECTION_START == (ZT_PROTO_MIN_PACKET_LENGTH - 1), "encrypted packet section must start right before protocol verb at one less than minimum packet size"); namespace ZeroTier { namespace Protocol { @@ -746,15 +744,7 @@ enum ErrorCode { * This allows the node to know whether this is a normal frame or one generated * by a special tee or redirect type flow rule. */ -enum ExtFrameSubtype { - EXT_FRAME_SUBTYPE_NORMAL = 0x0, - EXT_FRAME_SUBTYPE_TEE_OUTBOUND = 0x1, - EXT_FRAME_SUBTYPE_REDIRECT_OUTBOUND = 0x2, - EXT_FRAME_SUBTYPE_WATCH_OUTBOUND = 0x3, - EXT_FRAME_SUBTYPE_TEE_INBOUND = 0x4, - EXT_FRAME_SUBTYPE_REDIRECT_INBOUND = 0x5, - EXT_FRAME_SUBTYPE_WATCH_INBOUND = 0x6 -}; +enum ExtFrameSubtype { EXT_FRAME_SUBTYPE_NORMAL = 0x0, EXT_FRAME_SUBTYPE_TEE_OUTBOUND = 0x1, EXT_FRAME_SUBTYPE_REDIRECT_OUTBOUND = 0x2, EXT_FRAME_SUBTYPE_WATCH_OUTBOUND = 0x3, EXT_FRAME_SUBTYPE_TEE_INBOUND = 0x4, EXT_FRAME_SUBTYPE_REDIRECT_INBOUND = 0x5, EXT_FRAME_SUBTYPE_WATCH_INBOUND = 0x6 }; /** * EXT_FRAME flags @@ -793,8 +783,7 @@ enum NetworkConfigFlag { * @param in Input key (32 bytes) * @param out Output buffer (32 bytes) */ -static ZT_INLINE void salsa2012DeriveKey( - const uint8_t *const in, uint8_t *const out, const Buf &packet, const unsigned int packetSize) noexcept +static ZT_INLINE void salsa2012DeriveKey(const uint8_t *const in, uint8_t *const out, const Buf &packet, const unsigned int packetSize) noexcept { // IV and source/destination addresses. Using the addresses divides the // key space into two halves-- A->B and B->A (since order will change). @@ -802,12 +791,9 @@ static ZT_INLINE void salsa2012DeriveKey( for (int i = 0; i < 18; ++i) out[i] = in[i] ^ packet.unsafeData[i]; #else - *reinterpret_cast(out) = - *reinterpret_cast(in) ^ *reinterpret_cast(packet.unsafeData); - *reinterpret_cast(out + 8) = - *reinterpret_cast(in + 8) ^ *reinterpret_cast(packet.unsafeData + 8); - *reinterpret_cast(out + 16) = - *reinterpret_cast(in + 16) ^ *reinterpret_cast(packet.unsafeData + 16); + *reinterpret_cast(out) = *reinterpret_cast(in) ^ *reinterpret_cast(packet.unsafeData); + *reinterpret_cast(out + 8) = *reinterpret_cast(in + 8) ^ *reinterpret_cast(packet.unsafeData + 8); + *reinterpret_cast(out + 16) = *reinterpret_cast(in + 16) ^ *reinterpret_cast(packet.unsafeData + 16); #endif // Flags, but with hop count masked off. Hop count is altered by forwarding @@ -840,8 +826,7 @@ static ZT_INLINE void salsa2012DeriveKey( * @param verb Protocol verb * @return Index of packet start */ -static ZT_INLINE int newPacket( - uint8_t pkt[28], const uint64_t packetId, const Address destination, const Address source, const Verb verb) noexcept +static ZT_INLINE int newPacket(uint8_t pkt[28], const uint64_t packetId, const Address destination, const Address source, const Verb verb) noexcept { Utils::storeMachineEndian(pkt + ZT_PROTO_PACKET_ID_INDEX, packetId); destination.copyTo(pkt + ZT_PROTO_PACKET_DESTINATION_INDEX); @@ -852,11 +837,7 @@ static ZT_INLINE int newPacket( return ZT_PROTO_PACKET_VERB_INDEX + 1; } -static ZT_INLINE int -newPacket(Buf &pkt, const uint64_t packetId, const Address destination, const Address source, const Verb verb) noexcept -{ - return newPacket(pkt.unsafeData, packetId, destination, source, verb); -} +static ZT_INLINE int newPacket(Buf &pkt, const uint64_t packetId, const Address destination, const Address source, const Verb verb) noexcept { return newPacket(pkt.unsafeData, packetId, destination, source, verb); } /** * Encrypt and compute packet MAC @@ -867,8 +848,7 @@ newPacket(Buf &pkt, const uint64_t packetId, const Address destination, const Ad * @param cipherSuite Cipher suite to use for AEAD encryption or just MAC * @return Packet ID of packet (which may change!) */ -static ZT_INLINE uint64_t -armor(uint8_t *const pkt, const int packetSize, const SymmetricKey &key, const uint8_t cipherSuite) noexcept +static ZT_INLINE uint64_t armor(uint8_t *const pkt, const int packetSize, const SymmetricKey &key, const uint8_t cipherSuite) noexcept { // TODO #if 0 diff --git a/core/RevocationCredential.hpp b/core/RevocationCredential.hpp index c11eaf9da..92679c17f 100644 --- a/core/RevocationCredential.hpp +++ b/core/RevocationCredential.hpp @@ -53,8 +53,7 @@ class RevocationCredential : public Credential { * @param ct Credential type being revoked */ ZT_INLINE RevocationCredential( - const uint32_t i, const uint64_t nwid, const uint32_t cid, const uint64_t thr, const uint64_t fl, - const Address &tgt, + const uint32_t i, const uint64_t nwid, const uint32_t cid, const uint64_t thr, const uint64_t fl, const Address &tgt, const ZT_CredentialType ct) noexcept : // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init) m_id(i) @@ -101,10 +100,7 @@ class RevocationCredential : public Credential { * @param RR Runtime environment to provide for peer lookup, etc. * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call */ - ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const noexcept - { - return s_verify(ctx, cc, *this); - } + ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const noexcept { return s_verify(ctx, cc, *this); } static constexpr int marshalSizeMax() noexcept { return ZT_REVOCATION_MARSHAL_SIZE_MAX; } diff --git a/core/SHA512.cpp b/core/SHA512.cpp index ccddf6fcc..9d0d82067 100644 --- a/core/SHA512.cpp +++ b/core/SHA512.cpp @@ -16,24 +16,12 @@ struct sha512_state { uint8_t buf[128]; }; -static const uint64_t K[80] = { - 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, - 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, - 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, - 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, - 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, 0x983e5152ee66dfabULL, - 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, - 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, - 0x53380d139d95b3dfULL, 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, - 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL, - 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, - 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, - 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, - 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, 0xca273eceea26619cULL, - 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, - 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, - 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL -}; +static const uint64_t K[80] = { 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, + 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, + 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, + 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, + 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, + 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL }; #define STORE64H(x, y) Utils::storeBigEndian(y, x) #define LOAD64H(x, y) x = Utils::loadBigEndian(y) @@ -60,10 +48,10 @@ static ZT_INLINE void sha512_compress(sha512_state *const md, uint8_t *const buf for (i = 16; i < 80; i++) W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; -#define RND(a, b, c, d, e, f, g, h, i) \ - t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ - t1 = Sigma0(a) + Maj(a, b, c); \ - d += t0; \ +#define RND(a, b, c, d, e, f, g, h, i) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ h = t0 + t1; for (i = 0; i < 80; i += 8) { @@ -246,9 +234,7 @@ void HMACSHA384(const uint8_t key[ZT_SYMMETRIC_KEY_SIZE], const void *msg, const SHA384(mac, outer, 176); } -void KBKDFHMACSHA384( - const uint8_t key[ZT_SYMMETRIC_KEY_SIZE], const char label, const char context, const uint32_t iter, - uint8_t out[ZT_SYMMETRIC_KEY_SIZE]) +void KBKDFHMACSHA384(const uint8_t key[ZT_SYMMETRIC_KEY_SIZE], const char label, const char context, const uint32_t iter, uint8_t out[ZT_SYMMETRIC_KEY_SIZE]) { uint8_t kbkdfMsg[13]; diff --git a/core/SHA512.hpp b/core/SHA512.hpp index 97b517cd7..591476194 100644 --- a/core/SHA512.hpp +++ b/core/SHA512.hpp @@ -81,9 +81,7 @@ void HMACSHA384(const uint8_t key[ZT_SYMMETRIC_KEY_SIZE], const void *msg, unsig * @param iter Key iteration for generation of multiple keys for the same label/context * @param out Output to receive derived key */ -void KBKDFHMACSHA384( - const uint8_t key[ZT_SYMMETRIC_KEY_SIZE], char label, char context, uint32_t iter, - uint8_t out[ZT_SYMMETRIC_KEY_SIZE]); +void KBKDFHMACSHA384(const uint8_t key[ZT_SYMMETRIC_KEY_SIZE], char label, char context, uint32_t iter, uint8_t out[ZT_SYMMETRIC_KEY_SIZE]); } // namespace ZeroTier diff --git a/core/Salsa20.cpp b/core/Salsa20.cpp index 5190eeea8..5d53bbdd3 100644 --- a/core/Salsa20.cpp +++ b/core/Salsa20.cpp @@ -19,8 +19,7 @@ #if __BYTE_ORDER == __LITTLE_ENDIAN #ifdef ZT_NO_UNALIGNED_ACCESS // Slower version that does not use type punning -#define U8TO32_LITTLE(p) \ - (((uint32_t)(p)[0]) | ((uint32_t)(p)[1] << 8) | ((uint32_t)(p)[2] << 16) | ((uint32_t)(p)[3] << 24)) +#define U8TO32_LITTLE(p) (((uint32_t)(p)[0]) | ((uint32_t)(p)[1] << 8) | ((uint32_t)(p)[2] << 16) | ((uint32_t)(p)[3] << 24)) static ZT_INLINE void U32TO8_LITTLE(uint8_t *const c, const uint32_t v) { c[0] = (uint8_t)v; @@ -40,8 +39,7 @@ static ZT_INLINE void U32TO8_LITTLE(uint8_t *const c, const uint32_t v) #define U32TO8_LITTLE(c, v) *((uint32_t *)((void *)(c))) = __builtin_bswap32((v)) #else // no __GNUC__ // Otherwise do it the slow, manual way on BE machines -#define U8TO32_LITTLE(p) \ - (((uint32_t)(p)[0]) | ((uint32_t)(p)[1] << 8) | ((uint32_t)(p)[2] << 16) | ((uint32_t)(p)[3] << 24)) +#define U8TO32_LITTLE(p) (((uint32_t)(p)[0]) | ((uint32_t)(p)[1] << 8) | ((uint32_t)(p)[2] << 16) | ((uint32_t)(p)[3] << 24)) static ZT_INLINE void U32TO8_LITTLE(uint8_t *const c, const uint32_t v) { c[0] = (uint8_t)v; @@ -117,8 +115,7 @@ union p_SalsaState { uint32_t i[16]; }; -template -static ZT_INLINE void p_salsaCrypt(p_SalsaState *const state, const uint8_t *m, uint8_t *c, unsigned int bytes) noexcept +template static ZT_INLINE void p_salsaCrypt(p_SalsaState *const state, const uint8_t *m, uint8_t *c, unsigned int bytes) noexcept { if (unlikely(bytes == 0)) return; @@ -208,18 +205,10 @@ static ZT_INLINE void p_salsaCrypt(p_SalsaState *const state, const uint8_t *m, k02 = _mm_shuffle_epi32(k02, _MM_SHUFFLE(0, 1, 2, 3)); k13 = _mm_shuffle_epi32(k13, _MM_SHUFFLE(0, 1, 2, 3)); - _mm_storeu_si128( - reinterpret_cast<__m128i *>(c), - _mm_xor_si128(_mm_unpackhi_epi64(k02, k20), _mm_loadu_si128(reinterpret_cast(m)))); - _mm_storeu_si128( - reinterpret_cast<__m128i *>(c) + 1, - _mm_xor_si128(_mm_unpackhi_epi64(k13, k31), _mm_loadu_si128(reinterpret_cast(m) + 1))); - _mm_storeu_si128( - reinterpret_cast<__m128i *>(c) + 2, - _mm_xor_si128(_mm_unpacklo_epi64(k20, k02), _mm_loadu_si128(reinterpret_cast(m) + 2))); - _mm_storeu_si128( - reinterpret_cast<__m128i *>(c) + 3, - _mm_xor_si128(_mm_unpacklo_epi64(k31, k13), _mm_loadu_si128(reinterpret_cast(m) + 3))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(c), _mm_xor_si128(_mm_unpackhi_epi64(k02, k20), _mm_loadu_si128(reinterpret_cast(m)))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(c) + 1, _mm_xor_si128(_mm_unpackhi_epi64(k13, k31), _mm_loadu_si128(reinterpret_cast(m) + 1))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(c) + 2, _mm_xor_si128(_mm_unpacklo_epi64(k20, k02), _mm_loadu_si128(reinterpret_cast(m) + 2))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(c) + 3, _mm_xor_si128(_mm_unpacklo_epi64(k31, k13), _mm_loadu_si128(reinterpret_cast(m) + 3))); X0 = X0s; X1 = X1s; @@ -338,18 +327,8 @@ static ZT_INLINE void p_salsaCrypt(p_SalsaState *const state, const uint8_t *m, } } -void Salsa20::crypt12(const void *in, void *out, unsigned int bytes) noexcept -{ - p_salsaCrypt<12>( - reinterpret_cast(&_state), reinterpret_cast(in), - reinterpret_cast(out), bytes); -} +void Salsa20::crypt12(const void *in, void *out, unsigned int bytes) noexcept { p_salsaCrypt<12>(reinterpret_cast(&_state), reinterpret_cast(in), reinterpret_cast(out), bytes); } -void Salsa20::crypt20(const void *in, void *out, unsigned int bytes) noexcept -{ - p_salsaCrypt<20>( - reinterpret_cast(&_state), reinterpret_cast(in), - reinterpret_cast(out), bytes); -} +void Salsa20::crypt20(const void *in, void *out, unsigned int bytes) noexcept { p_salsaCrypt<20>(reinterpret_cast(&_state), reinterpret_cast(in), reinterpret_cast(out), bytes); } } // namespace ZeroTier diff --git a/core/SelfAwareness.cpp b/core/SelfAwareness.cpp index bd7e1967f..ff8ace5ab 100644 --- a/core/SelfAwareness.cpp +++ b/core/SelfAwareness.cpp @@ -27,22 +27,17 @@ namespace ZeroTier { SelfAwareness::SelfAwareness(const Context &ctx) : m_ctx(ctx) {} -void SelfAwareness::iam( - const CallContext &cc, const Identity &reporter, const int64_t receivedOnLocalSocket, - const InetAddress &reporterPhysicalAddress, const InetAddress &myPhysicalAddress, bool trusted) +void SelfAwareness::iam(const CallContext &cc, const Identity &reporter, const int64_t receivedOnLocalSocket, const InetAddress &reporterPhysicalAddress, const InetAddress &myPhysicalAddress, bool trusted) { const InetAddress::IpScope scope = myPhysicalAddress.ipScope(); - if ((scope != reporterPhysicalAddress.ipScope()) || (scope == ZT_IP_SCOPE_NONE) || (scope == ZT_IP_SCOPE_LOOPBACK) - || (scope == ZT_IP_SCOPE_MULTICAST)) + if ((scope != reporterPhysicalAddress.ipScope()) || (scope == ZT_IP_SCOPE_NONE) || (scope == ZT_IP_SCOPE_LOOPBACK) || (scope == ZT_IP_SCOPE_MULTICAST)) return; Mutex::Lock l(m_phy_l); - p_PhySurfaceEntry &entry = - m_phy[p_PhySurfaceKey(reporter.address(), receivedOnLocalSocket, reporterPhysicalAddress, scope)]; + p_PhySurfaceEntry &entry = m_phy[p_PhySurfaceKey(reporter.address(), receivedOnLocalSocket, reporterPhysicalAddress, scope)]; - if ((trusted) && ((cc.ticks - entry.timestampTicks) < ZT_SELFAWARENESS_ENTRY_TIMEOUT) - && (!entry.mySurface.ipsEqual(myPhysicalAddress))) { + if ((trusted) && ((cc.ticks - entry.timestampTicks) < ZT_SELFAWARENESS_ENTRY_TIMEOUT) && (!entry.mySurface.ipsEqual(myPhysicalAddress))) { // Changes to external surface reported by trusted peers causes path reset in this scope entry.mySurface = myPhysicalAddress; entry.timestampTicks = cc.ticks; @@ -64,8 +59,7 @@ void SelfAwareness::iam( for (Vector>::const_iterator p(peers.begin()); p != peers.end(); ++p) (*p)->resetWithinScope(m_ctx, cc, (InetAddress::IpScope)scope, myPhysicalAddress.as.sa.sa_family); - m_ctx.t->resettingPathsInScope( - cc, 0x9afff100, reporter, reporterPhysicalAddress, entry.mySurface, myPhysicalAddress, scope); + m_ctx.t->resettingPathsInScope(cc, 0x9afff100, reporter, reporterPhysicalAddress, entry.mySurface, myPhysicalAddress, scope); } else { // Otherwise just update DB to use to determine external surface info diff --git a/core/SelfAwareness.hpp b/core/SelfAwareness.hpp index 82caa0ae5..c4801f7f1 100644 --- a/core/SelfAwareness.hpp +++ b/core/SelfAwareness.hpp @@ -44,9 +44,7 @@ class SelfAwareness { * @param myPhysicalAddress Physical address that peer says we have * @param trusted True if this peer is trusted as an authority to inform us of external address changes */ - void - iam(const CallContext &cc, const Identity &reporter, int64_t receivedOnLocalSocket, - const InetAddress &reporterPhysicalAddress, const InetAddress &myPhysicalAddress, bool trusted); + void iam(const CallContext &cc, const Identity &reporter, int64_t receivedOnLocalSocket, const InetAddress &reporterPhysicalAddress, const InetAddress &myPhysicalAddress, bool trusted); /** * Clean up database periodically @@ -70,25 +68,11 @@ class SelfAwareness { ZT_INLINE p_PhySurfaceKey() noexcept {} ZT_INLINE - p_PhySurfaceKey(const Address &r, const int64_t rol, const InetAddress &ra, InetAddress::IpScope s) noexcept - : reporter(r) - , receivedOnLocalSocket(rol) - , reporterPhysicalAddress(ra) - , scope(s) - { - } + p_PhySurfaceKey(const Address &r, const int64_t rol, const InetAddress &ra, InetAddress::IpScope s) noexcept : reporter(r), receivedOnLocalSocket(rol), reporterPhysicalAddress(ra), scope(s) {} - ZT_INLINE unsigned long hashCode() const noexcept - { - return ((unsigned long)reporter.toInt() + (unsigned long)receivedOnLocalSocket + (unsigned long)scope); - } + ZT_INLINE unsigned long hashCode() const noexcept { return ((unsigned long)reporter.toInt() + (unsigned long)receivedOnLocalSocket + (unsigned long)scope); } - ZT_INLINE bool operator==(const p_PhySurfaceKey &k) const noexcept - { - return ( - (reporter == k.reporter) && (receivedOnLocalSocket == k.receivedOnLocalSocket) - && (reporterPhysicalAddress == k.reporterPhysicalAddress) && (scope == k.scope)); - } + ZT_INLINE bool operator==(const p_PhySurfaceKey &k) const noexcept { return ((reporter == k.reporter) && (receivedOnLocalSocket == k.receivedOnLocalSocket) && (reporterPhysicalAddress == k.reporterPhysicalAddress) && (scope == k.scope)); } ZT_INLINE bool operator!=(const p_PhySurfaceKey &k) const noexcept { return (!(*this == k)); } @@ -121,12 +105,7 @@ class SelfAwareness { ZT_INLINE p_PhySurfaceEntry() noexcept : mySurface(), timestampTicks(0), trusted(false) {} - ZT_INLINE p_PhySurfaceEntry(const InetAddress &a, const int64_t t) noexcept - : mySurface(a) - , timestampTicks(t) - , trusted(false) - { - } + ZT_INLINE p_PhySurfaceEntry(const InetAddress &a, const int64_t t) noexcept : mySurface(a), timestampTicks(t), trusted(false) {} }; const Context &m_ctx; diff --git a/core/SharedPtr.hpp b/core/SharedPtr.hpp index bb6dd54d2..d4c2ebf22 100644 --- a/core/SharedPtr.hpp +++ b/core/SharedPtr.hpp @@ -135,34 +135,19 @@ template class SharedPtr : public TriviallyCopyable { } } - ZT_INLINE unsigned long hashCode() const noexcept - { - return (unsigned long)((uintptr_t)m_ptr + (uintptr_t)Utils::hash32((uint32_t)m_ptr)); - } + ZT_INLINE unsigned long hashCode() const noexcept { return (unsigned long)((uintptr_t)m_ptr + (uintptr_t)Utils::hash32((uint32_t)m_ptr)); } ZT_INLINE bool operator==(const SharedPtr &sp) const noexcept { return (m_ptr == sp.m_ptr); } ZT_INLINE bool operator!=(const SharedPtr &sp) const noexcept { return (m_ptr != sp.m_ptr); } - ZT_INLINE bool operator>(const SharedPtr &sp) const noexcept - { - return (reinterpret_cast(m_ptr) > reinterpret_cast(sp.m_ptr)); - } + ZT_INLINE bool operator>(const SharedPtr &sp) const noexcept { return (reinterpret_cast(m_ptr) > reinterpret_cast(sp.m_ptr)); } - ZT_INLINE bool operator<(const SharedPtr &sp) const noexcept - { - return (reinterpret_cast(m_ptr) < reinterpret_cast(sp.m_ptr)); - } + ZT_INLINE bool operator<(const SharedPtr &sp) const noexcept { return (reinterpret_cast(m_ptr) < reinterpret_cast(sp.m_ptr)); } - ZT_INLINE bool operator>=(const SharedPtr &sp) const noexcept - { - return (reinterpret_cast(m_ptr) >= reinterpret_cast(sp.m_ptr)); - } + ZT_INLINE bool operator>=(const SharedPtr &sp) const noexcept { return (reinterpret_cast(m_ptr) >= reinterpret_cast(sp.m_ptr)); } - ZT_INLINE bool operator<=(const SharedPtr &sp) const noexcept - { - return (reinterpret_cast(m_ptr) <= reinterpret_cast(sp.m_ptr)); - } + ZT_INLINE bool operator<=(const SharedPtr &sp) const noexcept { return (reinterpret_cast(m_ptr) <= reinterpret_cast(sp.m_ptr)); } private: ZT_INLINE T *m_acquire() const noexcept @@ -175,8 +160,7 @@ template class SharedPtr : public TriviallyCopyable { ZT_INLINE void m_release() const noexcept { if (likely(m_ptr != nullptr)) { - if (unlikely( - const_cast *>(&(m_ptr->__refCount))->fetch_sub(1, std::memory_order_release) <= 1)) + if (unlikely(const_cast *>(&(m_ptr->__refCount))->fetch_sub(1, std::memory_order_release) <= 1)) delete m_ptr; } } @@ -189,15 +173,9 @@ template class SharedPtr : public TriviallyCopyable { // Augment std::swap to speed up some operations with SharedPtr. namespace std { -template ZT_MAYBE_UNUSED ZT_INLINE void swap(ZeroTier::SharedPtr &a, ZeroTier::SharedPtr &b) noexcept -{ - a.swap(b); -} +template ZT_MAYBE_UNUSED ZT_INLINE void swap(ZeroTier::SharedPtr &a, ZeroTier::SharedPtr &b) noexcept { a.swap(b); } -template ZT_MAYBE_UNUSED ZT_INLINE void move(ZeroTier::SharedPtr &a, ZeroTier::SharedPtr &b) noexcept -{ - a.move(b); -} +template ZT_MAYBE_UNUSED ZT_INLINE void move(ZeroTier::SharedPtr &a, ZeroTier::SharedPtr &b) noexcept { a.move(b); } } // namespace std diff --git a/core/Store.hpp b/core/Store.hpp index 28ad18911..0f54f84b6 100644 --- a/core/Store.hpp +++ b/core/Store.hpp @@ -36,14 +36,12 @@ class Store { * @param idSize Size of object ID in qwords * @return Data or empty vector if not found */ - ZT_INLINE Vector - get(const CallContext &cc, ZT_StateObjectType type, const uint64_t *const id, unsigned int idSize) const + ZT_INLINE Vector get(const CallContext &cc, ZT_StateObjectType type, const uint64_t *const id, unsigned int idSize) const { Vector dv; void *data = nullptr; void (*freeFunc)(void *) = nullptr; - const int r = m_ctx.cb.stateGetFunction( - reinterpret_cast(m_ctx.node), m_ctx.uPtr, cc.tPtr, type, id, idSize, &data, &freeFunc); + const int r = m_ctx.cb.stateGetFunction(reinterpret_cast(m_ctx.node), m_ctx.uPtr, cc.tPtr, type, id, idSize, &data, &freeFunc); if (r > 0) dv.assign(reinterpret_cast(data), reinterpret_cast(data) + r); if ((data) && (freeFunc)) @@ -60,13 +58,7 @@ class Store { * @param data Data to store * @param len Length of data */ - ZT_INLINE void - put(const CallContext &cc, ZT_StateObjectType type, const uint64_t *const id, const unsigned int idSize, - const void *const data, const unsigned int len) noexcept - { - m_ctx.cb.statePutFunction( - reinterpret_cast(this), m_ctx.uPtr, cc.tPtr, type, id, idSize, data, (int)len); - } + ZT_INLINE void put(const CallContext &cc, ZT_StateObjectType type, const uint64_t *const id, const unsigned int idSize, const void *const data, const unsigned int len) noexcept { m_ctx.cb.statePutFunction(reinterpret_cast(this), m_ctx.uPtr, cc.tPtr, type, id, idSize, data, (int)len); } /** * Erase a state object from the object store @@ -75,12 +67,7 @@ class Store { * @param id Object ID * @param idSize Size of object ID in qwords */ - ZT_INLINE void - erase(const CallContext &cc, ZT_StateObjectType type, const uint64_t *const id, const unsigned int idSize) noexcept - { - m_ctx.cb.statePutFunction( - reinterpret_cast(this), m_ctx.uPtr, cc.tPtr, type, id, idSize, nullptr, -1); - } + ZT_INLINE void erase(const CallContext &cc, ZT_StateObjectType type, const uint64_t *const id, const unsigned int idSize) noexcept { m_ctx.cb.statePutFunction(reinterpret_cast(this), m_ctx.uPtr, cc.tPtr, type, id, idSize, nullptr, -1); } private: const Context &m_ctx; diff --git a/core/SymmetricKey.hpp b/core/SymmetricKey.hpp index 5b20771f8..079c846e0 100644 --- a/core/SymmetricKey.hpp +++ b/core/SymmetricKey.hpp @@ -40,23 +40,9 @@ class SymmetricKey { * @param ts Key timestamp * @param key Key (must be 48 bytes / 384 bits) */ - ZT_INLINE SymmetricKey(const int64_t ts, const void *const key) noexcept - : m_secret(key) - , m_ts(ts) - , m_initialNonce(Utils::getSecureRandomU64() >> 1U) - , m_cipher(key) - , m_nonce(m_initialNonce) - { - } + ZT_INLINE SymmetricKey(const int64_t ts, const void *const key) noexcept : m_secret(key), m_ts(ts), m_initialNonce(Utils::getSecureRandomU64() >> 1U), m_cipher(key), m_nonce(m_initialNonce) {} - ZT_INLINE SymmetricKey(const SymmetricKey &k) noexcept - : m_secret(k.m_secret) - , m_ts(k.m_ts) - , m_initialNonce(k.m_initialNonce) - , m_cipher(k.m_secret.data) - , m_nonce(k.m_nonce.load(std::memory_order_relaxed)) - { - } + ZT_INLINE SymmetricKey(const SymmetricKey &k) noexcept : m_secret(k.m_secret), m_ts(k.m_ts), m_initialNonce(k.m_initialNonce), m_cipher(k.m_secret.data), m_nonce(k.m_nonce.load(std::memory_order_relaxed)) {} ZT_INLINE ~SymmetricKey() noexcept { Utils::burn(m_secret.data, ZT_SYMMETRIC_KEY_SIZE); } @@ -92,10 +78,7 @@ class SymmetricKey { * @param receiver Receiving ZeroTier address * @return Next unique IV for next message */ - ZT_INLINE uint64_t nextMessage(const Address sender, const Address receiver) noexcept - { - return m_nonce.fetch_add(1, std::memory_order_relaxed) ^ (((uint64_t)(sender > receiver)) << 63U); - } + ZT_INLINE uint64_t nextMessage(const Address sender, const Address receiver) noexcept { return m_nonce.fetch_add(1, std::memory_order_relaxed) ^ (((uint64_t)(sender > receiver)) << 63U); } /** * Get the number of times this key has been used. diff --git a/core/TagCredential.hpp b/core/TagCredential.hpp index bc26c07cc..dadcadd3c 100644 --- a/core/TagCredential.hpp +++ b/core/TagCredential.hpp @@ -58,18 +58,7 @@ class TagCredential : public Credential { * @param id Tag ID * @param value Tag value */ - ZT_INLINE TagCredential( - const uint64_t nwid, const int64_t ts, const Address &issuedTo, const uint32_t id, - const uint32_t value) noexcept - : m_id(id) - , m_value(value) - , m_networkId(nwid) - , m_ts(ts) - , m_issuedTo(issuedTo) - , m_signedBy() - , m_signatureLength(0) - { - } + ZT_INLINE TagCredential(const uint64_t nwid, const int64_t ts, const Address &issuedTo, const uint32_t id, const uint32_t value) noexcept : m_id(id), m_value(value), m_networkId(nwid), m_ts(ts), m_issuedTo(issuedTo), m_signedBy(), m_signatureLength(0) {} ZT_INLINE uint32_t id() const noexcept { return m_id; } @@ -103,10 +92,7 @@ class TagCredential : public Credential { * @param RR Runtime environment to allow identity lookup for signedBy * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call */ - ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const noexcept - { - return s_verify(ctx, cc, *this); - } + ZT_INLINE Credential::VerifyResult verify(const Context &ctx, const CallContext &cc) const noexcept { return s_verify(ctx, cc, *this); } static constexpr int marshalSizeMax() noexcept { return ZT_TAG_MARSHAL_SIZE_MAX; } @@ -117,41 +103,23 @@ class TagCredential : public Credential { // Provides natural sort order by ID ZT_INLINE bool operator<(const TagCredential &t) const noexcept { return (m_id < t.m_id); } - ZT_INLINE bool operator==(const TagCredential &t) const noexcept - { - return (memcmp(this, &t, sizeof(TagCredential)) == 0); - } + ZT_INLINE bool operator==(const TagCredential &t) const noexcept { return (memcmp(this, &t, sizeof(TagCredential)) == 0); } - ZT_INLINE bool operator!=(const TagCredential &t) const noexcept - { - return (memcmp(this, &t, sizeof(TagCredential)) != 0); - } + ZT_INLINE bool operator!=(const TagCredential &t) const noexcept { return (memcmp(this, &t, sizeof(TagCredential)) != 0); } // For searching sorted arrays or lists of Tags by ID struct IdComparePredicate { - ZT_INLINE bool operator()(const TagCredential &a, const TagCredential &b) const noexcept - { - return (a.id() < b.id()); - } + ZT_INLINE bool operator()(const TagCredential &a, const TagCredential &b) const noexcept { return (a.id() < b.id()); } ZT_INLINE bool operator()(const uint32_t a, const TagCredential &b) const noexcept { return (a < b.id()); } ZT_INLINE bool operator()(const TagCredential &a, const uint32_t b) const noexcept { return (a.id() < b); } - ZT_INLINE bool operator()(const TagCredential *a, const TagCredential *b) const noexcept - { - return (a->id() < b->id()); - } + ZT_INLINE bool operator()(const TagCredential *a, const TagCredential *b) const noexcept { return (a->id() < b->id()); } - ZT_INLINE bool operator()(const TagCredential *a, const TagCredential &b) const noexcept - { - return (a->id() < b.id()); - } + ZT_INLINE bool operator()(const TagCredential *a, const TagCredential &b) const noexcept { return (a->id() < b.id()); } - ZT_INLINE bool operator()(const TagCredential &a, const TagCredential *b) const noexcept - { - return (a.id() < b->id()); - } + ZT_INLINE bool operator()(const TagCredential &a, const TagCredential *b) const noexcept { return (a.id() < b->id()); } ZT_INLINE bool operator()(const uint32_t a, const TagCredential *b) const noexcept { return (a < b->id()); } diff --git a/core/Tests.cpp b/core/Tests.cpp index 7d3c24e8a..fd7bff65c 100644 --- a/core/Tests.cpp +++ b/core/Tests.cpp @@ -104,220 +104,89 @@ static int64_t now() // Cryptographic tests vectors ---------------------------------------------------------------------------------------- -static const uint8_t ECC384_TV0_PUBLIC[49] = { 0x02, 0xed, 0xbc, 0xbb, 0x1f, 0x23, 0x9b, 0xbd, 0x9d, 0x3d, - 0x7c, 0xef, 0x6b, 0x37, 0xa3, 0x26, 0x69, 0xe9, 0x4d, 0xf4, - 0x26, 0x64, 0xfb, 0xac, 0x76, 0x40, 0xc2, 0x22, 0x21, 0xa6, - 0xa3, 0xdf, 0x8c, 0x96, 0x81, 0x76, 0x0f, 0x0e, 0x67, 0xab, - 0xd4, 0x51, 0x58, 0xb3, 0x15, 0x63, 0xfb, 0x49, 0x71 }; -static const uint8_t ECC384_TV0_PRIVATE[48] = { - 0x62, 0x93, 0x9b, 0x4a, 0x29, 0x3c, 0xc6, 0x86, 0x98, 0xc3, 0xd0, 0x7f, 0xb7, 0xff, 0x97, 0xa2, - 0xfb, 0xc9, 0x36, 0x8a, 0x1d, 0xa5, 0x40, 0x8e, 0x49, 0x13, 0xd4, 0x15, 0x46, 0xcb, 0xb4, 0x08, - 0xfa, 0x8c, 0xb2, 0x7f, 0xcc, 0x3f, 0x72, 0xf8, 0x0d, 0x16, 0x7b, 0xf0, 0xa4, 0xc3, 0x29, 0xd3 -}; -static const uint8_t ECC384_TV0_DH_SELF_AGREE[48] = { 0xf6, 0x96, 0xbd, 0x1b, 0xda, 0x5e, 0x52, 0x8c, 0x1d, 0x56, - 0xa3, 0x6e, 0xd9, 0xba, 0xd7, 0x84, 0xdd, 0x20, 0x1b, 0x50, - 0xc9, 0xd8, 0x68, 0xb9, 0x52, 0x93, 0x27, 0xab, 0x17, 0xed, - 0xc6, 0xae, 0x89, 0x5e, 0x7f, 0xd9, 0x46, 0x15, 0x87, 0xf4, - 0xc8, 0x47, 0x2e, 0xf7, 0x86, 0xf5, 0x87, 0x0b }; -static const uint8_t ECC384_TV0_SIG[96] = { 0x98, 0x93, 0x5f, 0x0a, 0x05, 0x2c, 0xba, 0x3a, 0xd7, 0xd2, 0x08, 0xde, - 0x64, 0xe7, 0x77, 0x2c, 0xbd, 0xe6, 0xd9, 0x16, 0x11, 0xd2, 0xef, 0x03, - 0xba, 0x12, 0x9f, 0x14, 0x98, 0x49, 0x8c, 0x2d, 0x36, 0x50, 0xd9, 0xcf, - 0xbb, 0x2b, 0xea, 0xcb, 0x28, 0xe7, 0x0b, 0x90, 0x43, 0x9e, 0x01, 0x8b, - 0x52, 0xdb, 0x46, 0xec, 0xc7, 0xf6, 0xa9, 0x56, 0x88, 0x00, 0x3c, 0xdb, - 0x4f, 0xfe, 0x04, 0xa1, 0xc7, 0x4c, 0x3f, 0xfc, 0xb8, 0xc8, 0x70, 0x42, - 0x12, 0xf4, 0x37, 0xfa, 0xcd, 0xb9, 0x17, 0x2f, 0x60, 0x8c, 0xb6, 0x05, - 0xc6, 0xce, 0x37, 0xd6, 0xc9, 0xf0, 0x0b, 0x23, 0x39, 0x10, 0x29, 0x0d }; +static const uint8_t ECC384_TV0_PUBLIC[49] = { 0x02, 0xed, 0xbc, 0xbb, 0x1f, 0x23, 0x9b, 0xbd, 0x9d, 0x3d, 0x7c, 0xef, 0x6b, 0x37, 0xa3, 0x26, 0x69, 0xe9, 0x4d, 0xf4, 0x26, 0x64, 0xfb, 0xac, 0x76, 0x40, 0xc2, 0x22, 0x21, 0xa6, 0xa3, 0xdf, 0x8c, 0x96, 0x81, 0x76, 0x0f, 0x0e, 0x67, 0xab, 0xd4, 0x51, 0x58, 0xb3, 0x15, 0x63, 0xfb, 0x49, 0x71 }; +static const uint8_t ECC384_TV0_PRIVATE[48] = { 0x62, 0x93, 0x9b, 0x4a, 0x29, 0x3c, 0xc6, 0x86, 0x98, 0xc3, 0xd0, 0x7f, 0xb7, 0xff, 0x97, 0xa2, 0xfb, 0xc9, 0x36, 0x8a, 0x1d, 0xa5, 0x40, 0x8e, 0x49, 0x13, 0xd4, 0x15, 0x46, 0xcb, 0xb4, 0x08, 0xfa, 0x8c, 0xb2, 0x7f, 0xcc, 0x3f, 0x72, 0xf8, 0x0d, 0x16, 0x7b, 0xf0, 0xa4, 0xc3, 0x29, 0xd3 }; +static const uint8_t ECC384_TV0_DH_SELF_AGREE[48] = { 0xf6, 0x96, 0xbd, 0x1b, 0xda, 0x5e, 0x52, 0x8c, 0x1d, 0x56, 0xa3, 0x6e, 0xd9, 0xba, 0xd7, 0x84, 0xdd, 0x20, 0x1b, 0x50, 0xc9, 0xd8, 0x68, 0xb9, 0x52, 0x93, 0x27, 0xab, 0x17, 0xed, 0xc6, 0xae, 0x89, 0x5e, 0x7f, 0xd9, 0x46, 0x15, 0x87, 0xf4, 0xc8, 0x47, 0x2e, 0xf7, 0x86, 0xf5, 0x87, 0x0b }; +static const uint8_t ECC384_TV0_SIG[96] = { 0x98, 0x93, 0x5f, 0x0a, 0x05, 0x2c, 0xba, 0x3a, 0xd7, 0xd2, 0x08, 0xde, 0x64, 0xe7, 0x77, 0x2c, 0xbd, 0xe6, 0xd9, 0x16, 0x11, 0xd2, 0xef, 0x03, 0xba, 0x12, 0x9f, 0x14, 0x98, 0x49, 0x8c, 0x2d, 0x36, 0x50, 0xd9, 0xcf, 0xbb, 0x2b, 0xea, 0xcb, 0x28, 0xe7, 0x0b, 0x90, 0x43, 0x9e, 0x01, 0x8b, + 0x52, 0xdb, 0x46, 0xec, 0xc7, 0xf6, 0xa9, 0x56, 0x88, 0x00, 0x3c, 0xdb, 0x4f, 0xfe, 0x04, 0xa1, 0xc7, 0x4c, 0x3f, 0xfc, 0xb8, 0xc8, 0x70, 0x42, 0x12, 0xf4, 0x37, 0xfa, 0xcd, 0xb9, 0x17, 0x2f, 0x60, 0x8c, 0xb6, 0x05, 0xc6, 0xce, 0x37, 0xd6, 0xc9, 0xf0, 0x0b, 0x23, 0x39, 0x10, 0x29, 0x0d }; -static const uint8_t SALSA20_TV0_KEY[32] = { 0x0f, 0x62, 0xb5, 0x08, 0x5b, 0xae, 0x01, 0x54, 0xa7, 0xfa, 0x4d, - 0xa0, 0xf3, 0x46, 0x99, 0xec, 0x3f, 0x92, 0xe5, 0x38, 0x8b, 0xde, - 0x31, 0x84, 0xd7, 0x2a, 0x7d, 0xd0, 0x23, 0x76, 0xc9, 0x1c }; +static const uint8_t SALSA20_TV0_KEY[32] = { 0x0f, 0x62, 0xb5, 0x08, 0x5b, 0xae, 0x01, 0x54, 0xa7, 0xfa, 0x4d, 0xa0, 0xf3, 0x46, 0x99, 0xec, 0x3f, 0x92, 0xe5, 0x38, 0x8b, 0xde, 0x31, 0x84, 0xd7, 0x2a, 0x7d, 0xd0, 0x23, 0x76, 0xc9, 0x1c }; static const uint8_t SALSA20_TV0_IV[8] = { 0x28, 0x8f, 0xf6, 0x5d, 0xc4, 0x2b, 0x92, 0xf9 }; -static const uint8_t SALSA20_TV0_KS[64] = { 0x5e, 0x5e, 0x71, 0xf9, 0x01, 0x99, 0x34, 0x03, 0x04, 0xab, 0xb2, - 0x2a, 0x37, 0xb6, 0x62, 0x5b, 0xf8, 0x83, 0xfb, 0x89, 0xce, 0x3b, - 0x21, 0xf5, 0x4a, 0x10, 0xb8, 0x10, 0x66, 0xef, 0x87, 0xda, 0x30, - 0xb7, 0x76, 0x99, 0xaa, 0x73, 0x79, 0xda, 0x59, 0x5c, 0x77, 0xdd, - 0x59, 0x54, 0x2d, 0xa2, 0x08, 0xe5, 0x95, 0x4f, 0x89, 0xe4, 0x0e, - 0xb7, 0xaa, 0x80, 0xa8, 0x4a, 0x61, 0x76, 0x66, 0x3f }; +static const uint8_t SALSA20_TV0_KS[64] = { 0x5e, 0x5e, 0x71, 0xf9, 0x01, 0x99, 0x34, 0x03, 0x04, 0xab, 0xb2, 0x2a, 0x37, 0xb6, 0x62, 0x5b, 0xf8, 0x83, 0xfb, 0x89, 0xce, 0x3b, 0x21, 0xf5, 0x4a, 0x10, 0xb8, 0x10, 0x66, 0xef, 0x87, 0xda, + 0x30, 0xb7, 0x76, 0x99, 0xaa, 0x73, 0x79, 0xda, 0x59, 0x5c, 0x77, 0xdd, 0x59, 0x54, 0x2d, 0xa2, 0x08, 0xe5, 0x95, 0x4f, 0x89, 0xe4, 0x0e, 0xb7, 0xaa, 0x80, 0xa8, 0x4a, 0x61, 0x76, 0x66, 0x3f }; -static const uint8_t SALSA12_TV0_KEY[32] = { 0x0f, 0x62, 0xb5, 0x08, 0x5b, 0xae, 0x01, 0x54, 0xa7, 0xfa, 0x4d, - 0xa0, 0xf3, 0x46, 0x99, 0xec, 0x3f, 0x92, 0xe5, 0x38, 0x8b, 0xde, - 0x31, 0x84, 0xd7, 0x2a, 0x7d, 0xd0, 0x23, 0x76, 0xc9, 0x1c }; +static const uint8_t SALSA12_TV0_KEY[32] = { 0x0f, 0x62, 0xb5, 0x08, 0x5b, 0xae, 0x01, 0x54, 0xa7, 0xfa, 0x4d, 0xa0, 0xf3, 0x46, 0x99, 0xec, 0x3f, 0x92, 0xe5, 0x38, 0x8b, 0xde, 0x31, 0x84, 0xd7, 0x2a, 0x7d, 0xd0, 0x23, 0x76, 0xc9, 0x1c }; static const uint8_t SALSA12_TV0_IV[8] = { 0x28, 0x8f, 0xf6, 0x5d, 0xc4, 0x2b, 0x92, 0xf9 }; -static const uint8_t SALSA12_TV0_KS[64] = { 0x99, 0xDB, 0x33, 0xAD, 0x11, 0xCE, 0x0C, 0xCB, 0x3B, 0xFD, 0xBF, - 0x8D, 0x0C, 0x18, 0x16, 0x04, 0x52, 0xD0, 0x14, 0xCD, 0xE9, 0x89, - 0xB4, 0xC4, 0x11, 0xA5, 0x59, 0xFF, 0x7C, 0x20, 0xA1, 0x69, 0xE6, - 0xDC, 0x99, 0x09, 0xD8, 0x16, 0xBE, 0xCE, 0xDC, 0x40, 0x63, 0xCE, - 0x07, 0xCE, 0xA8, 0x28, 0xF4, 0x4B, 0xF9, 0xB6, 0xC9, 0xA0, 0xA0, - 0xB2, 0x00, 0xE1, 0xB5, 0x2A, 0xF4, 0x18, 0x59, 0xC5 }; +static const uint8_t SALSA12_TV0_KS[64] = { 0x99, 0xDB, 0x33, 0xAD, 0x11, 0xCE, 0x0C, 0xCB, 0x3B, 0xFD, 0xBF, 0x8D, 0x0C, 0x18, 0x16, 0x04, 0x52, 0xD0, 0x14, 0xCD, 0xE9, 0x89, 0xB4, 0xC4, 0x11, 0xA5, 0x59, 0xFF, 0x7C, 0x20, 0xA1, 0x69, + 0xE6, 0xDC, 0x99, 0x09, 0xD8, 0x16, 0xBE, 0xCE, 0xDC, 0x40, 0x63, 0xCE, 0x07, 0xCE, 0xA8, 0x28, 0xF4, 0x4B, 0xF9, 0xB6, 0xC9, 0xA0, 0xA0, 0xB2, 0x00, 0xE1, 0xB5, 0x2A, 0xF4, 0x18, 0x59, 0xC5 }; -static const uint8_t POLY1305_TV0_INPUT[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uint8_t POLY1305_TV0_KEY[32] = { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x33, 0x32, 0x2d, - 0x62, 0x79, 0x74, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x50, 0x6f, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x35 }; -static const uint8_t POLY1305_TV0_TAG[16] = { 0x49, 0xec, 0x78, 0x09, 0x0e, 0x48, 0x1e, 0xc6, - 0xc2, 0x6b, 0x33, 0xb9, 0x1c, 0xcc, 0x03, 0x07 }; +static const uint8_t POLY1305_TV0_INPUT[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uint8_t POLY1305_TV0_KEY[32] = { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x50, 0x6f, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x35 }; +static const uint8_t POLY1305_TV0_TAG[16] = { 0x49, 0xec, 0x78, 0x09, 0x0e, 0x48, 0x1e, 0xc6, 0xc2, 0x6b, 0x33, 0xb9, 0x1c, 0xcc, 0x03, 0x07 }; -static const uint8_t POLY1305_TV1_INPUT[12] = { - 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21 -}; -static const uint8_t POLY1305_TV1_KEY[32] = { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x33, 0x32, 0x2d, - 0x62, 0x79, 0x74, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x50, 0x6f, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x35 }; -static const uint8_t POLY1305_TV1_TAG[16] = { 0xa6, 0xf7, 0x45, 0x00, 0x8f, 0x81, 0xc9, 0x16, - 0xa2, 0x0d, 0xcc, 0x74, 0xee, 0xf2, 0xb2, 0xf0 }; +static const uint8_t POLY1305_TV1_INPUT[12] = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21 }; +static const uint8_t POLY1305_TV1_KEY[32] = { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x50, 0x6f, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x35 }; +static const uint8_t POLY1305_TV1_TAG[16] = { 0xa6, 0xf7, 0x45, 0x00, 0x8f, 0x81, 0xc9, 0x16, 0xa2, 0x0d, 0xcc, 0x74, 0xee, 0xf2, 0xb2, 0xf0 }; static const char *SHA512_TV0_INPUT = "supercalifragilisticexpealidocious"; -static const uint8_t SHA512_TV0_DIGEST[64] = { 0x18, 0x2a, 0x85, 0x59, 0x69, 0xe5, 0xd3, 0xe6, 0xcb, 0xf6, 0x05, - 0x24, 0xad, 0xf2, 0x88, 0xd1, 0xbb, 0xf2, 0x52, 0x92, 0x81, 0x24, - 0x31, 0xf6, 0xd2, 0x52, 0xf1, 0xdb, 0xc1, 0xcb, 0x44, 0xdf, 0x21, - 0x57, 0x3d, 0xe1, 0xb0, 0x6b, 0x68, 0x75, 0x95, 0x9f, 0x3b, 0x6f, - 0x87, 0xb1, 0x13, 0x81, 0xd0, 0xbc, 0x79, 0x2c, 0x43, 0x3a, 0x13, - 0x55, 0x3c, 0xe0, 0x84, 0xc2, 0x92, 0x55, 0x31, 0x1c }; -static const uint8_t SHA512_TV0_SHA384_DIGEST[48] = { 0x71, 0xe7, 0x71, 0x79, 0xae, 0xc3, 0xf3, 0x5f, 0x93, 0xea, - 0xe2, 0x1d, 0xe3, 0x3f, 0x24, 0x6d, 0xed, 0x2a, 0x59, 0xae, - 0x22, 0x45, 0x27, 0x6c, 0x12, 0x57, 0xf3, 0xbe, 0xe6, 0xce, - 0xe2, 0x73, 0xd8, 0xad, 0xaa, 0x9b, 0x99, 0xa4, 0x8a, 0x1b, - 0x7a, 0xb9, 0x5d, 0xfb, 0x9c, 0x1a, 0x1c, 0xf6 }; +static const uint8_t SHA512_TV0_DIGEST[64] = { 0x18, 0x2a, 0x85, 0x59, 0x69, 0xe5, 0xd3, 0xe6, 0xcb, 0xf6, 0x05, 0x24, 0xad, 0xf2, 0x88, 0xd1, 0xbb, 0xf2, 0x52, 0x92, 0x81, 0x24, 0x31, 0xf6, 0xd2, 0x52, 0xf1, 0xdb, 0xc1, 0xcb, 0x44, 0xdf, + 0x21, 0x57, 0x3d, 0xe1, 0xb0, 0x6b, 0x68, 0x75, 0x95, 0x9f, 0x3b, 0x6f, 0x87, 0xb1, 0x13, 0x81, 0xd0, 0xbc, 0x79, 0x2c, 0x43, 0x3a, 0x13, 0x55, 0x3c, 0xe0, 0x84, 0xc2, 0x92, 0x55, 0x31, 0x1c }; +static const uint8_t SHA512_TV0_SHA384_DIGEST[48] = { 0x71, 0xe7, 0x71, 0x79, 0xae, 0xc3, 0xf3, 0x5f, 0x93, 0xea, 0xe2, 0x1d, 0xe3, 0x3f, 0x24, 0x6d, 0xed, 0x2a, 0x59, 0xae, 0x22, 0x45, 0x27, 0x6c, 0x12, 0x57, 0xf3, 0xbe, 0xe6, 0xce, 0xe2, 0x73, 0xd8, 0xad, 0xaa, 0x9b, 0x99, 0xa4, 0x8a, 0x1b, 0x7a, 0xb9, 0x5d, 0xfb, 0x9c, 0x1a, 0x1c, 0xf6 }; -static const uint8_t AES_TEST_VECTOR_0_KEY[32] = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, - 0xf0, 0x85, 0x7d, 0x77, 0x81, 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, - 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 }; -static const uint8_t AES_TEST_VECTOR_0_IN[16] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, - 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a }; -static const uint8_t AES_TEST_VECTOR_0_OUT[16] = { 0xf3, 0xee, 0xd1, 0xbd, 0xb5, 0xd2, 0xa0, 0x3c, - 0x06, 0x4b, 0x5a, 0x7e, 0x3d, 0xb1, 0x81, 0xf8 }; +static const uint8_t AES_TEST_VECTOR_0_KEY[32] = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81, 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 }; +static const uint8_t AES_TEST_VECTOR_0_IN[16] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a }; +static const uint8_t AES_TEST_VECTOR_0_OUT[16] = { 0xf3, 0xee, 0xd1, 0xbd, 0xb5, 0xd2, 0xa0, 0x3c, 0x06, 0x4b, 0x5a, 0x7e, 0x3d, 0xb1, 0x81, 0xf8 }; -static const uint8_t AES_CTR_TEST_VECTOR_0_KEY[32] = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, - 0xf0, 0x85, 0x7d, 0x77, 0x81, 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, - 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 }; -static const uint8_t AES_CTR_TEST_VECTOR_0_IV[16] = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; -static const uint8_t AES_CTR_TEST_VECTOR_0_IN[64] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, - 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, - 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, - 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, - 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, - 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }; -static const uint8_t AES_CTR_TEST_VECTOR_0_OUT[64] = { 0x60, 0x1e, 0xc3, 0x13, 0x77, 0x57, 0x89, 0xa5, 0xb7, 0xa7, 0xf5, - 0x04, 0xbb, 0xf3, 0xd2, 0x28, 0xf4, 0x43, 0xe3, 0xca, 0x4d, 0x62, - 0xb5, 0x9a, 0xca, 0x84, 0xe9, 0x90, 0xca, 0xca, 0xf5, 0xc5, 0x2b, - 0x09, 0x30, 0xda, 0xa2, 0x3d, 0xe9, 0x4c, 0xe8, 0x70, 0x17, 0xba, - 0x2d, 0x84, 0x98, 0x8d, 0xdf, 0xc9, 0xc5, 0x8d, 0xb6, 0x7a, 0xad, - 0xa6, 0x13, 0xc2, 0xdd, 0x08, 0x45, 0x79, 0x41, 0xa6 }; +static const uint8_t AES_CTR_TEST_VECTOR_0_KEY[32] = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81, 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 }; +static const uint8_t AES_CTR_TEST_VECTOR_0_IV[16] = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; +static const uint8_t AES_CTR_TEST_VECTOR_0_IN[64] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, + 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }; +static const uint8_t AES_CTR_TEST_VECTOR_0_OUT[64] = { 0x60, 0x1e, 0xc3, 0x13, 0x77, 0x57, 0x89, 0xa5, 0xb7, 0xa7, 0xf5, 0x04, 0xbb, 0xf3, 0xd2, 0x28, 0xf4, 0x43, 0xe3, 0xca, 0x4d, 0x62, 0xb5, 0x9a, 0xca, 0x84, 0xe9, 0x90, 0xca, 0xca, 0xf5, 0xc5, + 0x2b, 0x09, 0x30, 0xda, 0xa2, 0x3d, 0xe9, 0x4c, 0xe8, 0x70, 0x17, 0xba, 0x2d, 0x84, 0x98, 0x8d, 0xdf, 0xc9, 0xc5, 0x8d, 0xb6, 0x7a, 0xad, 0xa6, 0x13, 0xc2, 0xdd, 0x08, 0x45, 0x79, 0x41, 0xa6 }; // Key and IV are same as test vector 0, input is a buffer filled by iterating 0..777 and setting to these &0xff -static const uint8_t AES_CTR_TEST_VECTOR_1_OUT[777] = { - 0x0b, 0xde, 0x7f, 0xf2, 0x5d, 0x12, 0x10, 0x34, 0x56, 0x93, 0x81, 0x1e, 0xc4, 0x6d, 0xcb, 0x0d, 0x4a, 0x7f, 0x7b, - 0x8e, 0x47, 0x74, 0x0f, 0x11, 0x4c, 0x2a, 0x9c, 0x27, 0x93, 0x78, 0x65, 0x8b, 0x3b, 0xe0, 0x0e, 0xbf, 0x25, 0x44, - 0x2b, 0x7a, 0x25, 0xa2, 0xfc, 0x88, 0x1b, 0xa3, 0xe4, 0x4d, 0x19, 0x67, 0xd3, 0xfb, 0x5d, 0x00, 0x00, 0x86, 0x86, - 0xd0, 0xa6, 0x48, 0x9f, 0x28, 0x48, 0x89, 0xcb, 0x36, 0xbd, 0xa3, 0x9d, 0x39, 0x4f, 0xd5, 0x9f, 0xbe, 0x44, 0x57, - 0xa5, 0x82, 0x8d, 0xf8, 0x1c, 0xba, 0x35, 0xd1, 0x34, 0x53, 0x5e, 0xd4, 0x34, 0xfb, 0x91, 0x1e, 0x79, 0xc7, 0xdb, - 0xf2, 0x79, 0xaf, 0x31, 0x9f, 0x54, 0x70, 0xe7, 0x15, 0xbd, 0x3e, 0x76, 0x2b, 0x82, 0x2c, 0x37, 0x07, 0x44, 0x1e, - 0x5b, 0x7a, 0xca, 0xb8, 0x17, 0x74, 0x1c, 0x5e, 0xa6, 0xe0, 0x57, 0xaa, 0x13, 0x99, 0x5e, 0x3c, 0x11, 0xfe, 0xce, - 0xeb, 0x6b, 0x8e, 0x5e, 0xc6, 0x79, 0xa2, 0xa7, 0x4c, 0x00, 0xff, 0x0a, 0x5d, 0xbb, 0x3b, 0xc5, 0x76, 0xe7, 0x9a, - 0x53, 0x76, 0x67, 0xee, 0x8e, 0x73, 0x80, 0xa8, 0x6d, 0xad, 0x38, 0x73, 0x62, 0x71, 0x76, 0x8a, 0x3d, 0x5e, 0x42, - 0xae, 0xb8, 0x7d, 0x61, 0xd3, 0x1d, 0x97, 0xd7, 0xda, 0x51, 0xf5, 0x89, 0x26, 0xed, 0x45, 0x75, 0x88, 0x65, 0x69, - 0x06, 0xe8, 0x3d, 0x31, 0x82, 0xe0, 0xa4, 0x82, 0x79, 0xf0, 0x44, 0x7c, 0x36, 0x4a, 0xd0, 0x25, 0x13, 0x30, 0x1a, - 0x1e, 0x52, 0x5c, 0x0e, 0xe4, 0x68, 0x93, 0xbf, 0x1e, 0x5a, 0x43, 0xc1, 0xe6, 0x7f, 0x8a, 0xf7, 0xff, 0xb8, 0x95, - 0x41, 0x6b, 0x28, 0xbc, 0x2a, 0xac, 0x9e, 0x8e, 0x7f, 0x7c, 0xc1, 0xd9, 0xed, 0x0b, 0x52, 0x55, 0x28, 0x6c, 0xb4, - 0x15, 0x96, 0xbe, 0xfc, 0xe9, 0xfd, 0x3a, 0x84, 0xc9, 0xd6, 0x4f, 0x40, 0xe4, 0xe0, 0x59, 0xc4, 0xfe, 0x62, 0x8a, - 0x2c, 0xbb, 0xcd, 0xc2, 0x5b, 0x4b, 0x53, 0x67, 0x0d, 0xc3, 0x6d, 0x0f, 0x67, 0xfe, 0x20, 0x77, 0x43, 0x98, 0x92, - 0x13, 0x15, 0x0f, 0x9b, 0x2c, 0x4b, 0xa9, 0x53, 0x2a, 0xb2, 0xd0, 0x72, 0x64, 0x5e, 0x92, 0x7f, 0x25, 0xde, 0x0a, - 0x93, 0x46, 0x03, 0x33, 0xdc, 0x43, 0x4f, 0xfa, 0x00, 0x8a, 0xfc, 0xcb, 0x42, 0x3d, 0x5f, 0x25, 0xbc, 0xa2, 0x78, - 0xdd, 0x3d, 0x0c, 0x82, 0x52, 0xd8, 0x0a, 0x32, 0xee, 0xc7, 0xd8, 0x46, 0x24, 0x63, 0xc3, 0x33, 0xba, 0x66, 0x0b, - 0x20, 0x74, 0xc6, 0x06, 0x5b, 0x2c, 0xea, 0x06, 0xed, 0x36, 0xda, 0xbc, 0x3f, 0x0a, 0xb0, 0xa5, 0xad, 0xd0, 0xd6, - 0x9a, 0x33, 0x49, 0xbe, 0xb6, 0x94, 0xa2, 0xef, 0x82, 0xa4, 0x1b, 0x81, 0x71, 0xb9, 0xea, 0x37, 0xfe, 0x43, 0x48, - 0xa1, 0x30, 0x92, 0x6f, 0x69, 0x45, 0xc6, 0xf7, 0xdd, 0x0d, 0x10, 0x3b, 0x71, 0x59, 0x8c, 0xfc, 0x18, 0xf2, 0x48, - 0x21, 0xf3, 0x6c, 0xa8, 0xaa, 0x33, 0xff, 0xf4, 0x38, 0x96, 0x5b, 0x34, 0x43, 0x7f, 0xcc, 0x9c, 0x87, 0x36, 0x3b, - 0x96, 0x3e, 0x1a, 0xbf, 0x6d, 0xa1, 0x89, 0x42, 0xb3, 0xb9, 0x64, 0x9e, 0xa3, 0xef, 0x36, 0x4a, 0x41, 0xb9, 0xa3, - 0xb9, 0xad, 0xa4, 0xd9, 0x33, 0xad, 0xa5, 0xba, 0x41, 0x83, 0x12, 0xc5, 0x92, 0xf8, 0x6a, 0x10, 0x20, 0x1e, 0xe0, - 0xfd, 0xe8, 0x6d, 0xfc, 0x4a, 0x7c, 0x72, 0x7f, 0x54, 0x4d, 0x00, 0xd5, 0x3e, 0x6a, 0x28, 0x94, 0x11, 0x8a, 0x38, - 0xef, 0xb5, 0xb6, 0xf3, 0xbf, 0xd2, 0xbe, 0xf3, 0x1e, 0x8b, 0xe8, 0x0c, 0xf2, 0x9d, 0xaf, 0xff, 0x90, 0x4c, 0x8a, - 0x44, 0xad, 0xd9, 0x8b, 0x99, 0x47, 0x65, 0x31, 0x74, 0xb2, 0x24, 0xb3, 0x6d, 0xd3, 0x4a, 0x4c, 0x19, 0xf6, 0x2f, - 0x53, 0x2d, 0xb8, 0x05, 0xd3, 0x7d, 0x53, 0xc9, 0xc7, 0x7e, 0x03, 0xeb, 0xfc, 0x18, 0x36, 0xe2, 0x4b, 0xcf, 0xfd, - 0xe8, 0x97, 0xde, 0xd8, 0x42, 0x80, 0x05, 0x77, 0x8c, 0xec, 0x15, 0xae, 0x23, 0x13, 0xe8, 0xa5, 0x1c, 0xca, 0x30, - 0x60, 0x8c, 0x20, 0x86, 0xdf, 0xa0, 0xd7, 0x88, 0x2c, 0x27, 0xa0, 0x8f, 0x99, 0x23, 0x9c, 0x11, 0xa9, 0xe6, 0x4a, - 0xfc, 0x0a, 0x89, 0xa4, 0x60, 0x94, 0xa9, 0x2e, 0x40, 0x62, 0x22, 0xd2, 0xae, 0x31, 0x4b, 0x52, 0x2c, 0x5f, 0x9a, - 0xd6, 0x54, 0x58, 0x08, 0xa1, 0x97, 0x1c, 0x28, 0xef, 0x53, 0x5d, 0x6a, 0x4b, 0x07, 0xe7, 0x62, 0x06, 0xb2, 0xa8, - 0xb4, 0x12, 0x9a, 0x10, 0x12, 0xa2, 0xe3, 0x02, 0xce, 0xc3, 0xa7, 0x73, 0x47, 0xf1, 0xfb, 0xcb, 0x77, 0xb5, 0x33, - 0x81, 0xb9, 0xf7, 0x79, 0x1d, 0x93, 0x2d, 0x2e, 0x14, 0x94, 0x05, 0x36, 0xe1, 0x41, 0xcd, 0xdc, 0x83, 0x05, 0xea, - 0xac, 0x61, 0xe9, 0xe5, 0xc2, 0x7d, 0x53, 0x44, 0x65, 0x8a, 0x25, 0x0d, 0xb4, 0x66, 0x43, 0x5c, 0xbf, 0x6d, 0x7f, - 0xc0, 0x46, 0xab, 0xab, 0xfb, 0x0e, 0xd2, 0x33, 0xdf, 0x67, 0x0a, 0x1f, 0x29, 0x29, 0x6c, 0x1d, 0x32, 0x7d, 0x3a, - 0xff, 0x10, 0x59, 0x10, 0x79, 0x68, 0x0a, 0x04, 0x0d, 0x1c, 0x4e, 0xe0, 0x6d, 0x1b, 0x59, 0xfc, 0x23, 0x6b, 0x9c, - 0x6a, 0xde, 0x1f, 0x1c, 0x9f, 0x0c, 0x1c, 0x8f, 0x5e, 0xd1, 0x64, 0x7e, 0x33, 0x2f, 0xae, 0xdf, 0x76, 0x87, 0xab, - 0x64, 0x04, 0xd2, 0xc3, 0xfe, 0x4f, 0x95, 0x47, 0xf2, 0x16, 0x11, 0xdb, 0x00, 0x56, 0xb4, 0x96, 0x0f, 0x1e, 0x18, - 0xc6, 0xcd, 0xa3, 0x29, 0x8e, 0xd0, 0xf3, 0x0f, 0x85, 0x2f, 0xa0, 0xe7, 0x8c, 0x12, 0x2c, 0xdc, 0x85, 0x0b, 0xef, - 0xb3, 0x7d, 0x59, 0x87, 0xaa, 0x1d, 0xfc, 0xde, 0xd0, 0xbc, 0x4c, 0xe8, 0x49, 0x11, 0x50, 0xf5, 0x7f -}; +static const uint8_t AES_CTR_TEST_VECTOR_1_OUT[777] = { 0x0b, 0xde, 0x7f, 0xf2, 0x5d, 0x12, 0x10, 0x34, 0x56, 0x93, 0x81, 0x1e, 0xc4, 0x6d, 0xcb, 0x0d, 0x4a, 0x7f, 0x7b, 0x8e, 0x47, 0x74, 0x0f, 0x11, 0x4c, 0x2a, 0x9c, 0x27, 0x93, 0x78, 0x65, 0x8b, 0x3b, 0xe0, 0x0e, 0xbf, 0x25, 0x44, 0x2b, 0x7a, 0x25, 0xa2, 0xfc, 0x88, 0x1b, 0xa3, 0xe4, 0x4d, 0x19, + 0x67, 0xd3, 0xfb, 0x5d, 0x00, 0x00, 0x86, 0x86, 0xd0, 0xa6, 0x48, 0x9f, 0x28, 0x48, 0x89, 0xcb, 0x36, 0xbd, 0xa3, 0x9d, 0x39, 0x4f, 0xd5, 0x9f, 0xbe, 0x44, 0x57, 0xa5, 0x82, 0x8d, 0xf8, 0x1c, 0xba, 0x35, 0xd1, 0x34, 0x53, 0x5e, 0xd4, 0x34, 0xfb, 0x91, 0x1e, 0x79, 0xc7, 0xdb, 0xf2, 0x79, 0xaf, + 0x31, 0x9f, 0x54, 0x70, 0xe7, 0x15, 0xbd, 0x3e, 0x76, 0x2b, 0x82, 0x2c, 0x37, 0x07, 0x44, 0x1e, 0x5b, 0x7a, 0xca, 0xb8, 0x17, 0x74, 0x1c, 0x5e, 0xa6, 0xe0, 0x57, 0xaa, 0x13, 0x99, 0x5e, 0x3c, 0x11, 0xfe, 0xce, 0xeb, 0x6b, 0x8e, 0x5e, 0xc6, 0x79, 0xa2, 0xa7, 0x4c, 0x00, 0xff, 0x0a, 0x5d, 0xbb, + 0x3b, 0xc5, 0x76, 0xe7, 0x9a, 0x53, 0x76, 0x67, 0xee, 0x8e, 0x73, 0x80, 0xa8, 0x6d, 0xad, 0x38, 0x73, 0x62, 0x71, 0x76, 0x8a, 0x3d, 0x5e, 0x42, 0xae, 0xb8, 0x7d, 0x61, 0xd3, 0x1d, 0x97, 0xd7, 0xda, 0x51, 0xf5, 0x89, 0x26, 0xed, 0x45, 0x75, 0x88, 0x65, 0x69, 0x06, 0xe8, 0x3d, 0x31, 0x82, 0xe0, + 0xa4, 0x82, 0x79, 0xf0, 0x44, 0x7c, 0x36, 0x4a, 0xd0, 0x25, 0x13, 0x30, 0x1a, 0x1e, 0x52, 0x5c, 0x0e, 0xe4, 0x68, 0x93, 0xbf, 0x1e, 0x5a, 0x43, 0xc1, 0xe6, 0x7f, 0x8a, 0xf7, 0xff, 0xb8, 0x95, 0x41, 0x6b, 0x28, 0xbc, 0x2a, 0xac, 0x9e, 0x8e, 0x7f, 0x7c, 0xc1, 0xd9, 0xed, 0x0b, 0x52, 0x55, 0x28, + 0x6c, 0xb4, 0x15, 0x96, 0xbe, 0xfc, 0xe9, 0xfd, 0x3a, 0x84, 0xc9, 0xd6, 0x4f, 0x40, 0xe4, 0xe0, 0x59, 0xc4, 0xfe, 0x62, 0x8a, 0x2c, 0xbb, 0xcd, 0xc2, 0x5b, 0x4b, 0x53, 0x67, 0x0d, 0xc3, 0x6d, 0x0f, 0x67, 0xfe, 0x20, 0x77, 0x43, 0x98, 0x92, 0x13, 0x15, 0x0f, 0x9b, 0x2c, 0x4b, 0xa9, 0x53, 0x2a, + 0xb2, 0xd0, 0x72, 0x64, 0x5e, 0x92, 0x7f, 0x25, 0xde, 0x0a, 0x93, 0x46, 0x03, 0x33, 0xdc, 0x43, 0x4f, 0xfa, 0x00, 0x8a, 0xfc, 0xcb, 0x42, 0x3d, 0x5f, 0x25, 0xbc, 0xa2, 0x78, 0xdd, 0x3d, 0x0c, 0x82, 0x52, 0xd8, 0x0a, 0x32, 0xee, 0xc7, 0xd8, 0x46, 0x24, 0x63, 0xc3, 0x33, 0xba, 0x66, 0x0b, 0x20, + 0x74, 0xc6, 0x06, 0x5b, 0x2c, 0xea, 0x06, 0xed, 0x36, 0xda, 0xbc, 0x3f, 0x0a, 0xb0, 0xa5, 0xad, 0xd0, 0xd6, 0x9a, 0x33, 0x49, 0xbe, 0xb6, 0x94, 0xa2, 0xef, 0x82, 0xa4, 0x1b, 0x81, 0x71, 0xb9, 0xea, 0x37, 0xfe, 0x43, 0x48, 0xa1, 0x30, 0x92, 0x6f, 0x69, 0x45, 0xc6, 0xf7, 0xdd, 0x0d, 0x10, 0x3b, + 0x71, 0x59, 0x8c, 0xfc, 0x18, 0xf2, 0x48, 0x21, 0xf3, 0x6c, 0xa8, 0xaa, 0x33, 0xff, 0xf4, 0x38, 0x96, 0x5b, 0x34, 0x43, 0x7f, 0xcc, 0x9c, 0x87, 0x36, 0x3b, 0x96, 0x3e, 0x1a, 0xbf, 0x6d, 0xa1, 0x89, 0x42, 0xb3, 0xb9, 0x64, 0x9e, 0xa3, 0xef, 0x36, 0x4a, 0x41, 0xb9, 0xa3, 0xb9, 0xad, 0xa4, 0xd9, + 0x33, 0xad, 0xa5, 0xba, 0x41, 0x83, 0x12, 0xc5, 0x92, 0xf8, 0x6a, 0x10, 0x20, 0x1e, 0xe0, 0xfd, 0xe8, 0x6d, 0xfc, 0x4a, 0x7c, 0x72, 0x7f, 0x54, 0x4d, 0x00, 0xd5, 0x3e, 0x6a, 0x28, 0x94, 0x11, 0x8a, 0x38, 0xef, 0xb5, 0xb6, 0xf3, 0xbf, 0xd2, 0xbe, 0xf3, 0x1e, 0x8b, 0xe8, 0x0c, 0xf2, 0x9d, 0xaf, + 0xff, 0x90, 0x4c, 0x8a, 0x44, 0xad, 0xd9, 0x8b, 0x99, 0x47, 0x65, 0x31, 0x74, 0xb2, 0x24, 0xb3, 0x6d, 0xd3, 0x4a, 0x4c, 0x19, 0xf6, 0x2f, 0x53, 0x2d, 0xb8, 0x05, 0xd3, 0x7d, 0x53, 0xc9, 0xc7, 0x7e, 0x03, 0xeb, 0xfc, 0x18, 0x36, 0xe2, 0x4b, 0xcf, 0xfd, 0xe8, 0x97, 0xde, 0xd8, 0x42, 0x80, 0x05, + 0x77, 0x8c, 0xec, 0x15, 0xae, 0x23, 0x13, 0xe8, 0xa5, 0x1c, 0xca, 0x30, 0x60, 0x8c, 0x20, 0x86, 0xdf, 0xa0, 0xd7, 0x88, 0x2c, 0x27, 0xa0, 0x8f, 0x99, 0x23, 0x9c, 0x11, 0xa9, 0xe6, 0x4a, 0xfc, 0x0a, 0x89, 0xa4, 0x60, 0x94, 0xa9, 0x2e, 0x40, 0x62, 0x22, 0xd2, 0xae, 0x31, 0x4b, 0x52, 0x2c, 0x5f, + 0x9a, 0xd6, 0x54, 0x58, 0x08, 0xa1, 0x97, 0x1c, 0x28, 0xef, 0x53, 0x5d, 0x6a, 0x4b, 0x07, 0xe7, 0x62, 0x06, 0xb2, 0xa8, 0xb4, 0x12, 0x9a, 0x10, 0x12, 0xa2, 0xe3, 0x02, 0xce, 0xc3, 0xa7, 0x73, 0x47, 0xf1, 0xfb, 0xcb, 0x77, 0xb5, 0x33, 0x81, 0xb9, 0xf7, 0x79, 0x1d, 0x93, 0x2d, 0x2e, 0x14, 0x94, + 0x05, 0x36, 0xe1, 0x41, 0xcd, 0xdc, 0x83, 0x05, 0xea, 0xac, 0x61, 0xe9, 0xe5, 0xc2, 0x7d, 0x53, 0x44, 0x65, 0x8a, 0x25, 0x0d, 0xb4, 0x66, 0x43, 0x5c, 0xbf, 0x6d, 0x7f, 0xc0, 0x46, 0xab, 0xab, 0xfb, 0x0e, 0xd2, 0x33, 0xdf, 0x67, 0x0a, 0x1f, 0x29, 0x29, 0x6c, 0x1d, 0x32, 0x7d, 0x3a, 0xff, 0x10, + 0x59, 0x10, 0x79, 0x68, 0x0a, 0x04, 0x0d, 0x1c, 0x4e, 0xe0, 0x6d, 0x1b, 0x59, 0xfc, 0x23, 0x6b, 0x9c, 0x6a, 0xde, 0x1f, 0x1c, 0x9f, 0x0c, 0x1c, 0x8f, 0x5e, 0xd1, 0x64, 0x7e, 0x33, 0x2f, 0xae, 0xdf, 0x76, 0x87, 0xab, 0x64, 0x04, 0xd2, 0xc3, 0xfe, 0x4f, 0x95, 0x47, 0xf2, 0x16, 0x11, 0xdb, 0x00, + 0x56, 0xb4, 0x96, 0x0f, 0x1e, 0x18, 0xc6, 0xcd, 0xa3, 0x29, 0x8e, 0xd0, 0xf3, 0x0f, 0x85, 0x2f, 0xa0, 0xe7, 0x8c, 0x12, 0x2c, 0xdc, 0x85, 0x0b, 0xef, 0xb3, 0x7d, 0x59, 0x87, 0xaa, 0x1d, 0xfc, 0xde, 0xd0, 0xbc, 0x4c, 0xe8, 0x49, 0x11, 0x50, 0xf5, 0x7f }; -static const uint8_t AES_GMAC_VECTOR_0_KEY[32] = { 0xbb, 0x10, 0x10, 0x06, 0x4f, 0xb8, 0x35, 0x23, 0xea, 0x9d, 0xf3, - 0x2b, 0xad, 0x9f, 0x1f, 0x2a, 0x4f, 0xce, 0xfc, 0x0f, 0x21, 0x07, - 0xc0, 0xaa, 0xba, 0xd9, 0xb7, 0x56, 0xd8, 0x09, 0x21, 0x9d }; -static const uint8_t AES_GMAC_VECTOR_0_IV[12] = { - 0x2f, 0x9a, 0xd0, 0x12, 0xad, 0xfc, 0x12, 0x73, 0x43, 0xfb, 0xe0, 0x56 -}; -static const uint8_t AES_GMAC_VECTOR_0_IN[16] = { 0xdb, 0x98, 0xd9, 0x0d, 0x1b, 0x69, 0x5c, 0xdb, - 0x74, 0x7a, 0x34, 0x3f, 0xbb, 0xc9, 0xf1, 0x41 }; -static const uint8_t AES_GMAC_VECTOR_0_OUT[16] = { 0xef, 0x06, 0xd5, 0x4d, 0xfd, 0x00, 0x02, 0x1d, - 0x75, 0x27, 0xdf, 0xf2, 0x6f, 0xc9, 0xd4, 0x84 }; +static const uint8_t AES_GMAC_VECTOR_0_KEY[32] = { 0xbb, 0x10, 0x10, 0x06, 0x4f, 0xb8, 0x35, 0x23, 0xea, 0x9d, 0xf3, 0x2b, 0xad, 0x9f, 0x1f, 0x2a, 0x4f, 0xce, 0xfc, 0x0f, 0x21, 0x07, 0xc0, 0xaa, 0xba, 0xd9, 0xb7, 0x56, 0xd8, 0x09, 0x21, 0x9d }; +static const uint8_t AES_GMAC_VECTOR_0_IV[12] = { 0x2f, 0x9a, 0xd0, 0x12, 0xad, 0xfc, 0x12, 0x73, 0x43, 0xfb, 0xe0, 0x56 }; +static const uint8_t AES_GMAC_VECTOR_0_IN[16] = { 0xdb, 0x98, 0xd9, 0x0d, 0x1b, 0x69, 0x5c, 0xdb, 0x74, 0x7a, 0x34, 0x3f, 0xbb, 0xc9, 0xf1, 0x41 }; +static const uint8_t AES_GMAC_VECTOR_0_OUT[16] = { 0xef, 0x06, 0xd5, 0x4d, 0xfd, 0x00, 0x02, 0x1d, 0x75, 0x27, 0xdf, 0xf2, 0x6f, 0xc9, 0xd4, 0x84 }; -static const uint8_t AES_GMAC_VECTOR_1_KEY[32] = { 0x83, 0xC0, 0x93, 0xB5, 0x8D, 0xE7, 0xFF, 0xE1, 0xC0, 0xDA, 0x92, - 0x6A, 0xC4, 0x3F, 0xB3, 0x60, 0x9A, 0xC1, 0xC8, 0x0F, 0xEE, 0x1B, - 0x62, 0x44, 0x97, 0xEF, 0x94, 0x2E, 0x2F, 0x79, 0xA8, 0x23 }; -static const uint8_t AES_GMAC_VECTOR_1_IV[12] = { - 0x7C, 0xFD, 0xE9, 0xF9, 0xE3, 0x37, 0x24, 0xC6, 0x89, 0x32, 0xD6, 0x12 -}; -static const uint8_t AES_GMAC_VECTOR_1_IN[81] = { - 0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA, 0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77, 0x88, 0xE5, 0x23, 0x00, 0x89, - 0x32, 0xD6, 0x12, 0x7C, 0xFD, 0xE9, 0xF9, 0xE3, 0x37, 0x24, 0xC6, 0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, - 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, - 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x00, 0x05 -}; -static const uint8_t AES_GMAC_VECTOR_1_OUT[16] = { 0x6E, 0xE1, 0x60, 0xE8, 0xFA, 0xEC, 0xA4, 0xB3, - 0x6C, 0x86, 0xB2, 0x34, 0x92, 0x0C, 0xA9, 0x75 }; +static const uint8_t AES_GMAC_VECTOR_1_KEY[32] = { 0x83, 0xC0, 0x93, 0xB5, 0x8D, 0xE7, 0xFF, 0xE1, 0xC0, 0xDA, 0x92, 0x6A, 0xC4, 0x3F, 0xB3, 0x60, 0x9A, 0xC1, 0xC8, 0x0F, 0xEE, 0x1B, 0x62, 0x44, 0x97, 0xEF, 0x94, 0x2E, 0x2F, 0x79, 0xA8, 0x23 }; +static const uint8_t AES_GMAC_VECTOR_1_IV[12] = { 0x7C, 0xFD, 0xE9, 0xF9, 0xE3, 0x37, 0x24, 0xC6, 0x89, 0x32, 0xD6, 0x12 }; +static const uint8_t AES_GMAC_VECTOR_1_IN[81] = { 0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA, 0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77, 0x88, 0xE5, 0x23, 0x00, 0x89, 0x32, 0xD6, 0x12, 0x7C, 0xFD, 0xE9, 0xF9, 0xE3, 0x37, 0x24, 0xC6, 0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x00, 0x05 }; +static const uint8_t AES_GMAC_VECTOR_1_OUT[16] = { 0x6E, 0xE1, 0x60, 0xE8, 0xFA, 0xEC, 0xA4, 0xB3, 0x6C, 0x86, 0xB2, 0x34, 0x92, 0x0C, 0xA9, 0x75 }; -static const uint8_t AES_GMAC_VECTOR_2_KEY[32] = { 0x63, 0x2f, 0xd9, 0x48, 0xcf, 0x70, 0xe2, 0xee, 0x70, 0x63, 0xe8, - 0x7a, 0x4a, 0x2a, 0x39, 0x9b, 0x67, 0x08, 0x64, 0x03, 0x68, 0x9d, - 0xbc, 0x60, 0xea, 0x68, 0x4a, 0x7a, 0x83, 0x37, 0x00, 0xfe }; -static const uint8_t AES_GMAC_VECTOR_2_IV[12] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b -}; -static const uint8_t AES_GMAC_VECTOR_2_IN[541] = { - 0xc8, 0x36, 0x38, 0xe8, 0x53, 0xc8, 0x86, 0xa3, 0xe3, 0xad, 0x9e, 0x2a, 0x91, 0x47, 0xb9, 0x51, 0xad, 0xf7, 0x78, - 0x89, 0x9a, 0xeb, 0x80, 0x41, 0x67, 0xa9, 0x16, 0xc4, 0x93, 0xcc, 0x77, 0x3d, 0x8c, 0xcf, 0x4d, 0xb5, 0x0b, 0xda, - 0xfd, 0xc2, 0x8c, 0x83, 0x5d, 0x66, 0x43, 0x74, 0x21, 0xbd, 0xc4, 0xab, 0x41, 0xd8, 0x40, 0x53, 0x34, 0xe8, 0x05, - 0xcb, 0x89, 0x45, 0x09, 0xb0, 0xa4, 0xa6, 0x04, 0x95, 0x19, 0x2c, 0xab, 0x94, 0xe1, 0x8d, 0x7b, 0x59, 0x8b, 0xb9, - 0x31, 0xae, 0x3c, 0x25, 0xd3, 0x23, 0xab, 0x8f, 0x95, 0xa3, 0x8b, 0xa5, 0xc1, 0x66, 0x8b, 0x57, 0xe4, 0x88, 0x70, - 0xc9, 0xe0, 0xa1, 0x16, 0x39, 0xf8, 0x12, 0xb3, 0xe5, 0x95, 0x38, 0x3a, 0x01, 0x1d, 0xcc, 0xc0, 0xc3, 0xa9, 0x1c, - 0x72, 0xa7, 0x46, 0x79, 0x51, 0x05, 0xb2, 0x85, 0x5a, 0x97, 0x16, 0x97, 0xa6, 0x85, 0xa4, 0xf2, 0x0b, 0x3c, 0x90, - 0x52, 0xa3, 0xe0, 0xbe, 0xad, 0x06, 0x1b, 0x8e, 0x04, 0x22, 0xeb, 0x3a, 0x48, 0xb9, 0x84, 0x24, 0x0b, 0x24, 0x42, - 0xd9, 0xed, 0x6b, 0x5c, 0xc1, 0xb6, 0x2e, 0xa5, 0xc0, 0x07, 0xfe, 0x3e, 0xbc, 0x9a, 0x92, 0x26, 0xb5, 0xa6, 0x5f, - 0x09, 0x13, 0x85, 0x5a, 0xcf, 0x61, 0x56, 0x65, 0x0f, 0x4c, 0x64, 0x79, 0xfa, 0x0a, 0xcf, 0xc0, 0x95, 0x8d, 0x4d, - 0xc6, 0xbe, 0xee, 0xb3, 0x67, 0xd8, 0xa7, 0x40, 0x90, 0x61, 0xe3, 0xba, 0xcb, 0x18, 0xe0, 0x61, 0x7b, 0x33, 0x86, - 0xf7, 0xef, 0x64, 0xe5, 0x36, 0xf0, 0x9c, 0xb6, 0x34, 0xb1, 0xe1, 0x2a, 0xd8, 0xd8, 0x5e, 0x6b, 0x61, 0x92, 0xa0, - 0x8e, 0x04, 0x7b, 0xbf, 0xa5, 0x84, 0x39, 0x3a, 0xe0, 0x27, 0xc7, 0xb0, 0x83, 0x88, 0x4f, 0x3e, 0x49, 0x14, 0xaa, - 0x34, 0xde, 0xb4, 0xbb, 0x4c, 0xe4, 0xbf, 0xae, 0x9a, 0xf9, 0x88, 0x7a, 0x1f, 0x18, 0xa0, 0x8c, 0x60, 0xc0, 0x5c, - 0x46, 0xa1, 0xd1, 0x36, 0x99, 0x60, 0x9b, 0x73, 0xa2, 0x9a, 0x0b, 0x8d, 0x6e, 0x2f, 0xe1, 0x58, 0x7a, 0x39, 0x71, - 0xed, 0xfc, 0x34, 0xe4, 0x98, 0x57, 0x7e, 0x86, 0xf1, 0xe5, 0x00, 0x7d, 0x1b, 0x6a, 0xfa, 0xf8, 0x6e, 0x7b, 0x12, - 0x44, 0x04, 0x60, 0x02, 0x81, 0x12, 0x09, 0x00, 0xb4, 0x35, 0x9e, 0x03, 0x73, 0x79, 0x9b, 0x13, 0xc5, 0xd7, 0x0e, - 0xce, 0x49, 0x87, 0x48, 0x1a, 0x67, 0x89, 0x93, 0xef, 0xd1, 0xdf, 0x2d, 0x48, 0x6d, 0x30, 0xd5, 0xec, 0x49, 0xfe, - 0x15, 0x1b, 0xa6, 0x2b, 0x6c, 0x08, 0x8e, 0x39, 0x73, 0x68, 0x87, 0xa7, 0x43, 0x28, 0x16, 0x77, 0x86, 0xd1, 0xcb, - 0x13, 0xe4, 0xd3, 0xda, 0x63, 0xcd, 0x3a, 0x2a, 0x35, 0xd5, 0xfa, 0x36, 0x67, 0xc8, 0x4c, 0x6b, 0xa1, 0x8a, 0xaf, - 0x7b, 0x4c, 0x43, 0xb0, 0x2f, 0x4a, 0xcc, 0xc0, 0x11, 0xc6, 0x30, 0x8e, 0xa3, 0xd2, 0x4a, 0x1b, 0x2a, 0x4f, 0xec, - 0x97, 0x83, 0xa6, 0x4c, 0xee, 0x51, 0xaf, 0x06, 0x0a, 0x1d, 0x80, 0xd9, 0xcf, 0xb7, 0x69, 0x23, 0x15, 0x3a, 0x26, - 0x04, 0x34, 0x33, 0x76, 0x30, 0x9f, 0xfb, 0x56, 0xb4, 0x26, 0xee, 0xfa, 0x54, 0x6c, 0x18, 0xf9, 0xd5, 0x32, 0x5d, - 0x03, 0xcb, 0x2c, 0x20, 0x30, 0x0c, 0xa0, 0xbb, 0xde, 0x01, 0x77, 0x65, 0xb0, 0x18, 0x30, 0xd2, 0x55, 0x9f, 0x9b, - 0xcf, 0xb8, 0x9b, 0xb4, 0xbc, 0x0b, 0x49, 0x52, 0x53, 0x30, 0x48, 0xa5, 0x12, 0xe5, 0x3b, 0x47, 0x84, 0xff, 0xf1, - 0x53, 0x5d, 0x5c, 0x04, 0x70, 0x63, 0x91, 0xc3, 0xc0, 0xf0, 0xea, 0xcb, 0x44, 0x4f, 0x8c, 0x85, 0x42, 0x6a, 0xc7, - 0xfa, 0xc7, 0xb5, 0x30, 0x03, 0x12, 0x65, 0xca, 0xba, 0x4f, 0x67, 0xbb, 0xef, 0xb6, 0xc6, 0x3f, 0x19, 0xe2, 0xb5, - 0x4b, 0x8c, 0xfc, 0x9e, 0x18, 0xb0, 0x33, 0x89, 0x6e, 0xde, 0x61, 0x0a, 0xe3, 0x5e, 0xa3, 0x5d, 0x2e, 0x80, 0x3e, - 0x53, 0x67, 0xfb, 0x7b, 0x7a, 0xbf, 0xd5, 0xf4, 0x47 -}; -static const uint8_t AES_GMAC_VECTOR_2_OUT[16] = { 0x67, 0x39, 0x4f, 0x00, 0x04, 0x28, 0xaf, 0xe9, - 0xb4, 0x2e, 0xb5, 0x3c, 0x42, 0x24, 0x86, 0xa3 }; +static const uint8_t AES_GMAC_VECTOR_2_KEY[32] = { 0x63, 0x2f, 0xd9, 0x48, 0xcf, 0x70, 0xe2, 0xee, 0x70, 0x63, 0xe8, 0x7a, 0x4a, 0x2a, 0x39, 0x9b, 0x67, 0x08, 0x64, 0x03, 0x68, 0x9d, 0xbc, 0x60, 0xea, 0x68, 0x4a, 0x7a, 0x83, 0x37, 0x00, 0xfe }; +static const uint8_t AES_GMAC_VECTOR_2_IV[12] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b }; +static const uint8_t AES_GMAC_VECTOR_2_IN[541] = { 0xc8, 0x36, 0x38, 0xe8, 0x53, 0xc8, 0x86, 0xa3, 0xe3, 0xad, 0x9e, 0x2a, 0x91, 0x47, 0xb9, 0x51, 0xad, 0xf7, 0x78, 0x89, 0x9a, 0xeb, 0x80, 0x41, 0x67, 0xa9, 0x16, 0xc4, 0x93, 0xcc, 0x77, 0x3d, 0x8c, 0xcf, 0x4d, 0xb5, 0x0b, 0xda, 0xfd, 0xc2, 0x8c, 0x83, 0x5d, 0x66, 0x43, 0x74, 0x21, 0xbd, 0xc4, 0xab, + 0x41, 0xd8, 0x40, 0x53, 0x34, 0xe8, 0x05, 0xcb, 0x89, 0x45, 0x09, 0xb0, 0xa4, 0xa6, 0x04, 0x95, 0x19, 0x2c, 0xab, 0x94, 0xe1, 0x8d, 0x7b, 0x59, 0x8b, 0xb9, 0x31, 0xae, 0x3c, 0x25, 0xd3, 0x23, 0xab, 0x8f, 0x95, 0xa3, 0x8b, 0xa5, 0xc1, 0x66, 0x8b, 0x57, 0xe4, 0x88, 0x70, 0xc9, 0xe0, 0xa1, 0x16, 0x39, + 0xf8, 0x12, 0xb3, 0xe5, 0x95, 0x38, 0x3a, 0x01, 0x1d, 0xcc, 0xc0, 0xc3, 0xa9, 0x1c, 0x72, 0xa7, 0x46, 0x79, 0x51, 0x05, 0xb2, 0x85, 0x5a, 0x97, 0x16, 0x97, 0xa6, 0x85, 0xa4, 0xf2, 0x0b, 0x3c, 0x90, 0x52, 0xa3, 0xe0, 0xbe, 0xad, 0x06, 0x1b, 0x8e, 0x04, 0x22, 0xeb, 0x3a, 0x48, 0xb9, 0x84, 0x24, 0x0b, + 0x24, 0x42, 0xd9, 0xed, 0x6b, 0x5c, 0xc1, 0xb6, 0x2e, 0xa5, 0xc0, 0x07, 0xfe, 0x3e, 0xbc, 0x9a, 0x92, 0x26, 0xb5, 0xa6, 0x5f, 0x09, 0x13, 0x85, 0x5a, 0xcf, 0x61, 0x56, 0x65, 0x0f, 0x4c, 0x64, 0x79, 0xfa, 0x0a, 0xcf, 0xc0, 0x95, 0x8d, 0x4d, 0xc6, 0xbe, 0xee, 0xb3, 0x67, 0xd8, 0xa7, 0x40, 0x90, 0x61, + 0xe3, 0xba, 0xcb, 0x18, 0xe0, 0x61, 0x7b, 0x33, 0x86, 0xf7, 0xef, 0x64, 0xe5, 0x36, 0xf0, 0x9c, 0xb6, 0x34, 0xb1, 0xe1, 0x2a, 0xd8, 0xd8, 0x5e, 0x6b, 0x61, 0x92, 0xa0, 0x8e, 0x04, 0x7b, 0xbf, 0xa5, 0x84, 0x39, 0x3a, 0xe0, 0x27, 0xc7, 0xb0, 0x83, 0x88, 0x4f, 0x3e, 0x49, 0x14, 0xaa, 0x34, 0xde, 0xb4, + 0xbb, 0x4c, 0xe4, 0xbf, 0xae, 0x9a, 0xf9, 0x88, 0x7a, 0x1f, 0x18, 0xa0, 0x8c, 0x60, 0xc0, 0x5c, 0x46, 0xa1, 0xd1, 0x36, 0x99, 0x60, 0x9b, 0x73, 0xa2, 0x9a, 0x0b, 0x8d, 0x6e, 0x2f, 0xe1, 0x58, 0x7a, 0x39, 0x71, 0xed, 0xfc, 0x34, 0xe4, 0x98, 0x57, 0x7e, 0x86, 0xf1, 0xe5, 0x00, 0x7d, 0x1b, 0x6a, 0xfa, + 0xf8, 0x6e, 0x7b, 0x12, 0x44, 0x04, 0x60, 0x02, 0x81, 0x12, 0x09, 0x00, 0xb4, 0x35, 0x9e, 0x03, 0x73, 0x79, 0x9b, 0x13, 0xc5, 0xd7, 0x0e, 0xce, 0x49, 0x87, 0x48, 0x1a, 0x67, 0x89, 0x93, 0xef, 0xd1, 0xdf, 0x2d, 0x48, 0x6d, 0x30, 0xd5, 0xec, 0x49, 0xfe, 0x15, 0x1b, 0xa6, 0x2b, 0x6c, 0x08, 0x8e, 0x39, + 0x73, 0x68, 0x87, 0xa7, 0x43, 0x28, 0x16, 0x77, 0x86, 0xd1, 0xcb, 0x13, 0xe4, 0xd3, 0xda, 0x63, 0xcd, 0x3a, 0x2a, 0x35, 0xd5, 0xfa, 0x36, 0x67, 0xc8, 0x4c, 0x6b, 0xa1, 0x8a, 0xaf, 0x7b, 0x4c, 0x43, 0xb0, 0x2f, 0x4a, 0xcc, 0xc0, 0x11, 0xc6, 0x30, 0x8e, 0xa3, 0xd2, 0x4a, 0x1b, 0x2a, 0x4f, 0xec, 0x97, + 0x83, 0xa6, 0x4c, 0xee, 0x51, 0xaf, 0x06, 0x0a, 0x1d, 0x80, 0xd9, 0xcf, 0xb7, 0x69, 0x23, 0x15, 0x3a, 0x26, 0x04, 0x34, 0x33, 0x76, 0x30, 0x9f, 0xfb, 0x56, 0xb4, 0x26, 0xee, 0xfa, 0x54, 0x6c, 0x18, 0xf9, 0xd5, 0x32, 0x5d, 0x03, 0xcb, 0x2c, 0x20, 0x30, 0x0c, 0xa0, 0xbb, 0xde, 0x01, 0x77, 0x65, 0xb0, + 0x18, 0x30, 0xd2, 0x55, 0x9f, 0x9b, 0xcf, 0xb8, 0x9b, 0xb4, 0xbc, 0x0b, 0x49, 0x52, 0x53, 0x30, 0x48, 0xa5, 0x12, 0xe5, 0x3b, 0x47, 0x84, 0xff, 0xf1, 0x53, 0x5d, 0x5c, 0x04, 0x70, 0x63, 0x91, 0xc3, 0xc0, 0xf0, 0xea, 0xcb, 0x44, 0x4f, 0x8c, 0x85, 0x42, 0x6a, 0xc7, 0xfa, 0xc7, 0xb5, 0x30, 0x03, 0x12, + 0x65, 0xca, 0xba, 0x4f, 0x67, 0xbb, 0xef, 0xb6, 0xc6, 0x3f, 0x19, 0xe2, 0xb5, 0x4b, 0x8c, 0xfc, 0x9e, 0x18, 0xb0, 0x33, 0x89, 0x6e, 0xde, 0x61, 0x0a, 0xe3, 0x5e, 0xa3, 0x5d, 0x2e, 0x80, 0x3e, 0x53, 0x67, 0xfb, 0x7b, 0x7a, 0xbf, 0xd5, 0xf4, 0x47 }; +static const uint8_t AES_GMAC_VECTOR_2_OUT[16] = { 0x67, 0x39, 0x4f, 0x00, 0x04, 0x28, 0xaf, 0xe9, 0xb4, 0x2e, 0xb5, 0x3c, 0x42, 0x24, 0x86, 0xa3 }; struct C25519TestVector { uint8_t pub1[64]; @@ -331,1043 +200,467 @@ struct C25519TestVector { #define ZT_NUM_C25519_TEST_VECTORS 32 static const C25519TestVector C25519_TEST_VECTORS[ZT_NUM_C25519_TEST_VECTORS] = { - { { 0xa1, 0xfc, 0x7a, 0xb4, 0x6d, 0xdf, 0x7d, 0xcf, 0xe7, 0xec, 0x75, 0xe5, 0xfa, 0xdd, 0x11, 0xcb, - 0xcc, 0x37, 0xf8, 0x84, 0x5d, 0x1c, 0x92, 0x4e, 0x09, 0x89, 0x65, 0xfc, 0xd8, 0xe9, 0x5a, 0x30, - 0xda, 0xe4, 0x86, 0xa3, 0x35, 0xb4, 0x19, 0x0c, 0xbc, 0x7b, 0xcb, 0x3e, 0xb9, 0x4c, 0xbd, 0x16, - 0xe8, 0x3d, 0x13, 0x2b, 0xc9, 0xc3, 0x39, 0xea, 0xf1, 0x42, 0xe7, 0x6f, 0x69, 0x78, 0x9a, 0xb7 }, - { 0xe5, 0xf3, 0x7b, 0xd4, 0x0e, 0xc9, 0xdc, 0x77, 0x50, 0x86, 0xdc, 0xf4, 0x2e, 0xbc, 0xdb, 0x27, - 0xf0, 0x73, 0xd4, 0x58, 0x73, 0xc4, 0x4b, 0x71, 0x8b, 0x3c, 0xc5, 0x4f, 0xa8, 0x7c, 0xa4, 0x84, - 0xd9, 0x96, 0x23, 0x73, 0xb4, 0x03, 0x16, 0xbf, 0x1e, 0xa1, 0x2d, 0xd8, 0xc4, 0x8a, 0xe7, 0x82, - 0x10, 0xda, 0xc9, 0xe5, 0x45, 0x9b, 0x01, 0xdc, 0x73, 0xa6, 0xc9, 0x17, 0xa8, 0x15, 0x31, 0x6d }, - { 0x3e, 0x49, 0xa4, 0x0e, 0x3a, 0xaf, 0xa3, 0x07, 0x3d, 0xf7, 0x2a, 0xec, 0x43, 0xb1, 0xd4, 0x09, - 0x1a, 0xcb, 0x8e, 0x92, 0xf9, 0x65, 0x95, 0x04, 0x6d, 0x2d, 0x9b, 0x34, 0xa3, 0xbf, 0x51, 0x00, - 0xe2, 0xee, 0x23, 0xf5, 0x28, 0x0a, 0xa9, 0xb1, 0x57, 0x0b, 0x96, 0x56, 0x62, 0xba, 0x12, 0x94, - 0xaf, 0xc6, 0x5f, 0xb5, 0x61, 0x43, 0x0f, 0xde, 0x0b, 0xab, 0xfa, 0x4f, 0xfe, 0xc5, 0xe7, 0x18 }, - { 0x00, 0x4d, 0x41, 0x8d, 0xe4, 0x69, 0x23, 0xae, 0x98, 0xc4, 0x3e, 0x77, 0x0f, 0x1d, 0x94, 0x5d, - 0x29, 0x3e, 0x94, 0x5a, 0x38, 0x39, 0x20, 0x0f, 0xd3, 0x6f, 0x76, 0xa2, 0x29, 0x02, 0x03, 0xcb, - 0x0b, 0x7f, 0x4f, 0x1a, 0x29, 0x51, 0x13, 0x33, 0x7c, 0x99, 0xb3, 0x81, 0x82, 0x39, 0x44, 0x05, - 0x97, 0xfb, 0x0d, 0xf2, 0x93, 0xa2, 0x40, 0x94, 0xf4, 0xff, 0x5d, 0x09, 0x61, 0xe4, 0x5f, 0x76 }, - { 0xab, 0xce, 0xd2, 0x24, 0xe8, 0x93, 0xb0, 0xe7, 0x72, 0x14, 0xdc, 0xbb, 0x7d, 0x0f, 0xd8, 0x94, - 0x16, 0x9e, 0xb5, 0x7f, 0xd7, 0x19, 0x5f, 0x3e, 0x2d, 0x45, 0xd5, 0xf7, 0x90, 0x0b, 0x3e, 0x05, - 0x18, 0x2e, 0x2b, 0xf4, 0xfa, 0xd4, 0xec, 0x62, 0x4a, 0x4f, 0x48, 0x50, 0xaf, 0x1c, 0xe8, 0x9f, - 0x1a, 0xe1, 0x3d, 0x70, 0x49, 0x00, 0xa7, 0xe3, 0x5b, 0x1e, 0xa1, 0x9b, 0x68, 0x1e, 0xa1, 0x73 }, - { 0xed, 0xb6, 0xd0, 0xf0, 0x06, 0x6e, 0x33, 0x9c, 0x86, 0xfb, 0xe8, 0xc3, 0x6c, 0x8d, 0xde, 0xdd, - 0xa6, 0xa0, 0x2d, 0xb9, 0x07, 0x29, 0xa3, 0x13, 0xbb, 0xa4, 0xba, 0xec, 0x48, 0xc8, 0xf4, 0x56, - 0x82, 0x79, 0xe2, 0xb1, 0xd3, 0x3d, 0x83, 0x9f, 0x10, 0xe8, 0x52, 0xe6, 0x8b, 0x1c, 0x33, 0x9e, - 0x2b, 0xd2, 0xdb, 0x62, 0x1c, 0x56, 0xfd, 0x50, 0x40, 0x77, 0x81, 0xab, 0x21, 0x67, 0x3e, 0x09, - 0x4f, 0xf2, 0x51, 0xac, 0x7d, 0xe7, 0xd1, 0x5d, 0x4b, 0xe2, 0x08, 0xc6, 0x3f, 0x6a, 0x4d, 0xc8, - 0x5d, 0x74, 0xf6, 0x3b, 0xec, 0x8e, 0xc6, 0x0c, 0x32, 0x27, 0x2f, 0x9c, 0x09, 0x48, 0x59, 0x10 }, - { 0x23, 0x0f, 0xa3, 0xe2, 0x69, 0xce, 0xb9, 0xb9, 0xd1, 0x1c, 0x4e, 0xab, 0x63, 0xc9, 0x2e, 0x1e, - 0x7e, 0xa2, 0xa2, 0xa0, 0x49, 0x2e, 0x78, 0xe4, 0x8a, 0x02, 0x3b, 0xa7, 0xab, 0x1f, 0xd4, 0xce, - 0x05, 0xe2, 0x80, 0x09, 0x09, 0x3c, 0x61, 0xc7, 0x10, 0x3a, 0x9c, 0xf4, 0x95, 0xac, 0x89, 0x6f, - 0x23, 0xb3, 0x09, 0xe2, 0x24, 0x3f, 0xf6, 0x96, 0x02, 0x36, 0x41, 0x16, 0x32, 0xe1, 0x66, 0x05, - 0x4f, 0xf2, 0x51, 0xac, 0x7d, 0xe7, 0xd1, 0x5d, 0x4b, 0xe2, 0x08, 0xc6, 0x3f, 0x6a, 0x4d, 0xc8, - 0x5d, 0x74, 0xf6, 0x3b, 0xec, 0x8e, 0xc6, 0x0c, 0x32, 0x27, 0x2f, 0x9c, 0x09, 0x48, 0x59, 0x10 } }, - { { 0xfd, 0x81, 0x14, 0xf1, 0x67, 0x07, 0x44, 0xbb, 0x93, 0x84, 0xa2, 0xdc, 0x36, 0xdc, 0xcc, 0xb3, - 0x9e, 0x82, 0xd4, 0x8b, 0x42, 0x56, 0xfb, 0xf2, 0x6e, 0x83, 0x3b, 0x16, 0x2c, 0x29, 0xfb, 0x39, - 0x29, 0x48, 0x85, 0xe3, 0xe3, 0xf7, 0xe7, 0x80, 0x49, 0xd3, 0x01, 0x30, 0x5a, 0x2c, 0x3f, 0x4c, - 0xea, 0x13, 0xeb, 0xda, 0xf4, 0x56, 0x75, 0x8d, 0x50, 0x1e, 0x19, 0x2d, 0x29, 0x2b, 0xfb, 0xdb }, - { 0x85, 0x34, 0x4d, 0xf7, 0x39, 0xbf, 0x98, 0x79, 0x8c, 0x98, 0xeb, 0x8d, 0x61, 0x27, 0xec, 0x87, - 0x56, 0xcd, 0xd0, 0xa6, 0x55, 0x77, 0xee, 0xf0, 0x20, 0xd0, 0x59, 0x39, 0x95, 0xab, 0x29, 0x82, - 0x8e, 0x61, 0xf8, 0xad, 0xed, 0xb6, 0x27, 0xc3, 0xd8, 0x16, 0xce, 0x67, 0x78, 0xe2, 0x04, 0x4b, - 0x0c, 0x2d, 0x2f, 0xc3, 0x24, 0x72, 0xbc, 0x53, 0xbd, 0xfe, 0x39, 0x23, 0xd4, 0xaf, 0x27, 0x84 }, - { 0x11, 0xbe, 0x5f, 0x5a, 0x73, 0xe7, 0x42, 0xef, 0xff, 0x3c, 0x47, 0x6a, 0x0e, 0x6b, 0x9e, 0x96, - 0x21, 0xa3, 0xdf, 0x49, 0xe9, 0x3f, 0x40, 0xfc, 0xab, 0xb3, 0x66, 0xd3, 0x3d, 0xfa, 0x02, 0x29, - 0xf3, 0x43, 0x45, 0x3c, 0x70, 0xa3, 0x5d, 0x39, 0xf7, 0xc0, 0x6a, 0xcd, 0xfa, 0x1d, 0xbe, 0x3b, - 0x91, 0x41, 0xe4, 0xb0, 0x60, 0xc0, 0x22, 0xf7, 0x2c, 0x11, 0x2b, 0x1c, 0x5f, 0x24, 0xef, 0x53 }, - { 0xfd, 0x3f, 0x09, 0x06, 0xc9, 0x39, 0x8d, 0x48, 0xfa, 0x6b, 0xc9, 0x80, 0xbf, 0xf6, 0xd6, 0x76, - 0xb3, 0x62, 0x70, 0x88, 0x4f, 0xde, 0xde, 0xb9, 0xb4, 0xf0, 0xce, 0xf3, 0x74, 0x0d, 0xea, 0x00, - 0x9e, 0x9c, 0x29, 0xe1, 0xa2, 0x1b, 0xbd, 0xb5, 0x83, 0xcc, 0x12, 0xd8, 0x48, 0x08, 0x5b, 0xe5, - 0xd6, 0xf9, 0x11, 0x5c, 0xe0, 0xd9, 0xc3, 0x3c, 0x26, 0xbd, 0x69, 0x9f, 0x5c, 0x6f, 0x0c, 0x6f }, - { 0xca, 0xd4, 0x76, 0x32, 0x8b, 0xbe, 0x0c, 0x65, 0x75, 0x43, 0x73, 0xc2, 0xf2, 0xfd, 0x7f, 0xeb, - 0xe4, 0x62, 0xc5, 0x0d, 0x0f, 0xf9, 0x01, 0xc8, 0xb9, 0xfa, 0xca, 0xb4, 0x12, 0x1c, 0xb4, 0xac, - 0x0e, 0x5f, 0x18, 0xfc, 0x0c, 0x7f, 0x2a, 0x55, 0xc5, 0xfd, 0x4d, 0x83, 0xb2, 0x02, 0x31, 0x6a, - 0x3f, 0x14, 0xee, 0x9d, 0x11, 0xa8, 0x06, 0xad, 0xeb, 0x93, 0x19, 0x79, 0xb1, 0xf2, 0x78, 0x05 }, - { 0x85, 0xe6, 0xe2, 0xf2, 0x96, 0xe7, 0xa2, 0x8b, 0x7e, 0x36, 0xbd, 0x7b, 0xf4, 0x28, 0x6a, 0xd7, - 0xbc, 0x2a, 0x6a, 0x59, 0xfd, 0xc0, 0xc8, 0x3d, 0x50, 0x0f, 0x0c, 0x2b, 0x12, 0x3a, 0x75, 0xc7, - 0x56, 0xbb, 0x7f, 0x7d, 0x4e, 0xd4, 0x03, 0xb8, 0x7b, 0xde, 0xde, 0x99, 0x65, 0x9e, 0xc4, 0xa6, - 0x6e, 0xfe, 0x00, 0x88, 0xeb, 0x9d, 0xa4, 0xa9, 0x9d, 0x37, 0xc9, 0x4a, 0xcf, 0x69, 0xc4, 0x01, - 0xba, 0xa8, 0xce, 0xeb, 0x72, 0xcb, 0x64, 0x8b, 0x9f, 0xc1, 0x1f, 0x9a, 0x9e, 0x99, 0xcc, 0x39, - 0xec, 0xd9, 0xbb, 0xd9, 0xce, 0xc2, 0x74, 0x6f, 0xd0, 0x2a, 0xb9, 0xc6, 0xe3, 0xf5, 0xe7, 0xf4 }, - { 0xb1, 0x39, 0x50, 0xb1, 0x1a, 0x08, 0x42, 0x2b, 0xdd, 0x6d, 0x20, 0x9f, 0x0f, 0x37, 0xba, 0x69, - 0x97, 0x21, 0x30, 0x7a, 0x71, 0x2f, 0xce, 0x98, 0x09, 0x04, 0xa2, 0x98, 0x6a, 0xed, 0x02, 0x1d, - 0x5d, 0x30, 0x8f, 0x03, 0x47, 0x6b, 0x89, 0xfd, 0xf7, 0x1a, 0xca, 0x46, 0x6f, 0x51, 0x69, 0x9a, - 0x2b, 0x18, 0x77, 0xe4, 0xad, 0x0d, 0x7a, 0x66, 0xd2, 0x2c, 0x28, 0xa0, 0xd3, 0x0a, 0x99, 0x0d, - 0xba, 0xa8, 0xce, 0xeb, 0x72, 0xcb, 0x64, 0x8b, 0x9f, 0xc1, 0x1f, 0x9a, 0x9e, 0x99, 0xcc, 0x39, - 0xec, 0xd9, 0xbb, 0xd9, 0xce, 0xc2, 0x74, 0x6f, 0xd0, 0x2a, 0xb9, 0xc6, 0xe3, 0xf5, 0xe7, 0xf4 } }, - { { 0x02, 0x3a, 0x7e, 0x0c, 0x6d, 0x96, 0x3c, 0x5d, 0x44, 0x56, 0x5d, 0xc1, 0x49, 0x94, 0x35, 0x12, - 0x9d, 0xff, 0x8a, 0x5d, 0x91, 0x74, 0xa8, 0x15, 0xee, 0x5d, 0x1e, 0x72, 0xbe, 0x86, 0x15, 0x68, - 0xe7, 0x36, 0xa2, 0x4a, 0xb8, 0xa2, 0xa4, 0x4c, 0xd8, 0x95, 0xe3, 0xc7, 0xbb, 0x32, 0x21, 0x90, - 0x64, 0x52, 0x32, 0xeb, 0x26, 0xd3, 0x4f, 0xf0, 0x8e, 0x27, 0x40, 0xea, 0xed, 0xdb, 0xf5, 0xc4 }, - { 0x76, 0x99, 0x64, 0x70, 0xf4, 0x50, 0xc8, 0xcc, 0x4a, 0x5a, 0xa5, 0x0f, 0xeb, 0x2d, 0xc7, 0x0e, - 0x73, 0xd0, 0x65, 0x7d, 0xc3, 0xce, 0x73, 0x03, 0x20, 0x2f, 0xad, 0x65, 0xfd, 0x12, 0xe4, 0x7f, - 0xfd, 0x45, 0x3a, 0x6e, 0xc5, 0x9a, 0x06, 0x67, 0x0e, 0xa6, 0x7b, 0x21, 0x49, 0x2d, 0x01, 0x1b, - 0x8e, 0x03, 0x6e, 0x10, 0x08, 0x0c, 0x68, 0xd9, 0x60, 0x47, 0xa4, 0xe2, 0x52, 0xfd, 0x3c, 0xf4 }, - { 0xa3, 0xe2, 0x5f, 0x16, 0x39, 0x78, 0x96, 0xf7, 0x47, 0x6f, 0x93, 0x5d, 0x27, 0x7b, 0x58, 0xe0, - 0xc5, 0xdb, 0x71, 0x7d, 0xa9, 0x6f, 0xf8, 0x8b, 0x69, 0xdd, 0x50, 0xea, 0x91, 0x0d, 0x66, 0x77, - 0xaf, 0x8f, 0xd5, 0x9f, 0x8a, 0x26, 0x69, 0x4c, 0x64, 0x37, 0x62, 0x81, 0x6f, 0x05, 0x9a, 0x08, - 0x0d, 0xe1, 0x69, 0x24, 0x77, 0x3f, 0x50, 0xb2, 0x49, 0x4d, 0x93, 0xef, 0x2e, 0x87, 0xff, 0xde }, - { 0xb3, 0x32, 0xe2, 0x67, 0x79, 0x32, 0x5f, 0x64, 0x47, 0x49, 0x1c, 0xd3, 0x8f, 0x95, 0x44, 0xfd, - 0x4c, 0x7e, 0xbf, 0x6b, 0xb7, 0xaf, 0x2c, 0xdd, 0x8f, 0xa5, 0xd8, 0x2f, 0xbf, 0xa0, 0x8a, 0x6b, - 0x58, 0x25, 0xc9, 0x12, 0x23, 0x6f, 0xe6, 0x05, 0xa8, 0xd0, 0x68, 0x6e, 0x0c, 0xee, 0x70, 0xe4, - 0xa3, 0x86, 0x51, 0x04, 0x6d, 0xca, 0xd5, 0xed, 0xcf, 0x74, 0x1d, 0x60, 0x9e, 0x86, 0x2d, 0x05 }, - { 0x91, 0xf4, 0x5f, 0x4a, 0xcb, 0xd8, 0xfd, 0x5f, 0xb9, 0x3d, 0x04, 0xb8, 0xec, 0x35, 0x85, 0x4f, - 0x58, 0x20, 0xd1, 0x1f, 0x47, 0xc4, 0xf4, 0xcb, 0x21, 0x4e, 0x9a, 0xf1, 0x6e, 0xbf, 0xe3, 0xd3, - 0x62, 0xe3, 0x82, 0xf6, 0xba, 0xa8, 0xdf, 0x92, 0xe2, 0x3c, 0xe5, 0xf0, 0x16, 0x8a, 0xeb, 0xa4, - 0xbb, 0xc7, 0x81, 0xaf, 0x15, 0x19, 0x87, 0x5f, 0xb7, 0xe0, 0x4c, 0x12, 0xff, 0x2c, 0xa9, 0xc8 }, - { 0xaf, 0x85, 0xe0, 0x36, 0x43, 0xdf, 0x41, 0x17, 0xda, 0xde, 0x5e, 0xb6, 0x33, 0xd0, 0xce, 0x62, - 0x70, 0x5f, 0x85, 0x24, 0x6c, 0x3e, 0x1b, 0xe1, 0x52, 0xc1, 0x9b, 0x1c, 0xcd, 0x61, 0x80, 0x9c, - 0xa0, 0xe8, 0x18, 0xee, 0x40, 0x91, 0x93, 0x82, 0xdb, 0x33, 0x44, 0xff, 0xd4, 0xf6, 0x6f, 0x5d, - 0xf0, 0x0e, 0x92, 0x92, 0x81, 0x55, 0x46, 0x06, 0xac, 0x58, 0x81, 0x3b, 0x04, 0xc7, 0xf7, 0x0d, - 0xd2, 0x0c, 0x08, 0x6d, 0x46, 0xdb, 0x43, 0x28, 0x31, 0xd8, 0xcd, 0x87, 0x50, 0xbb, 0xd3, 0x07, - 0xf5, 0x72, 0x0b, 0x15, 0x7c, 0x16, 0xab, 0x03, 0xd9, 0x4b, 0x07, 0x38, 0x97, 0xe8, 0xd6, 0xb5 }, - { 0x93, 0xff, 0x6d, 0xc3, 0x62, 0xf7, 0xcc, 0x20, 0x95, 0xc2, 0x2f, 0x7d, 0x1d, 0x9b, 0xd1, 0x63, - 0xfc, 0x61, 0x47, 0xb3, 0x22, 0x0f, 0xca, 0xb0, 0x16, 0xcf, 0x29, 0x53, 0x46, 0x97, 0xb1, 0x36, - 0x46, 0xac, 0x48, 0x13, 0x92, 0xe4, 0x46, 0x68, 0xcf, 0x09, 0x4e, 0xfa, 0x59, 0x45, 0x24, 0x08, - 0xdb, 0xb4, 0x6f, 0x20, 0x55, 0x12, 0xd9, 0x75, 0x9d, 0x8e, 0x0b, 0xf8, 0x63, 0xe0, 0xf9, 0x01, - 0xd2, 0x0c, 0x08, 0x6d, 0x46, 0xdb, 0x43, 0x28, 0x31, 0xd8, 0xcd, 0x87, 0x50, 0xbb, 0xd3, 0x07, - 0xf5, 0x72, 0x0b, 0x15, 0x7c, 0x16, 0xab, 0x03, 0xd9, 0x4b, 0x07, 0x38, 0x97, 0xe8, 0xd6, 0xb5 } }, - { { 0x14, 0x35, 0xa6, 0x7d, 0xc1, 0xb5, 0x71, 0xca, 0x42, 0x50, 0x90, 0xa7, 0x72, 0x85, 0xbe, 0x78, - 0x7a, 0x5f, 0x83, 0x1e, 0xbe, 0xef, 0x6a, 0xbe, 0x48, 0xc5, 0x68, 0x14, 0x0c, 0xf7, 0x44, 0x5c, - 0x2e, 0xfd, 0x1b, 0xcc, 0xee, 0x09, 0x23, 0x82, 0x31, 0xad, 0xaf, 0x4b, 0x73, 0x9c, 0xf2, 0x88, - 0x3c, 0xf3, 0xb5, 0x43, 0x8b, 0x53, 0xf9, 0xac, 0x17, 0x86, 0x1c, 0xc2, 0x53, 0x43, 0xec, 0x03 }, - { 0x7b, 0x36, 0x6c, 0xcc, 0xb5, 0xb2, 0x23, 0x3d, 0x7c, 0xe5, 0xe7, 0xcf, 0x06, 0xe2, 0x32, 0x0b, - 0xc5, 0x3b, 0x7f, 0x86, 0x40, 0xfc, 0xaf, 0xba, 0x94, 0xe0, 0x88, 0x58, 0x5b, 0xac, 0xe8, 0xc3, - 0xe8, 0xc3, 0xdf, 0xc4, 0x45, 0x29, 0xe8, 0xf0, 0x1c, 0x10, 0x0d, 0x50, 0x81, 0x29, 0x30, 0xa8, - 0x27, 0xb5, 0x3e, 0xb8, 0x25, 0xf1, 0x17, 0x30, 0xc6, 0x05, 0xe3, 0x3e, 0x45, 0x38, 0xa8, 0x3c }, - { 0xce, 0xd9, 0x45, 0x28, 0xb0, 0xce, 0xa5, 0x47, 0xa8, 0x29, 0x32, 0x76, 0x99, 0x73, 0x8d, 0x74, - 0xf9, 0xed, 0x0a, 0xd0, 0xf1, 0xd8, 0x7e, 0x44, 0x63, 0x9e, 0x9a, 0xcf, 0x7c, 0x35, 0x8a, 0x29, - 0xbb, 0x71, 0x66, 0x8d, 0xa7, 0xfc, 0x05, 0x3d, 0xd4, 0x4b, 0x65, 0x20, 0xf5, 0xa4, 0x64, 0xd8, - 0x9d, 0x16, 0x80, 0x9c, 0xb2, 0x3c, 0x3e, 0xd4, 0x9d, 0x09, 0x88, 0x8e, 0xbb, 0x58, 0xf8, 0x77 }, - { 0xe1, 0x29, 0xb3, 0x16, 0xe6, 0xa0, 0xdb, 0x64, 0x08, 0x36, 0xdc, 0x33, 0xad, 0x8b, 0x30, 0x26, - 0x17, 0x56, 0xd7, 0x34, 0x17, 0xd1, 0xdd, 0x23, 0x38, 0x58, 0x25, 0x01, 0x42, 0x5a, 0x9d, 0x18, - 0x3e, 0xac, 0x31, 0xfa, 0x43, 0x28, 0xc4, 0x65, 0xfb, 0x30, 0x2f, 0x8c, 0x16, 0x52, 0x32, 0x1b, - 0x19, 0xb7, 0x31, 0xf6, 0x67, 0xa7, 0xd8, 0xed, 0x9a, 0xa3, 0x95, 0x01, 0xd7, 0xb9, 0xe7, 0xcc }, - { 0x81, 0x2d, 0x11, 0xa9, 0x11, 0xf1, 0x22, 0xe2, 0x67, 0x70, 0xc4, 0xba, 0x34, 0xa1, 0x75, 0x8c, - 0xf6, 0x0c, 0x63, 0xe7, 0x01, 0x3c, 0x64, 0x6c, 0xe8, 0xd0, 0xf8, 0x8e, 0x88, 0xdf, 0x5c, 0x61, - 0x68, 0x5d, 0x1f, 0xeb, 0x83, 0x1f, 0x40, 0xb8, 0xa8, 0x56, 0x57, 0x26, 0x81, 0x2c, 0xa3, 0x0e, - 0x48, 0x4c, 0x45, 0x4d, 0x0d, 0x3d, 0x6e, 0x99, 0x52, 0xbd, 0x0b, 0xd8, 0x05, 0xc5, 0xf9, 0x61 }, - { 0x92, 0x45, 0xbe, 0xe6, 0xb4, 0x7a, 0xfa, 0x28, 0xd4, 0x5b, 0x6b, 0x17, 0xc6, 0x13, 0x61, 0x5d, - 0x5f, 0xd7, 0x90, 0xbb, 0x89, 0x35, 0x7a, 0x02, 0x50, 0x57, 0x56, 0x5f, 0x19, 0xb5, 0xb6, 0xc5, - 0x77, 0x1e, 0x1b, 0xc0, 0xd7, 0x7a, 0x29, 0xbd, 0xe7, 0x24, 0x01, 0x2d, 0x37, 0xc0, 0x38, 0x6f, - 0xc8, 0x35, 0xa1, 0x1b, 0xe0, 0xea, 0x16, 0xad, 0xbc, 0xdc, 0xd4, 0x8d, 0x4e, 0x71, 0xdb, 0x05, - 0x9e, 0xb5, 0x53, 0x6b, 0x5c, 0xf1, 0x7d, 0x15, 0x8b, 0xd7, 0xc7, 0x8b, 0x89, 0x9d, 0xfd, 0x28, - 0x7c, 0xa1, 0x31, 0xe2, 0xf0, 0x2c, 0x3a, 0x8d, 0x0e, 0x23, 0x85, 0x4e, 0xf0, 0xd1, 0xc0, 0x83 }, - { 0x7b, 0x88, 0xeb, 0x45, 0x1c, 0x7f, 0xfd, 0xbe, 0xba, 0xac, 0x53, 0x28, 0x59, 0xe8, 0xad, 0x28, - 0xf1, 0x97, 0x2d, 0x6c, 0x31, 0xa6, 0xae, 0x47, 0x10, 0x69, 0x68, 0x55, 0xa6, 0x9c, 0x03, 0x62, - 0xb7, 0x2f, 0x31, 0x46, 0x2a, 0x2b, 0x98, 0xdd, 0xe9, 0xf9, 0xfe, 0x77, 0x71, 0x41, 0x54, 0xf8, - 0x59, 0x02, 0x7a, 0xe3, 0x45, 0x67, 0xb6, 0xf7, 0x94, 0x31, 0x3e, 0x62, 0x62, 0x2a, 0xf9, 0x0a, - 0x9e, 0xb5, 0x53, 0x6b, 0x5c, 0xf1, 0x7d, 0x15, 0x8b, 0xd7, 0xc7, 0x8b, 0x89, 0x9d, 0xfd, 0x28, - 0x7c, 0xa1, 0x31, 0xe2, 0xf0, 0x2c, 0x3a, 0x8d, 0x0e, 0x23, 0x85, 0x4e, 0xf0, 0xd1, 0xc0, 0x83 } }, - { { 0x27, 0x4d, 0x84, 0x08, 0x95, 0x84, 0xc8, 0xeb, 0x1c, 0x9a, 0x0f, 0xca, 0x09, 0x6f, 0x48, 0x8b, - 0x2b, 0x06, 0xa0, 0xae, 0xf2, 0xe3, 0x8a, 0xfe, 0xd7, 0x52, 0x4b, 0xf2, 0xc6, 0x7c, 0xc1, 0x55, - 0x87, 0x2e, 0x5a, 0xb4, 0xc2, 0x43, 0x0a, 0x0d, 0xd0, 0x00, 0xa8, 0xe1, 0x46, 0x68, 0x79, 0xd8, - 0x8c, 0x01, 0x36, 0xb7, 0x5a, 0x61, 0x04, 0xe9, 0x7e, 0xbb, 0xc9, 0xee, 0xaa, 0x12, 0x13, 0xda }, - { 0x78, 0x66, 0xd0, 0xa2, 0x50, 0x82, 0x8d, 0xb0, 0xa0, 0x20, 0xac, 0xa4, 0xb6, 0xa0, 0x31, 0xf7, - 0x7d, 0x93, 0x37, 0x67, 0xbb, 0x60, 0xa2, 0x1e, 0x36, 0xce, 0x3d, 0x48, 0x1d, 0x79, 0x99, 0xa5, - 0x19, 0xd8, 0x89, 0x1b, 0xcb, 0x14, 0x87, 0xb7, 0x62, 0xfd, 0xd2, 0xef, 0xbb, 0x13, 0x41, 0x4d, - 0xf1, 0x77, 0x5c, 0x7f, 0x6c, 0x3b, 0x94, 0x7d, 0xb4, 0xba, 0x87, 0x3e, 0xc8, 0xe1, 0x3c, 0x0a }, - { 0xd9, 0x9e, 0x14, 0x89, 0xd6, 0xf8, 0x49, 0xa2, 0xe2, 0x19, 0xfe, 0x94, 0xaa, 0xf7, 0x35, 0xf9, - 0x4a, 0xf8, 0xf3, 0x18, 0x68, 0x96, 0x47, 0xc6, 0x23, 0x7c, 0xb0, 0x53, 0xcb, 0xd8, 0x90, 0x31, - 0xb7, 0x50, 0x0e, 0x06, 0xc3, 0x84, 0x75, 0xf1, 0xac, 0x16, 0x4d, 0xc1, 0xbe, 0xf1, 0x80, 0x33, - 0x47, 0x56, 0x6f, 0x33, 0x94, 0x5c, 0x81, 0x03, 0x4c, 0x2f, 0x6d, 0xac, 0x73, 0xba, 0x91, 0x3c }, - { 0x2f, 0xa9, 0xb6, 0xe8, 0x73, 0xe2, 0xef, 0x6d, 0x6d, 0xd7, 0x2e, 0xa0, 0x51, 0x61, 0x24, 0x81, - 0x8c, 0xa8, 0x47, 0x40, 0xe1, 0xc7, 0x75, 0x79, 0xc8, 0xec, 0xb2, 0x23, 0x41, 0xad, 0x61, 0x3b, - 0xea, 0x8a, 0xdf, 0x63, 0xed, 0xe1, 0x8e, 0x50, 0x70, 0x6e, 0x86, 0xed, 0xb0, 0xba, 0x27, 0x48, - 0x8e, 0xb9, 0x63, 0x39, 0x78, 0x58, 0x4f, 0x1e, 0xbc, 0x45, 0xf3, 0xf2, 0x3a, 0x73, 0x9b, 0x8c }, - { 0xad, 0x42, 0xc5, 0x84, 0xca, 0xe1, 0xe1, 0x23, 0x2a, 0x73, 0x15, 0x3c, 0x9a, 0xfe, 0x85, 0x8d, - 0xa3, 0x2c, 0xcf, 0x46, 0x8d, 0x7f, 0x1c, 0x61, 0xd7, 0x0e, 0xb1, 0xa6, 0xb4, 0xae, 0xab, 0x63, - 0xc4, 0x0e, 0xf2, 0xa0, 0x5d, 0xa6, 0xf3, 0x5d, 0x35, 0x41, 0xea, 0x03, 0x91, 0xb1, 0x3a, 0x07, - 0xe6, 0xed, 0x6c, 0x8c, 0xcb, 0x75, 0x27, 0xf1, 0x26, 0x58, 0xf0, 0x62, 0x57, 0xe4, 0x33, 0x00 }, - { 0x1f, 0xed, 0x53, 0xc6, 0xef, 0x38, 0x26, 0xa4, 0x18, 0x88, 0x8f, 0x5c, 0x49, 0x1c, 0x15, 0x7d, - 0x77, 0x90, 0x06, 0x39, 0xe0, 0x7c, 0x25, 0xed, 0x79, 0x05, 0x66, 0xe0, 0x5e, 0x94, 0xe3, 0x46, - 0x6f, 0x96, 0xd8, 0xc1, 0x11, 0xa4, 0x11, 0x6f, 0x78, 0x42, 0x8e, 0x89, 0xc7, 0xc3, 0xed, 0xd2, - 0x9e, 0x68, 0x47, 0x79, 0x89, 0x23, 0x70, 0x14, 0x21, 0x60, 0x2d, 0xfe, 0x37, 0x4b, 0xc8, 0x0a, - 0x16, 0x73, 0x7c, 0xc4, 0x55, 0x3f, 0x25, 0x04, 0x08, 0x75, 0x74, 0x68, 0xbc, 0xe4, 0x3a, 0xae, - 0x4c, 0x0e, 0xd2, 0x85, 0xa1, 0xbc, 0x81, 0xc0, 0xc9, 0xfe, 0x9a, 0x44, 0x7b, 0x83, 0xdf, 0xc7 }, - { 0x27, 0x77, 0x97, 0x84, 0x0f, 0x2d, 0x8d, 0x33, 0xb8, 0x4e, 0xdb, 0x8b, 0xea, 0x58, 0x52, 0x88, - 0x95, 0x88, 0x55, 0x5f, 0xb8, 0xc4, 0xc9, 0xd6, 0x1f, 0x1e, 0xee, 0x60, 0xb5, 0xeb, 0x78, 0x72, - 0xb5, 0xe5, 0x22, 0x2b, 0x7f, 0x5e, 0xc7, 0x9b, 0x29, 0x55, 0x8e, 0x2a, 0xfc, 0x65, 0x55, 0x4a, - 0x02, 0xad, 0x64, 0x06, 0xd4, 0x25, 0xe1, 0x96, 0x6f, 0xee, 0x96, 0xcd, 0x29, 0xc6, 0x64, 0x00, - 0x16, 0x73, 0x7c, 0xc4, 0x55, 0x3f, 0x25, 0x04, 0x08, 0x75, 0x74, 0x68, 0xbc, 0xe4, 0x3a, 0xae, - 0x4c, 0x0e, 0xd2, 0x85, 0xa1, 0xbc, 0x81, 0xc0, 0xc9, 0xfe, 0x9a, 0x44, 0x7b, 0x83, 0xdf, 0xc7 } }, - { { 0x5e, 0xc5, 0x5b, 0x9c, 0xdb, 0x14, 0x05, 0x18, 0x6b, 0xe2, 0x1d, 0x16, 0x77, 0x22, 0x0e, 0xd2, - 0xe4, 0x57, 0x82, 0x6e, 0x5b, 0xc5, 0x6a, 0xb9, 0x34, 0x20, 0xdb, 0x72, 0xe2, 0xe1, 0xeb, 0x1b, - 0x34, 0x00, 0x04, 0xbf, 0x83, 0xf6, 0x4f, 0x12, 0x45, 0x08, 0xf0, 0x95, 0x2a, 0xdc, 0x3a, 0x14, - 0xb3, 0x29, 0x0b, 0x99, 0xcd, 0x73, 0x31, 0xbd, 0x04, 0xbb, 0x49, 0x1c, 0xde, 0xcf, 0x09, 0x9e }, - { 0x15, 0x80, 0x3e, 0x2a, 0xfb, 0xc0, 0x8d, 0x62, 0x19, 0x27, 0x83, 0x04, 0xcc, 0xf5, 0xd1, 0xbb, - 0x40, 0x41, 0xbe, 0x93, 0x59, 0x6e, 0x27, 0x6d, 0x95, 0x24, 0x0a, 0x07, 0x27, 0x86, 0x10, 0x75, - 0xf7, 0x0a, 0x11, 0xfc, 0x53, 0xd0, 0x4c, 0x15, 0xf8, 0x6e, 0x22, 0x3f, 0xeb, 0x12, 0x97, 0x8a, - 0x3d, 0x69, 0xd8, 0x96, 0xc9, 0x53, 0x10, 0x9c, 0x02, 0x95, 0xe4, 0xd3, 0x1a, 0xd5, 0x43, 0x82 }, - { 0x40, 0x09, 0x2c, 0x17, 0x7e, 0xba, 0xce, 0x1f, 0xfc, 0xc1, 0x8e, 0xc3, 0x1c, 0xa2, 0x34, 0x52, - 0x78, 0x16, 0x23, 0x71, 0x82, 0x40, 0xf8, 0x6d, 0x67, 0x65, 0x67, 0x50, 0x53, 0xd9, 0xc8, 0x5e, - 0x7e, 0x8a, 0x98, 0xa3, 0xc6, 0x2a, 0x4d, 0x27, 0xf3, 0xb9, 0xbb, 0xae, 0x43, 0x29, 0x6e, 0x02, - 0x1c, 0xe9, 0x01, 0xd6, 0xcd, 0xd8, 0x91, 0x44, 0x95, 0x2b, 0x9e, 0xa5, 0x4f, 0xd0, 0x00, 0xb9 }, - { 0x3a, 0xe8, 0x3d, 0xb3, 0x32, 0xdc, 0xc2, 0xc8, 0xe3, 0x36, 0x2f, 0xc9, 0x30, 0x3a, 0xc0, 0x76, - 0x56, 0xd3, 0x0b, 0x06, 0xbe, 0x8f, 0xe7, 0xf1, 0x66, 0x61, 0x25, 0x42, 0x28, 0xdc, 0x08, 0x81, - 0x84, 0x3a, 0x57, 0x96, 0x27, 0xa6, 0xcf, 0xd6, 0x8f, 0x35, 0xa2, 0xc3, 0x76, 0x86, 0x4f, 0xcf, - 0x5f, 0xa1, 0x85, 0x28, 0x4f, 0x4a, 0x3a, 0xbb, 0x5c, 0x25, 0x4b, 0xcc, 0x46, 0xfe, 0xf2, 0x04 }, - { 0x62, 0xc8, 0xa2, 0x0a, 0x59, 0xb8, 0x97, 0xd2, 0x68, 0x94, 0x00, 0x3b, 0x01, 0xac, 0x91, 0x6e, - 0x97, 0x8e, 0x08, 0xe3, 0xfe, 0x9f, 0x9e, 0x9f, 0x4b, 0xcc, 0x5d, 0x1d, 0xb9, 0xbf, 0x07, 0x83, - 0xfe, 0x51, 0x2a, 0xdf, 0x79, 0x2e, 0x07, 0xc9, 0x98, 0x9b, 0xbe, 0xb6, 0xe4, 0x0a, 0x20, 0x44, - 0x86, 0xea, 0xb1, 0x61, 0x58, 0x11, 0x32, 0x8e, 0x7b, 0xb9, 0x67, 0x2d, 0xf0, 0x78, 0xb2, 0x93 }, - { 0x1a, 0x65, 0xb3, 0x6f, 0xa2, 0x45, 0x29, 0x53, 0xd7, 0x23, 0x4d, 0xff, 0x8e, 0xe9, 0xb9, 0xef, - 0x16, 0xa0, 0xdd, 0x48, 0xdf, 0x70, 0xd2, 0xe1, 0x56, 0xca, 0xd1, 0xd0, 0x4a, 0x9d, 0x63, 0x92, - 0x2b, 0xfd, 0x7b, 0x87, 0x39, 0x3c, 0x12, 0xc7, 0xe5, 0x91, 0x31, 0x95, 0x78, 0xc4, 0x58, 0x95, - 0x89, 0x6e, 0x2c, 0x90, 0xb4, 0x0b, 0xb2, 0xfe, 0x52, 0xc0, 0x86, 0xc4, 0x2e, 0x56, 0x97, 0x0c, - 0x20, 0xf2, 0xbc, 0x6a, 0x9b, 0x89, 0xfb, 0xe9, 0x85, 0x95, 0xd6, 0x22, 0x5e, 0x4d, 0x6d, 0x83, - 0x9d, 0xf4, 0xbe, 0x66, 0x05, 0x32, 0xb6, 0xe2, 0xf1, 0x96, 0x42, 0xa4, 0xc8, 0x8c, 0x1b, 0xec }, - { 0x43, 0x85, 0xff, 0xb9, 0xcf, 0x04, 0x83, 0x40, 0x70, 0x3a, 0x9c, 0x48, 0xb4, 0xc2, 0x99, 0x3b, - 0xa0, 0x39, 0xf1, 0x39, 0x58, 0x7f, 0xd2, 0x49, 0x94, 0x3c, 0xc3, 0xe1, 0xb6, 0x56, 0x38, 0x55, - 0x6f, 0xb5, 0x1a, 0x90, 0xa2, 0x04, 0x2f, 0x19, 0xf8, 0xb1, 0x65, 0x5a, 0xad, 0xcd, 0x1c, 0x56, - 0x42, 0x38, 0xc2, 0x52, 0x09, 0xd6, 0x41, 0x98, 0x5d, 0x5f, 0xa5, 0xe7, 0xc2, 0x55, 0xa1, 0x09, - 0x20, 0xf2, 0xbc, 0x6a, 0x9b, 0x89, 0xfb, 0xe9, 0x85, 0x95, 0xd6, 0x22, 0x5e, 0x4d, 0x6d, 0x83, - 0x9d, 0xf4, 0xbe, 0x66, 0x05, 0x32, 0xb6, 0xe2, 0xf1, 0x96, 0x42, 0xa4, 0xc8, 0x8c, 0x1b, 0xec } }, - { { 0xf2, 0x4a, 0x96, 0x57, 0xc3, 0x2f, 0xe6, 0x9f, 0xed, 0x7f, 0xcc, 0xe9, 0xea, 0xbe, 0xd2, 0x23, - 0x4e, 0x47, 0x13, 0xd9, 0x53, 0x19, 0x31, 0x14, 0x0a, 0xd3, 0x9b, 0x95, 0xa7, 0x9c, 0x88, 0x5e, - 0x08, 0xb2, 0x16, 0xda, 0x45, 0x61, 0x1d, 0x6b, 0xdf, 0xb1, 0x14, 0x0c, 0x66, 0xfd, 0x3a, 0xbe, - 0x25, 0xdc, 0xfd, 0xcd, 0xcc, 0x5e, 0x28, 0x77, 0x5a, 0xa9, 0x8b, 0x84, 0x77, 0x26, 0x9d, 0xa6 }, - { 0xea, 0xde, 0x4d, 0xab, 0x09, 0x02, 0xbf, 0x90, 0xf8, 0xae, 0x8b, 0x50, 0x01, 0xb2, 0x9d, 0x7c, - 0x0a, 0x3b, 0x60, 0xda, 0x34, 0xa9, 0xbb, 0x4d, 0xa5, 0x53, 0x18, 0x65, 0xec, 0xaa, 0xc9, 0x29, - 0xb2, 0xf7, 0x74, 0x14, 0x63, 0x5f, 0x88, 0xcf, 0x4e, 0x70, 0x1b, 0x11, 0x64, 0x73, 0x15, 0x6b, - 0x5a, 0x8c, 0xb8, 0x4e, 0x0f, 0x83, 0xae, 0x4b, 0x5c, 0x52, 0x1c, 0x6a, 0x0f, 0x54, 0x77, 0xc8 }, - { 0xae, 0xff, 0x55, 0xbf, 0x78, 0xb5, 0xde, 0x33, 0xeb, 0x87, 0xea, 0x13, 0x7d, 0x36, 0x22, 0x06, - 0x32, 0xc4, 0x7e, 0xca, 0x65, 0x37, 0xcc, 0x83, 0x0e, 0xda, 0x54, 0xb3, 0xd2, 0xe6, 0xe7, 0x7f, - 0xe1, 0x90, 0x11, 0x25, 0x16, 0x83, 0x25, 0x43, 0xb4, 0x38, 0x06, 0xbb, 0x6c, 0x62, 0x7d, 0x84, - 0x1f, 0xf3, 0x7b, 0xeb, 0xae, 0x50, 0xd8, 0xfb, 0xb9, 0xf2, 0xf9, 0xc3, 0x6f, 0x59, 0xb7, 0xb0 }, - { 0x95, 0x15, 0x83, 0x19, 0x56, 0x9c, 0x11, 0xd8, 0x31, 0x87, 0x1d, 0xe3, 0x3f, 0x07, 0x89, 0xb2, - 0xcb, 0x81, 0xf0, 0xeb, 0x0b, 0x1e, 0x74, 0x08, 0xa2, 0x4a, 0x0e, 0x82, 0xc6, 0x45, 0x8c, 0x32, - 0xb4, 0x8f, 0xfd, 0x76, 0xeb, 0x5e, 0xc7, 0x62, 0xdc, 0xcb, 0xee, 0xad, 0xcf, 0xcf, 0xea, 0x33, - 0x9d, 0xb0, 0x02, 0x64, 0x66, 0x77, 0x14, 0x97, 0x0c, 0x6e, 0x79, 0xe8, 0x58, 0x32, 0x0f, 0xe6 }, - { 0xcb, 0x2f, 0xaf, 0x53, 0xd8, 0x41, 0x48, 0x41, 0x6f, 0x36, 0x78, 0x80, 0x83, 0x5c, 0x0d, 0x4c, - 0x1b, 0xf4, 0x39, 0xe0, 0x34, 0x4f, 0xc2, 0xb2, 0x4e, 0xf0, 0xac, 0xc2, 0xf8, 0x15, 0x7a, 0x81, - 0x9f, 0x46, 0x2b, 0xe3, 0xb9, 0x39, 0x05, 0x89, 0xa2, 0xda, 0x1a, 0x63, 0x51, 0xb4, 0x78, 0x0f, - 0xfe, 0x2f, 0x9d, 0xce, 0x99, 0x38, 0xa9, 0x7e, 0xcb, 0x80, 0x57, 0x9f, 0xa2, 0x28, 0x0f, 0x6a }, - { 0x1b, 0xec, 0x67, 0x50, 0xd1, 0x28, 0x65, 0x55, 0xb8, 0xde, 0x3b, 0x2e, 0x1e, 0x33, 0xd8, 0x1b, - 0xba, 0x2e, 0x78, 0x6a, 0xb8, 0x0b, 0x8c, 0xa0, 0x55, 0x34, 0x25, 0x90, 0x9a, 0xe2, 0xf5, 0xaa, - 0x95, 0x0c, 0x6f, 0x2a, 0xb0, 0x92, 0x1d, 0x48, 0x5b, 0x56, 0x8c, 0x82, 0x8f, 0xa7, 0x15, 0x75, - 0x26, 0x61, 0x85, 0xc8, 0x7d, 0xda, 0xf5, 0x2a, 0xf3, 0x3c, 0x34, 0xc1, 0x20, 0x67, 0xbb, 0x04, - 0xec, 0x7c, 0xe2, 0xcb, 0x31, 0xcf, 0x23, 0xda, 0x5d, 0x8a, 0x05, 0x00, 0x9b, 0x23, 0x34, 0xd0, - 0xed, 0x56, 0x10, 0x0a, 0x90, 0x6b, 0x73, 0x26, 0x6b, 0xf0, 0xd7, 0xbc, 0xd8, 0xc7, 0x89, 0xc8 }, - { 0x90, 0x43, 0x54, 0x87, 0x44, 0x00, 0x07, 0xca, 0xa8, 0x2b, 0xec, 0x55, 0xa0, 0xd2, 0x8c, 0x07, - 0x03, 0xaa, 0x61, 0x1a, 0x7d, 0x0f, 0x90, 0x13, 0x67, 0x99, 0x46, 0x20, 0xcd, 0x70, 0xcb, 0xa7, - 0x96, 0xdf, 0x0c, 0x13, 0xc4, 0x41, 0x11, 0xd6, 0xc3, 0x33, 0x02, 0x96, 0x4f, 0x1d, 0xbd, 0x06, - 0xa9, 0xa1, 0x31, 0x0a, 0xc3, 0xdf, 0x6d, 0x52, 0x6c, 0xc6, 0xbe, 0xc5, 0xb6, 0x2a, 0xb1, 0x0f, - 0xec, 0x7c, 0xe2, 0xcb, 0x31, 0xcf, 0x23, 0xda, 0x5d, 0x8a, 0x05, 0x00, 0x9b, 0x23, 0x34, 0xd0, - 0xed, 0x56, 0x10, 0x0a, 0x90, 0x6b, 0x73, 0x26, 0x6b, 0xf0, 0xd7, 0xbc, 0xd8, 0xc7, 0x89, 0xc8 } }, - { { 0x4f, 0x3a, 0xdd, 0x0f, 0xcf, 0x7f, 0x27, 0xda, 0x27, 0xc4, 0xa6, 0x2b, 0x6b, 0xd1, 0x9f, 0x59, - 0x73, 0x5f, 0xd4, 0xb7, 0xf0, 0x86, 0x16, 0xc9, 0xdd, 0xa6, 0xf9, 0x9b, 0x17, 0xb2, 0xb9, 0x71, - 0xe7, 0x4c, 0xa1, 0x17, 0x79, 0xe0, 0xcc, 0xae, 0x10, 0xec, 0x28, 0x3a, 0x09, 0xf2, 0x8b, 0x34, - 0x9c, 0xac, 0x16, 0x2a, 0xa9, 0x21, 0xe8, 0xa7, 0x18, 0xc0, 0xc4, 0x9f, 0x30, 0xa0, 0x25, 0x62 }, - { 0x23, 0x4c, 0xd4, 0xae, 0x52, 0x30, 0xf6, 0x64, 0xb9, 0xe1, 0x47, 0xca, 0xf8, 0xf3, 0x3a, 0x6b, - 0x8b, 0xf3, 0x29, 0xe2, 0x9b, 0x5d, 0xbb, 0x0a, 0x60, 0x52, 0x03, 0x40, 0x53, 0x5c, 0x9e, 0x35, - 0x03, 0xd4, 0xec, 0xd7, 0x67, 0xf4, 0x92, 0xd2, 0x98, 0x96, 0xf2, 0xa7, 0xf4, 0x25, 0x6a, 0x80, - 0x9c, 0x75, 0xc6, 0xf2, 0x1f, 0x67, 0x11, 0x00, 0x0d, 0xda, 0x1e, 0xb2, 0x58, 0xa7, 0x8c, 0x39 }, - { 0x55, 0x1b, 0x80, 0xbb, 0xf3, 0xc5, 0x1a, 0x84, 0x34, 0xf5, 0x0a, 0x8a, 0x8a, 0xe1, 0x8c, 0xea, - 0xa6, 0xfb, 0xd0, 0x26, 0xc9, 0xa2, 0x30, 0x37, 0x3e, 0xba, 0x98, 0xfe, 0x81, 0x8a, 0x52, 0x37, - 0x0b, 0x74, 0x4e, 0x3d, 0x26, 0x8f, 0x82, 0x4b, 0xc0, 0x6a, 0x01, 0x10, 0x91, 0x8f, 0x89, 0xb5, - 0x62, 0x3f, 0x1e, 0x70, 0xcc, 0x25, 0x77, 0x39, 0x74, 0x88, 0xdd, 0xbc, 0xbe, 0x72, 0x08, 0x63 }, - { 0xe2, 0x9a, 0x46, 0xd2, 0x74, 0xdc, 0x0f, 0x8a, 0xa3, 0xbd, 0x20, 0xb7, 0xc7, 0xd9, 0x83, 0x4b, - 0x58, 0xa6, 0xe3, 0xbd, 0xc5, 0x00, 0xb6, 0x18, 0x04, 0x25, 0x81, 0xbd, 0x99, 0xb3, 0xb1, 0x2a, - 0x7a, 0x68, 0x6d, 0xe1, 0x3e, 0x23, 0x8d, 0x29, 0x9e, 0x7a, 0x30, 0x56, 0x4c, 0x22, 0xb6, 0xf4, - 0x7d, 0x7d, 0x4f, 0xfd, 0x76, 0xa5, 0x9d, 0x05, 0x41, 0x7c, 0x7a, 0x2d, 0x7b, 0xbe, 0xcf, 0x73 }, - { 0x7b, 0xae, 0x11, 0x86, 0x8a, 0x38, 0xbd, 0x56, 0x3c, 0xf3, 0x3c, 0x9c, 0x49, 0xa4, 0x68, 0x0f, - 0x2b, 0xdf, 0xf2, 0xa1, 0xbc, 0xc2, 0xed, 0x08, 0x09, 0x96, 0xd0, 0x7e, 0x9b, 0xe3, 0x0a, 0x72, - 0x13, 0x03, 0xd4, 0x35, 0x0a, 0x94, 0x60, 0x09, 0x4a, 0xaa, 0xca, 0x35, 0x8e, 0xed, 0x12, 0xdd, - 0x26, 0x8f, 0xf8, 0xa9, 0xa2, 0x8a, 0x7f, 0xac, 0xf3, 0x09, 0xc7, 0x22, 0xc5, 0x73, 0xec, 0xa0 }, - { 0xe9, 0xc5, 0x57, 0x0d, 0x85, 0xbf, 0x10, 0xe2, 0xd1, 0xf5, 0xd7, 0x22, 0xe9, 0x6a, 0x67, 0x8d, - 0xd3, 0x9f, 0x1a, 0xef, 0x7f, 0xc0, 0x2b, 0xe1, 0xfd, 0x2c, 0xc2, 0x5f, 0x39, 0xf9, 0x34, 0xd0, - 0x87, 0x94, 0x41, 0x8a, 0x65, 0xa5, 0x20, 0x48, 0xa4, 0x20, 0x5f, 0x7a, 0xc7, 0x37, 0x00, 0x60, - 0x59, 0x84, 0x2a, 0x1d, 0xff, 0x02, 0xc3, 0xe8, 0x20, 0xaa, 0x39, 0x13, 0xac, 0xf3, 0xd7, 0x05, - 0xbd, 0xef, 0x11, 0x66, 0x71, 0xb8, 0x9f, 0x1e, 0xe5, 0xee, 0x2e, 0x37, 0xfb, 0x34, 0xed, 0xc5, - 0xa4, 0x40, 0x6e, 0x38, 0x31, 0x0a, 0x1c, 0xaf, 0x0d, 0xd3, 0x98, 0xac, 0x12, 0x40, 0xea, 0x9c }, - { 0xc6, 0xcd, 0x7a, 0xbd, 0x14, 0xdb, 0xe4, 0xed, 0xbf, 0x46, 0x70, 0x23, 0xbd, 0xdb, 0xc3, 0xce, - 0x60, 0xd5, 0x6b, 0x17, 0x4c, 0x23, 0xfa, 0x78, 0x05, 0xcc, 0x18, 0xed, 0x42, 0x03, 0xa5, 0xb7, - 0xdf, 0x28, 0x0e, 0xd4, 0x5d, 0x31, 0xd8, 0xb9, 0xdc, 0xe9, 0xf6, 0x26, 0xc5, 0xe1, 0xb3, 0x80, - 0x0d, 0x62, 0xaf, 0x2d, 0xbd, 0xd6, 0xe4, 0xbb, 0x16, 0x82, 0xc8, 0x13, 0x2a, 0x6f, 0xb9, 0x06, - 0xbd, 0xef, 0x11, 0x66, 0x71, 0xb8, 0x9f, 0x1e, 0xe5, 0xee, 0x2e, 0x37, 0xfb, 0x34, 0xed, 0xc5, - 0xa4, 0x40, 0x6e, 0x38, 0x31, 0x0a, 0x1c, 0xaf, 0x0d, 0xd3, 0x98, 0xac, 0x12, 0x40, 0xea, 0x9c } }, - { { 0x6f, 0x46, 0xcd, 0x96, 0xc4, 0x13, 0xf4, 0x11, 0x62, 0x49, 0x8c, 0x5c, 0x78, 0x27, 0xef, 0xc8, - 0xb9, 0xe2, 0x7d, 0xf1, 0x0d, 0x37, 0xf2, 0xfe, 0x85, 0x35, 0x82, 0x60, 0x23, 0xb6, 0x7b, 0x17, - 0xd2, 0x91, 0xef, 0x01, 0x9e, 0x99, 0x35, 0xab, 0xc7, 0xfb, 0xa1, 0xa3, 0x13, 0x44, 0x3f, 0x3c, - 0x16, 0xcb, 0xd8, 0xf0, 0xbf, 0x9e, 0x65, 0x4d, 0x07, 0xe0, 0xfd, 0x8e, 0x32, 0x61, 0x95, 0xd5 }, - { 0xb7, 0x81, 0x16, 0x2f, 0xcb, 0xa4, 0x30, 0x4e, 0x6d, 0xf5, 0xf0, 0x3f, 0xfe, 0xd9, 0x81, 0x20, - 0xa6, 0x0e, 0x2b, 0xa8, 0xc5, 0xed, 0x0d, 0x9a, 0x28, 0x9c, 0xe3, 0xa9, 0xb7, 0xbf, 0x87, 0x0f, - 0xa5, 0xf9, 0x33, 0xe7, 0xa6, 0x7f, 0x9b, 0xac, 0xb6, 0xcc, 0xaf, 0xfc, 0xa7, 0x4a, 0x4d, 0x36, - 0x39, 0xa9, 0xb6, 0xf5, 0x09, 0xde, 0x8d, 0x37, 0x11, 0x07, 0xd1, 0x8a, 0xf5, 0x7b, 0x66, 0xe1 }, - { 0xcc, 0xe0, 0x07, 0x62, 0xbe, 0x10, 0x8c, 0x3a, 0xa2, 0x96, 0x5d, 0x11, 0xc7, 0xd5, 0x50, 0xc3, - 0xbb, 0x55, 0x21, 0xc5, 0x40, 0x27, 0x7d, 0xdb, 0xad, 0xd2, 0x61, 0x2a, 0x42, 0x5f, 0x94, 0x23, - 0x77, 0x83, 0x3a, 0x99, 0xe8, 0xda, 0x79, 0x8c, 0x1e, 0xa8, 0x44, 0x04, 0xec, 0xf5, 0xd1, 0x55, - 0x1e, 0x58, 0xf1, 0x6e, 0x4d, 0x27, 0xa4, 0x91, 0xec, 0x59, 0xc8, 0x17, 0x36, 0x58, 0x2a, 0x1f }, - { 0x6d, 0xf8, 0x73, 0xa3, 0x38, 0x61, 0x1d, 0x95, 0x09, 0xde, 0xe5, 0x26, 0x1b, 0x15, 0x16, 0xfb, - 0xf5, 0x16, 0xa8, 0xf3, 0x9e, 0x3a, 0x6b, 0xb5, 0x8c, 0xee, 0xa8, 0x66, 0x79, 0xc3, 0x9e, 0xb4, - 0xe1, 0xc2, 0x85, 0x0e, 0x86, 0x10, 0x5a, 0x4e, 0x8b, 0x4c, 0x0a, 0x7a, 0xd8, 0x8a, 0x48, 0xf4, - 0xa0, 0x79, 0x37, 0xe3, 0xa5, 0x90, 0x05, 0x5e, 0xbd, 0xa1, 0xf6, 0x09, 0x58, 0x9c, 0x6f, 0x09 }, - { 0x66, 0x47, 0x6d, 0x60, 0x06, 0x2d, 0x90, 0x8f, 0xae, 0x6c, 0x01, 0xe9, 0xb0, 0xf9, 0x6b, 0xa5, - 0x4a, 0xe1, 0xdb, 0xd3, 0x64, 0x42, 0x37, 0x5c, 0x11, 0x40, 0x7a, 0xce, 0x4e, 0x83, 0xc3, 0x2c, - 0x2e, 0xd2, 0x67, 0x76, 0xfb, 0x8c, 0x5d, 0xab, 0xe8, 0xb8, 0xd6, 0x2b, 0xf8, 0x86, 0xff, 0x96, - 0xf3, 0xa8, 0x0e, 0x2b, 0x1a, 0x68, 0xf5, 0xe4, 0xee, 0x49, 0xa6, 0x8c, 0x41, 0x1f, 0x97, 0xbf }, - { 0x81, 0x92, 0x4e, 0xc6, 0xab, 0x00, 0xdd, 0xf9, 0xf9, 0xb7, 0xe0, 0x0a, 0xa9, 0x3f, 0x0a, 0xf9, - 0x32, 0x73, 0xf6, 0x22, 0xec, 0x95, 0xd9, 0x20, 0x8a, 0x3f, 0xeb, 0x0d, 0xc7, 0x79, 0x6f, 0xb3, - 0x85, 0xf4, 0xe1, 0x11, 0xe1, 0xcc, 0xaa, 0x1b, 0xfd, 0xf3, 0x43, 0xff, 0x66, 0x73, 0x0f, 0x09, - 0xcc, 0xa4, 0x6c, 0xb8, 0x2a, 0x0f, 0x53, 0x58, 0x63, 0x32, 0x06, 0xd9, 0x6b, 0x1a, 0x14, 0x04, - 0x85, 0x3f, 0x2f, 0x2b, 0x05, 0xfb, 0xed, 0xe9, 0x08, 0x0d, 0x21, 0x49, 0xc9, 0x79, 0xdf, 0x6f, - 0x77, 0x89, 0xd7, 0x74, 0x09, 0x57, 0x1a, 0xd2, 0xa7, 0x43, 0xbf, 0x08, 0x8e, 0x98, 0xbc, 0x2f }, - { 0xe3, 0xb1, 0xc4, 0x81, 0xe6, 0xec, 0x07, 0x58, 0xa4, 0xcb, 0x7e, 0xd5, 0xae, 0x9d, 0x43, 0xf1, - 0xb7, 0xe2, 0x0a, 0x1f, 0xd5, 0xe8, 0x14, 0xba, 0x22, 0xff, 0xb7, 0x20, 0x76, 0x08, 0xdc, 0x9a, - 0x44, 0x4c, 0x1c, 0xcd, 0x38, 0x4d, 0xb5, 0xd8, 0xa9, 0x1b, 0x9d, 0xbb, 0x13, 0x5a, 0x6c, 0xe9, - 0x5d, 0xa4, 0x42, 0x0e, 0xde, 0x9a, 0x47, 0x8a, 0x2a, 0x97, 0x42, 0x86, 0x87, 0x98, 0x3f, 0x04, - 0x85, 0x3f, 0x2f, 0x2b, 0x05, 0xfb, 0xed, 0xe9, 0x08, 0x0d, 0x21, 0x49, 0xc9, 0x79, 0xdf, 0x6f, - 0x77, 0x89, 0xd7, 0x74, 0x09, 0x57, 0x1a, 0xd2, 0xa7, 0x43, 0xbf, 0x08, 0x8e, 0x98, 0xbc, 0x2f } }, - { { 0xff, 0xe3, 0x69, 0x7b, 0x62, 0x45, 0x40, 0x5f, 0x1c, 0x49, 0x65, 0xd6, 0xae, 0x24, 0x16, 0x84, - 0xfa, 0x69, 0x6c, 0x1f, 0x6c, 0x65, 0xee, 0x52, 0xe9, 0x6c, 0x54, 0xc7, 0x31, 0x9b, 0xc2, 0x74, - 0x4f, 0xc0, 0x16, 0xb8, 0xf8, 0x75, 0x5f, 0x45, 0xb5, 0xf3, 0xa0, 0xd9, 0xbe, 0x25, 0x82, 0xbd, - 0x3c, 0x03, 0xe0, 0x14, 0x15, 0x6a, 0xd5, 0x64, 0x08, 0x65, 0x13, 0x33, 0xc2, 0xab, 0xe0, 0x45 }, - { 0x6f, 0x5a, 0x90, 0x80, 0x25, 0x13, 0xc2, 0xa7, 0xfe, 0x1c, 0xa1, 0x07, 0x81, 0x4b, 0x09, 0xd3, - 0xbd, 0xda, 0x55, 0xa8, 0xaa, 0x62, 0x19, 0x03, 0xe9, 0x9f, 0x77, 0xef, 0xff, 0xd4, 0x5e, 0x53, - 0xbc, 0x9d, 0x71, 0xb8, 0xc4, 0xc2, 0x85, 0xb9, 0xb4, 0x3d, 0x95, 0xb8, 0xfd, 0x44, 0xb7, 0xc8, - 0x6f, 0x93, 0x15, 0x04, 0x16, 0x7e, 0x01, 0xf2, 0x09, 0x23, 0x96, 0x69, 0xe5, 0x65, 0x52, 0x34 }, - { 0xaf, 0xfe, 0x4f, 0x34, 0x4e, 0xfe, 0x51, 0xa5, 0xb2, 0xd8, 0x31, 0x74, 0x7b, 0xae, 0xfb, 0xb9, - 0x33, 0xc1, 0xdc, 0x66, 0xe6, 0x95, 0x9e, 0xce, 0x77, 0x7d, 0x55, 0x3c, 0xa6, 0x6c, 0x09, 0x23, - 0x5a, 0x1a, 0x5e, 0x1a, 0x41, 0xd3, 0xad, 0x5f, 0x86, 0xd0, 0x14, 0xf5, 0xe0, 0xda, 0xf1, 0xce, - 0x19, 0x90, 0x45, 0x0c, 0x4c, 0xb1, 0xd3, 0xc8, 0x4c, 0xdb, 0x7e, 0x49, 0xf5, 0xac, 0xde, 0xff }, - { 0x1b, 0x9b, 0x6b, 0x30, 0xd3, 0x19, 0x37, 0x83, 0xad, 0x05, 0xca, 0xba, 0x22, 0x85, 0x33, 0x7f, - 0x55, 0x60, 0xe3, 0x14, 0x8c, 0x39, 0x87, 0xd1, 0x4c, 0x21, 0x27, 0xa0, 0xae, 0x4a, 0x56, 0x15, - 0x50, 0x6c, 0x99, 0xca, 0xff, 0xde, 0x10, 0xc6, 0x9f, 0x6c, 0x70, 0xd1, 0x66, 0xb4, 0x87, 0xd8, - 0xfc, 0x46, 0xf2, 0xcf, 0x0c, 0xd8, 0xc3, 0x14, 0x5d, 0x27, 0xbd, 0xed, 0x32, 0x36, 0x7c, 0xed }, - { 0x64, 0x6b, 0x74, 0xc7, 0x60, 0x36, 0xc5, 0xe4, 0xb6, 0xde, 0x02, 0x1a, 0x09, 0xaf, 0x65, 0xb1, - 0x94, 0xa3, 0xf4, 0x95, 0xf5, 0xb0, 0xef, 0x86, 0xb5, 0x13, 0x26, 0x0b, 0xe8, 0xc5, 0x5c, 0x77, - 0xf5, 0xe6, 0xb6, 0x10, 0x36, 0x87, 0xa3, 0xd2, 0x7c, 0x17, 0x2c, 0xb9, 0xb0, 0x90, 0x9e, 0x8c, - 0x0a, 0x7d, 0x73, 0xb2, 0x29, 0xeb, 0xa7, 0x85, 0xd7, 0x04, 0x14, 0xf9, 0x77, 0xb7, 0xf4, 0x89 }, - { 0x7f, 0x1c, 0x5a, 0x57, 0x14, 0xf6, 0x30, 0x07, 0xf9, 0xfe, 0x42, 0x98, 0xcb, 0x3d, 0xac, 0x04, - 0x30, 0x0d, 0xc6, 0xd0, 0x4f, 0x8a, 0xbc, 0xdd, 0x3e, 0xc3, 0xb7, 0x74, 0xc8, 0x3b, 0x1a, 0xcc, - 0x6a, 0x54, 0x9e, 0xb9, 0xbe, 0xf0, 0x7c, 0x35, 0x35, 0x1a, 0x50, 0x4c, 0xc2, 0x38, 0x41, 0x46, - 0xc8, 0xc4, 0x81, 0x2b, 0x26, 0x56, 0x6f, 0x8a, 0x9f, 0x74, 0x87, 0xe0, 0x01, 0x82, 0xe2, 0x09, - 0xf3, 0x9a, 0xc5, 0x33, 0x5a, 0x7d, 0xb6, 0xbb, 0xff, 0x20, 0x4d, 0xc1, 0x99, 0x3d, 0xcc, 0x5a, - 0xc7, 0xd1, 0xbe, 0x4c, 0xcf, 0xc8, 0x09, 0x79, 0x15, 0x5e, 0x0c, 0xc6, 0x26, 0x36, 0xe6, 0xd9 }, - { 0x4d, 0x2f, 0x08, 0x84, 0x32, 0xcf, 0xe0, 0x3b, 0xa8, 0x3e, 0xa5, 0xf8, 0x3a, 0xe8, 0xa9, 0x04, - 0x5a, 0x74, 0x67, 0xcb, 0x41, 0x22, 0xc5, 0xc4, 0x9a, 0xa5, 0xc1, 0xa7, 0x94, 0x8b, 0xa5, 0x35, - 0x00, 0x00, 0x1a, 0xaf, 0xfb, 0xed, 0x40, 0xb8, 0x2b, 0x28, 0xf1, 0xb1, 0x02, 0xd3, 0x8b, 0xc0, - 0x32, 0x4a, 0xa5, 0x0a, 0xa4, 0xc3, 0xbf, 0xb3, 0xf5, 0xb7, 0x65, 0x8e, 0x88, 0xdf, 0xd0, 0x0e, - 0xf3, 0x9a, 0xc5, 0x33, 0x5a, 0x7d, 0xb6, 0xbb, 0xff, 0x20, 0x4d, 0xc1, 0x99, 0x3d, 0xcc, 0x5a, - 0xc7, 0xd1, 0xbe, 0x4c, 0xcf, 0xc8, 0x09, 0x79, 0x15, 0x5e, 0x0c, 0xc6, 0x26, 0x36, 0xe6, 0xd9 } }, - { { 0xc8, 0x8e, 0x1c, 0xea, 0x02, 0x6a, 0xfd, 0x88, 0x8b, 0xa9, 0x9d, 0xdd, 0xba, 0xea, 0x77, 0x30, - 0x88, 0x1a, 0x93, 0x49, 0xda, 0x05, 0x18, 0xbb, 0x4a, 0x6a, 0x11, 0xc4, 0x48, 0x72, 0x77, 0x1f, - 0x6e, 0x2b, 0x9a, 0xe3, 0x27, 0xbe, 0xe1, 0x75, 0x32, 0x30, 0xa6, 0x12, 0x26, 0x44, 0xbf, 0xb2, - 0xa5, 0x51, 0x0b, 0x48, 0x3a, 0xea, 0xc5, 0xd4, 0x24, 0x3f, 0x4e, 0xe8, 0xe5, 0xc3, 0xfb, 0xc2 }, - { 0xcb, 0x56, 0x3c, 0x00, 0x28, 0x15, 0x72, 0x16, 0x23, 0x4e, 0x2e, 0x2c, 0x8c, 0xe8, 0x7c, 0x44, - 0x82, 0x2a, 0xe0, 0x57, 0xa3, 0x0a, 0xc4, 0x42, 0xb5, 0x07, 0xe1, 0x1b, 0x78, 0x8b, 0x3d, 0x4d, - 0xcb, 0xe4, 0x56, 0x72, 0x0b, 0x85, 0x52, 0xd8, 0x55, 0xe2, 0xcd, 0x38, 0xd2, 0x83, 0xb6, 0x05, - 0xd2, 0x9f, 0x63, 0x9e, 0x7f, 0xca, 0xe5, 0x95, 0x36, 0x61, 0x9b, 0xca, 0x09, 0x27, 0x53, 0x82 }, - { 0x24, 0x67, 0x10, 0xd6, 0x8a, 0x1a, 0x8e, 0xb8, 0x53, 0xef, 0xb7, 0x67, 0x2a, 0xfd, 0xb8, 0xd6, - 0xe3, 0xf7, 0x41, 0x95, 0x8c, 0x50, 0xca, 0x1d, 0x21, 0x21, 0x41, 0xd1, 0xef, 0x2d, 0x9b, 0x53, - 0xa9, 0x42, 0xcd, 0xda, 0x6d, 0x12, 0x1b, 0xbd, 0x0a, 0xe1, 0x4d, 0x95, 0xc6, 0xaa, 0x40, 0xfd, - 0x98, 0xfb, 0x26, 0x21, 0x5e, 0xaf, 0x8e, 0x6b, 0xc9, 0x36, 0x2c, 0x66, 0x31, 0x24, 0x45, 0x87 }, - { 0x5e, 0xf9, 0x1d, 0x10, 0xb5, 0x79, 0x1f, 0x80, 0x85, 0x90, 0xc3, 0x7f, 0x2b, 0x73, 0xbf, 0x83, - 0x0b, 0x5d, 0x46, 0xae, 0x79, 0xef, 0x09, 0x71, 0x29, 0xfb, 0x83, 0xde, 0x1f, 0xe2, 0xdb, 0x1b, - 0xa2, 0x22, 0xee, 0x50, 0x21, 0x9d, 0x9c, 0x35, 0x14, 0x48, 0x13, 0xa5, 0xd1, 0x68, 0xf4, 0x61, - 0x1f, 0xd7, 0xe2, 0xd6, 0x42, 0x1c, 0xdc, 0x58, 0xec, 0x8b, 0x03, 0x6b, 0xdf, 0x64, 0x06, 0x30 }, - { 0xf9, 0xa6, 0x88, 0x74, 0x07, 0x19, 0x15, 0x38, 0xaf, 0xac, 0x07, 0x10, 0xe0, 0xd9, 0x22, 0xf3, - 0x78, 0xb0, 0xbf, 0x60, 0xa3, 0x0f, 0xea, 0x0f, 0xa8, 0x64, 0xa9, 0xa3, 0x82, 0xe1, 0x4c, 0x29, - 0x36, 0x22, 0x6d, 0x43, 0x9c, 0xde, 0x22, 0xbf, 0xc6, 0x85, 0xf7, 0xe9, 0xe0, 0x79, 0x80, 0xfe, - 0x9d, 0xd6, 0x24, 0xbd, 0x29, 0xa4, 0x8c, 0x35, 0x21, 0x87, 0x45, 0x7f, 0x88, 0xd9, 0x9a, 0x9d }, - { 0x49, 0x43, 0x19, 0x14, 0xcc, 0x4a, 0x11, 0x01, 0x05, 0xd1, 0x4e, 0x39, 0x6d, 0xb0, 0x22, 0x65, - 0x32, 0x6e, 0x67, 0x04, 0x50, 0x85, 0x53, 0x42, 0x90, 0x2c, 0xc0, 0x63, 0x2f, 0xbd, 0x15, 0x90, - 0x1b, 0x3f, 0x03, 0x90, 0x16, 0x7f, 0x7b, 0x49, 0x74, 0xd0, 0x3d, 0x81, 0x80, 0x1e, 0x9e, 0x2e, - 0xa9, 0x13, 0x6a, 0x10, 0x14, 0xc1, 0xfd, 0xf9, 0x25, 0x3a, 0x1d, 0x52, 0x93, 0x0a, 0x77, 0x03, - 0xa2, 0xdd, 0xce, 0x9f, 0x2a, 0x35, 0xc9, 0x93, 0x7c, 0xa2, 0x2c, 0xf6, 0x38, 0x73, 0xb3, 0xab, - 0x7f, 0x55, 0xb6, 0x62, 0xa2, 0x8d, 0x6a, 0x3e, 0x88, 0x04, 0x9b, 0xa2, 0x19, 0x64, 0x55, 0x01 }, - { 0x22, 0x03, 0x49, 0x58, 0x76, 0x3c, 0x85, 0x45, 0x5e, 0x73, 0x78, 0x8f, 0x65, 0xc9, 0x50, 0xf8, - 0xd7, 0x16, 0x92, 0xa4, 0xd1, 0x79, 0xce, 0xf3, 0x00, 0x34, 0x38, 0xb8, 0xcc, 0x96, 0x9f, 0xa6, - 0x87, 0x28, 0xcb, 0x19, 0x28, 0xad, 0x83, 0xb5, 0x09, 0x96, 0x54, 0xe8, 0x2a, 0xb9, 0x9b, 0xff, - 0x60, 0x85, 0x31, 0x28, 0x62, 0x36, 0xd2, 0x0e, 0xad, 0x2a, 0xe1, 0x84, 0x80, 0xeb, 0x6f, 0x00, - 0xa2, 0xdd, 0xce, 0x9f, 0x2a, 0x35, 0xc9, 0x93, 0x7c, 0xa2, 0x2c, 0xf6, 0x38, 0x73, 0xb3, 0xab, - 0x7f, 0x55, 0xb6, 0x62, 0xa2, 0x8d, 0x6a, 0x3e, 0x88, 0x04, 0x9b, 0xa2, 0x19, 0x64, 0x55, 0x01 } }, - { { 0xeb, 0x18, 0x95, 0x94, 0x5f, 0x15, 0x8c, 0xb8, 0x4d, 0x6e, 0x7d, 0xc0, 0x96, 0x6c, 0x52, 0xa2, - 0x5f, 0x43, 0x67, 0xc2, 0x3a, 0x10, 0x5b, 0xf1, 0x8f, 0x21, 0x89, 0x06, 0x77, 0xe9, 0xab, 0x2e, - 0xcd, 0x17, 0x9c, 0x9a, 0xd7, 0x89, 0x7e, 0x53, 0x58, 0x60, 0x9b, 0xce, 0x90, 0xd9, 0x13, 0x2d, - 0x78, 0xc4, 0x2c, 0x1c, 0x4c, 0xe8, 0x23, 0x70, 0xff, 0xa0, 0x42, 0x98, 0x25, 0x40, 0xd6, 0xd8 }, - { 0xb6, 0xfb, 0xdd, 0x5d, 0x35, 0xf2, 0x2b, 0x89, 0xda, 0x8e, 0x90, 0xee, 0x03, 0x4e, 0x75, 0xdb, - 0x4c, 0x45, 0xc8, 0x00, 0xde, 0x06, 0x27, 0xde, 0x44, 0xb5, 0x5b, 0xc7, 0x56, 0xc3, 0xf5, 0xbb, - 0xee, 0xa6, 0x21, 0xd4, 0xd9, 0xb9, 0x24, 0x9c, 0x4c, 0xbc, 0x23, 0xe5, 0xeb, 0x05, 0xb6, 0xd0, - 0xd0, 0xbf, 0x49, 0x95, 0x01, 0xb4, 0x97, 0xad, 0xb5, 0x71, 0x8d, 0x4b, 0x32, 0xd0, 0xdd, 0x1a }, - { 0xfd, 0x11, 0xd7, 0xe4, 0x46, 0xcd, 0xd8, 0x44, 0x89, 0x0a, 0xe7, 0x44, 0x59, 0xe9, 0xcf, 0x9f, - 0xd6, 0xf1, 0x74, 0x56, 0x04, 0x78, 0xfa, 0x29, 0x46, 0x8a, 0x8d, 0x1b, 0xbe, 0x41, 0x92, 0x1c, - 0x8d, 0x74, 0x01, 0x1b, 0xc1, 0xf8, 0x26, 0xf4, 0xc2, 0x68, 0xc3, 0x23, 0x8c, 0x68, 0x7c, 0x0a, - 0xad, 0xdd, 0x50, 0x10, 0xcf, 0xdb, 0x78, 0xc5, 0x79, 0x28, 0x37, 0x63, 0x92, 0x1a, 0x1d, 0xea }, - { 0xd2, 0x2a, 0xf0, 0x66, 0x15, 0x8b, 0xcb, 0x83, 0xcf, 0x34, 0xa1, 0x33, 0x6b, 0xd5, 0xa8, 0x98, - 0x3b, 0xd7, 0x09, 0x0d, 0x70, 0xa5, 0x8a, 0xc0, 0x73, 0xcf, 0xde, 0x59, 0xd5, 0x13, 0x41, 0xd2, - 0x43, 0x8b, 0xb4, 0xc3, 0x5b, 0x6f, 0xf1, 0xed, 0x47, 0x76, 0xe6, 0x5e, 0xb8, 0x2a, 0x7e, 0x20, - 0x91, 0xa0, 0x9d, 0xc1, 0xa2, 0x0a, 0x6d, 0x97, 0x7d, 0xeb, 0xe3, 0x64, 0x5f, 0x86, 0xff, 0x3e }, - { 0x45, 0xd8, 0xdc, 0xe4, 0x3a, 0x3a, 0x44, 0xdc, 0x7f, 0xa8, 0x92, 0x11, 0x1b, 0x4f, 0xfa, 0xcf, - 0x21, 0xff, 0xfb, 0x20, 0xb0, 0x02, 0x6d, 0x0e, 0x1c, 0xde, 0xe8, 0x51, 0xd8, 0x2c, 0x72, 0x0e, - 0xbf, 0xf6, 0x9a, 0xd3, 0xd3, 0xfe, 0xfa, 0x98, 0x4e, 0xc2, 0xf0, 0x16, 0xda, 0x39, 0x93, 0xc4, - 0xe0, 0x33, 0x9a, 0x43, 0xe8, 0x7a, 0xc5, 0x0f, 0x0b, 0xa4, 0x45, 0xf0, 0x5e, 0x7a, 0xa9, 0x42 }, - { 0xdb, 0x4e, 0x17, 0x76, 0x8b, 0x3c, 0x98, 0x7f, 0x58, 0x76, 0x97, 0xc9, 0x3f, 0x99, 0x01, 0x05, - 0x42, 0x7e, 0xfd, 0x83, 0x99, 0xaa, 0x19, 0xb5, 0x72, 0x4c, 0x69, 0xed, 0x6e, 0x21, 0x79, 0x6e, - 0x3b, 0x71, 0xe5, 0xab, 0x23, 0x84, 0xe7, 0xfe, 0x58, 0x2b, 0x0d, 0x1e, 0x75, 0x7c, 0x29, 0xb3, - 0x2d, 0x66, 0xc2, 0x45, 0x88, 0xac, 0x86, 0x29, 0xe4, 0xaa, 0x9e, 0x71, 0xa1, 0x88, 0xf9, 0x06, - 0xda, 0xa3, 0xdd, 0x7b, 0x6c, 0xd9, 0xc9, 0x73, 0xe9, 0x56, 0xd1, 0xee, 0x5b, 0xf9, 0xae, 0xc0, - 0x29, 0xbe, 0x20, 0x6c, 0xc7, 0xf9, 0xc5, 0x2d, 0x6d, 0xad, 0x8f, 0x49, 0xf8, 0x17, 0xdb, 0x7a }, - { 0xb8, 0xb7, 0xec, 0xeb, 0x3e, 0x40, 0x77, 0x6c, 0xab, 0x10, 0xfe, 0x9f, 0xd1, 0x40, 0xfe, 0xd2, - 0x88, 0x8e, 0xb0, 0x55, 0xae, 0x75, 0xb1, 0xcc, 0x9d, 0x6c, 0x11, 0x28, 0x95, 0x38, 0x9f, 0xb9, - 0x59, 0xe2, 0x29, 0xc3, 0xbc, 0x09, 0x16, 0x1f, 0x17, 0x9e, 0x15, 0x78, 0x09, 0x61, 0x07, 0x9e, - 0xad, 0x67, 0x98, 0xa9, 0x24, 0xff, 0xf9, 0x4b, 0xa2, 0x76, 0x09, 0xa0, 0xd7, 0x1b, 0xed, 0x05, - 0xda, 0xa3, 0xdd, 0x7b, 0x6c, 0xd9, 0xc9, 0x73, 0xe9, 0x56, 0xd1, 0xee, 0x5b, 0xf9, 0xae, 0xc0, - 0x29, 0xbe, 0x20, 0x6c, 0xc7, 0xf9, 0xc5, 0x2d, 0x6d, 0xad, 0x8f, 0x49, 0xf8, 0x17, 0xdb, 0x7a } }, - { { 0xc3, 0x92, 0x4d, 0x01, 0x9c, 0xea, 0x5a, 0x8d, 0xbd, 0x5c, 0x12, 0x58, 0x6d, 0x03, 0x26, 0xbf, - 0xa4, 0xdd, 0xf7, 0x26, 0xa4, 0x0d, 0x22, 0xe0, 0xbd, 0xcc, 0x6f, 0x30, 0x9e, 0xf9, 0x4c, 0x1f, - 0x03, 0x52, 0xab, 0x38, 0xe9, 0x9c, 0x08, 0x9c, 0x09, 0xe5, 0x87, 0x5c, 0x24, 0x1a, 0xe2, 0x75, - 0xcb, 0x18, 0x8a, 0x63, 0x50, 0xd1, 0x23, 0x45, 0x49, 0x93, 0x40, 0x2c, 0x09, 0xd4, 0xac, 0x39 }, - { 0xd4, 0xe7, 0xb7, 0x05, 0xfd, 0xd6, 0xf3, 0x57, 0xfb, 0xc2, 0x2f, 0x2c, 0x71, 0x80, 0xf5, 0xc3, - 0xa6, 0x0a, 0x23, 0x9d, 0x1d, 0xa8, 0x68, 0x10, 0x8a, 0xfa, 0x68, 0x9d, 0x2b, 0xcf, 0x96, 0xa9, - 0xe6, 0x0e, 0x07, 0x32, 0x23, 0x09, 0x87, 0x16, 0xc5, 0xbb, 0x76, 0x22, 0xfc, 0xb4, 0x59, 0x6d, - 0x67, 0xfd, 0x29, 0x51, 0x95, 0x4c, 0xe2, 0x8c, 0x18, 0xab, 0xda, 0x84, 0xc3, 0x62, 0x80, 0x14 }, - { 0xc9, 0xa1, 0xfe, 0xc3, 0x48, 0x0d, 0xee, 0x54, 0x44, 0xff, 0x9c, 0x46, 0x04, 0x0e, 0x74, 0xda, - 0xa4, 0x6a, 0x56, 0x02, 0x5f, 0x76, 0x0e, 0xb5, 0xc1, 0xc9, 0xe9, 0xb2, 0x6e, 0x07, 0x49, 0x0c, - 0xf7, 0x4b, 0xee, 0xd6, 0x0a, 0xad, 0x94, 0x03, 0x58, 0x2d, 0x60, 0x95, 0xf8, 0x16, 0x7b, 0x49, - 0x0b, 0x01, 0x66, 0x3e, 0x17, 0x01, 0xe5, 0x54, 0x7d, 0xd7, 0xbb, 0x10, 0xd1, 0xad, 0xad, 0x79 }, - { 0xb2, 0xd8, 0x10, 0x29, 0xeb, 0xb8, 0x4e, 0x2b, 0x39, 0x85, 0x5c, 0xb3, 0xdc, 0xf5, 0x87, 0xca, - 0xca, 0x9c, 0x7a, 0x8c, 0x2b, 0x08, 0xe8, 0x25, 0xe2, 0xcf, 0x70, 0xe2, 0xe6, 0xfb, 0xdb, 0x0c, - 0xc3, 0x0d, 0x71, 0x11, 0x83, 0x65, 0xf2, 0x71, 0x08, 0x1b, 0x32, 0x6e, 0x6c, 0x51, 0x50, 0xf1, - 0xf6, 0x4b, 0x54, 0x63, 0x16, 0x7f, 0xfd, 0x80, 0x05, 0x61, 0x63, 0xf1, 0x80, 0x6a, 0x0b, 0xfd }, - { 0xa7, 0x4b, 0x75, 0x38, 0x90, 0x64, 0x96, 0x7b, 0xda, 0x5e, 0x08, 0x9b, 0x80, 0xc4, 0x72, 0x3f, - 0x73, 0xb2, 0xdb, 0xd3, 0x4a, 0xed, 0xa4, 0xdc, 0x5c, 0x79, 0xe5, 0x0f, 0x7a, 0xd3, 0x0c, 0xac, - 0xf9, 0x99, 0x5c, 0x1a, 0x0f, 0xb3, 0x1a, 0x0f, 0x5c, 0xc3, 0x9e, 0x1a, 0x2b, 0xfa, 0xc3, 0xf0, - 0x40, 0xe5, 0x5f, 0x36, 0xd2, 0x98, 0x31, 0xa1, 0xaf, 0x18, 0x5f, 0xae, 0x92, 0xf3, 0x9e, 0xc0 }, - { 0xf9, 0xbf, 0x52, 0xe6, 0xd3, 0xe1, 0x5d, 0xd3, 0x30, 0xf3, 0xa1, 0x0c, 0xc8, 0x5a, 0x97, 0x55, - 0xab, 0x67, 0x67, 0xd0, 0x00, 0x62, 0x7b, 0x80, 0x70, 0xbf, 0x24, 0xd0, 0x09, 0x8b, 0x07, 0x77, - 0xeb, 0x3e, 0xf0, 0x5d, 0xdf, 0x7b, 0xa9, 0x7d, 0xa4, 0x6a, 0x0d, 0xf1, 0xac, 0x83, 0x7d, 0x64, - 0xb5, 0xf4, 0xc6, 0xc4, 0x12, 0x0c, 0x55, 0x9f, 0x67, 0xbb, 0xd5, 0xe3, 0xd3, 0xdb, 0x17, 0x0f, - 0x90, 0x2f, 0x8f, 0xc9, 0xfd, 0x4e, 0x6c, 0x8b, 0xe6, 0x99, 0xfa, 0xda, 0x8f, 0x1f, 0xe6, 0xc3, - 0xeb, 0xd8, 0x14, 0x20, 0xcc, 0x3c, 0x1c, 0x23, 0x77, 0x28, 0x9b, 0x22, 0x9a, 0x5a, 0x0c, 0x43 }, - { 0xa2, 0x78, 0x37, 0xc9, 0x63, 0xe1, 0x31, 0x36, 0xc2, 0x58, 0xac, 0xca, 0xbb, 0xa2, 0x84, 0xaa, - 0xb3, 0x82, 0xe2, 0x19, 0xb7, 0x14, 0x96, 0x27, 0x77, 0xfa, 0xa1, 0x02, 0xaa, 0xff, 0x55, 0x82, - 0xba, 0xc0, 0x38, 0x1a, 0x69, 0x35, 0x48, 0x87, 0xc2, 0xeb, 0x48, 0x08, 0xea, 0xc5, 0x6b, 0xfc, - 0x84, 0x60, 0x4e, 0xce, 0xd7, 0xd2, 0x86, 0x8b, 0x76, 0xf3, 0x46, 0xe1, 0x87, 0x1f, 0xff, 0x09, - 0x90, 0x2f, 0x8f, 0xc9, 0xfd, 0x4e, 0x6c, 0x8b, 0xe6, 0x99, 0xfa, 0xda, 0x8f, 0x1f, 0xe6, 0xc3, - 0xeb, 0xd8, 0x14, 0x20, 0xcc, 0x3c, 0x1c, 0x23, 0x77, 0x28, 0x9b, 0x22, 0x9a, 0x5a, 0x0c, 0x43 } }, - { { 0x0e, 0xa6, 0x0c, 0xef, 0x12, 0xd6, 0x7d, 0x71, 0xd4, 0x88, 0x73, 0x86, 0x9a, 0x88, 0x8f, 0x5b, - 0xd1, 0xb6, 0x12, 0xc4, 0x93, 0x8b, 0x5f, 0xee, 0xdd, 0x9c, 0x2a, 0x7f, 0x4d, 0xfd, 0xba, 0x00, - 0x09, 0x45, 0x77, 0xd2, 0xcf, 0xcd, 0x3a, 0x6f, 0x27, 0x44, 0xe2, 0x55, 0x3e, 0x79, 0x88, 0x4d, - 0x5f, 0x38, 0x34, 0xe8, 0xe7, 0xc6, 0x3a, 0xde, 0xef, 0x99, 0x15, 0xea, 0x88, 0x79, 0xd7, 0xca }, - { 0xa0, 0x9a, 0x0a, 0x3a, 0x42, 0x35, 0x54, 0x78, 0xb9, 0x82, 0x52, 0xb4, 0xc8, 0x5c, 0x4a, 0x03, - 0xa1, 0xb9, 0x27, 0xcc, 0x99, 0xec, 0x03, 0xdf, 0xdd, 0x6e, 0xde, 0xef, 0x8f, 0x7f, 0xdc, 0x5a, - 0xc3, 0xcb, 0x0e, 0xa2, 0x7e, 0x93, 0xe6, 0xdd, 0xbd, 0xf1, 0x1b, 0x03, 0x29, 0x63, 0x72, 0x11, - 0x72, 0x3d, 0x24, 0x6f, 0xdf, 0x8e, 0xed, 0xa4, 0xe2, 0x2a, 0x4c, 0x00, 0xe2, 0xc4, 0x55, 0x1b }, - { 0xb2, 0xf1, 0xff, 0xf6, 0x3a, 0x26, 0xe1, 0x74, 0x52, 0xba, 0xee, 0x28, 0xb6, 0x56, 0x90, 0x59, - 0xde, 0x92, 0x5f, 0x84, 0xd1, 0x87, 0xe2, 0x64, 0xce, 0xdc, 0x94, 0x3c, 0xb4, 0xf8, 0x01, 0x0a, - 0x86, 0x2f, 0xfe, 0x79, 0x03, 0x72, 0xfc, 0x26, 0x21, 0xc3, 0x1e, 0xec, 0x63, 0x29, 0x64, 0xcb, - 0x5f, 0xcc, 0xb6, 0x78, 0xf7, 0xc8, 0xd1, 0xf8, 0x5c, 0xc4, 0x4b, 0xc0, 0xc3, 0x75, 0x3e, 0x46 }, - { 0x03, 0x4b, 0xb9, 0xd1, 0x50, 0xa3, 0x79, 0xbe, 0x74, 0xa3, 0xb5, 0xd8, 0x28, 0x1b, 0x6d, 0x72, - 0x68, 0x0a, 0x9b, 0x19, 0xc9, 0x13, 0xc4, 0x04, 0x94, 0x0a, 0xcb, 0x72, 0xff, 0x7d, 0xb6, 0x9a, - 0x1c, 0xfd, 0xe4, 0xa3, 0x75, 0x13, 0x57, 0x36, 0xfe, 0x4a, 0xf6, 0xbc, 0xca, 0xd9, 0x34, 0x9b, - 0xef, 0x90, 0x02, 0xd9, 0xbd, 0xdd, 0x6f, 0x22, 0x54, 0x36, 0xb2, 0x3f, 0x22, 0x65, 0xef, 0xe7 }, - { 0x04, 0xd4, 0x43, 0xe8, 0x8c, 0xc4, 0xfb, 0xe5, 0x55, 0xd0, 0xa4, 0xea, 0x20, 0xf8, 0xe1, 0x8f, - 0xc2, 0xbc, 0x1f, 0x55, 0xf1, 0x8d, 0xda, 0xc0, 0x85, 0xa4, 0xef, 0x36, 0x97, 0x22, 0x8b, 0x8e, - 0x77, 0x4c, 0x1a, 0xa4, 0xa0, 0x6f, 0xe1, 0xdc, 0x32, 0x47, 0xc4, 0x3a, 0xd8, 0x8a, 0xbd, 0x19, - 0x30, 0x1c, 0x96, 0x7a, 0xb2, 0x23, 0x7c, 0x16, 0x03, 0xa7, 0x4f, 0xfd, 0xa6, 0x50, 0xd9, 0xf7 }, - { 0xdf, 0xc2, 0x59, 0xd2, 0xa9, 0x9b, 0x1e, 0xca, 0xf0, 0x39, 0x2f, 0xf8, 0xc2, 0xf3, 0x91, 0x55, - 0x1b, 0xba, 0x81, 0x3a, 0x67, 0x1a, 0xd4, 0xf4, 0xb0, 0x9f, 0xb6, 0x18, 0x38, 0x65, 0x3e, 0x67, - 0xa0, 0x37, 0xc2, 0x9a, 0xc7, 0xee, 0x72, 0x8e, 0x13, 0x64, 0xd1, 0x0a, 0xda, 0xbd, 0x8d, 0xa4, - 0x28, 0x55, 0x3a, 0x2c, 0x78, 0x41, 0xc6, 0xfc, 0x1c, 0x0f, 0xf8, 0xd7, 0x5f, 0xe6, 0xde, 0x0b, - 0xd5, 0xc0, 0xaa, 0x2c, 0x5c, 0xac, 0x46, 0xeb, 0xa4, 0x35, 0x2a, 0xab, 0x00, 0x2e, 0xc0, 0x8b, - 0x42, 0x65, 0x2f, 0x2f, 0x13, 0x84, 0x60, 0x15, 0xa3, 0x69, 0xee, 0xab, 0x0e, 0x50, 0xbf, 0x5f }, - { 0xc1, 0xb0, 0xac, 0x4c, 0xfa, 0x62, 0x52, 0x22, 0xae, 0x8c, 0x94, 0x38, 0xd9, 0x6e, 0x10, 0x94, - 0xe7, 0xaa, 0xc0, 0x92, 0x93, 0x06, 0x55, 0xf9, 0x2e, 0xd9, 0x10, 0x4d, 0xcb, 0x82, 0x19, 0x1f, - 0x27, 0x16, 0x81, 0xdd, 0xea, 0x7a, 0xa8, 0xce, 0x5a, 0xdd, 0x37, 0x77, 0x24, 0x57, 0xfb, 0x40, - 0x3d, 0x1b, 0x48, 0x88, 0xda, 0xce, 0xe8, 0xd2, 0xed, 0xe0, 0x6e, 0x29, 0xeb, 0xdb, 0x95, 0x09, - 0xd5, 0xc0, 0xaa, 0x2c, 0x5c, 0xac, 0x46, 0xeb, 0xa4, 0x35, 0x2a, 0xab, 0x00, 0x2e, 0xc0, 0x8b, - 0x42, 0x65, 0x2f, 0x2f, 0x13, 0x84, 0x60, 0x15, 0xa3, 0x69, 0xee, 0xab, 0x0e, 0x50, 0xbf, 0x5f } }, - { { 0x3a, 0x79, 0x39, 0x60, 0xe9, 0x93, 0xad, 0x78, 0xf9, 0x0b, 0x99, 0x64, 0x71, 0x76, 0xad, 0xdc, - 0x63, 0xa3, 0x38, 0xbf, 0x0a, 0x36, 0x22, 0xcf, 0x4f, 0x84, 0x3e, 0x34, 0xaf, 0x0b, 0xd4, 0x5c, - 0xc0, 0xa4, 0x01, 0x7c, 0x07, 0xc3, 0xb4, 0xcb, 0xdb, 0x39, 0xdd, 0x39, 0xc7, 0x5c, 0xbd, 0xcf, - 0x61, 0x8b, 0x72, 0x74, 0xd6, 0x85, 0xdc, 0x5c, 0x08, 0x93, 0x6d, 0xe6, 0xf1, 0xeb, 0xb9, 0x7c }, - { 0x71, 0x12, 0x20, 0xbb, 0x37, 0xa6, 0xd8, 0x71, 0xf7, 0x58, 0xaa, 0xbd, 0x30, 0xfb, 0xac, 0x94, - 0x62, 0x45, 0xf0, 0x1a, 0xc3, 0x4a, 0x07, 0x78, 0x6d, 0x17, 0xf5, 0x8d, 0x69, 0x3d, 0x2e, 0x15, - 0x96, 0x48, 0x1a, 0xb0, 0x7e, 0xdd, 0xf5, 0x2d, 0xe1, 0x56, 0xfc, 0xe9, 0x26, 0x91, 0x51, 0xfe, - 0x5e, 0x2a, 0xdc, 0x23, 0x89, 0x09, 0x14, 0xe6, 0x17, 0xa9, 0x14, 0x8c, 0x8c, 0xe8, 0xe3, 0x71 }, - { 0xe4, 0xd0, 0xa7, 0x5a, 0xce, 0x93, 0x1d, 0x55, 0xa2, 0x3d, 0xdd, 0x7e, 0x10, 0x66, 0x6d, 0xc6, - 0x5c, 0x87, 0x9f, 0x7a, 0x52, 0x5e, 0x76, 0x3f, 0x09, 0x9e, 0xe5, 0x8e, 0x60, 0x39, 0x5e, 0x3c, - 0x28, 0x31, 0xa4, 0x12, 0x39, 0xfd, 0xba, 0xda, 0xc8, 0x59, 0xdd, 0x5b, 0x26, 0x78, 0x8f, 0x33, - 0xd2, 0xc8, 0x22, 0x77, 0x49, 0xcf, 0x34, 0x61, 0xbe, 0x7a, 0xa6, 0x31, 0xbe, 0xe5, 0xab, 0xc2 }, - { 0x60, 0xf5, 0x52, 0xbd, 0xb1, 0x9e, 0x06, 0xa3, 0x94, 0xad, 0xe0, 0x82, 0x33, 0x7c, 0x41, 0x17, - 0x5b, 0x8a, 0xbc, 0x7c, 0xce, 0xd1, 0x7e, 0xfd, 0x39, 0x17, 0xfd, 0x90, 0x5a, 0x53, 0x89, 0x27, - 0x9f, 0x27, 0x7a, 0x08, 0xb2, 0x66, 0xda, 0xb5, 0xbf, 0x3b, 0x80, 0xe2, 0x1a, 0x30, 0x80, 0x45, - 0x13, 0xf3, 0x4b, 0x0c, 0x4a, 0xe9, 0x0a, 0x6e, 0xf2, 0x3e, 0xa3, 0x70, 0x3d, 0x89, 0xd3, 0xb2 }, - { 0x23, 0x41, 0x08, 0x8d, 0xa8, 0x0b, 0x6a, 0xe0, 0x65, 0xb1, 0x42, 0x50, 0x49, 0xdd, 0xd3, 0xe8, - 0x89, 0x13, 0x7a, 0x04, 0xf0, 0xd6, 0x2f, 0x6e, 0x73, 0xcd, 0xdc, 0x10, 0xbb, 0x02, 0x6b, 0xa2, - 0x25, 0x58, 0xa3, 0x08, 0x37, 0x7c, 0x8b, 0x1f, 0x4a, 0x81, 0x38, 0x88, 0xbd, 0xf4, 0x4f, 0x24, - 0xe8, 0xd6, 0x9f, 0x2f, 0x13, 0xeb, 0x79, 0x60, 0x80, 0x90, 0x52, 0x6b, 0x8e, 0xed, 0xcb, 0x77 }, - { 0x5b, 0x88, 0x63, 0xaf, 0xf9, 0xe2, 0x44, 0x23, 0xc8, 0x02, 0xe0, 0x22, 0x15, 0x3d, 0x2a, 0xb7, - 0x40, 0x76, 0xe8, 0x95, 0xfd, 0xa9, 0xe3, 0x85, 0x94, 0xa3, 0xbb, 0xce, 0x61, 0x19, 0x0d, 0xe2, - 0x95, 0xdf, 0x81, 0x11, 0x53, 0x77, 0xcd, 0xf2, 0xd8, 0x4f, 0xbf, 0x19, 0x6a, 0x3d, 0x4b, 0xda, - 0xa4, 0x56, 0xa4, 0xcd, 0x9d, 0x4f, 0x52, 0x53, 0x7d, 0xd8, 0xac, 0xe0, 0xfb, 0x9a, 0x71, 0x0c, - 0x59, 0xf9, 0x0b, 0x03, 0xf1, 0x7b, 0xaf, 0x33, 0xc3, 0xe5, 0x1e, 0x8d, 0x4f, 0xbe, 0x21, 0xed, - 0x6b, 0x15, 0xdd, 0xd2, 0xeb, 0x7c, 0xe4, 0x59, 0x6c, 0xf9, 0x91, 0xc1, 0x3a, 0x3a, 0xb6, 0x2b }, - { 0x5e, 0x54, 0xe5, 0x1b, 0x3d, 0x2c, 0x00, 0x80, 0xdd, 0xe4, 0x10, 0x50, 0x98, 0xb6, 0x0e, 0x3a, - 0xf7, 0xde, 0x67, 0x2c, 0x8e, 0x7b, 0xb4, 0x73, 0x0b, 0xc7, 0x12, 0xb0, 0x66, 0x6b, 0x3b, 0x99, - 0xd9, 0x33, 0x78, 0x5f, 0x45, 0xe5, 0xec, 0x15, 0x02, 0xfa, 0x8b, 0x86, 0xfd, 0xe0, 0xb7, 0x84, - 0x72, 0xf2, 0x68, 0x5c, 0xd6, 0x2e, 0x37, 0xe9, 0x49, 0x32, 0x2f, 0xcd, 0xcd, 0x1e, 0x99, 0x0f, - 0x59, 0xf9, 0x0b, 0x03, 0xf1, 0x7b, 0xaf, 0x33, 0xc3, 0xe5, 0x1e, 0x8d, 0x4f, 0xbe, 0x21, 0xed, - 0x6b, 0x15, 0xdd, 0xd2, 0xeb, 0x7c, 0xe4, 0x59, 0x6c, 0xf9, 0x91, 0xc1, 0x3a, 0x3a, 0xb6, 0x2b } }, - { { 0xfc, 0xb9, 0x4e, 0x4e, 0x11, 0xfe, 0xe1, 0xc5, 0xc7, 0x49, 0x54, 0xd2, 0x2f, 0x13, 0x34, 0x7c, - 0x91, 0x7d, 0x98, 0x43, 0xe4, 0xb7, 0x48, 0xea, 0xe8, 0x26, 0xcb, 0x26, 0x1f, 0xe4, 0x99, 0x10, - 0xb9, 0x34, 0xc2, 0xac, 0xa3, 0x2c, 0xbd, 0x9e, 0x80, 0xd4, 0x12, 0x3b, 0xb3, 0xf0, 0x01, 0xae, - 0x91, 0x9f, 0xba, 0x77, 0x32, 0x4d, 0x9d, 0xac, 0x1f, 0x8d, 0xad, 0xa7, 0x46, 0x44, 0x85, 0xfb }, - { 0x65, 0x05, 0x0b, 0xd2, 0x41, 0xd3, 0x58, 0x2a, 0x14, 0xbc, 0x7b, 0x15, 0x4a, 0x6a, 0x6a, 0x18, - 0x71, 0x09, 0x25, 0x33, 0xac, 0x73, 0x53, 0xab, 0xd9, 0x0d, 0x8d, 0xdf, 0x95, 0x59, 0x7e, 0x02, - 0x4c, 0x03, 0x11, 0x5c, 0xdc, 0x80, 0x19, 0xd5, 0x13, 0x66, 0x7f, 0xf7, 0xd7, 0x23, 0x18, 0x40, - 0x84, 0x16, 0x6b, 0x52, 0x82, 0x96, 0x05, 0x1b, 0xfa, 0xcb, 0x4b, 0x77, 0x00, 0x12, 0xa0, 0x28 }, - { 0x13, 0xe0, 0x16, 0x1e, 0x24, 0x24, 0xe9, 0xde, 0x9c, 0x86, 0xa9, 0xcf, 0x02, 0x96, 0xdf, 0x8c, - 0x64, 0xcb, 0x3d, 0x7d, 0x8a, 0x2a, 0x73, 0x18, 0x20, 0xc8, 0xb0, 0xac, 0x10, 0xa0, 0x52, 0x0c, - 0x6c, 0x17, 0xd9, 0xbd, 0x3c, 0x3e, 0xe5, 0x0c, 0x4a, 0xdb, 0x59, 0xcc, 0x59, 0x15, 0x08, 0x1e, - 0xfe, 0xaa, 0xe3, 0xd6, 0xa1, 0x37, 0xd6, 0xd5, 0x6d, 0x8e, 0xcd, 0x57, 0xa9, 0x81, 0xb3, 0x43 }, - { 0x46, 0x28, 0x2b, 0xa0, 0xe5, 0xe3, 0xf0, 0x72, 0xa7, 0xbc, 0x8d, 0xec, 0x45, 0x31, 0x6e, 0xdb, - 0xb2, 0x4b, 0x20, 0xbf, 0x64, 0x74, 0x26, 0x70, 0x9b, 0xd6, 0xd3, 0x7f, 0x9f, 0xc1, 0x59, 0x03, - 0x2d, 0xda, 0x6f, 0xaa, 0x7c, 0x92, 0xc6, 0xe0, 0xe8, 0xaa, 0x1e, 0x26, 0xf0, 0x1e, 0xcc, 0xef, - 0x6d, 0x87, 0x04, 0x3c, 0xed, 0x52, 0x15, 0xb3, 0x9f, 0x01, 0x4e, 0xe3, 0x3c, 0xb6, 0xbb, 0xac }, - { 0x86, 0x1a, 0x25, 0x8e, 0x41, 0x85, 0xf9, 0xba, 0x98, 0x15, 0xb1, 0xec, 0x50, 0xb4, 0xd0, 0xab, - 0x55, 0x54, 0xbb, 0x3b, 0x61, 0xfc, 0x54, 0xf3, 0x09, 0xea, 0xaa, 0x6e, 0xbf, 0x03, 0xc3, 0x58, - 0x1d, 0x24, 0xb5, 0xd5, 0x45, 0x5a, 0x7a, 0x14, 0xc3, 0x6a, 0xa9, 0xd8, 0x6f, 0x41, 0xc3, 0xb4, - 0x9a, 0x05, 0x71, 0xbc, 0x23, 0x67, 0xc2, 0xa8, 0xf5, 0x7b, 0x69, 0xa5, 0xe1, 0x7a, 0x35, 0x1d }, - { 0x3b, 0xf5, 0xa8, 0xc0, 0x2a, 0x7d, 0x85, 0x88, 0xd4, 0xf4, 0x26, 0xd3, 0xf4, 0xe3, 0x52, 0x35, - 0x37, 0x06, 0x1e, 0x71, 0xc2, 0x3b, 0x7b, 0xeb, 0xf0, 0x07, 0x30, 0x6b, 0x37, 0x31, 0xb9, 0x27, - 0xd8, 0x0b, 0x17, 0xae, 0xff, 0xd4, 0x7c, 0x59, 0xd7, 0x2d, 0xea, 0xcb, 0x92, 0x2f, 0x93, 0xc7, - 0xd7, 0xc3, 0xaf, 0x75, 0x73, 0x6a, 0x3f, 0x89, 0xe5, 0x13, 0x0c, 0x28, 0x47, 0xf4, 0xa4, 0x07, - 0xfb, 0xd9, 0x77, 0xb4, 0x1e, 0xb2, 0x70, 0xca, 0x85, 0x22, 0x58, 0xc6, 0x0b, 0x19, 0xc2, 0xa5, - 0xba, 0xc3, 0xc9, 0xb6, 0x4a, 0xdb, 0x7d, 0x4d, 0x66, 0xde, 0xeb, 0x8c, 0x1a, 0x23, 0xb8, 0x4c }, - { 0x8c, 0x57, 0x0e, 0x9f, 0x0a, 0xb2, 0xf4, 0x07, 0xdd, 0x7b, 0x46, 0xf8, 0xa0, 0xb1, 0x33, 0x4c, - 0x2b, 0x1e, 0x1a, 0xe0, 0x28, 0x17, 0x14, 0xba, 0x14, 0x06, 0x40, 0x1f, 0x30, 0x0a, 0x19, 0xcd, - 0xe7, 0xca, 0xfb, 0xdb, 0xb9, 0x76, 0xf8, 0x8a, 0x81, 0x3d, 0x03, 0x86, 0x7e, 0x66, 0x75, 0x1d, - 0xec, 0xff, 0x6b, 0xa7, 0xea, 0x4c, 0x8c, 0x60, 0xd2, 0x1f, 0x72, 0x11, 0x4c, 0x5d, 0xeb, 0x01, - 0xfb, 0xd9, 0x77, 0xb4, 0x1e, 0xb2, 0x70, 0xca, 0x85, 0x22, 0x58, 0xc6, 0x0b, 0x19, 0xc2, 0xa5, - 0xba, 0xc3, 0xc9, 0xb6, 0x4a, 0xdb, 0x7d, 0x4d, 0x66, 0xde, 0xeb, 0x8c, 0x1a, 0x23, 0xb8, 0x4c } }, - { { 0x05, 0x64, 0x16, 0x53, 0xbb, 0xb2, 0x6e, 0x81, 0xfc, 0xe6, 0xec, 0xc8, 0x0c, 0xc1, 0x75, 0x59, - 0x23, 0xe2, 0x4b, 0xd8, 0x6a, 0x70, 0x34, 0x50, 0x37, 0xc6, 0xc2, 0xbd, 0x27, 0xfd, 0xad, 0x4c, - 0xee, 0xe4, 0xf7, 0xfc, 0x91, 0x05, 0x48, 0x3c, 0xd4, 0x09, 0x78, 0x00, 0xce, 0x15, 0x37, 0xdc, - 0xe7, 0xce, 0x48, 0x09, 0x3e, 0x7f, 0x01, 0x9b, 0x03, 0xc8, 0x2f, 0x9b, 0xe6, 0x42, 0xe1, 0x71 }, - { 0x64, 0xbf, 0x63, 0x91, 0xe5, 0x3e, 0x90, 0x89, 0x96, 0xea, 0x59, 0x51, 0x60, 0x7b, 0x5f, 0xfe, - 0x0f, 0x76, 0x86, 0x19, 0x45, 0x82, 0xd9, 0x5e, 0x1a, 0xd1, 0xf6, 0x04, 0xc6, 0xaa, 0x71, 0xda, - 0x80, 0xed, 0x75, 0x51, 0xc8, 0x9a, 0x27, 0x09, 0xc3, 0x50, 0xe4, 0x14, 0xa1, 0xc3, 0xf8, 0x3a, - 0x6c, 0x84, 0xff, 0x87, 0xd5, 0xf0, 0xb0, 0x3c, 0x5a, 0x57, 0x14, 0x90, 0xc7, 0x31, 0xf8, 0x47 }, - { 0x88, 0x7d, 0xcc, 0x81, 0x2b, 0xbb, 0x7e, 0x96, 0xbe, 0x78, 0xe1, 0xb1, 0xf2, 0xed, 0x6f, 0xd8, - 0xff, 0xbd, 0x7f, 0x8e, 0xe5, 0xeb, 0x7f, 0x7b, 0xca, 0xaf, 0x9b, 0x08, 0x1a, 0x77, 0x69, 0x1d, - 0xc2, 0xa4, 0x7c, 0x4d, 0xa6, 0x74, 0x8e, 0x33, 0x24, 0xff, 0x43, 0xe1, 0x8c, 0x59, 0xae, 0x5f, - 0x95, 0xa4, 0x35, 0x9e, 0x61, 0xb8, 0xcc, 0x4c, 0x87, 0xb9, 0x76, 0x53, 0x20, 0xa3, 0xf3, 0xf5 }, - { 0x13, 0x2a, 0xcc, 0x07, 0xb1, 0x5f, 0xc7, 0xf1, 0x08, 0x0e, 0x7d, 0x7e, 0x26, 0x56, 0xd8, 0x16, - 0x9c, 0xae, 0xac, 0xc4, 0xf5, 0x9c, 0x15, 0x67, 0xae, 0xc4, 0xcc, 0x3f, 0xc0, 0xaf, 0x53, 0x28, - 0x1f, 0x65, 0x14, 0xe5, 0x7f, 0x0c, 0xf5, 0x7a, 0xe3, 0x93, 0xc1, 0xa3, 0xd1, 0x4a, 0x09, 0x7d, - 0x24, 0xab, 0x22, 0xc4, 0xc4, 0xce, 0x85, 0x37, 0x86, 0xa8, 0x9c, 0x39, 0x33, 0xba, 0x1b, 0x83 }, - { 0x6d, 0x3e, 0x92, 0x5a, 0xa8, 0xfa, 0xe6, 0x71, 0x98, 0xa8, 0x82, 0x38, 0xcc, 0xed, 0xd6, 0x92, - 0x7e, 0x3e, 0xcb, 0xb2, 0x82, 0x92, 0x7a, 0x56, 0x9e, 0xd6, 0x29, 0x45, 0x42, 0x04, 0x76, 0x82, - 0xa5, 0xfc, 0xd9, 0x0c, 0x12, 0x4c, 0x98, 0x04, 0x2a, 0x3a, 0x98, 0x01, 0xb8, 0x62, 0xe8, 0xe6, - 0x7c, 0x51, 0xe3, 0x7d, 0x97, 0xf5, 0x45, 0xb4, 0x13, 0xdf, 0x15, 0x68, 0xc3, 0x00, 0x75, 0x40 }, - { 0x7e, 0x89, 0x3d, 0x7c, 0x78, 0x36, 0x3c, 0x85, 0xda, 0xb6, 0x9b, 0x6d, 0xbc, 0x52, 0x7d, 0xc6, - 0xaa, 0xfd, 0x90, 0x62, 0xe4, 0xc4, 0x1a, 0x5a, 0x2e, 0xa1, 0x57, 0xd7, 0xda, 0x57, 0xf4, 0x58, - 0xc5, 0x23, 0x61, 0x21, 0xe1, 0x93, 0xfa, 0x06, 0x22, 0xed, 0x41, 0x66, 0x24, 0x47, 0xb9, 0xed, - 0xc8, 0x84, 0x25, 0x28, 0x39, 0xec, 0xfb, 0x29, 0xa1, 0xcd, 0xe1, 0x9d, 0x02, 0x48, 0x6f, 0x0a, - 0xe2, 0x9f, 0x98, 0xfd, 0x3d, 0x18, 0xa1, 0x24, 0x9c, 0xc6, 0x75, 0xb8, 0x99, 0x76, 0x2a, 0xa4, - 0x9e, 0xb1, 0x97, 0x2d, 0x1c, 0x99, 0x65, 0x5f, 0x1f, 0xda, 0x14, 0x4f, 0x10, 0x49, 0xf1, 0x7a }, - { 0x2c, 0xec, 0x27, 0x63, 0xd2, 0x77, 0x14, 0x2d, 0x01, 0x18, 0x10, 0xe0, 0x23, 0x1b, 0xa2, 0x25, - 0x61, 0xd4, 0x52, 0xd9, 0x90, 0xde, 0x97, 0x7e, 0xb8, 0xfa, 0x38, 0x25, 0xf2, 0x91, 0x07, 0x3e, - 0xc4, 0xa9, 0x3e, 0xb5, 0x67, 0x02, 0x28, 0x94, 0x5c, 0x34, 0xa1, 0x0a, 0x5c, 0x54, 0x53, 0xd9, - 0xb4, 0xc4, 0x5a, 0x8e, 0x57, 0x18, 0xc3, 0x35, 0xea, 0x47, 0x75, 0xe0, 0x44, 0x01, 0x71, 0x09, - 0xe2, 0x9f, 0x98, 0xfd, 0x3d, 0x18, 0xa1, 0x24, 0x9c, 0xc6, 0x75, 0xb8, 0x99, 0x76, 0x2a, 0xa4, - 0x9e, 0xb1, 0x97, 0x2d, 0x1c, 0x99, 0x65, 0x5f, 0x1f, 0xda, 0x14, 0x4f, 0x10, 0x49, 0xf1, 0x7a } }, - { { 0x41, 0x10, 0xd9, 0x7f, 0xb8, 0x83, 0x9e, 0x42, 0x43, 0x7a, 0xb0, 0x6d, 0xa6, 0xcf, 0xa5, 0x7a, - 0x50, 0x93, 0x2d, 0x13, 0x94, 0x37, 0xa8, 0x92, 0x26, 0x1f, 0xad, 0xe0, 0x25, 0x19, 0x91, 0x62, - 0x28, 0xfb, 0x18, 0xbf, 0x89, 0xb0, 0x42, 0x80, 0x14, 0xcd, 0xd2, 0x72, 0x84, 0x1c, 0xfd, 0xe5, - 0xc3, 0x71, 0x3c, 0x3f, 0x12, 0x5e, 0xdd, 0x53, 0x39, 0xf6, 0x4b, 0x9f, 0xb3, 0x5c, 0xe3, 0x15 }, - { 0xd0, 0xc7, 0x18, 0x4d, 0x68, 0x9f, 0xdd, 0xec, 0x81, 0xf8, 0xc6, 0x0e, 0x83, 0x43, 0x23, 0x3d, - 0xfc, 0xf3, 0x66, 0x55, 0xa8, 0x65, 0x8b, 0xd7, 0x9b, 0x3c, 0x74, 0x23, 0xcd, 0xae, 0x60, 0xe7, - 0x61, 0xed, 0x2c, 0x7e, 0xe7, 0xa7, 0x63, 0x7d, 0x72, 0x47, 0x6a, 0x33, 0x1c, 0xaa, 0x81, 0xba, - 0x6f, 0xd4, 0x00, 0xe7, 0xa9, 0x58, 0xb2, 0xad, 0xee, 0x3f, 0x9c, 0x70, 0xff, 0x2f, 0x13, 0x6f }, - { 0x56, 0x7b, 0x19, 0x66, 0x42, 0x9a, 0x99, 0x51, 0x23, 0x4f, 0xb6, 0xe7, 0xcf, 0x98, 0xff, 0x20, - 0x5a, 0xc3, 0x0e, 0x36, 0xc9, 0xc6, 0x20, 0x25, 0x0c, 0x56, 0x98, 0xfb, 0xbd, 0xd6, 0x66, 0x4f, - 0x6f, 0x94, 0x85, 0x8a, 0x35, 0xf3, 0x50, 0xad, 0x87, 0xde, 0x95, 0x9e, 0xae, 0x2a, 0xd8, 0xdd, - 0x78, 0x87, 0x96, 0x2b, 0xe0, 0x12, 0x95, 0xd9, 0x3b, 0xb2, 0x2a, 0x06, 0xe2, 0xf0, 0x06, 0xd4 }, - { 0x42, 0x24, 0xdd, 0x0a, 0xd1, 0x11, 0x31, 0x7e, 0x56, 0x45, 0xb0, 0x0e, 0x86, 0xc1, 0x5d, 0x8c, - 0x03, 0x01, 0xb8, 0x33, 0x20, 0xbd, 0x08, 0x10, 0xe5, 0x70, 0x92, 0x2b, 0x5b, 0x86, 0xd3, 0x50, - 0x4c, 0x1e, 0xe3, 0xd1, 0x2a, 0x4e, 0x40, 0x02, 0x19, 0x0b, 0xf6, 0x91, 0xd9, 0x9e, 0xaa, 0x54, - 0x7c, 0x3d, 0xba, 0xc5, 0x5a, 0x9e, 0xb2, 0xbb, 0x4e, 0x0d, 0x5b, 0xdd, 0x90, 0xc9, 0x7b, 0xc2 }, - { 0x54, 0x95, 0xd5, 0xdc, 0x7e, 0x7e, 0xec, 0xd4, 0x67, 0x08, 0xdc, 0x58, 0xa9, 0x80, 0x8a, 0x03, - 0x6a, 0xf8, 0x40, 0xca, 0x0d, 0x5b, 0x6c, 0xe4, 0xc9, 0x71, 0xa5, 0xaf, 0x2a, 0xaa, 0xe8, 0x95, - 0x45, 0xe7, 0xe2, 0xc3, 0x47, 0x84, 0xc6, 0xbe, 0xe5, 0x65, 0xaf, 0xcd, 0x7c, 0x20, 0x5f, 0x8b, - 0x19, 0x61, 0xe4, 0xc9, 0xc1, 0x86, 0xa5, 0x6f, 0x96, 0xf3, 0x9c, 0x13, 0x28, 0x1b, 0xcf, 0x07 }, - { 0xc4, 0x7f, 0xf2, 0x6f, 0xcc, 0x4a, 0xf8, 0xa4, 0x1f, 0x1d, 0x6e, 0x5e, 0x30, 0xb2, 0x99, 0x8f, - 0x5d, 0x7c, 0x26, 0x1c, 0x52, 0x6f, 0xd0, 0x33, 0xa7, 0xf8, 0xca, 0x2a, 0xc3, 0x8c, 0xa8, 0xd1, - 0x50, 0x4f, 0xa7, 0xe8, 0xf2, 0x10, 0x4c, 0xcd, 0x8a, 0x31, 0x03, 0xc8, 0x93, 0x2c, 0xd7, 0xe4, - 0x21, 0xdb, 0xa2, 0x62, 0x7b, 0x1f, 0x28, 0x14, 0x69, 0x7e, 0x87, 0xac, 0xf9, 0xb4, 0x97, 0x00, - 0x62, 0x86, 0x14, 0xd7, 0xe4, 0x65, 0xdd, 0x9e, 0x1c, 0x64, 0x5f, 0x3e, 0xef, 0xfe, 0xa6, 0x60, - 0x68, 0x91, 0x94, 0x8a, 0x1c, 0x89, 0xae, 0xe4, 0xcf, 0x3a, 0xdd, 0xc0, 0xb4, 0x47, 0xe8, 0x8f }, - { 0x12, 0x80, 0x00, 0xda, 0xce, 0xc4, 0x80, 0x8f, 0xa9, 0xa1, 0x5d, 0x98, 0x7d, 0x2c, 0xb2, 0x9c, - 0x71, 0xde, 0x62, 0x89, 0x6a, 0xe1, 0x92, 0xd7, 0x96, 0xdc, 0xcd, 0xc8, 0x08, 0x0e, 0x48, 0xbf, - 0x2a, 0x53, 0x72, 0x90, 0x31, 0x71, 0x49, 0x02, 0xda, 0x4e, 0x19, 0x05, 0x10, 0xcb, 0x41, 0x97, - 0x44, 0xdc, 0x2d, 0x1e, 0x48, 0xe5, 0x0e, 0x41, 0x9d, 0x7d, 0x03, 0xa3, 0xe2, 0x65, 0xd4, 0x01, - 0x62, 0x86, 0x14, 0xd7, 0xe4, 0x65, 0xdd, 0x9e, 0x1c, 0x64, 0x5f, 0x3e, 0xef, 0xfe, 0xa6, 0x60, - 0x68, 0x91, 0x94, 0x8a, 0x1c, 0x89, 0xae, 0xe4, 0xcf, 0x3a, 0xdd, 0xc0, 0xb4, 0x47, 0xe8, 0x8f } }, - { { 0x00, 0x4b, 0x0b, 0xf5, 0x1f, 0x07, 0x1e, 0x23, 0xe3, 0x93, 0x7b, 0x31, 0x41, 0x2a, 0x0a, 0x50, - 0x35, 0xe2, 0xbb, 0xfe, 0x51, 0x77, 0x6c, 0xc9, 0xc5, 0x13, 0xb9, 0x87, 0x79, 0x65, 0x68, 0x20, - 0xcc, 0x09, 0x90, 0xa9, 0xe4, 0xef, 0x9f, 0x1a, 0xe1, 0x69, 0x76, 0x14, 0x82, 0x42, 0x88, 0x4b, - 0xdc, 0xe0, 0x10, 0x22, 0xe2, 0xd6, 0x36, 0x7c, 0x0b, 0xd9, 0x08, 0xea, 0xfa, 0xe4, 0xfd, 0x45 }, - { 0x57, 0x5c, 0x1e, 0x20, 0xb4, 0xae, 0x9e, 0x9d, 0x04, 0xfb, 0x1a, 0xd7, 0x23, 0xd8, 0x8a, 0x6b, - 0x1b, 0xb2, 0xef, 0xa9, 0x06, 0x38, 0xbb, 0x9b, 0x43, 0x2e, 0xf1, 0x81, 0x0b, 0x76, 0xec, 0x20, - 0x46, 0x1b, 0xc4, 0x71, 0x19, 0x3e, 0x79, 0xe8, 0xcf, 0xea, 0xdc, 0x4b, 0x3f, 0x0b, 0xeb, 0x05, - 0x13, 0x1a, 0x2c, 0xfe, 0x16, 0xe9, 0xf0, 0xc4, 0x9c, 0x41, 0xab, 0x45, 0x1b, 0xba, 0x05, 0xec }, - { 0x06, 0x0b, 0x73, 0xec, 0x30, 0x74, 0x0d, 0x8d, 0x13, 0x4b, 0xef, 0xac, 0x3b, 0x05, 0xb6, 0xed, - 0x2b, 0x05, 0xd1, 0xa7, 0x65, 0xb0, 0xcb, 0x69, 0x00, 0xeb, 0x47, 0xe3, 0x1c, 0x07, 0x8b, 0x15, - 0xbf, 0x69, 0xff, 0x27, 0xb4, 0xdb, 0x77, 0xaf, 0xe9, 0x9a, 0xfb, 0xb2, 0x28, 0xa4, 0xf9, 0x05, - 0xe4, 0x3c, 0x66, 0x56, 0x00, 0x1a, 0x2c, 0x41, 0xf2, 0xe1, 0x11, 0x09, 0xfa, 0xe1, 0x50, 0x49 }, - { 0xbc, 0x4d, 0x6f, 0x75, 0x79, 0x77, 0x64, 0x6b, 0xec, 0xac, 0x1a, 0x26, 0x73, 0x9c, 0xf3, 0xf1, - 0x4d, 0x79, 0xbe, 0x6f, 0x0c, 0x07, 0x22, 0xd1, 0xa1, 0x31, 0x75, 0xa8, 0x9c, 0xb6, 0x00, 0x63, - 0x0d, 0x40, 0x17, 0xec, 0x83, 0xda, 0x82, 0x2c, 0x3b, 0xfd, 0x90, 0xe3, 0xbc, 0xc2, 0x2c, 0xf5, - 0x3e, 0x41, 0xe9, 0x98, 0x57, 0xa2, 0xb7, 0xce, 0x5f, 0x31, 0xbb, 0x0b, 0x05, 0x61, 0x0f, 0x55 }, - { 0xb7, 0xab, 0xb2, 0x84, 0xf1, 0x67, 0x24, 0x16, 0x61, 0xe9, 0x20, 0x33, 0x0b, 0xff, 0x22, 0x61, - 0x70, 0xa0, 0x5d, 0xf6, 0xa8, 0x33, 0xc9, 0x30, 0x73, 0xe5, 0x89, 0x36, 0x59, 0xea, 0xa8, 0xe7, - 0x03, 0xf6, 0x14, 0xc1, 0x79, 0xb6, 0x42, 0xa5, 0xc8, 0x6c, 0xb8, 0x94, 0x29, 0x24, 0x00, 0x09, - 0xb5, 0x54, 0x3f, 0xe1, 0x6b, 0xfb, 0x4d, 0x2d, 0xa9, 0x9a, 0x02, 0xa1, 0xa5, 0x09, 0xf4, 0xcb }, - { 0x92, 0xfa, 0x18, 0x84, 0x3e, 0xdb, 0xdf, 0x7d, 0x87, 0xd6, 0x2d, 0x07, 0x05, 0x2c, 0xba, 0xe4, - 0x30, 0x76, 0xa2, 0xe8, 0x71, 0x3b, 0x1b, 0x93, 0x5b, 0xce, 0x2e, 0xec, 0x50, 0x6e, 0x4a, 0x0b, - 0x2d, 0xbe, 0xa3, 0x76, 0x92, 0xf8, 0xc8, 0x4a, 0x71, 0x66, 0xec, 0xfa, 0x36, 0xc5, 0xdb, 0xab, - 0x99, 0x9c, 0xbf, 0x99, 0x07, 0xe8, 0xfe, 0xf4, 0x2f, 0x90, 0x16, 0x5d, 0xdc, 0xbe, 0xfa, 0x08, - 0x93, 0xde, 0x13, 0xf5, 0x32, 0x45, 0x9a, 0xde, 0xa2, 0x5d, 0xb9, 0xe0, 0x38, 0x4c, 0x6a, 0xcc, - 0x13, 0x46, 0x27, 0x28, 0xbf, 0xf8, 0x7a, 0x9c, 0x2e, 0xde, 0x6f, 0xfe, 0xe1, 0x86, 0x41, 0x79 }, - { 0xa7, 0x32, 0x52, 0x76, 0x4f, 0x3e, 0x1b, 0xab, 0x82, 0x18, 0x14, 0xe7, 0x42, 0x32, 0xb8, 0xa4, - 0x98, 0xde, 0xa4, 0xd7, 0xae, 0x42, 0x84, 0xda, 0x71, 0xf7, 0x78, 0x40, 0x56, 0x94, 0x64, 0x49, - 0x34, 0x37, 0xeb, 0xe3, 0x05, 0x4c, 0xb9, 0xbb, 0xce, 0xb2, 0x72, 0xc0, 0x75, 0x1c, 0xc4, 0xd5, - 0x1e, 0x3a, 0xc1, 0x43, 0xda, 0xd1, 0x81, 0x82, 0xa9, 0xd5, 0x0e, 0x0a, 0x5e, 0xc2, 0xd7, 0x04, - 0x93, 0xde, 0x13, 0xf5, 0x32, 0x45, 0x9a, 0xde, 0xa2, 0x5d, 0xb9, 0xe0, 0x38, 0x4c, 0x6a, 0xcc, - 0x13, 0x46, 0x27, 0x28, 0xbf, 0xf8, 0x7a, 0x9c, 0x2e, 0xde, 0x6f, 0xfe, 0xe1, 0x86, 0x41, 0x79 } }, - { { 0xa3, 0xdf, 0x4a, 0xfd, 0xe6, 0x74, 0xb8, 0xeb, 0xed, 0xe7, 0x7e, 0xd2, 0xae, 0xf8, 0x40, 0x80, - 0x3a, 0x55, 0x58, 0x1d, 0x6b, 0xa4, 0x32, 0x6c, 0x15, 0xbb, 0x67, 0xdf, 0x9e, 0xb5, 0x70, 0x4b, - 0x7f, 0x4d, 0xfe, 0x34, 0x42, 0x0c, 0x4d, 0xe3, 0x97, 0x87, 0x6d, 0x08, 0xe8, 0x4d, 0x8a, 0xa9, - 0xbc, 0xbf, 0x1b, 0xb7, 0x66, 0x32, 0xf4, 0x7f, 0x93, 0xca, 0xa4, 0xd2, 0x8f, 0x02, 0x7b, 0xfa }, - { 0xea, 0xac, 0xdf, 0x25, 0x39, 0xf3, 0x28, 0xb6, 0xbe, 0xa8, 0x4a, 0x32, 0x59, 0x4b, 0x4f, 0xb5, - 0xd2, 0xf7, 0xf5, 0x75, 0x43, 0x8b, 0xb3, 0x6a, 0x98, 0x8c, 0x14, 0xc9, 0x3f, 0x7e, 0x5c, 0x05, - 0xf0, 0xeb, 0x1d, 0xc5, 0xe6, 0x1b, 0x5d, 0x7f, 0x38, 0x5d, 0x9a, 0xbe, 0xc8, 0x97, 0x09, 0x65, - 0x62, 0x88, 0x99, 0xda, 0x95, 0x13, 0x93, 0xd9, 0xa3, 0x19, 0x0a, 0xa7, 0x4a, 0xb2, 0x81, 0xa4 }, - { 0x6e, 0x70, 0x65, 0xaa, 0x1b, 0x16, 0xcb, 0xc1, 0x59, 0x6b, 0xc9, 0x4d, 0xd1, 0x0a, 0x9d, 0x8c, - 0x76, 0x70, 0x3c, 0xc1, 0xc1, 0x66, 0xa6, 0x9f, 0xfc, 0xca, 0xb0, 0x3f, 0x0e, 0xe9, 0xa9, 0x36, - 0x09, 0x4f, 0x94, 0xf3, 0x32, 0x25, 0x34, 0xf6, 0xe4, 0xf9, 0x0b, 0x0c, 0xe6, 0xe0, 0x6d, 0x9e, - 0xa5, 0x52, 0x82, 0x9c, 0xd4, 0x43, 0xa4, 0xd1, 0xd1, 0x63, 0x20, 0xce, 0xbc, 0x4f, 0x43, 0xdc }, - { 0x35, 0xd6, 0xc1, 0x68, 0xa6, 0xd7, 0xd3, 0x36, 0x82, 0x2a, 0x0f, 0x29, 0x3e, 0xd6, 0x15, 0x29, - 0x19, 0x73, 0x14, 0x78, 0x87, 0x86, 0xca, 0x9f, 0x6e, 0x17, 0xea, 0xaf, 0x24, 0x37, 0xd6, 0xb4, - 0xb0, 0xee, 0x84, 0x90, 0x2d, 0x18, 0xbd, 0x26, 0xc3, 0xd4, 0x39, 0x4f, 0x45, 0xfa, 0x2f, 0x70, - 0xf2, 0xe2, 0x2a, 0x2a, 0x5c, 0x65, 0x15, 0xcb, 0xaf, 0x92, 0x9a, 0xfc, 0x06, 0xe0, 0x8a, 0x1b }, - { 0x5d, 0xfa, 0xc0, 0x2b, 0xc3, 0x94, 0x19, 0xb4, 0xd6, 0x13, 0xe3, 0xcf, 0x91, 0xad, 0x8c, 0xe1, - 0x97, 0x46, 0xfe, 0xea, 0x74, 0xe0, 0x0c, 0x03, 0xf7, 0x2e, 0x51, 0xa7, 0xf2, 0xbc, 0xce, 0xe8, - 0x6b, 0xfd, 0x2f, 0x54, 0x52, 0x12, 0x00, 0x8d, 0x95, 0x91, 0xc3, 0xf6, 0x25, 0xf8, 0x65, 0x6a, - 0x9c, 0x79, 0x6b, 0x71, 0xc0, 0x0c, 0x29, 0xfb, 0xe7, 0x14, 0x9f, 0x2f, 0x1a, 0x07, 0x53, 0x50 }, - { 0xe9, 0xd4, 0x46, 0x0b, 0x51, 0x3f, 0xf1, 0xbe, 0x0a, 0x23, 0xa5, 0x38, 0xa0, 0xe3, 0x70, 0x14, - 0x63, 0xf0, 0x94, 0xbb, 0x1c, 0x4f, 0x23, 0x05, 0x1b, 0x62, 0x40, 0x9b, 0xf9, 0x52, 0x1b, 0x41, - 0x51, 0x57, 0x2a, 0x99, 0x73, 0xda, 0xe1, 0xcf, 0xc5, 0x4c, 0x65, 0x3a, 0xc2, 0x9d, 0x73, 0xda, - 0xc9, 0x59, 0xf1, 0xdf, 0xab, 0x2b, 0x27, 0xe1, 0x59, 0x8b, 0xa7, 0x48, 0xf9, 0x36, 0xcb, 0x08, - 0xe3, 0x5e, 0x1d, 0xdd, 0xf9, 0x20, 0x4f, 0x64, 0xa9, 0x26, 0x74, 0x97, 0xf2, 0x2d, 0x31, 0xac, - 0x8c, 0x20, 0x77, 0x09, 0xa9, 0x8f, 0xed, 0x23, 0x77, 0x7e, 0xd7, 0x34, 0x93, 0x84, 0xe7, 0xaa }, - { 0xaa, 0xf7, 0x64, 0xdf, 0x34, 0x59, 0x1c, 0x2c, 0xbc, 0x47, 0x08, 0x6a, 0x25, 0xbf, 0x9d, 0x48, - 0x54, 0xcf, 0xa0, 0x6c, 0xfc, 0xd4, 0x10, 0x39, 0x9f, 0x64, 0x46, 0xce, 0xd9, 0x95, 0x28, 0x89, - 0xdf, 0x94, 0x5e, 0x74, 0x0b, 0x55, 0x46, 0x82, 0xd9, 0x3d, 0x82, 0x97, 0x7d, 0xd0, 0x3e, 0xd7, - 0xf6, 0x6f, 0xaa, 0x97, 0x3e, 0xdf, 0xa7, 0xde, 0xe3, 0xc5, 0xaf, 0xd3, 0xa0, 0x5a, 0x30, 0x0d, - 0xe3, 0x5e, 0x1d, 0xdd, 0xf9, 0x20, 0x4f, 0x64, 0xa9, 0x26, 0x74, 0x97, 0xf2, 0x2d, 0x31, 0xac, - 0x8c, 0x20, 0x77, 0x09, 0xa9, 0x8f, 0xed, 0x23, 0x77, 0x7e, 0xd7, 0x34, 0x93, 0x84, 0xe7, 0xaa } }, - { { 0x96, 0x4e, 0xf2, 0x1e, 0x3a, 0xe5, 0x77, 0xbf, 0xa7, 0x1c, 0x3d, 0x66, 0x08, 0x06, 0xca, 0x55, - 0x43, 0x7a, 0x08, 0xf8, 0xff, 0x55, 0xb3, 0xbc, 0x9a, 0x83, 0x9a, 0x2e, 0xe6, 0x97, 0x14, 0x32, - 0x36, 0x57, 0x5c, 0xa4, 0x04, 0x78, 0xb1, 0x92, 0xf4, 0x23, 0x94, 0xe6, 0x2a, 0xef, 0xd4, 0xe7, - 0xc4, 0x02, 0x9f, 0xa9, 0x79, 0x77, 0x61, 0x90, 0xd6, 0xdb, 0x6e, 0x28, 0x7e, 0xc0, 0x1d, 0x70 }, - { 0xc5, 0xd1, 0x5c, 0x34, 0x15, 0xa9, 0x1e, 0x42, 0x2a, 0x1b, 0x0d, 0xf0, 0x56, 0x83, 0x10, 0xc3, - 0xc9, 0x21, 0xfd, 0x05, 0xfa, 0x51, 0x0e, 0x11, 0x28, 0xcc, 0x84, 0xac, 0x35, 0xb5, 0xd8, 0xc8, - 0x5c, 0x80, 0x11, 0x1f, 0x60, 0x1c, 0x72, 0x25, 0x82, 0x45, 0xb5, 0x4f, 0x66, 0x6b, 0x52, 0xb1, - 0xf7, 0x28, 0x0f, 0x80, 0x76, 0x44, 0xdc, 0x15, 0x70, 0x39, 0xe9, 0xaf, 0xc7, 0x0a, 0xa0, 0x43 }, - { 0xff, 0x20, 0x5e, 0x3b, 0x75, 0xe9, 0x38, 0x7c, 0xa3, 0x5c, 0x8b, 0x1a, 0xec, 0x17, 0x8d, 0xf0, - 0xef, 0xb3, 0x53, 0x9b, 0x16, 0xa9, 0x44, 0xf9, 0x34, 0x45, 0x13, 0x66, 0x80, 0x24, 0xdc, 0x22, - 0x0e, 0x51, 0x94, 0xed, 0xe6, 0x83, 0x36, 0x32, 0x63, 0x23, 0x1b, 0xf8, 0x78, 0xb4, 0x04, 0x7f, - 0x5a, 0x50, 0x54, 0x12, 0x19, 0x04, 0x61, 0xdd, 0x25, 0xf0, 0x48, 0x29, 0x04, 0xc1, 0x44, 0xe2 }, - { 0x46, 0x32, 0x2d, 0xc7, 0xbc, 0x05, 0x2a, 0xd3, 0xb5, 0xce, 0x7d, 0x47, 0x5e, 0xfc, 0x90, 0x38, - 0xef, 0xfa, 0x6f, 0x42, 0xf0, 0x66, 0x05, 0x89, 0x7c, 0x9a, 0xc1, 0xfd, 0xa2, 0xe8, 0xa7, 0x38, - 0x18, 0x6d, 0x7f, 0x9e, 0xfb, 0xbd, 0x06, 0x0c, 0x70, 0xd7, 0x29, 0x10, 0x88, 0x04, 0x9f, 0x24, - 0x28, 0x9d, 0xc7, 0x84, 0xdf, 0xb6, 0xec, 0xb2, 0xc7, 0x1b, 0xd1, 0xc1, 0x9d, 0x56, 0xb0, 0x83 }, - { 0xda, 0xd7, 0x34, 0xee, 0x62, 0x13, 0x8f, 0x47, 0xad, 0xb4, 0x9c, 0x98, 0xe4, 0xc5, 0xb3, 0x29, - 0x31, 0x11, 0x64, 0xad, 0xf5, 0x0b, 0x60, 0xe1, 0x0e, 0x18, 0x28, 0x30, 0x3c, 0xa2, 0xe3, 0x29, - 0x89, 0x0a, 0x7e, 0x18, 0xba, 0x30, 0x9e, 0x7d, 0x53, 0xf1, 0x82, 0xd5, 0x27, 0xe5, 0xf3, 0xab, - 0x15, 0xcd, 0x62, 0x7e, 0xdf, 0xf0, 0x0e, 0x42, 0xfa, 0x6b, 0x7b, 0x54, 0xd2, 0x74, 0x19, 0x8f }, - { 0x29, 0x4d, 0x28, 0x80, 0x62, 0xb5, 0x77, 0xbb, 0x69, 0x70, 0xb0, 0xb7, 0x10, 0x2e, 0xed, 0xfc, - 0x13, 0x34, 0x93, 0x7f, 0xd8, 0xfc, 0xb5, 0x7b, 0xfe, 0x34, 0x0a, 0xa3, 0x95, 0x5b, 0xb1, 0xa7, - 0xc6, 0xab, 0x82, 0x79, 0x25, 0x23, 0x94, 0x12, 0xa4, 0x34, 0xec, 0x23, 0xca, 0xcb, 0xd0, 0xa3, - 0xf9, 0x31, 0x32, 0xce, 0x50, 0x31, 0x73, 0x23, 0x98, 0x94, 0xe3, 0x08, 0xd9, 0x1e, 0xc3, 0x0b, - 0x39, 0xe3, 0x3b, 0xf2, 0xe8, 0xb7, 0x26, 0x28, 0x9d, 0xb3, 0x12, 0x8d, 0x16, 0xca, 0x89, 0x26, - 0xa9, 0x1c, 0xa3, 0x1f, 0x36, 0x10, 0x60, 0x6a, 0x29, 0x85, 0xe7, 0x2c, 0xee, 0xc1, 0xb6, 0xae }, - { 0x68, 0xed, 0x3c, 0x64, 0xe6, 0x87, 0xf0, 0x14, 0x64, 0xfc, 0x38, 0x3a, 0x0f, 0xd9, 0x7a, 0x5b, - 0x52, 0x32, 0x10, 0xca, 0xc6, 0x83, 0x0b, 0xae, 0x17, 0x0e, 0xfe, 0x77, 0xe0, 0xe7, 0x83, 0xa1, - 0x2c, 0x78, 0x62, 0x9c, 0x79, 0x08, 0x2b, 0xd4, 0x85, 0x72, 0x27, 0x8d, 0x97, 0x78, 0x62, 0x33, - 0x34, 0xeb, 0x5c, 0xde, 0x5d, 0xaa, 0x4d, 0xfa, 0xd1, 0x67, 0xa4, 0xea, 0x45, 0xad, 0xf9, 0x06, - 0x39, 0xe3, 0x3b, 0xf2, 0xe8, 0xb7, 0x26, 0x28, 0x9d, 0xb3, 0x12, 0x8d, 0x16, 0xca, 0x89, 0x26, - 0xa9, 0x1c, 0xa3, 0x1f, 0x36, 0x10, 0x60, 0x6a, 0x29, 0x85, 0xe7, 0x2c, 0xee, 0xc1, 0xb6, 0xae } }, - { { 0xd9, 0x64, 0xb2, 0xe1, 0x9f, 0x0a, 0x35, 0xfc, 0x9f, 0xc3, 0xa5, 0x2a, 0xa3, 0x84, 0xb4, 0xf3, - 0x23, 0xc4, 0xf3, 0x5a, 0x9d, 0xf8, 0x7f, 0x35, 0xa9, 0xf5, 0x5b, 0x68, 0xfc, 0x19, 0x69, 0x63, - 0x6a, 0x13, 0x19, 0x32, 0xcc, 0x9d, 0x0c, 0x3c, 0x7d, 0xdd, 0x85, 0x16, 0xa8, 0xd9, 0x2b, 0x75, - 0x08, 0x4b, 0x9a, 0xa5, 0x6e, 0xf3, 0xe9, 0xeb, 0xed, 0x5d, 0x2e, 0xfd, 0x2e, 0x0c, 0x60, 0xa2 }, - { 0x0f, 0xf6, 0x8c, 0x3f, 0x6e, 0xee, 0x56, 0x4f, 0x43, 0x6f, 0x54, 0xbd, 0x7a, 0xe4, 0xbe, 0xa8, - 0x77, 0x05, 0x99, 0xe7, 0x9e, 0x59, 0x22, 0x85, 0x9b, 0xc6, 0xe4, 0x2a, 0x61, 0x9c, 0x19, 0xb1, - 0x5a, 0xeb, 0x7a, 0xf8, 0x41, 0x4e, 0xe5, 0x2a, 0xd0, 0xf7, 0x44, 0xf0, 0x16, 0xea, 0x0c, 0x04, - 0x19, 0x6c, 0xb6, 0x30, 0x3c, 0x6e, 0x2d, 0x79, 0x9a, 0x8f, 0x08, 0x90, 0x11, 0xf1, 0xc0, 0x4d }, - { 0x68, 0xe7, 0x1d, 0x40, 0xf1, 0x07, 0xc0, 0xc6, 0xb2, 0x87, 0x9c, 0xa2, 0x19, 0x43, 0x7a, 0xdf, - 0x8a, 0x5a, 0x0f, 0xe2, 0x24, 0x97, 0xa0, 0x38, 0x79, 0x20, 0x38, 0xa9, 0x9c, 0x77, 0xc4, 0x37, - 0xa6, 0x02, 0xe0, 0x93, 0x47, 0xa4, 0x55, 0x21, 0xc2, 0x69, 0xbe, 0x09, 0x05, 0xaa, 0x87, 0x28, - 0xf1, 0x95, 0x2f, 0xdb, 0xf0, 0xbf, 0xd2, 0x9e, 0x5e, 0x3a, 0xfa, 0xc6, 0x2f, 0x13, 0x09, 0xaf }, - { 0xe1, 0x9e, 0xc8, 0x4f, 0xc9, 0xdd, 0x61, 0x60, 0x94, 0xbc, 0xd3, 0xd6, 0xde, 0x11, 0x6e, 0xec, - 0x84, 0xc4, 0xdd, 0xbe, 0x20, 0x46, 0x6c, 0xef, 0xf6, 0x9d, 0x37, 0x07, 0x53, 0x72, 0x57, 0xf9, - 0x02, 0xb5, 0x64, 0x1f, 0xe2, 0x56, 0xa4, 0x38, 0x6d, 0xa4, 0xed, 0x23, 0x9e, 0xa3, 0xf4, 0x4d, - 0x77, 0x52, 0xdc, 0x8c, 0x51, 0xfc, 0x88, 0x18, 0xbc, 0x83, 0x2a, 0xac, 0xc1, 0x1d, 0x3d, 0x59 }, - { 0x08, 0x4f, 0x78, 0x21, 0xfd, 0x4b, 0x85, 0x86, 0x4e, 0x25, 0xdd, 0x47, 0x60, 0x7f, 0x7e, 0xc6, - 0xd3, 0xa1, 0xab, 0x91, 0x3f, 0xeb, 0xf6, 0x40, 0x7e, 0x1b, 0xbd, 0x99, 0x9c, 0x7c, 0x2f, 0x4f, - 0xca, 0x68, 0xa5, 0xf6, 0x8c, 0x1e, 0xcb, 0xb8, 0x76, 0xe2, 0x87, 0x5b, 0x49, 0x68, 0x97, 0x2c, - 0x21, 0x5c, 0x7c, 0x93, 0x79, 0x9a, 0x95, 0xa1, 0x3a, 0x49, 0xc9, 0x6d, 0x34, 0x6b, 0xa1, 0x98 }, - { 0xb9, 0x88, 0x25, 0x9a, 0x3b, 0x53, 0x56, 0xa1, 0x48, 0x0f, 0xf0, 0x92, 0xde, 0x4e, 0x3e, 0x3a, - 0xcf, 0x02, 0xdc, 0x5c, 0xc2, 0xc3, 0x78, 0xad, 0x8a, 0x0c, 0x3c, 0xc7, 0xdd, 0xdd, 0x71, 0x6e, - 0x3f, 0xd9, 0x3a, 0x57, 0x2a, 0x19, 0xa5, 0x3b, 0x5c, 0x46, 0x7b, 0xc9, 0x0f, 0x16, 0xb3, 0x58, - 0xa6, 0x85, 0xfa, 0x91, 0x2c, 0x9a, 0x9c, 0x12, 0xb6, 0xd6, 0x7d, 0x9a, 0xf0, 0x9d, 0xe9, 0x02, - 0xad, 0x12, 0x87, 0xda, 0x85, 0x58, 0x6b, 0xff, 0x68, 0x96, 0x05, 0x33, 0xba, 0x7f, 0x08, 0xf9, - 0xa9, 0xa2, 0xa9, 0x46, 0x43, 0xe5, 0x03, 0x12, 0xe4, 0xbe, 0x74, 0xaa, 0x46, 0x4e, 0x51, 0xb3 }, - { 0x61, 0x70, 0x17, 0x50, 0x26, 0xfa, 0x51, 0x83, 0xe0, 0xca, 0xa9, 0xb1, 0xc3, 0xc4, 0x83, 0xa9, - 0xb6, 0x43, 0x6b, 0x7a, 0x5b, 0xe4, 0x21, 0x5a, 0x6b, 0xd4, 0x34, 0xf8, 0xee, 0x95, 0x86, 0x2d, - 0x03, 0xbf, 0xca, 0xd0, 0xfa, 0x68, 0x53, 0xb2, 0x97, 0x50, 0xad, 0x89, 0x2f, 0x99, 0x63, 0x67, - 0x18, 0x57, 0x1f, 0x57, 0x41, 0xbc, 0xb7, 0xc0, 0x18, 0xe7, 0xb6, 0xf3, 0x0f, 0xc4, 0x49, 0x0d, - 0xad, 0x12, 0x87, 0xda, 0x85, 0x58, 0x6b, 0xff, 0x68, 0x96, 0x05, 0x33, 0xba, 0x7f, 0x08, 0xf9, - 0xa9, 0xa2, 0xa9, 0x46, 0x43, 0xe5, 0x03, 0x12, 0xe4, 0xbe, 0x74, 0xaa, 0x46, 0x4e, 0x51, 0xb3 } }, - { { 0xc5, 0xdf, 0x86, 0x8f, 0xf1, 0xa7, 0xad, 0x57, 0xfd, 0xb4, 0x53, 0xc3, 0x92, 0x1b, 0x9e, 0x2e, - 0xdd, 0xc5, 0xa4, 0x3b, 0x72, 0xa6, 0x9b, 0x4a, 0x15, 0xca, 0x35, 0xed, 0x3c, 0x1a, 0x3b, 0x38, - 0x36, 0xd6, 0xf2, 0x03, 0xb6, 0x97, 0x1f, 0xcb, 0x40, 0x5d, 0x3c, 0x25, 0xfc, 0xe7, 0xff, 0xc6, - 0xbe, 0x61, 0xe1, 0x98, 0x31, 0x13, 0xa9, 0xbe, 0x05, 0x86, 0xfe, 0x5c, 0xf6, 0xcc, 0xaa, 0xf5 }, - { 0xd2, 0x57, 0x19, 0x98, 0xf8, 0x74, 0x90, 0xb7, 0x69, 0x6e, 0xdd, 0x44, 0xf1, 0x8b, 0xb1, 0x9c, - 0xfd, 0x5b, 0x6b, 0xc0, 0x45, 0xf2, 0x49, 0xa5, 0x4b, 0xff, 0x8b, 0x7f, 0x87, 0xe3, 0xf9, 0x71, - 0xab, 0xfa, 0xc8, 0x17, 0xed, 0xeb, 0x19, 0xc6, 0x3c, 0xee, 0x78, 0xba, 0x89, 0x97, 0x49, 0x85, - 0x39, 0x68, 0x29, 0x88, 0x0b, 0x1c, 0xd1, 0x42, 0x8b, 0xe8, 0x1a, 0x3b, 0xeb, 0x4d, 0xef, 0x3b }, - { 0xea, 0xfb, 0xec, 0x27, 0xc3, 0x92, 0xc3, 0x68, 0x0d, 0x3c, 0x5b, 0x20, 0x20, 0x9c, 0x96, 0xa7, - 0x39, 0xfa, 0x80, 0x91, 0xef, 0x86, 0x7d, 0xa8, 0x87, 0xf6, 0xef, 0x14, 0x01, 0x46, 0xf0, 0x68, - 0x0a, 0x8b, 0xae, 0x83, 0x91, 0x7e, 0xa0, 0x14, 0x14, 0xde, 0xf9, 0xa8, 0xfd, 0x67, 0x57, 0x17, - 0x20, 0x46, 0x43, 0x49, 0x07, 0xf0, 0x3e, 0xc8, 0xbe, 0x66, 0xaf, 0x58, 0x3a, 0xbd, 0xd8, 0x00 }, - { 0x35, 0xf5, 0xc8, 0x2c, 0x0e, 0x4b, 0x56, 0xe0, 0xef, 0x08, 0x34, 0x38, 0x57, 0xe9, 0xde, 0xdb, - 0x1d, 0xe1, 0x28, 0x05, 0x01, 0xed, 0x62, 0x3d, 0xa9, 0x6e, 0xea, 0x5b, 0x95, 0x09, 0xe0, 0x04, - 0x46, 0xff, 0xdc, 0x34, 0xf6, 0xf7, 0x63, 0xb1, 0x76, 0xb8, 0x3c, 0x03, 0xef, 0x36, 0x0f, 0x82, - 0x1b, 0x5b, 0x6f, 0xe2, 0x86, 0xd9, 0x10, 0x01, 0xe6, 0x73, 0x75, 0x0d, 0x50, 0x30, 0x11, 0x68 }, - { 0x27, 0xb6, 0x3b, 0x78, 0x79, 0xf3, 0x22, 0x78, 0x8f, 0x0c, 0x14, 0x8b, 0x3f, 0x68, 0xc2, 0xab, - 0x9f, 0x9f, 0x05, 0x70, 0x7e, 0xee, 0x4b, 0x1b, 0x6b, 0xfc, 0x04, 0x72, 0xca, 0xf1, 0x9a, 0xba, - 0xe3, 0x65, 0x9d, 0xdb, 0x01, 0x33, 0xc5, 0xdb, 0xf6, 0x87, 0xe4, 0x73, 0x5a, 0x0f, 0x94, 0xa9, - 0x2e, 0xfe, 0x8f, 0x3e, 0xd1, 0x0a, 0x6d, 0xa1, 0x21, 0x2a, 0x92, 0x8c, 0x4b, 0x43, 0x13, 0x2f }, - { 0xa3, 0xa8, 0x3b, 0xb4, 0x4f, 0x8a, 0xac, 0xab, 0x8a, 0x4c, 0x39, 0x7e, 0xb8, 0x2f, 0xb1, 0x01, - 0x2e, 0xbe, 0x0e, 0x7d, 0x28, 0x8a, 0x18, 0x4a, 0xda, 0x58, 0x1a, 0xfb, 0x95, 0x97, 0xf3, 0x63, - 0x58, 0xbe, 0x8c, 0x30, 0x13, 0x9b, 0xba, 0x9f, 0x4e, 0xac, 0x8d, 0x95, 0xf2, 0x07, 0xbb, 0x85, - 0xa1, 0x41, 0x4c, 0x33, 0xe3, 0x58, 0x8e, 0x5c, 0xa1, 0x05, 0x45, 0xab, 0x5c, 0x0c, 0xe4, 0x02, - 0xc3, 0xa0, 0xa0, 0x72, 0xdb, 0x9a, 0x9d, 0xbf, 0x13, 0x29, 0x94, 0x70, 0x8b, 0xe4, 0xe8, 0xdb, - 0x0e, 0x0b, 0xd0, 0xa0, 0x25, 0xad, 0x71, 0xa0, 0x27, 0x9c, 0x1d, 0x77, 0xb0, 0x98, 0xa8, 0x03 }, - { 0xe1, 0x84, 0xa5, 0xea, 0xa5, 0xd8, 0x1b, 0x29, 0xce, 0xd7, 0xa3, 0x72, 0xa7, 0xc9, 0xa5, 0xea, - 0xf1, 0x02, 0xf3, 0x0c, 0xb0, 0x65, 0x12, 0xbc, 0xa4, 0xf2, 0x5d, 0x69, 0x00, 0xa4, 0x7f, 0x5a, - 0x52, 0x09, 0xb6, 0x7b, 0x30, 0xf2, 0x99, 0x03, 0x39, 0x9d, 0xee, 0x6f, 0xb5, 0xf7, 0x9e, 0x7a, - 0x97, 0x8b, 0x81, 0x03, 0x8c, 0xdd, 0x35, 0xfc, 0x1f, 0x0a, 0xc6, 0xa4, 0x60, 0x7b, 0xc8, 0x0a, - 0xc3, 0xa0, 0xa0, 0x72, 0xdb, 0x9a, 0x9d, 0xbf, 0x13, 0x29, 0x94, 0x70, 0x8b, 0xe4, 0xe8, 0xdb, - 0x0e, 0x0b, 0xd0, 0xa0, 0x25, 0xad, 0x71, 0xa0, 0x27, 0x9c, 0x1d, 0x77, 0xb0, 0x98, 0xa8, 0x03 } }, - { { 0x67, 0xe9, 0x62, 0x76, 0x3a, 0x90, 0x9b, 0x6b, 0x19, 0x1d, 0x65, 0xb2, 0x2a, 0x2f, 0xf7, 0x50, - 0xaa, 0x54, 0xa5, 0xbb, 0x53, 0xb5, 0xf9, 0xee, 0x0c, 0x04, 0x3a, 0x3c, 0x29, 0x4b, 0x66, 0x3e, - 0x7b, 0xb6, 0xaa, 0xd2, 0x10, 0x89, 0xcc, 0x89, 0x2c, 0x47, 0xbe, 0x23, 0xd6, 0x52, 0x81, 0x5d, - 0xc8, 0xbc, 0x49, 0xd6, 0x6a, 0xcd, 0x62, 0x99, 0x30, 0xff, 0x16, 0xa5, 0x50, 0x44, 0xd8, 0x7a }, - { 0xd6, 0xcd, 0xfe, 0xd4, 0x44, 0x4a, 0x9e, 0x90, 0x44, 0x73, 0x8a, 0xff, 0xbb, 0x82, 0x08, 0xb6, - 0x7f, 0xf2, 0x87, 0xcb, 0xa5, 0x0b, 0x56, 0xd3, 0x9e, 0x91, 0xb8, 0x52, 0x6b, 0x25, 0xa6, 0x5d, - 0x50, 0xaf, 0x9b, 0xd5, 0xfb, 0x9f, 0x7e, 0x2d, 0x57, 0xdf, 0x30, 0x78, 0x8d, 0x1a, 0xc3, 0xac, - 0x9c, 0x5a, 0xbf, 0xab, 0x5a, 0x0d, 0xc9, 0xb6, 0x4b, 0x18, 0xd4, 0xe7, 0x55, 0x40, 0xde, 0x7e }, - { 0xc2, 0xa9, 0x7e, 0x5c, 0x26, 0xf4, 0x7d, 0xce, 0x9e, 0x73, 0xae, 0x50, 0xde, 0xe7, 0xa6, 0xf9, - 0x8b, 0x57, 0xf9, 0x7a, 0x4c, 0x38, 0x82, 0xf6, 0x30, 0x80, 0x12, 0xf7, 0xf6, 0x66, 0x80, 0x46, - 0x4d, 0x41, 0x53, 0x63, 0xd9, 0x65, 0x90, 0xe7, 0xee, 0x24, 0x07, 0xb0, 0x4f, 0xeb, 0x3e, 0x8e, - 0x83, 0x21, 0xa3, 0x40, 0x03, 0xc0, 0x64, 0x52, 0xc6, 0xb2, 0x12, 0x9d, 0x8d, 0x86, 0xdd, 0x19 }, - { 0xe2, 0xd5, 0x49, 0x5e, 0x2a, 0x6e, 0x4e, 0xd9, 0x31, 0x26, 0x53, 0x13, 0x98, 0x5e, 0x2f, 0x23, - 0xea, 0xa0, 0x30, 0xee, 0xef, 0x62, 0x2b, 0xdc, 0x93, 0x65, 0x90, 0xad, 0x9a, 0xf1, 0x74, 0x12, - 0xf5, 0x24, 0x33, 0xcc, 0xc3, 0xda, 0x42, 0x54, 0xa6, 0x6c, 0x86, 0x99, 0xb9, 0xb5, 0xf7, 0x07, - 0x90, 0xd8, 0x85, 0x7f, 0x69, 0xfb, 0x19, 0x2a, 0x2c, 0xc0, 0x11, 0x81, 0x64, 0x37, 0x38, 0x07 }, - { 0xc7, 0xb3, 0xf5, 0xe4, 0x4b, 0x55, 0xcf, 0xd8, 0x2b, 0x72, 0xde, 0x62, 0xfc, 0x66, 0xea, 0x82, - 0xee, 0x2e, 0xe5, 0x4f, 0x66, 0xba, 0x19, 0x63, 0x01, 0x0b, 0x2d, 0x89, 0xb4, 0xaa, 0x76, 0xb3, - 0x7e, 0xc5, 0xbe, 0xdd, 0x57, 0x90, 0x5e, 0xff, 0x5b, 0x9a, 0x71, 0xe1, 0x47, 0xf9, 0xec, 0xe5, - 0xf0, 0x19, 0x89, 0x17, 0x65, 0x3e, 0x56, 0x4a, 0x98, 0xb2, 0x3c, 0x3b, 0xf0, 0x14, 0x13, 0x1b }, - { 0xc0, 0x72, 0x26, 0x96, 0x6b, 0xf5, 0x50, 0xa1, 0x65, 0xcd, 0xfe, 0x92, 0xa5, 0x5a, 0xb3, 0x56, - 0x27, 0x5b, 0x2f, 0x4a, 0x8f, 0x67, 0xaa, 0xf4, 0xa1, 0x6e, 0x3c, 0x66, 0xcc, 0xb7, 0x71, 0x70, - 0xff, 0x70, 0x1f, 0x9e, 0x09, 0xae, 0x31, 0xcb, 0x2a, 0xd5, 0x8a, 0x38, 0xa9, 0xaf, 0xbc, 0x94, - 0xa2, 0xa8, 0xe9, 0x77, 0x1c, 0xc3, 0xfa, 0xd1, 0x45, 0xd2, 0xe2, 0xff, 0x7d, 0xf2, 0x44, 0x00, - 0xa0, 0xc3, 0xc1, 0xdd, 0xa0, 0x4c, 0xfb, 0xed, 0x1a, 0xbd, 0x0c, 0x05, 0x3b, 0xa9, 0xc8, 0x98, - 0xb0, 0x7d, 0x6a, 0x77, 0xcb, 0x08, 0x70, 0x64, 0x31, 0x9d, 0x9c, 0x7b, 0x40, 0x9e, 0xbb, 0xf4 }, - { 0xbc, 0x88, 0x9d, 0x36, 0xae, 0xbc, 0x92, 0x47, 0x63, 0x85, 0x41, 0xe3, 0x1e, 0x1c, 0x39, 0xf5, - 0xd3, 0xc2, 0x0a, 0x7d, 0x18, 0x7a, 0x8f, 0xd3, 0x0c, 0x37, 0x50, 0x28, 0x35, 0x93, 0x77, 0x4b, - 0xcb, 0xba, 0x35, 0x4e, 0x94, 0x48, 0xe4, 0x0c, 0xa7, 0x36, 0x4f, 0x74, 0x2b, 0xf9, 0xb5, 0xb5, - 0xeb, 0x91, 0x50, 0x3c, 0x67, 0x9b, 0x4d, 0x25, 0xd4, 0x0e, 0x0d, 0xb9, 0x5b, 0x77, 0xf3, 0x0e, - 0xa0, 0xc3, 0xc1, 0xdd, 0xa0, 0x4c, 0xfb, 0xed, 0x1a, 0xbd, 0x0c, 0x05, 0x3b, 0xa9, 0xc8, 0x98, - 0xb0, 0x7d, 0x6a, 0x77, 0xcb, 0x08, 0x70, 0x64, 0x31, 0x9d, 0x9c, 0x7b, 0x40, 0x9e, 0xbb, 0xf4 } }, - { { 0x44, 0xdd, 0x62, 0x9e, 0x0f, 0xee, 0x20, 0x11, 0x37, 0xfc, 0xd0, 0x5c, 0xe4, 0xe1, 0x0a, 0xb8, - 0xc2, 0xe0, 0x9c, 0x2c, 0x3e, 0x1b, 0x31, 0x1c, 0xdb, 0xa3, 0x84, 0x9a, 0xb7, 0x4e, 0x40, 0x74, - 0x21, 0xfd, 0xfc, 0x65, 0xbd, 0x38, 0x8a, 0x55, 0x6f, 0x1e, 0xc3, 0x14, 0xfc, 0x66, 0x04, 0x7b, - 0xc4, 0x61, 0xb0, 0xcb, 0xfa, 0xdd, 0x50, 0x45, 0x4b, 0x2e, 0xf0, 0x6d, 0x0f, 0x26, 0x6d, 0xbf }, - { 0xe6, 0xbc, 0x35, 0x73, 0xb3, 0x11, 0x38, 0xc6, 0x31, 0x82, 0x96, 0x80, 0x1d, 0xa9, 0xd9, 0x17, - 0x85, 0x4e, 0xad, 0x0f, 0x5c, 0xb7, 0xe8, 0x78, 0x62, 0x2f, 0x3c, 0x10, 0x0e, 0xdc, 0xf2, 0x7e, - 0xf5, 0x02, 0x6d, 0x1a, 0x50, 0xc2, 0x50, 0x7d, 0x0d, 0x14, 0x77, 0x77, 0xfc, 0xbe, 0x23, 0x02, - 0x81, 0x0a, 0xdc, 0xa3, 0x16, 0xfd, 0xab, 0xb9, 0x7c, 0xb6, 0x7e, 0x8a, 0xde, 0x1f, 0x22, 0xeb }, - { 0xab, 0xf3, 0xea, 0x63, 0xc0, 0x25, 0xa2, 0xc7, 0x6a, 0xfe, 0x91, 0x4a, 0x0a, 0x91, 0xdd, 0x6d, - 0x6f, 0x8c, 0xf9, 0xa8, 0x1c, 0x9f, 0xb5, 0xe5, 0xd2, 0xac, 0xe6, 0x51, 0x9a, 0xd3, 0x87, 0x17, - 0x82, 0x12, 0x0a, 0x58, 0x99, 0x7f, 0x81, 0x2d, 0x8d, 0x27, 0x2d, 0x1b, 0xb0, 0x02, 0x7e, 0x0d, - 0xd6, 0x18, 0x89, 0x5e, 0x0c, 0x2b, 0x57, 0xa6, 0x56, 0x35, 0xff, 0x71, 0x4e, 0xb0, 0x49, 0x38 }, - { 0x36, 0xdf, 0x1d, 0x1c, 0xf6, 0xa7, 0x4d, 0x87, 0x7e, 0x2c, 0x3f, 0xb4, 0xda, 0xd7, 0x80, 0x71, - 0x0b, 0xf3, 0x2a, 0x47, 0x20, 0xe6, 0x9a, 0x3d, 0x17, 0x9a, 0x97, 0xc9, 0x4e, 0x53, 0xa6, 0xe2, - 0x23, 0xea, 0x94, 0x4d, 0xf9, 0xeb, 0x2c, 0x03, 0x2c, 0x88, 0xa2, 0xe6, 0xc5, 0x94, 0xa5, 0x6f, - 0xc3, 0x98, 0xa9, 0x8b, 0xa7, 0x41, 0x7d, 0xd3, 0x82, 0x01, 0x13, 0xb6, 0x0f, 0x39, 0x1e, 0xd2 }, - { 0x08, 0x28, 0xc3, 0x1c, 0xec, 0x21, 0x3a, 0xb4, 0x4c, 0xb1, 0xfa, 0xb9, 0x0c, 0xfe, 0xc2, 0x50, - 0xc5, 0x99, 0x62, 0xa0, 0x11, 0x74, 0xcf, 0x05, 0x1e, 0x2b, 0xdf, 0x6d, 0x22, 0x8e, 0x6e, 0x55, - 0x19, 0x21, 0x9c, 0xa1, 0x98, 0x56, 0x45, 0x90, 0x40, 0x3a, 0x8e, 0xad, 0x76, 0x4d, 0xd3, 0x95, - 0x27, 0x67, 0x4e, 0x02, 0x16, 0xc3, 0xfe, 0x5a, 0x79, 0x4e, 0x2d, 0x6f, 0xd0, 0xe4, 0x4f, 0x62 }, - { 0x40, 0x14, 0xe1, 0x88, 0x3d, 0xcc, 0x51, 0xcb, 0x98, 0x86, 0x06, 0x4d, 0xe4, 0x52, 0x71, 0xe2, - 0x2e, 0x2b, 0x80, 0xfd, 0x81, 0x65, 0xaf, 0x93, 0x31, 0x87, 0xe0, 0xff, 0x31, 0xab, 0xff, 0x53, - 0x0e, 0x2d, 0xb1, 0x47, 0xe6, 0x44, 0xb7, 0x29, 0xab, 0x0f, 0x51, 0x3a, 0x53, 0x84, 0x36, 0x58, - 0x8c, 0x5f, 0x7b, 0x65, 0x6a, 0xb7, 0x6f, 0xdc, 0xad, 0xc1, 0xa3, 0xe4, 0x21, 0xfc, 0x22, 0x0e, - 0xc1, 0x10, 0xd1, 0x7d, 0x9f, 0xd3, 0x1e, 0x33, 0xb4, 0xca, 0xb9, 0xff, 0xd8, 0x27, 0xb8, 0xca, - 0xde, 0x49, 0x6f, 0xdc, 0xf0, 0xe8, 0x70, 0x36, 0xdb, 0x90, 0x00, 0x07, 0x9e, 0x77, 0x39, 0xfe }, - { 0xc9, 0x93, 0x4b, 0xe6, 0x47, 0x7e, 0x1d, 0x86, 0x15, 0x46, 0xe8, 0x27, 0xf5, 0x84, 0x67, 0x4e, - 0x42, 0xe3, 0x2b, 0x8a, 0x4e, 0x90, 0x7b, 0x87, 0xcc, 0xdf, 0xaa, 0x04, 0x06, 0x05, 0xe6, 0x72, - 0xff, 0x6f, 0x44, 0x1b, 0x08, 0xad, 0x79, 0x3e, 0xb7, 0xdd, 0xd7, 0x2c, 0x73, 0xf0, 0xf0, 0xc4, - 0x6e, 0xb7, 0x37, 0xe1, 0x02, 0xf5, 0x42, 0xe7, 0xef, 0xa1, 0xdd, 0x50, 0x9a, 0xc5, 0x8d, 0x00, - 0xc1, 0x10, 0xd1, 0x7d, 0x9f, 0xd3, 0x1e, 0x33, 0xb4, 0xca, 0xb9, 0xff, 0xd8, 0x27, 0xb8, 0xca, - 0xde, 0x49, 0x6f, 0xdc, 0xf0, 0xe8, 0x70, 0x36, 0xdb, 0x90, 0x00, 0x07, 0x9e, 0x77, 0x39, 0xfe } }, - { { 0x3e, 0x0c, 0x21, 0xc4, 0x3d, 0x64, 0x61, 0xc1, 0x9d, 0xa1, 0x83, 0x10, 0x74, 0x1d, 0x56, 0x12, - 0xaf, 0x29, 0x5c, 0x6c, 0x12, 0x48, 0x0a, 0xc7, 0xe5, 0x12, 0xb6, 0x42, 0x6b, 0x54, 0xf4, 0x42, - 0x0c, 0x43, 0x42, 0x2e, 0x78, 0xc2, 0xe7, 0x26, 0x09, 0x41, 0x4a, 0x2f, 0xa1, 0xb0, 0x1f, 0xcd, - 0x63, 0x76, 0x1e, 0xa1, 0x6f, 0xf6, 0xe2, 0xc2, 0x08, 0x89, 0x0d, 0x28, 0xbf, 0x1b, 0x56, 0x5b }, - { 0x3e, 0x2e, 0xf2, 0xcc, 0x81, 0xca, 0xa7, 0x5d, 0x01, 0xd2, 0x82, 0xfd, 0x45, 0xee, 0xc0, 0xf5, - 0x49, 0x3b, 0xe2, 0xa4, 0x2a, 0x4d, 0x5f, 0x40, 0x0d, 0xbc, 0xb9, 0x3d, 0x6e, 0xda, 0xe2, 0x86, - 0xe1, 0x23, 0x8b, 0x5f, 0x0d, 0xa2, 0x35, 0x15, 0x1d, 0x22, 0x23, 0xa5, 0x69, 0x56, 0x34, 0x78, - 0xb3, 0xb3, 0x55, 0xef, 0x63, 0x8a, 0x17, 0x63, 0xda, 0xf0, 0x64, 0x99, 0x8a, 0x8a, 0xba, 0xd6 }, - { 0x68, 0x79, 0x36, 0xa7, 0x6b, 0xe3, 0x76, 0x1c, 0xe3, 0x38, 0x0b, 0xa3, 0x91, 0xb6, 0xb0, 0x82, - 0x37, 0xfa, 0x52, 0x74, 0xf1, 0xb5, 0xd5, 0xd9, 0x07, 0x06, 0x9e, 0xda, 0x87, 0x6b, 0x0f, 0x24, - 0x4f, 0xbe, 0xc9, 0xff, 0x03, 0x41, 0xaf, 0x77, 0x68, 0xed, 0xe7, 0x71, 0xba, 0x2d, 0xde, 0x27, - 0xa1, 0xbf, 0xa8, 0xa7, 0x30, 0x7c, 0xcb, 0x79, 0x72, 0x89, 0x1a, 0xdc, 0xc1, 0xe4, 0xb2, 0x9d }, - { 0x94, 0xa3, 0x11, 0xf4, 0x44, 0x80, 0xd0, 0xa3, 0x47, 0x93, 0x36, 0xe2, 0xbd, 0x04, 0xe4, 0x74, - 0x3d, 0x00, 0x60, 0xad, 0xd0, 0x2d, 0x86, 0x66, 0xa1, 0x72, 0x1a, 0xb9, 0x1c, 0x14, 0xa2, 0x9b, - 0x4b, 0x04, 0x7d, 0x5b, 0xcd, 0xf8, 0x01, 0x33, 0xde, 0x34, 0x10, 0x29, 0xc4, 0x72, 0x56, 0xff, - 0x11, 0xcd, 0xd8, 0x61, 0x2c, 0xb6, 0xb7, 0xf4, 0x24, 0x8b, 0x44, 0xb4, 0xe7, 0x34, 0x50, 0xb8 }, - { 0x72, 0xf6, 0xd4, 0xa3, 0x24, 0xf9, 0xef, 0xf4, 0x55, 0x8d, 0x3c, 0x07, 0xca, 0x10, 0xdd, 0x54, - 0x87, 0x13, 0x32, 0x78, 0x5c, 0x64, 0x10, 0x08, 0x62, 0x7e, 0xf4, 0x34, 0x0f, 0x1c, 0xcd, 0xcc, - 0x3b, 0x42, 0xfe, 0x60, 0x41, 0x70, 0x2c, 0x6b, 0xd4, 0x6c, 0xf7, 0xb8, 0x24, 0xf6, 0xd7, 0x07, - 0xb3, 0x46, 0xb0, 0x7d, 0x14, 0x24, 0x9b, 0x72, 0x79, 0xf4, 0x23, 0x2a, 0xec, 0x02, 0xe7, 0x69 }, - { 0xe5, 0xbe, 0x84, 0xc3, 0x92, 0x47, 0x15, 0xd3, 0xac, 0x06, 0x44, 0x72, 0x41, 0xeb, 0xb6, 0x5a, - 0x17, 0x06, 0x90, 0xd9, 0x55, 0x3d, 0xe4, 0x87, 0x7d, 0x5a, 0x11, 0x9f, 0x02, 0x6d, 0xd3, 0x4e, - 0x71, 0xd1, 0x5e, 0x16, 0x9f, 0xb2, 0xc0, 0x7f, 0xcb, 0x78, 0x8b, 0x89, 0x11, 0xae, 0x43, 0xe8, - 0x85, 0xb7, 0xf9, 0xc8, 0x48, 0x5a, 0xb2, 0x96, 0xaf, 0x8f, 0xab, 0x71, 0x84, 0x9d, 0x40, 0x09, - 0x30, 0xd4, 0x32, 0x6e, 0xa2, 0x77, 0x97, 0x71, 0x37, 0xce, 0x22, 0x6b, 0xca, 0xc9, 0x79, 0xef, - 0xc0, 0xb2, 0xb4, 0x3d, 0x30, 0xbf, 0x77, 0xe9, 0xc3, 0x8d, 0xec, 0x15, 0x04, 0x08, 0xfa, 0x15 }, - { 0x4b, 0xf3, 0x7f, 0xb2, 0x78, 0x75, 0x45, 0xd4, 0xce, 0x5e, 0x3d, 0xaf, 0x92, 0x63, 0x3d, 0x90, - 0xc0, 0xa7, 0x23, 0x62, 0x7f, 0x37, 0x58, 0x8d, 0x12, 0xe0, 0xb8, 0x6c, 0x46, 0x38, 0xaa, 0xf7, - 0xe1, 0x03, 0x9e, 0x1f, 0x31, 0xf9, 0x5a, 0xa4, 0x59, 0x0d, 0xec, 0xc5, 0x1f, 0x17, 0x88, 0x25, - 0xcc, 0xed, 0x69, 0x2b, 0x91, 0x73, 0x6a, 0x3f, 0xcb, 0xe5, 0x9c, 0x1e, 0x26, 0x3e, 0xec, 0x0b, - 0x30, 0xd4, 0x32, 0x6e, 0xa2, 0x77, 0x97, 0x71, 0x37, 0xce, 0x22, 0x6b, 0xca, 0xc9, 0x79, 0xef, - 0xc0, 0xb2, 0xb4, 0x3d, 0x30, 0xbf, 0x77, 0xe9, 0xc3, 0x8d, 0xec, 0x15, 0x04, 0x08, 0xfa, 0x15 } }, - { { 0xc5, 0x1d, 0xcd, 0x70, 0xb2, 0x9e, 0x53, 0x29, 0x05, 0x78, 0x83, 0x5d, 0x56, 0x30, 0x89, 0xee, - 0x02, 0xd7, 0xac, 0x57, 0x0a, 0xd2, 0xa0, 0x9c, 0x96, 0x0c, 0xbf, 0xf2, 0x30, 0xbf, 0x1a, 0x2b, - 0xee, 0x0e, 0x9f, 0x1e, 0x1c, 0x65, 0x7d, 0xb5, 0x48, 0xad, 0x6f, 0x51, 0xa0, 0x91, 0x61, 0xe4, - 0xe6, 0x83, 0x9f, 0x58, 0x7c, 0x76, 0x2b, 0x52, 0x94, 0x87, 0x3c, 0x8d, 0x36, 0x4c, 0x37, 0x3c }, - { 0x59, 0x3b, 0x0d, 0x38, 0xab, 0x93, 0xca, 0xfb, 0x67, 0x44, 0x30, 0x96, 0xec, 0xbd, 0x00, 0x1d, - 0x93, 0xd0, 0xb3, 0x3d, 0x3c, 0xd4, 0x4e, 0x3d, 0xd8, 0x29, 0x93, 0xb2, 0xb3, 0x77, 0xfc, 0x57, - 0x31, 0x20, 0xe3, 0x90, 0x0d, 0xf4, 0x91, 0x2f, 0x8b, 0x43, 0xce, 0xfe, 0x99, 0x03, 0x03, 0xa2, - 0x90, 0x8d, 0xcf, 0xa8, 0xc0, 0x21, 0x00, 0xca, 0xcc, 0xcb, 0x4b, 0x2f, 0xa5, 0x39, 0xa8, 0x0b }, - { 0xca, 0xf6, 0xf9, 0xbb, 0x53, 0xcb, 0x97, 0x76, 0xb6, 0x9c, 0x2c, 0x18, 0x21, 0x43, 0x13, 0x48, - 0x13, 0xc9, 0x0e, 0xeb, 0x40, 0xea, 0xce, 0x1f, 0x3a, 0xe9, 0xd2, 0x9e, 0x29, 0xdb, 0xe2, 0x79, - 0xe2, 0x1a, 0x9f, 0x84, 0x9d, 0xe4, 0x55, 0x82, 0x17, 0xeb, 0x87, 0xf6, 0xc3, 0xef, 0xcd, 0x54, - 0x14, 0xee, 0xc8, 0x5b, 0xd7, 0x67, 0x05, 0xe2, 0x34, 0xa2, 0x7e, 0x81, 0x83, 0x21, 0x7a, 0x02 }, - { 0xc5, 0x03, 0xd9, 0x75, 0xdf, 0x17, 0x15, 0xe3, 0x5b, 0x7b, 0x4f, 0x66, 0x9c, 0x15, 0x4e, 0x01, - 0xdf, 0x3d, 0x16, 0xb6, 0x52, 0xcc, 0xcf, 0x28, 0x40, 0xdb, 0x20, 0xee, 0x8b, 0x69, 0xb1, 0x2b, - 0xc0, 0x6e, 0xe4, 0xd2, 0xf5, 0xd1, 0x49, 0x3f, 0xf3, 0x0a, 0x12, 0xcd, 0x13, 0xbd, 0x9d, 0x3d, - 0x5b, 0x28, 0x5c, 0xb0, 0x0d, 0x0e, 0xb6, 0xed, 0xec, 0x65, 0xeb, 0x25, 0x28, 0x2e, 0x65, 0x2f }, - { 0xed, 0xa7, 0x05, 0xc1, 0xa6, 0x81, 0xf2, 0x7a, 0x69, 0x68, 0x17, 0x8e, 0xf7, 0xc9, 0x14, 0x80, - 0x9f, 0x81, 0xfe, 0x16, 0xfd, 0x81, 0x93, 0xb4, 0x0b, 0x05, 0x5b, 0x4e, 0xef, 0x6e, 0x7a, 0x67, - 0x9d, 0x99, 0x4c, 0x17, 0xcd, 0x1c, 0x16, 0xfd, 0x31, 0x35, 0xd5, 0x3e, 0xa3, 0x00, 0xbf, 0xbe, - 0xda, 0xd6, 0xe2, 0x37, 0x9b, 0x13, 0x1b, 0xca, 0x29, 0x90, 0x4b, 0xf2, 0x09, 0x57, 0x2f, 0xe9 }, - { 0xd7, 0xba, 0x23, 0xd3, 0xa0, 0x6e, 0x14, 0x6a, 0xf0, 0x77, 0xb7, 0xe6, 0xe3, 0xc9, 0x3b, 0x38, - 0xbb, 0xe7, 0xbe, 0x54, 0x75, 0xf8, 0xb7, 0x42, 0x29, 0xe2, 0x83, 0xde, 0x20, 0x22, 0x41, 0xcf, - 0x5f, 0x6f, 0x80, 0x60, 0xf3, 0x44, 0x04, 0x21, 0xd5, 0x03, 0x68, 0x42, 0xde, 0x81, 0xea, 0xe8, - 0x7e, 0x5b, 0x80, 0x0f, 0x1b, 0x2d, 0x06, 0xc7, 0xce, 0xe9, 0x46, 0xc7, 0xf7, 0xb3, 0xa2, 0x02, - 0x21, 0xb5, 0x4d, 0xc2, 0x36, 0xea, 0xe6, 0x7b, 0xb3, 0x61, 0xe6, 0x18, 0x40, 0x5b, 0xce, 0x5b, - 0xc2, 0xee, 0xa5, 0xde, 0xe9, 0xe6, 0xe0, 0xa8, 0x58, 0x58, 0x03, 0x34, 0x26, 0x27, 0x65, 0x2a }, - { 0xfa, 0x43, 0xa6, 0xc4, 0x32, 0xa1, 0x2f, 0xb6, 0x37, 0x05, 0xf4, 0xa4, 0xa7, 0x36, 0xdd, 0x1c, - 0x45, 0x10, 0x95, 0x83, 0x67, 0x89, 0x79, 0x18, 0x34, 0xad, 0xe7, 0x57, 0x7f, 0x0d, 0x48, 0x9b, - 0x14, 0xdf, 0x5f, 0xc8, 0xd7, 0x0f, 0x78, 0x47, 0x88, 0x20, 0xff, 0x7f, 0xb1, 0x21, 0x27, 0x14, - 0x58, 0x32, 0x12, 0xfb, 0x97, 0xe0, 0x81, 0x0e, 0x92, 0xf4, 0x5c, 0x0e, 0x44, 0x48, 0x4e, 0x01, - 0x21, 0xb5, 0x4d, 0xc2, 0x36, 0xea, 0xe6, 0x7b, 0xb3, 0x61, 0xe6, 0x18, 0x40, 0x5b, 0xce, 0x5b, - 0xc2, 0xee, 0xa5, 0xde, 0xe9, 0xe6, 0xe0, 0xa8, 0x58, 0x58, 0x03, 0x34, 0x26, 0x27, 0x65, 0x2a } }, - { { 0x1e, 0x89, 0x12, 0xe8, 0xab, 0xca, 0xeb, 0x96, 0x78, 0x43, 0x89, 0x79, 0x26, 0x61, 0x86, 0x2e, - 0x37, 0xd7, 0x94, 0xb5, 0xb9, 0xf7, 0xc9, 0xe7, 0x04, 0x6c, 0x96, 0x1c, 0x54, 0x0d, 0xb0, 0x6c, - 0xd3, 0x68, 0x9b, 0x53, 0xa7, 0x56, 0x34, 0x1b, 0x65, 0xff, 0xf9, 0xee, 0xf1, 0xc6, 0xfd, 0x7e, - 0xa8, 0x42, 0x59, 0x60, 0x06, 0x5f, 0xc2, 0x89, 0x8b, 0xfc, 0xf8, 0x6c, 0x9a, 0x0d, 0xb1, 0x36 }, - { 0x52, 0x3d, 0x83, 0x25, 0x0f, 0x57, 0x81, 0x76, 0x7b, 0x21, 0xf7, 0x96, 0xd6, 0x1f, 0xfe, 0xd7, - 0x7c, 0xc1, 0x32, 0xb5, 0xbc, 0x05, 0x46, 0xdb, 0x6f, 0x25, 0xd8, 0x7a, 0x68, 0xe2, 0x01, 0x81, - 0xf8, 0x9a, 0xc5, 0x29, 0x78, 0x1c, 0x01, 0xc5, 0x4d, 0x61, 0x4e, 0x75, 0xdf, 0x9f, 0xc3, 0x22, - 0x96, 0x7c, 0xf9, 0xa7, 0xed, 0x41, 0x6f, 0x64, 0xfd, 0xd4, 0x61, 0x58, 0x0d, 0x49, 0xc9, 0xa4 }, - { 0x4a, 0xf7, 0xda, 0xef, 0xe0, 0x3b, 0x33, 0x19, 0x79, 0x02, 0x7a, 0xbb, 0xd3, 0x53, 0xf4, 0x8c, - 0x8a, 0x16, 0xfb, 0xbd, 0x35, 0xd9, 0x70, 0xb2, 0x0a, 0x06, 0x05, 0x14, 0xd0, 0x9e, 0xf6, 0x13, - 0x44, 0xbb, 0xb7, 0x93, 0x86, 0x1b, 0x3c, 0xb0, 0x54, 0xa7, 0x48, 0xc2, 0xa7, 0x10, 0xda, 0x65, - 0xb2, 0xdb, 0x0f, 0x85, 0x23, 0x57, 0x77, 0x44, 0x23, 0x20, 0x6d, 0x2e, 0xde, 0x20, 0x01, 0xed }, - { 0x9c, 0xb8, 0x68, 0xeb, 0xbb, 0x8b, 0xaf, 0x81, 0x9c, 0x2f, 0x90, 0x4c, 0xc2, 0x62, 0x17, 0xfc, - 0xf2, 0xa5, 0xab, 0x4c, 0x2e, 0x69, 0xcb, 0x82, 0x5f, 0x4c, 0x3c, 0x82, 0xcd, 0x6a, 0xcb, 0x15, - 0xa2, 0xfc, 0x50, 0x54, 0x5e, 0x2e, 0x83, 0x52, 0x48, 0x29, 0x51, 0xcc, 0x50, 0xaa, 0x27, 0xa3, - 0xf3, 0x71, 0xdb, 0x2c, 0x1c, 0xa9, 0x8a, 0xa5, 0x95, 0xab, 0x3e, 0x6f, 0xcd, 0xba, 0x22, 0x7c }, - { 0xf7, 0x5d, 0xb5, 0x20, 0x65, 0xfe, 0xa9, 0xe7, 0x1f, 0x8e, 0xd6, 0xc0, 0xf2, 0x3f, 0x1b, 0x8c, - 0x7a, 0x02, 0x54, 0xd8, 0xa7, 0x0e, 0x6f, 0x68, 0x94, 0x81, 0xff, 0x30, 0x0e, 0x6d, 0x1a, 0x96, - 0x1b, 0x86, 0x07, 0xaa, 0xbf, 0x37, 0xc5, 0x5e, 0x26, 0xa2, 0xdf, 0x0b, 0xd0, 0x7f, 0x94, 0x35, - 0x30, 0xa4, 0x9e, 0x47, 0xaf, 0xad, 0x9c, 0xc9, 0x02, 0x21, 0x55, 0x94, 0x04, 0x13, 0xff, 0x64 }, - { 0x9c, 0x8d, 0x18, 0x63, 0x83, 0xad, 0x01, 0xcc, 0xbb, 0xe6, 0x00, 0xda, 0x15, 0xce, 0xc6, 0x6e, - 0x7a, 0x37, 0x6a, 0x81, 0x44, 0xb3, 0xfc, 0xb7, 0xcd, 0x05, 0xee, 0x4a, 0x6f, 0x29, 0xe4, 0x79, - 0x63, 0x52, 0x7e, 0x14, 0xc9, 0x14, 0x77, 0xa8, 0x19, 0x94, 0x03, 0xc6, 0x51, 0x57, 0xf1, 0xcc, - 0x11, 0x29, 0xde, 0x86, 0x08, 0xfe, 0x41, 0x02, 0x71, 0xb7, 0xbf, 0xd7, 0xe7, 0x83, 0x3e, 0x0c, - 0x9a, 0x59, 0x7e, 0xe8, 0x61, 0x36, 0x56, 0x9a, 0xbf, 0x64, 0xfd, 0xf3, 0xb7, 0xb9, 0x2f, 0x9e, - 0x56, 0x1f, 0x57, 0x45, 0x2e, 0x19, 0x0f, 0x6f, 0x70, 0x01, 0xc2, 0x48, 0x05, 0x23, 0x9b, 0x2f }, - { 0xb5, 0x4e, 0xe7, 0xcc, 0x7b, 0x66, 0x7a, 0xf8, 0xec, 0xcd, 0x1b, 0x0c, 0x0f, 0xec, 0x04, 0x27, - 0xa0, 0x61, 0xfd, 0x12, 0x2d, 0xab, 0xc9, 0xc5, 0x8e, 0xee, 0x36, 0xc2, 0xef, 0x67, 0xd5, 0x87, - 0x95, 0x6c, 0x12, 0xb7, 0x12, 0x81, 0x55, 0xe0, 0x7b, 0xdb, 0x8f, 0x67, 0xea, 0x04, 0x55, 0x91, - 0x9b, 0x50, 0x65, 0x05, 0xc1, 0xf1, 0x0b, 0x04, 0x91, 0x66, 0x3c, 0x32, 0x53, 0x72, 0x01, 0x04, - 0x9a, 0x59, 0x7e, 0xe8, 0x61, 0x36, 0x56, 0x9a, 0xbf, 0x64, 0xfd, 0xf3, 0xb7, 0xb9, 0x2f, 0x9e, - 0x56, 0x1f, 0x57, 0x45, 0x2e, 0x19, 0x0f, 0x6f, 0x70, 0x01, 0xc2, 0x48, 0x05, 0x23, 0x9b, 0x2f } }, - { { 0xc8, 0x37, 0x10, 0xdc, 0xdb, 0xfc, 0x51, 0x91, 0xae, 0x37, 0xa4, 0xe0, 0xcf, 0xbb, 0xdd, 0x92, - 0x93, 0x5f, 0x6b, 0xd6, 0x81, 0xbf, 0x9b, 0x24, 0x5e, 0x0d, 0xf1, 0xe4, 0x04, 0x89, 0xd1, 0x1b, - 0xb2, 0x68, 0x56, 0x3a, 0xdc, 0x59, 0xd0, 0x8a, 0x93, 0x37, 0x5d, 0xa5, 0x40, 0x5e, 0xfe, 0xc9, - 0x41, 0x0b, 0x8a, 0x50, 0xd2, 0xa0, 0x94, 0x86, 0xf7, 0x46, 0x3b, 0x7e, 0x1d, 0xea, 0x2b, 0xa8 }, - { 0x1b, 0xe2, 0xe6, 0x48, 0x86, 0xa8, 0x65, 0xfd, 0x2b, 0xae, 0xc7, 0x7d, 0x41, 0xee, 0xb2, 0x80, - 0x33, 0x1c, 0x0a, 0xdc, 0x42, 0xea, 0x99, 0xd0, 0x1f, 0x6d, 0xc8, 0x80, 0x51, 0x70, 0xd4, 0x19, - 0xae, 0xfc, 0x66, 0x16, 0xa2, 0x53, 0x27, 0x19, 0x7a, 0xf2, 0x9a, 0x25, 0x0c, 0x39, 0x8c, 0xbf, - 0xe7, 0xa3, 0x7a, 0xd6, 0xa3, 0x43, 0x62, 0xd2, 0x4a, 0xc2, 0xf1, 0x96, 0x7e, 0xe3, 0x83, 0x13 }, - { 0xf5, 0xb1, 0x2a, 0xc5, 0x4d, 0xcc, 0xdf, 0x56, 0xde, 0x92, 0x96, 0x46, 0x03, 0x11, 0xfc, 0xa0, - 0xbc, 0xa2, 0x22, 0xf7, 0x25, 0x74, 0x2a, 0x1f, 0x27, 0x34, 0x18, 0xe8, 0x06, 0xa4, 0x77, 0x26, - 0x1a, 0x51, 0x5e, 0xfb, 0x77, 0xbc, 0x55, 0xb1, 0xf8, 0xa5, 0x19, 0x23, 0x00, 0x97, 0xf7, 0xbb, - 0xe4, 0xcd, 0x41, 0x9e, 0xd9, 0x5e, 0x0c, 0x6b, 0x1b, 0x8a, 0xba, 0x52, 0x93, 0xbe, 0x2c, 0xf3 }, - { 0xb3, 0x02, 0xeb, 0x44, 0x3c, 0x05, 0xae, 0x9c, 0x94, 0xa9, 0x1f, 0x72, 0x41, 0xbc, 0x81, 0x66, - 0x5f, 0x50, 0xc0, 0x57, 0xb4, 0x44, 0xf0, 0xe1, 0x2a, 0xa9, 0x88, 0x69, 0xa6, 0x1c, 0x05, 0x85, - 0xda, 0xc7, 0xb2, 0xe1, 0x8c, 0x2f, 0x7c, 0x49, 0x37, 0xa2, 0xf2, 0x56, 0xab, 0x12, 0x9f, 0x12, - 0x4b, 0x1b, 0x73, 0x75, 0x3f, 0x30, 0x0f, 0x40, 0xf1, 0xf9, 0x1d, 0xa7, 0x2c, 0x98, 0x8c, 0x91 }, - { 0xcb, 0xd3, 0x39, 0x60, 0x56, 0xe3, 0xbd, 0x65, 0x86, 0x1a, 0x58, 0x40, 0xc0, 0xa4, 0xc4, 0x8b, - 0xe5, 0xf7, 0x49, 0x0a, 0xf2, 0x09, 0x51, 0x32, 0x6e, 0x06, 0x5a, 0x27, 0x19, 0x78, 0x2e, 0x3a, - 0x04, 0xf9, 0x34, 0x80, 0x49, 0x39, 0x93, 0xcd, 0x89, 0x67, 0x7b, 0xc0, 0x8d, 0x9d, 0x8d, 0x4c, - 0x83, 0x20, 0x80, 0xfc, 0x00, 0xf2, 0x8a, 0x8f, 0xa4, 0x4d, 0x8e, 0x8f, 0x58, 0x51, 0x5b, 0x71 }, - { 0x71, 0x3f, 0x90, 0x41, 0xb8, 0x74, 0xbc, 0x7a, 0x85, 0xf5, 0xab, 0xca, 0x7e, 0xf2, 0x70, 0x41, - 0xbc, 0x36, 0xb5, 0xc3, 0x4e, 0xf1, 0x2b, 0x17, 0x35, 0x40, 0xdb, 0x3c, 0xdb, 0xd2, 0xec, 0x0b, - 0x99, 0xc1, 0x43, 0x17, 0xad, 0x38, 0x45, 0x2d, 0x07, 0x31, 0xd7, 0xb6, 0x95, 0x1c, 0x89, 0x25, - 0xe4, 0x89, 0x97, 0xd3, 0xcf, 0x11, 0x2f, 0x63, 0x31, 0x51, 0xa2, 0x18, 0xfc, 0x12, 0x04, 0x0a, - 0xb0, 0x33, 0xce, 0x0b, 0x57, 0xc0, 0x8c, 0x58, 0x25, 0xf8, 0x9b, 0x50, 0x22, 0x1c, 0x5c, 0x7b, - 0x02, 0xc7, 0xed, 0xfc, 0x98, 0x8b, 0xbd, 0xd2, 0x4e, 0xfc, 0x78, 0x91, 0x7f, 0x4c, 0x99, 0x24 }, - { 0xfc, 0x46, 0xe4, 0x85, 0x0c, 0x52, 0x14, 0xf8, 0x8a, 0xa4, 0x97, 0x17, 0x10, 0xb2, 0x93, 0xef, - 0xa0, 0x66, 0x3c, 0xfd, 0x61, 0x42, 0x24, 0x30, 0x70, 0x4b, 0xfd, 0x0b, 0x86, 0xc8, 0x97, 0xd7, - 0x04, 0xc2, 0xa6, 0x61, 0x41, 0xaf, 0xcc, 0x1d, 0x52, 0xc9, 0xf3, 0xca, 0xe1, 0x90, 0x7c, 0xbd, - 0xce, 0xaf, 0x30, 0xc4, 0xb4, 0x7d, 0x81, 0x7e, 0xbd, 0xe2, 0x09, 0x70, 0x1e, 0x6b, 0xb9, 0x03, - 0xb0, 0x33, 0xce, 0x0b, 0x57, 0xc0, 0x8c, 0x58, 0x25, 0xf8, 0x9b, 0x50, 0x22, 0x1c, 0x5c, 0x7b, - 0x02, 0xc7, 0xed, 0xfc, 0x98, 0x8b, 0xbd, 0xd2, 0x4e, 0xfc, 0x78, 0x91, 0x7f, 0x4c, 0x99, 0x24 } }, - { { 0x5f, 0x01, 0x6d, 0xec, 0x82, 0x02, 0x96, 0x47, 0x74, 0xd9, 0x73, 0x2e, 0x2e, 0x17, 0x00, 0xb6, - 0xe0, 0xa4, 0x13, 0x17, 0xae, 0x7f, 0x85, 0xcb, 0xff, 0xe7, 0x96, 0x99, 0xdb, 0x9f, 0xad, 0x21, - 0x60, 0xd9, 0x12, 0xdc, 0x41, 0x01, 0x33, 0x66, 0x4c, 0x24, 0x8b, 0x25, 0x17, 0xd7, 0x22, 0x14, - 0x12, 0x4d, 0xad, 0x82, 0x9a, 0x85, 0x69, 0x5e, 0x35, 0x10, 0xe0, 0xd7, 0x1a, 0x82, 0x88, 0x14 }, - { 0xab, 0x5f, 0x2c, 0x7d, 0xa2, 0xe5, 0x67, 0x5f, 0xe4, 0x92, 0x03, 0x93, 0xd7, 0x13, 0xa1, 0xfa, - 0x4a, 0xb7, 0x18, 0x4a, 0x8e, 0x8c, 0x78, 0x9a, 0x0c, 0x60, 0x02, 0xe8, 0x2d, 0x50, 0x05, 0x0f, - 0x92, 0xee, 0x9f, 0x81, 0xde, 0x6b, 0x20, 0xe4, 0x9b, 0x17, 0x2e, 0x99, 0x0f, 0x01, 0x31, 0xa7, - 0xc5, 0xc4, 0x53, 0x70, 0xda, 0x03, 0xc6, 0xf7, 0x22, 0x87, 0x98, 0x87, 0x19, 0x36, 0xa6, 0x49 }, - { 0x93, 0xab, 0x22, 0xc4, 0x39, 0x6c, 0x97, 0x80, 0xd2, 0xe2, 0x36, 0xfa, 0x31, 0x74, 0x67, 0xcc, - 0x50, 0x1b, 0x95, 0xbe, 0x77, 0xe0, 0xd1, 0x00, 0x74, 0x04, 0xe1, 0x4d, 0xca, 0x44, 0x35, 0x72, - 0x74, 0x69, 0x82, 0x23, 0x56, 0x9b, 0xcc, 0x34, 0x5a, 0xcb, 0xa2, 0xa3, 0x31, 0x12, 0x4a, 0x84, - 0x4c, 0xe9, 0x37, 0x3a, 0x58, 0xf8, 0x79, 0x65, 0x4a, 0x66, 0x79, 0x82, 0xf4, 0x5d, 0x75, 0xc3 }, - { 0x2d, 0x5d, 0xac, 0x4f, 0xb5, 0x00, 0x68, 0x3b, 0x5f, 0x2e, 0xdd, 0xcb, 0x14, 0x4a, 0x7f, 0xad, - 0x12, 0x45, 0x91, 0xd1, 0x84, 0xd8, 0x14, 0xff, 0xcb, 0x64, 0x43, 0x6d, 0x65, 0xe7, 0x19, 0x68, - 0x2b, 0x5e, 0x53, 0x05, 0x74, 0x66, 0xed, 0xac, 0x2f, 0x5a, 0x8f, 0x70, 0x96, 0xab, 0x29, 0xf3, - 0x9a, 0x59, 0xa2, 0xe2, 0xef, 0xd3, 0xc9, 0xd7, 0x53, 0xf8, 0xf5, 0xa3, 0xd6, 0xf4, 0x34, 0xf8 }, - { 0x1d, 0x14, 0xf3, 0xfd, 0xb0, 0x66, 0x20, 0xff, 0xfc, 0x79, 0x47, 0xc7, 0x4c, 0xe9, 0x45, 0x67, - 0xf5, 0x97, 0x14, 0xea, 0x7c, 0x63, 0xc5, 0x3f, 0x0b, 0x46, 0xe0, 0x88, 0xd6, 0x9b, 0x67, 0x71, - 0xba, 0xa6, 0x15, 0x28, 0x94, 0x54, 0x83, 0x68, 0x00, 0x3a, 0x33, 0xa6, 0x1a, 0x05, 0x6a, 0x68, - 0x72, 0x98, 0x48, 0x71, 0xea, 0x5b, 0x47, 0xf5, 0x80, 0x46, 0xa9, 0x57, 0x84, 0xec, 0xad, 0xfc }, - { 0xa3, 0x1d, 0x87, 0xd3, 0x28, 0x62, 0xc6, 0xf7, 0xdb, 0xfb, 0xfa, 0xfc, 0xf3, 0x27, 0x5c, 0x31, - 0xd3, 0x32, 0x26, 0x0e, 0x0f, 0x41, 0x49, 0xec, 0x05, 0x16, 0xf7, 0xa5, 0x63, 0xb3, 0xbc, 0xe5, - 0x0d, 0x1e, 0x6f, 0x97, 0x4f, 0x68, 0x40, 0xc0, 0xd4, 0x6c, 0x4f, 0x9e, 0x25, 0xd0, 0xab, 0x8d, - 0x2a, 0xb9, 0x3e, 0x06, 0x4d, 0x9d, 0x3d, 0x2d, 0x79, 0x8d, 0x93, 0xdc, 0xfc, 0x6f, 0x0b, 0x04, - 0x48, 0x7c, 0x19, 0x5c, 0xa9, 0xc8, 0x44, 0xe5, 0xf6, 0x4f, 0x51, 0xd8, 0x72, 0x63, 0x41, 0xda, - 0x62, 0xac, 0x78, 0x73, 0xb3, 0x3e, 0xc8, 0xb2, 0xf1, 0x3f, 0x89, 0xf2, 0x0e, 0x95, 0xdf, 0xed }, - { 0xfd, 0x69, 0xb1, 0x9a, 0xdb, 0xae, 0x95, 0x87, 0xe2, 0xc6, 0x8a, 0x97, 0x0c, 0xee, 0xc4, 0x22, - 0x60, 0x4e, 0x96, 0xa9, 0x72, 0xb9, 0x6f, 0x86, 0x97, 0xa8, 0xdf, 0x83, 0xc5, 0x18, 0x18, 0x6e, - 0xc9, 0x43, 0x30, 0x7e, 0x5b, 0xcf, 0x37, 0x0f, 0xc1, 0xd7, 0xe5, 0xab, 0xb1, 0x31, 0xe0, 0x97, - 0xc7, 0x53, 0xb7, 0xfd, 0xd7, 0xdf, 0x00, 0x43, 0x0e, 0x41, 0x62, 0x80, 0x0b, 0xe3, 0xe0, 0x06, - 0x48, 0x7c, 0x19, 0x5c, 0xa9, 0xc8, 0x44, 0xe5, 0xf6, 0x4f, 0x51, 0xd8, 0x72, 0x63, 0x41, 0xda, - 0x62, 0xac, 0x78, 0x73, 0xb3, 0x3e, 0xc8, 0xb2, 0xf1, 0x3f, 0x89, 0xf2, 0x0e, 0x95, 0xdf, 0xed } }, - { { 0x98, 0x29, 0xf7, 0x57, 0xfd, 0xbd, 0x44, 0x3f, 0xd9, 0x90, 0x98, 0x19, 0x97, 0xf2, 0x60, 0x27, - 0xfd, 0x08, 0xfc, 0x8a, 0xc6, 0xaf, 0x87, 0x22, 0x7f, 0x74, 0x4a, 0x80, 0xaf, 0x72, 0x00, 0x01, - 0x70, 0x9b, 0x47, 0x2a, 0xd2, 0x8e, 0x41, 0x0a, 0xea, 0x6a, 0xdf, 0xb7, 0x61, 0x54, 0x89, 0x5e, - 0x01, 0x9f, 0x76, 0x64, 0x29, 0xee, 0x8d, 0x85, 0x20, 0xff, 0x30, 0x58, 0xc2, 0xa3, 0x2a, 0x56 }, - { 0xea, 0x69, 0x8e, 0x6b, 0x8e, 0xdd, 0x55, 0x22, 0x45, 0x61, 0xd4, 0x92, 0x66, 0x8e, 0x96, 0xaf, - 0x7e, 0x40, 0x28, 0x72, 0xc4, 0x46, 0xe7, 0x88, 0xd4, 0x6c, 0x74, 0xb7, 0x48, 0x7f, 0xe8, 0xe1, - 0x5e, 0xa5, 0x85, 0x62, 0x8f, 0xd6, 0xfc, 0x27, 0x0a, 0xb2, 0x4b, 0x38, 0x94, 0x59, 0x52, 0x0d, - 0x6a, 0x4d, 0xe5, 0x61, 0xce, 0x0d, 0x44, 0x03, 0xa6, 0x2a, 0xc2, 0xd4, 0xd4, 0xe2, 0x71, 0xe3 }, - { 0x40, 0xf0, 0x82, 0xf0, 0x8d, 0xaa, 0xad, 0xa9, 0x9f, 0x9b, 0x85, 0x02, 0xcf, 0x57, 0x15, 0x41, - 0x13, 0x59, 0xf2, 0xba, 0xdd, 0xbf, 0x93, 0xe5, 0x40, 0x2e, 0xaf, 0xdd, 0x43, 0x52, 0xc8, 0x7f, - 0x40, 0xad, 0x91, 0x5b, 0x58, 0xd1, 0xa1, 0xe8, 0x6f, 0x77, 0xc3, 0x41, 0x35, 0x5e, 0xf7, 0x03, - 0xba, 0xe4, 0xed, 0x2c, 0x28, 0x59, 0xd6, 0x48, 0xfe, 0x50, 0xcc, 0xf9, 0x80, 0xd1, 0x49, 0xd1 }, - { 0xd7, 0xa5, 0xd9, 0x13, 0xdf, 0x7d, 0xf6, 0xc6, 0x25, 0x0f, 0x52, 0xc2, 0x57, 0x61, 0x20, 0xf2, - 0xf0, 0xdb, 0x47, 0x49, 0x56, 0xaf, 0x89, 0x11, 0xa7, 0x8d, 0x09, 0x3a, 0xfe, 0x45, 0x43, 0xef, - 0x9f, 0x0c, 0x42, 0xaf, 0xa8, 0xcc, 0x60, 0x48, 0xc0, 0x1c, 0x7c, 0xbe, 0x01, 0xe2, 0x88, 0xcc, - 0x6c, 0x3e, 0x97, 0x91, 0xf3, 0xd9, 0xb2, 0xb2, 0x09, 0x7e, 0x35, 0xb1, 0x78, 0xb4, 0x03, 0xf6 }, - { 0x08, 0xc4, 0x1a, 0x3a, 0xc3, 0xe3, 0x26, 0xbd, 0x8d, 0xee, 0x5d, 0xf0, 0xba, 0xb6, 0x65, 0xff, - 0x77, 0xc0, 0x99, 0xd1, 0xca, 0xdc, 0xf5, 0x4b, 0x50, 0x50, 0x0a, 0x9e, 0x13, 0x33, 0x76, 0x86, - 0x9b, 0x39, 0x79, 0x78, 0x73, 0x5c, 0x2f, 0x69, 0xa9, 0x9e, 0x0b, 0xeb, 0x11, 0x1e, 0x12, 0xaa, - 0xc1, 0x09, 0x83, 0x0f, 0xca, 0xcb, 0x95, 0x10, 0xde, 0x85, 0xe3, 0x75, 0x62, 0x4a, 0xc2, 0x4c }, - { 0x68, 0x78, 0x6c, 0xce, 0x2f, 0x72, 0x80, 0xfe, 0x83, 0x88, 0x63, 0x37, 0xa7, 0xa1, 0x5a, 0x0b, - 0x84, 0x8a, 0xda, 0x28, 0x84, 0xf1, 0x6a, 0x63, 0x24, 0x1c, 0x72, 0xda, 0x84, 0xee, 0x1d, 0xe0, - 0x77, 0xf0, 0xf6, 0xce, 0x7e, 0x79, 0x0a, 0x55, 0x03, 0x01, 0x13, 0x0f, 0xf7, 0x6b, 0x45, 0xe7, - 0xcb, 0xfd, 0xb0, 0x37, 0x93, 0x4b, 0x40, 0x69, 0xe0, 0x77, 0x67, 0x72, 0x65, 0xee, 0x35, 0x08, - 0x00, 0xc0, 0x07, 0x10, 0xd8, 0x6e, 0x55, 0x83, 0x5a, 0xbc, 0xfa, 0x67, 0x80, 0x8f, 0xfa, 0x21, - 0x3e, 0x56, 0x53, 0x5b, 0xbc, 0x9d, 0xff, 0x16, 0xd9, 0x57, 0xcf, 0x2b, 0x78, 0x06, 0x5a, 0x89 }, - { 0xdf, 0x32, 0x1a, 0x01, 0x84, 0xe5, 0xb8, 0x2c, 0x70, 0x6c, 0xeb, 0xd1, 0xf0, 0xb4, 0x9b, 0x32, - 0xc8, 0xd0, 0x81, 0xc4, 0xea, 0xb2, 0x7c, 0x32, 0x1a, 0x02, 0x61, 0xf2, 0xd9, 0x4d, 0xe5, 0x85, - 0xad, 0xfc, 0xc6, 0x70, 0xee, 0x85, 0x77, 0x07, 0x9b, 0x5d, 0x5f, 0x88, 0xef, 0xb6, 0xd8, 0xdf, - 0x2b, 0xa2, 0x4d, 0x90, 0x11, 0x2d, 0x38, 0x3f, 0xa8, 0x84, 0xf0, 0x76, 0xdd, 0x31, 0xd0, 0x09, - 0x00, 0xc0, 0x07, 0x10, 0xd8, 0x6e, 0x55, 0x83, 0x5a, 0xbc, 0xfa, 0x67, 0x80, 0x8f, 0xfa, 0x21, - 0x3e, 0x56, 0x53, 0x5b, 0xbc, 0x9d, 0xff, 0x16, 0xd9, 0x57, 0xcf, 0x2b, 0x78, 0x06, 0x5a, 0x89 } }, - { { 0x25, 0x87, 0x1e, 0x6f, 0xe8, 0xd0, 0xde, 0x1d, 0xd5, 0xf2, 0xd3, 0x5b, 0xff, 0x9e, 0x67, 0x99, - 0x60, 0xb4, 0x0e, 0xb7, 0x98, 0x1b, 0x2a, 0x3a, 0x9c, 0xec, 0xc1, 0xe1, 0x2e, 0x2b, 0xc0, 0x3e, - 0x3c, 0xfb, 0x64, 0x91, 0x72, 0xc6, 0x7e, 0x57, 0x47, 0x00, 0x97, 0xbf, 0x8e, 0x0e, 0xbf, 0xad, - 0xd9, 0x28, 0x86, 0x7c, 0xfd, 0x41, 0x91, 0xae, 0x2d, 0xee, 0xc0, 0xb2, 0x32, 0x7d, 0x99, 0x7d }, - { 0x63, 0xc1, 0xf9, 0x61, 0x9c, 0x9e, 0x1a, 0xd7, 0xca, 0xa3, 0x71, 0xd6, 0x34, 0x3d, 0xa7, 0x08, - 0x36, 0x0c, 0xec, 0x37, 0x35, 0x94, 0x1a, 0x45, 0xa9, 0xfa, 0xf2, 0xb5, 0x25, 0x92, 0xbf, 0xd1, - 0x1e, 0xca, 0xdd, 0x5a, 0x23, 0xad, 0x9e, 0x45, 0xc3, 0x66, 0xcb, 0x8f, 0xda, 0xa3, 0xd1, 0xe6, - 0x27, 0x38, 0x11, 0x54, 0x67, 0x31, 0x03, 0x64, 0x35, 0xe0, 0x68, 0x0b, 0x93, 0xee, 0x81, 0x17 }, - { 0x8b, 0x01, 0xe9, 0x99, 0x54, 0x54, 0x73, 0x15, 0x0b, 0xac, 0x38, 0x7b, 0xe9, 0xe3, 0x17, 0x4f, - 0x02, 0x3e, 0xe3, 0x8e, 0xda, 0x41, 0xa0, 0x9d, 0x10, 0xe0, 0xda, 0x11, 0xfe, 0xec, 0x2f, 0x42, - 0xe7, 0xc8, 0xb3, 0xde, 0x2f, 0x7b, 0xfd, 0xdf, 0x7c, 0x34, 0x3b, 0x5e, 0xac, 0x22, 0x8c, 0x99, - 0x3d, 0xa1, 0xa9, 0xd9, 0x81, 0xb6, 0x51, 0xc8, 0xaf, 0x3e, 0x75, 0xed, 0x45, 0xcf, 0xf7, 0xb9 }, - { 0xaf, 0xe9, 0x9c, 0x16, 0x4a, 0x8f, 0x3b, 0x0f, 0xef, 0x71, 0x2f, 0xaa, 0x8d, 0x7d, 0xce, 0xed, - 0xea, 0x31, 0x93, 0xaf, 0x2c, 0x75, 0xc6, 0xfa, 0xda, 0x3e, 0xa6, 0xea, 0x2a, 0x3e, 0x7b, 0x72, - 0xb6, 0xf8, 0xd7, 0x9a, 0x88, 0xcb, 0x0b, 0x81, 0x97, 0x24, 0x29, 0x3b, 0x11, 0x23, 0x69, 0xc2, - 0xff, 0x98, 0x39, 0x25, 0x99, 0xae, 0xe1, 0x07, 0x3e, 0x97, 0xde, 0x10, 0x21, 0x23, 0x7a, 0x2d }, - { 0xbe, 0x2f, 0xb9, 0x4c, 0x41, 0x5a, 0x9a, 0xf6, 0xfb, 0xf8, 0x26, 0x9d, 0x81, 0x7f, 0x39, 0x91, - 0xaf, 0x5b, 0xf1, 0xd7, 0x93, 0x0a, 0xdf, 0x18, 0x19, 0x4a, 0x80, 0x74, 0x14, 0x98, 0x2b, 0xf2, - 0x3b, 0x25, 0xc5, 0xe8, 0xfc, 0x07, 0x3f, 0x5d, 0xa1, 0x39, 0x27, 0x4e, 0x1c, 0xd2, 0x7a, 0xfe, - 0x3e, 0x7b, 0x03, 0x35, 0x15, 0x9e, 0x35, 0x2b, 0xd0, 0xbe, 0x67, 0x48, 0x42, 0xdd, 0xa4, 0xdd }, - { 0xbd, 0xcd, 0xd7, 0xbf, 0xb1, 0x0a, 0xdb, 0x9f, 0x85, 0x42, 0xba, 0xf4, 0xc8, 0xff, 0xb0, 0xe1, - 0x9a, 0x18, 0x6d, 0x1a, 0xe0, 0x37, 0xc1, 0xa2, 0xe1, 0x1c, 0x38, 0x55, 0x14, 0xbf, 0x64, 0x67, - 0x84, 0x47, 0xb6, 0x0a, 0xf6, 0x93, 0xf1, 0x10, 0xab, 0x09, 0xf0, 0x60, 0x84, 0xe2, 0x4e, 0x4b, - 0x5e, 0xa2, 0xd2, 0xd1, 0x19, 0x22, 0xd7, 0xc4, 0x85, 0x13, 0x23, 0xa3, 0x6a, 0xb6, 0x75, 0x0f, - 0x43, 0xe6, 0xde, 0x7b, 0x67, 0x2a, 0x73, 0x77, 0x9e, 0xb4, 0x94, 0x6c, 0xc3, 0x9a, 0x67, 0x51, - 0xcf, 0xe9, 0x47, 0x46, 0x0e, 0x3a, 0x12, 0x7d, 0x7c, 0x66, 0x73, 0x6c, 0xd5, 0x4a, 0x21, 0x4d }, - { 0x89, 0x7e, 0xd0, 0xbf, 0x2e, 0x9f, 0x0c, 0xff, 0x6e, 0x56, 0x25, 0x9b, 0x79, 0x99, 0x52, 0x27, - 0xc2, 0x3a, 0xaa, 0xf0, 0x47, 0x6d, 0xed, 0x05, 0xa1, 0xeb, 0x9c, 0x92, 0x28, 0x7f, 0x1b, 0xc8, - 0x1c, 0x57, 0x76, 0xab, 0x05, 0xe3, 0xd3, 0xb7, 0xa3, 0xf5, 0xac, 0xa8, 0x21, 0x33, 0x7c, 0xb7, - 0xe7, 0xc2, 0xd0, 0x25, 0x6f, 0xdf, 0x34, 0xd1, 0xb0, 0x34, 0x41, 0x46, 0x30, 0x9c, 0x76, 0x07, - 0x43, 0xe6, 0xde, 0x7b, 0x67, 0x2a, 0x73, 0x77, 0x9e, 0xb4, 0x94, 0x6c, 0xc3, 0x9a, 0x67, 0x51, - 0xcf, 0xe9, 0x47, 0x46, 0x0e, 0x3a, 0x12, 0x7d, 0x7c, 0x66, 0x73, 0x6c, 0xd5, 0x4a, 0x21, 0x4d } } + { { 0xa1, 0xfc, 0x7a, 0xb4, 0x6d, 0xdf, 0x7d, 0xcf, 0xe7, 0xec, 0x75, 0xe5, 0xfa, 0xdd, 0x11, 0xcb, 0xcc, 0x37, 0xf8, 0x84, 0x5d, 0x1c, 0x92, 0x4e, 0x09, 0x89, 0x65, 0xfc, 0xd8, 0xe9, 0x5a, 0x30, + 0xda, 0xe4, 0x86, 0xa3, 0x35, 0xb4, 0x19, 0x0c, 0xbc, 0x7b, 0xcb, 0x3e, 0xb9, 0x4c, 0xbd, 0x16, 0xe8, 0x3d, 0x13, 0x2b, 0xc9, 0xc3, 0x39, 0xea, 0xf1, 0x42, 0xe7, 0x6f, 0x69, 0x78, 0x9a, 0xb7 }, + { 0xe5, 0xf3, 0x7b, 0xd4, 0x0e, 0xc9, 0xdc, 0x77, 0x50, 0x86, 0xdc, 0xf4, 0x2e, 0xbc, 0xdb, 0x27, 0xf0, 0x73, 0xd4, 0x58, 0x73, 0xc4, 0x4b, 0x71, 0x8b, 0x3c, 0xc5, 0x4f, 0xa8, 0x7c, 0xa4, 0x84, + 0xd9, 0x96, 0x23, 0x73, 0xb4, 0x03, 0x16, 0xbf, 0x1e, 0xa1, 0x2d, 0xd8, 0xc4, 0x8a, 0xe7, 0x82, 0x10, 0xda, 0xc9, 0xe5, 0x45, 0x9b, 0x01, 0xdc, 0x73, 0xa6, 0xc9, 0x17, 0xa8, 0x15, 0x31, 0x6d }, + { 0x3e, 0x49, 0xa4, 0x0e, 0x3a, 0xaf, 0xa3, 0x07, 0x3d, 0xf7, 0x2a, 0xec, 0x43, 0xb1, 0xd4, 0x09, 0x1a, 0xcb, 0x8e, 0x92, 0xf9, 0x65, 0x95, 0x04, 0x6d, 0x2d, 0x9b, 0x34, 0xa3, 0xbf, 0x51, 0x00, + 0xe2, 0xee, 0x23, 0xf5, 0x28, 0x0a, 0xa9, 0xb1, 0x57, 0x0b, 0x96, 0x56, 0x62, 0xba, 0x12, 0x94, 0xaf, 0xc6, 0x5f, 0xb5, 0x61, 0x43, 0x0f, 0xde, 0x0b, 0xab, 0xfa, 0x4f, 0xfe, 0xc5, 0xe7, 0x18 }, + { 0x00, 0x4d, 0x41, 0x8d, 0xe4, 0x69, 0x23, 0xae, 0x98, 0xc4, 0x3e, 0x77, 0x0f, 0x1d, 0x94, 0x5d, 0x29, 0x3e, 0x94, 0x5a, 0x38, 0x39, 0x20, 0x0f, 0xd3, 0x6f, 0x76, 0xa2, 0x29, 0x02, 0x03, 0xcb, + 0x0b, 0x7f, 0x4f, 0x1a, 0x29, 0x51, 0x13, 0x33, 0x7c, 0x99, 0xb3, 0x81, 0x82, 0x39, 0x44, 0x05, 0x97, 0xfb, 0x0d, 0xf2, 0x93, 0xa2, 0x40, 0x94, 0xf4, 0xff, 0x5d, 0x09, 0x61, 0xe4, 0x5f, 0x76 }, + { 0xab, 0xce, 0xd2, 0x24, 0xe8, 0x93, 0xb0, 0xe7, 0x72, 0x14, 0xdc, 0xbb, 0x7d, 0x0f, 0xd8, 0x94, 0x16, 0x9e, 0xb5, 0x7f, 0xd7, 0x19, 0x5f, 0x3e, 0x2d, 0x45, 0xd5, 0xf7, 0x90, 0x0b, 0x3e, 0x05, + 0x18, 0x2e, 0x2b, 0xf4, 0xfa, 0xd4, 0xec, 0x62, 0x4a, 0x4f, 0x48, 0x50, 0xaf, 0x1c, 0xe8, 0x9f, 0x1a, 0xe1, 0x3d, 0x70, 0x49, 0x00, 0xa7, 0xe3, 0x5b, 0x1e, 0xa1, 0x9b, 0x68, 0x1e, 0xa1, 0x73 }, + { 0xed, 0xb6, 0xd0, 0xf0, 0x06, 0x6e, 0x33, 0x9c, 0x86, 0xfb, 0xe8, 0xc3, 0x6c, 0x8d, 0xde, 0xdd, 0xa6, 0xa0, 0x2d, 0xb9, 0x07, 0x29, 0xa3, 0x13, 0xbb, 0xa4, 0xba, 0xec, 0x48, 0xc8, 0xf4, 0x56, 0x82, 0x79, 0xe2, 0xb1, 0xd3, 0x3d, 0x83, 0x9f, 0x10, 0xe8, 0x52, 0xe6, 0x8b, 0x1c, 0x33, 0x9e, + 0x2b, 0xd2, 0xdb, 0x62, 0x1c, 0x56, 0xfd, 0x50, 0x40, 0x77, 0x81, 0xab, 0x21, 0x67, 0x3e, 0x09, 0x4f, 0xf2, 0x51, 0xac, 0x7d, 0xe7, 0xd1, 0x5d, 0x4b, 0xe2, 0x08, 0xc6, 0x3f, 0x6a, 0x4d, 0xc8, 0x5d, 0x74, 0xf6, 0x3b, 0xec, 0x8e, 0xc6, 0x0c, 0x32, 0x27, 0x2f, 0x9c, 0x09, 0x48, 0x59, 0x10 }, + { 0x23, 0x0f, 0xa3, 0xe2, 0x69, 0xce, 0xb9, 0xb9, 0xd1, 0x1c, 0x4e, 0xab, 0x63, 0xc9, 0x2e, 0x1e, 0x7e, 0xa2, 0xa2, 0xa0, 0x49, 0x2e, 0x78, 0xe4, 0x8a, 0x02, 0x3b, 0xa7, 0xab, 0x1f, 0xd4, 0xce, 0x05, 0xe2, 0x80, 0x09, 0x09, 0x3c, 0x61, 0xc7, 0x10, 0x3a, 0x9c, 0xf4, 0x95, 0xac, 0x89, 0x6f, + 0x23, 0xb3, 0x09, 0xe2, 0x24, 0x3f, 0xf6, 0x96, 0x02, 0x36, 0x41, 0x16, 0x32, 0xe1, 0x66, 0x05, 0x4f, 0xf2, 0x51, 0xac, 0x7d, 0xe7, 0xd1, 0x5d, 0x4b, 0xe2, 0x08, 0xc6, 0x3f, 0x6a, 0x4d, 0xc8, 0x5d, 0x74, 0xf6, 0x3b, 0xec, 0x8e, 0xc6, 0x0c, 0x32, 0x27, 0x2f, 0x9c, 0x09, 0x48, 0x59, 0x10 } }, + { { 0xfd, 0x81, 0x14, 0xf1, 0x67, 0x07, 0x44, 0xbb, 0x93, 0x84, 0xa2, 0xdc, 0x36, 0xdc, 0xcc, 0xb3, 0x9e, 0x82, 0xd4, 0x8b, 0x42, 0x56, 0xfb, 0xf2, 0x6e, 0x83, 0x3b, 0x16, 0x2c, 0x29, 0xfb, 0x39, + 0x29, 0x48, 0x85, 0xe3, 0xe3, 0xf7, 0xe7, 0x80, 0x49, 0xd3, 0x01, 0x30, 0x5a, 0x2c, 0x3f, 0x4c, 0xea, 0x13, 0xeb, 0xda, 0xf4, 0x56, 0x75, 0x8d, 0x50, 0x1e, 0x19, 0x2d, 0x29, 0x2b, 0xfb, 0xdb }, + { 0x85, 0x34, 0x4d, 0xf7, 0x39, 0xbf, 0x98, 0x79, 0x8c, 0x98, 0xeb, 0x8d, 0x61, 0x27, 0xec, 0x87, 0x56, 0xcd, 0xd0, 0xa6, 0x55, 0x77, 0xee, 0xf0, 0x20, 0xd0, 0x59, 0x39, 0x95, 0xab, 0x29, 0x82, + 0x8e, 0x61, 0xf8, 0xad, 0xed, 0xb6, 0x27, 0xc3, 0xd8, 0x16, 0xce, 0x67, 0x78, 0xe2, 0x04, 0x4b, 0x0c, 0x2d, 0x2f, 0xc3, 0x24, 0x72, 0xbc, 0x53, 0xbd, 0xfe, 0x39, 0x23, 0xd4, 0xaf, 0x27, 0x84 }, + { 0x11, 0xbe, 0x5f, 0x5a, 0x73, 0xe7, 0x42, 0xef, 0xff, 0x3c, 0x47, 0x6a, 0x0e, 0x6b, 0x9e, 0x96, 0x21, 0xa3, 0xdf, 0x49, 0xe9, 0x3f, 0x40, 0xfc, 0xab, 0xb3, 0x66, 0xd3, 0x3d, 0xfa, 0x02, 0x29, + 0xf3, 0x43, 0x45, 0x3c, 0x70, 0xa3, 0x5d, 0x39, 0xf7, 0xc0, 0x6a, 0xcd, 0xfa, 0x1d, 0xbe, 0x3b, 0x91, 0x41, 0xe4, 0xb0, 0x60, 0xc0, 0x22, 0xf7, 0x2c, 0x11, 0x2b, 0x1c, 0x5f, 0x24, 0xef, 0x53 }, + { 0xfd, 0x3f, 0x09, 0x06, 0xc9, 0x39, 0x8d, 0x48, 0xfa, 0x6b, 0xc9, 0x80, 0xbf, 0xf6, 0xd6, 0x76, 0xb3, 0x62, 0x70, 0x88, 0x4f, 0xde, 0xde, 0xb9, 0xb4, 0xf0, 0xce, 0xf3, 0x74, 0x0d, 0xea, 0x00, + 0x9e, 0x9c, 0x29, 0xe1, 0xa2, 0x1b, 0xbd, 0xb5, 0x83, 0xcc, 0x12, 0xd8, 0x48, 0x08, 0x5b, 0xe5, 0xd6, 0xf9, 0x11, 0x5c, 0xe0, 0xd9, 0xc3, 0x3c, 0x26, 0xbd, 0x69, 0x9f, 0x5c, 0x6f, 0x0c, 0x6f }, + { 0xca, 0xd4, 0x76, 0x32, 0x8b, 0xbe, 0x0c, 0x65, 0x75, 0x43, 0x73, 0xc2, 0xf2, 0xfd, 0x7f, 0xeb, 0xe4, 0x62, 0xc5, 0x0d, 0x0f, 0xf9, 0x01, 0xc8, 0xb9, 0xfa, 0xca, 0xb4, 0x12, 0x1c, 0xb4, 0xac, + 0x0e, 0x5f, 0x18, 0xfc, 0x0c, 0x7f, 0x2a, 0x55, 0xc5, 0xfd, 0x4d, 0x83, 0xb2, 0x02, 0x31, 0x6a, 0x3f, 0x14, 0xee, 0x9d, 0x11, 0xa8, 0x06, 0xad, 0xeb, 0x93, 0x19, 0x79, 0xb1, 0xf2, 0x78, 0x05 }, + { 0x85, 0xe6, 0xe2, 0xf2, 0x96, 0xe7, 0xa2, 0x8b, 0x7e, 0x36, 0xbd, 0x7b, 0xf4, 0x28, 0x6a, 0xd7, 0xbc, 0x2a, 0x6a, 0x59, 0xfd, 0xc0, 0xc8, 0x3d, 0x50, 0x0f, 0x0c, 0x2b, 0x12, 0x3a, 0x75, 0xc7, 0x56, 0xbb, 0x7f, 0x7d, 0x4e, 0xd4, 0x03, 0xb8, 0x7b, 0xde, 0xde, 0x99, 0x65, 0x9e, 0xc4, 0xa6, + 0x6e, 0xfe, 0x00, 0x88, 0xeb, 0x9d, 0xa4, 0xa9, 0x9d, 0x37, 0xc9, 0x4a, 0xcf, 0x69, 0xc4, 0x01, 0xba, 0xa8, 0xce, 0xeb, 0x72, 0xcb, 0x64, 0x8b, 0x9f, 0xc1, 0x1f, 0x9a, 0x9e, 0x99, 0xcc, 0x39, 0xec, 0xd9, 0xbb, 0xd9, 0xce, 0xc2, 0x74, 0x6f, 0xd0, 0x2a, 0xb9, 0xc6, 0xe3, 0xf5, 0xe7, 0xf4 }, + { 0xb1, 0x39, 0x50, 0xb1, 0x1a, 0x08, 0x42, 0x2b, 0xdd, 0x6d, 0x20, 0x9f, 0x0f, 0x37, 0xba, 0x69, 0x97, 0x21, 0x30, 0x7a, 0x71, 0x2f, 0xce, 0x98, 0x09, 0x04, 0xa2, 0x98, 0x6a, 0xed, 0x02, 0x1d, 0x5d, 0x30, 0x8f, 0x03, 0x47, 0x6b, 0x89, 0xfd, 0xf7, 0x1a, 0xca, 0x46, 0x6f, 0x51, 0x69, 0x9a, + 0x2b, 0x18, 0x77, 0xe4, 0xad, 0x0d, 0x7a, 0x66, 0xd2, 0x2c, 0x28, 0xa0, 0xd3, 0x0a, 0x99, 0x0d, 0xba, 0xa8, 0xce, 0xeb, 0x72, 0xcb, 0x64, 0x8b, 0x9f, 0xc1, 0x1f, 0x9a, 0x9e, 0x99, 0xcc, 0x39, 0xec, 0xd9, 0xbb, 0xd9, 0xce, 0xc2, 0x74, 0x6f, 0xd0, 0x2a, 0xb9, 0xc6, 0xe3, 0xf5, 0xe7, 0xf4 } }, + { { 0x02, 0x3a, 0x7e, 0x0c, 0x6d, 0x96, 0x3c, 0x5d, 0x44, 0x56, 0x5d, 0xc1, 0x49, 0x94, 0x35, 0x12, 0x9d, 0xff, 0x8a, 0x5d, 0x91, 0x74, 0xa8, 0x15, 0xee, 0x5d, 0x1e, 0x72, 0xbe, 0x86, 0x15, 0x68, + 0xe7, 0x36, 0xa2, 0x4a, 0xb8, 0xa2, 0xa4, 0x4c, 0xd8, 0x95, 0xe3, 0xc7, 0xbb, 0x32, 0x21, 0x90, 0x64, 0x52, 0x32, 0xeb, 0x26, 0xd3, 0x4f, 0xf0, 0x8e, 0x27, 0x40, 0xea, 0xed, 0xdb, 0xf5, 0xc4 }, + { 0x76, 0x99, 0x64, 0x70, 0xf4, 0x50, 0xc8, 0xcc, 0x4a, 0x5a, 0xa5, 0x0f, 0xeb, 0x2d, 0xc7, 0x0e, 0x73, 0xd0, 0x65, 0x7d, 0xc3, 0xce, 0x73, 0x03, 0x20, 0x2f, 0xad, 0x65, 0xfd, 0x12, 0xe4, 0x7f, + 0xfd, 0x45, 0x3a, 0x6e, 0xc5, 0x9a, 0x06, 0x67, 0x0e, 0xa6, 0x7b, 0x21, 0x49, 0x2d, 0x01, 0x1b, 0x8e, 0x03, 0x6e, 0x10, 0x08, 0x0c, 0x68, 0xd9, 0x60, 0x47, 0xa4, 0xe2, 0x52, 0xfd, 0x3c, 0xf4 }, + { 0xa3, 0xe2, 0x5f, 0x16, 0x39, 0x78, 0x96, 0xf7, 0x47, 0x6f, 0x93, 0x5d, 0x27, 0x7b, 0x58, 0xe0, 0xc5, 0xdb, 0x71, 0x7d, 0xa9, 0x6f, 0xf8, 0x8b, 0x69, 0xdd, 0x50, 0xea, 0x91, 0x0d, 0x66, 0x77, + 0xaf, 0x8f, 0xd5, 0x9f, 0x8a, 0x26, 0x69, 0x4c, 0x64, 0x37, 0x62, 0x81, 0x6f, 0x05, 0x9a, 0x08, 0x0d, 0xe1, 0x69, 0x24, 0x77, 0x3f, 0x50, 0xb2, 0x49, 0x4d, 0x93, 0xef, 0x2e, 0x87, 0xff, 0xde }, + { 0xb3, 0x32, 0xe2, 0x67, 0x79, 0x32, 0x5f, 0x64, 0x47, 0x49, 0x1c, 0xd3, 0x8f, 0x95, 0x44, 0xfd, 0x4c, 0x7e, 0xbf, 0x6b, 0xb7, 0xaf, 0x2c, 0xdd, 0x8f, 0xa5, 0xd8, 0x2f, 0xbf, 0xa0, 0x8a, 0x6b, + 0x58, 0x25, 0xc9, 0x12, 0x23, 0x6f, 0xe6, 0x05, 0xa8, 0xd0, 0x68, 0x6e, 0x0c, 0xee, 0x70, 0xe4, 0xa3, 0x86, 0x51, 0x04, 0x6d, 0xca, 0xd5, 0xed, 0xcf, 0x74, 0x1d, 0x60, 0x9e, 0x86, 0x2d, 0x05 }, + { 0x91, 0xf4, 0x5f, 0x4a, 0xcb, 0xd8, 0xfd, 0x5f, 0xb9, 0x3d, 0x04, 0xb8, 0xec, 0x35, 0x85, 0x4f, 0x58, 0x20, 0xd1, 0x1f, 0x47, 0xc4, 0xf4, 0xcb, 0x21, 0x4e, 0x9a, 0xf1, 0x6e, 0xbf, 0xe3, 0xd3, + 0x62, 0xe3, 0x82, 0xf6, 0xba, 0xa8, 0xdf, 0x92, 0xe2, 0x3c, 0xe5, 0xf0, 0x16, 0x8a, 0xeb, 0xa4, 0xbb, 0xc7, 0x81, 0xaf, 0x15, 0x19, 0x87, 0x5f, 0xb7, 0xe0, 0x4c, 0x12, 0xff, 0x2c, 0xa9, 0xc8 }, + { 0xaf, 0x85, 0xe0, 0x36, 0x43, 0xdf, 0x41, 0x17, 0xda, 0xde, 0x5e, 0xb6, 0x33, 0xd0, 0xce, 0x62, 0x70, 0x5f, 0x85, 0x24, 0x6c, 0x3e, 0x1b, 0xe1, 0x52, 0xc1, 0x9b, 0x1c, 0xcd, 0x61, 0x80, 0x9c, 0xa0, 0xe8, 0x18, 0xee, 0x40, 0x91, 0x93, 0x82, 0xdb, 0x33, 0x44, 0xff, 0xd4, 0xf6, 0x6f, 0x5d, + 0xf0, 0x0e, 0x92, 0x92, 0x81, 0x55, 0x46, 0x06, 0xac, 0x58, 0x81, 0x3b, 0x04, 0xc7, 0xf7, 0x0d, 0xd2, 0x0c, 0x08, 0x6d, 0x46, 0xdb, 0x43, 0x28, 0x31, 0xd8, 0xcd, 0x87, 0x50, 0xbb, 0xd3, 0x07, 0xf5, 0x72, 0x0b, 0x15, 0x7c, 0x16, 0xab, 0x03, 0xd9, 0x4b, 0x07, 0x38, 0x97, 0xe8, 0xd6, 0xb5 }, + { 0x93, 0xff, 0x6d, 0xc3, 0x62, 0xf7, 0xcc, 0x20, 0x95, 0xc2, 0x2f, 0x7d, 0x1d, 0x9b, 0xd1, 0x63, 0xfc, 0x61, 0x47, 0xb3, 0x22, 0x0f, 0xca, 0xb0, 0x16, 0xcf, 0x29, 0x53, 0x46, 0x97, 0xb1, 0x36, 0x46, 0xac, 0x48, 0x13, 0x92, 0xe4, 0x46, 0x68, 0xcf, 0x09, 0x4e, 0xfa, 0x59, 0x45, 0x24, 0x08, + 0xdb, 0xb4, 0x6f, 0x20, 0x55, 0x12, 0xd9, 0x75, 0x9d, 0x8e, 0x0b, 0xf8, 0x63, 0xe0, 0xf9, 0x01, 0xd2, 0x0c, 0x08, 0x6d, 0x46, 0xdb, 0x43, 0x28, 0x31, 0xd8, 0xcd, 0x87, 0x50, 0xbb, 0xd3, 0x07, 0xf5, 0x72, 0x0b, 0x15, 0x7c, 0x16, 0xab, 0x03, 0xd9, 0x4b, 0x07, 0x38, 0x97, 0xe8, 0xd6, 0xb5 } }, + { { 0x14, 0x35, 0xa6, 0x7d, 0xc1, 0xb5, 0x71, 0xca, 0x42, 0x50, 0x90, 0xa7, 0x72, 0x85, 0xbe, 0x78, 0x7a, 0x5f, 0x83, 0x1e, 0xbe, 0xef, 0x6a, 0xbe, 0x48, 0xc5, 0x68, 0x14, 0x0c, 0xf7, 0x44, 0x5c, + 0x2e, 0xfd, 0x1b, 0xcc, 0xee, 0x09, 0x23, 0x82, 0x31, 0xad, 0xaf, 0x4b, 0x73, 0x9c, 0xf2, 0x88, 0x3c, 0xf3, 0xb5, 0x43, 0x8b, 0x53, 0xf9, 0xac, 0x17, 0x86, 0x1c, 0xc2, 0x53, 0x43, 0xec, 0x03 }, + { 0x7b, 0x36, 0x6c, 0xcc, 0xb5, 0xb2, 0x23, 0x3d, 0x7c, 0xe5, 0xe7, 0xcf, 0x06, 0xe2, 0x32, 0x0b, 0xc5, 0x3b, 0x7f, 0x86, 0x40, 0xfc, 0xaf, 0xba, 0x94, 0xe0, 0x88, 0x58, 0x5b, 0xac, 0xe8, 0xc3, + 0xe8, 0xc3, 0xdf, 0xc4, 0x45, 0x29, 0xe8, 0xf0, 0x1c, 0x10, 0x0d, 0x50, 0x81, 0x29, 0x30, 0xa8, 0x27, 0xb5, 0x3e, 0xb8, 0x25, 0xf1, 0x17, 0x30, 0xc6, 0x05, 0xe3, 0x3e, 0x45, 0x38, 0xa8, 0x3c }, + { 0xce, 0xd9, 0x45, 0x28, 0xb0, 0xce, 0xa5, 0x47, 0xa8, 0x29, 0x32, 0x76, 0x99, 0x73, 0x8d, 0x74, 0xf9, 0xed, 0x0a, 0xd0, 0xf1, 0xd8, 0x7e, 0x44, 0x63, 0x9e, 0x9a, 0xcf, 0x7c, 0x35, 0x8a, 0x29, + 0xbb, 0x71, 0x66, 0x8d, 0xa7, 0xfc, 0x05, 0x3d, 0xd4, 0x4b, 0x65, 0x20, 0xf5, 0xa4, 0x64, 0xd8, 0x9d, 0x16, 0x80, 0x9c, 0xb2, 0x3c, 0x3e, 0xd4, 0x9d, 0x09, 0x88, 0x8e, 0xbb, 0x58, 0xf8, 0x77 }, + { 0xe1, 0x29, 0xb3, 0x16, 0xe6, 0xa0, 0xdb, 0x64, 0x08, 0x36, 0xdc, 0x33, 0xad, 0x8b, 0x30, 0x26, 0x17, 0x56, 0xd7, 0x34, 0x17, 0xd1, 0xdd, 0x23, 0x38, 0x58, 0x25, 0x01, 0x42, 0x5a, 0x9d, 0x18, + 0x3e, 0xac, 0x31, 0xfa, 0x43, 0x28, 0xc4, 0x65, 0xfb, 0x30, 0x2f, 0x8c, 0x16, 0x52, 0x32, 0x1b, 0x19, 0xb7, 0x31, 0xf6, 0x67, 0xa7, 0xd8, 0xed, 0x9a, 0xa3, 0x95, 0x01, 0xd7, 0xb9, 0xe7, 0xcc }, + { 0x81, 0x2d, 0x11, 0xa9, 0x11, 0xf1, 0x22, 0xe2, 0x67, 0x70, 0xc4, 0xba, 0x34, 0xa1, 0x75, 0x8c, 0xf6, 0x0c, 0x63, 0xe7, 0x01, 0x3c, 0x64, 0x6c, 0xe8, 0xd0, 0xf8, 0x8e, 0x88, 0xdf, 0x5c, 0x61, + 0x68, 0x5d, 0x1f, 0xeb, 0x83, 0x1f, 0x40, 0xb8, 0xa8, 0x56, 0x57, 0x26, 0x81, 0x2c, 0xa3, 0x0e, 0x48, 0x4c, 0x45, 0x4d, 0x0d, 0x3d, 0x6e, 0x99, 0x52, 0xbd, 0x0b, 0xd8, 0x05, 0xc5, 0xf9, 0x61 }, + { 0x92, 0x45, 0xbe, 0xe6, 0xb4, 0x7a, 0xfa, 0x28, 0xd4, 0x5b, 0x6b, 0x17, 0xc6, 0x13, 0x61, 0x5d, 0x5f, 0xd7, 0x90, 0xbb, 0x89, 0x35, 0x7a, 0x02, 0x50, 0x57, 0x56, 0x5f, 0x19, 0xb5, 0xb6, 0xc5, 0x77, 0x1e, 0x1b, 0xc0, 0xd7, 0x7a, 0x29, 0xbd, 0xe7, 0x24, 0x01, 0x2d, 0x37, 0xc0, 0x38, 0x6f, + 0xc8, 0x35, 0xa1, 0x1b, 0xe0, 0xea, 0x16, 0xad, 0xbc, 0xdc, 0xd4, 0x8d, 0x4e, 0x71, 0xdb, 0x05, 0x9e, 0xb5, 0x53, 0x6b, 0x5c, 0xf1, 0x7d, 0x15, 0x8b, 0xd7, 0xc7, 0x8b, 0x89, 0x9d, 0xfd, 0x28, 0x7c, 0xa1, 0x31, 0xe2, 0xf0, 0x2c, 0x3a, 0x8d, 0x0e, 0x23, 0x85, 0x4e, 0xf0, 0xd1, 0xc0, 0x83 }, + { 0x7b, 0x88, 0xeb, 0x45, 0x1c, 0x7f, 0xfd, 0xbe, 0xba, 0xac, 0x53, 0x28, 0x59, 0xe8, 0xad, 0x28, 0xf1, 0x97, 0x2d, 0x6c, 0x31, 0xa6, 0xae, 0x47, 0x10, 0x69, 0x68, 0x55, 0xa6, 0x9c, 0x03, 0x62, 0xb7, 0x2f, 0x31, 0x46, 0x2a, 0x2b, 0x98, 0xdd, 0xe9, 0xf9, 0xfe, 0x77, 0x71, 0x41, 0x54, 0xf8, + 0x59, 0x02, 0x7a, 0xe3, 0x45, 0x67, 0xb6, 0xf7, 0x94, 0x31, 0x3e, 0x62, 0x62, 0x2a, 0xf9, 0x0a, 0x9e, 0xb5, 0x53, 0x6b, 0x5c, 0xf1, 0x7d, 0x15, 0x8b, 0xd7, 0xc7, 0x8b, 0x89, 0x9d, 0xfd, 0x28, 0x7c, 0xa1, 0x31, 0xe2, 0xf0, 0x2c, 0x3a, 0x8d, 0x0e, 0x23, 0x85, 0x4e, 0xf0, 0xd1, 0xc0, 0x83 } }, + { { 0x27, 0x4d, 0x84, 0x08, 0x95, 0x84, 0xc8, 0xeb, 0x1c, 0x9a, 0x0f, 0xca, 0x09, 0x6f, 0x48, 0x8b, 0x2b, 0x06, 0xa0, 0xae, 0xf2, 0xe3, 0x8a, 0xfe, 0xd7, 0x52, 0x4b, 0xf2, 0xc6, 0x7c, 0xc1, 0x55, + 0x87, 0x2e, 0x5a, 0xb4, 0xc2, 0x43, 0x0a, 0x0d, 0xd0, 0x00, 0xa8, 0xe1, 0x46, 0x68, 0x79, 0xd8, 0x8c, 0x01, 0x36, 0xb7, 0x5a, 0x61, 0x04, 0xe9, 0x7e, 0xbb, 0xc9, 0xee, 0xaa, 0x12, 0x13, 0xda }, + { 0x78, 0x66, 0xd0, 0xa2, 0x50, 0x82, 0x8d, 0xb0, 0xa0, 0x20, 0xac, 0xa4, 0xb6, 0xa0, 0x31, 0xf7, 0x7d, 0x93, 0x37, 0x67, 0xbb, 0x60, 0xa2, 0x1e, 0x36, 0xce, 0x3d, 0x48, 0x1d, 0x79, 0x99, 0xa5, + 0x19, 0xd8, 0x89, 0x1b, 0xcb, 0x14, 0x87, 0xb7, 0x62, 0xfd, 0xd2, 0xef, 0xbb, 0x13, 0x41, 0x4d, 0xf1, 0x77, 0x5c, 0x7f, 0x6c, 0x3b, 0x94, 0x7d, 0xb4, 0xba, 0x87, 0x3e, 0xc8, 0xe1, 0x3c, 0x0a }, + { 0xd9, 0x9e, 0x14, 0x89, 0xd6, 0xf8, 0x49, 0xa2, 0xe2, 0x19, 0xfe, 0x94, 0xaa, 0xf7, 0x35, 0xf9, 0x4a, 0xf8, 0xf3, 0x18, 0x68, 0x96, 0x47, 0xc6, 0x23, 0x7c, 0xb0, 0x53, 0xcb, 0xd8, 0x90, 0x31, + 0xb7, 0x50, 0x0e, 0x06, 0xc3, 0x84, 0x75, 0xf1, 0xac, 0x16, 0x4d, 0xc1, 0xbe, 0xf1, 0x80, 0x33, 0x47, 0x56, 0x6f, 0x33, 0x94, 0x5c, 0x81, 0x03, 0x4c, 0x2f, 0x6d, 0xac, 0x73, 0xba, 0x91, 0x3c }, + { 0x2f, 0xa9, 0xb6, 0xe8, 0x73, 0xe2, 0xef, 0x6d, 0x6d, 0xd7, 0x2e, 0xa0, 0x51, 0x61, 0x24, 0x81, 0x8c, 0xa8, 0x47, 0x40, 0xe1, 0xc7, 0x75, 0x79, 0xc8, 0xec, 0xb2, 0x23, 0x41, 0xad, 0x61, 0x3b, + 0xea, 0x8a, 0xdf, 0x63, 0xed, 0xe1, 0x8e, 0x50, 0x70, 0x6e, 0x86, 0xed, 0xb0, 0xba, 0x27, 0x48, 0x8e, 0xb9, 0x63, 0x39, 0x78, 0x58, 0x4f, 0x1e, 0xbc, 0x45, 0xf3, 0xf2, 0x3a, 0x73, 0x9b, 0x8c }, + { 0xad, 0x42, 0xc5, 0x84, 0xca, 0xe1, 0xe1, 0x23, 0x2a, 0x73, 0x15, 0x3c, 0x9a, 0xfe, 0x85, 0x8d, 0xa3, 0x2c, 0xcf, 0x46, 0x8d, 0x7f, 0x1c, 0x61, 0xd7, 0x0e, 0xb1, 0xa6, 0xb4, 0xae, 0xab, 0x63, + 0xc4, 0x0e, 0xf2, 0xa0, 0x5d, 0xa6, 0xf3, 0x5d, 0x35, 0x41, 0xea, 0x03, 0x91, 0xb1, 0x3a, 0x07, 0xe6, 0xed, 0x6c, 0x8c, 0xcb, 0x75, 0x27, 0xf1, 0x26, 0x58, 0xf0, 0x62, 0x57, 0xe4, 0x33, 0x00 }, + { 0x1f, 0xed, 0x53, 0xc6, 0xef, 0x38, 0x26, 0xa4, 0x18, 0x88, 0x8f, 0x5c, 0x49, 0x1c, 0x15, 0x7d, 0x77, 0x90, 0x06, 0x39, 0xe0, 0x7c, 0x25, 0xed, 0x79, 0x05, 0x66, 0xe0, 0x5e, 0x94, 0xe3, 0x46, 0x6f, 0x96, 0xd8, 0xc1, 0x11, 0xa4, 0x11, 0x6f, 0x78, 0x42, 0x8e, 0x89, 0xc7, 0xc3, 0xed, 0xd2, + 0x9e, 0x68, 0x47, 0x79, 0x89, 0x23, 0x70, 0x14, 0x21, 0x60, 0x2d, 0xfe, 0x37, 0x4b, 0xc8, 0x0a, 0x16, 0x73, 0x7c, 0xc4, 0x55, 0x3f, 0x25, 0x04, 0x08, 0x75, 0x74, 0x68, 0xbc, 0xe4, 0x3a, 0xae, 0x4c, 0x0e, 0xd2, 0x85, 0xa1, 0xbc, 0x81, 0xc0, 0xc9, 0xfe, 0x9a, 0x44, 0x7b, 0x83, 0xdf, 0xc7 }, + { 0x27, 0x77, 0x97, 0x84, 0x0f, 0x2d, 0x8d, 0x33, 0xb8, 0x4e, 0xdb, 0x8b, 0xea, 0x58, 0x52, 0x88, 0x95, 0x88, 0x55, 0x5f, 0xb8, 0xc4, 0xc9, 0xd6, 0x1f, 0x1e, 0xee, 0x60, 0xb5, 0xeb, 0x78, 0x72, 0xb5, 0xe5, 0x22, 0x2b, 0x7f, 0x5e, 0xc7, 0x9b, 0x29, 0x55, 0x8e, 0x2a, 0xfc, 0x65, 0x55, 0x4a, + 0x02, 0xad, 0x64, 0x06, 0xd4, 0x25, 0xe1, 0x96, 0x6f, 0xee, 0x96, 0xcd, 0x29, 0xc6, 0x64, 0x00, 0x16, 0x73, 0x7c, 0xc4, 0x55, 0x3f, 0x25, 0x04, 0x08, 0x75, 0x74, 0x68, 0xbc, 0xe4, 0x3a, 0xae, 0x4c, 0x0e, 0xd2, 0x85, 0xa1, 0xbc, 0x81, 0xc0, 0xc9, 0xfe, 0x9a, 0x44, 0x7b, 0x83, 0xdf, 0xc7 } }, + { { 0x5e, 0xc5, 0x5b, 0x9c, 0xdb, 0x14, 0x05, 0x18, 0x6b, 0xe2, 0x1d, 0x16, 0x77, 0x22, 0x0e, 0xd2, 0xe4, 0x57, 0x82, 0x6e, 0x5b, 0xc5, 0x6a, 0xb9, 0x34, 0x20, 0xdb, 0x72, 0xe2, 0xe1, 0xeb, 0x1b, + 0x34, 0x00, 0x04, 0xbf, 0x83, 0xf6, 0x4f, 0x12, 0x45, 0x08, 0xf0, 0x95, 0x2a, 0xdc, 0x3a, 0x14, 0xb3, 0x29, 0x0b, 0x99, 0xcd, 0x73, 0x31, 0xbd, 0x04, 0xbb, 0x49, 0x1c, 0xde, 0xcf, 0x09, 0x9e }, + { 0x15, 0x80, 0x3e, 0x2a, 0xfb, 0xc0, 0x8d, 0x62, 0x19, 0x27, 0x83, 0x04, 0xcc, 0xf5, 0xd1, 0xbb, 0x40, 0x41, 0xbe, 0x93, 0x59, 0x6e, 0x27, 0x6d, 0x95, 0x24, 0x0a, 0x07, 0x27, 0x86, 0x10, 0x75, + 0xf7, 0x0a, 0x11, 0xfc, 0x53, 0xd0, 0x4c, 0x15, 0xf8, 0x6e, 0x22, 0x3f, 0xeb, 0x12, 0x97, 0x8a, 0x3d, 0x69, 0xd8, 0x96, 0xc9, 0x53, 0x10, 0x9c, 0x02, 0x95, 0xe4, 0xd3, 0x1a, 0xd5, 0x43, 0x82 }, + { 0x40, 0x09, 0x2c, 0x17, 0x7e, 0xba, 0xce, 0x1f, 0xfc, 0xc1, 0x8e, 0xc3, 0x1c, 0xa2, 0x34, 0x52, 0x78, 0x16, 0x23, 0x71, 0x82, 0x40, 0xf8, 0x6d, 0x67, 0x65, 0x67, 0x50, 0x53, 0xd9, 0xc8, 0x5e, + 0x7e, 0x8a, 0x98, 0xa3, 0xc6, 0x2a, 0x4d, 0x27, 0xf3, 0xb9, 0xbb, 0xae, 0x43, 0x29, 0x6e, 0x02, 0x1c, 0xe9, 0x01, 0xd6, 0xcd, 0xd8, 0x91, 0x44, 0x95, 0x2b, 0x9e, 0xa5, 0x4f, 0xd0, 0x00, 0xb9 }, + { 0x3a, 0xe8, 0x3d, 0xb3, 0x32, 0xdc, 0xc2, 0xc8, 0xe3, 0x36, 0x2f, 0xc9, 0x30, 0x3a, 0xc0, 0x76, 0x56, 0xd3, 0x0b, 0x06, 0xbe, 0x8f, 0xe7, 0xf1, 0x66, 0x61, 0x25, 0x42, 0x28, 0xdc, 0x08, 0x81, + 0x84, 0x3a, 0x57, 0x96, 0x27, 0xa6, 0xcf, 0xd6, 0x8f, 0x35, 0xa2, 0xc3, 0x76, 0x86, 0x4f, 0xcf, 0x5f, 0xa1, 0x85, 0x28, 0x4f, 0x4a, 0x3a, 0xbb, 0x5c, 0x25, 0x4b, 0xcc, 0x46, 0xfe, 0xf2, 0x04 }, + { 0x62, 0xc8, 0xa2, 0x0a, 0x59, 0xb8, 0x97, 0xd2, 0x68, 0x94, 0x00, 0x3b, 0x01, 0xac, 0x91, 0x6e, 0x97, 0x8e, 0x08, 0xe3, 0xfe, 0x9f, 0x9e, 0x9f, 0x4b, 0xcc, 0x5d, 0x1d, 0xb9, 0xbf, 0x07, 0x83, + 0xfe, 0x51, 0x2a, 0xdf, 0x79, 0x2e, 0x07, 0xc9, 0x98, 0x9b, 0xbe, 0xb6, 0xe4, 0x0a, 0x20, 0x44, 0x86, 0xea, 0xb1, 0x61, 0x58, 0x11, 0x32, 0x8e, 0x7b, 0xb9, 0x67, 0x2d, 0xf0, 0x78, 0xb2, 0x93 }, + { 0x1a, 0x65, 0xb3, 0x6f, 0xa2, 0x45, 0x29, 0x53, 0xd7, 0x23, 0x4d, 0xff, 0x8e, 0xe9, 0xb9, 0xef, 0x16, 0xa0, 0xdd, 0x48, 0xdf, 0x70, 0xd2, 0xe1, 0x56, 0xca, 0xd1, 0xd0, 0x4a, 0x9d, 0x63, 0x92, 0x2b, 0xfd, 0x7b, 0x87, 0x39, 0x3c, 0x12, 0xc7, 0xe5, 0x91, 0x31, 0x95, 0x78, 0xc4, 0x58, 0x95, + 0x89, 0x6e, 0x2c, 0x90, 0xb4, 0x0b, 0xb2, 0xfe, 0x52, 0xc0, 0x86, 0xc4, 0x2e, 0x56, 0x97, 0x0c, 0x20, 0xf2, 0xbc, 0x6a, 0x9b, 0x89, 0xfb, 0xe9, 0x85, 0x95, 0xd6, 0x22, 0x5e, 0x4d, 0x6d, 0x83, 0x9d, 0xf4, 0xbe, 0x66, 0x05, 0x32, 0xb6, 0xe2, 0xf1, 0x96, 0x42, 0xa4, 0xc8, 0x8c, 0x1b, 0xec }, + { 0x43, 0x85, 0xff, 0xb9, 0xcf, 0x04, 0x83, 0x40, 0x70, 0x3a, 0x9c, 0x48, 0xb4, 0xc2, 0x99, 0x3b, 0xa0, 0x39, 0xf1, 0x39, 0x58, 0x7f, 0xd2, 0x49, 0x94, 0x3c, 0xc3, 0xe1, 0xb6, 0x56, 0x38, 0x55, 0x6f, 0xb5, 0x1a, 0x90, 0xa2, 0x04, 0x2f, 0x19, 0xf8, 0xb1, 0x65, 0x5a, 0xad, 0xcd, 0x1c, 0x56, + 0x42, 0x38, 0xc2, 0x52, 0x09, 0xd6, 0x41, 0x98, 0x5d, 0x5f, 0xa5, 0xe7, 0xc2, 0x55, 0xa1, 0x09, 0x20, 0xf2, 0xbc, 0x6a, 0x9b, 0x89, 0xfb, 0xe9, 0x85, 0x95, 0xd6, 0x22, 0x5e, 0x4d, 0x6d, 0x83, 0x9d, 0xf4, 0xbe, 0x66, 0x05, 0x32, 0xb6, 0xe2, 0xf1, 0x96, 0x42, 0xa4, 0xc8, 0x8c, 0x1b, 0xec } }, + { { 0xf2, 0x4a, 0x96, 0x57, 0xc3, 0x2f, 0xe6, 0x9f, 0xed, 0x7f, 0xcc, 0xe9, 0xea, 0xbe, 0xd2, 0x23, 0x4e, 0x47, 0x13, 0xd9, 0x53, 0x19, 0x31, 0x14, 0x0a, 0xd3, 0x9b, 0x95, 0xa7, 0x9c, 0x88, 0x5e, + 0x08, 0xb2, 0x16, 0xda, 0x45, 0x61, 0x1d, 0x6b, 0xdf, 0xb1, 0x14, 0x0c, 0x66, 0xfd, 0x3a, 0xbe, 0x25, 0xdc, 0xfd, 0xcd, 0xcc, 0x5e, 0x28, 0x77, 0x5a, 0xa9, 0x8b, 0x84, 0x77, 0x26, 0x9d, 0xa6 }, + { 0xea, 0xde, 0x4d, 0xab, 0x09, 0x02, 0xbf, 0x90, 0xf8, 0xae, 0x8b, 0x50, 0x01, 0xb2, 0x9d, 0x7c, 0x0a, 0x3b, 0x60, 0xda, 0x34, 0xa9, 0xbb, 0x4d, 0xa5, 0x53, 0x18, 0x65, 0xec, 0xaa, 0xc9, 0x29, + 0xb2, 0xf7, 0x74, 0x14, 0x63, 0x5f, 0x88, 0xcf, 0x4e, 0x70, 0x1b, 0x11, 0x64, 0x73, 0x15, 0x6b, 0x5a, 0x8c, 0xb8, 0x4e, 0x0f, 0x83, 0xae, 0x4b, 0x5c, 0x52, 0x1c, 0x6a, 0x0f, 0x54, 0x77, 0xc8 }, + { 0xae, 0xff, 0x55, 0xbf, 0x78, 0xb5, 0xde, 0x33, 0xeb, 0x87, 0xea, 0x13, 0x7d, 0x36, 0x22, 0x06, 0x32, 0xc4, 0x7e, 0xca, 0x65, 0x37, 0xcc, 0x83, 0x0e, 0xda, 0x54, 0xb3, 0xd2, 0xe6, 0xe7, 0x7f, + 0xe1, 0x90, 0x11, 0x25, 0x16, 0x83, 0x25, 0x43, 0xb4, 0x38, 0x06, 0xbb, 0x6c, 0x62, 0x7d, 0x84, 0x1f, 0xf3, 0x7b, 0xeb, 0xae, 0x50, 0xd8, 0xfb, 0xb9, 0xf2, 0xf9, 0xc3, 0x6f, 0x59, 0xb7, 0xb0 }, + { 0x95, 0x15, 0x83, 0x19, 0x56, 0x9c, 0x11, 0xd8, 0x31, 0x87, 0x1d, 0xe3, 0x3f, 0x07, 0x89, 0xb2, 0xcb, 0x81, 0xf0, 0xeb, 0x0b, 0x1e, 0x74, 0x08, 0xa2, 0x4a, 0x0e, 0x82, 0xc6, 0x45, 0x8c, 0x32, + 0xb4, 0x8f, 0xfd, 0x76, 0xeb, 0x5e, 0xc7, 0x62, 0xdc, 0xcb, 0xee, 0xad, 0xcf, 0xcf, 0xea, 0x33, 0x9d, 0xb0, 0x02, 0x64, 0x66, 0x77, 0x14, 0x97, 0x0c, 0x6e, 0x79, 0xe8, 0x58, 0x32, 0x0f, 0xe6 }, + { 0xcb, 0x2f, 0xaf, 0x53, 0xd8, 0x41, 0x48, 0x41, 0x6f, 0x36, 0x78, 0x80, 0x83, 0x5c, 0x0d, 0x4c, 0x1b, 0xf4, 0x39, 0xe0, 0x34, 0x4f, 0xc2, 0xb2, 0x4e, 0xf0, 0xac, 0xc2, 0xf8, 0x15, 0x7a, 0x81, + 0x9f, 0x46, 0x2b, 0xe3, 0xb9, 0x39, 0x05, 0x89, 0xa2, 0xda, 0x1a, 0x63, 0x51, 0xb4, 0x78, 0x0f, 0xfe, 0x2f, 0x9d, 0xce, 0x99, 0x38, 0xa9, 0x7e, 0xcb, 0x80, 0x57, 0x9f, 0xa2, 0x28, 0x0f, 0x6a }, + { 0x1b, 0xec, 0x67, 0x50, 0xd1, 0x28, 0x65, 0x55, 0xb8, 0xde, 0x3b, 0x2e, 0x1e, 0x33, 0xd8, 0x1b, 0xba, 0x2e, 0x78, 0x6a, 0xb8, 0x0b, 0x8c, 0xa0, 0x55, 0x34, 0x25, 0x90, 0x9a, 0xe2, 0xf5, 0xaa, 0x95, 0x0c, 0x6f, 0x2a, 0xb0, 0x92, 0x1d, 0x48, 0x5b, 0x56, 0x8c, 0x82, 0x8f, 0xa7, 0x15, 0x75, + 0x26, 0x61, 0x85, 0xc8, 0x7d, 0xda, 0xf5, 0x2a, 0xf3, 0x3c, 0x34, 0xc1, 0x20, 0x67, 0xbb, 0x04, 0xec, 0x7c, 0xe2, 0xcb, 0x31, 0xcf, 0x23, 0xda, 0x5d, 0x8a, 0x05, 0x00, 0x9b, 0x23, 0x34, 0xd0, 0xed, 0x56, 0x10, 0x0a, 0x90, 0x6b, 0x73, 0x26, 0x6b, 0xf0, 0xd7, 0xbc, 0xd8, 0xc7, 0x89, 0xc8 }, + { 0x90, 0x43, 0x54, 0x87, 0x44, 0x00, 0x07, 0xca, 0xa8, 0x2b, 0xec, 0x55, 0xa0, 0xd2, 0x8c, 0x07, 0x03, 0xaa, 0x61, 0x1a, 0x7d, 0x0f, 0x90, 0x13, 0x67, 0x99, 0x46, 0x20, 0xcd, 0x70, 0xcb, 0xa7, 0x96, 0xdf, 0x0c, 0x13, 0xc4, 0x41, 0x11, 0xd6, 0xc3, 0x33, 0x02, 0x96, 0x4f, 0x1d, 0xbd, 0x06, + 0xa9, 0xa1, 0x31, 0x0a, 0xc3, 0xdf, 0x6d, 0x52, 0x6c, 0xc6, 0xbe, 0xc5, 0xb6, 0x2a, 0xb1, 0x0f, 0xec, 0x7c, 0xe2, 0xcb, 0x31, 0xcf, 0x23, 0xda, 0x5d, 0x8a, 0x05, 0x00, 0x9b, 0x23, 0x34, 0xd0, 0xed, 0x56, 0x10, 0x0a, 0x90, 0x6b, 0x73, 0x26, 0x6b, 0xf0, 0xd7, 0xbc, 0xd8, 0xc7, 0x89, 0xc8 } }, + { { 0x4f, 0x3a, 0xdd, 0x0f, 0xcf, 0x7f, 0x27, 0xda, 0x27, 0xc4, 0xa6, 0x2b, 0x6b, 0xd1, 0x9f, 0x59, 0x73, 0x5f, 0xd4, 0xb7, 0xf0, 0x86, 0x16, 0xc9, 0xdd, 0xa6, 0xf9, 0x9b, 0x17, 0xb2, 0xb9, 0x71, + 0xe7, 0x4c, 0xa1, 0x17, 0x79, 0xe0, 0xcc, 0xae, 0x10, 0xec, 0x28, 0x3a, 0x09, 0xf2, 0x8b, 0x34, 0x9c, 0xac, 0x16, 0x2a, 0xa9, 0x21, 0xe8, 0xa7, 0x18, 0xc0, 0xc4, 0x9f, 0x30, 0xa0, 0x25, 0x62 }, + { 0x23, 0x4c, 0xd4, 0xae, 0x52, 0x30, 0xf6, 0x64, 0xb9, 0xe1, 0x47, 0xca, 0xf8, 0xf3, 0x3a, 0x6b, 0x8b, 0xf3, 0x29, 0xe2, 0x9b, 0x5d, 0xbb, 0x0a, 0x60, 0x52, 0x03, 0x40, 0x53, 0x5c, 0x9e, 0x35, + 0x03, 0xd4, 0xec, 0xd7, 0x67, 0xf4, 0x92, 0xd2, 0x98, 0x96, 0xf2, 0xa7, 0xf4, 0x25, 0x6a, 0x80, 0x9c, 0x75, 0xc6, 0xf2, 0x1f, 0x67, 0x11, 0x00, 0x0d, 0xda, 0x1e, 0xb2, 0x58, 0xa7, 0x8c, 0x39 }, + { 0x55, 0x1b, 0x80, 0xbb, 0xf3, 0xc5, 0x1a, 0x84, 0x34, 0xf5, 0x0a, 0x8a, 0x8a, 0xe1, 0x8c, 0xea, 0xa6, 0xfb, 0xd0, 0x26, 0xc9, 0xa2, 0x30, 0x37, 0x3e, 0xba, 0x98, 0xfe, 0x81, 0x8a, 0x52, 0x37, + 0x0b, 0x74, 0x4e, 0x3d, 0x26, 0x8f, 0x82, 0x4b, 0xc0, 0x6a, 0x01, 0x10, 0x91, 0x8f, 0x89, 0xb5, 0x62, 0x3f, 0x1e, 0x70, 0xcc, 0x25, 0x77, 0x39, 0x74, 0x88, 0xdd, 0xbc, 0xbe, 0x72, 0x08, 0x63 }, + { 0xe2, 0x9a, 0x46, 0xd2, 0x74, 0xdc, 0x0f, 0x8a, 0xa3, 0xbd, 0x20, 0xb7, 0xc7, 0xd9, 0x83, 0x4b, 0x58, 0xa6, 0xe3, 0xbd, 0xc5, 0x00, 0xb6, 0x18, 0x04, 0x25, 0x81, 0xbd, 0x99, 0xb3, 0xb1, 0x2a, + 0x7a, 0x68, 0x6d, 0xe1, 0x3e, 0x23, 0x8d, 0x29, 0x9e, 0x7a, 0x30, 0x56, 0x4c, 0x22, 0xb6, 0xf4, 0x7d, 0x7d, 0x4f, 0xfd, 0x76, 0xa5, 0x9d, 0x05, 0x41, 0x7c, 0x7a, 0x2d, 0x7b, 0xbe, 0xcf, 0x73 }, + { 0x7b, 0xae, 0x11, 0x86, 0x8a, 0x38, 0xbd, 0x56, 0x3c, 0xf3, 0x3c, 0x9c, 0x49, 0xa4, 0x68, 0x0f, 0x2b, 0xdf, 0xf2, 0xa1, 0xbc, 0xc2, 0xed, 0x08, 0x09, 0x96, 0xd0, 0x7e, 0x9b, 0xe3, 0x0a, 0x72, + 0x13, 0x03, 0xd4, 0x35, 0x0a, 0x94, 0x60, 0x09, 0x4a, 0xaa, 0xca, 0x35, 0x8e, 0xed, 0x12, 0xdd, 0x26, 0x8f, 0xf8, 0xa9, 0xa2, 0x8a, 0x7f, 0xac, 0xf3, 0x09, 0xc7, 0x22, 0xc5, 0x73, 0xec, 0xa0 }, + { 0xe9, 0xc5, 0x57, 0x0d, 0x85, 0xbf, 0x10, 0xe2, 0xd1, 0xf5, 0xd7, 0x22, 0xe9, 0x6a, 0x67, 0x8d, 0xd3, 0x9f, 0x1a, 0xef, 0x7f, 0xc0, 0x2b, 0xe1, 0xfd, 0x2c, 0xc2, 0x5f, 0x39, 0xf9, 0x34, 0xd0, 0x87, 0x94, 0x41, 0x8a, 0x65, 0xa5, 0x20, 0x48, 0xa4, 0x20, 0x5f, 0x7a, 0xc7, 0x37, 0x00, 0x60, + 0x59, 0x84, 0x2a, 0x1d, 0xff, 0x02, 0xc3, 0xe8, 0x20, 0xaa, 0x39, 0x13, 0xac, 0xf3, 0xd7, 0x05, 0xbd, 0xef, 0x11, 0x66, 0x71, 0xb8, 0x9f, 0x1e, 0xe5, 0xee, 0x2e, 0x37, 0xfb, 0x34, 0xed, 0xc5, 0xa4, 0x40, 0x6e, 0x38, 0x31, 0x0a, 0x1c, 0xaf, 0x0d, 0xd3, 0x98, 0xac, 0x12, 0x40, 0xea, 0x9c }, + { 0xc6, 0xcd, 0x7a, 0xbd, 0x14, 0xdb, 0xe4, 0xed, 0xbf, 0x46, 0x70, 0x23, 0xbd, 0xdb, 0xc3, 0xce, 0x60, 0xd5, 0x6b, 0x17, 0x4c, 0x23, 0xfa, 0x78, 0x05, 0xcc, 0x18, 0xed, 0x42, 0x03, 0xa5, 0xb7, 0xdf, 0x28, 0x0e, 0xd4, 0x5d, 0x31, 0xd8, 0xb9, 0xdc, 0xe9, 0xf6, 0x26, 0xc5, 0xe1, 0xb3, 0x80, + 0x0d, 0x62, 0xaf, 0x2d, 0xbd, 0xd6, 0xe4, 0xbb, 0x16, 0x82, 0xc8, 0x13, 0x2a, 0x6f, 0xb9, 0x06, 0xbd, 0xef, 0x11, 0x66, 0x71, 0xb8, 0x9f, 0x1e, 0xe5, 0xee, 0x2e, 0x37, 0xfb, 0x34, 0xed, 0xc5, 0xa4, 0x40, 0x6e, 0x38, 0x31, 0x0a, 0x1c, 0xaf, 0x0d, 0xd3, 0x98, 0xac, 0x12, 0x40, 0xea, 0x9c } }, + { { 0x6f, 0x46, 0xcd, 0x96, 0xc4, 0x13, 0xf4, 0x11, 0x62, 0x49, 0x8c, 0x5c, 0x78, 0x27, 0xef, 0xc8, 0xb9, 0xe2, 0x7d, 0xf1, 0x0d, 0x37, 0xf2, 0xfe, 0x85, 0x35, 0x82, 0x60, 0x23, 0xb6, 0x7b, 0x17, + 0xd2, 0x91, 0xef, 0x01, 0x9e, 0x99, 0x35, 0xab, 0xc7, 0xfb, 0xa1, 0xa3, 0x13, 0x44, 0x3f, 0x3c, 0x16, 0xcb, 0xd8, 0xf0, 0xbf, 0x9e, 0x65, 0x4d, 0x07, 0xe0, 0xfd, 0x8e, 0x32, 0x61, 0x95, 0xd5 }, + { 0xb7, 0x81, 0x16, 0x2f, 0xcb, 0xa4, 0x30, 0x4e, 0x6d, 0xf5, 0xf0, 0x3f, 0xfe, 0xd9, 0x81, 0x20, 0xa6, 0x0e, 0x2b, 0xa8, 0xc5, 0xed, 0x0d, 0x9a, 0x28, 0x9c, 0xe3, 0xa9, 0xb7, 0xbf, 0x87, 0x0f, + 0xa5, 0xf9, 0x33, 0xe7, 0xa6, 0x7f, 0x9b, 0xac, 0xb6, 0xcc, 0xaf, 0xfc, 0xa7, 0x4a, 0x4d, 0x36, 0x39, 0xa9, 0xb6, 0xf5, 0x09, 0xde, 0x8d, 0x37, 0x11, 0x07, 0xd1, 0x8a, 0xf5, 0x7b, 0x66, 0xe1 }, + { 0xcc, 0xe0, 0x07, 0x62, 0xbe, 0x10, 0x8c, 0x3a, 0xa2, 0x96, 0x5d, 0x11, 0xc7, 0xd5, 0x50, 0xc3, 0xbb, 0x55, 0x21, 0xc5, 0x40, 0x27, 0x7d, 0xdb, 0xad, 0xd2, 0x61, 0x2a, 0x42, 0x5f, 0x94, 0x23, + 0x77, 0x83, 0x3a, 0x99, 0xe8, 0xda, 0x79, 0x8c, 0x1e, 0xa8, 0x44, 0x04, 0xec, 0xf5, 0xd1, 0x55, 0x1e, 0x58, 0xf1, 0x6e, 0x4d, 0x27, 0xa4, 0x91, 0xec, 0x59, 0xc8, 0x17, 0x36, 0x58, 0x2a, 0x1f }, + { 0x6d, 0xf8, 0x73, 0xa3, 0x38, 0x61, 0x1d, 0x95, 0x09, 0xde, 0xe5, 0x26, 0x1b, 0x15, 0x16, 0xfb, 0xf5, 0x16, 0xa8, 0xf3, 0x9e, 0x3a, 0x6b, 0xb5, 0x8c, 0xee, 0xa8, 0x66, 0x79, 0xc3, 0x9e, 0xb4, + 0xe1, 0xc2, 0x85, 0x0e, 0x86, 0x10, 0x5a, 0x4e, 0x8b, 0x4c, 0x0a, 0x7a, 0xd8, 0x8a, 0x48, 0xf4, 0xa0, 0x79, 0x37, 0xe3, 0xa5, 0x90, 0x05, 0x5e, 0xbd, 0xa1, 0xf6, 0x09, 0x58, 0x9c, 0x6f, 0x09 }, + { 0x66, 0x47, 0x6d, 0x60, 0x06, 0x2d, 0x90, 0x8f, 0xae, 0x6c, 0x01, 0xe9, 0xb0, 0xf9, 0x6b, 0xa5, 0x4a, 0xe1, 0xdb, 0xd3, 0x64, 0x42, 0x37, 0x5c, 0x11, 0x40, 0x7a, 0xce, 0x4e, 0x83, 0xc3, 0x2c, + 0x2e, 0xd2, 0x67, 0x76, 0xfb, 0x8c, 0x5d, 0xab, 0xe8, 0xb8, 0xd6, 0x2b, 0xf8, 0x86, 0xff, 0x96, 0xf3, 0xa8, 0x0e, 0x2b, 0x1a, 0x68, 0xf5, 0xe4, 0xee, 0x49, 0xa6, 0x8c, 0x41, 0x1f, 0x97, 0xbf }, + { 0x81, 0x92, 0x4e, 0xc6, 0xab, 0x00, 0xdd, 0xf9, 0xf9, 0xb7, 0xe0, 0x0a, 0xa9, 0x3f, 0x0a, 0xf9, 0x32, 0x73, 0xf6, 0x22, 0xec, 0x95, 0xd9, 0x20, 0x8a, 0x3f, 0xeb, 0x0d, 0xc7, 0x79, 0x6f, 0xb3, 0x85, 0xf4, 0xe1, 0x11, 0xe1, 0xcc, 0xaa, 0x1b, 0xfd, 0xf3, 0x43, 0xff, 0x66, 0x73, 0x0f, 0x09, + 0xcc, 0xa4, 0x6c, 0xb8, 0x2a, 0x0f, 0x53, 0x58, 0x63, 0x32, 0x06, 0xd9, 0x6b, 0x1a, 0x14, 0x04, 0x85, 0x3f, 0x2f, 0x2b, 0x05, 0xfb, 0xed, 0xe9, 0x08, 0x0d, 0x21, 0x49, 0xc9, 0x79, 0xdf, 0x6f, 0x77, 0x89, 0xd7, 0x74, 0x09, 0x57, 0x1a, 0xd2, 0xa7, 0x43, 0xbf, 0x08, 0x8e, 0x98, 0xbc, 0x2f }, + { 0xe3, 0xb1, 0xc4, 0x81, 0xe6, 0xec, 0x07, 0x58, 0xa4, 0xcb, 0x7e, 0xd5, 0xae, 0x9d, 0x43, 0xf1, 0xb7, 0xe2, 0x0a, 0x1f, 0xd5, 0xe8, 0x14, 0xba, 0x22, 0xff, 0xb7, 0x20, 0x76, 0x08, 0xdc, 0x9a, 0x44, 0x4c, 0x1c, 0xcd, 0x38, 0x4d, 0xb5, 0xd8, 0xa9, 0x1b, 0x9d, 0xbb, 0x13, 0x5a, 0x6c, 0xe9, + 0x5d, 0xa4, 0x42, 0x0e, 0xde, 0x9a, 0x47, 0x8a, 0x2a, 0x97, 0x42, 0x86, 0x87, 0x98, 0x3f, 0x04, 0x85, 0x3f, 0x2f, 0x2b, 0x05, 0xfb, 0xed, 0xe9, 0x08, 0x0d, 0x21, 0x49, 0xc9, 0x79, 0xdf, 0x6f, 0x77, 0x89, 0xd7, 0x74, 0x09, 0x57, 0x1a, 0xd2, 0xa7, 0x43, 0xbf, 0x08, 0x8e, 0x98, 0xbc, 0x2f } }, + { { 0xff, 0xe3, 0x69, 0x7b, 0x62, 0x45, 0x40, 0x5f, 0x1c, 0x49, 0x65, 0xd6, 0xae, 0x24, 0x16, 0x84, 0xfa, 0x69, 0x6c, 0x1f, 0x6c, 0x65, 0xee, 0x52, 0xe9, 0x6c, 0x54, 0xc7, 0x31, 0x9b, 0xc2, 0x74, + 0x4f, 0xc0, 0x16, 0xb8, 0xf8, 0x75, 0x5f, 0x45, 0xb5, 0xf3, 0xa0, 0xd9, 0xbe, 0x25, 0x82, 0xbd, 0x3c, 0x03, 0xe0, 0x14, 0x15, 0x6a, 0xd5, 0x64, 0x08, 0x65, 0x13, 0x33, 0xc2, 0xab, 0xe0, 0x45 }, + { 0x6f, 0x5a, 0x90, 0x80, 0x25, 0x13, 0xc2, 0xa7, 0xfe, 0x1c, 0xa1, 0x07, 0x81, 0x4b, 0x09, 0xd3, 0xbd, 0xda, 0x55, 0xa8, 0xaa, 0x62, 0x19, 0x03, 0xe9, 0x9f, 0x77, 0xef, 0xff, 0xd4, 0x5e, 0x53, + 0xbc, 0x9d, 0x71, 0xb8, 0xc4, 0xc2, 0x85, 0xb9, 0xb4, 0x3d, 0x95, 0xb8, 0xfd, 0x44, 0xb7, 0xc8, 0x6f, 0x93, 0x15, 0x04, 0x16, 0x7e, 0x01, 0xf2, 0x09, 0x23, 0x96, 0x69, 0xe5, 0x65, 0x52, 0x34 }, + { 0xaf, 0xfe, 0x4f, 0x34, 0x4e, 0xfe, 0x51, 0xa5, 0xb2, 0xd8, 0x31, 0x74, 0x7b, 0xae, 0xfb, 0xb9, 0x33, 0xc1, 0xdc, 0x66, 0xe6, 0x95, 0x9e, 0xce, 0x77, 0x7d, 0x55, 0x3c, 0xa6, 0x6c, 0x09, 0x23, + 0x5a, 0x1a, 0x5e, 0x1a, 0x41, 0xd3, 0xad, 0x5f, 0x86, 0xd0, 0x14, 0xf5, 0xe0, 0xda, 0xf1, 0xce, 0x19, 0x90, 0x45, 0x0c, 0x4c, 0xb1, 0xd3, 0xc8, 0x4c, 0xdb, 0x7e, 0x49, 0xf5, 0xac, 0xde, 0xff }, + { 0x1b, 0x9b, 0x6b, 0x30, 0xd3, 0x19, 0x37, 0x83, 0xad, 0x05, 0xca, 0xba, 0x22, 0x85, 0x33, 0x7f, 0x55, 0x60, 0xe3, 0x14, 0x8c, 0x39, 0x87, 0xd1, 0x4c, 0x21, 0x27, 0xa0, 0xae, 0x4a, 0x56, 0x15, + 0x50, 0x6c, 0x99, 0xca, 0xff, 0xde, 0x10, 0xc6, 0x9f, 0x6c, 0x70, 0xd1, 0x66, 0xb4, 0x87, 0xd8, 0xfc, 0x46, 0xf2, 0xcf, 0x0c, 0xd8, 0xc3, 0x14, 0x5d, 0x27, 0xbd, 0xed, 0x32, 0x36, 0x7c, 0xed }, + { 0x64, 0x6b, 0x74, 0xc7, 0x60, 0x36, 0xc5, 0xe4, 0xb6, 0xde, 0x02, 0x1a, 0x09, 0xaf, 0x65, 0xb1, 0x94, 0xa3, 0xf4, 0x95, 0xf5, 0xb0, 0xef, 0x86, 0xb5, 0x13, 0x26, 0x0b, 0xe8, 0xc5, 0x5c, 0x77, + 0xf5, 0xe6, 0xb6, 0x10, 0x36, 0x87, 0xa3, 0xd2, 0x7c, 0x17, 0x2c, 0xb9, 0xb0, 0x90, 0x9e, 0x8c, 0x0a, 0x7d, 0x73, 0xb2, 0x29, 0xeb, 0xa7, 0x85, 0xd7, 0x04, 0x14, 0xf9, 0x77, 0xb7, 0xf4, 0x89 }, + { 0x7f, 0x1c, 0x5a, 0x57, 0x14, 0xf6, 0x30, 0x07, 0xf9, 0xfe, 0x42, 0x98, 0xcb, 0x3d, 0xac, 0x04, 0x30, 0x0d, 0xc6, 0xd0, 0x4f, 0x8a, 0xbc, 0xdd, 0x3e, 0xc3, 0xb7, 0x74, 0xc8, 0x3b, 0x1a, 0xcc, 0x6a, 0x54, 0x9e, 0xb9, 0xbe, 0xf0, 0x7c, 0x35, 0x35, 0x1a, 0x50, 0x4c, 0xc2, 0x38, 0x41, 0x46, + 0xc8, 0xc4, 0x81, 0x2b, 0x26, 0x56, 0x6f, 0x8a, 0x9f, 0x74, 0x87, 0xe0, 0x01, 0x82, 0xe2, 0x09, 0xf3, 0x9a, 0xc5, 0x33, 0x5a, 0x7d, 0xb6, 0xbb, 0xff, 0x20, 0x4d, 0xc1, 0x99, 0x3d, 0xcc, 0x5a, 0xc7, 0xd1, 0xbe, 0x4c, 0xcf, 0xc8, 0x09, 0x79, 0x15, 0x5e, 0x0c, 0xc6, 0x26, 0x36, 0xe6, 0xd9 }, + { 0x4d, 0x2f, 0x08, 0x84, 0x32, 0xcf, 0xe0, 0x3b, 0xa8, 0x3e, 0xa5, 0xf8, 0x3a, 0xe8, 0xa9, 0x04, 0x5a, 0x74, 0x67, 0xcb, 0x41, 0x22, 0xc5, 0xc4, 0x9a, 0xa5, 0xc1, 0xa7, 0x94, 0x8b, 0xa5, 0x35, 0x00, 0x00, 0x1a, 0xaf, 0xfb, 0xed, 0x40, 0xb8, 0x2b, 0x28, 0xf1, 0xb1, 0x02, 0xd3, 0x8b, 0xc0, + 0x32, 0x4a, 0xa5, 0x0a, 0xa4, 0xc3, 0xbf, 0xb3, 0xf5, 0xb7, 0x65, 0x8e, 0x88, 0xdf, 0xd0, 0x0e, 0xf3, 0x9a, 0xc5, 0x33, 0x5a, 0x7d, 0xb6, 0xbb, 0xff, 0x20, 0x4d, 0xc1, 0x99, 0x3d, 0xcc, 0x5a, 0xc7, 0xd1, 0xbe, 0x4c, 0xcf, 0xc8, 0x09, 0x79, 0x15, 0x5e, 0x0c, 0xc6, 0x26, 0x36, 0xe6, 0xd9 } }, + { { 0xc8, 0x8e, 0x1c, 0xea, 0x02, 0x6a, 0xfd, 0x88, 0x8b, 0xa9, 0x9d, 0xdd, 0xba, 0xea, 0x77, 0x30, 0x88, 0x1a, 0x93, 0x49, 0xda, 0x05, 0x18, 0xbb, 0x4a, 0x6a, 0x11, 0xc4, 0x48, 0x72, 0x77, 0x1f, + 0x6e, 0x2b, 0x9a, 0xe3, 0x27, 0xbe, 0xe1, 0x75, 0x32, 0x30, 0xa6, 0x12, 0x26, 0x44, 0xbf, 0xb2, 0xa5, 0x51, 0x0b, 0x48, 0x3a, 0xea, 0xc5, 0xd4, 0x24, 0x3f, 0x4e, 0xe8, 0xe5, 0xc3, 0xfb, 0xc2 }, + { 0xcb, 0x56, 0x3c, 0x00, 0x28, 0x15, 0x72, 0x16, 0x23, 0x4e, 0x2e, 0x2c, 0x8c, 0xe8, 0x7c, 0x44, 0x82, 0x2a, 0xe0, 0x57, 0xa3, 0x0a, 0xc4, 0x42, 0xb5, 0x07, 0xe1, 0x1b, 0x78, 0x8b, 0x3d, 0x4d, + 0xcb, 0xe4, 0x56, 0x72, 0x0b, 0x85, 0x52, 0xd8, 0x55, 0xe2, 0xcd, 0x38, 0xd2, 0x83, 0xb6, 0x05, 0xd2, 0x9f, 0x63, 0x9e, 0x7f, 0xca, 0xe5, 0x95, 0x36, 0x61, 0x9b, 0xca, 0x09, 0x27, 0x53, 0x82 }, + { 0x24, 0x67, 0x10, 0xd6, 0x8a, 0x1a, 0x8e, 0xb8, 0x53, 0xef, 0xb7, 0x67, 0x2a, 0xfd, 0xb8, 0xd6, 0xe3, 0xf7, 0x41, 0x95, 0x8c, 0x50, 0xca, 0x1d, 0x21, 0x21, 0x41, 0xd1, 0xef, 0x2d, 0x9b, 0x53, + 0xa9, 0x42, 0xcd, 0xda, 0x6d, 0x12, 0x1b, 0xbd, 0x0a, 0xe1, 0x4d, 0x95, 0xc6, 0xaa, 0x40, 0xfd, 0x98, 0xfb, 0x26, 0x21, 0x5e, 0xaf, 0x8e, 0x6b, 0xc9, 0x36, 0x2c, 0x66, 0x31, 0x24, 0x45, 0x87 }, + { 0x5e, 0xf9, 0x1d, 0x10, 0xb5, 0x79, 0x1f, 0x80, 0x85, 0x90, 0xc3, 0x7f, 0x2b, 0x73, 0xbf, 0x83, 0x0b, 0x5d, 0x46, 0xae, 0x79, 0xef, 0x09, 0x71, 0x29, 0xfb, 0x83, 0xde, 0x1f, 0xe2, 0xdb, 0x1b, + 0xa2, 0x22, 0xee, 0x50, 0x21, 0x9d, 0x9c, 0x35, 0x14, 0x48, 0x13, 0xa5, 0xd1, 0x68, 0xf4, 0x61, 0x1f, 0xd7, 0xe2, 0xd6, 0x42, 0x1c, 0xdc, 0x58, 0xec, 0x8b, 0x03, 0x6b, 0xdf, 0x64, 0x06, 0x30 }, + { 0xf9, 0xa6, 0x88, 0x74, 0x07, 0x19, 0x15, 0x38, 0xaf, 0xac, 0x07, 0x10, 0xe0, 0xd9, 0x22, 0xf3, 0x78, 0xb0, 0xbf, 0x60, 0xa3, 0x0f, 0xea, 0x0f, 0xa8, 0x64, 0xa9, 0xa3, 0x82, 0xe1, 0x4c, 0x29, + 0x36, 0x22, 0x6d, 0x43, 0x9c, 0xde, 0x22, 0xbf, 0xc6, 0x85, 0xf7, 0xe9, 0xe0, 0x79, 0x80, 0xfe, 0x9d, 0xd6, 0x24, 0xbd, 0x29, 0xa4, 0x8c, 0x35, 0x21, 0x87, 0x45, 0x7f, 0x88, 0xd9, 0x9a, 0x9d }, + { 0x49, 0x43, 0x19, 0x14, 0xcc, 0x4a, 0x11, 0x01, 0x05, 0xd1, 0x4e, 0x39, 0x6d, 0xb0, 0x22, 0x65, 0x32, 0x6e, 0x67, 0x04, 0x50, 0x85, 0x53, 0x42, 0x90, 0x2c, 0xc0, 0x63, 0x2f, 0xbd, 0x15, 0x90, 0x1b, 0x3f, 0x03, 0x90, 0x16, 0x7f, 0x7b, 0x49, 0x74, 0xd0, 0x3d, 0x81, 0x80, 0x1e, 0x9e, 0x2e, + 0xa9, 0x13, 0x6a, 0x10, 0x14, 0xc1, 0xfd, 0xf9, 0x25, 0x3a, 0x1d, 0x52, 0x93, 0x0a, 0x77, 0x03, 0xa2, 0xdd, 0xce, 0x9f, 0x2a, 0x35, 0xc9, 0x93, 0x7c, 0xa2, 0x2c, 0xf6, 0x38, 0x73, 0xb3, 0xab, 0x7f, 0x55, 0xb6, 0x62, 0xa2, 0x8d, 0x6a, 0x3e, 0x88, 0x04, 0x9b, 0xa2, 0x19, 0x64, 0x55, 0x01 }, + { 0x22, 0x03, 0x49, 0x58, 0x76, 0x3c, 0x85, 0x45, 0x5e, 0x73, 0x78, 0x8f, 0x65, 0xc9, 0x50, 0xf8, 0xd7, 0x16, 0x92, 0xa4, 0xd1, 0x79, 0xce, 0xf3, 0x00, 0x34, 0x38, 0xb8, 0xcc, 0x96, 0x9f, 0xa6, 0x87, 0x28, 0xcb, 0x19, 0x28, 0xad, 0x83, 0xb5, 0x09, 0x96, 0x54, 0xe8, 0x2a, 0xb9, 0x9b, 0xff, + 0x60, 0x85, 0x31, 0x28, 0x62, 0x36, 0xd2, 0x0e, 0xad, 0x2a, 0xe1, 0x84, 0x80, 0xeb, 0x6f, 0x00, 0xa2, 0xdd, 0xce, 0x9f, 0x2a, 0x35, 0xc9, 0x93, 0x7c, 0xa2, 0x2c, 0xf6, 0x38, 0x73, 0xb3, 0xab, 0x7f, 0x55, 0xb6, 0x62, 0xa2, 0x8d, 0x6a, 0x3e, 0x88, 0x04, 0x9b, 0xa2, 0x19, 0x64, 0x55, 0x01 } }, + { { 0xeb, 0x18, 0x95, 0x94, 0x5f, 0x15, 0x8c, 0xb8, 0x4d, 0x6e, 0x7d, 0xc0, 0x96, 0x6c, 0x52, 0xa2, 0x5f, 0x43, 0x67, 0xc2, 0x3a, 0x10, 0x5b, 0xf1, 0x8f, 0x21, 0x89, 0x06, 0x77, 0xe9, 0xab, 0x2e, + 0xcd, 0x17, 0x9c, 0x9a, 0xd7, 0x89, 0x7e, 0x53, 0x58, 0x60, 0x9b, 0xce, 0x90, 0xd9, 0x13, 0x2d, 0x78, 0xc4, 0x2c, 0x1c, 0x4c, 0xe8, 0x23, 0x70, 0xff, 0xa0, 0x42, 0x98, 0x25, 0x40, 0xd6, 0xd8 }, + { 0xb6, 0xfb, 0xdd, 0x5d, 0x35, 0xf2, 0x2b, 0x89, 0xda, 0x8e, 0x90, 0xee, 0x03, 0x4e, 0x75, 0xdb, 0x4c, 0x45, 0xc8, 0x00, 0xde, 0x06, 0x27, 0xde, 0x44, 0xb5, 0x5b, 0xc7, 0x56, 0xc3, 0xf5, 0xbb, + 0xee, 0xa6, 0x21, 0xd4, 0xd9, 0xb9, 0x24, 0x9c, 0x4c, 0xbc, 0x23, 0xe5, 0xeb, 0x05, 0xb6, 0xd0, 0xd0, 0xbf, 0x49, 0x95, 0x01, 0xb4, 0x97, 0xad, 0xb5, 0x71, 0x8d, 0x4b, 0x32, 0xd0, 0xdd, 0x1a }, + { 0xfd, 0x11, 0xd7, 0xe4, 0x46, 0xcd, 0xd8, 0x44, 0x89, 0x0a, 0xe7, 0x44, 0x59, 0xe9, 0xcf, 0x9f, 0xd6, 0xf1, 0x74, 0x56, 0x04, 0x78, 0xfa, 0x29, 0x46, 0x8a, 0x8d, 0x1b, 0xbe, 0x41, 0x92, 0x1c, + 0x8d, 0x74, 0x01, 0x1b, 0xc1, 0xf8, 0x26, 0xf4, 0xc2, 0x68, 0xc3, 0x23, 0x8c, 0x68, 0x7c, 0x0a, 0xad, 0xdd, 0x50, 0x10, 0xcf, 0xdb, 0x78, 0xc5, 0x79, 0x28, 0x37, 0x63, 0x92, 0x1a, 0x1d, 0xea }, + { 0xd2, 0x2a, 0xf0, 0x66, 0x15, 0x8b, 0xcb, 0x83, 0xcf, 0x34, 0xa1, 0x33, 0x6b, 0xd5, 0xa8, 0x98, 0x3b, 0xd7, 0x09, 0x0d, 0x70, 0xa5, 0x8a, 0xc0, 0x73, 0xcf, 0xde, 0x59, 0xd5, 0x13, 0x41, 0xd2, + 0x43, 0x8b, 0xb4, 0xc3, 0x5b, 0x6f, 0xf1, 0xed, 0x47, 0x76, 0xe6, 0x5e, 0xb8, 0x2a, 0x7e, 0x20, 0x91, 0xa0, 0x9d, 0xc1, 0xa2, 0x0a, 0x6d, 0x97, 0x7d, 0xeb, 0xe3, 0x64, 0x5f, 0x86, 0xff, 0x3e }, + { 0x45, 0xd8, 0xdc, 0xe4, 0x3a, 0x3a, 0x44, 0xdc, 0x7f, 0xa8, 0x92, 0x11, 0x1b, 0x4f, 0xfa, 0xcf, 0x21, 0xff, 0xfb, 0x20, 0xb0, 0x02, 0x6d, 0x0e, 0x1c, 0xde, 0xe8, 0x51, 0xd8, 0x2c, 0x72, 0x0e, + 0xbf, 0xf6, 0x9a, 0xd3, 0xd3, 0xfe, 0xfa, 0x98, 0x4e, 0xc2, 0xf0, 0x16, 0xda, 0x39, 0x93, 0xc4, 0xe0, 0x33, 0x9a, 0x43, 0xe8, 0x7a, 0xc5, 0x0f, 0x0b, 0xa4, 0x45, 0xf0, 0x5e, 0x7a, 0xa9, 0x42 }, + { 0xdb, 0x4e, 0x17, 0x76, 0x8b, 0x3c, 0x98, 0x7f, 0x58, 0x76, 0x97, 0xc9, 0x3f, 0x99, 0x01, 0x05, 0x42, 0x7e, 0xfd, 0x83, 0x99, 0xaa, 0x19, 0xb5, 0x72, 0x4c, 0x69, 0xed, 0x6e, 0x21, 0x79, 0x6e, 0x3b, 0x71, 0xe5, 0xab, 0x23, 0x84, 0xe7, 0xfe, 0x58, 0x2b, 0x0d, 0x1e, 0x75, 0x7c, 0x29, 0xb3, + 0x2d, 0x66, 0xc2, 0x45, 0x88, 0xac, 0x86, 0x29, 0xe4, 0xaa, 0x9e, 0x71, 0xa1, 0x88, 0xf9, 0x06, 0xda, 0xa3, 0xdd, 0x7b, 0x6c, 0xd9, 0xc9, 0x73, 0xe9, 0x56, 0xd1, 0xee, 0x5b, 0xf9, 0xae, 0xc0, 0x29, 0xbe, 0x20, 0x6c, 0xc7, 0xf9, 0xc5, 0x2d, 0x6d, 0xad, 0x8f, 0x49, 0xf8, 0x17, 0xdb, 0x7a }, + { 0xb8, 0xb7, 0xec, 0xeb, 0x3e, 0x40, 0x77, 0x6c, 0xab, 0x10, 0xfe, 0x9f, 0xd1, 0x40, 0xfe, 0xd2, 0x88, 0x8e, 0xb0, 0x55, 0xae, 0x75, 0xb1, 0xcc, 0x9d, 0x6c, 0x11, 0x28, 0x95, 0x38, 0x9f, 0xb9, 0x59, 0xe2, 0x29, 0xc3, 0xbc, 0x09, 0x16, 0x1f, 0x17, 0x9e, 0x15, 0x78, 0x09, 0x61, 0x07, 0x9e, + 0xad, 0x67, 0x98, 0xa9, 0x24, 0xff, 0xf9, 0x4b, 0xa2, 0x76, 0x09, 0xa0, 0xd7, 0x1b, 0xed, 0x05, 0xda, 0xa3, 0xdd, 0x7b, 0x6c, 0xd9, 0xc9, 0x73, 0xe9, 0x56, 0xd1, 0xee, 0x5b, 0xf9, 0xae, 0xc0, 0x29, 0xbe, 0x20, 0x6c, 0xc7, 0xf9, 0xc5, 0x2d, 0x6d, 0xad, 0x8f, 0x49, 0xf8, 0x17, 0xdb, 0x7a } }, + { { 0xc3, 0x92, 0x4d, 0x01, 0x9c, 0xea, 0x5a, 0x8d, 0xbd, 0x5c, 0x12, 0x58, 0x6d, 0x03, 0x26, 0xbf, 0xa4, 0xdd, 0xf7, 0x26, 0xa4, 0x0d, 0x22, 0xe0, 0xbd, 0xcc, 0x6f, 0x30, 0x9e, 0xf9, 0x4c, 0x1f, + 0x03, 0x52, 0xab, 0x38, 0xe9, 0x9c, 0x08, 0x9c, 0x09, 0xe5, 0x87, 0x5c, 0x24, 0x1a, 0xe2, 0x75, 0xcb, 0x18, 0x8a, 0x63, 0x50, 0xd1, 0x23, 0x45, 0x49, 0x93, 0x40, 0x2c, 0x09, 0xd4, 0xac, 0x39 }, + { 0xd4, 0xe7, 0xb7, 0x05, 0xfd, 0xd6, 0xf3, 0x57, 0xfb, 0xc2, 0x2f, 0x2c, 0x71, 0x80, 0xf5, 0xc3, 0xa6, 0x0a, 0x23, 0x9d, 0x1d, 0xa8, 0x68, 0x10, 0x8a, 0xfa, 0x68, 0x9d, 0x2b, 0xcf, 0x96, 0xa9, + 0xe6, 0x0e, 0x07, 0x32, 0x23, 0x09, 0x87, 0x16, 0xc5, 0xbb, 0x76, 0x22, 0xfc, 0xb4, 0x59, 0x6d, 0x67, 0xfd, 0x29, 0x51, 0x95, 0x4c, 0xe2, 0x8c, 0x18, 0xab, 0xda, 0x84, 0xc3, 0x62, 0x80, 0x14 }, + { 0xc9, 0xa1, 0xfe, 0xc3, 0x48, 0x0d, 0xee, 0x54, 0x44, 0xff, 0x9c, 0x46, 0x04, 0x0e, 0x74, 0xda, 0xa4, 0x6a, 0x56, 0x02, 0x5f, 0x76, 0x0e, 0xb5, 0xc1, 0xc9, 0xe9, 0xb2, 0x6e, 0x07, 0x49, 0x0c, + 0xf7, 0x4b, 0xee, 0xd6, 0x0a, 0xad, 0x94, 0x03, 0x58, 0x2d, 0x60, 0x95, 0xf8, 0x16, 0x7b, 0x49, 0x0b, 0x01, 0x66, 0x3e, 0x17, 0x01, 0xe5, 0x54, 0x7d, 0xd7, 0xbb, 0x10, 0xd1, 0xad, 0xad, 0x79 }, + { 0xb2, 0xd8, 0x10, 0x29, 0xeb, 0xb8, 0x4e, 0x2b, 0x39, 0x85, 0x5c, 0xb3, 0xdc, 0xf5, 0x87, 0xca, 0xca, 0x9c, 0x7a, 0x8c, 0x2b, 0x08, 0xe8, 0x25, 0xe2, 0xcf, 0x70, 0xe2, 0xe6, 0xfb, 0xdb, 0x0c, + 0xc3, 0x0d, 0x71, 0x11, 0x83, 0x65, 0xf2, 0x71, 0x08, 0x1b, 0x32, 0x6e, 0x6c, 0x51, 0x50, 0xf1, 0xf6, 0x4b, 0x54, 0x63, 0x16, 0x7f, 0xfd, 0x80, 0x05, 0x61, 0x63, 0xf1, 0x80, 0x6a, 0x0b, 0xfd }, + { 0xa7, 0x4b, 0x75, 0x38, 0x90, 0x64, 0x96, 0x7b, 0xda, 0x5e, 0x08, 0x9b, 0x80, 0xc4, 0x72, 0x3f, 0x73, 0xb2, 0xdb, 0xd3, 0x4a, 0xed, 0xa4, 0xdc, 0x5c, 0x79, 0xe5, 0x0f, 0x7a, 0xd3, 0x0c, 0xac, + 0xf9, 0x99, 0x5c, 0x1a, 0x0f, 0xb3, 0x1a, 0x0f, 0x5c, 0xc3, 0x9e, 0x1a, 0x2b, 0xfa, 0xc3, 0xf0, 0x40, 0xe5, 0x5f, 0x36, 0xd2, 0x98, 0x31, 0xa1, 0xaf, 0x18, 0x5f, 0xae, 0x92, 0xf3, 0x9e, 0xc0 }, + { 0xf9, 0xbf, 0x52, 0xe6, 0xd3, 0xe1, 0x5d, 0xd3, 0x30, 0xf3, 0xa1, 0x0c, 0xc8, 0x5a, 0x97, 0x55, 0xab, 0x67, 0x67, 0xd0, 0x00, 0x62, 0x7b, 0x80, 0x70, 0xbf, 0x24, 0xd0, 0x09, 0x8b, 0x07, 0x77, 0xeb, 0x3e, 0xf0, 0x5d, 0xdf, 0x7b, 0xa9, 0x7d, 0xa4, 0x6a, 0x0d, 0xf1, 0xac, 0x83, 0x7d, 0x64, + 0xb5, 0xf4, 0xc6, 0xc4, 0x12, 0x0c, 0x55, 0x9f, 0x67, 0xbb, 0xd5, 0xe3, 0xd3, 0xdb, 0x17, 0x0f, 0x90, 0x2f, 0x8f, 0xc9, 0xfd, 0x4e, 0x6c, 0x8b, 0xe6, 0x99, 0xfa, 0xda, 0x8f, 0x1f, 0xe6, 0xc3, 0xeb, 0xd8, 0x14, 0x20, 0xcc, 0x3c, 0x1c, 0x23, 0x77, 0x28, 0x9b, 0x22, 0x9a, 0x5a, 0x0c, 0x43 }, + { 0xa2, 0x78, 0x37, 0xc9, 0x63, 0xe1, 0x31, 0x36, 0xc2, 0x58, 0xac, 0xca, 0xbb, 0xa2, 0x84, 0xaa, 0xb3, 0x82, 0xe2, 0x19, 0xb7, 0x14, 0x96, 0x27, 0x77, 0xfa, 0xa1, 0x02, 0xaa, 0xff, 0x55, 0x82, 0xba, 0xc0, 0x38, 0x1a, 0x69, 0x35, 0x48, 0x87, 0xc2, 0xeb, 0x48, 0x08, 0xea, 0xc5, 0x6b, 0xfc, + 0x84, 0x60, 0x4e, 0xce, 0xd7, 0xd2, 0x86, 0x8b, 0x76, 0xf3, 0x46, 0xe1, 0x87, 0x1f, 0xff, 0x09, 0x90, 0x2f, 0x8f, 0xc9, 0xfd, 0x4e, 0x6c, 0x8b, 0xe6, 0x99, 0xfa, 0xda, 0x8f, 0x1f, 0xe6, 0xc3, 0xeb, 0xd8, 0x14, 0x20, 0xcc, 0x3c, 0x1c, 0x23, 0x77, 0x28, 0x9b, 0x22, 0x9a, 0x5a, 0x0c, 0x43 } }, + { { 0x0e, 0xa6, 0x0c, 0xef, 0x12, 0xd6, 0x7d, 0x71, 0xd4, 0x88, 0x73, 0x86, 0x9a, 0x88, 0x8f, 0x5b, 0xd1, 0xb6, 0x12, 0xc4, 0x93, 0x8b, 0x5f, 0xee, 0xdd, 0x9c, 0x2a, 0x7f, 0x4d, 0xfd, 0xba, 0x00, + 0x09, 0x45, 0x77, 0xd2, 0xcf, 0xcd, 0x3a, 0x6f, 0x27, 0x44, 0xe2, 0x55, 0x3e, 0x79, 0x88, 0x4d, 0x5f, 0x38, 0x34, 0xe8, 0xe7, 0xc6, 0x3a, 0xde, 0xef, 0x99, 0x15, 0xea, 0x88, 0x79, 0xd7, 0xca }, + { 0xa0, 0x9a, 0x0a, 0x3a, 0x42, 0x35, 0x54, 0x78, 0xb9, 0x82, 0x52, 0xb4, 0xc8, 0x5c, 0x4a, 0x03, 0xa1, 0xb9, 0x27, 0xcc, 0x99, 0xec, 0x03, 0xdf, 0xdd, 0x6e, 0xde, 0xef, 0x8f, 0x7f, 0xdc, 0x5a, + 0xc3, 0xcb, 0x0e, 0xa2, 0x7e, 0x93, 0xe6, 0xdd, 0xbd, 0xf1, 0x1b, 0x03, 0x29, 0x63, 0x72, 0x11, 0x72, 0x3d, 0x24, 0x6f, 0xdf, 0x8e, 0xed, 0xa4, 0xe2, 0x2a, 0x4c, 0x00, 0xe2, 0xc4, 0x55, 0x1b }, + { 0xb2, 0xf1, 0xff, 0xf6, 0x3a, 0x26, 0xe1, 0x74, 0x52, 0xba, 0xee, 0x28, 0xb6, 0x56, 0x90, 0x59, 0xde, 0x92, 0x5f, 0x84, 0xd1, 0x87, 0xe2, 0x64, 0xce, 0xdc, 0x94, 0x3c, 0xb4, 0xf8, 0x01, 0x0a, + 0x86, 0x2f, 0xfe, 0x79, 0x03, 0x72, 0xfc, 0x26, 0x21, 0xc3, 0x1e, 0xec, 0x63, 0x29, 0x64, 0xcb, 0x5f, 0xcc, 0xb6, 0x78, 0xf7, 0xc8, 0xd1, 0xf8, 0x5c, 0xc4, 0x4b, 0xc0, 0xc3, 0x75, 0x3e, 0x46 }, + { 0x03, 0x4b, 0xb9, 0xd1, 0x50, 0xa3, 0x79, 0xbe, 0x74, 0xa3, 0xb5, 0xd8, 0x28, 0x1b, 0x6d, 0x72, 0x68, 0x0a, 0x9b, 0x19, 0xc9, 0x13, 0xc4, 0x04, 0x94, 0x0a, 0xcb, 0x72, 0xff, 0x7d, 0xb6, 0x9a, + 0x1c, 0xfd, 0xe4, 0xa3, 0x75, 0x13, 0x57, 0x36, 0xfe, 0x4a, 0xf6, 0xbc, 0xca, 0xd9, 0x34, 0x9b, 0xef, 0x90, 0x02, 0xd9, 0xbd, 0xdd, 0x6f, 0x22, 0x54, 0x36, 0xb2, 0x3f, 0x22, 0x65, 0xef, 0xe7 }, + { 0x04, 0xd4, 0x43, 0xe8, 0x8c, 0xc4, 0xfb, 0xe5, 0x55, 0xd0, 0xa4, 0xea, 0x20, 0xf8, 0xe1, 0x8f, 0xc2, 0xbc, 0x1f, 0x55, 0xf1, 0x8d, 0xda, 0xc0, 0x85, 0xa4, 0xef, 0x36, 0x97, 0x22, 0x8b, 0x8e, + 0x77, 0x4c, 0x1a, 0xa4, 0xa0, 0x6f, 0xe1, 0xdc, 0x32, 0x47, 0xc4, 0x3a, 0xd8, 0x8a, 0xbd, 0x19, 0x30, 0x1c, 0x96, 0x7a, 0xb2, 0x23, 0x7c, 0x16, 0x03, 0xa7, 0x4f, 0xfd, 0xa6, 0x50, 0xd9, 0xf7 }, + { 0xdf, 0xc2, 0x59, 0xd2, 0xa9, 0x9b, 0x1e, 0xca, 0xf0, 0x39, 0x2f, 0xf8, 0xc2, 0xf3, 0x91, 0x55, 0x1b, 0xba, 0x81, 0x3a, 0x67, 0x1a, 0xd4, 0xf4, 0xb0, 0x9f, 0xb6, 0x18, 0x38, 0x65, 0x3e, 0x67, 0xa0, 0x37, 0xc2, 0x9a, 0xc7, 0xee, 0x72, 0x8e, 0x13, 0x64, 0xd1, 0x0a, 0xda, 0xbd, 0x8d, 0xa4, + 0x28, 0x55, 0x3a, 0x2c, 0x78, 0x41, 0xc6, 0xfc, 0x1c, 0x0f, 0xf8, 0xd7, 0x5f, 0xe6, 0xde, 0x0b, 0xd5, 0xc0, 0xaa, 0x2c, 0x5c, 0xac, 0x46, 0xeb, 0xa4, 0x35, 0x2a, 0xab, 0x00, 0x2e, 0xc0, 0x8b, 0x42, 0x65, 0x2f, 0x2f, 0x13, 0x84, 0x60, 0x15, 0xa3, 0x69, 0xee, 0xab, 0x0e, 0x50, 0xbf, 0x5f }, + { 0xc1, 0xb0, 0xac, 0x4c, 0xfa, 0x62, 0x52, 0x22, 0xae, 0x8c, 0x94, 0x38, 0xd9, 0x6e, 0x10, 0x94, 0xe7, 0xaa, 0xc0, 0x92, 0x93, 0x06, 0x55, 0xf9, 0x2e, 0xd9, 0x10, 0x4d, 0xcb, 0x82, 0x19, 0x1f, 0x27, 0x16, 0x81, 0xdd, 0xea, 0x7a, 0xa8, 0xce, 0x5a, 0xdd, 0x37, 0x77, 0x24, 0x57, 0xfb, 0x40, + 0x3d, 0x1b, 0x48, 0x88, 0xda, 0xce, 0xe8, 0xd2, 0xed, 0xe0, 0x6e, 0x29, 0xeb, 0xdb, 0x95, 0x09, 0xd5, 0xc0, 0xaa, 0x2c, 0x5c, 0xac, 0x46, 0xeb, 0xa4, 0x35, 0x2a, 0xab, 0x00, 0x2e, 0xc0, 0x8b, 0x42, 0x65, 0x2f, 0x2f, 0x13, 0x84, 0x60, 0x15, 0xa3, 0x69, 0xee, 0xab, 0x0e, 0x50, 0xbf, 0x5f } }, + { { 0x3a, 0x79, 0x39, 0x60, 0xe9, 0x93, 0xad, 0x78, 0xf9, 0x0b, 0x99, 0x64, 0x71, 0x76, 0xad, 0xdc, 0x63, 0xa3, 0x38, 0xbf, 0x0a, 0x36, 0x22, 0xcf, 0x4f, 0x84, 0x3e, 0x34, 0xaf, 0x0b, 0xd4, 0x5c, + 0xc0, 0xa4, 0x01, 0x7c, 0x07, 0xc3, 0xb4, 0xcb, 0xdb, 0x39, 0xdd, 0x39, 0xc7, 0x5c, 0xbd, 0xcf, 0x61, 0x8b, 0x72, 0x74, 0xd6, 0x85, 0xdc, 0x5c, 0x08, 0x93, 0x6d, 0xe6, 0xf1, 0xeb, 0xb9, 0x7c }, + { 0x71, 0x12, 0x20, 0xbb, 0x37, 0xa6, 0xd8, 0x71, 0xf7, 0x58, 0xaa, 0xbd, 0x30, 0xfb, 0xac, 0x94, 0x62, 0x45, 0xf0, 0x1a, 0xc3, 0x4a, 0x07, 0x78, 0x6d, 0x17, 0xf5, 0x8d, 0x69, 0x3d, 0x2e, 0x15, + 0x96, 0x48, 0x1a, 0xb0, 0x7e, 0xdd, 0xf5, 0x2d, 0xe1, 0x56, 0xfc, 0xe9, 0x26, 0x91, 0x51, 0xfe, 0x5e, 0x2a, 0xdc, 0x23, 0x89, 0x09, 0x14, 0xe6, 0x17, 0xa9, 0x14, 0x8c, 0x8c, 0xe8, 0xe3, 0x71 }, + { 0xe4, 0xd0, 0xa7, 0x5a, 0xce, 0x93, 0x1d, 0x55, 0xa2, 0x3d, 0xdd, 0x7e, 0x10, 0x66, 0x6d, 0xc6, 0x5c, 0x87, 0x9f, 0x7a, 0x52, 0x5e, 0x76, 0x3f, 0x09, 0x9e, 0xe5, 0x8e, 0x60, 0x39, 0x5e, 0x3c, + 0x28, 0x31, 0xa4, 0x12, 0x39, 0xfd, 0xba, 0xda, 0xc8, 0x59, 0xdd, 0x5b, 0x26, 0x78, 0x8f, 0x33, 0xd2, 0xc8, 0x22, 0x77, 0x49, 0xcf, 0x34, 0x61, 0xbe, 0x7a, 0xa6, 0x31, 0xbe, 0xe5, 0xab, 0xc2 }, + { 0x60, 0xf5, 0x52, 0xbd, 0xb1, 0x9e, 0x06, 0xa3, 0x94, 0xad, 0xe0, 0x82, 0x33, 0x7c, 0x41, 0x17, 0x5b, 0x8a, 0xbc, 0x7c, 0xce, 0xd1, 0x7e, 0xfd, 0x39, 0x17, 0xfd, 0x90, 0x5a, 0x53, 0x89, 0x27, + 0x9f, 0x27, 0x7a, 0x08, 0xb2, 0x66, 0xda, 0xb5, 0xbf, 0x3b, 0x80, 0xe2, 0x1a, 0x30, 0x80, 0x45, 0x13, 0xf3, 0x4b, 0x0c, 0x4a, 0xe9, 0x0a, 0x6e, 0xf2, 0x3e, 0xa3, 0x70, 0x3d, 0x89, 0xd3, 0xb2 }, + { 0x23, 0x41, 0x08, 0x8d, 0xa8, 0x0b, 0x6a, 0xe0, 0x65, 0xb1, 0x42, 0x50, 0x49, 0xdd, 0xd3, 0xe8, 0x89, 0x13, 0x7a, 0x04, 0xf0, 0xd6, 0x2f, 0x6e, 0x73, 0xcd, 0xdc, 0x10, 0xbb, 0x02, 0x6b, 0xa2, + 0x25, 0x58, 0xa3, 0x08, 0x37, 0x7c, 0x8b, 0x1f, 0x4a, 0x81, 0x38, 0x88, 0xbd, 0xf4, 0x4f, 0x24, 0xe8, 0xd6, 0x9f, 0x2f, 0x13, 0xeb, 0x79, 0x60, 0x80, 0x90, 0x52, 0x6b, 0x8e, 0xed, 0xcb, 0x77 }, + { 0x5b, 0x88, 0x63, 0xaf, 0xf9, 0xe2, 0x44, 0x23, 0xc8, 0x02, 0xe0, 0x22, 0x15, 0x3d, 0x2a, 0xb7, 0x40, 0x76, 0xe8, 0x95, 0xfd, 0xa9, 0xe3, 0x85, 0x94, 0xa3, 0xbb, 0xce, 0x61, 0x19, 0x0d, 0xe2, 0x95, 0xdf, 0x81, 0x11, 0x53, 0x77, 0xcd, 0xf2, 0xd8, 0x4f, 0xbf, 0x19, 0x6a, 0x3d, 0x4b, 0xda, + 0xa4, 0x56, 0xa4, 0xcd, 0x9d, 0x4f, 0x52, 0x53, 0x7d, 0xd8, 0xac, 0xe0, 0xfb, 0x9a, 0x71, 0x0c, 0x59, 0xf9, 0x0b, 0x03, 0xf1, 0x7b, 0xaf, 0x33, 0xc3, 0xe5, 0x1e, 0x8d, 0x4f, 0xbe, 0x21, 0xed, 0x6b, 0x15, 0xdd, 0xd2, 0xeb, 0x7c, 0xe4, 0x59, 0x6c, 0xf9, 0x91, 0xc1, 0x3a, 0x3a, 0xb6, 0x2b }, + { 0x5e, 0x54, 0xe5, 0x1b, 0x3d, 0x2c, 0x00, 0x80, 0xdd, 0xe4, 0x10, 0x50, 0x98, 0xb6, 0x0e, 0x3a, 0xf7, 0xde, 0x67, 0x2c, 0x8e, 0x7b, 0xb4, 0x73, 0x0b, 0xc7, 0x12, 0xb0, 0x66, 0x6b, 0x3b, 0x99, 0xd9, 0x33, 0x78, 0x5f, 0x45, 0xe5, 0xec, 0x15, 0x02, 0xfa, 0x8b, 0x86, 0xfd, 0xe0, 0xb7, 0x84, + 0x72, 0xf2, 0x68, 0x5c, 0xd6, 0x2e, 0x37, 0xe9, 0x49, 0x32, 0x2f, 0xcd, 0xcd, 0x1e, 0x99, 0x0f, 0x59, 0xf9, 0x0b, 0x03, 0xf1, 0x7b, 0xaf, 0x33, 0xc3, 0xe5, 0x1e, 0x8d, 0x4f, 0xbe, 0x21, 0xed, 0x6b, 0x15, 0xdd, 0xd2, 0xeb, 0x7c, 0xe4, 0x59, 0x6c, 0xf9, 0x91, 0xc1, 0x3a, 0x3a, 0xb6, 0x2b } }, + { { 0xfc, 0xb9, 0x4e, 0x4e, 0x11, 0xfe, 0xe1, 0xc5, 0xc7, 0x49, 0x54, 0xd2, 0x2f, 0x13, 0x34, 0x7c, 0x91, 0x7d, 0x98, 0x43, 0xe4, 0xb7, 0x48, 0xea, 0xe8, 0x26, 0xcb, 0x26, 0x1f, 0xe4, 0x99, 0x10, + 0xb9, 0x34, 0xc2, 0xac, 0xa3, 0x2c, 0xbd, 0x9e, 0x80, 0xd4, 0x12, 0x3b, 0xb3, 0xf0, 0x01, 0xae, 0x91, 0x9f, 0xba, 0x77, 0x32, 0x4d, 0x9d, 0xac, 0x1f, 0x8d, 0xad, 0xa7, 0x46, 0x44, 0x85, 0xfb }, + { 0x65, 0x05, 0x0b, 0xd2, 0x41, 0xd3, 0x58, 0x2a, 0x14, 0xbc, 0x7b, 0x15, 0x4a, 0x6a, 0x6a, 0x18, 0x71, 0x09, 0x25, 0x33, 0xac, 0x73, 0x53, 0xab, 0xd9, 0x0d, 0x8d, 0xdf, 0x95, 0x59, 0x7e, 0x02, + 0x4c, 0x03, 0x11, 0x5c, 0xdc, 0x80, 0x19, 0xd5, 0x13, 0x66, 0x7f, 0xf7, 0xd7, 0x23, 0x18, 0x40, 0x84, 0x16, 0x6b, 0x52, 0x82, 0x96, 0x05, 0x1b, 0xfa, 0xcb, 0x4b, 0x77, 0x00, 0x12, 0xa0, 0x28 }, + { 0x13, 0xe0, 0x16, 0x1e, 0x24, 0x24, 0xe9, 0xde, 0x9c, 0x86, 0xa9, 0xcf, 0x02, 0x96, 0xdf, 0x8c, 0x64, 0xcb, 0x3d, 0x7d, 0x8a, 0x2a, 0x73, 0x18, 0x20, 0xc8, 0xb0, 0xac, 0x10, 0xa0, 0x52, 0x0c, + 0x6c, 0x17, 0xd9, 0xbd, 0x3c, 0x3e, 0xe5, 0x0c, 0x4a, 0xdb, 0x59, 0xcc, 0x59, 0x15, 0x08, 0x1e, 0xfe, 0xaa, 0xe3, 0xd6, 0xa1, 0x37, 0xd6, 0xd5, 0x6d, 0x8e, 0xcd, 0x57, 0xa9, 0x81, 0xb3, 0x43 }, + { 0x46, 0x28, 0x2b, 0xa0, 0xe5, 0xe3, 0xf0, 0x72, 0xa7, 0xbc, 0x8d, 0xec, 0x45, 0x31, 0x6e, 0xdb, 0xb2, 0x4b, 0x20, 0xbf, 0x64, 0x74, 0x26, 0x70, 0x9b, 0xd6, 0xd3, 0x7f, 0x9f, 0xc1, 0x59, 0x03, + 0x2d, 0xda, 0x6f, 0xaa, 0x7c, 0x92, 0xc6, 0xe0, 0xe8, 0xaa, 0x1e, 0x26, 0xf0, 0x1e, 0xcc, 0xef, 0x6d, 0x87, 0x04, 0x3c, 0xed, 0x52, 0x15, 0xb3, 0x9f, 0x01, 0x4e, 0xe3, 0x3c, 0xb6, 0xbb, 0xac }, + { 0x86, 0x1a, 0x25, 0x8e, 0x41, 0x85, 0xf9, 0xba, 0x98, 0x15, 0xb1, 0xec, 0x50, 0xb4, 0xd0, 0xab, 0x55, 0x54, 0xbb, 0x3b, 0x61, 0xfc, 0x54, 0xf3, 0x09, 0xea, 0xaa, 0x6e, 0xbf, 0x03, 0xc3, 0x58, + 0x1d, 0x24, 0xb5, 0xd5, 0x45, 0x5a, 0x7a, 0x14, 0xc3, 0x6a, 0xa9, 0xd8, 0x6f, 0x41, 0xc3, 0xb4, 0x9a, 0x05, 0x71, 0xbc, 0x23, 0x67, 0xc2, 0xa8, 0xf5, 0x7b, 0x69, 0xa5, 0xe1, 0x7a, 0x35, 0x1d }, + { 0x3b, 0xf5, 0xa8, 0xc0, 0x2a, 0x7d, 0x85, 0x88, 0xd4, 0xf4, 0x26, 0xd3, 0xf4, 0xe3, 0x52, 0x35, 0x37, 0x06, 0x1e, 0x71, 0xc2, 0x3b, 0x7b, 0xeb, 0xf0, 0x07, 0x30, 0x6b, 0x37, 0x31, 0xb9, 0x27, 0xd8, 0x0b, 0x17, 0xae, 0xff, 0xd4, 0x7c, 0x59, 0xd7, 0x2d, 0xea, 0xcb, 0x92, 0x2f, 0x93, 0xc7, + 0xd7, 0xc3, 0xaf, 0x75, 0x73, 0x6a, 0x3f, 0x89, 0xe5, 0x13, 0x0c, 0x28, 0x47, 0xf4, 0xa4, 0x07, 0xfb, 0xd9, 0x77, 0xb4, 0x1e, 0xb2, 0x70, 0xca, 0x85, 0x22, 0x58, 0xc6, 0x0b, 0x19, 0xc2, 0xa5, 0xba, 0xc3, 0xc9, 0xb6, 0x4a, 0xdb, 0x7d, 0x4d, 0x66, 0xde, 0xeb, 0x8c, 0x1a, 0x23, 0xb8, 0x4c }, + { 0x8c, 0x57, 0x0e, 0x9f, 0x0a, 0xb2, 0xf4, 0x07, 0xdd, 0x7b, 0x46, 0xf8, 0xa0, 0xb1, 0x33, 0x4c, 0x2b, 0x1e, 0x1a, 0xe0, 0x28, 0x17, 0x14, 0xba, 0x14, 0x06, 0x40, 0x1f, 0x30, 0x0a, 0x19, 0xcd, 0xe7, 0xca, 0xfb, 0xdb, 0xb9, 0x76, 0xf8, 0x8a, 0x81, 0x3d, 0x03, 0x86, 0x7e, 0x66, 0x75, 0x1d, + 0xec, 0xff, 0x6b, 0xa7, 0xea, 0x4c, 0x8c, 0x60, 0xd2, 0x1f, 0x72, 0x11, 0x4c, 0x5d, 0xeb, 0x01, 0xfb, 0xd9, 0x77, 0xb4, 0x1e, 0xb2, 0x70, 0xca, 0x85, 0x22, 0x58, 0xc6, 0x0b, 0x19, 0xc2, 0xa5, 0xba, 0xc3, 0xc9, 0xb6, 0x4a, 0xdb, 0x7d, 0x4d, 0x66, 0xde, 0xeb, 0x8c, 0x1a, 0x23, 0xb8, 0x4c } }, + { { 0x05, 0x64, 0x16, 0x53, 0xbb, 0xb2, 0x6e, 0x81, 0xfc, 0xe6, 0xec, 0xc8, 0x0c, 0xc1, 0x75, 0x59, 0x23, 0xe2, 0x4b, 0xd8, 0x6a, 0x70, 0x34, 0x50, 0x37, 0xc6, 0xc2, 0xbd, 0x27, 0xfd, 0xad, 0x4c, + 0xee, 0xe4, 0xf7, 0xfc, 0x91, 0x05, 0x48, 0x3c, 0xd4, 0x09, 0x78, 0x00, 0xce, 0x15, 0x37, 0xdc, 0xe7, 0xce, 0x48, 0x09, 0x3e, 0x7f, 0x01, 0x9b, 0x03, 0xc8, 0x2f, 0x9b, 0xe6, 0x42, 0xe1, 0x71 }, + { 0x64, 0xbf, 0x63, 0x91, 0xe5, 0x3e, 0x90, 0x89, 0x96, 0xea, 0x59, 0x51, 0x60, 0x7b, 0x5f, 0xfe, 0x0f, 0x76, 0x86, 0x19, 0x45, 0x82, 0xd9, 0x5e, 0x1a, 0xd1, 0xf6, 0x04, 0xc6, 0xaa, 0x71, 0xda, + 0x80, 0xed, 0x75, 0x51, 0xc8, 0x9a, 0x27, 0x09, 0xc3, 0x50, 0xe4, 0x14, 0xa1, 0xc3, 0xf8, 0x3a, 0x6c, 0x84, 0xff, 0x87, 0xd5, 0xf0, 0xb0, 0x3c, 0x5a, 0x57, 0x14, 0x90, 0xc7, 0x31, 0xf8, 0x47 }, + { 0x88, 0x7d, 0xcc, 0x81, 0x2b, 0xbb, 0x7e, 0x96, 0xbe, 0x78, 0xe1, 0xb1, 0xf2, 0xed, 0x6f, 0xd8, 0xff, 0xbd, 0x7f, 0x8e, 0xe5, 0xeb, 0x7f, 0x7b, 0xca, 0xaf, 0x9b, 0x08, 0x1a, 0x77, 0x69, 0x1d, + 0xc2, 0xa4, 0x7c, 0x4d, 0xa6, 0x74, 0x8e, 0x33, 0x24, 0xff, 0x43, 0xe1, 0x8c, 0x59, 0xae, 0x5f, 0x95, 0xa4, 0x35, 0x9e, 0x61, 0xb8, 0xcc, 0x4c, 0x87, 0xb9, 0x76, 0x53, 0x20, 0xa3, 0xf3, 0xf5 }, + { 0x13, 0x2a, 0xcc, 0x07, 0xb1, 0x5f, 0xc7, 0xf1, 0x08, 0x0e, 0x7d, 0x7e, 0x26, 0x56, 0xd8, 0x16, 0x9c, 0xae, 0xac, 0xc4, 0xf5, 0x9c, 0x15, 0x67, 0xae, 0xc4, 0xcc, 0x3f, 0xc0, 0xaf, 0x53, 0x28, + 0x1f, 0x65, 0x14, 0xe5, 0x7f, 0x0c, 0xf5, 0x7a, 0xe3, 0x93, 0xc1, 0xa3, 0xd1, 0x4a, 0x09, 0x7d, 0x24, 0xab, 0x22, 0xc4, 0xc4, 0xce, 0x85, 0x37, 0x86, 0xa8, 0x9c, 0x39, 0x33, 0xba, 0x1b, 0x83 }, + { 0x6d, 0x3e, 0x92, 0x5a, 0xa8, 0xfa, 0xe6, 0x71, 0x98, 0xa8, 0x82, 0x38, 0xcc, 0xed, 0xd6, 0x92, 0x7e, 0x3e, 0xcb, 0xb2, 0x82, 0x92, 0x7a, 0x56, 0x9e, 0xd6, 0x29, 0x45, 0x42, 0x04, 0x76, 0x82, + 0xa5, 0xfc, 0xd9, 0x0c, 0x12, 0x4c, 0x98, 0x04, 0x2a, 0x3a, 0x98, 0x01, 0xb8, 0x62, 0xe8, 0xe6, 0x7c, 0x51, 0xe3, 0x7d, 0x97, 0xf5, 0x45, 0xb4, 0x13, 0xdf, 0x15, 0x68, 0xc3, 0x00, 0x75, 0x40 }, + { 0x7e, 0x89, 0x3d, 0x7c, 0x78, 0x36, 0x3c, 0x85, 0xda, 0xb6, 0x9b, 0x6d, 0xbc, 0x52, 0x7d, 0xc6, 0xaa, 0xfd, 0x90, 0x62, 0xe4, 0xc4, 0x1a, 0x5a, 0x2e, 0xa1, 0x57, 0xd7, 0xda, 0x57, 0xf4, 0x58, 0xc5, 0x23, 0x61, 0x21, 0xe1, 0x93, 0xfa, 0x06, 0x22, 0xed, 0x41, 0x66, 0x24, 0x47, 0xb9, 0xed, + 0xc8, 0x84, 0x25, 0x28, 0x39, 0xec, 0xfb, 0x29, 0xa1, 0xcd, 0xe1, 0x9d, 0x02, 0x48, 0x6f, 0x0a, 0xe2, 0x9f, 0x98, 0xfd, 0x3d, 0x18, 0xa1, 0x24, 0x9c, 0xc6, 0x75, 0xb8, 0x99, 0x76, 0x2a, 0xa4, 0x9e, 0xb1, 0x97, 0x2d, 0x1c, 0x99, 0x65, 0x5f, 0x1f, 0xda, 0x14, 0x4f, 0x10, 0x49, 0xf1, 0x7a }, + { 0x2c, 0xec, 0x27, 0x63, 0xd2, 0x77, 0x14, 0x2d, 0x01, 0x18, 0x10, 0xe0, 0x23, 0x1b, 0xa2, 0x25, 0x61, 0xd4, 0x52, 0xd9, 0x90, 0xde, 0x97, 0x7e, 0xb8, 0xfa, 0x38, 0x25, 0xf2, 0x91, 0x07, 0x3e, 0xc4, 0xa9, 0x3e, 0xb5, 0x67, 0x02, 0x28, 0x94, 0x5c, 0x34, 0xa1, 0x0a, 0x5c, 0x54, 0x53, 0xd9, + 0xb4, 0xc4, 0x5a, 0x8e, 0x57, 0x18, 0xc3, 0x35, 0xea, 0x47, 0x75, 0xe0, 0x44, 0x01, 0x71, 0x09, 0xe2, 0x9f, 0x98, 0xfd, 0x3d, 0x18, 0xa1, 0x24, 0x9c, 0xc6, 0x75, 0xb8, 0x99, 0x76, 0x2a, 0xa4, 0x9e, 0xb1, 0x97, 0x2d, 0x1c, 0x99, 0x65, 0x5f, 0x1f, 0xda, 0x14, 0x4f, 0x10, 0x49, 0xf1, 0x7a } }, + { { 0x41, 0x10, 0xd9, 0x7f, 0xb8, 0x83, 0x9e, 0x42, 0x43, 0x7a, 0xb0, 0x6d, 0xa6, 0xcf, 0xa5, 0x7a, 0x50, 0x93, 0x2d, 0x13, 0x94, 0x37, 0xa8, 0x92, 0x26, 0x1f, 0xad, 0xe0, 0x25, 0x19, 0x91, 0x62, + 0x28, 0xfb, 0x18, 0xbf, 0x89, 0xb0, 0x42, 0x80, 0x14, 0xcd, 0xd2, 0x72, 0x84, 0x1c, 0xfd, 0xe5, 0xc3, 0x71, 0x3c, 0x3f, 0x12, 0x5e, 0xdd, 0x53, 0x39, 0xf6, 0x4b, 0x9f, 0xb3, 0x5c, 0xe3, 0x15 }, + { 0xd0, 0xc7, 0x18, 0x4d, 0x68, 0x9f, 0xdd, 0xec, 0x81, 0xf8, 0xc6, 0x0e, 0x83, 0x43, 0x23, 0x3d, 0xfc, 0xf3, 0x66, 0x55, 0xa8, 0x65, 0x8b, 0xd7, 0x9b, 0x3c, 0x74, 0x23, 0xcd, 0xae, 0x60, 0xe7, + 0x61, 0xed, 0x2c, 0x7e, 0xe7, 0xa7, 0x63, 0x7d, 0x72, 0x47, 0x6a, 0x33, 0x1c, 0xaa, 0x81, 0xba, 0x6f, 0xd4, 0x00, 0xe7, 0xa9, 0x58, 0xb2, 0xad, 0xee, 0x3f, 0x9c, 0x70, 0xff, 0x2f, 0x13, 0x6f }, + { 0x56, 0x7b, 0x19, 0x66, 0x42, 0x9a, 0x99, 0x51, 0x23, 0x4f, 0xb6, 0xe7, 0xcf, 0x98, 0xff, 0x20, 0x5a, 0xc3, 0x0e, 0x36, 0xc9, 0xc6, 0x20, 0x25, 0x0c, 0x56, 0x98, 0xfb, 0xbd, 0xd6, 0x66, 0x4f, + 0x6f, 0x94, 0x85, 0x8a, 0x35, 0xf3, 0x50, 0xad, 0x87, 0xde, 0x95, 0x9e, 0xae, 0x2a, 0xd8, 0xdd, 0x78, 0x87, 0x96, 0x2b, 0xe0, 0x12, 0x95, 0xd9, 0x3b, 0xb2, 0x2a, 0x06, 0xe2, 0xf0, 0x06, 0xd4 }, + { 0x42, 0x24, 0xdd, 0x0a, 0xd1, 0x11, 0x31, 0x7e, 0x56, 0x45, 0xb0, 0x0e, 0x86, 0xc1, 0x5d, 0x8c, 0x03, 0x01, 0xb8, 0x33, 0x20, 0xbd, 0x08, 0x10, 0xe5, 0x70, 0x92, 0x2b, 0x5b, 0x86, 0xd3, 0x50, + 0x4c, 0x1e, 0xe3, 0xd1, 0x2a, 0x4e, 0x40, 0x02, 0x19, 0x0b, 0xf6, 0x91, 0xd9, 0x9e, 0xaa, 0x54, 0x7c, 0x3d, 0xba, 0xc5, 0x5a, 0x9e, 0xb2, 0xbb, 0x4e, 0x0d, 0x5b, 0xdd, 0x90, 0xc9, 0x7b, 0xc2 }, + { 0x54, 0x95, 0xd5, 0xdc, 0x7e, 0x7e, 0xec, 0xd4, 0x67, 0x08, 0xdc, 0x58, 0xa9, 0x80, 0x8a, 0x03, 0x6a, 0xf8, 0x40, 0xca, 0x0d, 0x5b, 0x6c, 0xe4, 0xc9, 0x71, 0xa5, 0xaf, 0x2a, 0xaa, 0xe8, 0x95, + 0x45, 0xe7, 0xe2, 0xc3, 0x47, 0x84, 0xc6, 0xbe, 0xe5, 0x65, 0xaf, 0xcd, 0x7c, 0x20, 0x5f, 0x8b, 0x19, 0x61, 0xe4, 0xc9, 0xc1, 0x86, 0xa5, 0x6f, 0x96, 0xf3, 0x9c, 0x13, 0x28, 0x1b, 0xcf, 0x07 }, + { 0xc4, 0x7f, 0xf2, 0x6f, 0xcc, 0x4a, 0xf8, 0xa4, 0x1f, 0x1d, 0x6e, 0x5e, 0x30, 0xb2, 0x99, 0x8f, 0x5d, 0x7c, 0x26, 0x1c, 0x52, 0x6f, 0xd0, 0x33, 0xa7, 0xf8, 0xca, 0x2a, 0xc3, 0x8c, 0xa8, 0xd1, 0x50, 0x4f, 0xa7, 0xe8, 0xf2, 0x10, 0x4c, 0xcd, 0x8a, 0x31, 0x03, 0xc8, 0x93, 0x2c, 0xd7, 0xe4, + 0x21, 0xdb, 0xa2, 0x62, 0x7b, 0x1f, 0x28, 0x14, 0x69, 0x7e, 0x87, 0xac, 0xf9, 0xb4, 0x97, 0x00, 0x62, 0x86, 0x14, 0xd7, 0xe4, 0x65, 0xdd, 0x9e, 0x1c, 0x64, 0x5f, 0x3e, 0xef, 0xfe, 0xa6, 0x60, 0x68, 0x91, 0x94, 0x8a, 0x1c, 0x89, 0xae, 0xe4, 0xcf, 0x3a, 0xdd, 0xc0, 0xb4, 0x47, 0xe8, 0x8f }, + { 0x12, 0x80, 0x00, 0xda, 0xce, 0xc4, 0x80, 0x8f, 0xa9, 0xa1, 0x5d, 0x98, 0x7d, 0x2c, 0xb2, 0x9c, 0x71, 0xde, 0x62, 0x89, 0x6a, 0xe1, 0x92, 0xd7, 0x96, 0xdc, 0xcd, 0xc8, 0x08, 0x0e, 0x48, 0xbf, 0x2a, 0x53, 0x72, 0x90, 0x31, 0x71, 0x49, 0x02, 0xda, 0x4e, 0x19, 0x05, 0x10, 0xcb, 0x41, 0x97, + 0x44, 0xdc, 0x2d, 0x1e, 0x48, 0xe5, 0x0e, 0x41, 0x9d, 0x7d, 0x03, 0xa3, 0xe2, 0x65, 0xd4, 0x01, 0x62, 0x86, 0x14, 0xd7, 0xe4, 0x65, 0xdd, 0x9e, 0x1c, 0x64, 0x5f, 0x3e, 0xef, 0xfe, 0xa6, 0x60, 0x68, 0x91, 0x94, 0x8a, 0x1c, 0x89, 0xae, 0xe4, 0xcf, 0x3a, 0xdd, 0xc0, 0xb4, 0x47, 0xe8, 0x8f } }, + { { 0x00, 0x4b, 0x0b, 0xf5, 0x1f, 0x07, 0x1e, 0x23, 0xe3, 0x93, 0x7b, 0x31, 0x41, 0x2a, 0x0a, 0x50, 0x35, 0xe2, 0xbb, 0xfe, 0x51, 0x77, 0x6c, 0xc9, 0xc5, 0x13, 0xb9, 0x87, 0x79, 0x65, 0x68, 0x20, + 0xcc, 0x09, 0x90, 0xa9, 0xe4, 0xef, 0x9f, 0x1a, 0xe1, 0x69, 0x76, 0x14, 0x82, 0x42, 0x88, 0x4b, 0xdc, 0xe0, 0x10, 0x22, 0xe2, 0xd6, 0x36, 0x7c, 0x0b, 0xd9, 0x08, 0xea, 0xfa, 0xe4, 0xfd, 0x45 }, + { 0x57, 0x5c, 0x1e, 0x20, 0xb4, 0xae, 0x9e, 0x9d, 0x04, 0xfb, 0x1a, 0xd7, 0x23, 0xd8, 0x8a, 0x6b, 0x1b, 0xb2, 0xef, 0xa9, 0x06, 0x38, 0xbb, 0x9b, 0x43, 0x2e, 0xf1, 0x81, 0x0b, 0x76, 0xec, 0x20, + 0x46, 0x1b, 0xc4, 0x71, 0x19, 0x3e, 0x79, 0xe8, 0xcf, 0xea, 0xdc, 0x4b, 0x3f, 0x0b, 0xeb, 0x05, 0x13, 0x1a, 0x2c, 0xfe, 0x16, 0xe9, 0xf0, 0xc4, 0x9c, 0x41, 0xab, 0x45, 0x1b, 0xba, 0x05, 0xec }, + { 0x06, 0x0b, 0x73, 0xec, 0x30, 0x74, 0x0d, 0x8d, 0x13, 0x4b, 0xef, 0xac, 0x3b, 0x05, 0xb6, 0xed, 0x2b, 0x05, 0xd1, 0xa7, 0x65, 0xb0, 0xcb, 0x69, 0x00, 0xeb, 0x47, 0xe3, 0x1c, 0x07, 0x8b, 0x15, + 0xbf, 0x69, 0xff, 0x27, 0xb4, 0xdb, 0x77, 0xaf, 0xe9, 0x9a, 0xfb, 0xb2, 0x28, 0xa4, 0xf9, 0x05, 0xe4, 0x3c, 0x66, 0x56, 0x00, 0x1a, 0x2c, 0x41, 0xf2, 0xe1, 0x11, 0x09, 0xfa, 0xe1, 0x50, 0x49 }, + { 0xbc, 0x4d, 0x6f, 0x75, 0x79, 0x77, 0x64, 0x6b, 0xec, 0xac, 0x1a, 0x26, 0x73, 0x9c, 0xf3, 0xf1, 0x4d, 0x79, 0xbe, 0x6f, 0x0c, 0x07, 0x22, 0xd1, 0xa1, 0x31, 0x75, 0xa8, 0x9c, 0xb6, 0x00, 0x63, + 0x0d, 0x40, 0x17, 0xec, 0x83, 0xda, 0x82, 0x2c, 0x3b, 0xfd, 0x90, 0xe3, 0xbc, 0xc2, 0x2c, 0xf5, 0x3e, 0x41, 0xe9, 0x98, 0x57, 0xa2, 0xb7, 0xce, 0x5f, 0x31, 0xbb, 0x0b, 0x05, 0x61, 0x0f, 0x55 }, + { 0xb7, 0xab, 0xb2, 0x84, 0xf1, 0x67, 0x24, 0x16, 0x61, 0xe9, 0x20, 0x33, 0x0b, 0xff, 0x22, 0x61, 0x70, 0xa0, 0x5d, 0xf6, 0xa8, 0x33, 0xc9, 0x30, 0x73, 0xe5, 0x89, 0x36, 0x59, 0xea, 0xa8, 0xe7, + 0x03, 0xf6, 0x14, 0xc1, 0x79, 0xb6, 0x42, 0xa5, 0xc8, 0x6c, 0xb8, 0x94, 0x29, 0x24, 0x00, 0x09, 0xb5, 0x54, 0x3f, 0xe1, 0x6b, 0xfb, 0x4d, 0x2d, 0xa9, 0x9a, 0x02, 0xa1, 0xa5, 0x09, 0xf4, 0xcb }, + { 0x92, 0xfa, 0x18, 0x84, 0x3e, 0xdb, 0xdf, 0x7d, 0x87, 0xd6, 0x2d, 0x07, 0x05, 0x2c, 0xba, 0xe4, 0x30, 0x76, 0xa2, 0xe8, 0x71, 0x3b, 0x1b, 0x93, 0x5b, 0xce, 0x2e, 0xec, 0x50, 0x6e, 0x4a, 0x0b, 0x2d, 0xbe, 0xa3, 0x76, 0x92, 0xf8, 0xc8, 0x4a, 0x71, 0x66, 0xec, 0xfa, 0x36, 0xc5, 0xdb, 0xab, + 0x99, 0x9c, 0xbf, 0x99, 0x07, 0xe8, 0xfe, 0xf4, 0x2f, 0x90, 0x16, 0x5d, 0xdc, 0xbe, 0xfa, 0x08, 0x93, 0xde, 0x13, 0xf5, 0x32, 0x45, 0x9a, 0xde, 0xa2, 0x5d, 0xb9, 0xe0, 0x38, 0x4c, 0x6a, 0xcc, 0x13, 0x46, 0x27, 0x28, 0xbf, 0xf8, 0x7a, 0x9c, 0x2e, 0xde, 0x6f, 0xfe, 0xe1, 0x86, 0x41, 0x79 }, + { 0xa7, 0x32, 0x52, 0x76, 0x4f, 0x3e, 0x1b, 0xab, 0x82, 0x18, 0x14, 0xe7, 0x42, 0x32, 0xb8, 0xa4, 0x98, 0xde, 0xa4, 0xd7, 0xae, 0x42, 0x84, 0xda, 0x71, 0xf7, 0x78, 0x40, 0x56, 0x94, 0x64, 0x49, 0x34, 0x37, 0xeb, 0xe3, 0x05, 0x4c, 0xb9, 0xbb, 0xce, 0xb2, 0x72, 0xc0, 0x75, 0x1c, 0xc4, 0xd5, + 0x1e, 0x3a, 0xc1, 0x43, 0xda, 0xd1, 0x81, 0x82, 0xa9, 0xd5, 0x0e, 0x0a, 0x5e, 0xc2, 0xd7, 0x04, 0x93, 0xde, 0x13, 0xf5, 0x32, 0x45, 0x9a, 0xde, 0xa2, 0x5d, 0xb9, 0xe0, 0x38, 0x4c, 0x6a, 0xcc, 0x13, 0x46, 0x27, 0x28, 0xbf, 0xf8, 0x7a, 0x9c, 0x2e, 0xde, 0x6f, 0xfe, 0xe1, 0x86, 0x41, 0x79 } }, + { { 0xa3, 0xdf, 0x4a, 0xfd, 0xe6, 0x74, 0xb8, 0xeb, 0xed, 0xe7, 0x7e, 0xd2, 0xae, 0xf8, 0x40, 0x80, 0x3a, 0x55, 0x58, 0x1d, 0x6b, 0xa4, 0x32, 0x6c, 0x15, 0xbb, 0x67, 0xdf, 0x9e, 0xb5, 0x70, 0x4b, + 0x7f, 0x4d, 0xfe, 0x34, 0x42, 0x0c, 0x4d, 0xe3, 0x97, 0x87, 0x6d, 0x08, 0xe8, 0x4d, 0x8a, 0xa9, 0xbc, 0xbf, 0x1b, 0xb7, 0x66, 0x32, 0xf4, 0x7f, 0x93, 0xca, 0xa4, 0xd2, 0x8f, 0x02, 0x7b, 0xfa }, + { 0xea, 0xac, 0xdf, 0x25, 0x39, 0xf3, 0x28, 0xb6, 0xbe, 0xa8, 0x4a, 0x32, 0x59, 0x4b, 0x4f, 0xb5, 0xd2, 0xf7, 0xf5, 0x75, 0x43, 0x8b, 0xb3, 0x6a, 0x98, 0x8c, 0x14, 0xc9, 0x3f, 0x7e, 0x5c, 0x05, + 0xf0, 0xeb, 0x1d, 0xc5, 0xe6, 0x1b, 0x5d, 0x7f, 0x38, 0x5d, 0x9a, 0xbe, 0xc8, 0x97, 0x09, 0x65, 0x62, 0x88, 0x99, 0xda, 0x95, 0x13, 0x93, 0xd9, 0xa3, 0x19, 0x0a, 0xa7, 0x4a, 0xb2, 0x81, 0xa4 }, + { 0x6e, 0x70, 0x65, 0xaa, 0x1b, 0x16, 0xcb, 0xc1, 0x59, 0x6b, 0xc9, 0x4d, 0xd1, 0x0a, 0x9d, 0x8c, 0x76, 0x70, 0x3c, 0xc1, 0xc1, 0x66, 0xa6, 0x9f, 0xfc, 0xca, 0xb0, 0x3f, 0x0e, 0xe9, 0xa9, 0x36, + 0x09, 0x4f, 0x94, 0xf3, 0x32, 0x25, 0x34, 0xf6, 0xe4, 0xf9, 0x0b, 0x0c, 0xe6, 0xe0, 0x6d, 0x9e, 0xa5, 0x52, 0x82, 0x9c, 0xd4, 0x43, 0xa4, 0xd1, 0xd1, 0x63, 0x20, 0xce, 0xbc, 0x4f, 0x43, 0xdc }, + { 0x35, 0xd6, 0xc1, 0x68, 0xa6, 0xd7, 0xd3, 0x36, 0x82, 0x2a, 0x0f, 0x29, 0x3e, 0xd6, 0x15, 0x29, 0x19, 0x73, 0x14, 0x78, 0x87, 0x86, 0xca, 0x9f, 0x6e, 0x17, 0xea, 0xaf, 0x24, 0x37, 0xd6, 0xb4, + 0xb0, 0xee, 0x84, 0x90, 0x2d, 0x18, 0xbd, 0x26, 0xc3, 0xd4, 0x39, 0x4f, 0x45, 0xfa, 0x2f, 0x70, 0xf2, 0xe2, 0x2a, 0x2a, 0x5c, 0x65, 0x15, 0xcb, 0xaf, 0x92, 0x9a, 0xfc, 0x06, 0xe0, 0x8a, 0x1b }, + { 0x5d, 0xfa, 0xc0, 0x2b, 0xc3, 0x94, 0x19, 0xb4, 0xd6, 0x13, 0xe3, 0xcf, 0x91, 0xad, 0x8c, 0xe1, 0x97, 0x46, 0xfe, 0xea, 0x74, 0xe0, 0x0c, 0x03, 0xf7, 0x2e, 0x51, 0xa7, 0xf2, 0xbc, 0xce, 0xe8, + 0x6b, 0xfd, 0x2f, 0x54, 0x52, 0x12, 0x00, 0x8d, 0x95, 0x91, 0xc3, 0xf6, 0x25, 0xf8, 0x65, 0x6a, 0x9c, 0x79, 0x6b, 0x71, 0xc0, 0x0c, 0x29, 0xfb, 0xe7, 0x14, 0x9f, 0x2f, 0x1a, 0x07, 0x53, 0x50 }, + { 0xe9, 0xd4, 0x46, 0x0b, 0x51, 0x3f, 0xf1, 0xbe, 0x0a, 0x23, 0xa5, 0x38, 0xa0, 0xe3, 0x70, 0x14, 0x63, 0xf0, 0x94, 0xbb, 0x1c, 0x4f, 0x23, 0x05, 0x1b, 0x62, 0x40, 0x9b, 0xf9, 0x52, 0x1b, 0x41, 0x51, 0x57, 0x2a, 0x99, 0x73, 0xda, 0xe1, 0xcf, 0xc5, 0x4c, 0x65, 0x3a, 0xc2, 0x9d, 0x73, 0xda, + 0xc9, 0x59, 0xf1, 0xdf, 0xab, 0x2b, 0x27, 0xe1, 0x59, 0x8b, 0xa7, 0x48, 0xf9, 0x36, 0xcb, 0x08, 0xe3, 0x5e, 0x1d, 0xdd, 0xf9, 0x20, 0x4f, 0x64, 0xa9, 0x26, 0x74, 0x97, 0xf2, 0x2d, 0x31, 0xac, 0x8c, 0x20, 0x77, 0x09, 0xa9, 0x8f, 0xed, 0x23, 0x77, 0x7e, 0xd7, 0x34, 0x93, 0x84, 0xe7, 0xaa }, + { 0xaa, 0xf7, 0x64, 0xdf, 0x34, 0x59, 0x1c, 0x2c, 0xbc, 0x47, 0x08, 0x6a, 0x25, 0xbf, 0x9d, 0x48, 0x54, 0xcf, 0xa0, 0x6c, 0xfc, 0xd4, 0x10, 0x39, 0x9f, 0x64, 0x46, 0xce, 0xd9, 0x95, 0x28, 0x89, 0xdf, 0x94, 0x5e, 0x74, 0x0b, 0x55, 0x46, 0x82, 0xd9, 0x3d, 0x82, 0x97, 0x7d, 0xd0, 0x3e, 0xd7, + 0xf6, 0x6f, 0xaa, 0x97, 0x3e, 0xdf, 0xa7, 0xde, 0xe3, 0xc5, 0xaf, 0xd3, 0xa0, 0x5a, 0x30, 0x0d, 0xe3, 0x5e, 0x1d, 0xdd, 0xf9, 0x20, 0x4f, 0x64, 0xa9, 0x26, 0x74, 0x97, 0xf2, 0x2d, 0x31, 0xac, 0x8c, 0x20, 0x77, 0x09, 0xa9, 0x8f, 0xed, 0x23, 0x77, 0x7e, 0xd7, 0x34, 0x93, 0x84, 0xe7, 0xaa } }, + { { 0x96, 0x4e, 0xf2, 0x1e, 0x3a, 0xe5, 0x77, 0xbf, 0xa7, 0x1c, 0x3d, 0x66, 0x08, 0x06, 0xca, 0x55, 0x43, 0x7a, 0x08, 0xf8, 0xff, 0x55, 0xb3, 0xbc, 0x9a, 0x83, 0x9a, 0x2e, 0xe6, 0x97, 0x14, 0x32, + 0x36, 0x57, 0x5c, 0xa4, 0x04, 0x78, 0xb1, 0x92, 0xf4, 0x23, 0x94, 0xe6, 0x2a, 0xef, 0xd4, 0xe7, 0xc4, 0x02, 0x9f, 0xa9, 0x79, 0x77, 0x61, 0x90, 0xd6, 0xdb, 0x6e, 0x28, 0x7e, 0xc0, 0x1d, 0x70 }, + { 0xc5, 0xd1, 0x5c, 0x34, 0x15, 0xa9, 0x1e, 0x42, 0x2a, 0x1b, 0x0d, 0xf0, 0x56, 0x83, 0x10, 0xc3, 0xc9, 0x21, 0xfd, 0x05, 0xfa, 0x51, 0x0e, 0x11, 0x28, 0xcc, 0x84, 0xac, 0x35, 0xb5, 0xd8, 0xc8, + 0x5c, 0x80, 0x11, 0x1f, 0x60, 0x1c, 0x72, 0x25, 0x82, 0x45, 0xb5, 0x4f, 0x66, 0x6b, 0x52, 0xb1, 0xf7, 0x28, 0x0f, 0x80, 0x76, 0x44, 0xdc, 0x15, 0x70, 0x39, 0xe9, 0xaf, 0xc7, 0x0a, 0xa0, 0x43 }, + { 0xff, 0x20, 0x5e, 0x3b, 0x75, 0xe9, 0x38, 0x7c, 0xa3, 0x5c, 0x8b, 0x1a, 0xec, 0x17, 0x8d, 0xf0, 0xef, 0xb3, 0x53, 0x9b, 0x16, 0xa9, 0x44, 0xf9, 0x34, 0x45, 0x13, 0x66, 0x80, 0x24, 0xdc, 0x22, + 0x0e, 0x51, 0x94, 0xed, 0xe6, 0x83, 0x36, 0x32, 0x63, 0x23, 0x1b, 0xf8, 0x78, 0xb4, 0x04, 0x7f, 0x5a, 0x50, 0x54, 0x12, 0x19, 0x04, 0x61, 0xdd, 0x25, 0xf0, 0x48, 0x29, 0x04, 0xc1, 0x44, 0xe2 }, + { 0x46, 0x32, 0x2d, 0xc7, 0xbc, 0x05, 0x2a, 0xd3, 0xb5, 0xce, 0x7d, 0x47, 0x5e, 0xfc, 0x90, 0x38, 0xef, 0xfa, 0x6f, 0x42, 0xf0, 0x66, 0x05, 0x89, 0x7c, 0x9a, 0xc1, 0xfd, 0xa2, 0xe8, 0xa7, 0x38, + 0x18, 0x6d, 0x7f, 0x9e, 0xfb, 0xbd, 0x06, 0x0c, 0x70, 0xd7, 0x29, 0x10, 0x88, 0x04, 0x9f, 0x24, 0x28, 0x9d, 0xc7, 0x84, 0xdf, 0xb6, 0xec, 0xb2, 0xc7, 0x1b, 0xd1, 0xc1, 0x9d, 0x56, 0xb0, 0x83 }, + { 0xda, 0xd7, 0x34, 0xee, 0x62, 0x13, 0x8f, 0x47, 0xad, 0xb4, 0x9c, 0x98, 0xe4, 0xc5, 0xb3, 0x29, 0x31, 0x11, 0x64, 0xad, 0xf5, 0x0b, 0x60, 0xe1, 0x0e, 0x18, 0x28, 0x30, 0x3c, 0xa2, 0xe3, 0x29, + 0x89, 0x0a, 0x7e, 0x18, 0xba, 0x30, 0x9e, 0x7d, 0x53, 0xf1, 0x82, 0xd5, 0x27, 0xe5, 0xf3, 0xab, 0x15, 0xcd, 0x62, 0x7e, 0xdf, 0xf0, 0x0e, 0x42, 0xfa, 0x6b, 0x7b, 0x54, 0xd2, 0x74, 0x19, 0x8f }, + { 0x29, 0x4d, 0x28, 0x80, 0x62, 0xb5, 0x77, 0xbb, 0x69, 0x70, 0xb0, 0xb7, 0x10, 0x2e, 0xed, 0xfc, 0x13, 0x34, 0x93, 0x7f, 0xd8, 0xfc, 0xb5, 0x7b, 0xfe, 0x34, 0x0a, 0xa3, 0x95, 0x5b, 0xb1, 0xa7, 0xc6, 0xab, 0x82, 0x79, 0x25, 0x23, 0x94, 0x12, 0xa4, 0x34, 0xec, 0x23, 0xca, 0xcb, 0xd0, 0xa3, + 0xf9, 0x31, 0x32, 0xce, 0x50, 0x31, 0x73, 0x23, 0x98, 0x94, 0xe3, 0x08, 0xd9, 0x1e, 0xc3, 0x0b, 0x39, 0xe3, 0x3b, 0xf2, 0xe8, 0xb7, 0x26, 0x28, 0x9d, 0xb3, 0x12, 0x8d, 0x16, 0xca, 0x89, 0x26, 0xa9, 0x1c, 0xa3, 0x1f, 0x36, 0x10, 0x60, 0x6a, 0x29, 0x85, 0xe7, 0x2c, 0xee, 0xc1, 0xb6, 0xae }, + { 0x68, 0xed, 0x3c, 0x64, 0xe6, 0x87, 0xf0, 0x14, 0x64, 0xfc, 0x38, 0x3a, 0x0f, 0xd9, 0x7a, 0x5b, 0x52, 0x32, 0x10, 0xca, 0xc6, 0x83, 0x0b, 0xae, 0x17, 0x0e, 0xfe, 0x77, 0xe0, 0xe7, 0x83, 0xa1, 0x2c, 0x78, 0x62, 0x9c, 0x79, 0x08, 0x2b, 0xd4, 0x85, 0x72, 0x27, 0x8d, 0x97, 0x78, 0x62, 0x33, + 0x34, 0xeb, 0x5c, 0xde, 0x5d, 0xaa, 0x4d, 0xfa, 0xd1, 0x67, 0xa4, 0xea, 0x45, 0xad, 0xf9, 0x06, 0x39, 0xe3, 0x3b, 0xf2, 0xe8, 0xb7, 0x26, 0x28, 0x9d, 0xb3, 0x12, 0x8d, 0x16, 0xca, 0x89, 0x26, 0xa9, 0x1c, 0xa3, 0x1f, 0x36, 0x10, 0x60, 0x6a, 0x29, 0x85, 0xe7, 0x2c, 0xee, 0xc1, 0xb6, 0xae } }, + { { 0xd9, 0x64, 0xb2, 0xe1, 0x9f, 0x0a, 0x35, 0xfc, 0x9f, 0xc3, 0xa5, 0x2a, 0xa3, 0x84, 0xb4, 0xf3, 0x23, 0xc4, 0xf3, 0x5a, 0x9d, 0xf8, 0x7f, 0x35, 0xa9, 0xf5, 0x5b, 0x68, 0xfc, 0x19, 0x69, 0x63, + 0x6a, 0x13, 0x19, 0x32, 0xcc, 0x9d, 0x0c, 0x3c, 0x7d, 0xdd, 0x85, 0x16, 0xa8, 0xd9, 0x2b, 0x75, 0x08, 0x4b, 0x9a, 0xa5, 0x6e, 0xf3, 0xe9, 0xeb, 0xed, 0x5d, 0x2e, 0xfd, 0x2e, 0x0c, 0x60, 0xa2 }, + { 0x0f, 0xf6, 0x8c, 0x3f, 0x6e, 0xee, 0x56, 0x4f, 0x43, 0x6f, 0x54, 0xbd, 0x7a, 0xe4, 0xbe, 0xa8, 0x77, 0x05, 0x99, 0xe7, 0x9e, 0x59, 0x22, 0x85, 0x9b, 0xc6, 0xe4, 0x2a, 0x61, 0x9c, 0x19, 0xb1, + 0x5a, 0xeb, 0x7a, 0xf8, 0x41, 0x4e, 0xe5, 0x2a, 0xd0, 0xf7, 0x44, 0xf0, 0x16, 0xea, 0x0c, 0x04, 0x19, 0x6c, 0xb6, 0x30, 0x3c, 0x6e, 0x2d, 0x79, 0x9a, 0x8f, 0x08, 0x90, 0x11, 0xf1, 0xc0, 0x4d }, + { 0x68, 0xe7, 0x1d, 0x40, 0xf1, 0x07, 0xc0, 0xc6, 0xb2, 0x87, 0x9c, 0xa2, 0x19, 0x43, 0x7a, 0xdf, 0x8a, 0x5a, 0x0f, 0xe2, 0x24, 0x97, 0xa0, 0x38, 0x79, 0x20, 0x38, 0xa9, 0x9c, 0x77, 0xc4, 0x37, + 0xa6, 0x02, 0xe0, 0x93, 0x47, 0xa4, 0x55, 0x21, 0xc2, 0x69, 0xbe, 0x09, 0x05, 0xaa, 0x87, 0x28, 0xf1, 0x95, 0x2f, 0xdb, 0xf0, 0xbf, 0xd2, 0x9e, 0x5e, 0x3a, 0xfa, 0xc6, 0x2f, 0x13, 0x09, 0xaf }, + { 0xe1, 0x9e, 0xc8, 0x4f, 0xc9, 0xdd, 0x61, 0x60, 0x94, 0xbc, 0xd3, 0xd6, 0xde, 0x11, 0x6e, 0xec, 0x84, 0xc4, 0xdd, 0xbe, 0x20, 0x46, 0x6c, 0xef, 0xf6, 0x9d, 0x37, 0x07, 0x53, 0x72, 0x57, 0xf9, + 0x02, 0xb5, 0x64, 0x1f, 0xe2, 0x56, 0xa4, 0x38, 0x6d, 0xa4, 0xed, 0x23, 0x9e, 0xa3, 0xf4, 0x4d, 0x77, 0x52, 0xdc, 0x8c, 0x51, 0xfc, 0x88, 0x18, 0xbc, 0x83, 0x2a, 0xac, 0xc1, 0x1d, 0x3d, 0x59 }, + { 0x08, 0x4f, 0x78, 0x21, 0xfd, 0x4b, 0x85, 0x86, 0x4e, 0x25, 0xdd, 0x47, 0x60, 0x7f, 0x7e, 0xc6, 0xd3, 0xa1, 0xab, 0x91, 0x3f, 0xeb, 0xf6, 0x40, 0x7e, 0x1b, 0xbd, 0x99, 0x9c, 0x7c, 0x2f, 0x4f, + 0xca, 0x68, 0xa5, 0xf6, 0x8c, 0x1e, 0xcb, 0xb8, 0x76, 0xe2, 0x87, 0x5b, 0x49, 0x68, 0x97, 0x2c, 0x21, 0x5c, 0x7c, 0x93, 0x79, 0x9a, 0x95, 0xa1, 0x3a, 0x49, 0xc9, 0x6d, 0x34, 0x6b, 0xa1, 0x98 }, + { 0xb9, 0x88, 0x25, 0x9a, 0x3b, 0x53, 0x56, 0xa1, 0x48, 0x0f, 0xf0, 0x92, 0xde, 0x4e, 0x3e, 0x3a, 0xcf, 0x02, 0xdc, 0x5c, 0xc2, 0xc3, 0x78, 0xad, 0x8a, 0x0c, 0x3c, 0xc7, 0xdd, 0xdd, 0x71, 0x6e, 0x3f, 0xd9, 0x3a, 0x57, 0x2a, 0x19, 0xa5, 0x3b, 0x5c, 0x46, 0x7b, 0xc9, 0x0f, 0x16, 0xb3, 0x58, + 0xa6, 0x85, 0xfa, 0x91, 0x2c, 0x9a, 0x9c, 0x12, 0xb6, 0xd6, 0x7d, 0x9a, 0xf0, 0x9d, 0xe9, 0x02, 0xad, 0x12, 0x87, 0xda, 0x85, 0x58, 0x6b, 0xff, 0x68, 0x96, 0x05, 0x33, 0xba, 0x7f, 0x08, 0xf9, 0xa9, 0xa2, 0xa9, 0x46, 0x43, 0xe5, 0x03, 0x12, 0xe4, 0xbe, 0x74, 0xaa, 0x46, 0x4e, 0x51, 0xb3 }, + { 0x61, 0x70, 0x17, 0x50, 0x26, 0xfa, 0x51, 0x83, 0xe0, 0xca, 0xa9, 0xb1, 0xc3, 0xc4, 0x83, 0xa9, 0xb6, 0x43, 0x6b, 0x7a, 0x5b, 0xe4, 0x21, 0x5a, 0x6b, 0xd4, 0x34, 0xf8, 0xee, 0x95, 0x86, 0x2d, 0x03, 0xbf, 0xca, 0xd0, 0xfa, 0x68, 0x53, 0xb2, 0x97, 0x50, 0xad, 0x89, 0x2f, 0x99, 0x63, 0x67, + 0x18, 0x57, 0x1f, 0x57, 0x41, 0xbc, 0xb7, 0xc0, 0x18, 0xe7, 0xb6, 0xf3, 0x0f, 0xc4, 0x49, 0x0d, 0xad, 0x12, 0x87, 0xda, 0x85, 0x58, 0x6b, 0xff, 0x68, 0x96, 0x05, 0x33, 0xba, 0x7f, 0x08, 0xf9, 0xa9, 0xa2, 0xa9, 0x46, 0x43, 0xe5, 0x03, 0x12, 0xe4, 0xbe, 0x74, 0xaa, 0x46, 0x4e, 0x51, 0xb3 } }, + { { 0xc5, 0xdf, 0x86, 0x8f, 0xf1, 0xa7, 0xad, 0x57, 0xfd, 0xb4, 0x53, 0xc3, 0x92, 0x1b, 0x9e, 0x2e, 0xdd, 0xc5, 0xa4, 0x3b, 0x72, 0xa6, 0x9b, 0x4a, 0x15, 0xca, 0x35, 0xed, 0x3c, 0x1a, 0x3b, 0x38, + 0x36, 0xd6, 0xf2, 0x03, 0xb6, 0x97, 0x1f, 0xcb, 0x40, 0x5d, 0x3c, 0x25, 0xfc, 0xe7, 0xff, 0xc6, 0xbe, 0x61, 0xe1, 0x98, 0x31, 0x13, 0xa9, 0xbe, 0x05, 0x86, 0xfe, 0x5c, 0xf6, 0xcc, 0xaa, 0xf5 }, + { 0xd2, 0x57, 0x19, 0x98, 0xf8, 0x74, 0x90, 0xb7, 0x69, 0x6e, 0xdd, 0x44, 0xf1, 0x8b, 0xb1, 0x9c, 0xfd, 0x5b, 0x6b, 0xc0, 0x45, 0xf2, 0x49, 0xa5, 0x4b, 0xff, 0x8b, 0x7f, 0x87, 0xe3, 0xf9, 0x71, + 0xab, 0xfa, 0xc8, 0x17, 0xed, 0xeb, 0x19, 0xc6, 0x3c, 0xee, 0x78, 0xba, 0x89, 0x97, 0x49, 0x85, 0x39, 0x68, 0x29, 0x88, 0x0b, 0x1c, 0xd1, 0x42, 0x8b, 0xe8, 0x1a, 0x3b, 0xeb, 0x4d, 0xef, 0x3b }, + { 0xea, 0xfb, 0xec, 0x27, 0xc3, 0x92, 0xc3, 0x68, 0x0d, 0x3c, 0x5b, 0x20, 0x20, 0x9c, 0x96, 0xa7, 0x39, 0xfa, 0x80, 0x91, 0xef, 0x86, 0x7d, 0xa8, 0x87, 0xf6, 0xef, 0x14, 0x01, 0x46, 0xf0, 0x68, + 0x0a, 0x8b, 0xae, 0x83, 0x91, 0x7e, 0xa0, 0x14, 0x14, 0xde, 0xf9, 0xa8, 0xfd, 0x67, 0x57, 0x17, 0x20, 0x46, 0x43, 0x49, 0x07, 0xf0, 0x3e, 0xc8, 0xbe, 0x66, 0xaf, 0x58, 0x3a, 0xbd, 0xd8, 0x00 }, + { 0x35, 0xf5, 0xc8, 0x2c, 0x0e, 0x4b, 0x56, 0xe0, 0xef, 0x08, 0x34, 0x38, 0x57, 0xe9, 0xde, 0xdb, 0x1d, 0xe1, 0x28, 0x05, 0x01, 0xed, 0x62, 0x3d, 0xa9, 0x6e, 0xea, 0x5b, 0x95, 0x09, 0xe0, 0x04, + 0x46, 0xff, 0xdc, 0x34, 0xf6, 0xf7, 0x63, 0xb1, 0x76, 0xb8, 0x3c, 0x03, 0xef, 0x36, 0x0f, 0x82, 0x1b, 0x5b, 0x6f, 0xe2, 0x86, 0xd9, 0x10, 0x01, 0xe6, 0x73, 0x75, 0x0d, 0x50, 0x30, 0x11, 0x68 }, + { 0x27, 0xb6, 0x3b, 0x78, 0x79, 0xf3, 0x22, 0x78, 0x8f, 0x0c, 0x14, 0x8b, 0x3f, 0x68, 0xc2, 0xab, 0x9f, 0x9f, 0x05, 0x70, 0x7e, 0xee, 0x4b, 0x1b, 0x6b, 0xfc, 0x04, 0x72, 0xca, 0xf1, 0x9a, 0xba, + 0xe3, 0x65, 0x9d, 0xdb, 0x01, 0x33, 0xc5, 0xdb, 0xf6, 0x87, 0xe4, 0x73, 0x5a, 0x0f, 0x94, 0xa9, 0x2e, 0xfe, 0x8f, 0x3e, 0xd1, 0x0a, 0x6d, 0xa1, 0x21, 0x2a, 0x92, 0x8c, 0x4b, 0x43, 0x13, 0x2f }, + { 0xa3, 0xa8, 0x3b, 0xb4, 0x4f, 0x8a, 0xac, 0xab, 0x8a, 0x4c, 0x39, 0x7e, 0xb8, 0x2f, 0xb1, 0x01, 0x2e, 0xbe, 0x0e, 0x7d, 0x28, 0x8a, 0x18, 0x4a, 0xda, 0x58, 0x1a, 0xfb, 0x95, 0x97, 0xf3, 0x63, 0x58, 0xbe, 0x8c, 0x30, 0x13, 0x9b, 0xba, 0x9f, 0x4e, 0xac, 0x8d, 0x95, 0xf2, 0x07, 0xbb, 0x85, + 0xa1, 0x41, 0x4c, 0x33, 0xe3, 0x58, 0x8e, 0x5c, 0xa1, 0x05, 0x45, 0xab, 0x5c, 0x0c, 0xe4, 0x02, 0xc3, 0xa0, 0xa0, 0x72, 0xdb, 0x9a, 0x9d, 0xbf, 0x13, 0x29, 0x94, 0x70, 0x8b, 0xe4, 0xe8, 0xdb, 0x0e, 0x0b, 0xd0, 0xa0, 0x25, 0xad, 0x71, 0xa0, 0x27, 0x9c, 0x1d, 0x77, 0xb0, 0x98, 0xa8, 0x03 }, + { 0xe1, 0x84, 0xa5, 0xea, 0xa5, 0xd8, 0x1b, 0x29, 0xce, 0xd7, 0xa3, 0x72, 0xa7, 0xc9, 0xa5, 0xea, 0xf1, 0x02, 0xf3, 0x0c, 0xb0, 0x65, 0x12, 0xbc, 0xa4, 0xf2, 0x5d, 0x69, 0x00, 0xa4, 0x7f, 0x5a, 0x52, 0x09, 0xb6, 0x7b, 0x30, 0xf2, 0x99, 0x03, 0x39, 0x9d, 0xee, 0x6f, 0xb5, 0xf7, 0x9e, 0x7a, + 0x97, 0x8b, 0x81, 0x03, 0x8c, 0xdd, 0x35, 0xfc, 0x1f, 0x0a, 0xc6, 0xa4, 0x60, 0x7b, 0xc8, 0x0a, 0xc3, 0xa0, 0xa0, 0x72, 0xdb, 0x9a, 0x9d, 0xbf, 0x13, 0x29, 0x94, 0x70, 0x8b, 0xe4, 0xe8, 0xdb, 0x0e, 0x0b, 0xd0, 0xa0, 0x25, 0xad, 0x71, 0xa0, 0x27, 0x9c, 0x1d, 0x77, 0xb0, 0x98, 0xa8, 0x03 } }, + { { 0x67, 0xe9, 0x62, 0x76, 0x3a, 0x90, 0x9b, 0x6b, 0x19, 0x1d, 0x65, 0xb2, 0x2a, 0x2f, 0xf7, 0x50, 0xaa, 0x54, 0xa5, 0xbb, 0x53, 0xb5, 0xf9, 0xee, 0x0c, 0x04, 0x3a, 0x3c, 0x29, 0x4b, 0x66, 0x3e, + 0x7b, 0xb6, 0xaa, 0xd2, 0x10, 0x89, 0xcc, 0x89, 0x2c, 0x47, 0xbe, 0x23, 0xd6, 0x52, 0x81, 0x5d, 0xc8, 0xbc, 0x49, 0xd6, 0x6a, 0xcd, 0x62, 0x99, 0x30, 0xff, 0x16, 0xa5, 0x50, 0x44, 0xd8, 0x7a }, + { 0xd6, 0xcd, 0xfe, 0xd4, 0x44, 0x4a, 0x9e, 0x90, 0x44, 0x73, 0x8a, 0xff, 0xbb, 0x82, 0x08, 0xb6, 0x7f, 0xf2, 0x87, 0xcb, 0xa5, 0x0b, 0x56, 0xd3, 0x9e, 0x91, 0xb8, 0x52, 0x6b, 0x25, 0xa6, 0x5d, + 0x50, 0xaf, 0x9b, 0xd5, 0xfb, 0x9f, 0x7e, 0x2d, 0x57, 0xdf, 0x30, 0x78, 0x8d, 0x1a, 0xc3, 0xac, 0x9c, 0x5a, 0xbf, 0xab, 0x5a, 0x0d, 0xc9, 0xb6, 0x4b, 0x18, 0xd4, 0xe7, 0x55, 0x40, 0xde, 0x7e }, + { 0xc2, 0xa9, 0x7e, 0x5c, 0x26, 0xf4, 0x7d, 0xce, 0x9e, 0x73, 0xae, 0x50, 0xde, 0xe7, 0xa6, 0xf9, 0x8b, 0x57, 0xf9, 0x7a, 0x4c, 0x38, 0x82, 0xf6, 0x30, 0x80, 0x12, 0xf7, 0xf6, 0x66, 0x80, 0x46, + 0x4d, 0x41, 0x53, 0x63, 0xd9, 0x65, 0x90, 0xe7, 0xee, 0x24, 0x07, 0xb0, 0x4f, 0xeb, 0x3e, 0x8e, 0x83, 0x21, 0xa3, 0x40, 0x03, 0xc0, 0x64, 0x52, 0xc6, 0xb2, 0x12, 0x9d, 0x8d, 0x86, 0xdd, 0x19 }, + { 0xe2, 0xd5, 0x49, 0x5e, 0x2a, 0x6e, 0x4e, 0xd9, 0x31, 0x26, 0x53, 0x13, 0x98, 0x5e, 0x2f, 0x23, 0xea, 0xa0, 0x30, 0xee, 0xef, 0x62, 0x2b, 0xdc, 0x93, 0x65, 0x90, 0xad, 0x9a, 0xf1, 0x74, 0x12, + 0xf5, 0x24, 0x33, 0xcc, 0xc3, 0xda, 0x42, 0x54, 0xa6, 0x6c, 0x86, 0x99, 0xb9, 0xb5, 0xf7, 0x07, 0x90, 0xd8, 0x85, 0x7f, 0x69, 0xfb, 0x19, 0x2a, 0x2c, 0xc0, 0x11, 0x81, 0x64, 0x37, 0x38, 0x07 }, + { 0xc7, 0xb3, 0xf5, 0xe4, 0x4b, 0x55, 0xcf, 0xd8, 0x2b, 0x72, 0xde, 0x62, 0xfc, 0x66, 0xea, 0x82, 0xee, 0x2e, 0xe5, 0x4f, 0x66, 0xba, 0x19, 0x63, 0x01, 0x0b, 0x2d, 0x89, 0xb4, 0xaa, 0x76, 0xb3, + 0x7e, 0xc5, 0xbe, 0xdd, 0x57, 0x90, 0x5e, 0xff, 0x5b, 0x9a, 0x71, 0xe1, 0x47, 0xf9, 0xec, 0xe5, 0xf0, 0x19, 0x89, 0x17, 0x65, 0x3e, 0x56, 0x4a, 0x98, 0xb2, 0x3c, 0x3b, 0xf0, 0x14, 0x13, 0x1b }, + { 0xc0, 0x72, 0x26, 0x96, 0x6b, 0xf5, 0x50, 0xa1, 0x65, 0xcd, 0xfe, 0x92, 0xa5, 0x5a, 0xb3, 0x56, 0x27, 0x5b, 0x2f, 0x4a, 0x8f, 0x67, 0xaa, 0xf4, 0xa1, 0x6e, 0x3c, 0x66, 0xcc, 0xb7, 0x71, 0x70, 0xff, 0x70, 0x1f, 0x9e, 0x09, 0xae, 0x31, 0xcb, 0x2a, 0xd5, 0x8a, 0x38, 0xa9, 0xaf, 0xbc, 0x94, + 0xa2, 0xa8, 0xe9, 0x77, 0x1c, 0xc3, 0xfa, 0xd1, 0x45, 0xd2, 0xe2, 0xff, 0x7d, 0xf2, 0x44, 0x00, 0xa0, 0xc3, 0xc1, 0xdd, 0xa0, 0x4c, 0xfb, 0xed, 0x1a, 0xbd, 0x0c, 0x05, 0x3b, 0xa9, 0xc8, 0x98, 0xb0, 0x7d, 0x6a, 0x77, 0xcb, 0x08, 0x70, 0x64, 0x31, 0x9d, 0x9c, 0x7b, 0x40, 0x9e, 0xbb, 0xf4 }, + { 0xbc, 0x88, 0x9d, 0x36, 0xae, 0xbc, 0x92, 0x47, 0x63, 0x85, 0x41, 0xe3, 0x1e, 0x1c, 0x39, 0xf5, 0xd3, 0xc2, 0x0a, 0x7d, 0x18, 0x7a, 0x8f, 0xd3, 0x0c, 0x37, 0x50, 0x28, 0x35, 0x93, 0x77, 0x4b, 0xcb, 0xba, 0x35, 0x4e, 0x94, 0x48, 0xe4, 0x0c, 0xa7, 0x36, 0x4f, 0x74, 0x2b, 0xf9, 0xb5, 0xb5, + 0xeb, 0x91, 0x50, 0x3c, 0x67, 0x9b, 0x4d, 0x25, 0xd4, 0x0e, 0x0d, 0xb9, 0x5b, 0x77, 0xf3, 0x0e, 0xa0, 0xc3, 0xc1, 0xdd, 0xa0, 0x4c, 0xfb, 0xed, 0x1a, 0xbd, 0x0c, 0x05, 0x3b, 0xa9, 0xc8, 0x98, 0xb0, 0x7d, 0x6a, 0x77, 0xcb, 0x08, 0x70, 0x64, 0x31, 0x9d, 0x9c, 0x7b, 0x40, 0x9e, 0xbb, 0xf4 } }, + { { 0x44, 0xdd, 0x62, 0x9e, 0x0f, 0xee, 0x20, 0x11, 0x37, 0xfc, 0xd0, 0x5c, 0xe4, 0xe1, 0x0a, 0xb8, 0xc2, 0xe0, 0x9c, 0x2c, 0x3e, 0x1b, 0x31, 0x1c, 0xdb, 0xa3, 0x84, 0x9a, 0xb7, 0x4e, 0x40, 0x74, + 0x21, 0xfd, 0xfc, 0x65, 0xbd, 0x38, 0x8a, 0x55, 0x6f, 0x1e, 0xc3, 0x14, 0xfc, 0x66, 0x04, 0x7b, 0xc4, 0x61, 0xb0, 0xcb, 0xfa, 0xdd, 0x50, 0x45, 0x4b, 0x2e, 0xf0, 0x6d, 0x0f, 0x26, 0x6d, 0xbf }, + { 0xe6, 0xbc, 0x35, 0x73, 0xb3, 0x11, 0x38, 0xc6, 0x31, 0x82, 0x96, 0x80, 0x1d, 0xa9, 0xd9, 0x17, 0x85, 0x4e, 0xad, 0x0f, 0x5c, 0xb7, 0xe8, 0x78, 0x62, 0x2f, 0x3c, 0x10, 0x0e, 0xdc, 0xf2, 0x7e, + 0xf5, 0x02, 0x6d, 0x1a, 0x50, 0xc2, 0x50, 0x7d, 0x0d, 0x14, 0x77, 0x77, 0xfc, 0xbe, 0x23, 0x02, 0x81, 0x0a, 0xdc, 0xa3, 0x16, 0xfd, 0xab, 0xb9, 0x7c, 0xb6, 0x7e, 0x8a, 0xde, 0x1f, 0x22, 0xeb }, + { 0xab, 0xf3, 0xea, 0x63, 0xc0, 0x25, 0xa2, 0xc7, 0x6a, 0xfe, 0x91, 0x4a, 0x0a, 0x91, 0xdd, 0x6d, 0x6f, 0x8c, 0xf9, 0xa8, 0x1c, 0x9f, 0xb5, 0xe5, 0xd2, 0xac, 0xe6, 0x51, 0x9a, 0xd3, 0x87, 0x17, + 0x82, 0x12, 0x0a, 0x58, 0x99, 0x7f, 0x81, 0x2d, 0x8d, 0x27, 0x2d, 0x1b, 0xb0, 0x02, 0x7e, 0x0d, 0xd6, 0x18, 0x89, 0x5e, 0x0c, 0x2b, 0x57, 0xa6, 0x56, 0x35, 0xff, 0x71, 0x4e, 0xb0, 0x49, 0x38 }, + { 0x36, 0xdf, 0x1d, 0x1c, 0xf6, 0xa7, 0x4d, 0x87, 0x7e, 0x2c, 0x3f, 0xb4, 0xda, 0xd7, 0x80, 0x71, 0x0b, 0xf3, 0x2a, 0x47, 0x20, 0xe6, 0x9a, 0x3d, 0x17, 0x9a, 0x97, 0xc9, 0x4e, 0x53, 0xa6, 0xe2, + 0x23, 0xea, 0x94, 0x4d, 0xf9, 0xeb, 0x2c, 0x03, 0x2c, 0x88, 0xa2, 0xe6, 0xc5, 0x94, 0xa5, 0x6f, 0xc3, 0x98, 0xa9, 0x8b, 0xa7, 0x41, 0x7d, 0xd3, 0x82, 0x01, 0x13, 0xb6, 0x0f, 0x39, 0x1e, 0xd2 }, + { 0x08, 0x28, 0xc3, 0x1c, 0xec, 0x21, 0x3a, 0xb4, 0x4c, 0xb1, 0xfa, 0xb9, 0x0c, 0xfe, 0xc2, 0x50, 0xc5, 0x99, 0x62, 0xa0, 0x11, 0x74, 0xcf, 0x05, 0x1e, 0x2b, 0xdf, 0x6d, 0x22, 0x8e, 0x6e, 0x55, + 0x19, 0x21, 0x9c, 0xa1, 0x98, 0x56, 0x45, 0x90, 0x40, 0x3a, 0x8e, 0xad, 0x76, 0x4d, 0xd3, 0x95, 0x27, 0x67, 0x4e, 0x02, 0x16, 0xc3, 0xfe, 0x5a, 0x79, 0x4e, 0x2d, 0x6f, 0xd0, 0xe4, 0x4f, 0x62 }, + { 0x40, 0x14, 0xe1, 0x88, 0x3d, 0xcc, 0x51, 0xcb, 0x98, 0x86, 0x06, 0x4d, 0xe4, 0x52, 0x71, 0xe2, 0x2e, 0x2b, 0x80, 0xfd, 0x81, 0x65, 0xaf, 0x93, 0x31, 0x87, 0xe0, 0xff, 0x31, 0xab, 0xff, 0x53, 0x0e, 0x2d, 0xb1, 0x47, 0xe6, 0x44, 0xb7, 0x29, 0xab, 0x0f, 0x51, 0x3a, 0x53, 0x84, 0x36, 0x58, + 0x8c, 0x5f, 0x7b, 0x65, 0x6a, 0xb7, 0x6f, 0xdc, 0xad, 0xc1, 0xa3, 0xe4, 0x21, 0xfc, 0x22, 0x0e, 0xc1, 0x10, 0xd1, 0x7d, 0x9f, 0xd3, 0x1e, 0x33, 0xb4, 0xca, 0xb9, 0xff, 0xd8, 0x27, 0xb8, 0xca, 0xde, 0x49, 0x6f, 0xdc, 0xf0, 0xe8, 0x70, 0x36, 0xdb, 0x90, 0x00, 0x07, 0x9e, 0x77, 0x39, 0xfe }, + { 0xc9, 0x93, 0x4b, 0xe6, 0x47, 0x7e, 0x1d, 0x86, 0x15, 0x46, 0xe8, 0x27, 0xf5, 0x84, 0x67, 0x4e, 0x42, 0xe3, 0x2b, 0x8a, 0x4e, 0x90, 0x7b, 0x87, 0xcc, 0xdf, 0xaa, 0x04, 0x06, 0x05, 0xe6, 0x72, 0xff, 0x6f, 0x44, 0x1b, 0x08, 0xad, 0x79, 0x3e, 0xb7, 0xdd, 0xd7, 0x2c, 0x73, 0xf0, 0xf0, 0xc4, + 0x6e, 0xb7, 0x37, 0xe1, 0x02, 0xf5, 0x42, 0xe7, 0xef, 0xa1, 0xdd, 0x50, 0x9a, 0xc5, 0x8d, 0x00, 0xc1, 0x10, 0xd1, 0x7d, 0x9f, 0xd3, 0x1e, 0x33, 0xb4, 0xca, 0xb9, 0xff, 0xd8, 0x27, 0xb8, 0xca, 0xde, 0x49, 0x6f, 0xdc, 0xf0, 0xe8, 0x70, 0x36, 0xdb, 0x90, 0x00, 0x07, 0x9e, 0x77, 0x39, 0xfe } }, + { { 0x3e, 0x0c, 0x21, 0xc4, 0x3d, 0x64, 0x61, 0xc1, 0x9d, 0xa1, 0x83, 0x10, 0x74, 0x1d, 0x56, 0x12, 0xaf, 0x29, 0x5c, 0x6c, 0x12, 0x48, 0x0a, 0xc7, 0xe5, 0x12, 0xb6, 0x42, 0x6b, 0x54, 0xf4, 0x42, + 0x0c, 0x43, 0x42, 0x2e, 0x78, 0xc2, 0xe7, 0x26, 0x09, 0x41, 0x4a, 0x2f, 0xa1, 0xb0, 0x1f, 0xcd, 0x63, 0x76, 0x1e, 0xa1, 0x6f, 0xf6, 0xe2, 0xc2, 0x08, 0x89, 0x0d, 0x28, 0xbf, 0x1b, 0x56, 0x5b }, + { 0x3e, 0x2e, 0xf2, 0xcc, 0x81, 0xca, 0xa7, 0x5d, 0x01, 0xd2, 0x82, 0xfd, 0x45, 0xee, 0xc0, 0xf5, 0x49, 0x3b, 0xe2, 0xa4, 0x2a, 0x4d, 0x5f, 0x40, 0x0d, 0xbc, 0xb9, 0x3d, 0x6e, 0xda, 0xe2, 0x86, + 0xe1, 0x23, 0x8b, 0x5f, 0x0d, 0xa2, 0x35, 0x15, 0x1d, 0x22, 0x23, 0xa5, 0x69, 0x56, 0x34, 0x78, 0xb3, 0xb3, 0x55, 0xef, 0x63, 0x8a, 0x17, 0x63, 0xda, 0xf0, 0x64, 0x99, 0x8a, 0x8a, 0xba, 0xd6 }, + { 0x68, 0x79, 0x36, 0xa7, 0x6b, 0xe3, 0x76, 0x1c, 0xe3, 0x38, 0x0b, 0xa3, 0x91, 0xb6, 0xb0, 0x82, 0x37, 0xfa, 0x52, 0x74, 0xf1, 0xb5, 0xd5, 0xd9, 0x07, 0x06, 0x9e, 0xda, 0x87, 0x6b, 0x0f, 0x24, + 0x4f, 0xbe, 0xc9, 0xff, 0x03, 0x41, 0xaf, 0x77, 0x68, 0xed, 0xe7, 0x71, 0xba, 0x2d, 0xde, 0x27, 0xa1, 0xbf, 0xa8, 0xa7, 0x30, 0x7c, 0xcb, 0x79, 0x72, 0x89, 0x1a, 0xdc, 0xc1, 0xe4, 0xb2, 0x9d }, + { 0x94, 0xa3, 0x11, 0xf4, 0x44, 0x80, 0xd0, 0xa3, 0x47, 0x93, 0x36, 0xe2, 0xbd, 0x04, 0xe4, 0x74, 0x3d, 0x00, 0x60, 0xad, 0xd0, 0x2d, 0x86, 0x66, 0xa1, 0x72, 0x1a, 0xb9, 0x1c, 0x14, 0xa2, 0x9b, + 0x4b, 0x04, 0x7d, 0x5b, 0xcd, 0xf8, 0x01, 0x33, 0xde, 0x34, 0x10, 0x29, 0xc4, 0x72, 0x56, 0xff, 0x11, 0xcd, 0xd8, 0x61, 0x2c, 0xb6, 0xb7, 0xf4, 0x24, 0x8b, 0x44, 0xb4, 0xe7, 0x34, 0x50, 0xb8 }, + { 0x72, 0xf6, 0xd4, 0xa3, 0x24, 0xf9, 0xef, 0xf4, 0x55, 0x8d, 0x3c, 0x07, 0xca, 0x10, 0xdd, 0x54, 0x87, 0x13, 0x32, 0x78, 0x5c, 0x64, 0x10, 0x08, 0x62, 0x7e, 0xf4, 0x34, 0x0f, 0x1c, 0xcd, 0xcc, + 0x3b, 0x42, 0xfe, 0x60, 0x41, 0x70, 0x2c, 0x6b, 0xd4, 0x6c, 0xf7, 0xb8, 0x24, 0xf6, 0xd7, 0x07, 0xb3, 0x46, 0xb0, 0x7d, 0x14, 0x24, 0x9b, 0x72, 0x79, 0xf4, 0x23, 0x2a, 0xec, 0x02, 0xe7, 0x69 }, + { 0xe5, 0xbe, 0x84, 0xc3, 0x92, 0x47, 0x15, 0xd3, 0xac, 0x06, 0x44, 0x72, 0x41, 0xeb, 0xb6, 0x5a, 0x17, 0x06, 0x90, 0xd9, 0x55, 0x3d, 0xe4, 0x87, 0x7d, 0x5a, 0x11, 0x9f, 0x02, 0x6d, 0xd3, 0x4e, 0x71, 0xd1, 0x5e, 0x16, 0x9f, 0xb2, 0xc0, 0x7f, 0xcb, 0x78, 0x8b, 0x89, 0x11, 0xae, 0x43, 0xe8, + 0x85, 0xb7, 0xf9, 0xc8, 0x48, 0x5a, 0xb2, 0x96, 0xaf, 0x8f, 0xab, 0x71, 0x84, 0x9d, 0x40, 0x09, 0x30, 0xd4, 0x32, 0x6e, 0xa2, 0x77, 0x97, 0x71, 0x37, 0xce, 0x22, 0x6b, 0xca, 0xc9, 0x79, 0xef, 0xc0, 0xb2, 0xb4, 0x3d, 0x30, 0xbf, 0x77, 0xe9, 0xc3, 0x8d, 0xec, 0x15, 0x04, 0x08, 0xfa, 0x15 }, + { 0x4b, 0xf3, 0x7f, 0xb2, 0x78, 0x75, 0x45, 0xd4, 0xce, 0x5e, 0x3d, 0xaf, 0x92, 0x63, 0x3d, 0x90, 0xc0, 0xa7, 0x23, 0x62, 0x7f, 0x37, 0x58, 0x8d, 0x12, 0xe0, 0xb8, 0x6c, 0x46, 0x38, 0xaa, 0xf7, 0xe1, 0x03, 0x9e, 0x1f, 0x31, 0xf9, 0x5a, 0xa4, 0x59, 0x0d, 0xec, 0xc5, 0x1f, 0x17, 0x88, 0x25, + 0xcc, 0xed, 0x69, 0x2b, 0x91, 0x73, 0x6a, 0x3f, 0xcb, 0xe5, 0x9c, 0x1e, 0x26, 0x3e, 0xec, 0x0b, 0x30, 0xd4, 0x32, 0x6e, 0xa2, 0x77, 0x97, 0x71, 0x37, 0xce, 0x22, 0x6b, 0xca, 0xc9, 0x79, 0xef, 0xc0, 0xb2, 0xb4, 0x3d, 0x30, 0xbf, 0x77, 0xe9, 0xc3, 0x8d, 0xec, 0x15, 0x04, 0x08, 0xfa, 0x15 } }, + { { 0xc5, 0x1d, 0xcd, 0x70, 0xb2, 0x9e, 0x53, 0x29, 0x05, 0x78, 0x83, 0x5d, 0x56, 0x30, 0x89, 0xee, 0x02, 0xd7, 0xac, 0x57, 0x0a, 0xd2, 0xa0, 0x9c, 0x96, 0x0c, 0xbf, 0xf2, 0x30, 0xbf, 0x1a, 0x2b, + 0xee, 0x0e, 0x9f, 0x1e, 0x1c, 0x65, 0x7d, 0xb5, 0x48, 0xad, 0x6f, 0x51, 0xa0, 0x91, 0x61, 0xe4, 0xe6, 0x83, 0x9f, 0x58, 0x7c, 0x76, 0x2b, 0x52, 0x94, 0x87, 0x3c, 0x8d, 0x36, 0x4c, 0x37, 0x3c }, + { 0x59, 0x3b, 0x0d, 0x38, 0xab, 0x93, 0xca, 0xfb, 0x67, 0x44, 0x30, 0x96, 0xec, 0xbd, 0x00, 0x1d, 0x93, 0xd0, 0xb3, 0x3d, 0x3c, 0xd4, 0x4e, 0x3d, 0xd8, 0x29, 0x93, 0xb2, 0xb3, 0x77, 0xfc, 0x57, + 0x31, 0x20, 0xe3, 0x90, 0x0d, 0xf4, 0x91, 0x2f, 0x8b, 0x43, 0xce, 0xfe, 0x99, 0x03, 0x03, 0xa2, 0x90, 0x8d, 0xcf, 0xa8, 0xc0, 0x21, 0x00, 0xca, 0xcc, 0xcb, 0x4b, 0x2f, 0xa5, 0x39, 0xa8, 0x0b }, + { 0xca, 0xf6, 0xf9, 0xbb, 0x53, 0xcb, 0x97, 0x76, 0xb6, 0x9c, 0x2c, 0x18, 0x21, 0x43, 0x13, 0x48, 0x13, 0xc9, 0x0e, 0xeb, 0x40, 0xea, 0xce, 0x1f, 0x3a, 0xe9, 0xd2, 0x9e, 0x29, 0xdb, 0xe2, 0x79, + 0xe2, 0x1a, 0x9f, 0x84, 0x9d, 0xe4, 0x55, 0x82, 0x17, 0xeb, 0x87, 0xf6, 0xc3, 0xef, 0xcd, 0x54, 0x14, 0xee, 0xc8, 0x5b, 0xd7, 0x67, 0x05, 0xe2, 0x34, 0xa2, 0x7e, 0x81, 0x83, 0x21, 0x7a, 0x02 }, + { 0xc5, 0x03, 0xd9, 0x75, 0xdf, 0x17, 0x15, 0xe3, 0x5b, 0x7b, 0x4f, 0x66, 0x9c, 0x15, 0x4e, 0x01, 0xdf, 0x3d, 0x16, 0xb6, 0x52, 0xcc, 0xcf, 0x28, 0x40, 0xdb, 0x20, 0xee, 0x8b, 0x69, 0xb1, 0x2b, + 0xc0, 0x6e, 0xe4, 0xd2, 0xf5, 0xd1, 0x49, 0x3f, 0xf3, 0x0a, 0x12, 0xcd, 0x13, 0xbd, 0x9d, 0x3d, 0x5b, 0x28, 0x5c, 0xb0, 0x0d, 0x0e, 0xb6, 0xed, 0xec, 0x65, 0xeb, 0x25, 0x28, 0x2e, 0x65, 0x2f }, + { 0xed, 0xa7, 0x05, 0xc1, 0xa6, 0x81, 0xf2, 0x7a, 0x69, 0x68, 0x17, 0x8e, 0xf7, 0xc9, 0x14, 0x80, 0x9f, 0x81, 0xfe, 0x16, 0xfd, 0x81, 0x93, 0xb4, 0x0b, 0x05, 0x5b, 0x4e, 0xef, 0x6e, 0x7a, 0x67, + 0x9d, 0x99, 0x4c, 0x17, 0xcd, 0x1c, 0x16, 0xfd, 0x31, 0x35, 0xd5, 0x3e, 0xa3, 0x00, 0xbf, 0xbe, 0xda, 0xd6, 0xe2, 0x37, 0x9b, 0x13, 0x1b, 0xca, 0x29, 0x90, 0x4b, 0xf2, 0x09, 0x57, 0x2f, 0xe9 }, + { 0xd7, 0xba, 0x23, 0xd3, 0xa0, 0x6e, 0x14, 0x6a, 0xf0, 0x77, 0xb7, 0xe6, 0xe3, 0xc9, 0x3b, 0x38, 0xbb, 0xe7, 0xbe, 0x54, 0x75, 0xf8, 0xb7, 0x42, 0x29, 0xe2, 0x83, 0xde, 0x20, 0x22, 0x41, 0xcf, 0x5f, 0x6f, 0x80, 0x60, 0xf3, 0x44, 0x04, 0x21, 0xd5, 0x03, 0x68, 0x42, 0xde, 0x81, 0xea, 0xe8, + 0x7e, 0x5b, 0x80, 0x0f, 0x1b, 0x2d, 0x06, 0xc7, 0xce, 0xe9, 0x46, 0xc7, 0xf7, 0xb3, 0xa2, 0x02, 0x21, 0xb5, 0x4d, 0xc2, 0x36, 0xea, 0xe6, 0x7b, 0xb3, 0x61, 0xe6, 0x18, 0x40, 0x5b, 0xce, 0x5b, 0xc2, 0xee, 0xa5, 0xde, 0xe9, 0xe6, 0xe0, 0xa8, 0x58, 0x58, 0x03, 0x34, 0x26, 0x27, 0x65, 0x2a }, + { 0xfa, 0x43, 0xa6, 0xc4, 0x32, 0xa1, 0x2f, 0xb6, 0x37, 0x05, 0xf4, 0xa4, 0xa7, 0x36, 0xdd, 0x1c, 0x45, 0x10, 0x95, 0x83, 0x67, 0x89, 0x79, 0x18, 0x34, 0xad, 0xe7, 0x57, 0x7f, 0x0d, 0x48, 0x9b, 0x14, 0xdf, 0x5f, 0xc8, 0xd7, 0x0f, 0x78, 0x47, 0x88, 0x20, 0xff, 0x7f, 0xb1, 0x21, 0x27, 0x14, + 0x58, 0x32, 0x12, 0xfb, 0x97, 0xe0, 0x81, 0x0e, 0x92, 0xf4, 0x5c, 0x0e, 0x44, 0x48, 0x4e, 0x01, 0x21, 0xb5, 0x4d, 0xc2, 0x36, 0xea, 0xe6, 0x7b, 0xb3, 0x61, 0xe6, 0x18, 0x40, 0x5b, 0xce, 0x5b, 0xc2, 0xee, 0xa5, 0xde, 0xe9, 0xe6, 0xe0, 0xa8, 0x58, 0x58, 0x03, 0x34, 0x26, 0x27, 0x65, 0x2a } }, + { { 0x1e, 0x89, 0x12, 0xe8, 0xab, 0xca, 0xeb, 0x96, 0x78, 0x43, 0x89, 0x79, 0x26, 0x61, 0x86, 0x2e, 0x37, 0xd7, 0x94, 0xb5, 0xb9, 0xf7, 0xc9, 0xe7, 0x04, 0x6c, 0x96, 0x1c, 0x54, 0x0d, 0xb0, 0x6c, + 0xd3, 0x68, 0x9b, 0x53, 0xa7, 0x56, 0x34, 0x1b, 0x65, 0xff, 0xf9, 0xee, 0xf1, 0xc6, 0xfd, 0x7e, 0xa8, 0x42, 0x59, 0x60, 0x06, 0x5f, 0xc2, 0x89, 0x8b, 0xfc, 0xf8, 0x6c, 0x9a, 0x0d, 0xb1, 0x36 }, + { 0x52, 0x3d, 0x83, 0x25, 0x0f, 0x57, 0x81, 0x76, 0x7b, 0x21, 0xf7, 0x96, 0xd6, 0x1f, 0xfe, 0xd7, 0x7c, 0xc1, 0x32, 0xb5, 0xbc, 0x05, 0x46, 0xdb, 0x6f, 0x25, 0xd8, 0x7a, 0x68, 0xe2, 0x01, 0x81, + 0xf8, 0x9a, 0xc5, 0x29, 0x78, 0x1c, 0x01, 0xc5, 0x4d, 0x61, 0x4e, 0x75, 0xdf, 0x9f, 0xc3, 0x22, 0x96, 0x7c, 0xf9, 0xa7, 0xed, 0x41, 0x6f, 0x64, 0xfd, 0xd4, 0x61, 0x58, 0x0d, 0x49, 0xc9, 0xa4 }, + { 0x4a, 0xf7, 0xda, 0xef, 0xe0, 0x3b, 0x33, 0x19, 0x79, 0x02, 0x7a, 0xbb, 0xd3, 0x53, 0xf4, 0x8c, 0x8a, 0x16, 0xfb, 0xbd, 0x35, 0xd9, 0x70, 0xb2, 0x0a, 0x06, 0x05, 0x14, 0xd0, 0x9e, 0xf6, 0x13, + 0x44, 0xbb, 0xb7, 0x93, 0x86, 0x1b, 0x3c, 0xb0, 0x54, 0xa7, 0x48, 0xc2, 0xa7, 0x10, 0xda, 0x65, 0xb2, 0xdb, 0x0f, 0x85, 0x23, 0x57, 0x77, 0x44, 0x23, 0x20, 0x6d, 0x2e, 0xde, 0x20, 0x01, 0xed }, + { 0x9c, 0xb8, 0x68, 0xeb, 0xbb, 0x8b, 0xaf, 0x81, 0x9c, 0x2f, 0x90, 0x4c, 0xc2, 0x62, 0x17, 0xfc, 0xf2, 0xa5, 0xab, 0x4c, 0x2e, 0x69, 0xcb, 0x82, 0x5f, 0x4c, 0x3c, 0x82, 0xcd, 0x6a, 0xcb, 0x15, + 0xa2, 0xfc, 0x50, 0x54, 0x5e, 0x2e, 0x83, 0x52, 0x48, 0x29, 0x51, 0xcc, 0x50, 0xaa, 0x27, 0xa3, 0xf3, 0x71, 0xdb, 0x2c, 0x1c, 0xa9, 0x8a, 0xa5, 0x95, 0xab, 0x3e, 0x6f, 0xcd, 0xba, 0x22, 0x7c }, + { 0xf7, 0x5d, 0xb5, 0x20, 0x65, 0xfe, 0xa9, 0xe7, 0x1f, 0x8e, 0xd6, 0xc0, 0xf2, 0x3f, 0x1b, 0x8c, 0x7a, 0x02, 0x54, 0xd8, 0xa7, 0x0e, 0x6f, 0x68, 0x94, 0x81, 0xff, 0x30, 0x0e, 0x6d, 0x1a, 0x96, + 0x1b, 0x86, 0x07, 0xaa, 0xbf, 0x37, 0xc5, 0x5e, 0x26, 0xa2, 0xdf, 0x0b, 0xd0, 0x7f, 0x94, 0x35, 0x30, 0xa4, 0x9e, 0x47, 0xaf, 0xad, 0x9c, 0xc9, 0x02, 0x21, 0x55, 0x94, 0x04, 0x13, 0xff, 0x64 }, + { 0x9c, 0x8d, 0x18, 0x63, 0x83, 0xad, 0x01, 0xcc, 0xbb, 0xe6, 0x00, 0xda, 0x15, 0xce, 0xc6, 0x6e, 0x7a, 0x37, 0x6a, 0x81, 0x44, 0xb3, 0xfc, 0xb7, 0xcd, 0x05, 0xee, 0x4a, 0x6f, 0x29, 0xe4, 0x79, 0x63, 0x52, 0x7e, 0x14, 0xc9, 0x14, 0x77, 0xa8, 0x19, 0x94, 0x03, 0xc6, 0x51, 0x57, 0xf1, 0xcc, + 0x11, 0x29, 0xde, 0x86, 0x08, 0xfe, 0x41, 0x02, 0x71, 0xb7, 0xbf, 0xd7, 0xe7, 0x83, 0x3e, 0x0c, 0x9a, 0x59, 0x7e, 0xe8, 0x61, 0x36, 0x56, 0x9a, 0xbf, 0x64, 0xfd, 0xf3, 0xb7, 0xb9, 0x2f, 0x9e, 0x56, 0x1f, 0x57, 0x45, 0x2e, 0x19, 0x0f, 0x6f, 0x70, 0x01, 0xc2, 0x48, 0x05, 0x23, 0x9b, 0x2f }, + { 0xb5, 0x4e, 0xe7, 0xcc, 0x7b, 0x66, 0x7a, 0xf8, 0xec, 0xcd, 0x1b, 0x0c, 0x0f, 0xec, 0x04, 0x27, 0xa0, 0x61, 0xfd, 0x12, 0x2d, 0xab, 0xc9, 0xc5, 0x8e, 0xee, 0x36, 0xc2, 0xef, 0x67, 0xd5, 0x87, 0x95, 0x6c, 0x12, 0xb7, 0x12, 0x81, 0x55, 0xe0, 0x7b, 0xdb, 0x8f, 0x67, 0xea, 0x04, 0x55, 0x91, + 0x9b, 0x50, 0x65, 0x05, 0xc1, 0xf1, 0x0b, 0x04, 0x91, 0x66, 0x3c, 0x32, 0x53, 0x72, 0x01, 0x04, 0x9a, 0x59, 0x7e, 0xe8, 0x61, 0x36, 0x56, 0x9a, 0xbf, 0x64, 0xfd, 0xf3, 0xb7, 0xb9, 0x2f, 0x9e, 0x56, 0x1f, 0x57, 0x45, 0x2e, 0x19, 0x0f, 0x6f, 0x70, 0x01, 0xc2, 0x48, 0x05, 0x23, 0x9b, 0x2f } }, + { { 0xc8, 0x37, 0x10, 0xdc, 0xdb, 0xfc, 0x51, 0x91, 0xae, 0x37, 0xa4, 0xe0, 0xcf, 0xbb, 0xdd, 0x92, 0x93, 0x5f, 0x6b, 0xd6, 0x81, 0xbf, 0x9b, 0x24, 0x5e, 0x0d, 0xf1, 0xe4, 0x04, 0x89, 0xd1, 0x1b, + 0xb2, 0x68, 0x56, 0x3a, 0xdc, 0x59, 0xd0, 0x8a, 0x93, 0x37, 0x5d, 0xa5, 0x40, 0x5e, 0xfe, 0xc9, 0x41, 0x0b, 0x8a, 0x50, 0xd2, 0xa0, 0x94, 0x86, 0xf7, 0x46, 0x3b, 0x7e, 0x1d, 0xea, 0x2b, 0xa8 }, + { 0x1b, 0xe2, 0xe6, 0x48, 0x86, 0xa8, 0x65, 0xfd, 0x2b, 0xae, 0xc7, 0x7d, 0x41, 0xee, 0xb2, 0x80, 0x33, 0x1c, 0x0a, 0xdc, 0x42, 0xea, 0x99, 0xd0, 0x1f, 0x6d, 0xc8, 0x80, 0x51, 0x70, 0xd4, 0x19, + 0xae, 0xfc, 0x66, 0x16, 0xa2, 0x53, 0x27, 0x19, 0x7a, 0xf2, 0x9a, 0x25, 0x0c, 0x39, 0x8c, 0xbf, 0xe7, 0xa3, 0x7a, 0xd6, 0xa3, 0x43, 0x62, 0xd2, 0x4a, 0xc2, 0xf1, 0x96, 0x7e, 0xe3, 0x83, 0x13 }, + { 0xf5, 0xb1, 0x2a, 0xc5, 0x4d, 0xcc, 0xdf, 0x56, 0xde, 0x92, 0x96, 0x46, 0x03, 0x11, 0xfc, 0xa0, 0xbc, 0xa2, 0x22, 0xf7, 0x25, 0x74, 0x2a, 0x1f, 0x27, 0x34, 0x18, 0xe8, 0x06, 0xa4, 0x77, 0x26, + 0x1a, 0x51, 0x5e, 0xfb, 0x77, 0xbc, 0x55, 0xb1, 0xf8, 0xa5, 0x19, 0x23, 0x00, 0x97, 0xf7, 0xbb, 0xe4, 0xcd, 0x41, 0x9e, 0xd9, 0x5e, 0x0c, 0x6b, 0x1b, 0x8a, 0xba, 0x52, 0x93, 0xbe, 0x2c, 0xf3 }, + { 0xb3, 0x02, 0xeb, 0x44, 0x3c, 0x05, 0xae, 0x9c, 0x94, 0xa9, 0x1f, 0x72, 0x41, 0xbc, 0x81, 0x66, 0x5f, 0x50, 0xc0, 0x57, 0xb4, 0x44, 0xf0, 0xe1, 0x2a, 0xa9, 0x88, 0x69, 0xa6, 0x1c, 0x05, 0x85, + 0xda, 0xc7, 0xb2, 0xe1, 0x8c, 0x2f, 0x7c, 0x49, 0x37, 0xa2, 0xf2, 0x56, 0xab, 0x12, 0x9f, 0x12, 0x4b, 0x1b, 0x73, 0x75, 0x3f, 0x30, 0x0f, 0x40, 0xf1, 0xf9, 0x1d, 0xa7, 0x2c, 0x98, 0x8c, 0x91 }, + { 0xcb, 0xd3, 0x39, 0x60, 0x56, 0xe3, 0xbd, 0x65, 0x86, 0x1a, 0x58, 0x40, 0xc0, 0xa4, 0xc4, 0x8b, 0xe5, 0xf7, 0x49, 0x0a, 0xf2, 0x09, 0x51, 0x32, 0x6e, 0x06, 0x5a, 0x27, 0x19, 0x78, 0x2e, 0x3a, + 0x04, 0xf9, 0x34, 0x80, 0x49, 0x39, 0x93, 0xcd, 0x89, 0x67, 0x7b, 0xc0, 0x8d, 0x9d, 0x8d, 0x4c, 0x83, 0x20, 0x80, 0xfc, 0x00, 0xf2, 0x8a, 0x8f, 0xa4, 0x4d, 0x8e, 0x8f, 0x58, 0x51, 0x5b, 0x71 }, + { 0x71, 0x3f, 0x90, 0x41, 0xb8, 0x74, 0xbc, 0x7a, 0x85, 0xf5, 0xab, 0xca, 0x7e, 0xf2, 0x70, 0x41, 0xbc, 0x36, 0xb5, 0xc3, 0x4e, 0xf1, 0x2b, 0x17, 0x35, 0x40, 0xdb, 0x3c, 0xdb, 0xd2, 0xec, 0x0b, 0x99, 0xc1, 0x43, 0x17, 0xad, 0x38, 0x45, 0x2d, 0x07, 0x31, 0xd7, 0xb6, 0x95, 0x1c, 0x89, 0x25, + 0xe4, 0x89, 0x97, 0xd3, 0xcf, 0x11, 0x2f, 0x63, 0x31, 0x51, 0xa2, 0x18, 0xfc, 0x12, 0x04, 0x0a, 0xb0, 0x33, 0xce, 0x0b, 0x57, 0xc0, 0x8c, 0x58, 0x25, 0xf8, 0x9b, 0x50, 0x22, 0x1c, 0x5c, 0x7b, 0x02, 0xc7, 0xed, 0xfc, 0x98, 0x8b, 0xbd, 0xd2, 0x4e, 0xfc, 0x78, 0x91, 0x7f, 0x4c, 0x99, 0x24 }, + { 0xfc, 0x46, 0xe4, 0x85, 0x0c, 0x52, 0x14, 0xf8, 0x8a, 0xa4, 0x97, 0x17, 0x10, 0xb2, 0x93, 0xef, 0xa0, 0x66, 0x3c, 0xfd, 0x61, 0x42, 0x24, 0x30, 0x70, 0x4b, 0xfd, 0x0b, 0x86, 0xc8, 0x97, 0xd7, 0x04, 0xc2, 0xa6, 0x61, 0x41, 0xaf, 0xcc, 0x1d, 0x52, 0xc9, 0xf3, 0xca, 0xe1, 0x90, 0x7c, 0xbd, + 0xce, 0xaf, 0x30, 0xc4, 0xb4, 0x7d, 0x81, 0x7e, 0xbd, 0xe2, 0x09, 0x70, 0x1e, 0x6b, 0xb9, 0x03, 0xb0, 0x33, 0xce, 0x0b, 0x57, 0xc0, 0x8c, 0x58, 0x25, 0xf8, 0x9b, 0x50, 0x22, 0x1c, 0x5c, 0x7b, 0x02, 0xc7, 0xed, 0xfc, 0x98, 0x8b, 0xbd, 0xd2, 0x4e, 0xfc, 0x78, 0x91, 0x7f, 0x4c, 0x99, 0x24 } }, + { { 0x5f, 0x01, 0x6d, 0xec, 0x82, 0x02, 0x96, 0x47, 0x74, 0xd9, 0x73, 0x2e, 0x2e, 0x17, 0x00, 0xb6, 0xe0, 0xa4, 0x13, 0x17, 0xae, 0x7f, 0x85, 0xcb, 0xff, 0xe7, 0x96, 0x99, 0xdb, 0x9f, 0xad, 0x21, + 0x60, 0xd9, 0x12, 0xdc, 0x41, 0x01, 0x33, 0x66, 0x4c, 0x24, 0x8b, 0x25, 0x17, 0xd7, 0x22, 0x14, 0x12, 0x4d, 0xad, 0x82, 0x9a, 0x85, 0x69, 0x5e, 0x35, 0x10, 0xe0, 0xd7, 0x1a, 0x82, 0x88, 0x14 }, + { 0xab, 0x5f, 0x2c, 0x7d, 0xa2, 0xe5, 0x67, 0x5f, 0xe4, 0x92, 0x03, 0x93, 0xd7, 0x13, 0xa1, 0xfa, 0x4a, 0xb7, 0x18, 0x4a, 0x8e, 0x8c, 0x78, 0x9a, 0x0c, 0x60, 0x02, 0xe8, 0x2d, 0x50, 0x05, 0x0f, + 0x92, 0xee, 0x9f, 0x81, 0xde, 0x6b, 0x20, 0xe4, 0x9b, 0x17, 0x2e, 0x99, 0x0f, 0x01, 0x31, 0xa7, 0xc5, 0xc4, 0x53, 0x70, 0xda, 0x03, 0xc6, 0xf7, 0x22, 0x87, 0x98, 0x87, 0x19, 0x36, 0xa6, 0x49 }, + { 0x93, 0xab, 0x22, 0xc4, 0x39, 0x6c, 0x97, 0x80, 0xd2, 0xe2, 0x36, 0xfa, 0x31, 0x74, 0x67, 0xcc, 0x50, 0x1b, 0x95, 0xbe, 0x77, 0xe0, 0xd1, 0x00, 0x74, 0x04, 0xe1, 0x4d, 0xca, 0x44, 0x35, 0x72, + 0x74, 0x69, 0x82, 0x23, 0x56, 0x9b, 0xcc, 0x34, 0x5a, 0xcb, 0xa2, 0xa3, 0x31, 0x12, 0x4a, 0x84, 0x4c, 0xe9, 0x37, 0x3a, 0x58, 0xf8, 0x79, 0x65, 0x4a, 0x66, 0x79, 0x82, 0xf4, 0x5d, 0x75, 0xc3 }, + { 0x2d, 0x5d, 0xac, 0x4f, 0xb5, 0x00, 0x68, 0x3b, 0x5f, 0x2e, 0xdd, 0xcb, 0x14, 0x4a, 0x7f, 0xad, 0x12, 0x45, 0x91, 0xd1, 0x84, 0xd8, 0x14, 0xff, 0xcb, 0x64, 0x43, 0x6d, 0x65, 0xe7, 0x19, 0x68, + 0x2b, 0x5e, 0x53, 0x05, 0x74, 0x66, 0xed, 0xac, 0x2f, 0x5a, 0x8f, 0x70, 0x96, 0xab, 0x29, 0xf3, 0x9a, 0x59, 0xa2, 0xe2, 0xef, 0xd3, 0xc9, 0xd7, 0x53, 0xf8, 0xf5, 0xa3, 0xd6, 0xf4, 0x34, 0xf8 }, + { 0x1d, 0x14, 0xf3, 0xfd, 0xb0, 0x66, 0x20, 0xff, 0xfc, 0x79, 0x47, 0xc7, 0x4c, 0xe9, 0x45, 0x67, 0xf5, 0x97, 0x14, 0xea, 0x7c, 0x63, 0xc5, 0x3f, 0x0b, 0x46, 0xe0, 0x88, 0xd6, 0x9b, 0x67, 0x71, + 0xba, 0xa6, 0x15, 0x28, 0x94, 0x54, 0x83, 0x68, 0x00, 0x3a, 0x33, 0xa6, 0x1a, 0x05, 0x6a, 0x68, 0x72, 0x98, 0x48, 0x71, 0xea, 0x5b, 0x47, 0xf5, 0x80, 0x46, 0xa9, 0x57, 0x84, 0xec, 0xad, 0xfc }, + { 0xa3, 0x1d, 0x87, 0xd3, 0x28, 0x62, 0xc6, 0xf7, 0xdb, 0xfb, 0xfa, 0xfc, 0xf3, 0x27, 0x5c, 0x31, 0xd3, 0x32, 0x26, 0x0e, 0x0f, 0x41, 0x49, 0xec, 0x05, 0x16, 0xf7, 0xa5, 0x63, 0xb3, 0xbc, 0xe5, 0x0d, 0x1e, 0x6f, 0x97, 0x4f, 0x68, 0x40, 0xc0, 0xd4, 0x6c, 0x4f, 0x9e, 0x25, 0xd0, 0xab, 0x8d, + 0x2a, 0xb9, 0x3e, 0x06, 0x4d, 0x9d, 0x3d, 0x2d, 0x79, 0x8d, 0x93, 0xdc, 0xfc, 0x6f, 0x0b, 0x04, 0x48, 0x7c, 0x19, 0x5c, 0xa9, 0xc8, 0x44, 0xe5, 0xf6, 0x4f, 0x51, 0xd8, 0x72, 0x63, 0x41, 0xda, 0x62, 0xac, 0x78, 0x73, 0xb3, 0x3e, 0xc8, 0xb2, 0xf1, 0x3f, 0x89, 0xf2, 0x0e, 0x95, 0xdf, 0xed }, + { 0xfd, 0x69, 0xb1, 0x9a, 0xdb, 0xae, 0x95, 0x87, 0xe2, 0xc6, 0x8a, 0x97, 0x0c, 0xee, 0xc4, 0x22, 0x60, 0x4e, 0x96, 0xa9, 0x72, 0xb9, 0x6f, 0x86, 0x97, 0xa8, 0xdf, 0x83, 0xc5, 0x18, 0x18, 0x6e, 0xc9, 0x43, 0x30, 0x7e, 0x5b, 0xcf, 0x37, 0x0f, 0xc1, 0xd7, 0xe5, 0xab, 0xb1, 0x31, 0xe0, 0x97, + 0xc7, 0x53, 0xb7, 0xfd, 0xd7, 0xdf, 0x00, 0x43, 0x0e, 0x41, 0x62, 0x80, 0x0b, 0xe3, 0xe0, 0x06, 0x48, 0x7c, 0x19, 0x5c, 0xa9, 0xc8, 0x44, 0xe5, 0xf6, 0x4f, 0x51, 0xd8, 0x72, 0x63, 0x41, 0xda, 0x62, 0xac, 0x78, 0x73, 0xb3, 0x3e, 0xc8, 0xb2, 0xf1, 0x3f, 0x89, 0xf2, 0x0e, 0x95, 0xdf, 0xed } }, + { { 0x98, 0x29, 0xf7, 0x57, 0xfd, 0xbd, 0x44, 0x3f, 0xd9, 0x90, 0x98, 0x19, 0x97, 0xf2, 0x60, 0x27, 0xfd, 0x08, 0xfc, 0x8a, 0xc6, 0xaf, 0x87, 0x22, 0x7f, 0x74, 0x4a, 0x80, 0xaf, 0x72, 0x00, 0x01, + 0x70, 0x9b, 0x47, 0x2a, 0xd2, 0x8e, 0x41, 0x0a, 0xea, 0x6a, 0xdf, 0xb7, 0x61, 0x54, 0x89, 0x5e, 0x01, 0x9f, 0x76, 0x64, 0x29, 0xee, 0x8d, 0x85, 0x20, 0xff, 0x30, 0x58, 0xc2, 0xa3, 0x2a, 0x56 }, + { 0xea, 0x69, 0x8e, 0x6b, 0x8e, 0xdd, 0x55, 0x22, 0x45, 0x61, 0xd4, 0x92, 0x66, 0x8e, 0x96, 0xaf, 0x7e, 0x40, 0x28, 0x72, 0xc4, 0x46, 0xe7, 0x88, 0xd4, 0x6c, 0x74, 0xb7, 0x48, 0x7f, 0xe8, 0xe1, + 0x5e, 0xa5, 0x85, 0x62, 0x8f, 0xd6, 0xfc, 0x27, 0x0a, 0xb2, 0x4b, 0x38, 0x94, 0x59, 0x52, 0x0d, 0x6a, 0x4d, 0xe5, 0x61, 0xce, 0x0d, 0x44, 0x03, 0xa6, 0x2a, 0xc2, 0xd4, 0xd4, 0xe2, 0x71, 0xe3 }, + { 0x40, 0xf0, 0x82, 0xf0, 0x8d, 0xaa, 0xad, 0xa9, 0x9f, 0x9b, 0x85, 0x02, 0xcf, 0x57, 0x15, 0x41, 0x13, 0x59, 0xf2, 0xba, 0xdd, 0xbf, 0x93, 0xe5, 0x40, 0x2e, 0xaf, 0xdd, 0x43, 0x52, 0xc8, 0x7f, + 0x40, 0xad, 0x91, 0x5b, 0x58, 0xd1, 0xa1, 0xe8, 0x6f, 0x77, 0xc3, 0x41, 0x35, 0x5e, 0xf7, 0x03, 0xba, 0xe4, 0xed, 0x2c, 0x28, 0x59, 0xd6, 0x48, 0xfe, 0x50, 0xcc, 0xf9, 0x80, 0xd1, 0x49, 0xd1 }, + { 0xd7, 0xa5, 0xd9, 0x13, 0xdf, 0x7d, 0xf6, 0xc6, 0x25, 0x0f, 0x52, 0xc2, 0x57, 0x61, 0x20, 0xf2, 0xf0, 0xdb, 0x47, 0x49, 0x56, 0xaf, 0x89, 0x11, 0xa7, 0x8d, 0x09, 0x3a, 0xfe, 0x45, 0x43, 0xef, + 0x9f, 0x0c, 0x42, 0xaf, 0xa8, 0xcc, 0x60, 0x48, 0xc0, 0x1c, 0x7c, 0xbe, 0x01, 0xe2, 0x88, 0xcc, 0x6c, 0x3e, 0x97, 0x91, 0xf3, 0xd9, 0xb2, 0xb2, 0x09, 0x7e, 0x35, 0xb1, 0x78, 0xb4, 0x03, 0xf6 }, + { 0x08, 0xc4, 0x1a, 0x3a, 0xc3, 0xe3, 0x26, 0xbd, 0x8d, 0xee, 0x5d, 0xf0, 0xba, 0xb6, 0x65, 0xff, 0x77, 0xc0, 0x99, 0xd1, 0xca, 0xdc, 0xf5, 0x4b, 0x50, 0x50, 0x0a, 0x9e, 0x13, 0x33, 0x76, 0x86, + 0x9b, 0x39, 0x79, 0x78, 0x73, 0x5c, 0x2f, 0x69, 0xa9, 0x9e, 0x0b, 0xeb, 0x11, 0x1e, 0x12, 0xaa, 0xc1, 0x09, 0x83, 0x0f, 0xca, 0xcb, 0x95, 0x10, 0xde, 0x85, 0xe3, 0x75, 0x62, 0x4a, 0xc2, 0x4c }, + { 0x68, 0x78, 0x6c, 0xce, 0x2f, 0x72, 0x80, 0xfe, 0x83, 0x88, 0x63, 0x37, 0xa7, 0xa1, 0x5a, 0x0b, 0x84, 0x8a, 0xda, 0x28, 0x84, 0xf1, 0x6a, 0x63, 0x24, 0x1c, 0x72, 0xda, 0x84, 0xee, 0x1d, 0xe0, 0x77, 0xf0, 0xf6, 0xce, 0x7e, 0x79, 0x0a, 0x55, 0x03, 0x01, 0x13, 0x0f, 0xf7, 0x6b, 0x45, 0xe7, + 0xcb, 0xfd, 0xb0, 0x37, 0x93, 0x4b, 0x40, 0x69, 0xe0, 0x77, 0x67, 0x72, 0x65, 0xee, 0x35, 0x08, 0x00, 0xc0, 0x07, 0x10, 0xd8, 0x6e, 0x55, 0x83, 0x5a, 0xbc, 0xfa, 0x67, 0x80, 0x8f, 0xfa, 0x21, 0x3e, 0x56, 0x53, 0x5b, 0xbc, 0x9d, 0xff, 0x16, 0xd9, 0x57, 0xcf, 0x2b, 0x78, 0x06, 0x5a, 0x89 }, + { 0xdf, 0x32, 0x1a, 0x01, 0x84, 0xe5, 0xb8, 0x2c, 0x70, 0x6c, 0xeb, 0xd1, 0xf0, 0xb4, 0x9b, 0x32, 0xc8, 0xd0, 0x81, 0xc4, 0xea, 0xb2, 0x7c, 0x32, 0x1a, 0x02, 0x61, 0xf2, 0xd9, 0x4d, 0xe5, 0x85, 0xad, 0xfc, 0xc6, 0x70, 0xee, 0x85, 0x77, 0x07, 0x9b, 0x5d, 0x5f, 0x88, 0xef, 0xb6, 0xd8, 0xdf, + 0x2b, 0xa2, 0x4d, 0x90, 0x11, 0x2d, 0x38, 0x3f, 0xa8, 0x84, 0xf0, 0x76, 0xdd, 0x31, 0xd0, 0x09, 0x00, 0xc0, 0x07, 0x10, 0xd8, 0x6e, 0x55, 0x83, 0x5a, 0xbc, 0xfa, 0x67, 0x80, 0x8f, 0xfa, 0x21, 0x3e, 0x56, 0x53, 0x5b, 0xbc, 0x9d, 0xff, 0x16, 0xd9, 0x57, 0xcf, 0x2b, 0x78, 0x06, 0x5a, 0x89 } }, + { { 0x25, 0x87, 0x1e, 0x6f, 0xe8, 0xd0, 0xde, 0x1d, 0xd5, 0xf2, 0xd3, 0x5b, 0xff, 0x9e, 0x67, 0x99, 0x60, 0xb4, 0x0e, 0xb7, 0x98, 0x1b, 0x2a, 0x3a, 0x9c, 0xec, 0xc1, 0xe1, 0x2e, 0x2b, 0xc0, 0x3e, + 0x3c, 0xfb, 0x64, 0x91, 0x72, 0xc6, 0x7e, 0x57, 0x47, 0x00, 0x97, 0xbf, 0x8e, 0x0e, 0xbf, 0xad, 0xd9, 0x28, 0x86, 0x7c, 0xfd, 0x41, 0x91, 0xae, 0x2d, 0xee, 0xc0, 0xb2, 0x32, 0x7d, 0x99, 0x7d }, + { 0x63, 0xc1, 0xf9, 0x61, 0x9c, 0x9e, 0x1a, 0xd7, 0xca, 0xa3, 0x71, 0xd6, 0x34, 0x3d, 0xa7, 0x08, 0x36, 0x0c, 0xec, 0x37, 0x35, 0x94, 0x1a, 0x45, 0xa9, 0xfa, 0xf2, 0xb5, 0x25, 0x92, 0xbf, 0xd1, + 0x1e, 0xca, 0xdd, 0x5a, 0x23, 0xad, 0x9e, 0x45, 0xc3, 0x66, 0xcb, 0x8f, 0xda, 0xa3, 0xd1, 0xe6, 0x27, 0x38, 0x11, 0x54, 0x67, 0x31, 0x03, 0x64, 0x35, 0xe0, 0x68, 0x0b, 0x93, 0xee, 0x81, 0x17 }, + { 0x8b, 0x01, 0xe9, 0x99, 0x54, 0x54, 0x73, 0x15, 0x0b, 0xac, 0x38, 0x7b, 0xe9, 0xe3, 0x17, 0x4f, 0x02, 0x3e, 0xe3, 0x8e, 0xda, 0x41, 0xa0, 0x9d, 0x10, 0xe0, 0xda, 0x11, 0xfe, 0xec, 0x2f, 0x42, + 0xe7, 0xc8, 0xb3, 0xde, 0x2f, 0x7b, 0xfd, 0xdf, 0x7c, 0x34, 0x3b, 0x5e, 0xac, 0x22, 0x8c, 0x99, 0x3d, 0xa1, 0xa9, 0xd9, 0x81, 0xb6, 0x51, 0xc8, 0xaf, 0x3e, 0x75, 0xed, 0x45, 0xcf, 0xf7, 0xb9 }, + { 0xaf, 0xe9, 0x9c, 0x16, 0x4a, 0x8f, 0x3b, 0x0f, 0xef, 0x71, 0x2f, 0xaa, 0x8d, 0x7d, 0xce, 0xed, 0xea, 0x31, 0x93, 0xaf, 0x2c, 0x75, 0xc6, 0xfa, 0xda, 0x3e, 0xa6, 0xea, 0x2a, 0x3e, 0x7b, 0x72, + 0xb6, 0xf8, 0xd7, 0x9a, 0x88, 0xcb, 0x0b, 0x81, 0x97, 0x24, 0x29, 0x3b, 0x11, 0x23, 0x69, 0xc2, 0xff, 0x98, 0x39, 0x25, 0x99, 0xae, 0xe1, 0x07, 0x3e, 0x97, 0xde, 0x10, 0x21, 0x23, 0x7a, 0x2d }, + { 0xbe, 0x2f, 0xb9, 0x4c, 0x41, 0x5a, 0x9a, 0xf6, 0xfb, 0xf8, 0x26, 0x9d, 0x81, 0x7f, 0x39, 0x91, 0xaf, 0x5b, 0xf1, 0xd7, 0x93, 0x0a, 0xdf, 0x18, 0x19, 0x4a, 0x80, 0x74, 0x14, 0x98, 0x2b, 0xf2, + 0x3b, 0x25, 0xc5, 0xe8, 0xfc, 0x07, 0x3f, 0x5d, 0xa1, 0x39, 0x27, 0x4e, 0x1c, 0xd2, 0x7a, 0xfe, 0x3e, 0x7b, 0x03, 0x35, 0x15, 0x9e, 0x35, 0x2b, 0xd0, 0xbe, 0x67, 0x48, 0x42, 0xdd, 0xa4, 0xdd }, + { 0xbd, 0xcd, 0xd7, 0xbf, 0xb1, 0x0a, 0xdb, 0x9f, 0x85, 0x42, 0xba, 0xf4, 0xc8, 0xff, 0xb0, 0xe1, 0x9a, 0x18, 0x6d, 0x1a, 0xe0, 0x37, 0xc1, 0xa2, 0xe1, 0x1c, 0x38, 0x55, 0x14, 0xbf, 0x64, 0x67, 0x84, 0x47, 0xb6, 0x0a, 0xf6, 0x93, 0xf1, 0x10, 0xab, 0x09, 0xf0, 0x60, 0x84, 0xe2, 0x4e, 0x4b, + 0x5e, 0xa2, 0xd2, 0xd1, 0x19, 0x22, 0xd7, 0xc4, 0x85, 0x13, 0x23, 0xa3, 0x6a, 0xb6, 0x75, 0x0f, 0x43, 0xe6, 0xde, 0x7b, 0x67, 0x2a, 0x73, 0x77, 0x9e, 0xb4, 0x94, 0x6c, 0xc3, 0x9a, 0x67, 0x51, 0xcf, 0xe9, 0x47, 0x46, 0x0e, 0x3a, 0x12, 0x7d, 0x7c, 0x66, 0x73, 0x6c, 0xd5, 0x4a, 0x21, 0x4d }, + { 0x89, 0x7e, 0xd0, 0xbf, 0x2e, 0x9f, 0x0c, 0xff, 0x6e, 0x56, 0x25, 0x9b, 0x79, 0x99, 0x52, 0x27, 0xc2, 0x3a, 0xaa, 0xf0, 0x47, 0x6d, 0xed, 0x05, 0xa1, 0xeb, 0x9c, 0x92, 0x28, 0x7f, 0x1b, 0xc8, 0x1c, 0x57, 0x76, 0xab, 0x05, 0xe3, 0xd3, 0xb7, 0xa3, 0xf5, 0xac, 0xa8, 0x21, 0x33, 0x7c, 0xb7, + 0xe7, 0xc2, 0xd0, 0x25, 0x6f, 0xdf, 0x34, 0xd1, 0xb0, 0x34, 0x41, 0x46, 0x30, 0x9c, 0x76, 0x07, 0x43, 0xe6, 0xde, 0x7b, 0x67, 0x2a, 0x73, 0x77, 0x9e, 0xb4, 0x94, 0x6c, 0xc3, 0x9a, 0x67, 0x51, 0xcf, 0xe9, 0x47, 0x46, 0x0e, 0x3a, 0x12, 0x7d, 0x7c, 0x66, 0x73, 0x6c, 0xd5, 0x4a, 0x21, 0x4d } } }; -#define IDENTITY_V0_KNOWN_GOOD_0 \ - "8e4df28b72:0:" \ - "ac3d46abe0c21f3cfe7a6c8d6a85cfcffcb82fbd55af6a4d6350657c68200843fa2e16f9418bbd9702cae365f2af5fb4c420908b803a681d" \ - "4daef6114d78a2d7:" \ - "bd8dd6e4ce7022d2f812797a80c6ee8ad180dc4ebf301dec8b06d1be08832bddd63a2f1cfa7b2c504474c75bdc8898ba476ef92e8e2d0509" \ +#define IDENTITY_V0_KNOWN_GOOD_0 \ + "8e4df28b72:0:" \ + "ac3d46abe0c21f3cfe7a6c8d6a85cfcffcb82fbd55af6a4d6350657c68200843fa2e16f9418bbd9702cae365f2af5fb4c420908b803a681d" \ + "4daef6114d78a2d7:" \ + "bd8dd6e4ce7022d2f812797a80c6ee8ad180dc4ebf301dec8b06d1be08832bddd63a2f1cfa7b2c504474c75bdc8898ba476ef92e8e2d0509" \ "f8441985171ff16e" -#define IDENTITY_V1_KNOWN_GOOD_0 \ - "26e83e3b8c:1:" \ - "bwtgzeejkrkxeiuqyy35srdorynvz3nfrepqwiwedkm55bkhx77vaf6deknmikr2tgvymw3dxnifawo4m5pbfcqbnws6wzxlm7rgrad4xu52fcqg" \ - "7ebwt4rhao6mjmrbn2bhdcevrlard5k7vropjrsuodoysvwbnjqef3q4fkrjgygddl4tatr5ztkjwt7f:" \ - "a5vpcmommfyvjiqudkk7sjekscc4zyc3vqqdytkwlix5ahsxgz73ic3a62secgmyum65dok7b5aochdhdlinn3olyyswzy64ubx3pzbtryqsfmxp" \ +#define IDENTITY_V1_KNOWN_GOOD_0 \ + "26e83e3b8c:1:" \ + "bwtgzeejkrkxeiuqyy35srdorynvz3nfrepqwiwedkm55bkhx77vaf6deknmikr2tgvymw3dxnifawo4m5pbfcqbnws6wzxlm7rgrad4xu52fcqg" \ + "7ebwt4rhao6mjmrbn2bhdcevrlard5k7vropjrsuodoysvwbnjqef3q4fkrjgygddl4tatr5ztkjwt7f:" \ + "a5vpcmommfyvjiqudkk7sjekscc4zyc3vqqdytkwlix5ahsxgz73ic3a62secgmyum65dok7b5aochdhdlinn3olyyswzy64ubx3pzbtryqsfmxp" \ "ntxsvj7aqrd6kkrr3gobstl5yzln6bgqkihmhktbqt4vfwfqynkfjmncd4xqodogyxzq" // -------------------------------------------------------------------------------------------------------------------- @@ -1414,29 +707,22 @@ class LifeCycleTracker { long *cnt; }; -static bool -ZTT_deepCompareCertificateIdentities(const ZT_Certificate_Identity *const a, const ZT_Certificate_Identity *const b) +static bool ZTT_deepCompareCertificateIdentities(const ZT_Certificate_Identity *const a, const ZT_Certificate_Identity *const b) { if (a == nullptr) return (b == nullptr); if (((a->identity == nullptr) != (b->identity == nullptr)) || ((a->locator == nullptr) != (b->locator == nullptr))) return false; - if ((a->identity) - && (*reinterpret_cast(a->identity) != *reinterpret_cast(b->identity))) + if ((a->identity) && (*reinterpret_cast(a->identity) != *reinterpret_cast(b->identity))) return false; - return !( - (a->locator) - && (*reinterpret_cast(a->locator) != *reinterpret_cast(b->locator))); + return !((a->locator) && (*reinterpret_cast(a->locator) != *reinterpret_cast(b->locator))); } static bool ZTT_deepCompareCertificateName(const ZT_Certificate_Name &a, const ZT_Certificate_Name &b) { return !( - (strcmp(a.serialNo, b.serialNo) != 0) || (strcmp(a.streetAddress, b.streetAddress) != 0) - || (strcmp(a.organization, b.organization) != 0) || (strcmp(a.country, b.country) != 0) - || (strcmp(a.commonName, b.commonName) != 0) || (strcmp(a.email, b.email) != 0) || (strcmp(a.host, b.host) != 0) - || (strcmp(a.locality, b.locality) != 0) || (strcmp(a.postalCode, b.postalCode) != 0) - || (strcmp(a.province, b.province) != 0) || (strcmp(a.unit, b.unit) != 0) || (strcmp(a.url, b.url) != 0)); + (strcmp(a.serialNo, b.serialNo) != 0) || (strcmp(a.streetAddress, b.streetAddress) != 0) || (strcmp(a.organization, b.organization) != 0) || (strcmp(a.country, b.country) != 0) || (strcmp(a.commonName, b.commonName) != 0) || (strcmp(a.email, b.email) != 0) || (strcmp(a.host, b.host) != 0) || (strcmp(a.locality, b.locality) != 0) + || (strcmp(a.postalCode, b.postalCode) != 0) || (strcmp(a.province, b.province) != 0) || (strcmp(a.unit, b.unit) != 0) || (strcmp(a.url, b.url) != 0)); } // This performs a detailed deep comparison of two certificates to catch any @@ -1446,17 +732,11 @@ static bool ZTT_deepCompareCertificateName(const ZT_Certificate_Name &a, const Z // checked by normal == operators. static bool ZTT_deepCompareCertificates(const Certificate &a, const Certificate &b) { - if ((a.usageFlags != b.usageFlags) || (a.timestamp != b.timestamp) || (a.validity[0] != b.validity[0]) - || (a.validity[1] != b.validity[1]) || (a.subject.timestamp != b.subject.timestamp) - || (a.subject.identityCount != b.subject.identityCount) || (a.subject.networkCount != b.subject.networkCount) - || (a.subject.updateURLCount != b.subject.updateURLCount) || (a.subject.uniqueIdSize != b.subject.uniqueIdSize) - || (a.subject.uniqueIdSignatureSize != b.subject.uniqueIdSignatureSize) || (a.maxPathLength != b.maxPathLength) - || (a.signatureSize != b.signatureSize)) + if ((a.usageFlags != b.usageFlags) || (a.timestamp != b.timestamp) || (a.validity[0] != b.validity[0]) || (a.validity[1] != b.validity[1]) || (a.subject.timestamp != b.subject.timestamp) || (a.subject.identityCount != b.subject.identityCount) || (a.subject.networkCount != b.subject.networkCount) || (a.subject.updateURLCount != b.subject.updateURLCount) + || (a.subject.uniqueIdSize != b.subject.uniqueIdSize) || (a.subject.uniqueIdSignatureSize != b.subject.uniqueIdSignatureSize) || (a.maxPathLength != b.maxPathLength) || (a.signatureSize != b.signatureSize)) return false; - if ((memcmp(a.subject.uniqueId, b.subject.uniqueId, a.subject.uniqueIdSize) != 0) - || (memcmp(a.subject.uniqueIdSignature, b.subject.uniqueIdSignature, a.subject.uniqueIdSignatureSize) != 0) - || (memcmp(a.signature, b.signature, a.signatureSize) != 0)) + if ((memcmp(a.subject.uniqueId, b.subject.uniqueId, a.subject.uniqueIdSize) != 0) || (memcmp(a.subject.uniqueIdSignature, b.subject.uniqueIdSignature, a.subject.uniqueIdSignatureSize) != 0) || (memcmp(a.signature, b.signature, a.signatureSize) != 0)) return false; if (!ZTT_deepCompareCertificateName(a.subject.name, b.subject.name)) @@ -1464,8 +744,7 @@ static bool ZTT_deepCompareCertificates(const Certificate &a, const Certificate if (memcmp(a.issuer, b.issuer, ZT_CERTIFICATE_HASH_SIZE) != 0) return false; - if ((a.issuerPublicKeySize != b.issuerPublicKeySize) - || (memcmp(a.issuerPublicKey, b.issuerPublicKey, a.issuerPublicKeySize) != 0)) + if ((a.issuerPublicKeySize != b.issuerPublicKeySize) || (memcmp(a.issuerPublicKey, b.issuerPublicKey, a.issuerPublicKeySize) != 0)) return false; if ((a.publicKeySize != b.publicKeySize) || (memcmp(a.publicKey, b.publicKey, a.publicKeySize))) @@ -1481,9 +760,7 @@ static bool ZTT_deepCompareCertificates(const Certificate &a, const Certificate return false; if (a.subject.networks[i].controller.address != b.subject.networks[i].controller.address) return false; - if (memcmp( - a.subject.networks[i].controller.hash, b.subject.networks[i].controller.hash, ZT_FINGERPRINT_HASH_SIZE) - != 0) + if (memcmp(a.subject.networks[i].controller.hash, b.subject.networks[i].controller.hash, ZT_FINGERPRINT_HASH_SIZE) != 0) return false; } @@ -1513,26 +790,20 @@ extern "C" const char *ZTT_general() reinterpret_cast(&endian)[7] = 8; #if __BYTE_ORDER == __LITTLE_ENDIAN if (*(&endian) != 0x0807060504030201ULL) { - ZT_T_PRINTF( - "[general] Error: __BYTE_ORDER == __LITTLE_ENDIAN but byte order is actually %.16llx" ZT_EOL_S, endian); + ZT_T_PRINTF("[general] Error: __BYTE_ORDER == __LITTLE_ENDIAN but byte order is actually %.16llx" ZT_EOL_S, endian); return "__BYTE_ORDER incorrectly defined"; } #else if (endian != 0x0102030405060708ULL) { - ZT_T_PRINTF( - "[general] Error: __BYTE_ORDER == __BIG_ENDIAN but byte order is actually %.16llx" ZT_EOL_S, endian); + ZT_T_PRINTF("[general] Error: __BYTE_ORDER == __BIG_ENDIAN but byte order is actually %.16llx" ZT_EOL_S, endian); return "__BYTE_ORDER incorrectly defined"; } #endif #ifdef ZT_NO_UNALIGNED_ACCESS - ZT_T_PRINTF( - "[general] Platform is %d bit, %s-endian (%.16llx), unaligned variable access not allowed" ZT_EOL_S, - (int)(sizeof(void *) * 8), ZT_ENDIAN_S, endian); + ZT_T_PRINTF("[general] Platform is %d bit, %s-endian (%.16llx), unaligned variable access not allowed" ZT_EOL_S, (int)(sizeof(void *) * 8), ZT_ENDIAN_S, endian); #else - ZT_T_PRINTF( - "[general] Platform is %d bit, %s-endian (%.16llx), unaligned variable access allowed" ZT_EOL_S, - (int)(sizeof(void *) * 8), ZT_ENDIAN_S, endian); + ZT_T_PRINTF("[general] Platform is %d bit, %s-endian (%.16llx), unaligned variable access allowed" ZT_EOL_S, (int)(sizeof(void *) * 8), ZT_ENDIAN_S, endian); #endif { @@ -1541,8 +812,7 @@ extern "C" const char *ZTT_general() ZT_T_PRINTF("FAILED (&sa_in != &sa_in6)" ZT_EOL_S); return "&sa_in != &sa_in6"; } - if ((uintptr_t) & (InetAddress::LO4.as.sa_in6.sin6_family) != (uintptr_t) - & (InetAddress::LO4.as.ss.ss_family)) { + if ((uintptr_t) & (InetAddress::LO4.as.sa_in6.sin6_family) != (uintptr_t) & (InetAddress::LO4.as.ss.ss_family)) { ZT_T_PRINTF("FAILED (&sa_in6.sin6_family != &ss.ss_family)" ZT_EOL_S); return "&sa_in6.sin6_family != &ss.ss_family"; } @@ -1579,14 +849,11 @@ extern "C" const char *ZTT_general() ZT_T_PRINTF( "[general] X64 CPUID features: aes=%d avx=%d avx2=%d avx512f=%d fsrm=%d rdrand=%d sha=%d vaes=%d " "vpclmulqdq=%d" ZT_EOL_S, - Utils::CPUID.aes, Utils::CPUID.avx, Utils::CPUID.avx2, Utils::CPUID.avx512f, Utils::CPUID.fsrm, - Utils::CPUID.rdrand, Utils::CPUID.sha, Utils::CPUID.vaes, Utils::CPUID.vpclmulqdq); + Utils::CPUID.aes, Utils::CPUID.avx, Utils::CPUID.avx2, Utils::CPUID.avx512f, Utils::CPUID.fsrm, Utils::CPUID.rdrand, Utils::CPUID.sha, Utils::CPUID.vaes, Utils::CPUID.vpclmulqdq); #endif #ifdef ZT_ARCH_ARM_HAS_NEON - ZT_T_PRINTF( - "[general] ARM capabilities: aes=%d crc32=%d pmull=%d sha1=%d sha2=%d" ZT_EOL_S, Utils::ARMCAP.aes, - Utils::ARMCAP.crc32, Utils::ARMCAP.pmull, Utils::ARMCAP.sha1, Utils::ARMCAP.sha2); + ZT_T_PRINTF("[general] ARM capabilities: aes=%d crc32=%d pmull=%d sha1=%d sha2=%d" ZT_EOL_S, Utils::ARMCAP.aes, Utils::ARMCAP.crc32, Utils::ARMCAP.pmull, Utils::ARMCAP.sha1, Utils::ARMCAP.sha2); #endif { @@ -1618,9 +885,7 @@ extern "C" const char *ZTT_general() uint32_t b = Utils::hton((uint32_t)0x04030201); uint16_t c = Utils::hton((uint16_t)0x0201); uint8_t t[8]; - if ((reinterpret_cast(&a)[7] != 1) || (reinterpret_cast(&b)[3] != 1) - || (reinterpret_cast(&c)[1] != 1) || (Utils::ntoh(a) != 0x0807060504030201ULL) - || (Utils::ntoh(b) != 0x04030201) || (Utils::ntoh(c) != 0x0201)) { + if ((reinterpret_cast(&a)[7] != 1) || (reinterpret_cast(&b)[3] != 1) || (reinterpret_cast(&c)[1] != 1) || (Utils::ntoh(a) != 0x0807060504030201ULL) || (Utils::ntoh(b) != 0x04030201) || (Utils::ntoh(c) != 0x0201)) { ZT_T_PRINTF("FAILED (hton/ntoh)" ZT_EOL_S); return "Utils::hton() or ntoh() broken"; } @@ -1700,8 +965,7 @@ extern "C" const char *ZTT_general() ZT_T_PRINTF( "[general] Utils::hash64() samples for 1, 2, int64_max, uint64_max: %.16llx %.16llx %.16llx " "%.16llx" ZT_EOL_S, - Utils::hash64(1), Utils::hash64(2), Utils::hash64(0xffffffffffffffffULL), - Utils::hash64(0x7fffffffffffffffULL)); + Utils::hash64(1), Utils::hash64(2), Utils::hash64(0xffffffffffffffffULL), Utils::hash64(0x7fffffffffffffffULL)); { // These collisions could *technically* occur but the probability is only 1 / 2^64. @@ -1831,18 +1095,13 @@ extern "C" const char *ZTT_general() ZT_T_PRINTF("FAILED (message prematurely complete)" ZT_EOL_S); return "Defragmenter test failed: message prematurely complete"; } - switch (defrag.assemble( - messageId, message, ref[f].b, ref[f].s, ref[f].e - ref[f].s, f, frags, ts++, nullvia)) { + switch (defrag.assemble(messageId, message, ref[f].b, ref[f].s, ref[f].e - ref[f].s, f, frags, ts++, nullvia)) { case Defragmenter<>::OK: break; case Defragmenter<>::COMPLETE: complete = true; break; case Defragmenter<>::ERR_DUPLICATE_FRAGMENT: break; - case Defragmenter<>::ERR_INVALID_FRAGMENT: - ZT_T_PRINTF("FAILED (invalid fragment)" ZT_EOL_S); - return "Defragmenter test failed: invalid fragment"; + case Defragmenter<>::ERR_INVALID_FRAGMENT: ZT_T_PRINTF("FAILED (invalid fragment)" ZT_EOL_S); return "Defragmenter test failed: invalid fragment"; case Defragmenter<>::ERR_TOO_MANY_FRAGMENTS_FOR_PATH: break; - case Defragmenter<>::ERR_OUT_OF_MEMORY: - ZT_T_PRINTF("FAILED (out of memory)" ZT_EOL_S); - return "Defragmenter test failed: out of memory"; + case Defragmenter<>::ERR_OUT_OF_MEMORY: ZT_T_PRINTF("FAILED (out of memory)" ZT_EOL_S); return "Defragmenter test failed: out of memory"; } } } @@ -1855,16 +1114,12 @@ extern "C" const char *ZTT_general() return "Defragmenter test failed: fragment has null buffer"; } if ((message[f].s != ref[f].s) || (message[f].e != ref[f].e)) { - ZT_T_PRINTF( - "FAILED (fragment %d size and bounds incorrect (%u:%u, expected %u:%u))" ZT_EOL_S, - f, message[f].s, message[f].e, ref[f].s, ref[f].e); + ZT_T_PRINTF("FAILED (fragment %d size and bounds incorrect (%u:%u, expected %u:%u))" ZT_EOL_S, f, message[f].s, message[f].e, ref[f].s, ref[f].e); return "Defragmenter test failed: fragment size and bounds incorrect"; } for (unsigned int i = message[f].s; i != message[f].e; ++i) { if (message[f].b->unsafeData[i] != (uint8_t)f) { - ZT_T_PRINTF( - "FAILED (fragment %d data invalid (raw index %u: %d != %d))" ZT_EOL_S, f, i, - (int)message[f].b->unsafeData[i], f); + ZT_T_PRINTF("FAILED (fragment %d data invalid (raw index %u: %d != %d))" ZT_EOL_S, f, i, (int)message[f].b->unsafeData[i], f); return "Defragmenter test failed: fragment data invalid"; } } @@ -1932,8 +1187,7 @@ extern "C" const char *ZTT_general() return "Identity test failed: v0 unmarshal"; } if (id != id2) { - ZT_T_PRINTF( - "FAILED (v0 unmarshal %s != %s)" ZT_EOL_S, id.toString(true).c_str(), id2.toString(true).c_str()); + ZT_T_PRINTF("FAILED (v0 unmarshal %s != %s)" ZT_EOL_S, id.toString(true).c_str(), id2.toString(true).c_str()); return "Identity test failed: v0 unmarshal !="; } ms = id.marshal(idm, false); @@ -2203,8 +1457,7 @@ extern "C" const char *ZTT_crypto() { uint8_t out[16]; - ZT_T_PRINTF( - "[crypto] Testing AES (hardware acceleration: %s)... ", AES::accelerated() ? "enabled" : "disabled"); + ZT_T_PRINTF("[crypto] Testing AES (hardware acceleration: %s)... ", AES::accelerated() ? "enabled" : "disabled"); AES aes(AES_TEST_VECTOR_0_KEY); aes.encrypt(AES_TEST_VECTOR_0_IN, out); if (memcmp(AES_TEST_VECTOR_0_OUT, out, 16) != 0) { @@ -2271,9 +1524,7 @@ extern "C" const char *ZTT_crypto() { uint8_t tag[16]; - ZT_T_PRINTF( - "[crypto] Testing AES-GMAC (hardware acceleration: %s)... ", - AES::GMAC::accelerated() ? "enabled" : "disabled"); + ZT_T_PRINTF("[crypto] Testing AES-GMAC (hardware acceleration: %s)... ", AES::GMAC::accelerated() ? "enabled" : "disabled"); { AES aes(AES_GMAC_VECTOR_0_KEY); AES::GMAC gmac(aes); @@ -2341,9 +1592,7 @@ extern "C" const char *ZTT_crypto() ZT_T_PRINTF(" Create subject unique ID key pair... "); uint8_t uniqueId[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], uniqueIdPrivate[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE]; int uniqueIdSize = 0, uniqueIdPrivateKeySize = 0; - if (!Certificate::newKeyPair( - ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384, uniqueId, &uniqueIdSize, uniqueIdPrivate, - &uniqueIdPrivateKeySize)) { + if (!Certificate::newKeyPair(ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384, uniqueId, &uniqueIdSize, uniqueIdPrivate, &uniqueIdPrivateKeySize)) { ZT_T_PRINTF("FAILED" ZT_EOL_S); return "Certificate key pair create"; } @@ -2374,12 +1623,9 @@ extern "C" const char *ZTT_crypto() uint8_t certPrivateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE]; int certPrivateKeySize = 0; - Certificate::newKeyPair( - ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384, cert->publicKey, (int *)&cert->publicKeySize, - certPrivateKey, &certPrivateKeySize); + Certificate::newKeyPair(ZT_CERTIFICATE_PUBLIC_KEY_ALGORITHM_ECDSA_NIST_P_384, cert->publicKey, (int *)&cert->publicKeySize, certPrivateKey, &certPrivateKeySize); - auto csr = Certificate::createCSR( - cert->subject, certPrivateKey, certPrivateKeySize, uniqueIdPrivate, uniqueIdPrivateKeySize); + auto csr = Certificate::createCSR(cert->subject, certPrivateKey, certPrivateKeySize, uniqueIdPrivate, uniqueIdPrivateKeySize); if (csr.empty()) { ZT_T_PRINTF("FAILED (create CSR failed)" ZT_EOL_S); return "Create CSR"; @@ -2451,8 +1697,7 @@ extern "C" const char *ZTT_benchmarkCrypto() int64_t start = now(); uint64_t proof = MIMC52::delay(tmp, ZT_IDENTITY_TYPE1_MIMC52_ROUNDS); int64_t t = now() - start; - ZT_T_PRINTF( - "%llu ms total, %.8f ms/round, verification: ", t, (double)t / (double)ZT_IDENTITY_TYPE1_MIMC52_ROUNDS); + ZT_T_PRINTF("%llu ms total, %.8f ms/round, verification: ", t, (double)t / (double)ZT_IDENTITY_TYPE1_MIMC52_ROUNDS); start = now(); if (!MIMC52::verify(tmp, ZT_IDENTITY_TYPE1_MIMC52_ROUNDS, proof)) { ZT_T_PRINTF("FAILED" ZT_EOL_S); @@ -2494,8 +1739,7 @@ extern "C" const char *ZTT_benchmarkCrypto() } } foo = tmp[0]; // prevent optimization - ZT_T_PRINTF( - " %.4f MiB/sec" ZT_EOL_S, ((16384.0 * (double)reps) / 1048576.0) / ((double)(end - start) / 1000.0)); + ZT_T_PRINTF(" %.4f MiB/sec" ZT_EOL_S, ((16384.0 * (double)reps) / 1048576.0) / ((double)(end - start) / 1000.0)); ZT_T_PRINTF("[crypto] Benchmarking AES-GMAC..."); AES::GMAC gmac(aes); @@ -2512,8 +1756,7 @@ extern "C" const char *ZTT_benchmarkCrypto() } } foo = tag[0]; // prevent optimization - ZT_T_PRINTF( - " %.4f MiB/sec" ZT_EOL_S, ((16384.0 * (double)reps) / 1048576.0) / ((double)(end - start) / 1000.0)); + ZT_T_PRINTF(" %.4f MiB/sec" ZT_EOL_S, ((16384.0 * (double)reps) / 1048576.0) / ((double)(end - start) / 1000.0)); } { @@ -2536,8 +1779,7 @@ extern "C" const char *ZTT_benchmarkCrypto() } } foo = tmp[0]; // prevent optimization - ZT_T_PRINTF( - " %.4f MiB/sec" ZT_EOL_S, ((16384.0 * (double)reps) / 1048576.0) / ((double)(end - start) / 1000.0)); + ZT_T_PRINTF(" %.4f MiB/sec" ZT_EOL_S, ((16384.0 * (double)reps) / 1048576.0) / ((double)(end - start) / 1000.0)); } { @@ -2551,9 +1793,7 @@ extern "C" const char *ZTT_benchmarkCrypto() } { - ZT_T_PRINTF( - "[crypto] Benchmarking Salsa20/12 (using vector acceleration: %s)... ", - Salsa20::accelerated() ? "yes" : "no"); + ZT_T_PRINTF("[crypto] Benchmarking Salsa20/12 (using vector acceleration: %s)... ", Salsa20::accelerated() ? "yes" : "no"); Salsa20 s20(tmp, tag); int64_t start = now(); for (long i = 0; i < 150000; ++i) @@ -2574,9 +1814,7 @@ extern "C" const char *ZTT_benchmarkCrypto() } } int64_t end = now(); - ZT_T_PRINTF( - "%.4f μs/agreement" ZT_EOL_S, - ((double)(end - start) * 1000.0) / (double)(150 * ZT_NUM_C25519_TEST_VECTORS)); + ZT_T_PRINTF("%.4f μs/agreement" ZT_EOL_S, ((double)(end - start) * 1000.0) / (double)(150 * ZT_NUM_C25519_TEST_VECTORS)); } { @@ -2591,9 +1829,7 @@ extern "C" const char *ZTT_benchmarkCrypto() } } int64_t end = now(); - ZT_T_PRINTF( - "%.4f μs/signature" ZT_EOL_S, - ((double)(end - start) * 1000.0) / (double)(150 * ZT_NUM_C25519_TEST_VECTORS)); + ZT_T_PRINTF("%.4f μs/signature" ZT_EOL_S, ((double)(end - start) * 1000.0) / (double)(150 * ZT_NUM_C25519_TEST_VECTORS)); } { @@ -2601,32 +1837,25 @@ extern "C" const char *ZTT_benchmarkCrypto() int64_t start = now(); for (int i = 0; i < 15; ++i) { for (int t = 0; t < ZT_NUM_C25519_TEST_VECTORS; ++t) { // NOLINT(modernize-loop-convert) - if (C25519::verify( - C25519_TEST_VECTORS[t].pub1, C25519_TEST_VECTORS[t].agreementSha512, 64, - C25519_TEST_VECTORS[t].agreementSignedBy1, 96)) + if (C25519::verify(C25519_TEST_VECTORS[t].pub1, C25519_TEST_VECTORS[t].agreementSha512, 64, C25519_TEST_VECTORS[t].agreementSignedBy1, 96)) ++foo; } } int64_t end = now(); - ZT_T_PRINTF( - "%.4f μs/verify" ZT_EOL_S, - ((double)(end - start) * 1000.0) / (double)(15 * ZT_NUM_C25519_TEST_VECTORS)); + ZT_T_PRINTF("%.4f μs/verify" ZT_EOL_S, ((double)(end - start) * 1000.0) / (double)(15 * ZT_NUM_C25519_TEST_VECTORS)); } { uint8_t key[48]; ZT_T_PRINTF("[crypto] Benchmarking ECC384 ECDH... "); - volatile uint8_t *volatile pub = - (volatile uint8_t *)ECC384_TV0_PUBLIC; // NOLINT(hicpp-use-auto,modernize-use-auto) - int64_t start = now(); + volatile uint8_t *volatile pub = (volatile uint8_t *)ECC384_TV0_PUBLIC; // NOLINT(hicpp-use-auto,modernize-use-auto) + int64_t start = now(); for (int i = 0; i < 500; ++i) { ECC384ECDH((const uint8_t *)pub, ECC384_TV0_PRIVATE, key); foo = key[0]; } int64_t end = now(); - ZT_T_PRINTF( - "%.4f μs/agreement" ZT_EOL_S, - ((double)(end - start) * 1000.0) / (double)(500 * ZT_NUM_C25519_TEST_VECTORS)); + ZT_T_PRINTF("%.4f μs/agreement" ZT_EOL_S, ((double)(end - start) * 1000.0) / (double)(500 * ZT_NUM_C25519_TEST_VECTORS)); } { @@ -2638,9 +1867,7 @@ extern "C" const char *ZTT_benchmarkCrypto() foo = sig[0]; } int64_t end = now(); - ZT_T_PRINTF( - "%.4f μs/signature" ZT_EOL_S, - ((double)(end - start) * 1000.0) / (double)(500 * ZT_NUM_C25519_TEST_VECTORS)); + ZT_T_PRINTF("%.4f μs/signature" ZT_EOL_S, ((double)(end - start) * 1000.0) / (double)(500 * ZT_NUM_C25519_TEST_VECTORS)); ZT_T_PRINTF("[crypto] Benchmarking ECC384 signature verification... "); start = now(); for (int i = 0; i < 500; ++i) { @@ -2648,9 +1875,7 @@ extern "C" const char *ZTT_benchmarkCrypto() ++foo; } end = now(); - ZT_T_PRINTF( - "%.4f μs/verify" ZT_EOL_S, - ((double)(end - start) * 1000.0) / (double)(500 * ZT_NUM_C25519_TEST_VECTORS)); + ZT_T_PRINTF("%.4f μs/verify" ZT_EOL_S, ((double)(end - start) * 1000.0) / (double)(500 * ZT_NUM_C25519_TEST_VECTORS)); } { diff --git a/core/TinyMap.hpp b/core/TinyMap.hpp index 05747af39..4f9b109ab 100644 --- a/core/TinyMap.hpp +++ b/core/TinyMap.hpp @@ -71,8 +71,7 @@ template class TinyMap { const uintptr_t vptr = bucket.exchange(ZT_TINYMAP_LOCKED_POINTER, std::memory_order_acquire); if (likely(vptr != ZT_TINYMAP_LOCKED_POINTER)) { if (likely(vptr != 0)) { - for (typename EV::const_iterator n(reinterpret_cast(vptr)->begin()); - n != reinterpret_cast(vptr)->end(); ++n) { + for (typename EV::const_iterator n(reinterpret_cast(vptr)->begin()); n != reinterpret_cast(vptr)->end(); ++n) { if (likely(n->first == key)) { tmp = n->second; break; @@ -98,8 +97,7 @@ template class TinyMap { vptr = reinterpret_cast(new EV()); } else { - for (typename EV::iterator n(reinterpret_cast(vptr)->begin()); - n != reinterpret_cast(vptr)->end(); ++n) { + for (typename EV::iterator n(reinterpret_cast(vptr)->begin()); n != reinterpret_cast(vptr)->end(); ++n) { if (n->first == key) { n->second = value; bucket.store(vptr, std::memory_order_release); @@ -124,8 +122,7 @@ template class TinyMap { uintptr_t vptr = bucket.exchange(ZT_TINYMAP_LOCKED_POINTER, std::memory_order_acquire); if (likely(vptr != ZT_TINYMAP_LOCKED_POINTER)) { if (likely(vptr != 0)) { - for (typename EV::iterator n(reinterpret_cast(vptr)->begin()); - n != reinterpret_cast(vptr)->end(); ++n) { + for (typename EV::iterator n(reinterpret_cast(vptr)->begin()); n != reinterpret_cast(vptr)->end(); ++n) { if (n->first == key) { reinterpret_cast(vptr)->erase(n); break; diff --git a/core/Topology.cpp b/core/Topology.cpp index 1572137cb..0656b6adb 100644 --- a/core/Topology.cpp +++ b/core/Topology.cpp @@ -72,9 +72,7 @@ void Topology::doPeriodicTasks(const CallContext &cc) for (Map>::iterator i(m_peers.begin()); i != m_peers.end(); ++i) { // TODO: also delete if the peer has not exchanged meaningful communication in a while, such as a // network frame or non-trivial control packet. - if (((cc.ticks - i->second->lastReceive()) > ZT_PEER_ALIVE_TIMEOUT) - && (!std::binary_search( - rootLookup.begin(), rootLookup.end(), reinterpret_cast(i->second.ptr())))) + if (((cc.ticks - i->second->lastReceive()) > ZT_PEER_ALIVE_TIMEOUT) && (!std::binary_search(rootLookup.begin(), rootLookup.end(), reinterpret_cast(i->second.ptr())))) toDelete.push_back(i->first); } } diff --git a/core/Trace.cpp b/core/Trace.cpp index a58eb13f0..f59a1901c 100644 --- a/core/Trace.cpp +++ b/core/Trace.cpp @@ -35,9 +35,7 @@ void Trace::unexpectedError(const CallContext &cc, uint32_t codeLocation, const m_ctx.node->postEvent(cc.tPtr, ZT_EVENT_TRACE, buf.data()); } -void Trace::m_resettingPathsInScope( - void *tPtr, uint32_t codeLocation, const Identity &reporter, const InetAddress &from, - const InetAddress &oldExternal, const InetAddress &newExternal, ZT_InetAddress_IpScope scope) +void Trace::m_resettingPathsInScope(void *tPtr, uint32_t codeLocation, const Identity &reporter, const InetAddress &from, const InetAddress &oldExternal, const InetAddress &newExternal, ZT_InetAddress_IpScope scope) { FCV buf; Dictionary::append(buf, ZT_TRACE_FIELD_TYPE, ZT_TRACE_VL1_RESETTING_PATHS_IN_SCOPE); @@ -55,10 +53,7 @@ void Trace::m_resettingPathsInScope( m_ctx.node->postEvent(tPtr, ZT_EVENT_TRACE, buf.data()); } -void Trace::m_tryingNewPath( - void *tPtr, uint32_t codeLocation, const Identity &trying, const InetAddress &physicalAddress, - const InetAddress &triggerAddress, uint64_t triggeringPacketId, uint8_t triggeringPacketVerb, - const Identity &triggeringPeer) +void Trace::m_tryingNewPath(void *tPtr, uint32_t codeLocation, const Identity &trying, const InetAddress &physicalAddress, const InetAddress &triggerAddress, uint64_t triggeringPacketId, uint8_t triggeringPacketVerb, const Identity &triggeringPeer) { if ((trying) && (physicalAddress)) { FCV buf; @@ -77,9 +72,7 @@ void Trace::m_tryingNewPath( } } -void Trace::m_learnedNewPath( - void *tPtr, uint32_t codeLocation, uint64_t packetId, const Identity &peerIdentity, - const InetAddress &physicalAddress, const InetAddress &replaced) +void Trace::m_learnedNewPath(void *tPtr, uint32_t codeLocation, uint64_t packetId, const Identity &peerIdentity, const InetAddress &physicalAddress, const InetAddress &replaced) { if (peerIdentity) { FCV buf; @@ -96,9 +89,7 @@ void Trace::m_learnedNewPath( } } -void Trace::m_incomingPacketDropped( - void *tPtr, uint32_t codeLocation, uint64_t packetId, uint64_t networkId, const Identity &peerIdentity, - const InetAddress &physicalAddress, uint8_t hops, uint8_t verb, ZT_TracePacketDropReason reason) +void Trace::m_incomingPacketDropped(void *tPtr, uint32_t codeLocation, uint64_t packetId, uint64_t networkId, const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, uint8_t verb, ZT_TracePacketDropReason reason) { FCV buf; Dictionary::append(buf, ZT_TRACE_FIELD_TYPE, ZT_TRACE_VL1_INCOMING_PACKET_DROPPED); @@ -116,9 +107,7 @@ void Trace::m_incomingPacketDropped( m_ctx.node->postEvent(tPtr, ZT_EVENT_TRACE, buf.data()); } -void Trace::m_outgoingNetworkFrameDropped( - void *tPtr, uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, uint16_t etherType, - uint16_t frameLength, const uint8_t *frameData, ZT_TraceFrameDropReason reason) +void Trace::m_outgoingNetworkFrameDropped(void *tPtr, uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, uint16_t etherType, uint16_t frameLength, const uint8_t *frameData, ZT_TraceFrameDropReason reason) { FCV buf; Dictionary::append(buf, ZT_TRACE_FIELD_TYPE, ZT_TRACE_VL1_INCOMING_PACKET_DROPPED); @@ -129,18 +118,14 @@ void Trace::m_outgoingNetworkFrameDropped( Dictionary::append(buf, ZT_TRACE_FIELD_ETHERTYPE, etherType); Dictionary::append(buf, ZT_TRACE_FIELD_FRAME_LENGTH, frameLength); if (frameData) - Dictionary::append( - buf, ZT_TRACE_FIELD_FRAME_DATA, frameData, std::min((unsigned int)64, (unsigned int)frameLength)); + Dictionary::append(buf, ZT_TRACE_FIELD_FRAME_DATA, frameData, std::min((unsigned int)64, (unsigned int)frameLength)); Dictionary::append(buf, ZT_TRACE_FIELD_REASON, reason); buf.push_back(0); m_ctx.node->postEvent(tPtr, ZT_EVENT_TRACE, buf.data()); } void Trace::m_incomingNetworkFrameDropped( - void *tPtr, uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, - const uint16_t etherType, const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, - uint16_t frameLength, const uint8_t *frameData, uint8_t verb, bool credentialRequestSent, - ZT_TraceFrameDropReason reason) + void *tPtr, uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, const uint16_t etherType, const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, uint16_t frameLength, const uint8_t *frameData, uint8_t verb, bool credentialRequestSent, ZT_TraceFrameDropReason reason) { FCV buf; Dictionary::append(buf, ZT_TRACE_FIELD_TYPE, ZT_TRACE_VL2_INCOMING_FRAME_DROPPED); @@ -156,8 +141,7 @@ void Trace::m_incomingNetworkFrameDropped( Dictionary::append(buf, ZT_TRACE_FIELD_PACKET_VERB, verb); Dictionary::append(buf, ZT_TRACE_FIELD_FRAME_LENGTH, frameLength); if (frameData) - Dictionary::append( - buf, ZT_TRACE_FIELD_FRAME_DATA, frameData, std::min((unsigned int)64, (unsigned int)frameLength)); + Dictionary::append(buf, ZT_TRACE_FIELD_FRAME_DATA, frameData, std::min((unsigned int)64, (unsigned int)frameLength)); Dictionary::append(buf, ZT_TRACE_FIELD_FLAG_CREDENTIAL_REQUEST_SENT, credentialRequestSent); Dictionary::append(buf, ZT_TRACE_FIELD_REASON, reason); buf.push_back(0); @@ -175,10 +159,8 @@ void Trace::m_networkConfigRequestSent(void *tPtr, uint32_t codeLocation, uint64 } void Trace::m_networkFilter( - void *tPtr, uint32_t codeLocation, uint64_t networkId, const uint8_t *primaryRuleSetLog, - const uint8_t *matchingCapabilityRuleSetLog, uint32_t matchingCapabilityId, int64_t matchingCapabilityTimestamp, - const Address &source, const Address &dest, const MAC &sourceMac, const MAC &destMac, uint16_t frameLength, - const uint8_t *frameData, uint16_t etherType, uint16_t vlanId, bool noTee, bool inbound, int accept) + void *tPtr, uint32_t codeLocation, uint64_t networkId, const uint8_t *primaryRuleSetLog, const uint8_t *matchingCapabilityRuleSetLog, uint32_t matchingCapabilityId, int64_t matchingCapabilityTimestamp, const Address &source, const Address &dest, const MAC &sourceMac, const MAC &destMac, uint16_t frameLength, const uint8_t *frameData, uint16_t etherType, + uint16_t vlanId, bool noTee, bool inbound, int accept) { FCV buf; Dictionary::append(buf, ZT_TRACE_FIELD_TYPE, ZT_TRACE_VL2_NETWORK_FILTER); @@ -196,8 +178,7 @@ void Trace::m_networkFilter( Dictionary::append(buf, ZT_TRACE_FIELD_DEST_MAC, destMac.toInt()); Dictionary::append(buf, ZT_TRACE_FIELD_FRAME_LENGTH, frameLength); if (frameData) - Dictionary::append( - buf, ZT_TRACE_FIELD_FRAME_DATA, frameData, std::min((unsigned int)64, (unsigned int)frameLength)); + Dictionary::append(buf, ZT_TRACE_FIELD_FRAME_DATA, frameData, std::min((unsigned int)64, (unsigned int)frameLength)); Dictionary::append(buf, ZT_TRACE_FIELD_ETHERTYPE, etherType); Dictionary::append(buf, ZT_TRACE_FIELD_VLAN_ID, vlanId); Dictionary::append(buf, ZT_TRACE_FIELD_RULE_FLAG_NOTEE, noTee); @@ -207,9 +188,7 @@ void Trace::m_networkFilter( m_ctx.node->postEvent(tPtr, ZT_EVENT_TRACE, buf.data()); } -void Trace::m_credentialRejected( - void *tPtr, uint32_t codeLocation, uint64_t networkId, const Identity &identity, uint32_t credentialId, - int64_t credentialTimestamp, uint8_t credentialType, ZT_TraceCredentialRejectionReason reason) +void Trace::m_credentialRejected(void *tPtr, uint32_t codeLocation, uint64_t networkId, const Identity &identity, uint32_t credentialId, int64_t credentialTimestamp, uint8_t credentialType, ZT_TraceCredentialRejectionReason reason) { FCV buf; Dictionary::append(buf, ZT_TRACE_FIELD_TYPE, ZT_TRACE_VL2_NETWORK_CREDENTIAL_REJECTED); diff --git a/core/Trace.hpp b/core/Trace.hpp index 0fb863220..456ea1b0c 100644 --- a/core/Trace.hpp +++ b/core/Trace.hpp @@ -61,15 +61,9 @@ class Trace { struct RuleResultLog : public TriviallyCopyable { uint8_t l[ZT_MAX_NETWORK_RULES / 2]; // ZT_MAX_NETWORK_RULES 4-bit fields - ZT_INLINE void log(const unsigned int rn, const uint8_t thisRuleMatches, const uint8_t thisSetMatches) noexcept - { - l[rn >> 1U] |= (((thisRuleMatches + 1U) << 2U) | (thisSetMatches + 1U)) << ((rn & 1U) << 2U); - } + ZT_INLINE void log(const unsigned int rn, const uint8_t thisRuleMatches, const uint8_t thisSetMatches) noexcept { l[rn >> 1U] |= (((thisRuleMatches + 1U) << 2U) | (thisSetMatches + 1U)) << ((rn & 1U) << 2U); } - ZT_INLINE void logSkipped(const unsigned int rn, const uint8_t thisSetMatches) noexcept - { - l[rn >> 1U] |= (thisSetMatches + 1U) << ((rn & 1U) << 2U); - } + ZT_INLINE void logSkipped(const unsigned int rn, const uint8_t thisSetMatches) noexcept { l[rn >> 1U] |= (thisSetMatches + 1U) << ((rn & 1U) << 2U); } ZT_INLINE void clear() noexcept { memoryZero(this); } }; @@ -78,63 +72,41 @@ class Trace { void unexpectedError(const CallContext &cc, uint32_t codeLocation, const char *message, ...); - ZT_INLINE void resettingPathsInScope( - const CallContext &cc, const uint32_t codeLocation, const Identity &reporter, const InetAddress &from, - const InetAddress &oldExternal, const InetAddress &newExternal, const InetAddress::IpScope scope) + ZT_INLINE void resettingPathsInScope(const CallContext &cc, const uint32_t codeLocation, const Identity &reporter, const InetAddress &from, const InetAddress &oldExternal, const InetAddress &newExternal, const InetAddress::IpScope scope) { if (unlikely((m_traceFlags & ZT_TRACE_F_VL1) != 0)) m_resettingPathsInScope(cc.tPtr, codeLocation, reporter, from, oldExternal, newExternal, scope); } - ZT_INLINE void tryingNewPath( - const CallContext &cc, const uint32_t codeLocation, const Identity &trying, const InetAddress &physicalAddress, - const InetAddress &triggerAddress, uint64_t triggeringPacketId, uint8_t triggeringPacketVerb, - const Identity &triggeringPeer) + ZT_INLINE void tryingNewPath(const CallContext &cc, const uint32_t codeLocation, const Identity &trying, const InetAddress &physicalAddress, const InetAddress &triggerAddress, uint64_t triggeringPacketId, uint8_t triggeringPacketVerb, const Identity &triggeringPeer) { if (unlikely((m_traceFlags & ZT_TRACE_F_VL1) != 0)) - m_tryingNewPath( - cc.tPtr, codeLocation, trying, physicalAddress, triggerAddress, triggeringPacketId, - triggeringPacketVerb, triggeringPeer); + m_tryingNewPath(cc.tPtr, codeLocation, trying, physicalAddress, triggerAddress, triggeringPacketId, triggeringPacketVerb, triggeringPeer); } - ZT_INLINE void learnedNewPath( - const CallContext &cc, const uint32_t codeLocation, uint64_t packetId, const Identity &peerIdentity, - const InetAddress &physicalAddress, const InetAddress &replaced) + ZT_INLINE void learnedNewPath(const CallContext &cc, const uint32_t codeLocation, uint64_t packetId, const Identity &peerIdentity, const InetAddress &physicalAddress, const InetAddress &replaced) { if (unlikely((m_traceFlags & ZT_TRACE_F_VL1) != 0)) m_learnedNewPath(cc.tPtr, codeLocation, packetId, peerIdentity, physicalAddress, replaced); } - ZT_INLINE void incomingPacketDropped( - const CallContext &cc, const uint32_t codeLocation, uint64_t packetId, uint64_t networkId, - const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, uint8_t verb, - const ZT_TracePacketDropReason reason) + ZT_INLINE void incomingPacketDropped(const CallContext &cc, const uint32_t codeLocation, uint64_t packetId, uint64_t networkId, const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, uint8_t verb, const ZT_TracePacketDropReason reason) { if (unlikely((m_traceFlags & ZT_TRACE_F_VL1) != 0)) - m_incomingPacketDropped( - cc.tPtr, codeLocation, packetId, networkId, peerIdentity, physicalAddress, hops, verb, reason); + m_incomingPacketDropped(cc.tPtr, codeLocation, packetId, networkId, peerIdentity, physicalAddress, hops, verb, reason); } - ZT_INLINE void outgoingNetworkFrameDropped( - const CallContext &cc, const uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, - const MAC &destMac, uint16_t etherType, uint16_t frameLength, const uint8_t *frameData, - ZT_TraceFrameDropReason reason) + ZT_INLINE void outgoingNetworkFrameDropped(const CallContext &cc, const uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, uint16_t etherType, uint16_t frameLength, const uint8_t *frameData, ZT_TraceFrameDropReason reason) { if (unlikely((m_traceFlags & ZT_TRACE_F_VL2) != 0)) - m_outgoingNetworkFrameDropped( - cc.tPtr, codeLocation, networkId, sourceMac, destMac, etherType, frameLength, frameData, reason); + m_outgoingNetworkFrameDropped(cc.tPtr, codeLocation, networkId, sourceMac, destMac, etherType, frameLength, frameData, reason); } ZT_INLINE void incomingNetworkFrameDropped( - const CallContext &cc, const uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, - const MAC &destMac, const uint16_t etherType, const Identity &peerIdentity, const InetAddress &physicalAddress, - uint8_t hops, uint16_t frameLength, const uint8_t *frameData, uint8_t verb, bool credentialRequestSent, - ZT_TraceFrameDropReason reason) + const CallContext &cc, const uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, const uint16_t etherType, const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, uint16_t frameLength, const uint8_t *frameData, uint8_t verb, bool credentialRequestSent, ZT_TraceFrameDropReason reason) { if (unlikely((m_traceFlags & ZT_TRACE_F_VL2) != 0)) - m_incomingNetworkFrameDropped( - cc.tPtr, codeLocation, networkId, sourceMac, destMac, etherType, peerIdentity, physicalAddress, hops, - frameLength, frameData, verb, credentialRequestSent, reason); + m_incomingNetworkFrameDropped(cc.tPtr, codeLocation, networkId, sourceMac, destMac, etherType, peerIdentity, physicalAddress, hops, frameLength, frameData, verb, credentialRequestSent, reason); } ZT_INLINE void networkConfigRequestSent(const CallContext &cc, const uint32_t codeLocation, uint64_t networkId) @@ -144,69 +116,41 @@ class Trace { } ZT_INLINE void networkFilter( - const CallContext &cc, const uint32_t codeLocation, uint64_t networkId, const uint8_t primaryRuleSetLog[512], - const uint8_t matchingCapabilityRuleSetLog[512], uint32_t matchingCapabilityId, - int64_t matchingCapabilityTimestamp, const Address &source, const Address &dest, const MAC &sourceMac, - const MAC &destMac, uint16_t frameLength, const uint8_t *frameData, uint16_t etherType, uint16_t vlanId, - bool noTee, bool inbound, int accept) + const CallContext &cc, const uint32_t codeLocation, uint64_t networkId, const uint8_t primaryRuleSetLog[512], const uint8_t matchingCapabilityRuleSetLog[512], uint32_t matchingCapabilityId, int64_t matchingCapabilityTimestamp, const Address &source, const Address &dest, const MAC &sourceMac, const MAC &destMac, uint16_t frameLength, + const uint8_t *frameData, uint16_t etherType, uint16_t vlanId, bool noTee, bool inbound, int accept) { if (unlikely((m_traceFlags & ZT_TRACE_F_VL2_FILTER) != 0)) { - m_networkFilter( - cc.tPtr, codeLocation, networkId, primaryRuleSetLog, matchingCapabilityRuleSetLog, matchingCapabilityId, - matchingCapabilityTimestamp, source, dest, sourceMac, destMac, frameLength, frameData, etherType, - vlanId, noTee, inbound, accept); + m_networkFilter(cc.tPtr, codeLocation, networkId, primaryRuleSetLog, matchingCapabilityRuleSetLog, matchingCapabilityId, matchingCapabilityTimestamp, source, dest, sourceMac, destMac, frameLength, frameData, etherType, vlanId, noTee, inbound, accept); } } - ZT_INLINE void credentialRejected( - const CallContext &cc, const uint32_t codeLocation, uint64_t networkId, const Identity &identity, - uint32_t credentialId, int64_t credentialTimestamp, uint8_t credentialType, - ZT_TraceCredentialRejectionReason reason) + ZT_INLINE void credentialRejected(const CallContext &cc, const uint32_t codeLocation, uint64_t networkId, const Identity &identity, uint32_t credentialId, int64_t credentialTimestamp, uint8_t credentialType, ZT_TraceCredentialRejectionReason reason) { if (unlikely((m_traceFlags & ZT_TRACE_F_VL2) != 0)) - m_credentialRejected( - cc.tPtr, codeLocation, networkId, identity, credentialId, credentialTimestamp, credentialType, reason); + m_credentialRejected(cc.tPtr, codeLocation, networkId, identity, credentialId, credentialTimestamp, credentialType, reason); } private: - void m_resettingPathsInScope( - void *tPtr, uint32_t codeLocation, const Identity &reporter, const InetAddress &from, - const InetAddress &oldExternal, const InetAddress &newExternal, InetAddress::IpScope scope); + void m_resettingPathsInScope(void *tPtr, uint32_t codeLocation, const Identity &reporter, const InetAddress &from, const InetAddress &oldExternal, const InetAddress &newExternal, InetAddress::IpScope scope); - void m_tryingNewPath( - void *tPtr, uint32_t codeLocation, const Identity &trying, const InetAddress &physicalAddress, - const InetAddress &triggerAddress, uint64_t triggeringPacketId, uint8_t triggeringPacketVerb, - const Identity &triggeringPeer); + void m_tryingNewPath(void *tPtr, uint32_t codeLocation, const Identity &trying, const InetAddress &physicalAddress, const InetAddress &triggerAddress, uint64_t triggeringPacketId, uint8_t triggeringPacketVerb, const Identity &triggeringPeer); - void m_learnedNewPath( - void *tPtr, uint32_t codeLocation, uint64_t packetId, const Identity &peerIdentity, - const InetAddress &physicalAddress, const InetAddress &replaced); + void m_learnedNewPath(void *tPtr, uint32_t codeLocation, uint64_t packetId, const Identity &peerIdentity, const InetAddress &physicalAddress, const InetAddress &replaced); - void m_incomingPacketDropped( - void *tPtr, uint32_t codeLocation, uint64_t packetId, uint64_t networkId, const Identity &peerIdentity, - const InetAddress &physicalAddress, uint8_t hops, uint8_t verb, ZT_TracePacketDropReason reason); + void m_incomingPacketDropped(void *tPtr, uint32_t codeLocation, uint64_t packetId, uint64_t networkId, const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, uint8_t verb, ZT_TracePacketDropReason reason); - void m_outgoingNetworkFrameDropped( - void *tPtr, uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, - uint16_t etherType, uint16_t frameLength, const uint8_t *frameData, ZT_TraceFrameDropReason reason); + void m_outgoingNetworkFrameDropped(void *tPtr, uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, uint16_t etherType, uint16_t frameLength, const uint8_t *frameData, ZT_TraceFrameDropReason reason); - void m_incomingNetworkFrameDropped( - void *tPtr, uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, - const uint16_t etherType, const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, - uint16_t frameLength, const uint8_t *frameData, uint8_t verb, bool credentialRequestSent, - ZT_TraceFrameDropReason reason); + void + m_incomingNetworkFrameDropped(void *tPtr, uint32_t codeLocation, uint64_t networkId, const MAC &sourceMac, const MAC &destMac, const uint16_t etherType, const Identity &peerIdentity, const InetAddress &physicalAddress, uint8_t hops, uint16_t frameLength, const uint8_t *frameData, uint8_t verb, bool credentialRequestSent, ZT_TraceFrameDropReason reason); void m_networkConfigRequestSent(void *tPtr, uint32_t codeLocation, uint64_t networkId); void m_networkFilter( - void *tPtr, uint32_t codeLocation, uint64_t networkId, const uint8_t *primaryRuleSetLog, - const uint8_t *matchingCapabilityRuleSetLog, uint32_t matchingCapabilityId, int64_t matchingCapabilityTimestamp, - const Address &source, const Address &dest, const MAC &sourceMac, const MAC &destMac, uint16_t frameLength, - const uint8_t *frameData, uint16_t etherType, uint16_t vlanId, bool noTee, bool inbound, int accept); + void *tPtr, uint32_t codeLocation, uint64_t networkId, const uint8_t *primaryRuleSetLog, const uint8_t *matchingCapabilityRuleSetLog, uint32_t matchingCapabilityId, int64_t matchingCapabilityTimestamp, const Address &source, const Address &dest, const MAC &sourceMac, const MAC &destMac, uint16_t frameLength, const uint8_t *frameData, + uint16_t etherType, uint16_t vlanId, bool noTee, bool inbound, int accept); - void m_credentialRejected( - void *tPtr, uint32_t codeLocation, uint64_t networkId, const Identity &identity, uint32_t credentialId, - int64_t credentialTimestamp, uint8_t credentialType, ZT_TraceCredentialRejectionReason reason); + void m_credentialRejected(void *tPtr, uint32_t codeLocation, uint64_t networkId, const Identity &identity, uint32_t credentialId, int64_t credentialTimestamp, uint8_t credentialType, ZT_TraceCredentialRejectionReason reason); const Context &m_ctx; volatile unsigned int m_traceFlags; // faster than atomic, but may not "instantly" change... should be okay diff --git a/core/TrustStore.cpp b/core/TrustStore.cpp index 33799d8f4..8b9cae0d6 100644 --- a/core/TrustStore.cpp +++ b/core/TrustStore.cpp @@ -35,21 +35,17 @@ Map> TrustStore::roots() // Iterate using m_bySubjectIdentity to only scan certificates with subject identities. // This map also does not contian error or deprecated certificates. - for (Map>>::const_iterator cv(m_bySubjectIdentity.begin()); - cv != m_bySubjectIdentity.end(); ++cv) { + for (Map>>::const_iterator cv(m_bySubjectIdentity.begin()); cv != m_bySubjectIdentity.end(); ++cv) { for (Vector>::const_iterator c(cv->second.begin()); c != cv->second.end(); ++c) { // A root set cert must be marked for this use and authorized to influence this node's config. - if ((((*c)->m_certificate.usageFlags & ZT_CERTIFICATE_USAGE_ZEROTIER_ROOT_SET) != 0) - && (((*c)->m_localTrust & ZT_CERTIFICATE_LOCAL_TRUST_FLAG_CONFIG) != 0)) { + if ((((*c)->m_certificate.usageFlags & ZT_CERTIFICATE_USAGE_ZEROTIER_ROOT_SET) != 0) && (((*c)->m_localTrust & ZT_CERTIFICATE_LOCAL_TRUST_FLAG_CONFIG) != 0)) { // Add all identities to the root set, and for each entry in the set make sure we have the latest // locator if there's more than one cert with one. for (unsigned int j = 0; j < (*c)->certificate().subject.identityCount; ++j) { - const Identity *const id = - reinterpret_cast((*c)->certificate().subject.identities[j].identity); + auto id = Identity::from((*c)->certificate().subject.identities[j].identity); if ((id) && (*id)) { // sanity check SharedPtr &existingLoc = r[*id]; - const Locator *const loc = - reinterpret_cast((*c)->certificate().subject.identities[j].locator); + auto loc = Locator::from((*c)->certificate().subject.identities[j].locator); if (loc) { if ((!existingLoc) || (existingLoc->revision() < loc->revision())) existingLoc.set(new Locator(*loc)); @@ -156,8 +152,7 @@ bool TrustStore::update(const int64_t clock, Vector> *const pur } } else { - if ((!c->second->m_onTrustPath) - && ((c->second->m_localTrust & ZT_CERTIFICATE_LOCAL_TRUST_FLAG_ROOT_CA) == 0)) { + if ((!c->second->m_onTrustPath) && ((c->second->m_localTrust & ZT_CERTIFICATE_LOCAL_TRUST_FLAG_ROOT_CA) == 0)) { // Trace the path of each certificate all the way back to a trusted CA. unsigned int pathLength = 0; Map>::const_iterator current(c); @@ -166,25 +161,15 @@ bool TrustStore::update(const int64_t clock, Vector> *const pur if (pathLength <= current->second->m_certificate.maxPathLength) { // Check if this cert isn't a CA or already part of a valid trust path. If so then step // upward toward CA. - if (((current->second->m_localTrust & ZT_CERTIFICATE_LOCAL_TRUST_FLAG_ROOT_CA) == 0) - && (!current->second->m_onTrustPath)) { + if (((current->second->m_localTrust & ZT_CERTIFICATE_LOCAL_TRUST_FLAG_ROOT_CA) == 0) && (!current->second->m_onTrustPath)) { // If the issuer (parent) certificiate is (1) valid, (2) not already visited (to // prevent loops), and (3) has a public key that matches this cert's issuer public // key (sanity check), proceed up the certificate graph toward a potential CA. visited.push_back(current->second.ptr()); const Map>::const_iterator prevChild(current); current = m_bySerial.find(H384(current->second->m_certificate.issuer)); - if ((current != m_bySerial.end()) - && (std::find(visited.begin(), visited.end(), current->second.ptr()) - == visited.end()) - && (current->second->m_error == ZT_CERTIFICATE_ERROR_NONE) - && (current->second->m_certificate.publicKeySize - == prevChild->second->m_certificate.issuerPublicKeySize) - && (memcmp( - current->second->m_certificate.publicKey, - prevChild->second->m_certificate.issuerPublicKey, - current->second->m_certificate.publicKeySize) - == 0)) { + if ((current != m_bySerial.end()) && (std::find(visited.begin(), visited.end(), current->second.ptr()) == visited.end()) && (current->second->m_error == ZT_CERTIFICATE_ERROR_NONE) && (current->second->m_certificate.publicKeySize == prevChild->second->m_certificate.issuerPublicKeySize) + && (memcmp(current->second->m_certificate.publicKey, prevChild->second->m_certificate.issuerPublicKey, current->second->m_certificate.publicKeySize) == 0)) { ++pathLength; continue; } @@ -220,8 +205,7 @@ bool TrustStore::update(const int64_t clock, Vector> *const pur if (c->second->m_error == ZT_CERTIFICATE_ERROR_NONE) { const unsigned int uniqueIdSize = c->second->m_certificate.subject.uniqueIdSize; if ((uniqueIdSize > 0) && (uniqueIdSize <= ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE)) { - SharedPtr &entry = m_bySubjectUniqueId[Blob( - c->second->m_certificate.subject.uniqueId, uniqueIdSize)]; + SharedPtr &entry = m_bySubjectUniqueId[Blob(c->second->m_certificate.subject.uniqueId, uniqueIdSize)]; if (entry) { // If there's already an entry, see if there's a newer certificate for this subject. if (c->second->m_certificate.subject.timestamp > entry->m_certificate.subject.timestamp) { @@ -233,10 +217,7 @@ bool TrustStore::update(const int64_t clock, Vector> *const pur } else { // Equal timestamps should never happen, but handle it anyway by comparing serials. - if (memcmp( - c->second->m_certificate.serialNo, entry->m_certificate.serialNo, - ZT_CERTIFICATE_HASH_SIZE) - > 0) { + if (memcmp(c->second->m_certificate.serialNo, entry->m_certificate.serialNo, ZT_CERTIFICATE_HASH_SIZE) > 0) { entry->m_subjectDeprecated = true; entry = c->second; } @@ -258,8 +239,7 @@ bool TrustStore::update(const int64_t clock, Vector> *const pur for (Map>::const_iterator c(m_bySerial.begin()); c != m_bySerial.end(); ++c) { if ((c->second->m_error == ZT_CERTIFICATE_ERROR_NONE) && (!c->second->m_subjectDeprecated)) { for (unsigned int i = 0; i < c->second->m_certificate.subject.identityCount; ++i) { - const Identity *const id = - reinterpret_cast(c->second->m_certificate.subject.identities[i].identity); + auto id = Identity::from(c->second->m_certificate.subject.identities[i].identity); if ((id) && (*id)) // sanity check m_bySubjectIdentity[id->fingerprint()].push_back(c->second); } @@ -269,8 +249,7 @@ bool TrustStore::update(const int64_t clock, Vector> *const pur // If purge is set, erase and return error and deprecated certs (that are not on a trust path). if (purge) { for (Map>::const_iterator c(m_bySerial.begin()); c != m_bySerial.end();) { - if ((c->second->error() != ZT_CERTIFICATE_ERROR_NONE) - || ((c->second->m_subjectDeprecated) && (!c->second->m_onTrustPath))) { + if ((c->second->error() != ZT_CERTIFICATE_ERROR_NONE) || ((c->second->m_subjectDeprecated) && (!c->second->m_onTrustPath))) { purge->push_back(c->second); m_bySerial.erase(c++); } @@ -314,9 +293,7 @@ Vector TrustStore::save() const b.push_back(0); comp.resize((unsigned long)LZ4_COMPRESSBOUND(b.size()) + 8); - compSize = LZ4_compress_fast( - reinterpret_cast(b.data()), reinterpret_cast(comp.data() + 8), (int)b.size(), - (int)(comp.size() - 8)); + compSize = LZ4_compress_fast(reinterpret_cast(b.data()), reinterpret_cast(comp.data() + 8), (int)b.size(), (int)(comp.size() - 8)); if (unlikely(compSize <= 0)) // shouldn't be possible return Vector(); @@ -344,10 +321,7 @@ int TrustStore::load(const Vector &data) Vector uncomp; uncomp.resize(uncompSize); - if (LZ4_decompress_safe( - reinterpret_cast(data.data() + 8), reinterpret_cast(uncomp.data()), - (int)(data.size() - 8), (int)uncompSize) - != (int)uncompSize) + if (LZ4_decompress_safe(reinterpret_cast(data.data() + 8), reinterpret_cast(uncomp.data()), (int)(data.size() - 8), (int)uncompSize) != (int)uncompSize) return -1; const uint8_t *b = uncomp.data(); if (Utils::fnv1a32(b, (unsigned int)uncompSize) != Utils::loadBigEndian(data.data() + 4)) diff --git a/core/TrustStore.hpp b/core/TrustStore.hpp index 61636f7fc..2b086eabf 100644 --- a/core/TrustStore.hpp +++ b/core/TrustStore.hpp @@ -97,16 +97,7 @@ class TrustStore { private: Entry &operator=(const Entry &) { return *this; } - ZT_INLINE Entry(RWMutex &l, const Certificate &cert, const unsigned int lt) noexcept - : __refCount(0) - , m_lock(l) - , m_certificate(cert) - , m_localTrust(lt) - , m_error(ZT_CERTIFICATE_ERROR_NONE) - , m_subjectDeprecated(false) - , m_onTrustPath(false) - { - } + ZT_INLINE Entry(RWMutex &l, const Certificate &cert, const unsigned int lt) noexcept : __refCount(0), m_lock(l), m_certificate(cert), m_localTrust(lt), m_error(ZT_CERTIFICATE_ERROR_NONE), m_subjectDeprecated(false), m_onTrustPath(false) {} std::atomic __refCount; @@ -203,10 +194,9 @@ class TrustStore { int load(const Vector &data); private: - Map> m_bySerial; // all certificates - Map, SharedPtr> - m_bySubjectUniqueId; // non-rejected certificates only - Map>> m_bySubjectIdentity; // non-rejected certificates only + Map> m_bySerial; // all certificates + Map, SharedPtr> m_bySubjectUniqueId; // non-rejected certificates only + Map>> m_bySubjectIdentity; // non-rejected certificates only ForwardList> m_addQueue; ForwardList m_deleteQueue; RWMutex m_lock; diff --git a/core/Utils.cpp b/core/Utils.cpp index 0379823c8..61fec1528 100644 --- a/core/Utils.cpp +++ b/core/Utils.cpp @@ -302,7 +302,7 @@ unsigned int unhex(const char *h, unsigned int hlen, void *buf, unsigned int buf #define ZT_GETSECURERANDOM_STATE_SIZE 64 #define ZT_GETSECURERANDOM_ITERATIONS_PER_GENERATOR 1048576 -#ifdef __GNUC__ +#if defined(__GNUC__) && defined(ZT_ARCH_X64) __attribute__((__target__("sse,sse2,rdrnd"))) #endif void getSecureRandom(void *const buf, unsigned int bytes) noexcept diff --git a/core/Utils.hpp b/core/Utils.hpp index 7f7a9d0fa..51571acb5 100644 --- a/core/Utils.hpp +++ b/core/Utils.hpp @@ -36,11 +36,9 @@ namespace Utils { // Macros to convert endian-ness at compile time for constants. #if __BYTE_ORDER == __LITTLE_ENDIAN #define ZT_CONST_TO_BE_UINT16(x) ((uint16_t)((uint16_t)((uint16_t)(x) << 8U) | (uint16_t)((uint16_t)(x) >> 8U))) -#define ZT_CONST_TO_BE_UINT64(x) \ - ((((uint64_t)(x)&0x00000000000000ffULL) << 56U) | (((uint64_t)(x)&0x000000000000ff00ULL) << 40U) \ - | (((uint64_t)(x)&0x0000000000ff0000ULL) << 24U) | (((uint64_t)(x)&0x00000000ff000000ULL) << 8U) \ - | (((uint64_t)(x)&0x000000ff00000000ULL) >> 8U) | (((uint64_t)(x)&0x0000ff0000000000ULL) >> 24U) \ - | (((uint64_t)(x)&0x00ff000000000000ULL) >> 40U) | (((uint64_t)(x)&0xff00000000000000ULL) >> 56U)) +#define ZT_CONST_TO_BE_UINT64(x) \ + ((((uint64_t)(x)&0x00000000000000ffULL) << 56U) | (((uint64_t)(x)&0x000000000000ff00ULL) << 40U) | (((uint64_t)(x)&0x0000000000ff0000ULL) << 24U) | (((uint64_t)(x)&0x00000000ff000000ULL) << 8U) | (((uint64_t)(x)&0x000000ff00000000ULL) >> 8U) | (((uint64_t)(x)&0x0000ff0000000000ULL) >> 24U) | (((uint64_t)(x)&0x00ff000000000000ULL) >> 40U) \ + | (((uint64_t)(x)&0xff00000000000000ULL) >> 56U)) #else #define ZT_CONST_TO_BE_UINT16(x) ((uint16_t)(x)) #define ZT_CONST_TO_BE_UINT64(x) ((uint64_t)(x)) @@ -252,25 +250,13 @@ static ZT_INLINE unsigned long long hexStrToU64(const char *s) noexcept #ifdef __GNUC__ -static ZT_INLINE unsigned int countBits(const uint8_t v) noexcept -{ - return (unsigned int)__builtin_popcount((unsigned int)v); -} +static ZT_INLINE unsigned int countBits(const uint8_t v) noexcept { return (unsigned int)__builtin_popcount((unsigned int)v); } -static ZT_INLINE unsigned int countBits(const uint16_t v) noexcept -{ - return (unsigned int)__builtin_popcount((unsigned int)v); -} +static ZT_INLINE unsigned int countBits(const uint16_t v) noexcept { return (unsigned int)__builtin_popcount((unsigned int)v); } -static ZT_INLINE unsigned int countBits(const uint32_t v) noexcept -{ - return (unsigned int)__builtin_popcountl((unsigned long)v); -} +static ZT_INLINE unsigned int countBits(const uint32_t v) noexcept { return (unsigned int)__builtin_popcountl((unsigned long)v); } -static ZT_INLINE unsigned int countBits(const uint64_t v) noexcept -{ - return (unsigned int)__builtin_popcountll((unsigned long long)v); -} +static ZT_INLINE unsigned int countBits(const uint64_t v) noexcept { return (unsigned int)__builtin_popcountll((unsigned long long)v); } #else @@ -298,10 +284,7 @@ static ZT_INLINE uint64_t swapBytes(const uint64_t n) noexcept #ifdef _MSC_VER return (uint64_t)_byteswap_uint64((unsigned __int64)n); #else - return ( - ((n & 0x00000000000000ffULL) << 56) | ((n & 0x000000000000ff00ULL) << 40) | ((n & 0x0000000000ff0000ULL) << 24) - | ((n & 0x00000000ff000000ULL) << 8) | ((n & 0x000000ff00000000ULL) >> 8) | ((n & 0x0000ff0000000000ULL) >> 24) - | ((n & 0x00ff000000000000ULL) >> 40) | ((n & 0xff00000000000000ULL) >> 56)); + return (((n & 0x00000000000000ffULL) << 56) | ((n & 0x000000000000ff00ULL) << 40) | ((n & 0x0000000000ff0000ULL) << 24) | ((n & 0x00000000ff000000ULL) << 8) | ((n & 0x000000ff00000000ULL) >> 8) | ((n & 0x0000ff0000000000ULL) >> 24) | ((n & 0x00ff000000000000ULL) >> 40) | ((n & 0xff00000000000000ULL) >> 56)); #endif #endif } @@ -377,27 +360,17 @@ template class _load_be_bysize { template class _load_be_bysize { public: - static ZT_INLINE I l(const uint8_t *const p) noexcept - { - return (I)(((unsigned int)p[0] << 8U) | (unsigned int)p[1]); - } + static ZT_INLINE I l(const uint8_t *const p) noexcept { return (I)(((unsigned int)p[0] << 8U) | (unsigned int)p[1]); } }; template class _load_be_bysize { public: - static ZT_INLINE I l(const uint8_t *const p) noexcept - { - return (I)(((uint32_t)p[0] << 24U) | ((uint32_t)p[1] << 16U) | ((uint32_t)p[2] << 8U) | (uint32_t)p[3]); - } + static ZT_INLINE I l(const uint8_t *const p) noexcept { return (I)(((uint32_t)p[0] << 24U) | ((uint32_t)p[1] << 16U) | ((uint32_t)p[2] << 8U) | (uint32_t)p[3]); } }; template class _load_be_bysize { public: - static ZT_INLINE I l(const uint8_t *const p) noexcept - { - return ( - I)(((uint64_t)p[0] << 56U) | ((uint64_t)p[1] << 48U) | ((uint64_t)p[2] << 40U) | ((uint64_t)p[3] << 32U) | ((uint64_t)p[4] << 24U) | ((uint64_t)p[5] << 16U) | ((uint64_t)p[6] << 8U) | (uint64_t)p[7]); - } + static ZT_INLINE I l(const uint8_t *const p) noexcept { return (I)(((uint64_t)p[0] << 56U) | ((uint64_t)p[1] << 48U) | ((uint64_t)p[2] << 40U) | ((uint64_t)p[3] << 32U) | ((uint64_t)p[4] << 24U) | ((uint64_t)p[5] << 16U) | ((uint64_t)p[6] << 8U) | (uint64_t)p[7]); } }; template class _load_le_bysize; @@ -409,27 +382,17 @@ template class _load_le_bysize { template class _load_le_bysize { public: - static ZT_INLINE I l(const uint8_t *const p) noexcept - { - return (I)((unsigned int)p[0] | ((unsigned int)p[1] << 8U)); - } + static ZT_INLINE I l(const uint8_t *const p) noexcept { return (I)((unsigned int)p[0] | ((unsigned int)p[1] << 8U)); } }; template class _load_le_bysize { public: - static ZT_INLINE I l(const uint8_t *const p) noexcept - { - return (I)((uint32_t)p[0] | ((uint32_t)p[1] << 8U) | ((uint32_t)p[2] << 16U) | ((uint32_t)p[3] << 24U)); - } + static ZT_INLINE I l(const uint8_t *const p) noexcept { return (I)((uint32_t)p[0] | ((uint32_t)p[1] << 8U) | ((uint32_t)p[2] << 16U) | ((uint32_t)p[3] << 24U)); } }; template class _load_le_bysize { public: - static ZT_INLINE I l(const uint8_t *const p) noexcept - { - return ( - I)((uint64_t)p[0] | ((uint64_t)p[1] << 8U) | ((uint64_t)p[2] << 16U) | ((uint64_t)p[3] << 24U) | ((uint64_t)p[4] << 32U) | ((uint64_t)p[5] << 40U) | ((uint64_t)p[6] << 48U) | ((uint64_t)p[7]) << 56U); - } + static ZT_INLINE I l(const uint8_t *const p) noexcept { return (I)((uint64_t)p[0] | ((uint64_t)p[1] << 8U) | ((uint64_t)p[2] << 16U) | ((uint64_t)p[3] << 24U) | ((uint64_t)p[4] << 32U) | ((uint64_t)p[5] << 40U) | ((uint64_t)p[6] << 48U) | ((uint64_t)p[7]) << 56U); } }; /** diff --git a/core/VL1.cpp b/core/VL1.cpp index c209ff00a..e65007be9 100644 --- a/core/VL1.cpp +++ b/core/VL1.cpp @@ -38,10 +38,7 @@ struct p_SalsaPolyCopyFunction { Poly1305 poly1305; unsigned int hdrRemaining; - ZT_INLINE p_SalsaPolyCopyFunction(const void *salsaKey, const void *salsaIv) - : s20(salsaKey, salsaIv) - , poly1305() - , hdrRemaining(ZT_PROTO_PACKET_ENCRYPTED_SECTION_START) + ZT_INLINE p_SalsaPolyCopyFunction(const void *salsaKey, const void *salsaIv) : s20(salsaKey, salsaIv), poly1305(), hdrRemaining(ZT_PROTO_PACKET_ENCRYPTED_SECTION_START) { uint8_t macKey[ZT_POLY1305_KEY_SIZE]; s20.crypt12(Utils::ZERO256, macKey, ZT_POLY1305_KEY_SIZE); @@ -67,9 +64,7 @@ struct p_PolyCopyFunction { Poly1305 poly1305; unsigned int hdrRemaining; - ZT_INLINE p_PolyCopyFunction(const void *salsaKey, const void *salsaIv) - : poly1305() - , hdrRemaining(ZT_PROTO_PACKET_ENCRYPTED_SECTION_START) + ZT_INLINE p_PolyCopyFunction(const void *salsaKey, const void *salsaIv) : poly1305(), hdrRemaining(ZT_PROTO_PACKET_ENCRYPTED_SECTION_START) { uint8_t macKey[ZT_POLY1305_KEY_SIZE]; Salsa20(salsaKey, salsaIv).crypt12(Utils::ZERO256, macKey, ZT_POLY1305_KEY_SIZE); @@ -95,9 +90,7 @@ struct p_PolyCopyFunction { VL1::VL1(const Context &ctx) : m_ctx(ctx) {} -void VL1::onRemotePacket( - CallContext &cc, const int64_t localSocket, const InetAddress &fromAddr, SharedPtr &data, - const unsigned int len) noexcept +void VL1::onRemotePacket(CallContext &cc, const int64_t localSocket, const InetAddress &fromAddr, SharedPtr &data, const unsigned int len) noexcept { const SharedPtr path(m_ctx.topology->path(localSocket, fromAddr)); @@ -115,8 +108,7 @@ void VL1::onRemotePacket( static_assert((ZT_PROTO_PACKET_ID_INDEX + sizeof(uint64_t)) < ZT_PROTO_MIN_FRAGMENT_LENGTH, "overflow"); const uint64_t packetId = Utils::loadMachineEndian(data->unsafeData + ZT_PROTO_PACKET_ID_INDEX); - static_assert( - (ZT_PROTO_PACKET_DESTINATION_INDEX + ZT_ADDRESS_LENGTH) < ZT_PROTO_MIN_FRAGMENT_LENGTH, "overflow"); + static_assert((ZT_PROTO_PACKET_DESTINATION_INDEX + ZT_ADDRESS_LENGTH) < ZT_PROTO_MIN_FRAGMENT_LENGTH, "overflow"); const Address destination(data->unsafeData + ZT_PROTO_PACKET_DESTINATION_INDEX); if (destination != m_ctx.identity.address()) { m_relay(cc, path, destination, data, len); @@ -135,9 +127,7 @@ void VL1::onRemotePacket( static_assert(ZT_PROTO_PACKET_FRAGMENT_COUNTS < ZT_PROTO_MIN_FRAGMENT_LENGTH, "overflow"); const unsigned int totalFragments = (data->unsafeData[ZT_PROTO_PACKET_FRAGMENT_COUNTS] >> 4U) & 0x0fU; const unsigned int fragmentNo = data->unsafeData[ZT_PROTO_PACKET_FRAGMENT_COUNTS] & 0x0fU; - switch (m_inputPacketAssembler.assemble( - packetId, pktv, data, ZT_PROTO_PACKET_FRAGMENT_PAYLOAD_START_AT, - len - ZT_PROTO_PACKET_FRAGMENT_PAYLOAD_START_AT, fragmentNo, totalFragments, cc.ticks, path)) { + switch (m_inputPacketAssembler.assemble(packetId, pktv, data, ZT_PROTO_PACKET_FRAGMENT_PAYLOAD_START_AT, len - ZT_PROTO_PACKET_FRAGMENT_PAYLOAD_START_AT, fragmentNo, totalFragments, cc.ticks, path)) { case Defragmenter::COMPLETE: break; default: // case Defragmenter::OK: @@ -195,22 +185,16 @@ void VL1::onRemotePacket( int pktSize = 0; static_assert(ZT_PROTO_PACKET_VERB_INDEX < ZT_PROTO_MIN_PACKET_LENGTH, "overflow"); - if (unlikely( - ((cipher == ZT_PROTO_CIPHER_POLY1305_NONE) || (cipher == ZT_PROTO_CIPHER_NONE)) - && ((hdr[ZT_PROTO_PACKET_VERB_INDEX] & ZT_PROTO_VERB_MASK) == Protocol::VERB_HELLO))) { + if (unlikely(((cipher == ZT_PROTO_CIPHER_POLY1305_NONE) || (cipher == ZT_PROTO_CIPHER_NONE)) && ((hdr[ZT_PROTO_PACKET_VERB_INDEX] & ZT_PROTO_VERB_MASK) == Protocol::VERB_HELLO))) { // Handle unencrypted HELLO packets. pktSize = pktv.mergeCopy(*pkt); if (unlikely(pktSize < ZT_PROTO_MIN_PACKET_LENGTH)) { - ZT_SPEW( - "discarding packet %.16llx from %s(%s): assembled packet size: %d", packetId, - source.toString().c_str(), fromAddr.toString().c_str(), pktSize); + ZT_SPEW("discarding packet %.16llx from %s(%s): assembled packet size: %d", packetId, source.toString().c_str(), fromAddr.toString().c_str(), pktSize); return; } const SharedPtr peer(m_HELLO(cc, path, *pkt, pktSize)); if (likely(peer)) - peer->received( - m_ctx, cc, path, hops, packetId, pktSize - ZT_PROTO_PACKET_PAYLOAD_START, Protocol::VERB_HELLO, - Protocol::VERB_NOP); + peer->received(m_ctx, cc, path, hops, packetId, pktSize - ZT_PROTO_PACKET_PAYLOAD_START, Protocol::VERB_HELLO, Protocol::VERB_NOP); return; } @@ -229,9 +213,7 @@ void VL1::onRemotePacket( pktSize = pktv.mergeMap(*pkt, ZT_PROTO_PACKET_ENCRYPTED_SECTION_START, s20cf); if (unlikely(pktSize < ZT_PROTO_MIN_PACKET_LENGTH)) { - ZT_SPEW( - "discarding packet %.16llx from %s(%s): assembled packet size: %d", packetId, - source.toString().c_str(), fromAddr.toString().c_str(), pktSize); + ZT_SPEW("discarding packet %.16llx from %s(%s): assembled packet size: %d", packetId, source.toString().c_str(), fromAddr.toString().c_str(), pktSize); return; } @@ -239,12 +221,8 @@ void VL1::onRemotePacket( s20cf.poly1305.finish(mac); static_assert((ZT_PROTO_PACKET_MAC_INDEX + 8) < ZT_PROTO_MIN_PACKET_LENGTH, "overflow"); if (unlikely(Utils::loadMachineEndian(hdr + ZT_PROTO_PACKET_MAC_INDEX) != mac[0])) { - ZT_SPEW( - "discarding packet %.16llx from %s(%s): packet MAC failed (none/poly1305)", packetId, - source.toString().c_str(), fromAddr.toString().c_str()); - m_ctx.t->incomingPacketDropped( - cc, 0xcc89c812, packetId, 0, peer->identity(), path->address(), hops, Protocol::VERB_NOP, - ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); + ZT_SPEW("discarding packet %.16llx from %s(%s): packet MAC failed (none/poly1305)", packetId, source.toString().c_str(), fromAddr.toString().c_str()); + m_ctx.t->incomingPacketDropped(cc, 0xcc89c812, packetId, 0, peer->identity(), path->address(), hops, Protocol::VERB_NOP, ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); return; } @@ -256,12 +234,9 @@ void VL1::onRemotePacket( Protocol::salsa2012DeriveKey(peer->rawIdentityKey(), perPacketKey, *pktv[0].b, pktv.totalSize()); p_SalsaPolyCopyFunction s20cf(perPacketKey, &packetId); - pktSize = - pktv.mergeMap(*pkt, ZT_PROTO_PACKET_ENCRYPTED_SECTION_START, s20cf); + pktSize = pktv.mergeMap(*pkt, ZT_PROTO_PACKET_ENCRYPTED_SECTION_START, s20cf); if (unlikely(pktSize < ZT_PROTO_MIN_PACKET_LENGTH)) { - ZT_SPEW( - "discarding packet %.16llx from %s(%s): assembled packet size: %d", packetId, - source.toString().c_str(), fromAddr.toString().c_str(), pktSize); + ZT_SPEW("discarding packet %.16llx from %s(%s): assembled packet size: %d", packetId, source.toString().c_str(), fromAddr.toString().c_str(), pktSize); return; } @@ -269,12 +244,8 @@ void VL1::onRemotePacket( s20cf.poly1305.finish(mac); static_assert((ZT_PROTO_PACKET_MAC_INDEX + 8) < ZT_PROTO_MIN_PACKET_LENGTH, "overflow"); if (unlikely(Utils::loadMachineEndian(hdr + ZT_PROTO_PACKET_MAC_INDEX) != mac[0])) { - ZT_SPEW( - "discarding packet %.16llx from %s(%s): packet MAC failed (salsa/poly1305)", packetId, - source.toString().c_str(), fromAddr.toString().c_str()); - m_ctx.t->incomingPacketDropped( - cc, 0xcc89c812, packetId, 0, peer->identity(), path->address(), hops, Protocol::VERB_NOP, - ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); + ZT_SPEW("discarding packet %.16llx from %s(%s): packet MAC failed (salsa/poly1305)", packetId, source.toString().c_str(), fromAddr.toString().c_str()); + m_ctx.t->incomingPacketDropped(cc, 0xcc89c812, packetId, 0, peer->identity(), path->address(), hops, Protocol::VERB_NOP, ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); return; } @@ -289,11 +260,7 @@ void VL1::onRemotePacket( // TODO } break; - default: - m_ctx.t->incomingPacketDropped( - cc, 0x5b001099, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, - Protocol::VERB_NOP, ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); - return; + default: m_ctx.t->incomingPacketDropped(cc, 0x5b001099, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_NOP, ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); return; } } @@ -310,9 +277,7 @@ void VL1::onRemotePacket( // TODO: should take instance ID into account here once that is fully implemented. if (unlikely(peer->deduplicateIncomingPacket(packetId))) { - ZT_SPEW( - "discarding packet %.16llx from %s(%s): duplicate!", packetId, source.toString().c_str(), - fromAddr.toString().c_str()); + ZT_SPEW("discarding packet %.16llx from %s(%s): duplicate!", packetId, source.toString().c_str(), fromAddr.toString().c_str()); return; } @@ -326,28 +291,19 @@ void VL1::onRemotePacket( if (((verbFlags & ZT_PROTO_VERB_FLAG_COMPRESSED) != 0) && (pktSize > ZT_PROTO_PACKET_PAYLOAD_START)) { SharedPtr dec(new Buf()); Utils::copy(dec->unsafeData, pkt->unsafeData); - const int uncompressedLen = LZ4_decompress_safe( - reinterpret_cast(pkt->unsafeData + ZT_PROTO_PACKET_PAYLOAD_START), - reinterpret_cast(dec->unsafeData + ZT_PROTO_PACKET_PAYLOAD_START), - pktSize - ZT_PROTO_PACKET_PAYLOAD_START, ZT_BUF_MEM_SIZE - ZT_PROTO_PACKET_PAYLOAD_START); - if (likely( - (uncompressedLen >= 0) - && (uncompressedLen <= (ZT_BUF_MEM_SIZE - ZT_PROTO_PACKET_PAYLOAD_START)))) { + const int uncompressedLen = LZ4_decompress_safe(reinterpret_cast(pkt->unsafeData + ZT_PROTO_PACKET_PAYLOAD_START), reinterpret_cast(dec->unsafeData + ZT_PROTO_PACKET_PAYLOAD_START), pktSize - ZT_PROTO_PACKET_PAYLOAD_START, ZT_BUF_MEM_SIZE - ZT_PROTO_PACKET_PAYLOAD_START); + if (likely((uncompressedLen >= 0) && (uncompressedLen <= (ZT_BUF_MEM_SIZE - ZT_PROTO_PACKET_PAYLOAD_START)))) { pkt.swap(dec); ZT_SPEW("decompressed packet: %d -> %d", pktSize, ZT_PROTO_PACKET_PAYLOAD_START + uncompressedLen); pktSize = ZT_PROTO_PACKET_PAYLOAD_START + uncompressedLen; } else { - m_ctx.t->incomingPacketDropped( - cc, 0xee9e4392, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, verb, - ZT_TRACE_PACKET_DROP_REASON_INVALID_COMPRESSED_DATA); + m_ctx.t->incomingPacketDropped(cc, 0xee9e4392, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, verb, ZT_TRACE_PACKET_DROP_REASON_INVALID_COMPRESSED_DATA); return; } } - ZT_SPEW( - "%s from %s(%s) (%d bytes)", Protocol::verbName(verb), source.toString().c_str(), - fromAddr.toString().c_str(), pktSize); + ZT_SPEW("%s from %s(%s) (%d bytes)", Protocol::verbName(verb), source.toString().c_str(), fromAddr.toString().c_str(), pktSize); // NOTE: HELLO is normally sent in the clear (in terms of our usual AEAD modes) and is handled // above. We will try to process it here, but if so it'll still get re-authenticated via HELLO's @@ -363,51 +319,24 @@ void VL1::onRemotePacket( case Protocol::VERB_OK: ok = m_OK(cc, packetId, auth, path, peer, *pkt, pktSize, inReVerb); break; case Protocol::VERB_WHOIS: ok = m_WHOIS(cc, packetId, auth, path, peer, *pkt, pktSize); break; case Protocol::VERB_RENDEZVOUS: ok = m_RENDEZVOUS(cc, packetId, auth, path, peer, *pkt, pktSize); break; - case Protocol::VERB_FRAME: - ok = m_ctx.vl2->m_FRAME(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_EXT_FRAME: - ok = m_ctx.vl2->m_EXT_FRAME(cc, packetId, auth, path, peer, *pkt, pktSize); - break; + case Protocol::VERB_FRAME: ok = m_ctx.vl2->m_FRAME(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_EXT_FRAME: ok = m_ctx.vl2->m_EXT_FRAME(cc, packetId, auth, path, peer, *pkt, pktSize); break; case Protocol::VERB_ECHO: ok = m_ECHO(cc, packetId, auth, path, peer, *pkt, pktSize); break; - case Protocol::VERB_MULTICAST_LIKE: - ok = m_ctx.vl2->m_MULTICAST_LIKE(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_NETWORK_CREDENTIALS: - ok = m_ctx.vl2->m_NETWORK_CREDENTIALS(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_NETWORK_CONFIG_REQUEST: - ok = m_ctx.vl2->m_NETWORK_CONFIG_REQUEST(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_NETWORK_CONFIG: - ok = m_ctx.vl2->m_NETWORK_CONFIG(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_MULTICAST_GATHER: - ok = m_ctx.vl2->m_MULTICAST_GATHER(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_MULTICAST_FRAME_deprecated: - ok = m_ctx.vl2->m_MULTICAST_FRAME_deprecated(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_PUSH_DIRECT_PATHS: - ok = m_PUSH_DIRECT_PATHS(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_USER_MESSAGE: - ok = m_USER_MESSAGE(cc, packetId, auth, path, peer, *pkt, pktSize); - break; - case Protocol::VERB_MULTICAST: - ok = m_ctx.vl2->m_MULTICAST(cc, packetId, auth, path, peer, *pkt, pktSize); - break; + case Protocol::VERB_MULTICAST_LIKE: ok = m_ctx.vl2->m_MULTICAST_LIKE(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_NETWORK_CREDENTIALS: ok = m_ctx.vl2->m_NETWORK_CREDENTIALS(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_NETWORK_CONFIG_REQUEST: ok = m_ctx.vl2->m_NETWORK_CONFIG_REQUEST(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_NETWORK_CONFIG: ok = m_ctx.vl2->m_NETWORK_CONFIG(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_MULTICAST_GATHER: ok = m_ctx.vl2->m_MULTICAST_GATHER(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_MULTICAST_FRAME_deprecated: ok = m_ctx.vl2->m_MULTICAST_FRAME_deprecated(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_PUSH_DIRECT_PATHS: ok = m_PUSH_DIRECT_PATHS(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_USER_MESSAGE: ok = m_USER_MESSAGE(cc, packetId, auth, path, peer, *pkt, pktSize); break; + case Protocol::VERB_MULTICAST: ok = m_ctx.vl2->m_MULTICAST(cc, packetId, auth, path, peer, *pkt, pktSize); break; case Protocol::VERB_ENCAP: ok = m_ENCAP(cc, packetId, auth, path, peer, *pkt, pktSize); break; - default: - m_ctx.t->incomingPacketDropped( - cc, 0xeeeeeff0, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, verb, - ZT_TRACE_PACKET_DROP_REASON_UNRECOGNIZED_VERB); - break; + default: m_ctx.t->incomingPacketDropped(cc, 0xeeeeeff0, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, verb, ZT_TRACE_PACKET_DROP_REASON_UNRECOGNIZED_VERB); break; } if (likely(ok)) - peer->received( - m_ctx, cc, path, hops, packetId, pktSize - ZT_PROTO_PACKET_PAYLOAD_START, verb, inReVerb); + peer->received(m_ctx, cc, path, hops, packetId, pktSize - ZT_PROTO_PACKET_PAYLOAD_START, verb, inReVerb); } else { // If decryption and authentication were not successful, try to look up identities. @@ -431,15 +360,11 @@ void VL1::onRemotePacket( } } catch (...) { - m_ctx.t->unexpectedError( - cc, 0xea1b6dea, "unexpected exception in onRemotePacket() parsing packet from %s", - path->address().toString().c_str()); + m_ctx.t->unexpectedError(cc, 0xea1b6dea, "unexpected exception in onRemotePacket() parsing packet from %s", path->address().toString().c_str()); } } -void VL1::m_relay(CallContext &cc, const SharedPtr &path, Address destination, SharedPtr &pkt, int pktSize) -{ -} +void VL1::m_relay(CallContext &cc, const SharedPtr &path, Address destination, SharedPtr &pkt, int pktSize) {} void VL1::m_sendPendingWhois(CallContext &cc) { @@ -468,8 +393,7 @@ void VL1::m_sendPendingWhois(CallContext &cc) Vector
::iterator a(toSend.begin()); while (a != toSend.end()) { const uint64_t packetId = key.nextMessage(m_ctx.identity.address(), root->address()); - int p = - Protocol::newPacket(outp, packetId, root->address(), m_ctx.identity.address(), Protocol::VERB_WHOIS); + int p = Protocol::newPacket(outp, packetId, root->address(), m_ctx.identity.address(), Protocol::VERB_WHOIS); while ((a != toSend.end()) && (p < (sizeof(outp) - ZT_ADDRESS_LENGTH))) { a->copyTo(outp + p); ++a; @@ -489,9 +413,7 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & const uint8_t protoVersion = pkt.lI8(); if (unlikely(protoVersion < ZT_PROTO_VERSION_MIN)) { - m_ctx.t->incomingPacketDropped( - cc, 0x907a9891, packetId, 0, Identity::NIL, path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_PEER_TOO_OLD); + m_ctx.t->incomingPacketDropped(cc, 0x907a9891, packetId, 0, Identity::NIL, path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_PEER_TOO_OLD); return SharedPtr(); } const unsigned int versionMajor = pkt.lI8(); @@ -504,15 +426,11 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & // Get identity and verify that it matches the sending address in the packet. Identity id; if (unlikely(pkt.rO(ii, id) < 0)) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9810, packetId, 0, Identity::NIL, path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); + m_ctx.t->incomingPacketDropped(cc, 0x707a9810, packetId, 0, Identity::NIL, path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); return SharedPtr(); } if (unlikely(id.address() != Address(pkt.unsafeData + ZT_PROTO_PACKET_SOURCE_INDEX))) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9010, packetId, 0, Identity::NIL, path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); + m_ctx.t->incomingPacketDropped(cc, 0x707a9010, packetId, 0, Identity::NIL, path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); return SharedPtr(); } @@ -520,30 +438,22 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & SharedPtr peer(m_ctx.topology->peer(cc, id.address(), true)); if (peer) { if (unlikely(peer->identity() != id)) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9891, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); + m_ctx.t->incomingPacketDropped(cc, 0x707a9891, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); return SharedPtr(); } if (unlikely(peer->deduplicateIncomingPacket(packetId))) { - ZT_SPEW( - "discarding packet %.16llx from %s(%s): duplicate!", packetId, id.address().toString().c_str(), - path->address().toString().c_str()); + ZT_SPEW("discarding packet %.16llx from %s(%s): duplicate!", packetId, id.address().toString().c_str(), path->address().toString().c_str()); return SharedPtr(); } } else { if (unlikely(!id.locallyValidate())) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9892, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); + m_ctx.t->incomingPacketDropped(cc, 0x707a9892, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); return SharedPtr(); } peer.set(new Peer()); if (unlikely(!peer->init(m_ctx, cc, id))) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9893, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_UNSPECIFIED); + m_ctx.t->incomingPacketDropped(cc, 0x707a9893, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_UNSPECIFIED); return SharedPtr(); } peer = m_ctx.topology->add(cc, peer); @@ -559,9 +469,7 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & // field is ignored, and eventually it'll be undefined. uint8_t hmac[ZT_HMACSHA384_LEN]; if (unlikely(packetSize < ZT_HMACSHA384_LEN)) { - m_ctx.t->incomingPacketDropped( - cc, 0xab9c9891, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); + m_ctx.t->incomingPacketDropped(cc, 0xab9c9891, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); return SharedPtr(); } packetSize -= ZT_HMACSHA384_LEN; @@ -569,9 +477,7 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & Utils::storeMachineEndian(pkt.unsafeData + ZT_PROTO_PACKET_MAC_INDEX, 0); // set MAC field to 0 HMACSHA384(peer->identityHelloHmacKey(), pkt.unsafeData, packetSize, hmac); if (unlikely(!Utils::secureEq(hmac, pkt.unsafeData + packetSize, ZT_HMACSHA384_LEN))) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9891, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); + m_ctx.t->incomingPacketDropped(cc, 0x707a9891, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); return SharedPtr(); } } @@ -583,22 +489,16 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & uint8_t macKey[ZT_POLY1305_KEY_SIZE]; Salsa20(perPacketKey, &packetId).crypt12(Utils::ZERO256, macKey, ZT_POLY1305_KEY_SIZE); Poly1305 poly1305(macKey); - poly1305.update( - pkt.unsafeData + ZT_PROTO_PACKET_ENCRYPTED_SECTION_START, - packetSize - ZT_PROTO_PACKET_ENCRYPTED_SECTION_START); + poly1305.update(pkt.unsafeData + ZT_PROTO_PACKET_ENCRYPTED_SECTION_START, packetSize - ZT_PROTO_PACKET_ENCRYPTED_SECTION_START); uint64_t polyMac[2]; poly1305.finish(polyMac); if (unlikely(mac != polyMac[0])) { - m_ctx.t->incomingPacketDropped( - cc, 0x11bfff82, packetId, 0, id, path->address(), hops, Protocol::VERB_NOP, - ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); + m_ctx.t->incomingPacketDropped(cc, 0x11bfff82, packetId, 0, id, path->address(), hops, Protocol::VERB_NOP, ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); return SharedPtr(); } } else { - m_ctx.t->incomingPacketDropped( - cc, 0x11bfff81, packetId, 0, id, path->address(), hops, Protocol::VERB_NOP, - ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); + m_ctx.t->incomingPacketDropped(cc, 0x11bfff81, packetId, 0, id, path->address(), hops, Protocol::VERB_NOP, ZT_TRACE_PACKET_DROP_REASON_MAC_FAILED); return SharedPtr(); } } @@ -609,9 +509,7 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & InetAddress sentTo; if (unlikely(pkt.rO(ii, sentTo) < 0)) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9811, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); + m_ctx.t->incomingPacketDropped(cc, 0x707a9811, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); return SharedPtr(); } @@ -631,16 +529,12 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & ii += 2; // skip reserved field const unsigned int dictSize = pkt.rI16(ii); if (unlikely((ii + dictSize) > packetSize)) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9815, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); + m_ctx.t->incomingPacketDropped(cc, 0x707a9815, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); return peer; } Dictionary md; if (!md.decode(pkt.unsafeData + ii, dictSize)) { - m_ctx.t->incomingPacketDropped( - cc, 0x707a9816, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, - ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); + m_ctx.t->incomingPacketDropped(cc, 0x707a9816, packetId, 0, identityFromPeerPtr(peer), path->address(), hops, Protocol::VERB_HELLO, ZT_TRACE_PACKET_DROP_REASON_INVALID_OBJECT); return peer; } @@ -650,9 +544,7 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & } } - Protocol::newPacket( - pkt, key.nextMessage(m_ctx.identity.address(), peer->address()), peer->address(), m_ctx.identity.address(), - Protocol::VERB_OK); + Protocol::newPacket(pkt, key.nextMessage(m_ctx.identity.address(), peer->address()), peer->address(), m_ctx.identity.address(), Protocol::VERB_OK); ii = ZT_PROTO_PACKET_PAYLOAD_START; pkt.wI8(ii, Protocol::VERB_HELLO); pkt.wI64(ii, packetId); @@ -681,9 +573,7 @@ SharedPtr VL1::m_HELLO(CallContext &cc, const SharedPtr &path, Buf & return peer; } -bool VL1::m_ERROR( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - const SharedPtr &peer, Buf &pkt, int packetSize, Protocol::Verb &inReVerb) +bool VL1::m_ERROR(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize, Protocol::Verb &inReVerb) { #if 0 if (packetSize < (int)sizeof(Protocol::ERROR::Header)) { @@ -730,31 +620,23 @@ bool VL1::m_ERROR( #endif } -bool VL1::m_OK( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - const SharedPtr &peer, Buf &pkt, int packetSize, Protocol::Verb &inReVerb) +bool VL1::m_OK(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize, Protocol::Verb &inReVerb) { int ii = ZT_PROTO_PACKET_PAYLOAD_START + 13; inReVerb = (Protocol::Verb)pkt.rI8(ii); const uint64_t inRePacketId = pkt.rI64(ii); if (unlikely(Buf::readOverflow(ii, packetSize))) { - m_ctx.t->incomingPacketDropped( - cc, 0x4c1f1ff7, packetId, 0, identityFromPeerPtr(peer), path->address(), 0, Protocol::VERB_OK, - ZT_TRACE_PACKET_DROP_REASON_MALFORMED_PACKET); + m_ctx.t->incomingPacketDropped(cc, 0x4c1f1ff7, packetId, 0, identityFromPeerPtr(peer), path->address(), 0, Protocol::VERB_OK, ZT_TRACE_PACKET_DROP_REASON_MALFORMED_PACKET); return false; } if (unlikely(!m_ctx.expect->expecting(inRePacketId, cc.ticks))) { - m_ctx.t->incomingPacketDropped( - cc, 0x4c1f1ff8, packetId, 0, identityFromPeerPtr(peer), path->address(), 0, Protocol::VERB_OK, - ZT_TRACE_PACKET_DROP_REASON_REPLY_NOT_EXPECTED); + m_ctx.t->incomingPacketDropped(cc, 0x4c1f1ff8, packetId, 0, identityFromPeerPtr(peer), path->address(), 0, Protocol::VERB_OK, ZT_TRACE_PACKET_DROP_REASON_REPLY_NOT_EXPECTED); return false; } - ZT_SPEW( - "got OK in-re %s (packet ID %.16llx) from %s(%s)", Protocol::verbName(inReVerb), inRePacketId, - peer->address().toString().c_str(), path->address().toString().c_str()); + ZT_SPEW("got OK in-re %s (packet ID %.16llx) from %s(%s)", Protocol::verbName(inReVerb), inRePacketId, peer->address().toString().c_str(), path->address().toString().c_str()); switch (inReVerb) { case Protocol::VERB_HELLO: break; @@ -769,9 +651,7 @@ bool VL1::m_OK( return true; } -bool VL1::m_WHOIS( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - const SharedPtr &peer, Buf &pkt, int packetSize) +bool VL1::m_WHOIS(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize) { #if 0 if (packetSize < (int)sizeof(Protocol::OK::Header)) { @@ -825,9 +705,7 @@ bool VL1::m_WHOIS( #endif } -bool VL1::m_RENDEZVOUS( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - const SharedPtr &peer, Buf &pkt, int packetSize) +bool VL1::m_RENDEZVOUS(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize) { #if 0 if (RR->topology->isRoot(peer->identity())) { @@ -875,9 +753,7 @@ bool VL1::m_RENDEZVOUS( #endif } -bool VL1::m_ECHO( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - const SharedPtr &peer, Buf &pkt, int packetSize) +bool VL1::m_ECHO(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize) { #if 0 const uint64_t packetId = Protocol::packetId(pkt,packetSize); @@ -915,9 +791,7 @@ bool VL1::m_ECHO( #endif } -bool VL1::m_PUSH_DIRECT_PATHS( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - const SharedPtr &peer, Buf &pkt, int packetSize) +bool VL1::m_PUSH_DIRECT_PATHS(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize) { #if 0 if (packetSize < (int)sizeof(Protocol::PUSH_DIRECT_PATHS)) { @@ -1008,17 +882,13 @@ bool VL1::m_PUSH_DIRECT_PATHS( #endif } -bool VL1::m_USER_MESSAGE( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - const SharedPtr &peer, Buf &pkt, int packetSize) +bool VL1::m_USER_MESSAGE(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize) { // TODO return true; } -bool VL1::m_ENCAP( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - const SharedPtr &peer, Buf &pkt, int packetSize) +bool VL1::m_ENCAP(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize) { // TODO: not implemented yet return true; diff --git a/core/VL1.hpp b/core/VL1.hpp index 0f862caf8..30cc5c68f 100644 --- a/core/VL1.hpp +++ b/core/VL1.hpp @@ -61,38 +61,20 @@ class VL1 { * @param data Packet data * @param len Packet length */ - void onRemotePacket( - CallContext &cc, int64_t localSocket, const InetAddress &fromAddr, SharedPtr &data, - unsigned int len) noexcept; + void onRemotePacket(CallContext &cc, int64_t localSocket, const InetAddress &fromAddr, SharedPtr &data, unsigned int len) noexcept; private: void m_relay(CallContext &cc, const SharedPtr &path, Address destination, SharedPtr &pkt, int pktSize); void m_sendPendingWhois(CallContext &cc); SharedPtr m_HELLO(CallContext &cc, const SharedPtr &path, Buf &pkt, int packetSize); - bool m_ERROR( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, - Buf &pkt, int packetSize, Protocol::Verb &inReVerb); - bool m_OK( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, - Buf &pkt, int packetSize, Protocol::Verb &inReVerb); - bool m_WHOIS( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_RENDEZVOUS( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_ECHO( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_PUSH_DIRECT_PATHS( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_USER_MESSAGE( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_ENCAP( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, - Buf &pkt, int packetSize); + bool m_ERROR(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize, Protocol::Verb &inReVerb); + bool m_OK(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize, Protocol::Verb &inReVerb); + bool m_WHOIS(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize); + bool m_RENDEZVOUS(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize); + bool m_ECHO(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize); + bool m_PUSH_DIRECT_PATHS(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize); + bool m_USER_MESSAGE(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize); + bool m_ENCAP(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, const SharedPtr &peer, Buf &pkt, int packetSize); const Context &m_ctx; diff --git a/core/VL2.cpp b/core/VL2.cpp index 8ac6cdd98..0f9deec04 100644 --- a/core/VL2.cpp +++ b/core/VL2.cpp @@ -25,64 +25,24 @@ namespace ZeroTier { VL2::VL2(const Context &ctx) : m_ctx(ctx) {} -void VL2::onLocalEthernet( - CallContext &cc, const SharedPtr &network, const MAC &from, const MAC &to, const unsigned int etherType, - unsigned int vlanId, SharedPtr &data, unsigned int len) -{ -} +void VL2::onLocalEthernet(CallContext &cc, const SharedPtr &network, const MAC &from, const MAC &to, const unsigned int etherType, unsigned int vlanId, SharedPtr &data, unsigned int len) {} -bool VL2::m_FRAME( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_FRAME(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} -bool VL2::m_EXT_FRAME( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_EXT_FRAME(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} -bool VL2::m_MULTICAST_LIKE( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_MULTICAST_LIKE(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} -bool VL2::m_NETWORK_CREDENTIALS( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_NETWORK_CREDENTIALS(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} -bool VL2::m_NETWORK_CONFIG_REQUEST( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_NETWORK_CONFIG_REQUEST(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} -bool VL2::m_NETWORK_CONFIG( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_NETWORK_CONFIG(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} -bool VL2::m_MULTICAST_GATHER( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_MULTICAST_GATHER(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} -bool VL2::m_MULTICAST_FRAME_deprecated( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_MULTICAST_FRAME_deprecated(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} -bool VL2::m_MULTICAST( - CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, - SharedPtr &peer, Buf &pkt, int packetSize) -{ -} +bool VL2::m_MULTICAST(CallContext &cc, const uint64_t packetId, const unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize) {} } // namespace ZeroTier diff --git a/core/VL2.hpp b/core/VL2.hpp index 6133013e2..001ddd54c 100644 --- a/core/VL2.hpp +++ b/core/VL2.hpp @@ -49,38 +49,18 @@ class VL2 { * @param data Ethernet payload * @param len Frame length */ - void onLocalEthernet( - CallContext &cc, const SharedPtr &network, const MAC &from, const MAC &to, unsigned int etherType, - unsigned int vlanId, SharedPtr &data, unsigned int len); + void onLocalEthernet(CallContext &cc, const SharedPtr &network, const MAC &from, const MAC &to, unsigned int etherType, unsigned int vlanId, SharedPtr &data, unsigned int len); protected: - bool m_FRAME( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_EXT_FRAME( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_MULTICAST_LIKE( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_NETWORK_CREDENTIALS( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_NETWORK_CONFIG_REQUEST( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_NETWORK_CONFIG( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_MULTICAST_GATHER( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_MULTICAST_FRAME_deprecated( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); - bool m_MULTICAST( - CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, - Buf &pkt, int packetSize); + bool m_FRAME(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); + bool m_EXT_FRAME(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); + bool m_MULTICAST_LIKE(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); + bool m_NETWORK_CREDENTIALS(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); + bool m_NETWORK_CONFIG_REQUEST(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); + bool m_NETWORK_CONFIG(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); + bool m_MULTICAST_GATHER(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); + bool m_MULTICAST_FRAME_deprecated(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); + bool m_MULTICAST(CallContext &cc, uint64_t packetId, unsigned int auth, const SharedPtr &path, SharedPtr &peer, Buf &pkt, int packetSize); private: const Context &m_ctx; diff --git a/core/zerotier.h b/core/zerotier.h index 7f1eda5ed..ed8e75488 100644 --- a/core/zerotier.h +++ b/core/zerotier.h @@ -803,14 +803,7 @@ typedef struct { /** * Credential type IDs */ -enum ZT_CredentialType { - ZT_CREDENTIAL_TYPE_NULL = 0, - ZT_CREDENTIAL_TYPE_COM = 1, - ZT_CREDENTIAL_TYPE_CAPABILITY = 2, - ZT_CREDENTIAL_TYPE_TAG = 3, - ZT_CREDENTIAL_TYPE_COO = 4, - ZT_CREDENTIAL_TYPE_REVOCATION = 6 -}; +enum ZT_CredentialType { ZT_CREDENTIAL_TYPE_NULL = 0, ZT_CREDENTIAL_TYPE_COM = 1, ZT_CREDENTIAL_TYPE_CAPABILITY = 2, ZT_CREDENTIAL_TYPE_TAG = 3, ZT_CREDENTIAL_TYPE_COO = 4, ZT_CREDENTIAL_TYPE_REVOCATION = 6 }; /** * Endpoint address and protocol types @@ -908,12 +901,7 @@ enum ZT_TraceFrameDropReason { /** * Reasons for credential rejection */ -enum ZT_TraceCredentialRejectionReason { - ZT_TRACE_CREDENTIAL_REJECTION_REASON_SIGNATURE_VERIFICATION_FAILED = 1, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_REVOKED = 2, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_OLDER_THAN_LATEST = 3, - ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID = 4 -}; +enum ZT_TraceCredentialRejectionReason { ZT_TRACE_CREDENTIAL_REJECTION_REASON_SIGNATURE_VERIFICATION_FAILED = 1, ZT_TRACE_CREDENTIAL_REJECTION_REASON_REVOKED = 2, ZT_TRACE_CREDENTIAL_REJECTION_REASON_OLDER_THAN_LATEST = 3, ZT_TRACE_CREDENTIAL_REJECTION_REASON_INVALID = 4 }; #define ZT_TRACE_FIELD_TYPE "t" #define ZT_TRACE_FIELD_CODE_LOCATION "c" @@ -1354,8 +1342,7 @@ typedef struct { uint64_t start; /* integer range start */ uint32_t end; /* end of integer range (relative to start, inclusive, 0 for equality w/start) */ uint16_t idx; /* index in packet of integer */ - uint8_t - format; /* bits in integer (range 1-64, ((format&63)+1)) and endianness (MSB 1 for little, 0 for big) */ + uint8_t format; /* bits in integer (range 1-64, ((format&63)+1)) and endianness (MSB 1 for little, 0 for big) */ } intRange; /** @@ -2157,8 +2144,7 @@ ZT_SDK_API void ZT_freeQueryResult(const void *qr); * @param callbacks Callback function configuration * @return OK (0) or error code if a fatal error condition has occurred */ -ZT_SDK_API enum ZT_ResultCode ZT_Node_new( - ZT_Node **node, int64_t clock, int64_t ticks, void *tptr, void *uptr, const struct ZT_Node_Callbacks *callbacks); +ZT_SDK_API enum ZT_ResultCode ZT_Node_new(ZT_Node **node, int64_t clock, int64_t ticks, void *tptr, void *uptr, const struct ZT_Node_Callbacks *callbacks); /** * Delete a node and free all resources it consumes @@ -2179,9 +2165,7 @@ ZT_SDK_API void ZT_Node_delete(ZT_Node *node, int64_t clock, int64_t ticks, void * @param nextBackgroundTaskDeadline Value/result: set to deadline for next call to processBackgroundTasks() * @return OK (0) or error code if a fatal error condition has occurred */ -ZT_SDK_API enum ZT_ResultCode ZT_Node_processWirePacket( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, int64_t localSocket, const ZT_InetAddress *remoteAddress, - const void *packetData, unsigned int packetLength, int isZtBuffer, volatile int64_t *nextBackgroundTaskDeadline); +ZT_SDK_API enum ZT_ResultCode ZT_Node_processWirePacket(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, int64_t localSocket, const ZT_InetAddress *remoteAddress, const void *packetData, unsigned int packetLength, int isZtBuffer, volatile int64_t *nextBackgroundTaskDeadline); /** * Process a frame from a virtual network port (tap) @@ -2197,10 +2181,7 @@ ZT_SDK_API enum ZT_ResultCode ZT_Node_processWirePacket( * @param nextBackgroundTaskDeadline Value/result: set to deadline for next call to processBackgroundTasks() * @return OK (0) or error code if a fatal error condition has occurred */ -ZT_SDK_API enum ZT_ResultCode ZT_Node_processVirtualNetworkFrame( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t sourceMac, uint64_t destMac, - unsigned int etherType, unsigned int vlanId, const void *frameData, unsigned int frameLength, int isZtBuffer, - volatile int64_t *nextBackgroundTaskDeadline); +ZT_SDK_API enum ZT_ResultCode ZT_Node_processVirtualNetworkFrame(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t sourceMac, uint64_t destMac, unsigned int etherType, unsigned int vlanId, const void *frameData, unsigned int frameLength, int isZtBuffer, volatile int64_t *nextBackgroundTaskDeadline); /** * Perform periodic background operations @@ -2209,8 +2190,7 @@ ZT_SDK_API enum ZT_ResultCode ZT_Node_processVirtualNetworkFrame( * @param nextBackgroundTaskDeadline Value/result: set to deadline for next call to processBackgroundTasks() * @return OK (0) or error code if a fatal error condition has occurred */ -ZT_SDK_API enum ZT_ResultCode ZT_Node_processBackgroundTasks( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, volatile int64_t *nextBackgroundTaskDeadline); +ZT_SDK_API enum ZT_ResultCode ZT_Node_processBackgroundTasks(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, volatile int64_t *nextBackgroundTaskDeadline); /** * Join a network @@ -2225,9 +2205,7 @@ ZT_SDK_API enum ZT_ResultCode ZT_Node_processBackgroundTasks( * @param fingerprintHash If non-NULL this is the full fingerprint of the controller * @return OK (0) or error code if a fatal error condition has occurred */ -ZT_SDK_API enum ZT_ResultCode ZT_Node_join( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void *uptr, uint64_t nwid, - const ZT_Fingerprint *controllerFingerprint); +ZT_SDK_API enum ZT_ResultCode ZT_Node_join(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void *uptr, uint64_t nwid, const ZT_Fingerprint *controllerFingerprint); /** * Leave a network @@ -2241,8 +2219,7 @@ ZT_SDK_API enum ZT_ResultCode ZT_Node_join( * * @return OK (0) or error code if a fatal error condition has occurred */ -ZT_SDK_API enum ZT_ResultCode -ZT_Node_leave(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void **uptr, uint64_t nwid); +ZT_SDK_API enum ZT_ResultCode ZT_Node_leave(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void **uptr, uint64_t nwid); /** * Subscribe to an Ethernet multicast group @@ -2268,9 +2245,7 @@ ZT_Node_leave(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, void **up * @param multicastAdi Multicast ADI (least significant 32 bits only, use 0 if not needed) * @return OK (0) or error code if a fatal error condition has occurred */ -ZT_SDK_API enum ZT_ResultCode ZT_Node_multicastSubscribe( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t multicastGroup, - unsigned long multicastAdi); +ZT_SDK_API enum ZT_ResultCode ZT_Node_multicastSubscribe(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi); /** * Unsubscribe from an Ethernet multicast group (or all groups) @@ -2285,9 +2260,7 @@ ZT_SDK_API enum ZT_ResultCode ZT_Node_multicastSubscribe( * @param multicastAdi Multicast ADI (least significant 32 bits only, use 0 if not needed) * @return OK (0) or error code if a fatal error condition has occurred */ -ZT_SDK_API enum ZT_ResultCode ZT_Node_multicastUnsubscribe( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t multicastGroup, - unsigned long multicastAdi); +ZT_SDK_API enum ZT_ResultCode ZT_Node_multicastUnsubscribe(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi); /** * Get this node's 40-bit ZeroTier address @@ -2332,8 +2305,7 @@ ZT_SDK_API ZT_PeerList *ZT_Node_peers(ZT_Node *node, int64_t clock, int64_t tick * @param nwid 64-bit network ID * @return Network configuration or NULL if we are not a member of this network */ -ZT_SDK_API ZT_VirtualNetworkConfig * -ZT_Node_networkConfig(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid); +ZT_SDK_API ZT_VirtualNetworkConfig *ZT_Node_networkConfig(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t nwid); /** * Enumerate and get status of all networks @@ -2361,8 +2333,7 @@ ZT_SDK_API void ZT_Node_setNetworkUserPtr(ZT_Node *node, uint64_t nwid, void *pt * @param addrs Addresses * @param addrCount Number of items in addrs[] */ -ZT_SDK_API void ZT_Node_setInterfaceAddresses( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, const ZT_InterfaceAddress *addrs, unsigned int addrCount); +ZT_SDK_API void ZT_Node_setInterfaceAddresses(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, const ZT_InterfaceAddress *addrs, unsigned int addrCount); /** * Add a certificate to this node's certificate store @@ -2376,9 +2347,7 @@ ZT_SDK_API void ZT_Node_setInterfaceAddresses( * @param certSize Size of certificate binary data, 0 if none * @return Certificate error or ZT_CERTIFICATE_ERROR_NONE on success */ -ZT_SDK_API enum ZT_CertificateError ZT_Node_addCertificate( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, unsigned int localTrust, const ZT_Certificate *cert, - const void *certData, unsigned int certSize); +ZT_SDK_API enum ZT_CertificateError ZT_Node_addCertificate(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, unsigned int localTrust, const ZT_Certificate *cert, const void *certData, unsigned int certSize); /** * Delete a certificate from this node's certificate store @@ -2391,8 +2360,7 @@ ZT_SDK_API enum ZT_CertificateError ZT_Node_addCertificate( * @param serialNo 48-byte / 384-bit serial number of certificate to delete * @return OK (0) or error code */ -ZT_SDK_API enum ZT_ResultCode -ZT_Node_deleteCertificate(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, const void *serialNo); +ZT_SDK_API enum ZT_ResultCode ZT_Node_deleteCertificate(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, const void *serialNo); /** * List certificates installed in this node's trust store @@ -2416,9 +2384,7 @@ ZT_SDK_API ZT_CertificateList *ZT_Node_listCertificates(ZT_Node *node, int64_t c * @param len Length of data in bytes * @return Boolean: non-zero on success, zero on failure */ -ZT_SDK_API int ZT_Node_sendUserMessage( - ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t dest, uint64_t typeId, const void *data, - unsigned int len); +ZT_SDK_API int ZT_Node_sendUserMessage(ZT_Node *node, int64_t clock, int64_t ticks, void *tptr, uint64_t dest, uint64_t typeId, const void *data, unsigned int len); /** * Set a network controller instance for this node @@ -2488,8 +2454,7 @@ ZT_SDK_API int ZT_Identity_validate(const ZT_Identity *id); * @param signatureBufferLength Length of buffer (must be at least 96 bytes) * @return Length of signature in bytes or 0 on failure. */ -ZT_SDK_API unsigned int ZT_Identity_sign( - const ZT_Identity *id, const void *data, unsigned int len, void *signature, unsigned int signatureBufferLength); +ZT_SDK_API unsigned int ZT_Identity_sign(const ZT_Identity *id, const void *data, unsigned int len, void *signature, unsigned int signatureBufferLength); /** * Verify a signature @@ -2501,8 +2466,7 @@ ZT_SDK_API unsigned int ZT_Identity_sign( * @param sigLen Length of signature in bytes * @return Non-zero if signature is valid */ -ZT_SDK_API int ZT_Identity_verify( - const ZT_Identity *id, const void *data, unsigned int len, const void *signature, unsigned int sigLen); +ZT_SDK_API int ZT_Identity_verify(const ZT_Identity *id, const void *data, unsigned int len, const void *signature, unsigned int sigLen); /** * Get identity type @@ -2616,9 +2580,7 @@ ZT_SDK_API int ZT_Endpoint_fromBytes(ZT_Endpoint *ep, const void *bytes, unsigne * @param signer Identity to sign locator (must include private key) * @return Locator or NULL on error (too many endpoints or identity does not have private key) */ -ZT_SDK_API ZT_Locator *ZT_Locator_create( - int64_t rev, const ZT_Endpoint *endpoints, const ZT_EndpointAttributes *endpointAttributes, - unsigned int endpointCount, const ZT_Identity *signer); +ZT_SDK_API ZT_Locator *ZT_Locator_create(int64_t rev, const ZT_Endpoint *endpoints, const ZT_EndpointAttributes *endpointAttributes, unsigned int endpointCount, const ZT_Identity *signer); /** * Decode a serialized locator @@ -2742,9 +2704,7 @@ ZT_SDK_API void ZT_version(int *major, int *minor, int *revision, int *build); * @param privateKeySize Result parameter: set to size of private key * @return OK (0) or error */ -ZT_SDK_API int ZT_Certificate_newKeyPair( - enum ZT_CertificatePublicKeyAlgorithm type, uint8_t publicKey[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], - int *const publicKeySize, uint8_t privateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE], int *const privateKeySize); +ZT_SDK_API int ZT_Certificate_newKeyPair(enum ZT_CertificatePublicKeyAlgorithm type, uint8_t publicKey[ZT_CERTIFICATE_MAX_PUBLIC_KEY_SIZE], int *const publicKeySize, uint8_t privateKey[ZT_CERTIFICATE_MAX_PRIVATE_KEY_SIZE], int *const privateKeySize); /** * Create a new certificate signing request (CSR) @@ -2764,9 +2724,7 @@ ZT_SDK_API int ZT_Certificate_newKeyPair( * @param csrSize Value/result: size of buffer * @return OK (0) or error */ -ZT_SDK_API int ZT_Certificate_newCSR( - const ZT_Certificate_Subject *subject, const void *certificatePrivateKey, int certificatePrivateKeySize, - const void *uniqueIdPrivateKey, int uniqueIdPrivateKeySize, void *csr, int *csrSize); +ZT_SDK_API int ZT_Certificate_newCSR(const ZT_Certificate_Subject *subject, const void *certificatePrivateKey, int certificatePrivateKeySize, const void *uniqueIdPrivateKey, int uniqueIdPrivateKeySize, void *csr, int *csrSize); /** * Sign a CSR to generate a complete certificate. @@ -2783,9 +2741,7 @@ ZT_SDK_API int ZT_Certificate_newCSR( * @param issuerPrivateKeySize Size of private key in bytes * @return Signed certificate or NULL on error */ -ZT_SDK_API ZT_Certificate *ZT_Certificate_sign( - const ZT_Certificate *cert, const uint8_t issuer[ZT_CERTIFICATE_HASH_SIZE], const void *issuerPrivateKey, - int issuerPrivateKeySize); +ZT_SDK_API ZT_Certificate *ZT_Certificate_sign(const ZT_Certificate *cert, const uint8_t issuer[ZT_CERTIFICATE_HASH_SIZE], const void *issuerPrivateKey, int issuerPrivateKeySize); /** * Decode a certificate or CSR @@ -2802,8 +2758,7 @@ ZT_SDK_API ZT_Certificate *ZT_Certificate_sign( * @param verify If non-zero, verify signatures and structure * @return Certificate error, if any */ -ZT_SDK_API enum ZT_CertificateError -ZT_Certificate_decode(const ZT_Certificate **decodedCert, const void *cert, int certSize, int verify); +ZT_SDK_API enum ZT_CertificateError ZT_Certificate_decode(const ZT_Certificate **decodedCert, const void *cert, int certSize, int verify); /** * Encode a certificate @@ -2936,8 +2891,7 @@ ZT_SDK_API void ZT_InetAddress_set(ZT_InetAddress *ia, const void *saddr); * @param ipLen Length of IP: 4 or 16 for IPv4 or IPv6 * @param port IP port */ -ZT_SDK_API void -ZT_InetAddress_setIpBytes(ZT_InetAddress *ia, const void *ipBytes, unsigned int ipLen, unsigned int port); +ZT_SDK_API void ZT_InetAddress_setIpBytes(ZT_InetAddress *ia, const void *ipBytes, unsigned int ipLen, unsigned int port); /** * Set IP port @@ -3006,9 +2960,7 @@ ZT_SDK_API const int ZT_AF_INET, ZT_AF_INET6; * @param f Function to invoke with each key and (binary) value * @return Non-zero if dictionary was valid */ -ZT_SDK_API int ZT_Dictionary_parse( - const void *dict, unsigned int len, void *arg, - void (*f)(void *, const char *, unsigned int, const void *, unsigned int)); +ZT_SDK_API int ZT_Dictionary_parse(const void *dict, unsigned int len, void *arg, void (*f)(void *, const char *, unsigned int, const void *, unsigned int)); /* ---------------------------------------------------------------------------------------------------------------- */